diff --git a/Annex.hs b/Annex.hs
--- a/Annex.hs
+++ b/Annex.hs
@@ -13,6 +13,7 @@
 	AnnexRead(..),
 	new,
 	new',
+	newMaker,
 	run,
 	eval,
 	makeRunner,
@@ -296,19 +297,29 @@
 		, reposizehandle = Nothing
 		}
 
-{- Makes an Annex state object for the specified git repo.
+{- Makes an Annex state and read objects for the specified git repo.
  - Ensures the config is read, if it was not already, and performs
  - any necessary git repo fixups. -}
 new :: Git.Repo -> IO (AnnexState, AnnexRead)
 new = new' fixupRepo
 
 new' :: (Git.Repo -> GitConfig -> IO Git.Repo) -> Git.Repo -> IO (AnnexState, AnnexRead)
-new' f r = do
+new' f r = join $ newMaker' f r
+
+{- Returns an IO action which can be called repeatedly, making
+ - new Annex state and read objects each time. -}
+newMaker :: Git.Repo -> IO (IO (AnnexState, AnnexRead))
+newMaker = newMaker' fixupRepo
+
+newMaker' :: (Git.Repo -> GitConfig -> IO Git.Repo) -> Git.Repo -> IO (IO (AnnexState, AnnexRead))
+newMaker' f r = do
 	r' <- Git.Config.read r
 	let c = extractGitConfig FromGitConfig r'
-	st <- newAnnexState c =<< f r' c
-	rd <- newAnnexRead c
-	return (st, rd)
+	r'' <- f r' c
+	return $ do
+		st <- newAnnexState c r''
+		rd <- newAnnexRead c
+		return (st, rd)
 
 {- Performs an action in the Annex monad from a starting state,
  - returning a new state. -}
diff --git a/Annex/Action.hs b/Annex/Action.hs
--- a/Annex/Action.hs
+++ b/Annex/Action.hs
@@ -1,6 +1,6 @@
 {- git-annex actions
  -
- - Copyright 2010-2022 Joey Hess <id@joeyh.name>
+ - Copyright 2010-2026 Joey Hess <id@joeyh.name>
  -
  - Licensed under the GNU AGPL version 3 or higher.
  -}
@@ -23,6 +23,7 @@
 import Annex.CheckIgnore
 import Annex.TransferrerPool
 import qualified Database.Keys
+import qualified Database.RepoSize
 
 {- Runs an action that may throw exceptions, catching and displaying them. -}
 action :: Annex () -> Annex Bool
@@ -39,8 +40,8 @@
 		warning (UnquotedString (show e))
 		return (False, UnVerified)
 
-{- Rn all cleanup actions, save all state, stop all long-running child
- - processes.
+{- Rn all cleanup actions, save all state, stop long-running child
+ - processes, close file handles.
  -
  - This can be run repeatedly with other Annex actions run in between,
  - but usually it is run only once at the end.
@@ -58,8 +59,12 @@
 	saveState nocommit
 	stopCoProcesses
 	Database.Keys.closeDb
+	Database.RepoSize.closeDb
 
-{- Stops all long-running child processes, including git query processes. -}
+{- Stops long-running child processes, including git query processes. 
+ -
+ - Does not stop processes belonging to Remotes or Backends.
+ -}
 stopCoProcesses :: Annex ()
 stopCoProcesses = do
 	catFileStop
diff --git a/Annex/Magic.hs b/Annex/Magic.hs
--- a/Annex/Magic.hs
+++ b/Annex/Magic.hs
@@ -1,6 +1,6 @@
 {- Interface to libmagic
  -
- - Copyright 2019-2020 Joey Hess <id@joeyh.name>
+ - Copyright 2019-2026 Joey Hess <id@joeyh.name>
  -
  - Licensed under the GNU AGPL version 3 or higher.
  -}
@@ -13,32 +13,63 @@
 	MimeType,
 	MimeEncoding,
 	initMagicMime,
+	getMagicMime,
 	getMagicMimeType,
 	getMagicMimeEncoding,
+	parseMagicMime,
+	magicFileLocation,
 ) where
 
 import Common
 import Types.Mime
 import Control.Monad.IO.Class
+import qualified Data.ByteString as B
+import Data.Char
+import Utility.Env
+import Annex.Path
+
 #ifdef WITH_MAGICMIME
 import Magic
-import Utility.Env
-import Control.Concurrent
-import System.IO.Unsafe (unsafePerformIO)
+import qualified Data.List.NonEmpty as NE
+import qualified System.OsString.Internal as OS
 #else
 type Magic = ()
 #endif
 
+magicFileLocation :: IO (Maybe OsPath)
+magicFileLocation = 
+	gitAnnexInstallDir >>= \case
+		Nothing -> do
+#ifndef mingw32_HOST_OS
+			pure Nothing
+#else
+			-- On windows, the magic file is
+			-- in ../share/misc/ relative
+			-- to the program.
+			pd <- takeDirectory <$> programPath
+			use $
+				pd
+					</> literalOsPath ".."
+					</> literalOsPath "share"
+					</> literalOsPath "misc"
+					</> literalOsPath "magic.mgc"
+#endif
+		Just d -> use $
+			d
+				</> literalOsPath "magic"
+				</> literalOsPath "magic.mgc"
+  where
+	use p = Just . maybe p toOsPath <$> getEnv "MAGIC"
+
 initMagicMime :: IO (Maybe Magic)
 #ifdef WITH_MAGICMIME
 initMagicMime = catchMaybeIO $ do
 	m <- magicOpen [MagicMime]
-	liftIO $ getEnv "GIT_ANNEX_DIR" >>= \case
+	magicFileLocation >>= \case
 		Nothing -> magicLoadDefault m
-		Just d -> magicLoad m $ fromOsPath $
-			toOsPath d
-				</> literalOsPath "magic"
-				</> literalOsPath "magic.mgc"
+		Just d -> do
+			p <- OS.encodeFS $ fromOsPath d
+			magicLoad m $ NE.singleton p
 	return m
 #else
 initMagicMime = return Nothing
@@ -46,32 +77,21 @@
 
 getMagicMime :: Magic -> OsPath -> IO (Maybe (MimeType, MimeEncoding))
 #ifdef WITH_MAGICMIME
-getMagicMime m f = Just . parse <$> magicConcurrentSafe (magicFile m (fromOsPath f))
-  where
-	parse s = 
-		let (mimetype, rest) = separate (== ';') s
-		in case rest of
-			(' ':'c':'h':'a':'r':'s':'e':'t':'=':mimeencoding) -> 
-				(mimetype, mimeencoding)
-			_ -> (mimetype, "")
+getMagicMime m f = Just . parseMagicMime
+	<$> (magicFile m =<< OS.encodeFS (fromOsPath f))
 #else
 getMagicMime _ _ = return Nothing
 #endif
 
+parseMagicMime :: B.ByteString -> (MimeType, MimeEncoding)
+parseMagicMime b = (decodeBS mimetype, decodeBS mimeencoding)
+  where
+	(mimetype, rest) = B.break (== semicolon) b
+	mimeencoding = fromMaybe mempty (B.stripPrefix "; charset=" rest)
+	semicolon = fromIntegral (ord ';')
+
 getMagicMimeType :: MonadIO m => Magic -> OsPath -> m (Maybe MimeType)
 getMagicMimeType m f = liftIO $ fmap fst <$> getMagicMime m f
 
 getMagicMimeEncoding :: MonadIO m => Magic -> OsPath -> m(Maybe MimeEncoding)
 getMagicMimeEncoding m f = liftIO $ fmap snd <$> getMagicMime m f
-
-#ifdef WITH_MAGICMIME
-{-# NOINLINE mutex #-}
-mutex :: MVar ()
-mutex = unsafePerformIO $ newMVar ()
-
--- Work around a bug, the library is not concurrency safe and will
--- sometimes access the wrong memory if multiple ones are called at the
--- same time.
-magicConcurrentSafe :: IO a -> IO a
-magicConcurrentSafe = bracket_ (takeMVar mutex) (putMVar mutex ())
-#endif
diff --git a/Annex/Path.hs b/Annex/Path.hs
--- a/Annex/Path.hs
+++ b/Annex/Path.hs
@@ -1,6 +1,6 @@
 {- git-annex program path
  -
- - Copyright 2013-2024 Joey Hess <id@joeyh.name>
+ - Copyright 2013-2026 Joey Hess <id@joeyh.name>
  -
  - Licensed under the GNU AGPL version 3 or higher.
  -}
@@ -8,6 +8,7 @@
 module Annex.Path (
 	programPath,
 	readProgramFile,
+	gitAnnexInstallDir,
 	gitAnnexChildProcess,
 	gitAnnexChildProcessParams,
 	gitAnnexDaemonizeParams,
@@ -24,6 +25,11 @@
 import System.Environment (getExecutablePath, getArgs, getProgName)
 import qualified Data.Map as M
 
+{- The standalone build sets GIT_ANNEX_DIR to the location of the
+ - standalone build directory. -}
+gitAnnexInstallDir :: IO (Maybe OsPath)
+gitAnnexInstallDir = fmap toOsPath <$> getEnv "GIT_ANNEX_DIR"
+
 {- A fully qualified path to the currently running git-annex program.
  - 
  - getExecutablePath is used when possible. On OSs it supports
@@ -32,20 +38,19 @@
  - or searching for the command name in PATH.
  -
  - The standalone build runs git-annex via ld.so, and defeats
- - getExecutablePath. It sets GIT_ANNEX_DIR to the location of the
- - standalone build directory, and there are wrapper scripts for git-annex
- - and git-annex-shell in that directory.
+ - getExecutablePath. There are wrapper scripts for git-annex
+ - and git-annex-shell in the gitAnnexInstallDir.
  -
  - When the currently running program is not git-annex, but is instead eg
  - git-annex-shell or git-remote-annex, this finds a git-annex program
  - instead.
  -}
 programPath :: IO OsPath
-programPath = go =<< getEnv "GIT_ANNEX_DIR"
+programPath = go =<< gitAnnexInstallDir
   where
 	go (Just dir) = do
 		name <- reqgitannex <$> getProgName
-		return (toOsPath dir </> toOsPath name)
+		return (dir </> toOsPath name)
 	go Nothing = do
 		name <- getProgName
 		exe <- if isgitannex name
diff --git a/Build/BundledPrograms.hs b/Build/BundledPrograms.hs
--- a/Build/BundledPrograms.hs
+++ b/Build/BundledPrograms.hs
@@ -79,17 +79,3 @@
 	-- we rely on the system's own version, which may better match
 	-- its kernel, and avoid using them if not available.
 	]
-
-magicDLLs :: [FilePath]
-#ifdef mingw32_HOST_OS
-magicDLLs = ["libmagic-1.dll", "libgnurx-0.dll"]
-#else
-magicDLLs = []
-#endif
-
-magicShare :: [FilePath]
-#ifdef mingw32_HOST_OS
-magicShare = ["magic.mgc"]
-#else
-magicShare = []
-#endif
diff --git a/Build/NullSoftInstaller.hs b/Build/NullSoftInstaller.hs
new file mode 100644
--- /dev/null
+++ b/Build/NullSoftInstaller.hs
@@ -0,0 +1,236 @@
+{- Generates a NullSoft installer program for git-annex on Windows.
+ -
+ - This uses the Haskell nsis package to generate a .nsi file,
+ - which is then used to produce git-annex-installer.exe
+ - 
+ - The installer includes git-annex, and utilities it uses, with the
+ - exception of git and some utilities that are bundled with git.
+ - The user needs to install git separately, and the installer checks
+ - for that.
+ - 
+ - To build the installer, git-annex should already be built to
+ - ./git-annex.exe, then run this program by eg:
+ - cp git-annex.exe nullsoft-installer.exe
+ - ./nullsoft-installer
+ -
+ - Copyright 2013-2026 Joey Hess <id@joeyh.name>
+ -
+ - Licensed under the GNU AGPL version 3 or higher.
+ -}
+
+{-# LANGUAGE CPP #-}
+{-# LANGUAGE OverloadedStrings, FlexibleContexts #-}
+
+module Build.NullSoftInstaller (main) where
+
+#ifndef mingw32_HOST_OS
+
+main :: IO ()
+main = error "only supported on Windows"
+
+#else
+
+import Development.NSIS
+import Control.Monad
+import Data.String
+import Data.Maybe
+import Data.List (isSuffixOf)
+
+import Utility.Tmp.Dir
+import Utility.SafeCommand
+import Utility.SystemDirectory
+import Utility.OsPath
+import Utility.Directory
+import qualified Utility.FileIO as F
+import Build.BundledPrograms
+
+{- Magic file database will be included if this file is found in the
+ - current directory. -}
+magicShare :: [FilePath]
+magicShare = ["magic.mgc"]
+
+{- *.dll in the current directory will be included. -}
+findDLLs :: IO [FilePath]
+findDLLs = do
+	l <- dirContents (literalOsPath ".")
+	return $ filter (".dll" `isSuffixOf`) $ map fromOsPath l
+
+main :: IO ()
+main = do
+	withTmpDir (literalOsPath "nsis-build") $ \tmpdir -> do
+		let gitannex = fromOsPath $ tmpdir </> toOsPath gitannexprogram
+		mustSucceed "ln" [File "git-annex.exe", File gitannex]
+		dlls <- findDLLs
+		dlls' <- installwhenpresent dlls tmpdir
+		magicShare' <- installwhenpresent magicShare tmpdir
+		let license = fromOsPath $ tmpdir </> toOsPath licensefile
+		mustSucceed "sh" [Param "-c", Param $ "zcat standalone/licences.gz > '" ++ license ++ "'"]
+		webappscript <- vbsLauncher tmpdir "git-annex-webapp" "git annex webapp"
+		autostartscript <- vbsLauncher tmpdir "git-annex-autostart" "git annex assistant --autostart"
+		let htmlhelp = tmpdir </> literalOsPath "git-annex.html"
+		F.writeFileString htmlhelp htmlHelpText
+		let gitannexcmd = tmpdir </> literalOsPath "git-annex.cmd"
+		F.writeFileString gitannexcmd "git annex %*"
+		F.writeFileString (toOsPath nsifile) $ makeInstaller
+			gitannex (fromOsPath gitannexcmd) license
+			(fromOsPath htmlhelp)
+			(winPrograms ++ dlls')
+			magicShare'
+			[ webappscript, autostartscript ]
+		mustSucceed "makensis" [File nsifile]
+	removeFile (toOsPath nsifile) -- left behind if makensis fails
+  where
+	nsifile = "git-annex.nsi"
+	mustSucceed cmd params = do
+		r <- boolSystem cmd params
+		case r of
+			True -> return ()
+			False -> error $ cmd ++ " failed"
+	installwhenpresent fs tmpdir = do
+		fs' <- forM fs $ \f -> do
+			present <- doesFileExist (toOsPath f)
+			if present
+				then do
+					mustSucceed "ln" [File f, File (fromOsPath (tmpdir </> toOsPath f))]
+					return (Just f)
+				else return Nothing
+		return (catMaybes fs')
+
+{- Generates a .vbs launcher which runs a command without any visible DOS
+ - box. It expects to be passed the directory where git-annex is installed. -}
+vbsLauncher :: OsPath -> String -> String -> IO String
+vbsLauncher tmpdir basename cmd = do
+	let f = tmpdir </> toOsPath (basename ++ ".vbs")
+	F.writeFileString f $ unlines
+		[ "Set objshell=CreateObject(\"Wscript.Shell\")"
+		, "objShell.CurrentDirectory = Wscript.Arguments.item(0)"
+		, "objShell.Run(\"" ++ cmd ++ "\"), 0, False"
+		]
+	return (fromOsPath f)
+
+gitannexprogram :: FilePath
+gitannexprogram = "git-annex.exe"
+
+licensefile :: FilePath
+licensefile = "git-annex-licenses.txt"
+
+installer :: FilePath
+installer = "git-annex-installer.exe"
+
+uninstaller :: FilePath
+uninstaller = "git-annex-uninstall.exe"
+
+gitInstallDir64 :: Exp FilePath
+gitInstallDir64 = fromString "$PROGRAMFILES64\\Git"
+
+gitInstallDir :: Exp FilePath
+gitInstallDir = gitInstallDir64
+
+-- This intentionally has a different name than git-annex or
+-- git-annex-webapp, since it is itself treated as an executable file.
+-- Also, on XP, the filename is displayed, not the description.
+startMenuItem :: Exp FilePath
+startMenuItem = "$SMPROGRAMS/Git Annex (Webapp).lnk"
+
+oldStartMenuItem :: Exp FilePath
+oldStartMenuItem = "$SMPROGRAMS/git-annex.lnk"
+
+autoStartItem :: Exp FilePath
+autoStartItem = "$SMSTARTUP/git-annex-autostart.lnk"
+
+needGit :: Exp String
+needGit = strConcat
+	[ fromString "You need git installed to use git-annex. Looking at "
+	, gitInstallDir
+	, fromString " , it seems to not be installed, "
+	, fromString "or may be installed in another location. "
+	, fromString "You can install git from http:////git-scm.com//"
+	]
+
+makeInstaller :: FilePath -> FilePath -> FilePath -> FilePath -> [FilePath] -> [FilePath] -> [FilePath] -> String
+makeInstaller gitannex gitannexcmd license htmlhelp extrabins sharefiles launchers = nsis $ do
+	name "git-annex"
+	outFile $ str installer
+	{- Installing into the same directory as git avoids needing to modify
+	 - path myself, since the git installer already does it. -}
+	installDir gitInstallDir
+	requestExecutionLevel Admin
+
+	iff (fileExists gitInstallDir)
+		(return ())
+		(alert needGit)
+	
+	-- Pages to display
+	page Directory                   -- Pick where to install
+	page (License license)
+	page InstFiles                   -- Give a progress bar while installing
+	-- Start menu shortcut
+	Development.NSIS.createDirectory "$SMPROGRAMS"
+	createShortcut startMenuItem
+		[ Target "wscript.exe"
+		, Parameters "\"$INSTDIR/cmd/git-annex-webapp.vbs\" \"$INSTDIR/cmd\""
+		, StartOptions "SW_SHOWNORMAL"
+		, IconFile "$INSTDIR/usr/bin/git-annex.exe"
+		, IconIndex 2
+		, Description "Git Annex (Webapp)"
+		]
+	delete [RebootOK] $ oldStartMenuItem
+	createShortcut autoStartItem
+		[ Target "wscript.exe"
+		, Parameters "\"$INSTDIR/cmd/git-annex-autostart.vbs\" \"$INSTDIR/cmd\""
+		, StartOptions "SW_SHOWNORMAL"
+		, IconFile "$INSTDIR/usr/bin/git-annex.exe"
+		, IconIndex 2
+		, Description "git-annex autostart"
+		]
+	_ <- section "cmd" [] $ do
+		-- Install everything to the same location git puts its
+		-- bins. This makes "git annex" work in the git bash
+		-- shell, since git expects to find the git-annex binary
+		-- there.
+		setOutPath "$INSTDIR\\usr\\bin"
+		mapM_ addfile (gitannex:extrabins)
+		setOutPath "$INSTDIR\\usr\\share\\misc"
+		mapM_ addfile sharefiles
+		-- This little wrapper is installed in the cmd directory,
+		-- so that "git-annex" works (as well as "git annex"),
+		-- when only that directory is in PATH (ie, in a ms-dos
+		-- prompt window).
+		setOutPath "$INSTDIR\\cmd"
+		addfile gitannexcmd
+	_ <- section "meta" [] $ do
+		-- git opens this file when git annex --help is run.
+		-- (Program Files/Git/mingw64/share/doc/git-doc/git-annex.html)
+		setOutPath "$INSTDIR\\mingw64\\share\\doc\\git-doc"
+		addfile htmlhelp
+		setOutPath "$INSTDIR"
+		addfile license
+		setOutPath "$INSTDIR\\cmd"
+		mapM_ addfile launchers
+		writeUninstaller $ str uninstaller
+	uninstall $ do
+		delete [RebootOK] $ startMenuItem
+		delete [RebootOK] $ autoStartItem
+		removefilesFrom "$INSTDIR/usr/bin" (gitannex:extrabins)
+		removefilesFrom "$INSTDIR/cmd" (gitannexcmd:launchers)
+		removefilesFrom "$INSTDIR\\mingw64\\share\\doc\\git-doc" [htmlhelp]
+		removefilesFrom "$INSTDIR" [license, uninstaller]
+  where
+	addfile f = file [] (str f)
+	removefilesFrom d = mapM_ (\f -> delete [RebootOK] $ fromString $ d ++ "/" ++ fromOsPath (takeFileName (toOsPath f)))
+
+winPrograms :: [FilePath]
+winPrograms = map (\p -> p ++ ".exe") bundledPrograms
+
+htmlHelpText :: String
+htmlHelpText = unlines
+	[ "<html>"
+	, "<title>git-annex help</title>"
+	, "<body>"
+	, "For help on git-annex, run \"git annex help\", or"
+	, "<a href=\"https://git-annex.branchable.com/git-annex/\">read the man page</a>."
+	, "</body>"
+	, "</html"
+	]
+
+#endif
diff --git a/BuildFlags.hs b/BuildFlags.hs
--- a/BuildFlags.hs
+++ b/BuildFlags.hs
@@ -60,15 +60,11 @@
 	, "S3"
 	, "WebDAV"
 	, "Servant"
+	, "Botan"
 #ifdef WITH_OSPATH
 	, "OsPath"
 #else 
 #warning Building without the OsPath build flag set results in slower filename manipulation and is not recommended.
-#endif
-#ifdef WITH_BOTAN
-	, "Botan"
-#else 
-#warning Consider building with the Botan build flag set, it speeds up checksumming by up 4x to 8x.
 #endif
 #ifdef WITH_BLAKE3
 	, "Blake3"
diff --git a/CHANGELOG b/CHANGELOG
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,31 @@
+git-annex (10.20261113) upstream; urgency=medium
+
+  * Added transfers command, displays a live view of transfers.
+  * Don't prompt for verification of proxied remotes, which is not
+    necessary and didn't work. (Fixes reversion in 10.20261026.)
+  * p2phttp: When --directory is used to serve a large number of
+    repositories, limit the amount of git helper processes and open files.
+  * Fix buggy handling of a submodule in a linked git worktree.
+  * Fix bug in parsing the P2P protocol that caused breakage when filenames
+    contained unicode multibyte space characters.
+  * Fix mimetype and mimencoding detection of non-ascii filenames 
+    in non-unicode locales.
+  * Avoid display issues with multiple progress meters when not in a
+    unicode locale.
+  * Botan is enabled by default; removed build flag.
+  * git-annex.cabal: Switch from magic to libmagic.
+  * Allow the MAGIC environment variable to override the bundled magic file
+    location.
+  * The Linux arm64-ancient build has reached end of security support 
+    and will be removed after this release. Android users are recommended
+    to switch to running `pkg install git-annex` inside termux.
+  * NoLLMDependencies: Update for network and http-semantics. 
+  * Fix build when the Memory build flag is disabled.
+  * Fix testremote failure with p2phttp remote.
+    (Reversion from 10.20261005)
+
+ -- Joey Hess <id@joeyh.name>  Fri, 13 Nov 2026 14:08:26 -0400
+
 git-annex (10.20261026) upstream; urgency=high
 
   * This releases fixes a security hole that allowed private data 
diff --git a/CmdLine/Action.hs b/CmdLine/Action.hs
--- a/CmdLine/Action.hs
+++ b/CmdLine/Action.hs
@@ -17,7 +17,6 @@
 import Types.Concurrency
 import Annex.Content
 import Messages.Concurrent
-import Types.Messages
 import Types.WorkerPool
 import Types.ActionItem
 import Remote.List
@@ -27,7 +26,6 @@
 import Control.Concurrent.STM
 import GHC.Conc
 import qualified Data.Map.Strict as M
-import qualified System.Console.Regions as Regions
 
 {- Runs a command, starting with the check stage, and then
  - the seek stage. Finishes by running the continuation.
@@ -226,17 +224,21 @@
  - started here, that has the same effect.
  -}
 startConcurrency :: UsedStages -> Annex a -> Annex a
-startConcurrency usedstages a = do
+startConcurrency usedstages a = startConcurrency' usedstages (const a)
+
+{- Passes the number of worker threads to the Annex action. -}
+startConcurrency' :: UsedStages -> (Int -> Annex a) -> Annex a
+startConcurrency' usedstages a = do
 	fromcmdline <- getConcurrency
 	fromgitcfg <- annexJobs <$> Annex.getGitConfig
 	let usegitcfg = setConcurrency (ConcurrencyGitConfig fromgitcfg)
 	case (fromcmdline, fromgitcfg) of
-		(NonConcurrent, NonConcurrent) -> a
+		(NonConcurrent, NonConcurrent) -> a 1
 		(Concurrent n, _) 
 			| n > 1 -> goconcurrent n
 			| otherwise -> do
 				setConcurrency' NonConcurrent ConcurrencyCmdLine
-				a
+				a 1
 		(ConcurrentPerCpu, _) ->
 			goconcurrentpercpu
 		(NonConcurrent, Concurrent n) -> do
@@ -246,29 +248,14 @@
 			usegitcfg
 			goconcurrentpercpu
   where
-	goconcurrent n = do
-		raiseCapabilitiesForJobs n
-		withMessageState $ \s -> case outputType s of
-			NormalOutput -> ifM (liftIO concurrentOutputSupported)
-				( Regions.displayConsoleRegions $
-					goconcurrent' n True
-				, goconcurrent' n False
-				)
-			_ -> goconcurrent' n False
-	goconcurrent' n b = bracket_ (setup n b) cleanup a
+	goconcurrent n = prepareConcurrency n $
+		bracket_ (setup n) cleanup (a n)
 
 	goconcurrentpercpu = goconcurrent =<< liftIO getNumProcessors
 
-	setup n b = do
-		setconcurrentoutputenabled b
-		initworkerpool n
-
-	cleanup = do
-		finishCommandActions
-		setconcurrentoutputenabled False
+	setup n = initworkerpool n
 
-	setconcurrentoutputenabled b = Annex.changeState $ \s ->
-		s { Annex.output = (Annex.output s) { concurrentOutputEnabled = b } }
+	cleanup = finishCommandActions
 	
 	initworkerpool n = do
 		tv <- liftIO newEmptyTMVarIO
@@ -278,6 +265,11 @@
 		rd <- Annex.getRead id
 		liftIO $ atomically $ putTMVar tv $
 			allocateWorkerPool (st, rd) (max n 1) usedstages
+
+prepareConcurrency :: Int -> Annex a -> Annex a
+prepareConcurrency n a = do
+	raiseCapabilitiesForJobs n
+	withConcurrentOutput a
 
 -- Make sure that some expensive actions have been done before
 -- starting threads. This way the state has them already run,
diff --git a/CmdLine/GitAnnex.hs b/CmdLine/GitAnnex.hs
--- a/CmdLine/GitAnnex.hs
+++ b/CmdLine/GitAnnex.hs
@@ -39,6 +39,7 @@
 import qualified Command.DropKey
 import qualified Command.Transferrer
 import qualified Command.TransferKey
+import qualified Command.Transfers
 import qualified Command.SetPresentKey
 import qualified Command.ReadPresentKey
 import qualified Command.CheckPresentKey
@@ -216,6 +217,7 @@
 	, Command.DropKey.cmd
 	, Command.Transferrer.cmd
 	, Command.TransferKey.cmd
+	, Command.Transfers.cmd
 	, Command.SetPresentKey.cmd
 	, Command.ReadPresentKey.cmd
 	, Command.CheckPresentKey.cmd
diff --git a/CmdLine/Multicall.hs b/CmdLine/Multicall.hs
--- a/CmdLine/Multicall.hs
+++ b/CmdLine/Multicall.hs
@@ -1,13 +1,22 @@
 {- git-annex multicall binary
  -
- - Copyright 2024-2025 Joey Hess <id@joeyh.name>
+ - Copyright 2024-2026 Joey Hess <id@joeyh.name>
  -
  - Licensed under the GNU AGPL version 3 or higher.
  -}
 
+{-# LANGUAGE CPP #-}
+
 module CmdLine.Multicall where
 
+
+import Common
+
+import System.Environment (getProgName)
 import qualified Data.Map as M
+#ifdef mingw32_HOST_OS
+import Data.Char
+#endif
 
 -- Commands besides git-annex that can be run by the multicall binary.
 --
@@ -19,6 +28,7 @@
 	| GitRemoteAnnex
 	| GitRemoteP2PAnnex
 	| GitRemoteTorAnnex
+	| NullSoftInstaller
 
 otherMulticallCommands :: M.Map String OtherMultiCallCommand
 otherMulticallCommands = M.fromList
@@ -26,5 +36,16 @@
 	, ("git-remote-annex", GitRemoteAnnex)
 	, ("git-remote-p2p-annex", GitRemoteP2PAnnex)
 	, ("git-remote-tor-annex", GitRemoteTorAnnex)
+	, ("nullsoft-installer", NullSoftInstaller)
 	]
 
+getCommandName :: IO String
+getCommandName = do
+#ifdef mingw32_HOST_OS
+	n <- progname
+	return $ map toLower $ takeWhile (/= '.') n
+#else
+	progname
+#endif
+  where
+	progname = fromOsPath . takeFileName . toOsPath <$> getProgName
diff --git a/Command/P2PHttp.hs b/Command/P2PHttp.hs
--- a/Command/P2PHttp.hs
+++ b/Command/P2PHttp.hs
@@ -139,7 +139,7 @@
 			lockedfilesqsem <- liftIO $ 
 				mkLockedFilesQSem (lockedFilesOption o)
 			authenv <- liftIO getAuthEnv
-			st <- mkServerState o authenv lockedfilesqsem
+			st <- mkServerState o authenv lockedfilesqsem NoWorkerLimit
 			liftIO $ runServer o st
 		-- Run in a git repository that is not a git-annex repository.
 		, liftIO $ startIO o 
@@ -158,20 +158,27 @@
 	mkst authenv oldst = do
 		lockedfilesqsem <- mkLockedFilesQSem (lockedFilesOption o)
 		repos <- findRepos o
+		workerlimit <- mkAnnexWorkerLimit
 		sts <- forM repos $ \r -> do
-			strd <- Annex.new r
-			Annex.eval strd (mkstannex authenv oldst lockedfilesqsem)
+			maker <- Annex.newMaker r
+			strd <- maker
+			let workerlimit' = 
+				setAnnexWorkerLimitName (Git.repoDescribe r) $
+				setAnnexWorkerLimitMaker maker workerlimit
+			Annex.eval strd $
+				mkstannex authenv oldst lockedfilesqsem
+					workerlimit'
 		return (mconcat sts)
 			{ updateRepos = updaterepos authenv
 			}
 	
-	mkstannex authenv oldst lockedfilesqsem = do
+	mkstannex authenv oldst lockedfilesqsem workerlimit = do
 		Annex.setOutput QuietOutput
 		u <- getUUID
 		if u == NoUUID
 			then return mempty
 			else case M.lookup u (servedRepos oldst) of
-				Nothing -> mkServerState o authenv lockedfilesqsem
+				Nothing -> mkServerState o authenv lockedfilesqsem workerlimit
 				Just old -> return $ P2PHttpServerState
 					{ servedRepos = M.singleton u old
 					, serverShutdownCleanup = mempty
@@ -239,15 +246,16 @@
 		Socket.listen sock Socket.maxListenQueue
 		return sock
 
-mkServerState :: Options -> M.Map Auth P2P.ServerMode -> LockedFilesQSem -> Annex P2PHttpServerState
-mkServerState o authenv lockedfilesqsem = 
-	withAnnexWorkerPool (jobsOption o) (cpusOption o) $
+mkServerState :: Options -> M.Map Auth P2P.ServerMode -> LockedFilesQSem -> AnnexWorkerLimit -> Annex P2PHttpServerState
+mkServerState o authenv lockedfilesqsem workerlimit = 
+	withAnnexWorkerPool (jobsOption o) (cpusOption o) workerlimit $
 		mkP2PHttpServerState
 			(mkGetServerMode authenv o)
 			return
 			(fromMaybe 1 $ proxyConnectionsOption o)
 			(fromMaybe 1 $ clusterJobsOption o)
 			lockedfilesqsem
+			workerlimit
 
 mkGetServerMode :: M.Map Auth P2P.ServerMode -> Options -> GetServerMode
 mkGetServerMode _ o _ Nothing
diff --git a/Command/Transfers.hs b/Command/Transfers.hs
new file mode 100644
--- /dev/null
+++ b/Command/Transfers.hs
@@ -0,0 +1,123 @@
+{- git-annex command
+ -
+ - Copyright 2026 Joey Hess <id@joeyh.name>
+ -
+ - Licensed under the GNU AGPL version 3 or higher.
+ -}
+
+{-# LANGUAGE OverloadedStrings #-}
+
+module Command.Transfers where
+
+import Command
+import Types.Transfer
+import Logs.Transfer
+import Remote
+import Messages.Progress
+import Messages.Concurrent
+import Utility.ThreadScheduler
+import Utility.Metered
+import Annex.Concurrent
+import Database.Keys
+import Git.FilePath
+
+import qualified Data.Map as M
+import Control.Concurrent.STM
+import Control.Concurrent.Async
+
+cmd :: Command
+cmd = noCommit $ withAnnexOptions [jsonOptions, jsonProgressOption] $
+	command "transfers" SectionQuery
+		"display transfers"
+		paramNothing (seek <$$> optParser)
+
+data TransfersOptions = TransfersOptions
+	{ localFilenames :: Bool 
+	}
+
+optParser :: CmdParamsDesc -> Parser TransfersOptions
+optParser _ = TransfersOptions
+	<$> switch
+		( long "localfilenames"
+		<> short 'l'
+		<> help "display local filenames, not remote filenames"
+		)
+
+seek :: TransfersOptions -> CommandSeek
+seek o = withConcurrentOutput $ do
+	when (localFilenames o)
+		updateDatabase
+	rs <- remoteList
+	let remotemap = M.fromList $ zip (map uuid rs) rs
+	go remotemap M.empty
+  where
+	go remotemap transfermap = do
+		l <- getTransfers
+		new <- forM l $ \(t, ti) -> do
+			case M.lookup t transfermap of
+				Nothing -> startone remotemap t ti
+				Just v -> return (t, v)
+		let newmap = M.fromList new
+		forM_ (M.toList transfermap) $ \(t, (endvar, tid)) -> 
+			unless (M.member t newmap) $ do
+				liftIO $ atomically $ putTMVar endvar ()
+				void $ join $ liftIO $ wait tid
+		liftIO $ threadDelaySeconds (SecondsDelay 1)
+		go remotemap newmap
+	
+	startone remotemap t ti = do
+		endvar <- liftIO newEmptyTMVarIO
+		a <- forkState $ 
+			withMessageState $ \s ->
+				inOwnConsoleRegion s $
+					includeCommandAction $
+						start o t ti endvar remotemap
+		tid <- liftIO $ async a
+		return (t, (endvar, tid))
+
+start :: TransfersOptions -> Transfer -> TransferInfo -> TMVar () -> M.Map UUID Remote -> CommandStart
+start o t ti endvar remotemap = do
+	af <- if localFilenames o
+		then headMaybe <$> getAssociatedFiles k >>= \case
+			Just topf -> relaf =<< fromRepo (fromTopFilePath topf)
+			Nothing -> pure $ AssociatedFile Nothing
+		else pure $ associatedFile ti
+	let ai = ActionItemAssociatedFile af k
+	startingNoMessage ai $ do
+		showStartMessage (StartMessage verb ai si)
+		showNote $ UnquotedString $ fromto ++ " " ++ remotename
+		maybeAddJSONField "remote-uuid" (transferUUID t)
+		(tfile, _, _) <- fromRepo $ transferFileAndLockFile t
+		metered Nothing k Nothing $ \_ p ->
+			watchSizeWith (getprogress tfile) p $
+				const waitend
+
+		showEnd "done"
+		next $ return True
+  where
+  	k = transferKey t
+	
+	si = SeekInput []
+  	
+	verb = case transferDirection t of
+		Upload -> "send"
+		Download -> "receive"
+	
+	fromto = case transferDirection t of
+		Upload -> "to"
+		Download -> "from"
+	
+	remotename =
+		maybe (fromUUID (transferUUID t)) name $
+			M.lookup (transferUUID t) remotemap
+	
+	waitend = 
+		liftIO $ atomically $ takeTMVar endvar
+	
+	relaf f = AssociatedFile . Just <$> liftIO (relPathCwdToFile f)
+
+	getprogress tfile = readTransferInfoFile Nothing tfile
+		>>= return . \case
+			Just ti' -> maybe zeroBytesProcessed toBytesProcessed
+				(bytesComplete ti')
+			Nothing -> zeroBytesProcessed
diff --git a/Database/RepoSize.hs b/Database/RepoSize.hs
--- a/Database/RepoSize.hs
+++ b/Database/RepoSize.hs
@@ -130,10 +130,13 @@
 isOpenDb (RepoSizeHandle (Just _) _) = True
 isOpenDb (RepoSizeHandle Nothing _) = False
 
-closeDb :: RepoSizeHandle -> Annex ()
-closeDb (RepoSizeHandle (Just h) _) = liftIO $ H.closeDb h
-closeDb (RepoSizeHandle Nothing _) = noop
+closeDb :: Annex ()
+closeDb = Annex.getState Annex.reposizehandle >>= maybe noop closeDb'
 
+closeDb' :: RepoSizeHandle -> Annex ()
+closeDb' (RepoSizeHandle (Just h) _) = liftIO $ H.closeDb h
+closeDb' (RepoSizeHandle Nothing _) = noop
+
 -- This does not prevent another process that has already 
 -- opened the db from changing it at the same time.
 lockDbWhile :: (IOException -> Annex a) -> Annex a -> Annex a
@@ -443,4 +446,4 @@
 				[ RecentChangesRepo ==. u
 				]
 		_ -> noop
-	closeDb db
+	closeDb' db
diff --git a/Git/Config.hs b/Git/Config.hs
--- a/Git/Config.hs
+++ b/Git/Config.hs
@@ -1,6 +1,6 @@
 {- git repository configuration handling
  -
- - Copyright 2010-2022 Joey Hess <id@joeyh.name>
+ - Copyright 2010-2026 Joey Hess <id@joeyh.name>
  -
  - Licensed under the GNU AGPL version 3 or higher.
  -}
@@ -24,6 +24,7 @@
 import Utility.UserInfo
 import Utility.Process.Transcript
 import Utility.Debug
+import qualified Utility.RawFilePath as R
 
 {- Returns a single git config setting, or a fallback value if not set. -}
 get :: ConfigKey -> ConfigValue -> Repo -> ConfigValue
@@ -181,12 +182,20 @@
 	l' <- case getMaybe "core.worktree" r of
 		Nothing -> return l
 		Just (ConfigValue d) -> do
-			{- core.worktree is relative to the gitdir -}
-			top <- absPath (gitdir l)
+			top <- gitdirtop
 			let p = absPathFrom top (toOsPath d)
 			return $ l { worktree = Just p }
 		Just NoConfigValue -> return l
 	return $ r { location = l' }
+  where
+	{- core.worktree is relative to the gitdir. 
+	 - When the gitdir is a symlink, it's relative to the destination
+	 - of the symlink.
+	 -}
+	gitdirtop = catchMaybeIO (R.readSymbolicLink (fromOsPath (gitdir l))) >>= \case
+		Nothing -> absPath (gitdir l)
+		Just linktarget -> absPath $
+			takeDirectory (gitdir l) </> toOsPath linktarget
 updateLocation' r l = return r { location = l }
 
 data ConfigStyle = ConfigList | ConfigNullList
diff --git a/Logs/Transfer.hs b/Logs/Transfer.hs
--- a/Logs/Transfer.hs
+++ b/Logs/Transfer.hs
@@ -68,8 +68,8 @@
 	return (liftIO . updater tvar loggedtvar, createtfile, tvar)
   where
 	updater tvar loggedtvar new = do
-		old <- atomically $ swapTVar tvar (Just new)
-		let oldbytes = maybe 0 fromBytesProcessed old
+		atomically $ writeTVar tvar (Just new)
+		oldbytes <- atomically $ readTVar loggedtvar
 		let newbytes = fromBytesProcessed new
 		when (newbytes - oldbytes >= mindelta) $ do
 			let info' = info { bytesComplete = Just newbytes }
@@ -269,7 +269,7 @@
  - On unix, the transferPid is not included; instead it is obtained
  - by looking at the process that locks the file.
  -
- - On windows, the transferPid is included, as a second line.
+ - On windows, the transferPid is included, as another line.
  -}
 writeTransferInfo :: TransferInfo -> String
 writeTransferInfo info = unlines
diff --git a/Messages.hs b/Messages.hs
--- a/Messages.hs
+++ b/Messages.hs
@@ -23,6 +23,7 @@
 	showOutput,
 	showLongNote,
 	showInfo,
+	showEnd,
 	showEndOk,
 	showEndFail,
 	showEndResult,
@@ -174,6 +175,9 @@
 -- to console, but json object containing the info is emitted immediately.
 showInfo :: StringContainingQuotedPath -> Annex ()
 showInfo s = outputMessage' outputJSON (JSON.info (decodeBS (noquote s))) formatLongNote s
+
+showEnd :: StringContainingQuotedPath -> Annex ()
+showEnd s = outputMessage JSON.end' id (s <> "\n")
 
 showEndOk :: Annex ()
 showEndOk = showEndResult True
diff --git a/Messages/Concurrent.hs b/Messages/Concurrent.hs
--- a/Messages/Concurrent.hs
+++ b/Messages/Concurrent.hs
@@ -1,6 +1,6 @@
 {- git-annex output messages, including concurrent output to display regions
  -
- - Copyright 2010-2017 Joey Hess <id@joeyh.name>
+ - Copyright 2010-2026 Joey Hess <id@joeyh.name>
  -
  - Licensed under the GNU AGPL version 3 or higher.
  -}
@@ -122,6 +122,28 @@
 #else
 concurrentOutputSupported = return True -- Windows is always unicode
 #endif
+
+withConcurrentOutput :: Annex a -> Annex a
+withConcurrentOutput a =
+	Annex.getState Annex.output >>= \s -> case outputType s of
+		NormalOutput -> ifM (liftIO concurrentOutputSupported)
+			( Regions.displayConsoleRegions $ go True
+			, go False
+			)
+		_ -> go False
+  where
+	go b = bracket_ (setup b) cleanup a
+
+	setup b = setconcurrentoutputenabled b
+
+	cleanup = setconcurrentoutputenabled False
+
+	setconcurrentoutputenabled b = Annex.changeState $ \s -> s
+		{ Annex.output = (Annex.output s)
+			{ concurrentOutputEnabled = b
+			, disableProgressMeters = not b
+			}
+		}
 
 {- Hide any currently displayed console regions while running the action,
  - so that the action can use the console itself. -}
diff --git a/Messages/JSON.hs b/Messages/JSON.hs
--- a/Messages/JSON.hs
+++ b/Messages/JSON.hs
@@ -16,6 +16,7 @@
 	start,
 	startActionItem,
 	end,
+	end',
 	finalize,
 	addErrorMessage,
 	note,
@@ -105,6 +106,10 @@
 end :: Bool -> JSONBuilder
 end b (Just (o, _)) = Just (HM.insert "success" (toJSON' b) o, True)
 end _ Nothing = Nothing
+
+end' :: JSONBuilder
+end' (Just (o, _)) = Just (o, True)
+end' Nothing = Nothing
 
 -- Always include error-messages field, even if empty,
 -- to make the json be self-documenting.
diff --git a/Messages/Progress.hs b/Messages/Progress.hs
--- a/Messages/Progress.hs
+++ b/Messages/Progress.hs
@@ -106,6 +106,11 @@
 metered' st setclear othermeterupdate msize bwlimit showoutput a = go st
   where
 	go (MessageState { outputType = QuietOutput }) = nometer
+	go (MessageState { outputType = NormalOutput, disableProgressMeters = True }) = do
+		meter <- liftIO $ mkMeter msize dontDisplayMeter
+		m <- liftIO $ rateLimitMeterUpdate consoleratelimit meter $
+			updateMeter meter
+		a meter =<< mkmeterupdate m
 	go (MessageState { outputType = NormalOutput, concurrentOutputEnabled = False }) = do
 		showoutput
 		meter <- liftIO $ mkMeter msize $ 
@@ -175,7 +180,7 @@
 
 	minratelimit = min consoleratelimit jsonratelimit
 		
-{- Poll file size to display meter. -}
+{- Poll file size to display meter while running an action. -}
 meteredFile
 	:: MeterSize sizer
 	=> OsPath
diff --git a/P2P/Http/Client.hs b/P2P/Http/Client.hs
--- a/P2P/Http/Client.hs
+++ b/P2P/Http/Client.hs
@@ -91,15 +91,17 @@
 	-- When unable to speak to the server, re-probe for its url, and
 	-- try again if it changed. This avoids the user needing to manually
 	-- update the remote.name.annexUrl config.
-	fallbackreprobe s = do
-		r <- reprobeurl
-		gc <- Annex.getRemoteGitConfig r
-		case remoteAnnexP2PHttpUrl gc of
-			Just p2purl' | Just p2purl' /= p2purl ->
-				p2pHttpClientVersions' allowedversion p2purl' rmt r fallback clientaction >>= \case
-					Just res -> return res
-					Nothing -> fallback s
-			_ -> fallback s
+	fallbackreprobe s
+		| maybe False isUnavailableP2PHttpUrl p2purl = fallback s
+		| otherwise = do
+			r <- reprobeurl
+			gc <- Annex.getRemoteGitConfig r
+			case remoteAnnexP2PHttpUrl gc of
+				Just p2purl' | Just p2purl' /= p2purl ->
+					p2pHttpClientVersions' allowedversion p2purl' rmt r fallback clientaction >>= \case
+						Just res -> return res
+						Nothing -> fallback s
+				_ -> fallback s
 
 p2pHttpClientVersions'
 	:: (ProtocolVersion -> Bool)
diff --git a/P2P/Http/State.hs b/P2P/Http/State.hs
--- a/P2P/Http/State.hs
+++ b/P2P/Http/State.hs
@@ -27,10 +27,11 @@
 import Types.WorkerPool
 import Annex.WorkerPool
 import Annex.BranchState
+import Annex.Action
 import Annex.Concurrent
 import Types.Concurrency
 import Types.Cluster
-import CmdLine.Action (startConcurrency)
+import CmdLine.Action (startConcurrency', startConcurrency)
 import Utility.ThreadScheduler
 import Utility.HumanTime
 import Logs.Proxy
@@ -40,13 +41,15 @@
 import qualified P2P.Proxy as Proxy
 import qualified Types.Remote as Remote
 import Remote.List
+import Utility.LRU
 
-import Servant
+import Servant hiding (Unique)
 import qualified Data.Map.Strict as M
 import qualified Data.Set as S
 import Control.Concurrent.Async
 import Control.Concurrent.STM
 import Data.Time.Clock.POSIX
+import Data.Unique
 
 data P2PHttpServerState = P2PHttpServerState
 	{ servedRepos :: M.Map UUID PerRepoServerState
@@ -86,13 +89,15 @@
 	, branchChangesInProgress :: TMVar Bool
 	}
 
-type AnnexWorkerPool = TMVar (WorkerPool (Annex.AnnexState, Annex.AnnexRead))
+type AnnexWorker = (Annex.AnnexState, Annex.AnnexRead)
 
+type AnnexWorkerPool = TMVar (WorkerPool (AnnexWorker, Unique))
+
 type GetServerMode = IsSecure -> Maybe Auth -> ServerMode
 
 data ServerMode
 	= ServerMode
-	{ serverMode :: P2P.ServerMode
+		{ serverMode :: P2P.ServerMode
 		, unauthenticatedLockingAllowed :: Bool
 		, authenticationAllowed :: Bool
 		}
@@ -309,9 +314,10 @@
 	-> ProxyConnectionPoolSize
 	-> ClusterConcurrency
 	-> LockedFilesQSem
+	-> AnnexWorkerLimit	
 	-> AnnexWorkerPool
 	-> Annex P2PHttpServerState
-mkP2PHttpServerState getservermode updaterepos proxyconnectionpoolsize clusterconcurrency lockedfilesqsem workerpool = do
+mkP2PHttpServerState getservermode updaterepos proxyconnectionpoolsize clusterconcurrency lockedfilesqsem workerlimit workerpool = do
 	enableInteractiveBranchAccess
 	myuuid <- getUUID
 	myproxies <- M.lookup myuuid <$> getProxies
@@ -328,7 +334,7 @@
 		(acquireconn reqv annexstate annexread)
 		workerpool annexstate annexread getservermode lockedfilesqsem
 	asynccommitter <- liftIO $ async $
-		branchCommitter st endv
+		branchCommitter st endv workerlimit workerpool
 	let endit = do
 		liftIO $ atomically $ putTMVar endv ()
 		liftIO $ wait asyncservicer
@@ -373,7 +379,7 @@
 					proxyConnection proxyconnectionpoolsize relv connparams runner proxypool conn ready
 				Nothing -> checkcanproxy runnertype annexstate annexread myproxies proxypool relv connparams ready
 	  where
-		runner = annexActionRunner runnertype workerpool annexstate annexread
+		runner = annexActionRunner runnertype workerlimit workerpool annexstate annexread
 
 	checkcanproxy runnertype annexstate annexread myproxies proxypool relv connparams ready =
 		runner
@@ -393,7 +399,7 @@
 			Left ex -> return $ Left $
 				ConnectionFailed $ show ex
 	  where
-		runner = annexActionRunner runnertype workerpool annexstate annexread
+		runner = annexActionRunner runnertype workerlimit workerpool annexstate annexread
 		bypass = P2P.Bypass $ S.fromList $ connectionBypass connparams
 		proxyconnection openconn = openconn >>= \case
 			Right conn -> proxyConnection proxyconnectionpoolsize
@@ -645,38 +651,237 @@
 		Nothing -> return ()
 		Just locker -> wait (lockerThread locker)
 
-withAnnexWorkerPool :: Maybe Concurrency -> Maybe Cpus -> (AnnexWorkerPool -> Annex a) -> Annex a
-withAnnexWorkerPool mconc mcpus a = do
+withAnnexWorkerPool
+	:: Maybe Concurrency
+	-> Maybe Cpus
+	-> AnnexWorkerLimit
+	-> (AnnexWorkerPool -> Annex a)
+	-> Annex a
+withAnnexWorkerPool mconc mcpus workerlimit a = do
 	maybe noop setCpus mcpus
 	maybe noop (setConcurrency . ConcurrencyCmdLine) mconc
-	startConcurrency transferStages $
+	startConcurrency' stages $ \nworkers ->
 		Annex.getState Annex.workers >>= \case
-			Nothing -> giveup "Use -Jn or set annex.jobs to configure the number of worker threads."
-			Just wp -> a wp
+			Nothing -> giveup "Use --jobs or set annex.jobs to configure the number of worker threads."
+			Just wpv -> go wpv nworkers
+  where
+	stages = transferStages
+	go wpv nworkers = case workerlimit of
+		NoWorkerLimit -> use $ atomically $ readTMVar wpv
+		WorkerLimit { makeNewWorker = Just maker } -> do
+			liftIO $ setAnnexWorkerLimit workerlimit nworkers
+			let maker' = do
+				strd <- maker
+				((), strd') <- Annex.run strd $ do
+					setConcurrency $ ConcurrencyCmdLine $ Concurrent 1
+					startConcurrency stages noop
+				return strd'
+			use (allocateWorkerPoolM maker' nworkers stages)
+				`finally` quiesce True
+		WorkerLimit { makeNewWorker = Nothing } ->
+			error "internal"
+	use mkp = do
+		tp <- liftIO $ taggedWorkerPool =<< mkp
+		awp <- liftIO $ newTMVarIO tp
+		a awp
 
-inAnnexWorker :: AnnexWorkerPool -> Annex a -> IO (Either SomeException a)
-inAnnexWorker poolv annexaction = do
-	(workerstrd, workerstage) <- atomically $ waitStartWorkerSlot poolv
+inAnnexWorker :: AnnexWorkerLimit -> AnnexWorkerPool -> Annex a -> IO (Either SomeException a)
+inAnnexWorker workerlimit poolv annexaction =
+	allocateAnnexWorker workerlimit (waitStartWorkerSlot poolv)
+		>>= inAnnexWorker' workerlimit poolv annexaction
+
+inAnnexWorkerNonBlocking :: AnnexWorkerLimit -> AnnexWorkerPool -> Annex a -> IO (Maybe (Either SomeException a))
+inAnnexWorkerNonBlocking workerlimit poolv annexaction =
+	allocateAnnexWorkerNonBlocking workerlimit (waitStartWorkerSlot poolv) >>= \case
+		Nothing -> return Nothing
+		Just v -> Just <$> inAnnexWorker' workerlimit poolv annexaction v
+
+inAnnexWorker'
+	:: AnnexWorkerLimit
+	-> AnnexWorkerPool
+	-> Annex a
+	-> ((AnnexWorker, Unique), WorkerStage)
+	-> IO (Either SomeException a)
+inAnnexWorker' workerlimit poolv annexaction ((workerstrd, workerid), workerstage) = do
 	resv <- newEmptyTMVarIO
 	aid <- async $ do
 		(res, strd) <- Annex.run workerstrd annexaction
 		atomically $ putTMVar resv res
-		return strd
+		return (strd, workerid)
 	atomically $ do
 		pool <- takeTMVar poolv
 		let !pool' = addWorkerPool (ActiveWorker aid workerstage) pool
 		putTMVar poolv pool'
-	(res, workerstrd') <- waitCatch aid >>= \case
-		Right strd -> do
+	
+	(res, workerstrdid) <- waitCatch aid >>= \case
+		Right strdid -> do
 			r <- atomically $ takeTMVar resv
-			return (Right r, strd)
-		Left err -> return (Left err, workerstrd)
+			return (Right r, strdid)
+		Left err -> return (Left err, (workerstrd, workerid))
+	
 	atomically $ do
+		deallocateAnnexWorker workerlimit workerstrd workerid
 		pool <- takeTMVar poolv
-		let !pool' = deactivateWorker pool aid workerstrd'
+		let !pool' = deactivateWorker pool aid workerstrdid
 		putTMVar poolv pool'
+
 	return res
 
+data AnnexWorkerLimit
+	= NoWorkerLimit
+	| WorkerLimit 
+		{ workerLimit :: TMVar (Int, WarmWorkers)
+		, makeNewWorker :: Maybe (IO AnnexWorker)
+		-- ^ quiesceAnnexWorker calls stopCoProcesses, which
+		-- stops helper processes that are in resource pools
+		-- set up by dupState and shared with other AnnexWorkers.
+		-- So this must not use dupState.
+		, workerLimitName :: Maybe String
+		}
+
+-- Workers that are not in use, but that have been warmed up: They have
+-- opened file handles, started helper processes, etc.
+type WarmWorkers = LRU Unique AnnexWorker
+
+mkAnnexWorkerLimit :: IO AnnexWorkerLimit
+mkAnnexWorkerLimit = WorkerLimit 
+	<$> newTMVarIO (1, emptyLRU)
+	<*> pure Nothing
+	<*> pure Nothing
+
+setAnnexWorkerLimitMaker :: IO AnnexWorker -> AnnexWorkerLimit -> AnnexWorkerLimit
+setAnnexWorkerLimitMaker maker workerlimit@(WorkerLimit {}) =
+	workerlimit { makeNewWorker = Just maker }
+setAnnexWorkerLimitMaker _ workerlimit = workerlimit
+
+setAnnexWorkerLimitName :: String -> AnnexWorkerLimit -> AnnexWorkerLimit
+setAnnexWorkerLimitName name workerlimit@(WorkerLimit {}) =
+	workerlimit { workerLimitName = Just name }
+setAnnexWorkerLimitName _ workerlimit = workerlimit
+
+setAnnexWorkerLimit :: AnnexWorkerLimit -> Int -> IO ()
+setAnnexWorkerLimit WorkerLimit { workerLimit = v } nworkers =
+	atomically $ do
+		(_, lru) <- takeTMVar v
+		putTMVar v (nworkers, lru)
+setAnnexWorkerLimit NoWorkerLimit _ = noop
+
+describeAnnexWorker :: AnnexWorkerLimit -> Unique -> String
+describeAnnexWorker (WorkerLimit { workerLimitName = Just name }) workerid =
+	name ++ " " ++ descibeAnnexWorker' workerid
+describeAnnexWorker _ workerid =
+	descibeAnnexWorker' workerid
+
+descibeAnnexWorker' :: Unique -> String
+descibeAnnexWorker' workerid = "#" ++ show (hashUnique workerid)
+
+{- Allocate a new annex worker.
+ - If necessary, first quiesces the least recently used one.
+ -
+ - Blocks when the server is too busy.
+ -}
+allocateAnnexWorker
+	:: AnnexWorkerLimit
+	-> STM ((AnnexWorker, Unique), WorkerStage)
+	-> IO ((AnnexWorker, Unique), WorkerStage)
+allocateAnnexWorker workerlimit a = 
+	atomically (allocateAnnexWorker' workerlimit a)
+		>>= allocatedAnnexWorker workerlimit a
+
+allocateAnnexWorkerNonBlocking
+	:: AnnexWorkerLimit
+	-> STM ((AnnexWorker, Unique), WorkerStage)
+	-> IO (Maybe ((AnnexWorker, Unique), WorkerStage))
+allocateAnnexWorkerNonBlocking workerlimit a = do
+	r <- atomically $
+		(Just <$> allocateAnnexWorker' workerlimit a)
+			`orElse`
+		return Nothing
+	case r of
+		Nothing -> return Nothing
+		Just r' -> Just <$> allocatedAnnexWorker workerlimit a r'
+
+allocateAnnexWorker'
+	:: AnnexWorkerLimit
+	-> STM ((AnnexWorker, Unique), WorkerStage)
+	-> STM (Either (Unique, AnnexWorker) ((AnnexWorker, Unique), WorkerStage))
+allocateAnnexWorker' NoWorkerLimit a = Right <$> a
+allocateAnnexWorker' (WorkerLimit { workerLimit = v }) a = do
+	(n, warm) <- takeTMVar v
+	if n < 1
+		then case popLRU warm of
+			(warm', Just toquiesce) -> do
+				putTMVar v (n-1, warm')
+				return $ Left toquiesce
+			_ -> retry
+		else do
+			res@((_, workerid), _) <- a
+			putTMVar v (n-1, removeLRU warm workerid)
+			return $ Right res
+
+allocatedAnnexWorker
+	:: AnnexWorkerLimit
+	-> STM ((AnnexWorker, Unique), WorkerStage)
+	-> Either (Unique, AnnexWorker) ((AnnexWorker, Unique), WorkerStage)
+	-> IO ((AnnexWorker, Unique), WorkerStage)
+allocatedAnnexWorker workerlimit a r =
+	observe reportworkerid $ case r of
+		Right res -> return res
+		Left toquiesce -> do
+			quiesceAnnexWorker workerlimit toquiesce
+			atomically $ postQueusceAnnexWorker workerlimit a
+  where
+	reportworkerid ((_, workerid), _) =
+		debug "P2P.Http" $ "Using worker "
+			++ describeAnnexWorker workerlimit workerid
+
+postQueusceAnnexWorker
+	:: AnnexWorkerLimit
+	-> STM ((AnnexWorker, Unique), WorkerStage)
+	-> STM ((AnnexWorker, Unique), WorkerStage)
+postQueusceAnnexWorker (WorkerLimit { workerLimit = v }) a = do
+	(n, warm) <- takeTMVar v
+	res@((_, workerid), _) <- a
+	putTMVar v (n, removeLRU warm workerid)
+	return res
+postQueusceAnnexWorker NoWorkerLimit a = a
+
+-- Called after allocateAnnexWorker has allocated a worker,
+-- and it is done being used.
+deallocateAnnexWorker :: AnnexWorkerLimit -> AnnexWorker -> Unique -> STM ()
+deallocateAnnexWorker NoWorkerLimit _ _ = noop
+deallocateAnnexWorker (WorkerLimit { workerLimit = v }) worker workerid = do
+	(n, warm) <- takeTMVar v
+	let warm' = addLRU warm workerid worker
+	putTMVar v (n+1, warm')
+
+-- Make an Annex worker no longer be warmed up, by stopping all
+-- helper processes, closing file handles, etc.
+quiesceAnnexWorker :: AnnexWorkerLimit -> (Unique, AnnexWorker) -> IO ()
+quiesceAnnexWorker workerlimit (workerid, workerstrd) = do
+	debug "P2P.Http" $ "Quiesceing worker "
+		++ describeAnnexWorker workerlimit workerid
+	-- This discards the changed state, so the only things it can
+	-- safely do are those that do not alter state.
+	res <- tryNonAsync $ Annex.eval workerstrd $
+		quiesce True 
+	case res of
+		Left ex -> debug "P2P.Http" $ "Quiesceing worker "
+			++ describeAnnexWorker workerlimit workerid
+			++ " failed: " ++ show ex
+		Right () -> return ()
+
+-- When there is a WorkerLimit, handleRequestAnnex may warm up
+-- an Annex state, starting helper processes, opening file handles etc.
+-- Quiesce it here to avoid one such Annex state per served repository
+-- remaining warmed up.
+--
+-- With NoWorkerLimit, there is no need to quiesce here, because there
+-- is only one such Annex state.
+quiesceRequestAnnex :: AnnexWorkerLimit -> Annex ()
+quiesceRequestAnnex NoWorkerLimit = noop
+quiesceRequestAnnex (WorkerLimit {}) = quiesce True
+
 handleRequestAnnex :: PerRepoServerState -> Annex a -> IO (Either SomeException a)
 handleRequestAnnex st = handleRequestAnnex' (annexState st) (annexRead st)
 
@@ -701,9 +906,11 @@
 	-- When using this, must enforce bounds first
 	| RequestRunner
 
-annexActionRunner :: AnnexActionRunner -> AnnexWorkerPool -> TMVar Annex.AnnexState -> Annex.AnnexRead -> Annex a -> IO (Either SomeException a)
-annexActionRunner WorkerPoolRunner workerpool _ _ = inAnnexWorker workerpool
-annexActionRunner RequestRunner _ st rd = handleRequestAnnex' st rd
+annexActionRunner :: AnnexActionRunner -> AnnexWorkerLimit -> AnnexWorkerPool -> TMVar Annex.AnnexState -> Annex.AnnexRead -> Annex a -> IO (Either SomeException a)
+annexActionRunner WorkerPoolRunner workerlimit workerpool _ _ =
+	inAnnexWorker workerlimit workerpool
+annexActionRunner RequestRunner _ _ st rd =
+	handleRequestAnnex' st rd
 
 data ProxyConnection = ProxyConnection
 	{ proxyConnectionRemoteUUID :: UUID
@@ -842,8 +1049,8 @@
 	send st b = liftIO $ atomically $ 
 		putTMVar (branchChangesInProgress st) b
 
-branchCommitter :: PerRepoServerState -> TMVar () -> IO ()
-branchCommitter st endv = do
+branchCommitter :: PerRepoServerState -> TMVar () -> AnnexWorkerLimit -> AnnexWorkerPool -> IO ()
+branchCommitter st endv workerlimit workerpool = do
 	idlev <- newEmptyTMVarIO
 	void $ async $ committer idlev
 	go idlev (0 :: Integer)
@@ -874,10 +1081,22 @@
 				-- Once it's been idle for a second,
 				-- commit the journalled changes.
 				atomically (tryTakeTMVar idlev) >>= \case
-					Just () ->
-						void $ handleRequestAnnex st $
-							Annex.Branch.commit =<< Annex.Branch.commitMessage
+					Just () -> runcommit
 					Nothing -> noop
 				committer idlev
 			Left () -> return ()
 
+	runcommit =
+		-- Use a warmed up AnnexWorker to do the commit when possible.
+		-- But, if the server is too busy, the commit still needs
+		-- to happen promptly. So avoid blocking and fall back
+		-- to running the commit using the RequestRunner Annex
+		-- state. Which then needs to be quiesced, which makes
+		-- it less efficient.
+		inAnnexWorkerNonBlocking workerlimit workerpool commit >>= \case
+			Just _ -> return ()
+			Nothing -> void $ handleRequestAnnex st $ do
+				commit
+				quiesceRequestAnnex workerlimit
+	
+	commit = Annex.Branch.commit =<< Annex.Branch.commitMessage
diff --git a/P2P/Http/Url.hs b/P2P/Http/Url.hs
--- a/P2P/Http/Url.hs
+++ b/P2P/Http/Url.hs
@@ -70,6 +70,9 @@
 unavailableP2PHttpUrl p = p
 	{ p2pHttpBaseUrl = (p2pHttpBaseUrl p) { baseUrlHost = "!dne!" } }
 
+isUnavailableP2PHttpUrl :: P2PHttpUrl -> Bool
+isUnavailableP2PHttpUrl p = unavailableP2PHttpUrl p == p
+
 -- When a p2phttp url is on the same host as a git repo, which also uses
 -- http, the same username+password is assumed to be used for both.
 isP2PHttpSameHost :: P2PHttpUrl -> Git.Repo -> Bool
diff --git a/P2P/Protocol.hs b/P2P/Protocol.hs
--- a/P2P/Protocol.hs
+++ b/P2P/Protocol.hs
@@ -229,27 +229,39 @@
 
 -- | Since ProtoAssociatedFile is not the last thing in a protocol line,
 -- its serialization cannot contain any whitespace. This is handled
--- by replacing whitespace with '%' (and '%' with '%%')
+-- by replacing ' ' with '%' (and '%' with '%%')
 --
 -- When deserializing an AssociatedFile from a peer, that escaping is
--- reversed. Unfortunately, an input tab will be deescaped to a space
--- though. And it's sanitized, to avoid any control characters that might
--- cause problems when it's displayed to the user.
+-- reversed.
 --
--- These mungings are ok, because a ProtoAssociatedFile is normally
+-- This does not currently round trip cleanly. That is done to avoid
+-- breaking backwards compatability with old versions of git-annex,
+-- where the P2P protocol split words on isSpace. Which is why this
+-- escapes '\t' and other spaces (including unicode spaces) to '%' as well.
+--
+-- Control characters are also sanitized. This sanitization is probably
+-- unncessary, since git-annex uses Utility.SafeOutput to avoid displaying
+-- control characters to the user.
+--
+-- Not roundtripping is ok because a ProtoAssociatedFile is normally
 -- only displayed to the user and so does not need to match a file on disk.
--- It may also be used in checking preferred content, which is very
--- unlikely to care about spaces vs tabs or control characters.
+-- (It may also be used in checking preferred content, which is very
+-- unlikely to care about spaces vs tabs or control characters.)
+--
+-- In the future, this could be made to round trip cleanly
+-- by only escaping ' ' and not sanitizing control characters.
+-- That should only be done once it's very unlikely that a peer
+-- will be running a version of git-annex older than 10.20261029.
 instance Proto.Serializable ProtoAssociatedFile where
 	serialize (ProtoAssociatedFile (AssociatedFile Nothing)) = ""
 	serialize (ProtoAssociatedFile (AssociatedFile (Just af))) = 
 		fromOsPath $ toInternalGitPath $
-			OS.concat $ map esc $ OS.unpack af
+			toOsPath $ concat $ map esc $ fromOsPath af
 	  where
-	  	esc c = case OS.toChar c of
-			'%' -> literalOsPath "%%"
-			c' | isSpace c' -> literalOsPath "%"
-			_ -> OS.singleton c
+	  	esc c
+			| c == '%' = "%%"
+			| isSpace c = "%"
+			| otherwise = [c]
 	
 	deserialize s = case fromInternalGitPath $ toOsPath $ deesc [] s of
 		f
@@ -261,7 +273,7 @@
 	  where
 	  	deesc b [] = reverse b
 		deesc b ('%':'%':cs) = deesc ('%':b) cs
-		deesc b ('%':cs) = deesc ('_':b) cs
+		deesc b ('%':cs) = deesc (' ':b) cs
 		deesc b (c:cs)
 			| isControl c = deesc ('_':b) cs
 			| otherwise = deesc (c:b) cs
diff --git a/Remote/Git.hs b/Remote/Git.hs
--- a/Remote/Git.hs
+++ b/Remote/Git.hs
@@ -1004,6 +1004,7 @@
 			let c = adduuid (configRepoUUID renamedr) $
 				addurl $
 				addproxiedby $
+				addverified $
 				adjustclusternode clusters $
 				inheritconfigs $ Git.fullconfig r'
 			in r'
@@ -1024,6 +1025,11 @@
 				(Git.ConfigValue $ fromUUID u)
 			Nothing -> id
 		
+		addverified = case formatRemoteConfigVerification RemoteConfigVerified of
+			Just s -> addremoteannexfield VerifiedField
+				(Git.ConfigValue $ encodeBS s)
+			Nothing -> id
+
 		-- A node of a cluster that is being proxied along with
 		-- that cluster does not need to be synced with
 		-- by default, because syncing with the cluster will
diff --git a/Test.hs b/Test.hs
--- a/Test.hs
+++ b/Test.hs
@@ -1,11 +1,12 @@
 {- git-annex test suite
  -
- - Copyright 2010-2024 Joey Hess <id@joeyh.name>
+ - Copyright 2010-2026 Joey Hess <id@joeyh.name>
  -
  - Licensed under the GNU AGPL version 3 or higher.
  -}
 
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE QuasiQuotes #-}
 {-# LANGUAGE CPP #-}
 
 module Test where
@@ -27,6 +28,11 @@
 import qualified Utility.RawFilePath as R
 import qualified Data.List.NonEmpty as NE
 import Data.String
+#ifdef WITH_MAGICMIME
+#ifdef WITH_OSPATH
+import System.OsString (osstr)
+#endif
+#endif
 
 import Common
 import CmdLine.GitAnnex.Options
@@ -89,6 +95,7 @@
 import qualified Utility.CopyFile
 import qualified Utility.MoveFile
 import qualified Utility.StatelessOpenPGP
+import qualified Utility.LRU
 import qualified Types.Remote
 #ifndef mingw32_HOST_OS
 import qualified Remote.Helper.Encryptable
@@ -203,6 +210,7 @@
 	, testProperty "prop_standardGroups_parse" Logs.PreferredContent.prop_standardGroups_parse
 	, testProperty "prop_balanced_stable" Annex.Balanced.prop_balanced_stable
 	, testProperty "prop_httpConfigKeys_sane" Git.Config.Url.prop_httpConfigKeys_sane
+	, testProperty "prop_LRU_sane" Utility.LRU.prop_LRU_sane
 	] ++ map (uncurry testProperty) combos
   where
 	combos = concat
@@ -564,16 +572,34 @@
 #ifdef WITH_MAGICMIME
 	git "config" ["annex.largefiles", "mimeencoding=binary"]
 		"git config annex.largefiles"
-	writeFileString (literalOsPath "binary") "\127"
+	writeFileString (literalOsPath "binary") binarycontent
 	writeFileString (literalOsPath "text") "test\n" 
-	git_annex "add" ["binary", "text"]
+#ifdef WITH_OSPATH
+	writeFileString unicodefn binarycontent
+#endif
+	git_annex "add" []
 		"git-annex add with mimeencoding in largefiles"
 	git_annex "sync" ["--no-content"]
 		"git-annex sync"
-	(isJust <$> annexeval (Annex.CatFile.catKeyFile (literalOsPath "binary")))
+	addedannex (literalOsPath "binary")
 		@? "binary file not added to annex despite mimeencoding config"
-	(isNothing <$> annexeval (Annex.CatFile.catKeyFile (literalOsPath "text")))
+	(not <$> addedannex (literalOsPath "text"))
 		@? "non-binary file got added to annex despite mimeencoding config"
+#ifndef mingw32_HOST_OS
+#ifdef WITH_OSPATH
+	-- This is a known failure on windows, see 
+	-- doc/bugs/mimeencoding_detection_is_not_working.mdwn
+	addedannex unicodefn
+		@? "binary file with unicode name not added to annex despite mimeencoding config"
+#endif
+#endif
+  where
+	binarycontent = "\127"
+#ifdef WITH_OSPATH
+	-- quasiquoted because fromString for OsString mangles unicode
+	unicodefn = [osstr|fo¡oüঊ|]
+#endif
+	addedannex f = isJust <$> annexeval (Annex.CatFile.catKeyFile f)
 #else
 	return ()
 #endif
diff --git a/Types/Messages.hs b/Types/Messages.hs
--- a/Types/Messages.hs
+++ b/Types/Messages.hs
@@ -42,6 +42,7 @@
 data MessageState = MessageState
 	{ outputType :: OutputType
 	, concurrentOutputEnabled :: Bool
+	, disableProgressMeters :: Bool
 	, sideActionBlock :: SideActionBlock
 	, consoleRegion :: Maybe ConsoleRegion
 	, consoleRegionErrFlag :: Bool
@@ -56,6 +57,7 @@
 	return $ MessageState
 		{ outputType = NormalOutput
 		, concurrentOutputEnabled = False
+		, disableProgressMeters = False
 		, sideActionBlock = NoBlock
 		, consoleRegion = Nothing
 		, consoleRegionErrFlag = False
diff --git a/Types/WorkerPool.hs b/Types/WorkerPool.hs
--- a/Types/WorkerPool.hs
+++ b/Types/WorkerPool.hs
@@ -1,10 +1,12 @@
 {- Worker thread pool.
  -
- - Copyright 2019-2023 Joey Hess <id@joeyh.name>
+ - Copyright 2019-2026 Joey Hess <id@joeyh.name>
  -
  - Licensed under the GNU AGPL version 3 or higher.
  -}
 
+{-# LANGUAGE DeriveFunctor #-}
+
 module Types.WorkerPool where
 
 import Types.Direction
@@ -12,6 +14,8 @@
 import Control.Concurrent
 import Control.Concurrent.Async
 import qualified Data.Set as S
+import Data.Unique
+import Control.Monad
 
 -- | Pool of worker threads. 
 data WorkerPool t = WorkerPool
@@ -36,6 +40,7 @@
 data Worker t
 	= IdleWorker WorkerStage
 	| ActiveWorker (Async t) WorkerStage
+	deriving (Functor)
 
 instance Show (Worker t) where
 	show (IdleWorker s) = "IdleWorker " ++ show s
@@ -115,16 +120,32 @@
 -- | Allocates a WorkerPool that has the specified number of workers
 -- in it, of each stage.
 allocateWorkerPool :: t -> Int -> UsedStages -> WorkerPool t
-allocateWorkerPool t n u = WorkerPool
+allocateWorkerPool t n u =
+	let stages = workerPoolStages u
+	in allocateWorkerPool' u
+		(replicate (workerPoolSize n stages) t)
+		stages
+
+allocateWorkerPoolM :: IO t -> Int -> UsedStages -> IO (WorkerPool t)
+allocateWorkerPoolM mkt n u = do
+	let stages = workerPoolStages u
+	ts <- replicateM (workerPoolSize n stages) mkt
+	return $ allocateWorkerPool' u ts stages
+
+allocateWorkerPool' :: UsedStages -> [t] -> [WorkerStage] -> WorkerPool t
+allocateWorkerPool' u ts stages = WorkerPool
 	{ usedStages = u
 	, workerList = map IdleWorker $
-		take totalthreads $ concat $ repeat stages
-	, spareVals = replicate totalthreads t
+		take (length ts) $ concat $ repeat stages
+	, spareVals = ts
 	}
-  where
-	stages = StartStage : S.toList (stageSet u)
-	totalthreads = n * length stages
 
+workerPoolSize :: Int -> [WorkerStage] -> Int
+workerPoolSize n stages = n * length stages
+
+workerPoolStages :: UsedStages -> [WorkerStage]
+workerPoolStages u = StartStage : S.toList (stageSet u)
+
 addWorkerPool :: Worker t -> WorkerPool t -> WorkerPool t
 addWorkerPool w pool = pool { workerList = w : workerList pool }
 
@@ -162,3 +183,17 @@
   where
 	idle (IdleWorker _) = True
 	idle (ActiveWorker _ _) = False
+
+{- Tags each value in a WorkerPool with a Unique identifier. -}
+taggedWorkerPool :: WorkerPool t -> IO (WorkerPool (t, Unique))
+taggedWorkerPool wp = do
+	wl <- forM (workerList wp) $ \w -> do
+		u <- newUnique
+		return (fmap (\v -> (v, u)) w)
+	sl <- zip (spareVals wp)
+		<$> replicateM (length (spareVals wp)) newUnique
+	return $ WorkerPool
+		{ usedStages = usedStages wp
+		, workerList = wl
+		, spareVals = sl
+		} 
diff --git a/Utility/Hash.hs b/Utility/Hash.hs
--- a/Utility/Hash.hs
+++ b/Utility/Hash.hs
@@ -11,7 +11,6 @@
 
 import Utility.Hash.Types as X
 import Utility.Hash.Incremental as X
-#ifdef WITH_BOTAN
 import Utility.Hash.Botan as X
 -- Fall back to crypton for hashes not in botan.
 import Utility.Hash.Crypton as X
@@ -30,9 +29,6 @@
 	, blake2bp_512
 	, blake2bp_512_hasher
 	)
-#else
-import Utility.Hash.Crypton as X
-#endif
 #ifdef WITH_BLAKE3
 import Utility.Hash.Blake3 as X
 #endif
diff --git a/Utility/Hash/HMAC.hs b/Utility/Hash/HMAC.hs
--- a/Utility/Hash/HMAC.hs
+++ b/Utility/Hash/HMAC.hs
@@ -5,9 +5,8 @@
  - License: BSD-2-clause
  -}
 
-{-# LANGUAGE PackageImports #-}
 {-# LANGUAGE RankNTypes #-}
-{-# LANGUAGE OverloadedStrings, CPP #-}
+{-# LANGUAGE OverloadedStrings #-}
 
 module Utility.Hash.HMAC (
 	Mac(..),
@@ -19,15 +18,9 @@
 import qualified Data.ByteString as S
 import qualified Data.Text as T
 import qualified Data.Text.Encoding as T
-#ifdef WITH_BOTAN
 import Botan.Low.MAC
 import Botan.Low.Hash hiding (HashDigest)
 import System.IO.Unsafe (unsafePerformIO)
-#else
-import Utility.Hash.Crypton (hashDigest)
-import "crypton" Crypto.MAC.HMAC hiding (Context)
-import "crypton" Crypto.Hash
-#endif
 
 data Mac = HmacSha1 | HmacSha224 | HmacSha256 | HmacSha384 | HmacSha512
 	deriving (Eq)
@@ -45,19 +38,12 @@
 	HmacSha384 -> use SHA384
 	HmacSha512 -> use SHA512
   where
-#ifdef WITH_BOTAN
 	use alg k m = unsafePerformIO $ do
 		maccer <- macInit (hmac alg)
 		macSetKey maccer k
 		macUpdate maccer m
 		auth <- macFinal maccer
 		return (f (HashDigest auth))
-#else
-	use alg k m = f (hashDigest (hmacGetDigest (hmacWitnessAlg alg k m)))
-
-	hmacWitnessAlg :: HashAlgorithm a => a -> S.ByteString -> S.ByteString -> HMAC a
-	hmacWitnessAlg _ = hmac
-#endif
 
 -- Check that all the MACs continue to produce the same.
 props_macs_stable :: [(String, Bool)]
diff --git a/Utility/LRU.hs b/Utility/LRU.hs
new file mode 100644
--- /dev/null
+++ b/Utility/LRU.hs
@@ -0,0 +1,202 @@
+{- LRU
+ -
+ - Copyright 2026 Joey Hess <id@joeyh.name>
+ -
+ - License: BSD-2-clause
+ -}
+
+{-# LANGUAGE StrictData, BangPatterns #-}
+
+module Utility.LRU (
+	LRU,
+	emptyLRU,
+	listLRU,
+	addLRU,
+	removeLRU,
+	popLRU,
+	mapLRU,
+	testLRU,
+	prop_LRU_sane,
+) where
+
+import qualified Data.Map.Strict as M
+
+data LRU k v = LRU
+	{ lruFirst :: Maybe k
+	, lruLast :: Maybe k
+	, lruMap :: M.Map k (LinkedVal k v)
+	}
+	deriving (Show, Eq)
+
+data LinkedVal k v = LinkedVal
+	{ value :: v
+	, prev :: Maybe k
+	, next :: Maybe k
+	}
+	deriving (Show, Eq)
+
+setvalue :: Ord k => v -> k -> M.Map k (LinkedVal k v) -> M.Map k (LinkedVal k v)
+setvalue v = M.adjust (\linkedval -> linkedval { value = v })
+
+setprev :: Ord k => Maybe k -> k -> M.Map k (LinkedVal k v) -> M.Map k (LinkedVal k v)
+setprev v = M.adjust (\linkedval -> linkedval { prev = v })
+
+setnext :: Ord k => Maybe k -> k -> M.Map k (LinkedVal k v) -> M.Map k (LinkedVal k v)
+setnext v = M.adjust (\linkedval -> linkedval { next = v })
+
+emptyLRU :: LRU k v
+emptyLRU = LRU Nothing Nothing M.empty
+
+listLRU :: Ord k => LRU k v -> [(k, v)]
+listLRU lru = case lruFirst lru of
+	Nothing -> []
+	Just k -> walk k
+  where
+	walk k = case M.lookup k (lruMap lru) of
+		Nothing -> []
+		Just linkedval -> (k, value linkedval) :
+			case prev linkedval of
+				Just k' -> walk k'
+				Nothing -> []
+
+removeLRU :: Ord k => LRU k v -> k -> LRU k v
+removeLRU lru k = case M.lookup k (lruMap lru) of
+	Nothing -> lru
+	Just linkedval -> 
+		let !lru' = addLRU lru k (value linkedval)
+		in lru'
+			{ lruLast = case lruLast lru' of
+				Nothing -> Nothing
+				Just k' -> case M.lookup k' (lruMap lru') of
+					Nothing -> Nothing
+					Just linkedval' -> next linkedval'
+			, lruFirst = case lruFirst lru' of
+				Just k' | k' /= k -> Just k'
+				_ -> Nothing
+			, lruMap = M.delete k $ unsetprev $ lruMap lru'
+			}
+  where
+	unsetprev m = case M.lookup k m of
+		Nothing -> m
+		Just linkedval -> case next linkedval of
+			Nothing -> m
+			Just k' -> setprev Nothing k' m
+
+{- When the key already exists in the LRU, its value is updated, and it is
+ - moved to last. -}
+addLRU :: Ord k => LRU k v -> k -> v -> LRU k v
+addLRU lru k v
+	| lruLast lru == Just k = lru
+		{ lruMap = setvalue v k (lruMap lru)
+		}
+	| otherwise = LRU
+		{ lruFirst = newfirst
+		, lruLast = Just k
+		, lruMap = 
+			let !linkedval = LinkedVal
+				{ value = v
+				, prev = Nothing
+				, next = lruLast lru
+				}
+			in updatefirst $ M.insert k linkedval $
+				skipover $ updateprev $ lruMap lru
+		}
+  where
+	newfirst = case lruFirst lru of
+		Nothing -> Just k
+		Just k'
+			| k' /= k -> Just k'
+			| otherwise -> case M.lookup k' (lruMap lru) of
+				Nothing -> Nothing
+				Just linkedval -> prev linkedval
+	updateprev m = case lruLast lru of
+		Nothing -> m
+		Just k' -> setprev (Just k) k' m
+	updatefirst m = case newfirst of
+		Nothing -> m
+		Just k' -> setnext Nothing k' m
+	skipover m = case M.lookup k m of
+		Nothing -> m
+		Just linkedval -> case (prev linkedval, next linkedval) of
+			(Just prevk, Just nextk) -> 
+				setprev (Just prevk) nextk $
+					setnext (Just nextk) prevk m
+			_  -> m
+
+popLRU :: Ord k => LRU k v -> (LRU k v, Maybe (k, v))
+popLRU lru = case lruFirst lru of
+	Nothing -> (lru, Nothing)
+	Just first ->
+		case M.lookup first (lruMap lru) of
+			Nothing -> (lru, Nothing)
+			Just linkedval ->
+				let !lru' = LRU
+					{ lruFirst = prev linkedval
+					, lruLast = case lruLast lru of
+						Just k | k == first -> Nothing
+						_ -> lruLast lru
+					, lruMap = skipover linkedval $
+						M.delete first (lruMap lru)
+					}
+				in (lru', Just (first, value linkedval))
+  where
+	skipover linkedval m = case prev linkedval of
+		Just k -> setnext Nothing k m
+		Nothing -> m
+
+mapLRU :: (Ord k, Ord k') => (k -> k') -> (v -> v') -> LRU k v -> LRU k' v'
+mapLRU kf vf lru = LRU
+	{ lruFirst = kf <$> lruFirst lru
+	, lruLast = kf <$> lruLast lru
+	, lruMap = M.fromList $ map go $ M.toList $ lruMap lru
+	}
+  where
+	go (k, linkedval) = 
+		(kf k, linkedval
+			{ value = vf (value linkedval)
+			, prev = kf <$> prev linkedval
+			, next = kf <$> next linkedval
+			})
+
+prop_LRU_sane :: Bool
+prop_LRU_sane = and testLRU
+
+testLRU :: [Bool]
+testLRU =
+	[ listLRU (fst (popLRU l1)) == []
+	, listLRU l1 == [(1, foo)]
+	, listLRU l2 == [(1, foo), (2, bar)]
+	, listLRU l3 == [(1, foo),(2, bar),(3, baz)]
+	, listLRU l4 == [(1, foo),(2, bar),(3, baz), (4, new)]
+	, popLRU l1 == (emptyLRU, Just (1, foo))
+	, popLRU l2 == (l2no1, Just (1, foo))
+	, popLRU l3 == (l3no1, Just (1, foo))
+	, popLRU (fst (popLRU l1)) == (emptyLRU, Nothing)
+	, popLRU (fst (popLRU (fst (popLRU l2)))) == (emptyLRU, Nothing)
+	, addLRU l3 1 new == addLRU l3no1 1 new
+	, addLRU l3 2 new == addLRU (addLRU l1 3 baz) 2 new
+	, addLRU l3 3 new == addLRU l2 3 new
+	, removeLRU emptyLRU 1 == (emptyLRU :: LRU Int String)
+	, removeLRU l1 1 == emptyLRU
+	, removeLRU l2 3 == l2
+	, removeLRU l3 3 == l2
+	, removeLRU l3 1 == l3no1
+	, removeLRU l3 2 == addLRU l1 3 baz
+	, removeLRU l2 2 == l1
+	, removeLRU l2 1 == l2no1
+	, removeLRU l4 4 == l3
+	, removeLRU l4 2 == addLRU (addLRU l1 3 baz) 4 new
+	, removeLRU l4 3 == addLRU l2 4 new
+	, removeLRU l4 1 == addLRU l3no1 4 new
+	]
+  where
+	l1 = addLRU emptyLRU (1 :: Int) foo
+	l2 = addLRU l1 2 bar
+	l3 = addLRU l2 3 baz
+	l4 = addLRU l3 4 new
+	l2no1 = addLRU emptyLRU 2 bar
+	l3no1 = addLRU l2no1 3 baz
+	foo = "foo"
+	bar = "bar"
+	baz = "baz"
+	new = "new"
diff --git a/Utility/Metered.hs b/Utility/Metered.hs
--- a/Utility/Metered.hs
+++ b/Utility/Metered.hs
@@ -1,6 +1,6 @@
 {- Metered IO and actions
  -
- - Copyright 2012-2024 Joey Hess <id@joeyh.name>
+ - Copyright 2012-2026 Joey Hess <id@joeyh.name>
  -
  - License: BSD-2-clause
  -}
@@ -26,6 +26,7 @@
 	hGetContentsMetered,
 	hGetMetered,
 	defaultChunkSize,
+	watchSizeWith,
 	watchFileSize,
 	OutputHandler(..),
 	ProgressParser,
@@ -42,6 +43,7 @@
 	mkMeter,
 	setMeterTotalSize,
 	updateMeter,
+	dontDisplayMeter,
 	displayMeterHandle,
 	clearMeterHandle,
 	bandwidthMeter,
@@ -213,26 +215,13 @@
 	k = 1024
 	chunkOverhead = 2 * sizeOf (1 :: Int) -- GHC specific
 
-{- Runs an action, watching a file as it grows and updating the meter.
- -
- - The file may already exist, and the action could throw the original file
- - away and start over. To avoid reporting the original file size followed
- - by a smaller size in that case, wait until the file starts growing
- - before updating the meter for the first time.
- -
- - An updated version of the MeterUpdate is passed to the action, and the
- - action should use that for any updates that it makes. This allows for
- - eg, the action updating the meter before a write is flushed to the file.
- - In that situation, this avoids the meter being set back to the size of
- - the file when it's gotten ahead of that point.
- -}
-watchFileSize
+watchSizeWith
 	:: (MonadIO m, MonadMask m)
-	=> OsPath
+	=> IO BytesProcessed
 	-> MeterUpdate
 	-> (MeterUpdate -> m a)
 	-> m a
-watchFileSize f p a = do
+watchSizeWith getsize p a = do
 	sizevar <- liftIO $ newMVar zeroBytesProcessed
 	bracket 
 		(liftIO $ forkIO $ watcher (meterupdate sizevar True) =<< getsz)
@@ -245,8 +234,8 @@
 		when (sz > oldsz) $
 			p' sz
 		watcher p' sz
-	getsz = catchDefaultIO zeroBytesProcessed $
-		toBytesProcessed <$> getFileSize f
+	
+	getsz = catchDefaultIO zeroBytesProcessed getsize
 
 	meterupdate sizevar preventbacktracking n
 		| preventbacktracking = do
@@ -261,6 +250,27 @@
 			putMVar sizevar n
 			p n
 
+{- Runs an action, watching a file as it grows and updating the meter.
+ -
+ - The file may already exist, and the action could throw the original file
+ - away and start over. To avoid reporting the original file size followed
+ - by a smaller size in that case, wait until the file starts growing
+ - before updating the meter for the first time.
+ -
+ - An updated version of the MeterUpdate is passed to the action, and the
+ - action should use that for any updates that it makes. This allows for
+ - eg, the action updating the meter before a write is flushed to the file.
+ - In that situation, this avoids the meter being set back to the size of
+ - the file when it's gotten ahead of that point.
+ -}
+watchFileSize
+	:: (MonadIO m, MonadMask m)
+	=> OsPath
+	-> MeterUpdate
+	-> (MeterUpdate -> m a)
+	-> m a
+watchFileSize f = watchSizeWith (toBytesProcessed <$> getFileSize f)
+
 data OutputHandler = OutputHandler
 	{ quietMode :: Bool
 	, stderrHandler :: String -> IO ()
@@ -486,6 +496,10 @@
 	when (meterBytesProcessed oldms /= new) $ do
 		totalsize <- readMVar totalsizev
 		displaymeter bv totalsize oldms curms
+
+-- | Don't display a meter.
+dontDisplayMeter :: DisplayMeter
+dontDisplayMeter _ _ _ _ = return ()
 
 -- | Display meter to a Handle.
 displayMeterHandle :: Handle -> RenderMeter -> DisplayMeter
diff --git a/Utility/SimpleProtocol.hs b/Utility/SimpleProtocol.hs
--- a/Utility/SimpleProtocol.hs
+++ b/Utility/SimpleProtocol.hs
@@ -29,7 +29,6 @@
 	getProtocolLine,
 ) where
 
-import Data.Char
 import GHC.IO.Handle
 import Text.Read
 
@@ -132,7 +131,7 @@
 	(p4, p5) = splitWord rest''
 
 splitWord :: String -> (String, String)
-splitWord = separate isSpace
+splitWord = separate (== ' ')
 
 {- Only safe to use when the serialization does not include whitespace. -}
 parseList :: Serializable p => ([p] -> a) -> Parser a
diff --git a/cabal-stackage.config b/cabal-stackage.config
new file mode 100644
--- /dev/null
+++ b/cabal-stackage.config
@@ -0,0 +1,3453 @@
+-- NOTE: Due to revisions, this file may not work. See:
+-- https://github.com/commercialhaskell/stackage-server/issues/232
+
+-- Stackage snapshot from: http://www.stackage.org/snapshot/lts-24.52
+-- Please place this file next to your .cabal file as cabal.config
+-- To only use tested packages, uncomment the following line:
+-- remote-repo: stackage-lts-24.52:http://www.stackage.org/lts-24.52
+
+-- Modified to have newer file-io and aws.
+with-compiler: ghc-9.10.3
+constraints: abstract-deque ==0.3,
+             abstract-deque-tests ==0.3,
+             abstract-par ==0.3.3,
+             AC-Angle ==1.0,
+             acc ==0.2.0.4,
+             ace ==0.6,
+             acid-state ==0.16.1.4,
+             action-permutations ==0.0.0.1,
+             active ==0.2.1.1,
+             ad ==4.5.6,
+             ad-delcont ==0.5.0.0,
+             adjunctions ==4.4.4,
+             adler32 ==0.1.2.0,
+             advent-of-code-api ==0.2.11.0,
+             aern2-mp ==0.2.16.1,
+             aern2-real ==0.2.16.1,
+             aeson ==2.2.5.0,
+             aeson-attoparsec ==0.0.0,
+             aeson-better-errors ==0.9.1.4,
+             AesonBson ==0.4.1,
+             aeson-casing ==0.2.0.0,
+             aeson-combinators ==0.1.2.2,
+             aeson-diff ==1.1.0.15,
+             aeson-gadt-th ==0.2.5.4,
+             aeson-generic-compat ==0.0.2.0,
+             aeson-jsonpath ==0.3.0.2,
+             aeson-pretty ==0.8.11,
+             aeson-qq ==0.8.4,
+             aeson-schemas ==1.4.3.1,
+             aeson-typescript ==0.6.4.0,
+             aeson-unqualified-ast ==1.0.0.3,
+             aeson-value-parser ==0.19.7.2,
+             aeson-warning-parser ==0.1.1,
+             aeson-yak ==0.1.1.3,
+             aeson-yaml ==1.1.0.1,
+             aftovolio ==0.8.0.0,
+             Agda ==2.8.0,
+             agda2lagda ==0.2023.6.9,
+             agreeing ==0.2.2.0,
+             alarmclock ==0.7.0.7,
+             alex ==3.5.4.2,
+             alex-meta ==0.3.0.13,
+             alex-tools ==0.6.1,
+             alfred-margaret ==2.1.0.2,
+             algebra ==4.3.1,
+             algebraic-graphs ==0.7,
+             align-audio ==0.0.0.2,
+             Allure ==0.11.0.0,
+             almost-fix ==0.0.2,
+             alsa-core ==0.5.0.1,
+             alsa-mixer ==0.3.0.1,
+             alsa-pcm ==0.6.1.2,
+             alsa-seq ==0.6.0.10,
+             alternative-vector ==0.0.0,
+             alternators ==1.0.0.0,
+             ALUT ==2.4.0.3,
+             amqp ==0.24.0,
+             amqp-utils ==0.6.8.0,
+             annotated-exception ==0.3.0.4,
+             annotated-wl-pprint ==0.7.0,
+             ansigraph ==0.3.0.5,
+             ansi-terminal ==1.1.5,
+             ansi-terminal-game ==1.9.4.0,
+             ansi-terminal-types ==1.1.3,
+             ansi-wl-pprint ==1.0.2,
+             ANum ==0.2.0.4,
+             aos-signature ==0.1.1,
+             apecs ==0.9.6,
+             apecs-gloss ==0.2.4,
+             apecs-physics ==0.4.6,
+             api-field-json-th ==0.1.0.2,
+             ap-normalize ==0.1.0.1,
+             appar ==0.1.8,
+             appendful ==0.1.0.0,
+             appendful-persistent ==0.1.0.1,
+             appendmap ==0.1.5,
+             apply-merge ==0.1.1.0,
+             apportionment ==0.0.0.4,
+             approximate ==0.3.5,
+             approximate-equality ==1.1.0.2,
+             arithmoi ==0.13.4.0,
+             array installed,
+             array-chunks ==0.1.4.2,
+             array-memoize ==0.6.0,
+             arrow-extras ==0.1.0.1,
+             arrows ==0.4.4.2,
+             ascii-char ==1.0.1.0,
+             ascii-progress ==0.3.3.0,
+             asn1-encoding ==0.9.6,
+             asn1-parse ==0.9.5,
+             asn1-types ==0.3.4,
+             assert-failure ==0.1.3.0,
+             assignment ==0.0.1.0,
+             assoc ==1.1.1,
+             astro ==0.4.3.0,
+             async ==2.2.6,
+             async-extra ==0.2.0.0,
+             async-pool ==0.9.2,
+             async-refresh ==0.3.0.0,
+             async-refresh-tokens ==0.4.0.0,
+             atom-basic ==0.2.5,
+             atom-conduit ==0.9.0.2,
+             atomic-counter ==0.1.2.4,
+             atomic-primops ==0.8.8,
+             atomic-write ==0.2.1.1,
+             attoparsec ==0.14.4,
+             attoparsec-aeson ==2.2.2.0,
+             attoparsec-base64 ==0.0.0,
+             attoparsec-binary ==0.2,
+             attoparsec-data ==1.0.5.4,
+             attoparsec-expr ==0.1.1.2,
+             attoparsec-framer ==0.1.0.11,
+             attoparsec-iso8601 ==1.1.1.0,
+             attoparsec-path ==0.0.0.1,
+             attoparsec-time ==1.0.3.1,
+             attoparsec-uri ==0.0.9,
+             audacity ==0.0.2.4,
+             authenticate ==1.3.5.2,
+             authenticate-oauth ==1.7,
+             autodocodec ==0.5.0.0,
+             autodocodec-nix ==0.1.0.0,
+             autodocodec-openapi3 ==0.3.0.1,
+             autodocodec-schema ==0.2.0.1,
+             autodocodec-servant-multipart ==0.0.0.2,
+             autodocodec-swagger2 ==0.1.0.0,
+             autodocodec-yaml ==0.4.0.2,
+             autoexporter ==2.0.0.17,
+             automaton ==1.5,
+             auto-update ==0.2.6,
+             avro ==0.6.2.1,
+             aws ==0.25.2,
+             aws-lambda-haskell-runtime ==4.3.2,
+             aws-lambda-haskell-runtime-wai ==2.0.2,
+             aws-sns-verify ==0.0.0.3,
+             aws-xray-client ==0.1.0.2,
+             aws-xray-client-persistent ==0.1.0.5,
+             aws-xray-client-wai ==0.1.0.2,
+             backprop ==0.2.7.2,
+             backtracking ==0.1.0,
+             bank-holiday-germany ==2.1.0.2,
+             bank-holidays-england ==0.2.0.11,
+             barbies ==2.1.1.0,
+             base installed,
+             base16 ==1.0,
+             base16-bytestring ==1.0.2.0,
+             base32 ==0.4,
+             base32string ==0.9.1,
+             base58-bytestring ==0.1.0,
+             base58string ==0.10.0,
+             base64 ==1.0,
+             base64-bytestring ==1.2.1.0,
+             base64-bytestring-type ==1.0.1,
+             base64-string ==0.2,
+             base-compat ==0.14.1,
+             base-compat-batteries ==0.14.1,
+             basement ==0.0.16,
+             base-orphans ==0.9.4,
+             base-prelude ==1.6.1.1,
+             base-unicode-symbols ==0.2.4.2,
+             basic-prelude ==0.7.0,
+             battleship-combinatorics ==0.0.1.2,
+             bazel-runfiles ==0.12,
+             bbdb ==0.8,
+             bcp47 ==0.3.0.0,
+             bcp47-orphans ==0.1.3.0,
+             bcrypt ==0.0.11,
+             beam-core ==0.10.5.0,
+             beam-migrate ==0.5.5.0,
+             beam-postgres ==0.5.6.1,
+             bech32 ==1.1.11,
+             bech32-th ==1.1.11,
+             bench ==1.0.13,
+             benchpress ==0.2.3.0,
+             bench-show ==0.3.2,
+             bencode ==0.6.1.1,
+             bencoding ==0.4.5.6,
+             benri-hspec ==0.1.0.3,
+             between ==0.11.0.0,
+             bhoogle ==0.1.4.4,
+             bibtex ==0.1.0.7,
+             bifunctor-classes-compat ==0.1.1,
+             bifunctors ==5.6.3,
+             bimap ==0.5.0,
+             bimaps ==0.1.0.2,
+             bin ==0.1.4.1,
+             binance-exports ==0.1.2.0,
+             binary installed,
+             binary-conduit ==1.3.1,
+             binaryen ==0.0.6.0,
+             binary-generic-combinators ==0.4.4.1,
+             binary-ieee754 ==0.1.0.0,
+             binary-instances ==1.0.6,
+             binary-list ==1.1.1.2,
+             binary-orphans ==1.0.6,
+             binary-parser ==0.5.7.7,
+             binary-parsers ==0.2.4.0,
+             binary-search ==2.0.0,
+             binary-shared ==0.8.3,
+             bindings-DSL ==1.0.25,
+             bindings-GLFW ==3.3.9.3,
+             bindings-libzip ==1.0.1,
+             bindings-uname ==0.1,
+             BiobaseNewick ==0.0.0.2,
+             bitarray ==0.0.1.1,
+             bits ==0.6,
+             bitset-word8 ==0.1.1.2,
+             bits-extra ==0.0.2.3,
+             bitvec ==1.1.6.0,
+             bitwise ==1.0.0.1,
+             bitwise-enum ==1.0.2.0,
+             Blammo ==2.1.4.0,
+             blank-canvas ==0.7.5,
+             blas-carray ==0.1.0.2,
+             blas-comfort-array ==0.0.0.4,
+             blas-ffi ==0.1,
+             blas-hs ==0.1.1.0,
+             blaze-bootstrap ==0.1.0.1,
+             blaze-builder ==0.4.4.1,
+             blaze-colonnade ==1.2.3.0,
+             blaze-html ==0.9.2.0,
+             blaze-markup ==0.8.3.0,
+             blaze-svg ==0.3.7,
+             blaze-textual ==0.2.3.1,
+             bloodhound ==0.23.0.1,
+             bloomfilter ==2.0.1.3,
+             bluefin ==0.0.17.1,
+             bluefin-internal ==0.1.2.0,
+             bm ==0.2.0.0,
+             bmp ==1.2.6.4,
+             bnb-staking-csvs ==0.2.2.0,
+             BNFC ==2.9.6.3,
+             BNFC-meta ==0.6.1,
+             board-games ==0.4.0.3,
+             bodhi ==0.1.0,
+             boltzmann-samplers ==0.1.1.0,
+             Boolean ==0.2.4,
+             boolsimplifier ==0.1.8,
+             boomwhacker ==0.0.2.1,
+             bordacount ==0.1.0.0,
+             boring ==0.2.2.1,
+             bound ==2.0.7,
+             BoundedChan ==1.0.3.0,
+             bounded-qsem ==0.1.0.5,
+             bounded-queue ==1.0.0,
+             boundingboxes ==0.2.3,
+             bower-json ==1.1.0.0,
+             bowtie ==0.7.0,
+             box ==0.9.4.0,
+             boxes ==0.1.5,
+             box-socket ==0.5.3.0,
+             breakpoint ==0.1.5.1,
+             brick ==2.9,
+             brotli ==0.0.0.3,
+             brotli-streams ==0.0.0.0,
+             bsb-http-chunked ==0.0.0.4,
+             bson ==0.4.0.1,
+             bson-lens ==0.1.1,
+             btrfs ==0.2.1.0,
+             buffer-pipe ==0.0,
+             bugsnag ==1.2.0.2,
+             bugsnag-hs ==0.2.0.13,
+             bugsnag-wai ==1.0.1.2,
+             bugsnag-yesod ==1.0.1.0,
+             bugzilla-redhat ==1.0.1.1,
+             burrito ==2.0.1.17,
+             butcher ==1.3.3.2,
+             bv ==0.5,
+             bv-sized ==1.0.7,
+             byteable ==0.1.1,
+             bytebuild ==0.3.17.0,
+             byte-count-reader ==0.10.1.12,
+             bytedump ==1.0,
+             bytehash ==0.1.1.2,
+             byte-order ==0.1.3.1,
+             byteorder ==1.0.4,
+             bytes ==0.17.5,
+             byteset ==0.1.1.2,
+             byteslice ==0.2.15.0,
+             bytesmith ==0.3.14.0,
+             bytestring installed,
+             bytestring-aeson-orphans ==0.1.0.2,
+             bytestring-builder ==0.10.8.2.0,
+             bytestring-conversion ==0.3.2,
+             bytestring-encodings ==0.2.0.2,
+             bytestring-lexing ==0.5.0.15,
+             bytestring-strict-builder ==0.4.5.8,
+             bytestring-to-vector ==0.3.0.1,
+             bytestring-tree-builder ==0.2.7.13,
+             bytestring-trie ==0.2.7.6,
+             bytezap ==1.6.0,
+             bz2 ==1.0.1.2,
+             bzip2-clib ==1.0.8,
+             bzlib ==0.5.3.0,
+             bzlib-conduit ==0.3.0.4,
+             c14n ==0.1.0.3,
+             c2hs ==0.28.8,
+             Cabal installed,
+             cabal2nix ==2.20.1,
+             cabal2spec ==2.7.1,
+             cabal-add ==0.2,
+             cabal-appimage ==0.4.3.0,
+             cabal-clean ==0.2.20230609,
+             cabal-debian ==5.2.6,
+             cabal-doctest ==1.0.12,
+             cabal-file ==0.1.1,
+             cabal-flatpak ==0.1.3,
+             cabal-gild ==1.6.0.4,
+             cabal-install ==3.12.1.0,
+             cabal-install-parsers ==0.6.2,
+             cabal-install-solver ==3.12.1.0,
+             cabal-plan ==0.7.6.1,
+             cabal-rpm ==2.3.0,
+             cabal-sort ==0.1.2.1,
+             Cabal-syntax installed,
+             cache ==0.1.3.0,
+             cached-json-file ==0.1.1,
+             cacophony ==0.11.0,
+             cairo ==0.13.12.0,
+             cairo-image ==0.1.0.6,
+             calendar-recycling ==0.0.0.1,
+             call-alloy ==0.6.0.3,
+             calligraphy ==0.1.8,
+             call-plantuml ==0.0.1.3,
+             call-stack ==0.4.0,
+             can-i-haz ==0.3.1.1,
+             capability ==0.5.0.1,
+             ca-province-codes ==1.0.0.0,
+             cardano-coin-selection ==1.0.1,
+             carray ==0.1.6.8,
+             casa-client ==0.0.4,
+             casa-types ==0.0.3,
+             cased ==0.1.0.0,
+             case-insensitive ==1.2.1.0,
+             cases ==0.1.4.5,
+             casing ==0.1.4.1,
+             cassava ==0.5.4.1,
+             cassava-conduit ==0.6.6,
+             cassava-megaparsec ==2.1.1,
+             cast ==0.1.0.2,
+             caster ==0.0.3.0,
+             cauldron ==0.9.0.1,
+             cayley-client ==0.4.19.5,
+             cborg ==0.2.10.0,
+             cborg-json ==0.2.6.0,
+             cdar-mBound ==0.1.0.4,
+             c-enum ==0.1.1.3,
+             cereal ==0.5.8.3,
+             cereal-conduit ==0.8.0,
+             cereal-text ==0.1.0.2,
+             cereal-unordered-containers ==0.1.0.1,
+             cereal-vector ==0.2.0.1,
+             cfenv ==0.1.0.0,
+             cgi ==3001.5.1.0,
+             chan ==0.0.4.1,
+             ChannelT ==0.0.0.7,
+             character-cases ==0.1.0.6,
+             character-ps ==0.1,
+             charset ==0.3.12,
+             charsetdetect-ae ==1.1.0.4,
+             Chart ==1.9.5,
+             Chart-cairo ==1.9.4.1,
+             Chart-diagrams ==1.9.5.1,
+             chart-svg ==0.8.3.2,
+             ChasingBottoms ==1.3.1.17,
+             check-email ==1.0.2,
+             checkers ==0.6.0,
+             checksum ==0.0.0.1,
+             chell ==0.5.0.2,
+             chell-hunit ==0.3.0.2,
+             chimera ==0.4.1.0,
+             choice ==0.2.4.2,
+             chronologique ==0.3.1.3,
+             chronos ==1.1.7.0,
+             chunked-data ==0.3.1,
+             cipher-aes ==0.2.11,
+             cipher-camellia ==0.0.2,
+             cipher-rc4 ==0.1.4,
+             circle-packing ==0.1.0.6,
+             circular ==0.4.0.3,
+             citeproc ==0.9.0.1,
+             clash-ghc ==1.8.5,
+             clash-lib ==1.8.5,
+             clash-prelude ==1.8.5,
+             clash-prelude-hedgehog ==1.8.5,
+             classy-prelude ==1.5.0.3,
+             classy-prelude-conduit ==1.5.0,
+             classy-prelude-yesod ==1.5.0,
+             clay ==0.16.1,
+             cli-arguments ==0.7.0.0,
+             clientsession ==0.9.3.0,
+             Clipboard ==2.3.2.2,
+             clock ==0.8.4,
+             closed ==0.2.1.0,
+             clumpiness ==0.17.0.2,
+             ClustalParser ==1.3.0,
+             cmark ==0.6.1,
+             cmark-gfm ==0.2.6,
+             cmark-lucid ==0.1.0.0,
+             cmdargs ==0.10.22,
+             codec-beam ==0.2.0,
+             code-conjure ==0.7.8,
+             code-page ==0.2.1,
+             coinor-clp ==0.0.0.2,
+             cointracking-imports ==0.1.0.2,
+             collect-errors ==0.1.6.0,
+             co-log ==0.7.0.0,
+             co-log-concurrent ==0.5.1.1,
+             co-log-core ==0.3.2.7,
+             co-log-polysemy ==0.0.1.6,
+             colonnade ==1.2.0.2,
+             Color ==0.4.1,
+             colorful-monoids ==0.2.1.3,
+             colorize-haskell ==1.0.1,
+             colour ==2.3.7,
+             colourista ==0.1.0.2,
+             columnar ==1.0.0.0,
+             combinatorial ==0.1.1,
+             comfort-array ==0.5.5,
+             comfort-array-shape ==0.0,
+             comfort-blas ==0.0.3.1,
+             comfort-fftw ==0.0.0.1,
+             comfort-glpk ==0.1,
+             comfort-graph ==0.0.5.1,
+             commonmark ==0.2.6.1,
+             commonmark-extensions ==0.2.7.1,
+             commonmark-pandoc ==0.2.3,
+             commutative ==0.0.2,
+             commutative-semigroups ==0.2.0.2,
+             comonad ==5.0.10,
+             compact ==0.2.0.0,
+             compactmap ==0.1.4.6,
+             companion ==0.1.0,
+             compensated ==0.8.3,
+             compiler-warnings ==0.1.0,
+             componentm ==0.0.0.2,
+             componentm-devel ==0.0.0.2,
+             composable-associations ==0.1.0.0,
+             composition ==1.0.2.2,
+             composition-extra ==2.1.0,
+             composition-prelude ==3.0.1.0,
+             concise ==0.1.0.1,
+             concurrency ==1.11.0.3,
+             concurrent-extra ==0.7.0.12,
+             concurrent-output ==1.10.21,
+             concurrent-split ==0.0.1.1,
+             concurrent-supply ==0.1.8,
+             cond ==0.5.1,
+             conduino ==0.2.4.0,
+             conduit ==1.3.6.1,
+             conduit-aeson ==0.1.1.0,
+             conduit-algorithms ==0.0.14.0,
+             conduit-combinators ==1.3.0,
+             conduit-concurrent-map ==0.1.4,
+             conduit-extra ==1.3.8,
+             conduit-parse ==0.2.1.1,
+             conduit-zstd ==0.0.2.0,
+             config-ini ==0.2.7.0,
+             configuration-tools ==0.7.1,
+             configurator ==0.3.0.0,
+             configurator-export ==0.1.0.1,
+             config-value ==0.8.3,
+             constrained-categories ==0.4.2.0,
+             constraints ==0.14.4,
+             constraints-extras ==0.4.0.2,
+             constraint-tuples ==0.2,
+             construct ==0.3.2,
+             consumers ==2.3.3.1,
+             containers installed,
+             context ==0.2.1.1,
+             context-http-client ==0.2.0.2,
+             context-resource ==0.2.0.2,
+             context-wai-middleware ==0.2.0.2,
+             contiguous ==0.6.5.0,
+             contra-tracer ==0.2.1.1,
+             contravariant ==1.5.6,
+             contravariant-extras ==0.3.5.4,
+             control-bool ==0.2.1,
+             control-dsl ==0.2.1.3,
+             control-monad-free ==0.6.2,
+             control-monad-omega ==0.3.4,
+             convertible ==1.1.1.1,
+             cookie ==0.5.1,
+             copilot ==4.5.1,
+             copilot-c99 ==4.5.1,
+             copilot-core ==4.5.1,
+             copilot-interpreter ==4.5.1,
+             copilot-language ==4.5.1,
+             copilot-libraries ==4.5.1,
+             copilot-prettyprinter ==4.5.1,
+             copilot-theorem ==4.5.1,
+             copr-api ==0.2.0,
+             core-data ==0.3.9.1,
+             core-program ==0.7.0.0,
+             core-telemetry ==0.2.9.4,
+             core-text ==0.3.8.1,
+             countable ==1.2,
+             countdown-numbers-game ==0.0.0.1,
+             country ==0.2.5.0,
+             covariance ==0.2.0.1,
+             cpphs ==1.20.10,
+             cpu ==0.1.2,
+             cpuinfo ==0.1.0.3,
+             cql ==4.0.4,
+             cql-io ==1.1.1,
+             crackNum ==3.15,
+             crc32c ==0.2.2,
+             crdt-event-fold ==1.8.1.4,
+             criterion ==1.6.4.0,
+             criterion-measurement ==0.2.5.0,
+             cron ==0.7.2,
+             crypto-api ==0.13.3,
+             crypto-api-tests ==0.3,
+             crypto-cipher-tests ==0.0.11,
+             crypto-cipher-types ==0.0.9,
+             cryptocompare ==0.1.2,
+             cryptohash ==0.11.9,
+             cryptohash-cryptoapi ==0.1.4,
+             cryptohash-md5 ==0.11.101.0,
+             cryptohash-sha1 ==0.11.101.0,
+             cryptohash-sha256 ==0.11.102.1,
+             cryptohash-sha512 ==0.11.103.0,
+             crypton ==1.0.6,
+             crypton-conduit ==0.2.3,
+             crypton-connection ==0.4.5,
+             cryptonite ==0.30,
+             cryptonite-conduit ==0.2.2,
+             cryptonite-openssl ==0.7,
+             crypton-pem ==0.3.0,
+             crypton-socks ==0.6.2,
+             crypton-x509 ==1.7.7,
+             crypton-x509-store ==1.6.14,
+             crypton-x509-system ==1.6.8,
+             crypton-x509-validation ==1.6.14,
+             crypto-pubkey-types ==0.4.3,
+             crypto-random-api ==0.2.0,
+             crypto-token ==0.1.2,
+             csp ==1.4.0,
+             css-syntax ==0.1.0.2,
+             css-text ==0.1.3.0,
+             c-struct ==0.1.3.0,
+             csv ==0.1.2,
+             csv-conduit ==1.0.1.1,
+             ctrie ==0.2,
+             cubicbezier ==0.6.0.7,
+             cubicspline ==0.1.2,
+             cue-sheet ==2.0.2,
+             curl ==1.3.8,
+             currency ==0.2.0.0,
+             currycarbon ==0.4.0.1,
+             cursor ==0.3.2.0,
+             cursor-brick ==0.1.0.1,
+             cursor-fuzzy-time ==0.1.0.0,
+             cursor-gen ==0.4.0.0,
+             cutter ==0.0,
+             cyclotomic ==1.1.2,
+             czipwith ==1.0.1.4,
+             daemons ==0.4.0,
+             data-accessor ==0.2.3.1,
+             data-accessor-mtl ==0.2.0.5,
+             data-accessor-transformers ==0.2.1.8,
+             data-array-byte ==0.1.0.2,
+             data-binary-ieee754 ==0.4.4,
+             data-bword ==0.1.0.2,
+             data-checked ==0.3,
+             data-clist ==0.2,
+             data-compat ==0.1.0.5,
+             data-default ==0.8.0.2,
+             data-default-class ==0.2.0.0,
+             data-diverse ==4.7.1.0,
+             data-dword ==0.3.2.1,
+             data-effects ==0.4.2.0,
+             data-effects-core ==0.4.3.0,
+             data-effects-th ==0.4.2.1,
+             data-endian ==0.1.1,
+             data-findcycle ==0.1.2.0,
+             data-fix ==0.3.4,
+             data-functor-logistic ==0.0,
+             data-has ==0.4.0.0,
+             data-hash ==0.2.0.1,
+             data-interval ==2.1.2,
+             data-inttrie ==0.1.4,
+             data-lens-light ==0.1.2.4,
+             data-memocombinators ==0.5.1,
+             data-msgpack ==0.0.13,
+             data-msgpack-types ==0.0.3,
+             data-or ==1.0.0.12,
+             data-ordlist ==0.4.7.0,
+             data-prometheus ==0.1.0.0,
+             data-ref ==0.1,
+             data-reify ==0.6.4,
+             data-serializer ==0.3.5,
+             data-sketches ==0.3.1.0,
+             data-sketches-core ==0.1.0.0,
+             data-textual ==0.3.0.3,
+             dataurl ==0.1.0.0,
+             DAV ==1.3.4,
+             dbcleaner ==0.1.3,
+             dbus ==1.4.3,
+             dbus-hslogger ==0.1.1.1,
+             debian ==4.0.5,
+             debian-build ==0.10.2.1,
+             debug-trace-var ==0.2.0,
+             dec ==0.0.6,
+             decidable ==0.3.1.1,
+             Decimal ==0.5.2,
+             declarative ==0.5.4,
+             deepseq installed,
+             deepseq-generics ==0.2.0.1,
+             deferred-folds ==0.9.18.10,
+             defun-core ==0.1.0.1,
+             dejafu ==2.4.0.8,
+             delta-types ==1.0.0.0,
+             dense-linear-algebra ==0.1.0.0,
+             dependent-map ==0.4.0.1,
+             dependent-monoidal-map ==0.1.1.5,
+             dependent-sum ==0.7.2.0,
+             dependent-sum-aeson-orphans ==0.3.1.2,
+             dependent-sum-template ==0.2.0.2,
+             depq ==0.4.2,
+             deque ==0.4.4.2,
+             deriveJsonNoPrefix ==0.1.0.1,
+             derive-storable ==0.3.1.0,
+             derive-topdown ==0.1.1.1,
+             deriving-aeson ==0.2.10,
+             deriving-compat ==0.6.8,
+             deriving-trans ==0.9.1.0,
+             detour-via-sci ==1.0.0,
+             df1 ==0.4.3,
+             dhall ==1.42.3,
+             di ==1.3,
+             diagrams ==1.4.2,
+             diagrams-braille ==0.1.2,
+             diagrams-builder ==0.8.0.6,
+             diagrams-cairo ==1.5,
+             diagrams-canvas ==1.4.2,
+             diagrams-contrib ==1.4.6,
+             diagrams-core ==1.5.1.2,
+             diagrams-gtk ==1.4,
+             diagrams-lib ==1.5.1,
+             diagrams-postscript ==1.5.3,
+             diagrams-rasterific ==1.5,
+             diagrams-solve ==0.1.3.1,
+             diagrams-svg ==1.5,
+             dice ==0.1.1,
+             di-core ==1.0.4,
+             dictionary-sharing ==0.1.0.0,
+             di-df1 ==1.2.1,
+             Diff ==1.0.2,
+             diff-loc ==0.1.0.0,
+             digest ==0.0.2.1,
+             digits ==0.3.2,
+             digraph ==0.3.2,
+             di-handle ==1.0.1,
+             dimensional ==1.6.2,
+             di-monad ==1.3.5,
+             directory installed,
+             directory-ospath-streaming ==0.2.2,
+             directory-tree ==0.12.1,
+             direct-sqlite ==2.3.29,
+             dirichlet ==0.1.0.7,
+             discount ==0.1.1,
+             discover-instances ==0.1.0.0,
+             discrimination ==0.5,
+             disk-free-space ==0.1.0.1,
+             distributed-closure ==0.5.0.0,
+             distributed-process ==0.7.8,
+             distributed-process-async ==0.2.11,
+             distributed-process-client-server ==0.2.8.0,
+             distributed-process-execution ==0.1.5.0,
+             distributed-process-extras ==0.3.9,
+             distributed-process-monad-control ==0.5.1.3,
+             distributed-process-simplelocalnet ==0.3.3,
+             distributed-process-supervisor ==0.2.4,
+             distributed-process-systest ==0.4.2,
+             distributed-process-tests ==0.5.2,
+             distributed-static ==0.3.11,
+             distribution-nixpkgs ==1.7.1.1,
+             distribution-opensuse ==1.1.4,
+             distributive ==0.6.3,
+             djinn-lib ==0.0.1.4,
+             djot ==0.1.4.1,
+             dl-fedora ==2.0.1,
+             dlist ==1.0,
+             dlist-instances ==0.1.1.1,
+             dns ==4.2.0,
+             dobutokO2 ==0.45.3.0,
+             dockerfile ==0.2.0,
+             doclayout ==0.5.0.3,
+             docopt ==0.7.0.8,
+             doctemplates ==0.11.0.1,
+             doctest ==0.24.3,
+             doctest-discover ==0.2.0.0,
+             doctest-driver-gen ==0.3.0.8,
+             doctest-exitcode-stdio ==0.0.0.1,
+             doctest-extract ==0.1.2,
+             doctest-lib ==0.1.1.1,
+             doctest-parallel ==0.4.1,
+             doldol ==0.4.1.2,
+             do-list ==1.0.1,
+             domain ==0.1.1.5,
+             domain-aeson ==0.1.1.3,
+             domain-cereal ==0.1.0.1,
+             domain-core ==0.1.0.4,
+             domain-optics ==0.1.0.4,
+             do-notation ==0.1.0.2,
+             dot ==0.3,
+             dotgen ==0.4.3,
+             dotnet-timespan ==0.0.1.0,
+             dotparse ==0.1.4.0,
+             double-conversion ==2.0.5.0,
+             download ==0.3.2.7,
+             download-curl ==0.1.4,
+             DPutils ==0.1.1.0,
+             drifter ==0.3.0,
+             drifter-postgresql ==0.2.1,
+             drifter-sqlite ==0.1.0.0,
+             dsp ==0.2.5.2,
+             dual-tree ==0.2.3.4,
+             dublincore-xml-conduit ==0.1.0.3,
+             dunai ==0.14.1,
+             duration ==0.2.0.0,
+             dynamic-state ==0.3.2,
+             dyre ==0.9.2,
+             eap ==0.9.0.2,
+             Earley ==0.13.0.1,
+             easy-file ==0.2.5,
+             easy-logger ==0.1.0.7,
+             easyplot ==1.0,
+             Ebnf2ps ==1.0.15,
+             ech-config ==0.0.1,
+             echo ==0.1.4,
+             ecstasy ==0.2.1.0,
+             ed25519 ==0.0.5.0,
+             ede ==0.3.4.0,
+             edit-distance ==0.2.2.1,
+             edit-distance-vector ==1.0.0.4,
+             editor-open ==0.6.0.0,
+             effectful ==2.6.1.0,
+             effectful-core ==2.6.1.0,
+             effectful-plugin ==2.0.0.1,
+             effectful-th ==1.0.0.3,
+             egison-pattern-src ==0.2.1.2,
+             either ==5.0.3,
+             either-unwrap ==1.1,
+             ekg ==0.4.1.2,
+             ekg-core ==0.1.2.0,
+             ekg-json ==0.1.1.1,
+             ekg-statsd ==0.2.6.2,
+             ekg-wai ==0.1.2.0,
+             elerea ==2.9.0,
+             elf ==0.31,
+             eliminators ==0.9.5,
+             elm2nix ==0.4.0,
+             elm-bridge ==0.8.5,
+             elm-core-sources ==1.0.0,
+             elm-export ==0.6.0.1,
+             elm-syntax ==0.3.3.0,
+             elynx ==0.8.0.0,
+             elynx-markov ==0.8.0.0,
+             elynx-nexus ==0.8.0.0,
+             elynx-seq ==0.8.0.0,
+             elynx-tools ==0.8.0.0,
+             elynx-tree ==0.7.2.2,
+             emacs-module ==0.2.1.1,
+             email-validate ==2.3.2.21,
+             emd ==0.2.0.0,
+             emojis ==0.1.5,
+             enclosed-exceptions ==1.0.3,
+             encoding ==0.10.3,
+             end-of-exe ==0.1.2.0,
+             ENIG ==0.0.1.0,
+             entropy ==0.4.1.11,
+             enummapset ==0.7.3.0,
+             enumset ==0.1.0.2,
+             enum-subset-generate ==0.1.0.3,
+             enum-text ==0.5.3.0,
+             envelope ==0.2.2.0,
+             envparse ==0.6.0,
+             envy ==2.1.5.0,
+             epub-metadata ==5.4,
+             eq ==4.3,
+             equal-files ==0.0.5.4,
+             equational-reasoning ==0.7.1.0,
+             equivalence ==0.4.1.1,
+             erf ==2.0.0.0,
+             errata ==0.4.0.3,
+             error ==1.0.0.0,
+             errorcall-eq-instance ==0.3.0,
+             error-or ==0.3.0,
+             error-or-utils ==0.2.0,
+             errors ==2.3.0,
+             errors-ext ==0.4.2,
+             ersatz ==0.6,
+             esqueleto ==3.6.0.0,
+             essence-of-live-coding ==0.2.9,
+             essence-of-live-coding-gloss ==0.2.9,
+             essence-of-live-coding-pulse ==0.2.9,
+             essence-of-live-coding-quickcheck ==0.2.9,
+             essence-of-live-coding-warp ==0.2.9,
+             event-list ==0.1.3,
+             every ==0.0.1,
+             evm-opcodes ==0.2.0,
+             exact-combinatorics ==0.2.0.11,
+             exact-pi ==0.5.1.0,
+             exception-hierarchy ==0.1.0.14,
+             exception-mtl ==0.4.0.2,
+             exceptions installed,
+             exception-transformers ==0.4.0.12,
+             executable-hash ==0.2.0.4,
+             executable-path ==0.0.3.1,
+             exinst ==0.9,
+             exit-codes ==1.0.0,
+             exomizer ==1.0.0,
+             exon ==1.7.3.0,
+             expiring-cache-map ==0.0.6.1,
+             explicit-exception ==0.2.0.2,
+             exp-pairs ==0.2.1.1,
+             express ==1.0.18,
+             extended-reals ==0.2.7.0,
+             extensible-exceptions ==0.1.1.4,
+             extra ==1.8.1,
+             extractable-singleton ==0.0.1,
+             extra-data-yj ==0.1.0.0,
+             extrapolate ==0.4.6,
+             fail ==4.9.0.0,
+             FailT ==0.1.2.0,
+             fakedata ==1.0.5,
+             fakedata-parser ==0.1.0.0,
+             fakefs ==0.3.0.2,
+             fakepull ==0.3.0.2,
+             faktory ==1.1.3.2,
+             falsify ==0.2.0,
+             fast-builder ==0.1.5.0,
+             fast-digits ==0.3.2.0,
+             fast-logger ==3.2.6,
+             fast-math ==1.0.2,
+             fast-myers-diff ==0.0.2,
+             fcf-family ==0.2.0.3,
+             fdo-notify ==0.3.1,
+             feature-flags ==0.1.0.1,
+             fedora-krb ==0.1.0,
+             fedora-releases ==0.3.0,
+             fedora-repoquery ==0.7.4,
+             feed ==1.3.2.1,
+             FenwickTree ==0.1.2.1,
+             fft ==0.1.8.7,
+             fftw-ffi ==0.1,
+             fgl ==5.8.3.1,
+             fgl-visualize ==0.1.0.1,
+             fields-json ==0.4.0.0,
+             filecache ==0.5.3,
+             file-embed ==0.0.16.0,
+             file-embed-lzma ==0.1,
+             file-io ==0.2.0,
+             filelock ==0.1.1.9,
+             filemanip ==0.3.6.3,
+             file-modules ==0.1.2.4,
+             filepath installed,
+             filepath-bytestring ==1.5.2.0.5,
+             file-path-th ==0.1.0.0,
+             filepattern ==0.1.3,
+             fileplow ==0.1.0.0,
+             filter-logger ==0.6.0.0,
+             filtrable ==0.1.6.0,
+             fin ==0.3.2,
+             FindBin ==0.0.5,
+             fingertree ==0.1.6.3,
+             finite-typelits ==0.2.1.0,
+             first-class-families ==0.8.2.0,
+             fits-parse ==0.4.2,
+             fitspec ==0.4.10,
+             fixed ==0.3,
+             fixed-generic ==0.1.0.2,
+             fixed-length ==0.2.3.1,
+             fixed-vector ==2.0.0.0,
+             fixed-vector-hetero ==0.7.0.0,
+             fix-whitespace ==0.1,
+             flac ==0.2.1,
+             flac-picture ==0.1.3,
+             flags-applicative ==0.1.0.3,
+             flat ==0.6,
+             flatparse ==0.5.3.1,
+             flay ==0.5,
+             flexible-defaults ==0.0.3,
+             FloatingHex ==0.5,
+             floatshow ==0.2.4,
+             flow ==2.0.0.11,
+             flush-queue ==1.0.0,
+             fmlist ==0.9.5,
+             fmt ==0.6.3.0,
+             fn ==0.3.0.2,
+             focus ==1.0.3.2,
+             focuslist ==0.1.1.0,
+             foldable1-classes-compat ==0.1.3,
+             fold-debounce ==0.2.0.17,
+             fold-debounce-conduit ==0.2.0.9,
+             foldl ==1.4.18,
+             folds ==0.7.8,
+             FontyFruity ==0.5.3.5,
+             force-layout ==0.4.1,
+             foreign-store ==0.2.1,
+             ForestStructures ==0.0.1.1,
+             forkable-monad ==0.2.0.3,
+             forma ==1.2.0,
+             formatn ==0.3.4.0,
+             format-numbers ==0.1.0.1,
+             formatting ==7.2.0,
+             foundation ==0.0.30,
+             free ==5.2,
+             free-alacarte ==1.0.0.9,
+             free-categories ==0.2.0.2,
+             free-foil ==0.2.0,
+             freenect ==1.2.1,
+             freer-par-monad ==0.1.0.0,
+             freetype2 ==0.2.0,
+             free-vl ==0.1.4,
+             friendly-time ==0.4.1,
+             frisby ==0.2.5,
+             from-sum ==0.2.3.0,
+             frontmatter ==0.1.0.2,
+             fsnotify ==0.4.4.0,
+             ftp-client ==0.5.1.6,
+             funcmp ==1.9,
+             function-builder ==0.3.0.1,
+             functor-combinators ==0.4.1.4,
+             functor-products ==0.1.2.2,
+             fused-effects ==1.1.2.7,
+             fusion-plugin ==0.2.8,
+             fusion-plugin-types ==0.1.0,
+             fuzzcheck ==0.1.1,
+             fuzzy ==0.1.1.0,
+             fuzzy-dates ==0.1.1.2,
+             fuzzyset ==0.3.2,
+             fuzzystrmatch-pg ==0.1.0.0,
+             fuzzy-time ==0.3.0.1,
+             gd ==3000.7.3,
+             gdp ==0.0.3.0,
+             gemini-exports ==0.1.0.2,
+             general-games ==1.1.1,
+             generic-aeson ==0.2.0.14,
+             generically ==0.1.1,
+             generic-arbitrary ==1.0.1.2,
+             generic-case ==0.1.1.1,
+             generic-constraints ==1.1.1.1,
+             generic-data ==1.1.0.2,
+             generic-data-functions ==0.6.0,
+             generic-data-surgery ==0.3.0.0,
+             generic-deriving ==1.14.7,
+             generic-enumeration ==0.1.0.5,
+             generic-functor ==1.1.0.0,
+             generic-lens ==2.2.2.0,
+             generic-lens-core ==2.2.1.0,
+             generic-lexicographic-order ==0.1.0.1,
+             generic-monoid ==0.1.0.1,
+             generic-optics ==2.2.1.0,
+             GenericPretty ==1.2.2,
+             generic-random ==1.5.0.1,
+             generics-eot ==0.4.1.0,
+             generics-sop ==0.5.1.4,
+             generics-sop-lens ==0.2.1,
+             generic-type-asserts ==0.3.0,
+             generic-type-functions ==0.1.0,
+             genvalidity ==1.1.1.0,
+             genvalidity-aeson ==1.0.0.1,
+             genvalidity-appendful ==0.1.0.0,
+             genvalidity-bytestring ==1.0.0.1,
+             genvalidity-case-insensitive ==0.0.0.1,
+             genvalidity-containers ==1.0.0.2,
+             genvalidity-criterion ==1.1.0.0,
+             genvalidity-hspec ==1.0.0.4,
+             genvalidity-hspec-aeson ==1.0.0.0,
+             genvalidity-hspec-binary ==1.0.0.0,
+             genvalidity-hspec-cereal ==1.0.0.0,
+             genvalidity-hspec-hashable ==1.0.0.1,
+             genvalidity-hspec-optics ==1.0.0.0,
+             genvalidity-hspec-persistent ==1.0.0.0,
+             genvalidity-mergeful ==0.3.0.1,
+             genvalidity-mergeless ==0.3.0.0,
+             genvalidity-network-uri ==0.0.0.0,
+             genvalidity-path ==1.0.0.1,
+             genvalidity-persistent ==1.0.0.2,
+             genvalidity-property ==1.0.0.0,
+             genvalidity-scientific ==1.0.0.0,
+             genvalidity-sydtest ==1.0.1.0,
+             genvalidity-sydtest-aeson ==1.0.0.1,
+             genvalidity-sydtest-hashable ==1.0.0.1,
+             genvalidity-sydtest-lens ==1.0.0.0,
+             genvalidity-sydtest-persistent ==1.0.0.1,
+             genvalidity-text ==1.0.0.1,
+             genvalidity-time ==1.0.0.1,
+             genvalidity-typed-uuid ==0.1.0.1,
+             genvalidity-unordered-containers ==1.0.0.1,
+             genvalidity-uuid ==1.0.0.1,
+             genvalidity-vector ==1.0.0.0,
+             geodetics ==1.1.0,
+             geoip2 ==0.4.1.3,
+             getopt-generics ==0.13.1.0,
+             ghc installed,
+             ghc-bignum installed,
+             ghc-bignum-orphans ==0.1.1,
+             ghc-boot installed,
+             ghc-boot-th installed,
+             ghc-byteorder ==4.11.0.0.10,
+             ghc-check ==0.5.0.8,
+             ghc-compact ==0.1.0.0,
+             ghc-core ==0.5.6,
+             ghc-events ==0.20.0.0,
+             ghc-exactprint ==1.10.0.0,
+             ghc-experimental installed,
+             ghc-heap installed,
+             ghc-hs-meta ==0.1.5.0,
+             ghci4luatex ==0.1.4,
+             ghcid ==0.8.9,
+             ghci-hexcalc ==0.1.1.0,
+             ghc-internal installed,
+             ghcjs-codemirror ==0.0.0.2,
+             ghcjs-dom ==0.9.9.2,
+             ghcjs-dom-jsaddle ==0.9.9.1,
+             ghcjs-perch ==0.3.3.3,
+             ghc-lib ==9.12.3.20251228,
+             ghc-lib-parser ==9.12.3.20251228,
+             ghc-lib-parser-ex ==9.12.0.0,
+             ghc-parser ==0.2.8.0,
+             ghc-paths ==0.1.0.12,
+             ghc-prim installed,
+             ghc-source-gen ==0.4.7.0,
+             ghc-syntax-highlighter ==0.0.13.0,
+             ghc-tcplugins-extra ==0.4.6,
+             ghc-trace-events ==0.1.2.10,
+             ghc-typelits-extra ==0.4.8,
+             ghc-typelits-knownnat ==0.7.13,
+             ghc-typelits-natnormalise ==0.7.10,
+             ghc-typelits-presburger ==0.7.4.2,
+             ghost-buster ==0.1.1.0,
+             ghostscript-parallel ==0.0.1,
+             gi-atk ==2.0.28,
+             gi-cairo ==1.0.30,
+             gi-cairo-connector ==0.1.1,
+             gi-cairo-render ==0.1.2,
+             gi-dbusmenu ==0.4.14,
+             gi-dbusmenugtk3 ==0.4.16,
+             gi-freetype2 ==2.0.5,
+             gi-gdk ==4.0.10,
+             gi-gdk3 ==3.0.30,
+             gi-gdk4 ==4.0.10,
+             gi-gdkpixbuf ==2.0.32,
+             gi-gdkx11 ==4.0.9,
+             gi-gdkx113 ==3.0.17,
+             gi-gdkx114 ==4.0.9,
+             gi-gio ==2.0.38,
+             gi-glib ==2.0.30,
+             gi-gmodule ==2.0.6,
+             gi-gobject ==2.0.31,
+             gi-graphene ==1.0.8,
+             gi-gsk ==4.0.9,
+             gi-gtk ==4.0.12,
+             gi-gtk3 ==3.0.44,
+             gi-gtk4 ==4.0.12,
+             gi-gtksource ==5.0.2,
+             gi-gtksource5 ==5.0.2,
+             gi-harfbuzz ==0.0.10,
+             gi-javascriptcore ==6.0.5,
+             gi-javascriptcore6 ==6.0.5,
+             ginger ==0.10.6.0,
+             gio ==0.13.12.0,
+             gi-pango ==1.0.30,
+             gi-soup ==3.0.4,
+             gi-soup3 ==3.0.5,
+             githash ==0.1.7.0,
+             github ==0.30.0.2,
+             github-release ==2.0.0.19,
+             github-rest ==1.2.1,
+             github-types ==0.2.1,
+             github-webhooks ==0.18.0,
+             gitlab-haskell ==1.1.0.0,
+             git-lfs ==1.2.5,
+             git-mediate ==1.1.0,
+             gitrev ==1.3.1,
+             gi-vte ==2.91.35,
+             gi-xlib ==2.0.14,
+             gl ==0.9.1,
+             glabrous ==2.0.6.4,
+             glasso ==0.1.0,
+             GLFW-b ==3.3.9.1,
+             glfw-group ==0.1.0.6,
+             glib ==0.13.12.0,
+             glib-stopgap ==0.1.0.1,
+             Glob ==0.10.2,
+             glob-posix ==0.2.0.1,
+             gloss ==1.13.2.2,
+             gloss-algorithms ==1.13.0.3,
+             gloss-rendering ==1.13.2.1,
+             glpk-headers ==0.5.1,
+             GLURaw ==2.0.0.5,
+             GLUT ==2.7.0.16,
+             gnuplot ==0.5.7,
+             gogol ==1.0.0.0,
+             gogol-adexchange-buyer ==1.0.0,
+             gogol-adexchange-seller ==1.0.0,
+             gogol-admin-datatransfer ==1.0.0,
+             gogol-admin-directory ==1.0.0,
+             gogol-admin-reports ==1.0.0,
+             gogol-adsense ==1.0.0,
+             gogol-adsense-host ==1.0.0,
+             gogol-analytics ==1.0.0,
+             gogol-android-enterprise ==1.0.0,
+             gogol-android-publisher ==1.0.0,
+             gogol-appengine ==1.0.0,
+             gogol-apps-activity ==1.0.0,
+             gogol-apps-calendar ==1.0.0,
+             gogol-apps-licensing ==1.0.0,
+             gogol-apps-reseller ==1.0.0,
+             gogol-apps-tasks ==1.0.0,
+             gogol-appstate ==1.0.0,
+             gogol-bigquery ==1.0.0,
+             gogol-billing ==1.0.0,
+             gogol-blogger ==1.0.0,
+             gogol-books ==1.0.0,
+             gogol-civicinfo ==1.0.0,
+             gogol-classroom ==1.0.0,
+             gogol-cloudtrace ==1.0.0,
+             gogol-compute ==1.0.0,
+             gogol-container ==1.0.0,
+             gogol-core ==1.0.0.0,
+             gogol-customsearch ==1.0.0,
+             gogol-dataflow ==1.0.0,
+             gogol-dataproc ==1.0.0,
+             gogol-datastore ==1.0.0,
+             gogol-debugger ==1.0.0,
+             gogol-deploymentmanager ==1.0.0,
+             gogol-dfareporting ==1.0.0,
+             gogol-discovery ==1.0.0,
+             gogol-dns ==1.0.0,
+             gogol-doubleclick-bids ==1.0.0,
+             gogol-doubleclick-search ==1.0.0,
+             gogol-drive ==1.0.0,
+             gogol-firebase-rules ==1.0.0,
+             gogol-fitness ==1.0.0,
+             gogol-fonts ==1.0.0,
+             gogol-fusiontables ==1.0.0,
+             gogol-games ==1.0.0,
+             gogol-games-configuration ==1.0.0,
+             gogol-games-management ==1.0.0,
+             gogol-genomics ==1.0.0,
+             gogol-gmail ==1.0.0,
+             gogol-groups-migration ==1.0.0,
+             gogol-groups-settings ==1.0.0,
+             gogol-identity-toolkit ==1.0.0,
+             gogol-kgsearch ==1.0.0,
+             gogol-logging ==1.0.0,
+             gogol-mirror ==1.0.0,
+             gogol-monitoring ==1.0.0,
+             gogol-oauth2 ==1.0.0,
+             gogol-pagespeed ==1.0.0,
+             gogol-partners ==1.0.0,
+             gogol-people ==1.0.0,
+             gogol-play-moviespartner ==1.0.0,
+             gogol-plus ==1.0.0,
+             gogol-plus-domains ==1.0.0,
+             gogol-proximitybeacon ==1.0.0,
+             gogol-pubsub ==1.0.0,
+             gogol-qpxexpress ==1.0.0,
+             gogol-replicapool ==1.0.0,
+             gogol-replicapool-updater ==1.0.0,
+             gogol-resourcemanager ==1.0.0,
+             gogol-script ==1.0.0,
+             gogol-sheets ==1.0.0,
+             gogol-shopping-content ==1.0.0,
+             gogol-siteverification ==1.0.0,
+             gogol-spectrum ==1.0.0,
+             gogol-sqladmin ==1.0.0,
+             gogol-storage ==1.0.0,
+             gogol-storage-transfer ==1.0.0,
+             gogol-tagmanager ==1.0.0,
+             gogol-translate ==1.0.0,
+             gogol-urlshortener ==1.0.0,
+             gogol-vision ==1.0.0,
+             gogol-webmaster-tools ==1.0.0,
+             gogol-youtube ==1.0.0,
+             gogol-youtube-analytics ==1.0.0,
+             gogol-youtube-reporting ==1.0.0,
+             goldplate ==0.2.2.1,
+             google-isbn ==1.0.3,
+             google-oauth2-jwt ==0.3.3.3,
+             gopher-proxy ==0.1.1.3,
+             gpolyline ==0.1.0.1,
+             graph-core ==0.3.0.0,
+             graphite ==0.10.0.1,
+             graphql ==1.5.0.2,
+             graphql-client ==1.2.4,
+             graphql-spice ==1.0.7.0,
+             graphs ==0.7.3,
+             graphula ==2.1.2.0,
+             graphviz ==2999.20.2.1,
+             gravatar ==0.8.1,
+             greskell ==2.0.3.5,
+             greskell-core ==1.0.0.8,
+             greskell-websocket ==1.0.0.6,
+             gridtables ==0.1.1.0,
+             grisette ==0.13.0.1,
+             groom ==0.1.2.1,
+             group-by-date ==0.1.0.5,
+             groups ==0.5.3,
+             gtk ==0.15.10,
+             gtk2hs-buildtools ==0.13.12.0,
+             gtk3 ==0.15.10,
+             guarded-allocation ==0.0.1,
+             hackage-cli ==0.1.0.4,
+             hackage-db ==2.1.3,
+             hackage-revdeps ==0.1,
+             hackage-security ==0.6.3.3,
+             hackage-security-HTTP ==0.1.1.3,
+             haddock-library ==1.11.0,
+             haha ==0.3.1.1,
+             hakyll ==4.16.8.0,
+             hakyll-convert ==0.3.0.5,
+             hal ==1.1,
+             half ==0.3.3,
+             hall-symbols ==0.1.0.6,
+             hamlet ==1.2.0,
+             hamtsolo ==1.0.4,
+             HandsomeSoup ==0.4.2,
+             happstack-jmacro ==7.0.12.6,
+             happstack-server ==7.9.3,
+             happstack-server-tls ==7.2.1.7,
+             happy ==2.1.7,
+             happy-lib ==2.1.7,
+             happy-meta ==0.2.1.0,
+             harpie ==0.1.4.0,
+             harpie-numhask ==0.1.1.0,
+             HasBigDecimal ==0.2.0.0,
+             hashable ==1.5.1.0,
+             hashmap ==1.3.3,
+             hashtables ==1.4.2,
+             haskeline installed,
+             haskell-gi ==0.26.17,
+             haskell-gi-base ==0.26.9,
+             haskell-gi-overloading ==1.0,
+             haskell-lexer ==1.2.1,
+             HaskellNet ==0.6.2,
+             HaskellNet-SSL ==0.4.0.2,
+             haskell-src ==1.0.4.2,
+             haskell-src-exts ==1.23.1,
+             haskell-src-exts-simple ==1.23.1.0,
+             haskell-src-exts-util ==0.2.5,
+             haskell-src-meta ==0.8.16,
+             haskey-btree ==0.3.0.1,
+             haskintex ==0.8.0.3,
+             haskoin-core ==1.2.2,
+             haskoin-store-data ==1.5.16,
+             hasktags ==0.73.0,
+             hasql ==1.9.3.1,
+             hasql-dynamic-statements ==0.3.1.8,
+             hasql-implicits ==0.2.0.2,
+             hasql-interpolate ==1.0.1.0,
+             hasql-listen-notify ==0.1.0.1,
+             hasql-migration ==0.3.1,
+             hasql-optparse-applicative ==0.9,
+             hasql-pool ==1.3.0.4,
+             hasql-th ==0.4.0.23,
+             hasql-transaction ==1.2.1,
+             has-transformers ==0.1.0.4,
+             Hastructure ==0.50.4,
+             hasty-hamiltonian ==1.3.4,
+             HaTeX ==3.23.0.2,
+             haveibeenpwned ==0.2.0.3,
+             HaXml ==1.25.14,
+             haxr ==3000.11.6.1,
+             Hclip ==3.0.0.4,
+             HCodecs ==0.5.2,
+             hdaemonize ==0.5.7,
+             HDBC ==2.4.0.5,
+             HDBC-session ==0.1.2.1,
+             headed-megaparsec ==0.2.1.3,
+             heap ==1.0.4,
+             heaps ==0.4.1,
+             heatshrink ==0.1.0.0,
+             hebrew-time ==0.1.2,
+             hedgehog ==1.5,
+             hedgehog-classes ==0.2.5.4,
+             hedgehog-corpus ==0.2.0,
+             hedgehog-fakedata ==0.0.1.5,
+             hedgehog-fn ==1.0,
+             hedgehog-quickcheck ==0.1.1,
+             hedis ==0.15.2,
+             hedn ==0.3.0.4,
+             heftia ==0.7.0.0,
+             heftia-effects ==0.7.0.0,
+             heist ==1.1.1.2,
+             here ==1.2.14,
+             heredoc ==0.2.0.0,
+             heterocephalus ==1.0.5.7,
+             hetero-parameter-list ==0.1.0.21,
+             hetero-parameter-list-with-typelevel-tools ==0.1.0.1,
+             hetzner ==0.7.3.0,
+             hex ==0.2.0,
+             hexml ==0.3.5,
+             hexml-lens ==0.2.2,
+             hexpat ==0.20.13,
+             hex-text ==0.1.0.9,
+             hformat ==0.3.3.1,
+             hfsevents ==0.1.8,
+             hgal ==2.0.0.3,
+             hidapi ==0.1.8,
+             hie-bios ==0.16.0,
+             hi-file-parser ==0.1.9.1,
+             hinfo ==0.0.3.0,
+             hinotify ==0.4.2,
+             hint ==0.9.0.9,
+             histogram-fill ==0.9.1.0,
+             hjsmin ==0.2.1,
+             hkd-default ==1.1.0.0,
+             hkgr ==0.4.8,
+             hledger ==1.43.2,
+             hledger-iadd ==1.3.21,
+             hledger-interest ==1.6.7,
+             hledger-lib ==1.43.2,
+             hledger-stockquotes ==0.1.3.2,
+             hledger-ui ==1.43.2,
+             hledger-web ==1.43.2,
+             hlibcpuid ==0.2.0,
+             hlibgit2 ==0.18.0.16,
+             hlibsass ==0.1.10.3,
+             hlint ==3.10,
+             hmatrix ==0.20.2,
+             hmatrix-backprop ==0.1.3.0,
+             hmatrix-gsl ==0.19.0.1,
+             hmatrix-gsl-stats ==0.4.1.8,
+             hmatrix-morpheus ==0.1.1.2,
+             hmatrix-repa ==0.1.2.2,
+             hmatrix-special ==0.19.0.0,
+             hmatrix-vector-sized ==0.1.3.0,
+             hmpfr ==0.4.5,
+             hoare ==0.1.1.0,
+             hoauth2 ==2.14.3,
+             honeycomb ==0.1.0.1,
+             hoogle ==5.0.18.4,
+             hopenssl ==2.2.5,
+             horizontal-rule ==0.7.1.0,
+             hosc ==0.21.1,
+             hostname ==1.0,
+             hostname-validate ==1.0.0,
+             hourglass ==0.2.12,
+             hourglass-orphans ==0.1.0.0,
+             hp2pretty ==0.10.1,
+             hpack ==0.38.3,
+             hpc installed,
+             hpc-codecov ==0.6.4.1,
+             hpc-lcov ==1.2.0,
+             HPDF ==1.7,
+             hpke ==0.0.0,
+             hpp ==0.6.5,
+             hpqtypes ==1.12.0.0,
+             hpqtypes-extras ==1.18.0.0,
+             hquantlib-time ==0.1.2,
+             hreader ==1.1.1,
+             hreader-lens ==0.1.3.0,
+             hruby ==0.5.1.0,
+             hsass ==0.8.0,
+             hs-bibutils ==6.10.0.0,
+             hsc2hs ==0.68.10,
+             hs-captcha ==1.0,
+             hscolour ==1.25,
+             hsdns ==1.8,
+             hse-cpp ==0.2,
+             hsemail ==2.2.2,
+             hset ==2.2.0,
+             HSet ==0.0.2,
+             hs-GeoIP ==0.3,
+             hsignal ==0.2.7.5,
+             hsini ==0.5.2.2,
+             hsinstall ==2.8,
+             HSlippyMap ==3.0.1,
+             hslogger ==1.3.2.0,
+             hslua ==2.3.1,
+             hslua-aeson ==2.3.2,
+             hslua-classes ==2.3.2,
+             hslua-cli ==1.4.4,
+             hslua-core ==2.3.2.1,
+             hslua-list ==1.1.4,
+             hslua-marshalling ==2.3.2,
+             hslua-module-doclayout ==1.2.0.1,
+             hslua-module-path ==1.1.1,
+             hslua-module-system ==1.1.3,
+             hslua-module-text ==1.1.1,
+             hslua-module-version ==1.1.1,
+             hslua-module-zip ==1.1.4,
+             hslua-objectorientation ==2.3.1,
+             hslua-packaging ==2.3.1,
+             hslua-repl ==0.1.2,
+             hslua-typing ==0.1.1,
+             hsndfile ==0.8.0,
+             hsndfile-vector ==0.5.2,
+             HsOpenSSL ==0.11.7.11,
+             HsOpenSSL-x509-system ==0.1.0.4,
+             hs-opentelemetry-api ==0.3.1.0,
+             hs-opentelemetry-exporter-handle ==0.0.1.3,
+             hs-opentelemetry-exporter-in-memory ==0.0.1.5,
+             hs-opentelemetry-exporter-otlp ==0.1.1.0,
+             hs-opentelemetry-otlp ==0.2.0.0,
+             hs-opentelemetry-propagator-b3 ==0.0.1.3,
+             hs-opentelemetry-propagator-datadog ==0.0.1.1,
+             hs-opentelemetry-propagator-w3c ==0.1.0.0,
+             hs-opentelemetry-sdk ==0.1.0.1,
+             hs-opentelemetry-semantic-conventions ==0.1.0.0,
+             hs-opentelemetry-vendor-honeycomb ==0.0.1.2,
+             hspec ==2.11.17,
+             hspec-api ==2.11.17,
+             hspec-attoparsec ==0.1.0.2,
+             hspec-checkers ==0.1.0.2,
+             hspec-contrib ==0.5.2,
+             hspec-core ==2.11.17,
+             hspec-discover ==2.11.17,
+             hspec-expectations ==0.8.4,
+             hspec-expectations-json ==1.0.2.1,
+             hspec-expectations-lifted ==0.10.0,
+             hspec-expectations-pretty-diff ==0.7.2.6,
+             hspec-golden ==0.2.2.0,
+             hspec-golden-aeson ==0.9.0.0,
+             hspec-hedgehog ==0.3.0.0,
+             hspec-junit-formatter ==1.1.2.1,
+             hspec-leancheck ==0.0.6,
+             hspec-megaparsec ==2.2.1,
+             hspec-meta ==2.11.17,
+             hspec-need-env ==0.1.0.13,
+             hspec-parsec ==0,
+             hspec-smallcheck ==0.5.3,
+             hspec-tmp-proc ==0.7.0.0,
+             hspec-wai ==0.11.1,
+             hspec-wai-json ==0.11.0,
+             hspec-webdriver ==1.2.2,
+             hs-php-session ==0.0.9.3,
+             hstatistics ==0.3.1,
+             HStringTemplate ==0.8.8,
+             HSvm ==1.0.3.35,
+             HsYAML ==0.2.1.5,
+             HsYAML-aeson ==0.2.0.2,
+             hsyslog ==5.0.2,
+             htaglib ==1.2.1,
+             HTF ==0.15.0.2,
+             html ==1.0.1.2,
+             html-conduit ==1.3.2.2,
+             html-email-validate ==0.2.0.0,
+             html-entities ==1.1.4.7,
+             html-entity-map ==0.1.0.0,
+             html-parse ==0.2.2.0,
+             HTTP ==4000.4.1,
+             http2 ==5.3.10,
+             http-api-data ==0.6.3,
+             http-api-data-qq ==0.1.0.1,
+             http-client ==0.7.19,
+             http-client-openssl ==0.3.3,
+             http-client-overrides ==0.1.1.0,
+             http-client-restricted ==0.1.1,
+             http-client-tls ==0.3.6.4,
+             http-common ==0.8.3.4,
+             http-conduit ==2.3.9.1,
+             http-date ==0.0.11,
+             http-directory ==0.1.12,
+             http-download ==0.2.1.0,
+             httpd-shed ==0.4.1.2,
+             http-io-streams ==0.1.7.2,
+             http-link-header ==1.2.3,
+             http-media ==0.8.1.1,
+             http-query ==0.1.3.1,
+             http-reverse-proxy ==0.6.2.0,
+             http-semantics ==0.3.0,
+             http-streams ==0.8.9.9,
+             http-types ==0.12.5,
+             human-readable-duration ==0.2.1.5,
+             HUnit ==1.6.2.0,
+             HUnit-approx ==1.1.1.1,
+             hunit-dejafu ==2.0.0.6,
+             hvect ==0.4.0.1,
+             hvega ==0.12.0.7,
+             hw-bits ==0.7.2.2,
+             hw-conduit-merges ==0.2.1.0,
+             hw-diagnostics ==0.0.1.0,
+             hweblib ==0.6.3,
+             hw-excess ==0.2.3.0,
+             hw-hedgehog ==0.1.1.1,
+             hw-int ==0.0.2.0,
+             hwk ==0.6,
+             hw-kafka-client ==5.3.0,
+             hw-mquery ==0.2.1.2,
+             hw-parser ==0.1.1.0,
+             hw-prim ==0.6.3.2,
+             hw-rankselect-base ==0.3.4.1,
+             hw-string-parse ==0.0.0.5,
+             hxt ==9.3.1.22,
+             hxt-charproperties ==9.5.0.0,
+             hxt-css ==0.1.0.3,
+             hxt-curl ==9.1.1.1,
+             hxt-expat ==9.1.1,
+             hxt-http ==9.1.5.2,
+             hxt-regex-xmlschema ==9.2.0.7,
+             hxt-tagsoup ==9.1.4,
+             hxt-unicode ==9.0.2.4,
+             hxt-xpath ==9.1.2.2,
+             hybrid-vectors ==0.2.5,
+             hyperbole ==0.4.3,
+             hyperloglog ==0.5,
+             hyphenation ==0.8.3,
+             iconv ==0.4.1.3,
+             identicon ==0.2.3,
+             ieee754 ==0.8.0,
+             if ==0.1.0.0,
+             IfElse ==0.85,
+             iff ==0.0.6.1,
+             ihaskell ==0.12.0.0,
+             ihaskell-hvega ==0.5.0.7,
+             ihs ==0.1.0.3,
+             imagesize-conduit ==1.1,
+             Imlib ==0.1.2,
+             immortal ==0.3,
+             immortal-queue ==0.1.0.1,
+             imp ==1.0.3.5,
+             ImpSpec ==0.1.0.0,
+             inbox ==0.2.0,
+             incipit-base ==0.6.1.1,
+             incipit-core ==0.6.1.1,
+             include-file ==0.1.0.4,
+             incremental ==0.3.1,
+             incremental-parser ==0.5.1,
+             indents ==0.5.0.1,
+             indexed ==0.1.3,
+             indexed-containers ==0.1.0.2,
+             indexed-list-literals ==0.2.1.3,
+             indexed-profunctors ==0.1.1.1,
+             indexed-transformers ==0.1.0.4,
+             indexed-traversable ==0.1.5,
+             indexed-traversable-instances ==0.1.2.1,
+             inf-backprop ==0.1.1.0,
+             infer-license ==0.2.0,
+             infinite-list ==0.1.3,
+             influxdb ==1.9.3.2,
+             ini ==0.4.2,
+             inj ==1.0,
+             inline-c ==0.9.1.10,
+             inline-c-cpp ==0.5.0.2,
+             input-parsers ==0.3.0.2,
+             insert-ordered-containers ==0.2.7,
+             inspection-testing ==0.6.3,
+             int-cast ==0.2.0.0,
+             integer-conversion ==0.1.1,
+             integer-gmp installed,
+             integer-logarithms ==1.0.5,
+             integer-roots ==1.0.4.0,
+             integration ==0.2.1,
+             intermediate-structures ==0.1.2.0,
+             intern ==0.9.6,
+             interpolate ==0.2.1,
+             interpolatedstring-perl6 ==1.0.2,
+             interpolation ==0.1.1.2,
+             Interpolation ==0.3.0,
+             IntervalMap ==0.6.2.4,
+             intervals ==0.9.3,
+             intset-imperative ==0.1.0.0,
+             int-supply ==1.0.0,
+             invariant ==0.6.5,
+             invertible ==0.2.0.8,
+             invertible-grammar ==0.1.3.5,
+             io-embed ==0.1.0.1,
+             io-machine ==0.2.0.0,
+             io-manager ==0.1.0.4,
+             io-memoize ==1.1.1.0,
+             io-region ==0.1.1,
+             io-storage ==0.3,
+             io-streams ==1.5.2.2,
+             io-streams-haproxy ==1.0.1.0,
+             ip ==1.7.8,
+             ip6addr ==2.0.0.1,
+             iproute ==1.7.15,
+             IPv6Addr ==2.0.6.2,
+             IPv6DB ==0.3.3.4,
+             ipynb ==0.2,
+             ipython-kernel ==0.11.0.0,
+             irc ==0.6.1.1,
+             irc-ctcp ==0.1.3.1,
+             iri ==0.5.1.2,
+             isbn ==1.1.0.5,
+             islink ==0.1.0.0,
+             iso3166-country-codes ==0.20140203.8,
+             iso639 ==0.1.0.3,
+             iso8601-time ==0.1.5,
+             isocline ==1.0.9,
+             isomorphism-class ==0.3.1.4,
+             ix-shapable ==0.1.0,
+             jack ==0.7.2.2,
+             jailbreak-cabal ==1.4.1,
+             jalaali ==1.0.0.0,
+             java-adt ==1.0.20251105,
+             jira-wiki-markup ==1.5.1,
+             jmacro ==0.6.18,
+             jose ==0.11,
+             jose-jwt ==0.10.0,
+             journalctl-stream ==0.6.0.8,
+             jsaddle ==0.9.9.4,
+             jsaddle-dom ==0.9.9.3,
+             jsaddle-warp ==0.9.9.6,
+             js-chart ==2.9.4.1,
+             js-dgtable ==0.5.2,
+             js-flot ==0.8.3,
+             js-jquery ==3.7.1,
+             json ==0.11,
+             json-feed ==2.0.0.19,
+             jsonifier ==0.2.1.3,
+             jsonpath ==0.3.0.0,
+             json-rpc ==1.1.2,
+             jsonrpc-tinyclient ==1.1.0.0,
+             json-spec ==1.1.1.2,
+             json-spec-elm ==0.4.0.7,
+             json-spec-elm-servant ==0.4.4.3,
+             json-spec-openapi ==1.0.1.3,
+             json-stream ==0.4.6.1,
+             JuicyCairo ==0.1.0.1,
+             JuicyPixels ==3.3.9,
+             JuicyPixels-extra ==0.6.0,
+             junit-xml ==0.1.0.4,
+             justified-containers ==0.3.0.0,
+             kan-extensions ==5.2.8,
+             kansas-comet ==0.4.4,
+             katip ==0.8.8.4,
+             katip-logstash ==0.1.0.2,
+             katip-wai ==0.2.0.2,
+             kazura-queue ==0.1.0.4,
+             kdt ==0.2.6,
+             keep-alive ==0.2.1.0,
+             keter ==2.1.10,
+             keycode ==0.2.4,
+             keyed-vals ==0.2.3.5,
+             keyed-vals-hspec-tests ==0.2.3.5,
+             keyed-vals-mem ==0.2.3.4,
+             keyed-vals-redis ==0.2.3.5,
+             keys ==3.12.5,
+             ki ==1.0.1.2,
+             kind-apply ==0.4.0.1,
+             kind-generics ==0.5.0.0,
+             ki-unlifted ==1.0.0.2,
+             kmeans ==0.1.3,
+             knob ==0.2.2,
+             koji ==0.0.2,
+             koji-tool ==1.3.1,
+             kvitable ==1.1.2.0,
+             labels ==0.3.3,
+             lackey ==2.0.0.12,
+             lambdabot-core ==5.3.1.2,
+             lambdabot-irc-plugins ==5.3.1.2,
+             LambdaHack ==0.11.0.1,
+             lame ==0.2.2,
+             language-avro ==0.1.4.0,
+             language-bash ==0.11.1,
+             language-c ==0.10.2,
+             language-c99 ==0.2.0,
+             language-c99-simple ==0.3.0,
+             language-c99-util ==0.2.0,
+             language-c-quote ==0.13.0.2,
+             language-docker ==14.0.1,
+             language-dot ==0.1.2,
+             language-glsl ==0.3.0,
+             language-java ==0.2.9,
+             language-javascript ==0.7.1.0,
+             language-lua ==0.11.0.2,
+             language-nix ==2.2.0,
+             language-protobuf ==1.0.1,
+             lapack-carray ==0.0.3,
+             lapack-comfort-array ==0.0.1.1,
+             lapack-ffi ==0.0.3,
+             lapack-ffi-tools ==0.1.3.2,
+             large-hashable ==0.1.3.0,
+             largeword ==1.2.5,
+             latex ==0.1.0.4,
+             lattices ==2.2.1.1,
+             lawful ==0.1.0.0,
+             lawful-conversions ==0.1.7,
+             lazy-csv ==0.5.1,
+             lazyio ==0.1.0.6,
+             lazysmallcheck ==0.6,
+             lca ==0.4,
+             leancheck ==1.0.4,
+             leancheck-instances ==0.0.8,
+             leapseconds-announced ==2017.1.0.1,
+             learn-physics ==0.6.7,
+             leb128-cereal ==1.2,
+             lens ==5.3.6,
+             lens-action ==0.2.6,
+             lens-aeson ==1.2.3,
+             lens-csv ==0.1.1.0,
+             lens-family ==2.1.3,
+             lens-family-core ==2.1.3,
+             lens-family-th ==0.5.3.2,
+             lens-misc ==0.0.2.0,
+             lens-properties ==4.11.1,
+             lens-regex ==0.1.3,
+             lens-regex-pcre ==1.1.2.0,
+             lentil ==1.5.10.0,
+             LetsBeRational ==1.0.0.0,
+             leveldb-haskell ==0.6.5.1,
+             lexer-applicative ==2.1.0.2,
+             libBF ==0.6.8,
+             libffi ==0.2.1,
+             libmpd ==0.10.0.1,
+             liboath-hs ==0.0.1.2,
+             libsodium-bindings ==0.0.3.0,
+             libyaml ==0.1.4,
+             libyaml-clib ==0.2.5,
+             lifted-async ==0.10.2.7,
+             lifted-base ==0.2.3.12,
+             lifted-threads ==1.0,
+             lift-generics ==0.3.1,
+             lift-type ==0.1.2.0,
+             linear ==1.23.3,
+             linear-base ==0.5.0,
+             linear-generics ==0.2.3,
+             linear-geo ==0.1.0.0,
+             linear-programming ==0.0.1,
+             linebreak ==1.1.0.4,
+             linux-capabilities ==0.1.1.0,
+             linux-file-extents ==0.2.0.1,
+             linux-namespaces ==0.2.0.1,
+             liquid-fixpoint ==0.9.6.3.2,
+             liquidhaskell ==0.9.10.1.2,
+             liquidhaskell-boot ==0.9.10.1.2,
+             List ==0.6.2,
+             ListLike ==4.7.8.4,
+             list-predicate ==0.1.0.1,
+             listsafe ==0.1.0.1,
+             lists-flines ==0.1.3.0,
+             list-shuffle ==1.0.0.1,
+             list-t ==1.0.5.7,
+             list-transformer ==1.1.1,
+             ListTree ==0.2.3,
+             list-witnesses ==0.1.4.1,
+             ListZipper ==1.2.0.2,
+             literatex ==0.4.0.0,
+             lmdb ==0.2.5,
+             load-env ==0.2.1.0,
+             locators ==0.3.0.5,
+             loch-th ==0.2.2,
+             lockfree-queue ==0.2.4,
+             log-base ==0.12.1.0,
+             log-domain ==0.13.2,
+             logfloat ==0.14.0.2,
+             logger-thread ==0.1.0.2,
+             logging ==3.0.6,
+             logging-effect ==1.4.2,
+             logging-facade ==0.3.1,
+             logging-facade-syslog ==1,
+             logict ==0.8.2.0,
+             logstash ==0.1.0.4,
+             loop ==0.3.0,
+             lpeg ==1.1.0.1,
+             LPFP ==1.1.5,
+             LPFP-core ==1.1.5,
+             lr-acts ==0.0.1,
+             lrucache ==1.2.0.1,
+             lsfrom ==2.0,
+             lsp ==2.7.0.1,
+             lsp-test ==0.17.1.1,
+             lsp-types ==2.3.0.1,
+             lua ==2.3.4,
+             lua-arbitrary ==1.0.1.2,
+             lucid ==2.11.20260427,
+             lucid2 ==0.0.20260427,
+             lucid-cdn ==0.2.2.0,
+             lucid-extras ==0.2.2,
+             lukko ==0.1.2,
+             lumberjack ==1.0.3.0,
+             lz4 ==0.2.3.1,
+             lz4-frame-conduit ==0.1.0.2,
+             lzma ==0.0.1.1,
+             lzma-clib ==5.2.2,
+             machines ==0.7.4,
+             magic ==1.1.2,
+             mail-pool ==2.3.1,
+             mailtrap ==0.1.2.2,
+             mainland-pretty ==0.7.1.1,
+             main-tester ==0.2.0.1,
+             managed ==1.0.11,
+             mandrill ==0.5.8.0,
+             manifolds-core ==0.6.1.1,
+             Mantissa ==0.1.0.0,
+             mappings ==0.3.3.0,
+             map-syntax ==0.3,
+             markdown ==0.1.17.5,
+             markdown-unlit ==0.6.0,
+             markov-chain ==0.0.3.4,
+             markov-chain-usage-model ==0.0.0,
+             markup-parse ==0.2.2.0,
+             massiv ==1.0.5.0,
+             massiv-io ==1.0.0.1,
+             massiv-serialise ==1.0.0.2,
+             massiv-test ==1.1.0.1,
+             matchable ==0.2,
+             mathexpr ==0.3.1.0,
+             math-extras ==0.1.1.0,
+             math-functions ==0.3.4.4,
+             mathlist ==0.2.0.0,
+             matplotlib ==0.7.7,
+             matrices ==0.5.0,
+             matrix ==0.3.6.4,
+             matrix-as-xyz ==0.1.2.2,
+             matrix-market-attoparsec ==0.1.1.3,
+             matrix-static ==0.3,
+             maximal-cliques ==0.1.1,
+             mbox-utility ==0.0.3.1,
+             mcmc ==0.8.3.1,
+             mcmc-types ==1.0.3,
+             mcp-server ==0.1.0.20,
+             mealy ==0.5.1.1,
+             median-stream ==0.7.0.0,
+             med-module ==0.1.3,
+             megaparsec ==9.7.0,
+             megaparsec-tests ==9.7.0,
+             melf ==1.3.1,
+             membership ==0.0.1,
+             memcache ==0.3.0.2,
+             mem-info ==0.4.2.0,
+             memory ==0.18.0,
+             memory-hexstring ==1.1.0.0,
+             MemoTrie ==0.6.11,
+             mempack ==0.1.2.0,
+             mergeful ==0.3.0.0,
+             mergeful-persistent ==0.3.0.1,
+             mergeless ==0.4.0.0,
+             mergeless-persistent ==0.1.0.1,
+             merkle-tree ==0.1.1,
+             mersenne-random ==1.0.0.1,
+             mersenne-random-pure64 ==0.2.2.0,
+             messagepack ==0.5.5,
+             metrics ==0.4.1.1,
+             mfsolve ==0.3.2.2,
+             microaeson ==0.1.0.3,
+             microlens ==0.4.14.0,
+             microlens-aeson ==2.5.2,
+             microlens-contra ==0.1.0.3,
+             microlens-ghc ==0.4.15.1,
+             microlens-mtl ==0.2.1.0,
+             microlens-platform ==0.4.4.1,
+             microlens-th ==0.4.3.17,
+             microspec ==0.2.1.3,
+             microstache ==1.0.3.1,
+             midair ==0.2.0.1,
+             midi ==0.2.2.6,
+             midi-alsa ==0.2.1,
+             midi-music-box ==0.0.1.2,
+             mighty-metropolis ==2.0.0,
+             mime-mail ==0.5.1,
+             mime-mail-ses ==0.4.4,
+             mime-types ==0.1.2.2,
+             minimal-configuration ==0.1.4,
+             minimorph ==0.3.0.1,
+             minisat ==0.1.4,
+             minisat-solver ==0.1,
+             miniterion ==0.1.2.1,
+             miniutter ==0.5.1.2,
+             minmax ==0.1.1.0,
+             mintty ==0.1.4,
+             misfortune ==0.1.2.1,
+             miso ==1.8.7.0,
+             missing-foreign ==0.1.1,
+             MissingH ==1.6.0.3,
+             mixed-types-num ==0.6.2,
+             mmap ==0.5.9,
+             mmark ==0.0.8.0,
+             mmark-cli ==0.0.5.2,
+             mmark-ext ==0.2.1.5,
+             mmorph ==1.2.2,
+             mmsyn2-array ==0.3.1.1,
+             mmsyn7l ==0.9.2.0,
+             mmsyn7ukr-array ==0.3.0.0,
+             mmsyn7ukr-common ==0.3.1.0,
+             mnist-idx ==0.1.3.2,
+             mnist-idx-conduit ==0.4.0.0,
+             mockcat ==0.5.5.0,
+             mockery ==0.3.5,
+             mod ==0.2.2.0,
+             modern-uri ==0.3.6.1,
+             modular ==0.1.0.8,
+             moffy ==0.1.1.0,
+             moffy-samples ==0.1.0.3,
+             moffy-samples-events ==0.2.2.5,
+             moffy-samples-gtk3 ==0.1.0.0,
+             moffy-samples-gtk3-run ==0.1.0.7,
+             monad-chronicle ==1.1.0.1,
+             monad-control ==1.0.3.1,
+             monad-control-aligned ==0.0.2.1,
+             monad-control-identity ==0.2.0.0,
+             monad-coroutine ==0.9.3,
+             monad-extras ==0.6.0,
+             monad-interleave ==0.2.0.1,
+             monadlist ==0.0.2,
+             monad-logger ==0.3.42,
+             monad-logger-aeson ==0.4.1.6,
+             monad-logger-extras ==0.1.1.2,
+             monad-logger-json ==0.1.0.0,
+             monad-logger-logstash ==0.2.0.2,
+             monad-logger-syslog ==0.1.6.1,
+             monad-loops ==0.4.3,
+             monad-memo ==0.5.4,
+             monad-metrics ==0.2.2.2,
+             monadoid ==0.0.3,
+             monadology ==0.4,
+             monad-par ==0.3.6,
+             monad-parallel ==0.8.0.1,
+             monad-par-extras ==0.3.3,
+             monad-peel ==0.3,
+             MonadPrompt ==1.0.0.5,
+             MonadRandom ==0.6.2.1,
+             monad-resumption ==0.1.4.0,
+             monad-schedule ==0.2.0.2,
+             monad-st ==0.2.4.1,
+             monads-tf ==0.3.0.1,
+             monad-time ==0.4.0.0,
+             mongoDB ==2.7.1.4,
+             monoidal-containers ==0.6.8.0,
+             monoidal-functors ==0.2.3.0,
+             monoid-extras ==0.7.0.2,
+             monoid-insertleft ==0.1.0.1,
+             monoid-map ==0.2.0.1,
+             monoidmap ==0.0.4.4,
+             monoidmap-aeson ==0.0.0.6,
+             monoidmap-examples ==0.0.0.2,
+             monoidmap-internal ==0.0.0.1,
+             monoidmap-quickcheck ==0.0.0.4,
+             monoid-subclasses ==1.2.6.1,
+             monoid-transformer ==0.0.4.1,
+             mono-traversable ==1.0.21.0,
+             mono-traversable-instances ==0.1.1.0,
+             more-containers ==0.2.2.2,
+             morpheus-graphql-app ==0.28.5,
+             morpheus-graphql-client ==0.28.5,
+             morpheus-graphql-code-gen-utils ==0.28.5,
+             morpheus-graphql-core ==0.28.5,
+             morpheus-graphql-server ==0.28.5,
+             morpheus-graphql-subscriptions ==0.28.5,
+             moss ==0.2.0.1,
+             mountpoints ==1.0.2,
+             mpi-hs ==0.7.3.1,
+             mpi-hs-binary ==0.1.1.0,
+             mpi-hs-cereal ==0.1.0.0,
+             msgpack ==1.0.1.0,
+             mstate ==0.2.11,
+             mt19937 ==0.1.1,
+             mtl installed,
+             mtl-compat ==0.2.2,
+             mtl-misc-yj ==0.1.0.4,
+             mtl-prelude ==2.0.3.2,
+             multiarg ==0.30.0.10,
+             multimap ==1.2.1,
+             multipart ==0.2.1,
+             MultipletCombiner ==0.0.7,
+             multiset ==0.3.4.3,
+             multistate ==0.8.0.4,
+             murmur3 ==1.0.6,
+             murmur-hash ==0.1.0.11,
+             MusicBrainz ==0.4.1,
+             mustache ==2.4.3.1,
+             mutable-containers ==0.3.4.1,
+             mwc-probability ==2.3.1,
+             mwc-random ==0.15.3.0,
+             mx-state-codes ==1.0.0.0,
+             myers-diff ==0.3.0.2,
+             mysql ==0.2.1,
+             mysql-json-table ==0.1.4.1,
+             mysql-simple ==0.4.9,
+             n2o ==0.11.1,
+             n2o-nitro ==0.11.2,
+             nagios-check ==0.3.2,
+             named ==0.3.0.2,
+             named-text ==1.2.4.0,
+             names-th ==0.3.0.1,
+             nano-erl ==0.1.0.1,
+             NanoID ==3.4.1.2,
+             nanospec ==0.2.2,
+             nats ==1.1.2,
+             natural-arithmetic ==0.2.4.0,
+             natural-induction ==0.2.0.0,
+             natural-sort ==0.1.2,
+             natural-transformation ==0.4.1,
+             neat-interpolation ==0.5.1.4,
+             nerd-font-icons ==0.1.0.1,
+             netcode-io ==0.0.3,
+             netlib-carray ==0.1,
+             netlib-comfort-array ==0.0.0.2,
+             netlib-ffi ==0.1.2,
+             netpbm ==1.0.4,
+             netrc ==0.2.0.2,
+             nettle ==0.3.1.1,
+             netwire ==5.0.3,
+             netwire-input ==0.0.7,
+             netwire-input-glfw ==0.0.12,
+             network ==3.2.8.0,
+             network-bsd ==2.8.1.0,
+             network-byte-order ==0.1.8,
+             network-conduit-tls ==1.4.0.1,
+             network-control ==0.1.7,
+             network-house ==0.1.0.3,
+             network-info ==0.2.1,
+             network-ip ==0.3.0.3,
+             network-messagepack-rpc ==0.1.2.0,
+             network-multicast ==0.3.2,
+             network-run ==0.4.4,
+             network-simple ==0.4.5,
+             network-simple-tls ==0.4.2,
+             network-transport ==0.5.9,
+             network-transport-inmemory ==0.5.42,
+             network-transport-tcp ==0.8.6,
+             network-transport-tests ==0.3.4,
+             network-uri ==2.6.4.2,
+             network-uri-template ==0.1.2.0,
+             network-wait ==0.2.0.0,
+             newtype ==0.2.2.1,
+             newtype-generics ==0.6.3,
+             nfc ==0.1.1,
+             nicify-lib ==1.0.1,
+             NineP ==0.0.2.1,
+             nix-narinfo ==0.1.1.3,
+             nix-paths ==1.0.1,
+             NoHoed ==0.1.1,
+             nonce ==1.0.7,
+             nondeterminism ==1.5,
+             non-empty ==0.3.6.1,
+             nonempty-containers ==0.3.5.0,
+             non-empty-sequence ==0.2.0.4,
+             non-empty-text ==0.2.1,
+             nonempty-vector ==0.2.4,
+             nonempty-zipper ==1.0.1.1,
+             non-negative ==0.1.2.1,
+             no-recursion ==0.1.2.3,
+             normaldistribution ==1.1.0.3,
+             nothunks ==0.3.2,
+             no-value ==1.0.0.0,
+             nowdoc ==0.1.1.0,
+             nsis ==0.3.4,
+             n-tuple ==0.0.3,
+             numbers ==3000.2.0.2,
+             numeric-extras ==0.1,
+             numeric-limits ==0.1.0.0,
+             numeric-prelude ==0.4.4,
+             numeric-quest ==0.2.1,
+             numhask ==0.13.3.0,
+             numhask-space ==0.13.3.0,
+             NumInstances ==1.4,
+             numtype-dk ==0.5.0.3,
+             nvim-hs ==2.3.2.6,
+             nvim-hs-contrib ==2.0.0.2,
+             nvim-hs-ghcid ==2.0.1.0,
+             ObjectName ==1.1.0.2,
+             oblivious-transfer ==0.1.0,
+             o-clock ==1.4.0.1,
+             odbc ==0.3.0,
+             ods2csv ==0.1.0.2,
+             oeis ==0.3.10.2,
+             oeis2 ==1.0.9,
+             ofx ==0.4.4.0,
+             ogma-cli ==1.7.0,
+             ogma-core ==1.7.0,
+             ogma-extra ==1.7.0,
+             ogma-language-c ==1.7.0,
+             ogma-language-copilot ==1.7.0,
+             ogma-language-csv ==1.7.0,
+             ogma-language-jsonspec ==1.7.0,
+             ogma-language-lustre ==1.7.0,
+             ogma-language-smv ==1.7.0,
+             ogma-language-xlsx ==1.7.0,
+             ogma-language-xmlspec ==1.7.0,
+             ogma-spec ==1.7.0,
+             old-locale ==1.0.0.7,
+             old-time ==1.1.1.0,
+             ollama-haskell ==0.2.1.0,
+             om-doh ==0.1.0.6,
+             om-elm ==2.0.1.2,
+             om-fail ==0.1.0.7,
+             om-fork ==0.7.1.13,
+             om-http ==0.5.0.1,
+             om-logging ==1.1.0.12,
+             om-show ==0.1.2.13,
+             om-time ==0.3.1.3,
+             once ==0.4,
+             one-liner ==2.1.1,
+             one-liner-instances ==0.1.3.0,
+             OneTuple ==0.4.3,
+             Only ==0.1,
+             oo-prototypes ==0.1.0.0,
+             oops ==0.2.0.1,
+             opaleye ==0.10.8.0,
+             OpenAL ==1.7.0.5,
+             openapi3 ==3.2.4,
+             open-browser ==0.4.0.0,
+             openexr-write ==0.1.0.2,
+             OpenGL ==3.0.3.0,
+             OpenGLRaw ==3.3.4.1,
+             openpgp-asciiarmor ==0.1.2,
+             opensource ==0.1.1.0,
+             openssl-streams ==1.2.3.0,
+             opentelemetry ==0.8.0,
+             opentelemetry-extra ==0.8.0,
+             opentelemetry-lightstep ==0.8.0,
+             opentelemetry-wai ==0.8.0,
+             open-witness ==0.7,
+             operational ==0.2.4.2,
+             opml-conduit ==0.9.0.0,
+             opt-env-conf ==0.9.0.0,
+             optics ==0.4.2.1,
+             optics-core ==0.4.2,
+             optics-extra ==0.4.2.1,
+             optics-operators ==0.1.0.1,
+             optics-th ==0.4.1,
+             optics-vl ==0.2.1,
+             optima ==0.4.0.7,
+             optional-args ==1.0.2,
+             options ==1.2.1.2,
+             optparse-applicative ==0.18.1.0,
+             optparse-enum ==1.0.0.0,
+             optparse-generic ==1.5.3,
+             optparse-simple ==0.1.1.4,
+             optparse-text ==0.1.1.0,
+             OrderedBits ==0.0.2.0,
+             ordered-containers ==0.2.4,
+             os-string installed,
+             overhang ==1.0.0,
+             packcheck ==0.7.1,
+             pager ==0.1.1.0,
+             pagination ==0.2.2,
+             pagure ==0.2.1,
+             pagure-cli ==0.2.3,
+             palette ==0.3.0.4,
+             pandoc ==3.7.0.2,
+             pandoc-cli ==3.7.0.2,
+             pandoc-lua-engine ==0.4.3,
+             pandoc-lua-marshal ==0.3.2.1,
+             pandoc-plot ==1.9.2,
+             pandoc-server ==0.1.0.11,
+             pandoc-throw ==0.1.0.0,
+             pandoc-types ==1.23.1.2,
+             pango ==0.13.12.0,
+             panic ==0.4.0.1,
+             pantry ==0.10.1,
+             parallel ==3.2.2.0,
+             parallel-io ==0.3.5,
+             parameterized ==0.5.0.0,
+             parameterized-utils ==2.1.11.0,
+             paramtree ==0.1.2,
+             park-bench ==0.1.1.0,
+             parseargs ==0.2.0.9,
+             parsec installed,
+             parsec-class ==1.0.1.0,
+             parsec-numbers ==0.1.0,
+             parsec-numeric ==0.1.0.0,
+             ParsecTools ==0.0.2.0,
+             parser-combinators ==1.3.1,
+             parser-combinators-tests ==1.3.1,
+             parser-regex ==0.3.0.0,
+             parsers ==0.12.12,
+             partial-handler ==1.0.3,
+             partial-isomorphisms ==0.2.4.0,
+             partialord ==0.1.1,
+             password ==3.1.0.2,
+             password-instances ==3.0.0.0,
+             password-types ==1.0.1.0,
+             patch ==0.0.8.4,
+             path ==0.9.6,
+             path-binary-instance ==0.1.0.1,
+             path-dhall-instance ==0.2.1.0,
+             path-extensions ==0.1.1.0,
+             path-extra ==0.3.1,
+             path-io ==1.8.2,
+             path-like ==0.2.0.2,
+             path-pieces ==0.2.1,
+             pathtype ==0.8.1.4,
+             path-utils ==0.1.1.0,
+             pathwalk ==0.3.1.2,
+             patience ==0.3,
+             patrol ==1.1.0.0,
+             pava ==0.1.1.4,
+             pcg-random ==0.1.4.0,
+             pcre2 ==2.2.3,
+             pcre-heavy ==1.0.0.4,
+             pcre-light ==0.4.1.3,
+             pcre-utils ==0.1.9,
+             pdc ==0.1.1,
+             pdf-toolbox-content ==0.1.2,
+             pdf-toolbox-core ==0.1.3,
+             pdf-toolbox-document ==0.1.4,
+             peano ==0.1.1.0,
+             pedersen-commitment ==0.2.0,
+             pem ==0.2.4,
+             percent-format ==0.0.4,
+             perf ==0.14.0.3,
+             perfect-hash-generator ==1.0.0,
+             persistable-record ==0.6.0.6,
+             persistable-types-HDBC-pg ==0.0.3.5,
+             persistent ==2.17.1.0,
+             persistent-discover ==0.1.0.7,
+             persistent-documentation ==0.1.0.6,
+             persistent-lens ==1.0.0,
+             persistent-mongoDB ==2.13.1.0,
+             persistent-mtl ==0.5.2,
+             persistent-mysql ==2.13.1.5,
+             persistent-pagination ==0.1.1.2,
+             persistent-postgresql ==2.13.7.0,
+             persistent-qq ==2.12.0.7,
+             persistent-redis ==2.13.0.2,
+             persistent-sqlite ==2.13.3.1,
+             persistent-template ==2.12.0.0,
+             persistent-test ==2.13.2.1,
+             persistent-typed-db ==0.1.0.7,
+             pg-harness-client ==0.6.0,
+             pg-transact ==0.3.2.0,
+             phantom-state ==0.2.1.5,
+             pid1 ==0.1.3.1,
+             pinch ==0.5.2.0,
+             pinecone ==1.0.0,
+             pipes ==4.3.16,
+             pipes-aeson ==0.4.2,
+             pipes-attoparsec ==0.6.0,
+             pipes-binary ==0.4.4,
+             pipes-bytestring ==2.1.7,
+             pipes-concurrency ==2.0.14,
+             pipes-csv ==1.4.3,
+             pipes-extras ==1.0.15,
+             pipes-fastx ==0.3.0.0,
+             pipes-fluid ==0.6.0.1,
+             pipes-group ==1.0.12,
+             pipes-http ==1.0.6,
+             pipes-mongodb ==0.1.0.0,
+             pipes-ordered-zip ==1.2.1,
+             pipes-parse ==3.0.9,
+             pipes-random ==1.0.0.5,
+             pipes-safe ==2.3.5,
+             pipes-wai ==3.2.0,
+             pipes-zlib ==0.4.4.2,
+             pkgtreediff ==0.6.0,
+             place-cursor-at ==1.0.1,
+             placeholders ==0.1,
+             plaid ==0.1.0.4,
+             plot ==0.2.3.12,
+             plotlyhs ==0.2.3,
+             Plural ==0.0.2,
+             pointed ==5.0.5,
+             pointedlist ==0.6.1,
+             pointless-fun ==1.1.0.13,
+             poll ==0.0.0.2,
+             poly ==0.5.1.0,
+             poly-arity ==0.1.0,
+             polynomials-bernstein ==1.1.2,
+             polyparse ==1.13.1,
+             polysemy ==1.9.2.0,
+             polysemy-fs ==0.1.0.0,
+             polysemy-plugin ==0.4.5.3,
+             polysemy-webserver ==0.2.1.2,
+             pontarius-xmpp ==0.5.7.2,
+             pontarius-xmpp-extras ==0.1.0.12,
+             pooled-io ==0.0.2.5,
+             portable-lines ==0.1,
+             port-utils ==0.2.1.0,
+             posix-paths ==0.3.0.1,
+             posix-pty ==0.2.2,
+             possibly ==1.0.0.0,
+             postgres-options ==0.2.2.0,
+             postgresql-binary ==0.14.2,
+             postgresql-libpq ==0.11.0.0,
+             postgresql-libpq-configure ==0.11,
+             postgresql-libpq-notify ==0.2.0.0,
+             postgresql-migration ==0.2.1.8,
+             postgresql-schema ==0.1.14,
+             postgresql-simple ==0.7.0.1,
+             postgresql-syntax ==0.4.5.0,
+             postgresql-typed ==0.6.2.5,
+             post-mess-age ==0.2.1.0,
+             pptable ==0.3.0.0,
+             pqueue ==1.5.0.0,
+             prairie ==0.1.2.0,
+             pred-set ==0.0.1,
+             prefix-units ==0.3.0.1,
+             prelude-compat ==0.0.0.2,
+             prelude-safeenum ==0.1.1.8,
+             pretty installed,
+             prettychart ==0.3.0.3,
+             pretty-class ==1.0.1.1,
+             prettyclass ==1.0.0.0,
+             pretty-hex ==1.1,
+             prettyprinter ==1.7.2,
+             prettyprinter-ansi-terminal ==1.1.4,
+             prettyprinter-combinators ==0.1.4,
+             prettyprinter-compat-annotated-wl-pprint ==1.1.1,
+             prettyprinter-compat-ansi-wl-pprint ==1.0.2,
+             prettyprinter-compat-wl-pprint ==1.0.2,
+             prettyprinter-interp ==0.2.0.0,
+             pretty-relative-time ==0.3.0.0,
+             pretty-show ==1.10,
+             pretty-simple ==4.1.4.0,
+             pretty-sop ==0.2.0.3,
+             pretty-terminal ==0.1.0.0,
+             primecount ==0.1.0.2,
+             primes ==0.2.1.0,
+             primitive ==0.9.1.0,
+             primitive-addr ==0.1.0.3,
+             primitive-extras ==0.10.2.2,
+             primitive-offset ==0.2.0.1,
+             primitive-serial ==0.1,
+             primitive-unaligned ==0.1.1.2,
+             primitive-unlifted ==2.2.0.0,
+             prim-uniq ==0.2,
+             print-console-colors ==0.1.0.0,
+             probability ==0.2.9.1,
+             probability-polynomial ==1.0.1.0,
+             process installed,
+             process-extras ==0.7.4,
+             product-isomorphic ==0.0.3.4,
+             product-profunctors ==0.11.1.1,
+             profunctors ==5.6.3,
+             projectroot ==0.2.0.1,
+             project-template ==0.2.1.0,
+             prometheus ==2.3.1,
+             prometheus-client ==1.1.1,
+             prometheus-metrics-ghc ==1.0.1.2,
+             promises ==0.3,
+             prompt-hs ==1.0.3.1,
+             prospect ==0.1.0.0,
+             protobuf ==0.2.1.3,
+             protobuf-simple ==0.1.1.1,
+             protocol-radius ==0.0.1.2,
+             protocol-radius-test ==0.1.0.1,
+             proto-lens ==0.7.1.7,
+             proto-lens-optparse ==0.1.1.14,
+             proto-lens-protobuf-types ==0.7.2.3,
+             proto-lens-protoc ==0.9.0.1,
+             proto-lens-runtime ==0.7.0.8,
+             proto-lens-setup ==0.4.0.10,
+             protolude ==0.3.5,
+             proxied ==0.3.2,
+             pseudo-boolean ==0.1.12.0,
+             psql-helpers ==0.1.0.0,
+             PSQueue ==1.2.2,
+             psqueues ==0.2.8.3,
+             pthread ==0.2.1,
+             ptr ==0.16.8.7,
+             ptr-poker ==0.1.3,
+             pulse-simple ==0.1.14,
+             pureMD5 ==2.1.4,
+             puresat ==0.1.0.1,
+             purescript-bridge ==0.15.0.0,
+             pusher-http-haskell ==2.1.0.21,
+             pvar ==1.0.0.0,
+             pwstore-fast ==2.4.4,
+             PyF ==0.11.5.0,
+             qchas ==1.1.0.1,
+             quaalude ==0.0.0.1,
+             quadratic-irrational ==0.1.2,
+             quantizer ==0.4.0.0,
+             QuasiText ==0.1.2.6,
+             queues ==1.0.0,
+             queue-sheet ==0.8.0.1,
+             quickbench ==1.0.1,
+             QuickCheck ==2.15.0.1,
+             quickcheck-arbitrary-adt ==0.3.1.0,
+             quickcheck-assertions ==0.3.0,
+             quickcheck-classes ==0.6.5.0,
+             quickcheck-classes-base ==0.6.2.0,
+             quickcheck-dynamic ==4.0.1,
+             quickcheck-groups ==0.0.1.5,
+             quickcheck-higherorder ==0.1.0.1,
+             quickcheck-instances ==0.3.33,
+             quickcheck-io ==0.2.0,
+             quickcheck-monoid-subclasses ==0.3.0.6,
+             quickcheck-quid ==0.0.1.8,
+             quickcheck-simple ==0.1.1.1,
+             quickcheck-special ==0.1.0.6,
+             quickcheck-state-machine ==0.10.4,
+             quickcheck-text ==0.1.2.1,
+             quickcheck-transformer ==0.3.1.3,
+             quickcheck-unicode ==1.0.1.0,
+             quicklz ==1.5.0.11,
+             quiet ==0.2,
+             quote-quot ==0.2.1.0,
+             radius ==0.7.1.0,
+             radix-tree ==1.1.0.0,
+             rainbow ==0.34.2.2,
+             rainbox ==0.26.0.0,
+             ral ==0.2.2,
+             rampart ==2.0.0.13,
+             ramus ==0.1.2,
+             rando ==0.0.0.4,
+             random ==1.2.1.3,
+             random-bytestring ==0.1.4,
+             random-fu ==0.3.0.1,
+             random-shuffle ==0.0.4,
+             random-tree ==0.6.0.5,
+             range ==0.3.2.2,
+             ranged-list ==0.1.2.3,
+             Ranged-sets ==0.5.0,
+             ranges ==0.2.4,
+             range-set-list ==0.1.4.1,
+             rank1dynamic ==0.4.3,
+             rank2classes ==1.5.5.1,
+             Rasterific ==0.7.5.4,
+             rasterific-svg ==0.3.3.2,
+             ratel ==2.0.0.19,
+             rate-limit ==1.4.3,
+             ratel-wai ==2.0.0.12,
+             ratio-int ==0.1.2,
+             rattle ==0.2,
+             rattletrap ==14.1.4,
+             rawfilepath ==1.1.1,
+             rawstring-qm ==0.2.3.1,
+             raw-strings-qq ==1.1,
+             rcu ==0.2.7,
+             rdf ==0.1.0.8,
+             rdtsc ==1.3.0.1,
+             re2 ==0.3,
+             reactive-balsa ==0.4.0.1,
+             reactive-banana ==1.3.2.0,
+             reactive-banana-bunch ==1.0.0.1,
+             reactive-jack ==0.4.1.2,
+             reactive-midyim ==0.4.1.3,
+             readable ==0.3.1,
+             read-editor ==0.1.0.2,
+             read-env-var ==1.0.0.0,
+             real-dice ==0.1.0.5,
+             rebase ==1.21.2,
+             rec-def ==0.2.2,
+             record-hasfield ==1.0.1,
+             recover-rtti ==0.5.3,
+             recursion-schemes ==5.2.3,
+             recv ==0.1.1,
+             redact ==0.6.0.0,
+             reddit-scrape ==0.0.1,
+             redis-glob ==0.1.0.11,
+             redis-resp ==1.0.0,
+             reducers ==3.12.5,
+             refact ==0.3.0.2,
+             ref-fd ==0.5.0.1,
+             refined ==0.8.2,
+             refined-containers ==0.1.2.0,
+             reflection ==2.1.9,
+             reflex ==0.9.4.1,
+             reflex-dom-core ==0.8.1.4,
+             reflex-fsnotify ==0.3.0.2,
+             reflex-gadt-api ==0.2.2.3,
+             reflex-vty ==1.0.0.1,
+             RefSerialize ==0.4.0,
+             ref-tf ==0.5.0.1,
+             regex ==1.1.0.2,
+             regex-applicative ==0.3.4,
+             regex-base ==0.94.0.3,
+             regex-compat ==0.95.2.2,
+             regex-pcre ==0.95.0.1,
+             regex-pcre-builtin ==0.95.2.3.8.44,
+             regex-posix ==0.96.0.2,
+             regex-posix-clib ==2.7,
+             regex-tdfa ==1.3.2.5,
+             regex-with-pcre ==1.1.0.2,
+             registry ==0.6.3.3,
+             registry-aeson ==0.3.1.2,
+             reinterpret-cast ==0.1.0,
+             relapse ==1.0.0.1,
+             relational-query ==0.12.3.1,
+             relational-query-HDBC ==0.7.2.1,
+             relational-record ==0.2.2.0,
+             relational-schemas ==0.1.8.1,
+             reliable-io ==0.0.2,
+             relude ==1.2.2.2,
+             renderable ==0.2.0.1,
+             reorder-expression ==0.1.0.3,
+             repa ==3.4.2.0,
+             repa-algorithms ==3.4.2.0,
+             repa-io ==3.4.2.0,
+             replace-attoparsec ==1.5.0.0,
+             replace-megaparsec ==1.5.0.1,
+             repline ==0.4.3.0,
+             req ==3.13.4,
+             req-conduit ==1.0.2,
+             rerebase ==1.21.2,
+             rerefined ==0.8.0,
+             reroute ==0.7.0.0,
+             resolv ==0.2.0.3,
+             resource-pool ==0.4.0.0,
+             resourcet ==1.3.0,
+             rest-rewrite ==0.4.5,
+             result ==0.2.6.0,
+             retry ==0.9.3.1,
+             rev-scientific ==0.2.1.0,
+             rev-state ==0.2.0.1,
+             rex ==0.6.2,
+             rfc1751 ==0.1.4,
+             rfc5051 ==0.2,
+             rg ==1.4.0.0,
+             rhbzquery ==0.4.5,
+             rhine ==1.5,
+             rhine-gloss ==1.5,
+             rhine-terminal ==1.5,
+             rhythmic-sequences ==0.8.0.0,
+             riak-protobuf ==0.25.0.0,
+             richenv ==0.1.0.4,
+             rio ==0.1.25.0,
+             rio-orphans ==0.1.2.0,
+             rio-prettyprint ==0.1.9.0,
+             rng-utils ==0.3.1,
+             roc-id ==0.2.0.6,
+             rocksdb-haskell ==1.0.1,
+             rocksdb-haskell-jprupp ==2.1.7,
+             rocksdb-query ==0.4.3,
+             roles ==0.2.1.0,
+             rollbar ==1.1.3,
+             rope-utf16-splay ==0.4.0.0,
+             rosezipper ==0.2,
+             rot13 ==0.2.0.1,
+             RoundingFiasco ==0.1.0.0,
+             row-types ==1.0.1.2,
+             rpmbuild-order ==0.4.13,
+             rpm-nvr ==0.1.2,
+             rp-tree ==0.7.1,
+             rrb-vector ==0.2.2.1,
+             RSA ==2.4.1,
+             rss ==3000.2.0.8,
+             runmemo ==1.0.0.1,
+             run-st ==0.1.3.3,
+             rvar ==0.3.0.2,
+             rzk ==0.7.7,
+             s3-signer ==0.5.0.0,
+             safe ==0.3.21,
+             safe-coloured-text ==0.3.0.2,
+             safe-coloured-text-gen ==0.0.0.3,
+             safe-coloured-text-layout ==0.2.0.1,
+             safe-coloured-text-layout-gen ==0.0.0.2,
+             safe-coloured-text-terminfo ==0.3.0.0,
+             safecopy ==0.10.4.3,
+             safe-decimal ==0.2.1.0,
+             safe-exceptions ==0.1.7.4,
+             safe-foldable ==0.1.0.0,
+             safe-gen ==1.0.1,
+             safeio ==0.0.6.0,
+             safe-json ==1.2.1.2,
+             safe-money ==0.9.1,
+             SafeSemaphore ==0.10.1,
+             saltine ==0.2.2.0,
+             salve ==2.0.0.10,
+             sample-frame ==0.0.4,
+             sample-frame-np ==0.0.5,
+             sampling ==0.3.5,
+             samsort ==0.1.0.0,
+             sandi ==0.5,
+             sandwich ==0.3.0.5,
+             sandwich-contexts ==0.3.0.3,
+             sandwich-hedgehog ==0.1.3.1,
+             sandwich-quickcheck ==0.2.0.0,
+             sandwich-slack ==0.1.2.0,
+             sandwich-webdriver ==0.3.0.1,
+             saturn ==1.0.0.9,
+             say ==0.1.0.1,
+             sayable ==1.2.7.0,
+             sbp ==6.2.2,
+             sbv ==11.7,
+             scale ==1.1.0.0,
+             scalpel ==0.6.2.2,
+             scalpel-core ==0.6.2.2,
+             scanf ==0.1.0.0,
+             scanner ==0.3.1,
+             s-cargot ==0.1.6.0,
+             scheduler ==2.0.1.0,
+             SciBaseTypes ==0.1.1.0,
+             scientific ==0.3.8.1,
+             scientist ==0.0.0.0,
+             scotty ==0.22,
+             scrypt ==0.5.0,
+             sdl2 ==2.5.6.0,
+             sdl2-gfx ==0.3.0.0,
+             sdl2-image ==2.1.0.0,
+             sdl2-mixer ==1.2.0.0,
+             sdl2-ttf ==2.1.3,
+             search-algorithms ==0.3.4,
+             secp256k1-haskell ==1.4.6,
+             securemem ==0.1.10,
+             sel ==0.1.0.0,
+             selections ==0.3.0.0,
+             selective ==0.7.0.1,
+             select-rpms ==0.3.1,
+             semaphore-compat installed,
+             semialign ==1.3.1.1,
+             semigroupoids ==6.0.2,
+             semigroups ==0.20.1,
+             semirings ==0.7,
+             semiring-simple ==1.0.0.1,
+             semver ==0.4.0.1,
+             sendfile ==0.7.11.6,
+             sendgrid-v3 ==1.0.0.1,
+             seqalign ==0.2.0.4,
+             seqid ==0.6.3,
+             seqid-streams ==0.7.2,
+             sequence-formats ==1.11.0.2,
+             sequenceTools ==1.6.0.0,
+             serialise ==0.2.6.1,
+             servant ==0.20.3.0,
+             servant-auth ==0.4.9.2,
+             servant-auth-client ==0.4.9.2,
+             servant-auth-docs ==0.2.11.0,
+             servant-auth-server ==0.4.9.2,
+             servant-auth-swagger ==0.2.11.0,
+             servant-blaze ==0.9.1,
+             servant-checked-exceptions ==2.2.0.1,
+             servant-checked-exceptions-core ==2.2.0.1,
+             servant-cli ==0.1.1.0,
+             servant-client ==0.20.3.0,
+             servant-client-core ==0.20.3.0,
+             servant-conduit ==0.16.1,
+             servant-docs ==0.13.1,
+             servant-elm ==0.7.3,
+             servant-exceptions ==0.2.1,
+             servant-exceptions-server ==0.2.1,
+             servant-foreign ==0.16.1,
+             servant-http-streams ==0.20.2,
+             servant-JuicyPixels ==0.3.1.1,
+             servant-lucid ==0.9.0.6,
+             servant-machines ==0.16.1,
+             servant-multipart ==0.12.1,
+             servant-multipart-api ==0.12.1,
+             servant-multipart-client ==0.12.2,
+             servant-openapi3 ==2.0.2.0,
+             servant-pipes ==0.16.1,
+             servant-rate-limit ==0.2.0.0,
+             servant-rawm ==1.0.0.0,
+             servant-server ==0.20.3.0,
+             servant-static-th ==1.0.0.1,
+             servant-swagger ==1.2.1,
+             servant-swagger-ui ==0.3.5.5.0.1,
+             servant-swagger-ui-core ==0.3.5,
+             servant-swagger-ui-redoc ==0.3.5,
+             servant-websockets ==2.0.0,
+             servant-xml ==1.0.3,
+             serversession ==1.0.3,
+             serversession-backend-acid-state ==1.0.5,
+             serversession-backend-redis ==1.0.5,
+             serversession-frontend-wai ==1.0.1,
+             serversession-frontend-yesod ==1.0.1,
+             servius ==1.2.3.0,
+             ses-html ==0.4.0.0,
+             set-cover ==0.1.2.1,
+             setenv ==0.1.1.3,
+             setlocale ==1.0.0.10,
+             sexp-grammar ==2.3.4.2,
+             SHA ==1.6.4.4,
+             shake ==0.19.9,
+             shake-plus ==0.3.4.0,
+             shakespeare ==2.1.7.1,
+             shakespeare-text ==1.1.0,
+             shared-memory ==0.2.0.1,
+             ShellCheck ==0.10.0,
+             shell-conduit ==5.0.0,
+             shell-escape ==0.2.0,
+             shellify ==0.14.0.2,
+             shellmet ==0.0.6.0,
+             shell-monad ==0.6.10,
+             shelltestrunner ==1.10,
+             shell-utility ==0.1,
+             shellwords ==0.1.4.6,
+             shelly ==1.12.1.1,
+             should-not-typecheck ==2.1.0,
+             show-combinators ==0.2.0.0,
+             shower ==0.2.0.5,
+             siggy-chardust ==1.0.0,
+             signal ==0.1.0.4,
+             silently ==1.2.5.4,
+             simple ==2.0.0,
+             simple-affine-space ==0.2.1,
+             simple-cabal ==0.1.3.1,
+             simple-cairo ==0.1.0.6,
+             simple-cmd ==0.2.8,
+             simple-cmd-args ==0.1.8,
+             simple-expr ==0.1.1.0,
+             simple-media-timestamp ==0.2.1.0,
+             simple-media-timestamp-attoparsec ==0.1.0.0,
+             simple-pango ==0.1.0.2,
+             simple-prompt ==0.2.4,
+             simple-reflect ==0.3.3,
+             simple-sendfile ==0.2.32,
+             simple-session ==2.0.0,
+             simple-templates ==2.0.0,
+             simple-vec3 ==0.6.0.1,
+             since ==0.0.0,
+             singleraeh ==0.4.0,
+             singleton-bool ==0.1.8,
+             singleton-nats ==0.4.7,
+             singletons ==3.0.4,
+             singletons-base ==3.4,
+             singletons-presburger ==0.7.4.1,
+             singletons-th ==3.4,
+             Sit ==0.2023.8.3,
+             sitemap-gen ==0.1.0.0,
+             size-based ==0.1.3.3,
+             sized ==1.1.0.2,
+             skein ==1.0.9.4,
+             skeletest ==0.2.1,
+             skews ==0.1.0.3,
+             skip-var ==0.1.1.0,
+             skylighting ==0.14.7,
+             skylighting-core ==0.14.7,
+             skylighting-format-ansi ==0.1,
+             skylighting-format-blaze-html ==0.1.2.1,
+             skylighting-format-context ==0.1.0.2,
+             skylighting-format-latex ==0.1,
+             skylighting-format-typst ==0.1,
+             slack-web ==2.2.0.0,
+             slave-thread ==1.1.0.3,
+             slick ==1.3.1.0,
+             slist ==0.2.1.0,
+             slynx ==0.8.0.0,
+             smallcheck ==1.2.1.1,
+             smith ==0.2.0.0,
+             smtlib-backends ==0.4,
+             smtlib-backends-process ==0.3,
+             smtlib-backends-tests ==0.3,
+             smtp-mail ==0.5.0.0,
+             snap ==1.1.3.3,
+             snap-blaze ==0.2.1.5,
+             snap-core ==1.0.5.1,
+             snappy ==0.2.0.4,
+             snap-server ==1.1.2.1,
+             snowflake ==0.1.1.1,
+             socket ==0.8.3.0,
+             socks ==0.6.1,
+             solana-staking-csvs ==0.1.3.0,
+             some ==1.0.6,
+             some-dict-of ==0.1.0.2,
+             sop-core ==0.5.0.2,
+             sort ==1.0.0.0,
+             sorted-list ==0.2.3.1,
+             sound-collage ==0.2.1.1,
+             sourcemap ==0.1.7,
+             sox ==0.2.3.2,
+             soxlib ==0.0.3.2,
+             spacecookie ==1.0.0.3,
+             spdx ==1.1.0.1,
+             special-values ==0.1.0.0,
+             speculate ==0.4.20,
+             specup ==0.2.0.6,
+             speedy-slice ==0.3.2,
+             sphinx ==0.6.1,
+             Spintax ==0.3.7.0,
+             splice ==0.6.1.1,
+             split ==0.2.5,
+             splitmix ==0.1.3.2,
+             splitmix-distributions ==1.1.0,
+             split-record ==0.1.1.5,
+             Spock-api ==0.14.0.0,
+             spoon ==0.3.1,
+             spreadsheet ==0.1.3.10,
+             sqids ==0.2.2.0,
+             sqlite-simple ==0.4.19.0,
+             sql-words ==0.1.6.5,
+             squeather ==0.8.0.0,
+             srcloc ==0.6.0.1,
+             srtree ==2.0.1.8,
+             stache ==2.3.4,
+             stack-all ==0.7.1,
+             stack-clean-old ==0.5.2,
+             stack-templatizer ==0.1.1.0,
+             stamina ==0.1.0.3,
+             state-codes ==0.1.3,
+             stateref ==0.3,
+             statestack ==0.3.1.1,
+             StateVar ==1.2.2,
+             stateWriter ==0.4.0,
+             static-bytes ==0.1.1,
+             static-text ==0.2.0.7,
+             statistics ==0.16.5.0,
+             statistics-linreg ==0.3,
+             statsd-rupp ==0.5.0.1,
+             status-notifier-item ==0.3.2.16,
+             step-function ==0.2.1,
+             stitch ==0.6.0.0,
+             stm installed,
+             stm-chans ==3.0.0.11,
+             stm-conduit ==4.0.1,
+             stm-containers ==1.2.2,
+             stm-delay ==0.1.1.2,
+             stm-extras ==0.1.0.3,
+             stm-hamt ==1.2.2.1,
+             STMonadTrans ==0.4.8.1,
+             stm-split ==0.0.2.1,
+             stm-supply ==0.2.0.0,
+             storable-complex ==0.2.3.0,
+             storable-endian ==0.2.6.1,
+             storable-generic ==0.1.0.5,
+             storable-hetero-list ==0.1.0.4,
+             storable-peek-poke ==0.1.0.2,
+             storable-record ==0.0.7,
+             storable-tuple ==0.1,
+             storablevector ==0.2.13.4,
+             store ==0.7.22,
+             store-core ==0.4.4.7,
+             store-streaming ==0.2.0.5,
+             stratosphere ==0.60.0,
+             Stream ==0.4.7.2,
+             streaming ==0.2.4.0,
+             streaming-attoparsec ==1.0.0.1,
+             streaming-binary ==0.3.0.1,
+             streaming-bytestring ==0.3.4,
+             streaming-commons ==0.2.3.1,
+             streaming-wai ==0.1.1,
+             streamly ==0.10.1,
+             streamly-bytestring ==0.2.3,
+             streamly-core ==0.2.3,
+             streamly-process ==0.3.1,
+             streams ==3.3.3,
+             strict ==0.5.1,
+             strict-base-types ==0.8.1,
+             strict-concurrency ==0.2.4.3,
+             strict-lens ==0.4.1,
+             strict-list ==0.1.7.6,
+             strict-mutable-base ==1.1.0.0,
+             strict-tuple ==0.1.5.4,
+             strict-wrapper ==0.0.2.0,
+             stringable ==0.1.3,
+             stringbuilder ==0.5.1,
+             string-class ==0.1.7.2,
+             string-combinators ==0.6.0.5,
+             string-conv ==0.2.0,
+             string-conversions ==0.4.0.1,
+             string-interpolate ==0.3.4.0,
+             stringprep ==1.0.0,
+             string-qq ==0.0.6,
+             string-random ==0.1.4.5,
+             stringsearch ==0.3.6.6,
+             string-transform ==1.1.1,
+             string-variants ==0.3.1.3,
+             strive ==6.0.0.17,
+             strongweak ==0.12.0,
+             structs ==0.1.10,
+             stylish-haskell ==0.15.1.0,
+             subcategories ==0.2.1.2,
+             sundown ==0.6,
+             svg-builder ==0.1.1,
+             SVGFonts ==1.8.1,
+             svg-tree ==0.6.2.4,
+             swagger2 ==2.8.10,
+             swish ==0.10.11.0,
+             swizzle ==0.1.0.4,
+             swizzle-lens ==0.1.0.0,
+             swizzle-modify ==0.1.0.0,
+             swizzle-set ==0.2.0.0,
+             syb ==0.7.2.4,
+             sydtest ==0.20.0.1,
+             sydtest-aeson ==0.2.0.1,
+             sydtest-amqp ==0.1.0.0,
+             sydtest-autodocodec ==0.0.0.0,
+             sydtest-discover ==0.0.0.4,
+             sydtest-hedgehog ==0.4.0.0,
+             sydtest-hedis ==0.0.0.0,
+             sydtest-hspec ==0.4.0.4,
+             sydtest-mongo ==0.2.0.0,
+             sydtest-persistent ==0.1.0.0,
+             sydtest-persistent-sqlite ==0.2.0.3,
+             sydtest-process ==0.0.0.0,
+             sydtest-rabbitmq ==0.1.0.0,
+             sydtest-servant ==0.2.0.2,
+             sydtest-typed-process ==0.0.0.0,
+             sydtest-wai ==0.2.0.2,
+             sydtest-webdriver ==0.0.0.1,
+             sydtest-webdriver-screenshot ==0.1.0.0,
+             sydtest-webdriver-yesod ==0.0.1.0,
+             sydtest-yesod ==0.3.1.0,
+             symbol ==0.2.4.1,
+             symbolize ==1.0.3.1,
+             symengine ==0.1.2.0,
+             symmetry-operations-symbols ==0.0.2.1,
+             symparsec ==1.1.1,
+             synthesizer-alsa ==0.5.0.6,
+             synthesizer-core ==0.8.4,
+             synthesizer-dimensional ==0.8.1.1,
+             synthesizer-midi ==0.6.1.2,
+             sysinfo ==0.1.1,
+             system-argv0 ==0.1.1,
+             systemd ==2.4.0,
+             system-fileio ==0.3.16.7,
+             system-filepath ==0.4.14.1,
+             system-info ==0.5.2,
+             system-linux-proc ==0.1.1.1,
+             table-layout ==1.0.0.2,
+             tabular ==0.2.2.8,
+             tagchup ==0.4.1.2,
+             tagged ==0.8.9,
+             tagged-binary ==0.2.0.1,
+             tagged-identity ==0.1.5,
+             tagged-transformer ==0.8.3,
+             tagsoup ==0.14.8,
+             tagstream-conduit ==0.5.6,
+             tao ==1.0.0,
+             tao-example ==1.0.0,
+             tar ==0.6.4.0,
+             tar-conduit ==0.4.1,
+             tardis ==0.5.0.1,
+             tasty ==1.5.4,
+             tasty-ant-xml ==1.1.9,
+             tasty-autocollect ==0.4.4,
+             tasty-bench ==0.4.1,
+             tasty-checklist ==1.0.10.0,
+             tasty-dejafu ==2.1.0.2,
+             tasty-discover ==5.0.2,
+             tasty-expected-failure ==0.12.3,
+             tasty-fail-fast ==0.0.3,
+             tasty-focus ==1.0.1,
+             tasty-golden ==2.3.6,
+             tasty-hedgehog ==1.4.0.2,
+             tasty-hslua ==1.1.1.1,
+             tasty-hspec ==1.2.0.4,
+             tasty-html ==0.4.2.2,
+             tasty-hunit ==0.10.2,
+             tasty-inspection-testing ==0.2.1,
+             tasty-kat ==0.0.3,
+             tasty-leancheck ==0.0.2,
+             tasty-lua ==1.1.2,
+             tasty-papi ==0.1.2.0,
+             tasty-program ==1.1.0,
+             tasty-quickcheck ==0.11.1,
+             tasty-rerun ==1.1.20,
+             tasty-silver ==3.3.2.1,
+             tasty-smallcheck ==0.8.2,
+             tasty-sugar ==2.2.3.3,
+             tasty-tap ==0.1.0,
+             tasty-th ==0.1.7,
+             tasty-wai ==0.1.2.0,
+             TCache ==0.13.3,
+             tce-conf ==1.3,
+             tdigest ==0.3.1,
+             teardown ==0.5.0.1,
+             telegram-bot-api ==7.4.5,
+             telegram-bot-simple ==0.14.4,
+             tempgres-client ==1.0.0,
+             template ==0.2.0.10,
+             template-haskell installed,
+             template-haskell-compat-v0208 ==0.1.9.6,
+             temporary ==1.3,
+             temporary-rc ==1.2.0.3,
+             temporary-resourcet ==0.1.0.1,
+             tensorflow-test ==0.1.0.0,
+             tensort ==1.1.0.0,
+             termbox ==2.0.0.2,
+             termbox-banana ==2.0.0.1,
+             termbox-bindings-c ==0.1.0.3,
+             termbox-bindings-hs ==1.0.0.1,
+             termbox-tea ==1.0.0.1,
+             terminal ==0.2.0.0,
+             terminal-progress-bar ==0.4.2,
+             terminal-size ==0.3.4,
+             terminfo installed,
+             test-certs ==0.1.1.2,
+             test-framework ==0.8.2.3,
+             test-framework-hunit ==0.3.0.3,
+             test-framework-leancheck ==0.0.4,
+             test-framework-quickcheck2 ==0.3.0.7,
+             test-framework-smallcheck ==0.2,
+             test-fun ==0.1.0.0,
+             testing-feat ==1.1.1.1,
+             testing-type-modifiers ==0.1.0.1,
+             texmath ==0.12.10.3,
+             text installed,
+             text-ansi ==0.3.0.1,
+             text-binary ==0.2.1.1,
+             text-builder ==1.0.0.4,
+             text-builder-core ==0.1.1.1,
+             text-builder-dev ==0.4.0.1,
+             text-builder-linear ==0.1.3,
+             text-conversions ==0.3.1.1,
+             text-convert ==0.1.0.1,
+             text-display ==1.0.0.0,
+             text-encode ==0.2.0.0,
+             text-icu ==0.8.0.5,
+             text-iso8601 ==0.1.1.1,
+             text-latin1 ==0.3.1,
+             text-ldap ==0.1.1.14,
+             textlocal ==0.1.0.5,
+             text-manipulate ==0.3.1.0,
+             text-metrics ==0.3.3,
+             text-misc-yj ==0.1.0.2,
+             text-postgresql ==0.0.3.1,
+             text-printer ==0.5.0.2,
+             text-regex-replace ==0.1.1.5,
+             text-rope ==0.3,
+             text-short ==0.1.6.1,
+             text-show ==3.11.4,
+             text-show-instances ==3.9.11,
+             text-zipper ==0.13,
+             tfp ==1.0.2,
+             tf-random ==0.5,
+             th-abstraction ==0.7.2.0,
+             th-bang-compat ==0.0.1.0,
+             th-compat ==0.1.7,
+             th-constraint-compat ==0.0.1.0,
+             th-data-compat ==0.1.3.1,
+             th-deepstrict ==0.1.1.0,
+             th-desugar ==1.17,
+             th-env ==0.1.1,
+             these ==1.2.1,
+             these-lens ==1.0.2,
+             these-optics ==1.0.2,
+             these-skinny ==0.7.6,
+             th-expand-syns ==0.4.12.0,
+             th-extras ==0.0.0.9,
+             th-lego ==0.3.0.3,
+             th-lift ==0.8.7,
+             th-lift-instances ==0.1.20,
+             th-nowq ==0.1.0.5,
+             th-orphans ==0.13.17,
+             th-printf ==0.8,
+             thread-hierarchy ==0.3.0.2,
+             thread-local-storage ==0.2,
+             threads ==0.5.1.8,
+             threads-extras ==0.1.0.3,
+             thread-supervisor ==0.2.0.0,
+             thread-utils-context ==0.3.0.4,
+             thread-utils-finalizers ==0.1.1.0,
+             threepenny-gui ==0.9.4.2,
+             th-reify-compat ==0.0.1.5,
+             th-reify-many ==0.1.10,
+             th-strict-compat ==0.1.0.1,
+             th-test-utils ==1.2.3,
+             th-utilities ==0.2.5.2,
+             thyme ==0.4.1,
+             tidal ==1.10.3,
+             tidal-core ==1.10.2,
+             tidal-link ==1.2.2,
+             tile ==0.3.0.0,
+             time installed,
+             time-compat ==1.9.9,
+             time-domain ==0.1.0.5,
+             timeit ==2.0,
+             time-lens ==0.4.0.2,
+             timelens ==0.2.0.2,
+             time-locale-compat ==0.1.1.5,
+             time-locale-vietnamese ==1.0.0.0,
+             time-manager ==0.2.4,
+             timerep ==2.1.0.0,
+             timers-tick ==0.5.0.4,
+             timer-wheel ==1.0.0.1,
+             timespan ==0.4.0.0,
+             time-units ==1.0.0,
+             time-units-types ==0.2.0.1,
+             timezone-olson ==0.2.1,
+             timezone-olson-th ==0.1.0.11,
+             timezone-series ==0.1.13,
+             titlecase ==1.0.1,
+             tldr ==0.9.3,
+             tls ==2.1.8,
+             tls-session-manager ==0.0.9,
+             tlynx ==0.8.0.0,
+             tmapchan ==0.0.3,
+             tmapmvar ==0.0.4,
+             tmp-proc ==0.7.2.7,
+             tmp-proc-postgres ==0.7.2.4,
+             tmp-proc-rabbitmq ==0.7.2.4,
+             tmp-proc-redis ==0.7.2.5,
+             token-bucket ==0.1.0.1,
+             tokenize ==0.3.0.1,
+             tomland ==1.3.3.3,
+             toml-parser ==2.0.2.0,
+             toml-reader ==0.3.0.0,
+             toml-reader-parse ==0.1.1.1,
+             tools-yj ==0.1.0.45,
+             tophat ==1.0.8.0,
+             topograph ==1.0.1,
+             torrent ==10000.1.3,
+             torsor ==0.1.0.1,
+             tracing ==0.0.7.4,
+             transaction ==0.1.1.4,
+             transformers installed,
+             transformers-base ==0.4.6.1,
+             transformers-compat ==0.7.2,
+             transformers-either ==0.1.4,
+             traverse-with-class ==1.0.1.1,
+             tree-diff ==0.3.4.1,
+             tree-fun ==0.8.1.0,
+             tree-view ==0.5.1,
+             trie-simple ==0.4.4,
+             trifecta ==2.1.4,
+             trimdent ==0.1.0.0,
+             trivial-constraint ==0.7.0.0,
+             tsv2csv ==0.1.0.2,
+             ttc ==1.5.0.1,
+             ttrie ==0.1.2.2,
+             tuple ==0.3.0.2,
+             tuples ==0.1.0.0,
+             tuples-homogenous-h98 ==0.1.1.0,
+             tuple-sop ==0.3.1.0,
+             tuple-th ==0.2.5,
+             turtle ==1.6.2,
+             twitter-types ==0.11.0,
+             twitter-types-lens ==0.11.0,
+             typecheck-plugin-nat-simple ==0.1.0.11,
+             typed-process ==0.2.13.0,
+             typed-uuid ==0.2.0.0,
+             type-equality ==1.0.1,
+             type-errors ==0.2.0.2,
+             type-flip ==0.1.0.0,
+             type-fun ==0.1.3,
+             type-hint ==0.1,
+             type-level-bytestrings ==0.2.0,
+             type-level-integers ==0.0.1,
+             type-level-kv-list ==2.0.2.0,
+             type-level-natural-number ==2.0,
+             type-level-numbers ==0.1.1.2,
+             type-level-show ==0.3.0,
+             typelevel-tools-yj ==0.1.0.9,
+             typelits-witnesses ==0.4.1.0,
+             type-map ==0.1.7.0,
+             type-natural ==1.3.0.2,
+             typenums ==0.1.4,
+             type-of-html ==1.6.2.0,
+             type-of-html-static ==0.1.0.2,
+             type-rig ==0.1,
+             type-set ==0.1.0.0,
+             type-spec ==0.4.0.0,
+             typography-geometry ==1.0.1.0,
+             typst ==0.8.0.2,
+             typst-symbols ==0.1.8.1,
+             tz ==0.1.3.6,
+             tzdata ==0.2.20260708.0,
+             tztime ==0.1.1.0,
+             ua-parser ==0.7.7.0,
+             uglymemo ==0.1.0.1,
+             ulid ==0.3.3.0,
+             unagi-chan ==0.4.1.4,
+             unbounded-delays ==0.1.1.1,
+             unbound-generics ==0.4.5,
+             unboxed-ref ==0.4.0.0,
+             unboxing-vector ==0.2.0.0,
+             uncaught-exception ==0.1.0,
+             uncertain ==0.4.0.1,
+             unconditional-jump ==1.0.0,
+             unconstrained ==0.1.0.2,
+             unexceptionalio ==0.5.1,
+             unexceptionalio-trans ==0.5.2,
+             unicode ==0.0.1.3,
+             unicode-collation ==0.1.3.7,
+             unicode-data ==0.6.0,
+             unicode-show ==0.1.1.1,
+             unicode-transforms ==0.4.0.1,
+             unidecode ==0.1.0.4,
+             unification-fd ==0.12.0.3,
+             union ==0.1.3.2,
+             union-angle ==0.1.0.1,
+             union-color ==0.1.4.0,
+             union-find-array ==0.1.0.5,
+             unipatterns ==0.0.0.0,
+             uniplate ==1.6.13,
+             uniq-deep ==1.2.1,
+             unique-logic ==0.4.1.1,
+             unique-logic-tf ==0.5.1.3,
+             uniqueness-periods-vector-stats ==0.4.0.0,
+             unit-constraint ==0.0.0,
+             units ==2.4.1.5,
+             units-defs ==2.2.1,
+             units-parser ==0.1.1.5,
+             universe ==1.2.3,
+             universe-base ==1.1.4,
+             universe-dependent-sum ==1.3.1,
+             universe-instances-extended ==1.1.4,
+             universe-reverse-instances ==1.1.2,
+             universe-some ==1.2.2.1,
+             unix installed,
+             unix-bytestring ==0.4.0.4,
+             unix-compat ==0.7.4.1,
+             unix-time ==0.4.17,
+             unjson ==0.15.4,
+             unlifted ==0.2.4.0,
+             unliftio ==0.2.25.1,
+             unliftio-core ==0.2.1.0,
+             unliftio-path ==0.0.2.0,
+             unliftio-pool ==0.4.3.1,
+             unliftio-streams ==0.2.0.0,
+             unlit ==0.4.0.0,
+             unordered-containers ==0.2.20.1,
+             unsafe ==0.0,
+             uri-bytestring ==0.4.0.1,
+             uri-bytestring-aeson ==0.1.0.9,
+             uri-encode ==1.5.0.7,
+             url ==2.1.3,
+             urlpath ==11.0.2,
+             users ==0.5.0.0,
+             users-test ==0.5.0.1,
+             utf8-light ==0.4.4.0,
+             utf8-string ==1.0.2,
+             utility-ht ==0.0.17.2,
+             uuid ==1.3.16.1,
+             uuid-types ==1.0.6.1,
+             valida ==1.1.0,
+             valida-base ==0.2.0,
+             validate-input ==0.5.0.0,
+             validation ==1.1.5,
+             validation-selective ==0.2.0.0,
+             validity ==0.12.1.0,
+             validity-aeson ==0.2.0.5,
+             validity-bytestring ==0.4.1.1,
+             validity-case-insensitive ==0.0.0.0,
+             validity-containers ==0.5.0.5,
+             validity-network-uri ==0.0.0.1,
+             validity-path ==0.4.0.1,
+             validity-persistent ==0.0.0.0,
+             validity-primitive ==0.0.0.1,
+             validity-scientific ==0.2.0.3,
+             validity-text ==0.3.1.3,
+             validity-time ==0.5.0.0,
+             validity-unordered-containers ==0.2.0.3,
+             validity-uuid ==0.1.0.3,
+             validity-vector ==0.2.0.3,
+             valor ==1.0.0.1,
+             vary ==0.1.1.3,
+             varying ==0.8.1.0,
+             vault ==0.3.2.0,
+             vcr ==0.1.0,
+             vcs-ignore ==0.0.2.0,
+             vec ==0.5.1.1,
+             vector ==0.13.2.0,
+             vector-algorithms ==0.9.1.0,
+             vector-binary-instances ==0.2.5.2,
+             vector-buffer ==0.4.1,
+             vector-builder ==0.3.8.7,
+             vector-bytes-instances ==0.1.1,
+             vector-extras ==0.3,
+             vector-fftw ==0.1.4.1,
+             vector-hashtables ==0.1.2.1,
+             vector-instances ==3.4.3,
+             vector-mmap ==0.0.3,
+             vector-quicksort ==0.2,
+             vector-rotcev ==0.1.0.2,
+             vector-sized ==1.6.1,
+             vector-space ==0.19,
+             vector-split ==1.0.0.4,
+             vector-stream ==0.1.0.1,
+             vector-th-unbox ==0.2.2,
+             verbosity ==0.4.0.0,
+             verset ==0.0.1.11,
+             versions ==6.0.8,
+             vessel ==0.3.0.2,
+             vformat ==0.14.1.0,
+             vformat-time ==0.1.0.0,
+             ViennaRNAParser ==1.3.3,
+             vinyl ==0.14.3,
+             vinyl-loeb ==0.0.1.0,
+             Vis ==1.0.0,
+             vivid-osc ==0.5.0.0,
+             vivid-supercollider ==0.4.1.2,
+             void ==0.7.4,
+             vty ==6.4,
+             vty-crossplatform ==0.4.0.0,
+             vty-unix ==0.2.0.0,
+             vty-windows ==0.2.0.3,
+             wai ==3.2.4,
+             wai-app-static ==3.1.9.1,
+             wai-cli ==0.2.3,
+             wai-conduit ==3.0.0.4,
+             wai-cors ==0.2.7,
+             wai-enforce-https ==1.0.0.0,
+             wai-eventsource ==3.0.0,
+             wai-extra ==3.1.18,
+             wai-feature-flags ==0.1.0.9,
+             wai-handler-launch ==3.0.3.1,
+             wai-logger ==2.5.0,
+             wai-middleware-bearer ==1.0.3,
+             wai-middleware-caching ==0.1.0.2,
+             wai-middleware-caching-lru ==0.1.0.0,
+             wai-middleware-caching-redis ==0.2.0.0,
+             wai-middleware-clacks ==0.1.0.1,
+             wai-middleware-delegate ==0.2.0.2,
+             wai-middleware-metrics ==0.2.4,
+             wai-middleware-prometheus ==1.0.1.0,
+             wai-middleware-static ==0.9.4,
+             wai-middleware-throttle ==0.3.0.1,
+             wai-rate-limit ==0.3.0.0,
+             wai-rate-limit-redis ==0.2.0.1,
+             wai-saml2 ==0.6,
+             wai-session ==0.3.3,
+             wai-session-postgresql ==0.2.1.3,
+             wai-slack-middleware ==0.2.0,
+             wai-transformers ==0.1.0,
+             wai-websockets ==3.0.1.2,
+             wakame ==0.1.0.0,
+             warp ==3.4.9,
+             warp-tls ==3.4.14,
+             wave ==0.2.1,
+             wcwidth ==0.0.2,
+             web3 ==1.1.0.0,
+             web3-bignum ==1.1.0.0,
+             web3-crypto ==1.1.0.0,
+             web3-ethereum ==1.1.0.1,
+             web3-polkadot ==1.1.0.1,
+             web3-provider ==1.1.0.0,
+             web3-solidity ==1.1.0.0,
+             web-cookiejar ==0.1.3.2,
+             webdriver ==0.12.0.1,
+             webdriver-precore ==0.1.0.2,
+             webdriver-wrapper ==0.2.0.1,
+             webex-teams-api ==0.2.0.1,
+             webex-teams-conduit ==0.2.0.1,
+             webgear-core ==1.4.0,
+             webgear-openapi ==1.4.0,
+             webgear-server ==1.4.0,
+             webgear-swagger ==1.4.0,
+             webgear-swagger-ui ==1.4.0,
+             webpage ==0.0.5.1,
+             web-rep ==0.14.1.0,
+             web-routes ==0.27.16,
+             web-routes-th ==0.22.8.3,
+             webrtc-vad ==0.1.0.3,
+             websockets ==0.13.0.0,
+             websockets-simple ==0.2.0,
+             websockets-snap ==0.10.3.1,
+             web-view ==0.7.0,
+             weigh ==0.0.18,
+             welford-online-mean-variance ==0.2.0.0,
+             what4 ==1.6.3,
+             wherefrom-compat ==0.1.1.1,
+             which ==0.2.0.3,
+             wide-word ==0.1.9.0,
+             wild-bind ==0.1.2.15,
+             wild-bind-x11 ==0.2.0.18,
+             Win32 installed,
+             Win32-notify ==0.3.0.3,
+             windns ==0.1.0.1,
+             witch ==1.3.1.0,
+             withdependencies ==0.3.1,
+             witherable ==0.5,
+             within ==0.2.0.1,
+             with-utf8 ==1.1.0.0,
+             witness ==0.7,
+             wizards ==1.0.3,
+             wkt-types ==0.1.0.0,
+             wled-json ==0.1.0.5,
+             wl-pprint ==1.2.1,
+             wl-pprint-annotated ==0.1.0.2,
+             wl-pprint-text ==1.2.0.2,
+             word8 ==0.1.3,
+             word-compat ==0.0.6,
+             word-trie ==0.3.0,
+             word-wrap ==0.5,
+             world-peace ==1.0.2.0,
+             wrap ==0.0.0,
+             wraxml ==0.5,
+             wreq ==0.5.4.4,
+             wreq-stringless ==0.5.9.1,
+             writer-cps-transformers ==0.5.6.1,
+             ws ==0.0.6,
+             wuss ==2.0.2.7,
+             X11 ==1.10.3,
+             X11-xft ==0.3.4,
+             x11-xim ==0.0.9.0,
+             Xauth ==0.1,
+             xdg-basedir ==0.2.2,
+             xdg-desktop-entry ==0.1.1.5,
+             xdg-userdirs ==0.1.0.2,
+             xeno ==0.6,
+             xhtml installed,
+             xls ==0.1.3,
+             xlsx ==1.1.4,
+             xml ==1.3.14,
+             xml-basic ==0.1.3.3,
+             xmlbf ==0.7,
+             xmlbf-xeno ==0.2.2,
+             xmlbf-xmlhtml ==0.2.2,
+             xml-conduit ==1.10.1.0,
+             xmlgen ==0.6.2.2,
+             xml-hamlet ==0.5.0.3,
+             xml-helpers ==1.0.0,
+             xmlhtml ==0.2.5.4,
+             xml-html-qq ==0.1.0.1,
+             xml-indexed-cursor ==0.1.1.0,
+             xml-parser ==0.1.1.2,
+             xml-picklers ==0.3.6,
+             xml-to-json-fast ==2.0.0,
+             xml-types ==0.3.8,
+             xmonad ==0.18.1,
+             xmonad-contrib ==0.18.2,
+             xor ==0.0.1.4,
+             xss-sanitize ==0.3.7.2,
+             xxhash-ffi ==0.3.1,
+             yaml ==0.11.11.2,
+             yaml-unscrambler ==0.1.0.21,
+             Yampa ==0.15,
+             yarn-lock ==0.6.5,
+             yaya ==0.6.2.3,
+             yaya-containers ==0.1.2.2,
+             yaya-hedgehog ==0.3.0.5,
+             yaya-quickcheck ==0.2.0.3,
+             yaya-unsafe ==0.4.1.4,
+             yeshql-core ==4.2.0.0,
+             yesod ==1.6.2.3,
+             yesod-auth ==1.6.12.1,
+             yesod-auth-basic ==0.1.0.3,
+             yesod-auth-hashdb ==1.7.1.7,
+             yesod-auth-oauth2 ==0.7.4.0,
+             yesod-bin ==1.6.2.4,
+             yesod-core ==1.6.29.1,
+             yesod-eventsource ==1.6.0.2,
+             yesod-form ==1.7.10,
+             yesod-form-bootstrap4 ==3.0.1.1,
+             yesod-gitrepo ==0.3.0,
+             yesod-gitrev ==0.2.2,
+             yesod-markdown ==0.12.6.14,
+             yesod-newsfeed ==1.7.0.1,
+             yesod-page-cursor ==2.0.1.0,
+             yesod-paginator ==1.1.2.2,
+             yesod-persistent ==1.6.0.9,
+             yesod-recaptcha2 ==1.0.2.1,
+             yesod-routes-flow ==3.0.0.2,
+             yesod-sitemap ==1.6.0.1,
+             yesod-static ==1.6.1.3,
+             yesod-test ==1.6.19,
+             yesod-websockets ==0.3.0.4,
+             yes-precure5-command ==5.5.3,
+             yggdrasil-schema ==1.0.0.6,
+             yi ==0.19.3,
+             yi-core ==0.19.4,
+             yi-frontend-pango ==0.19.2,
+             yi-frontend-vty ==0.19.1,
+             yi-keymap-cua ==0.19.0,
+             yi-keymap-emacs ==0.19.0,
+             yi-keymap-vim ==0.19.0,
+             yi-language ==0.19.2,
+             yi-misc-modes ==0.19.1,
+             yi-mode-haskell ==0.19.1,
+             yi-mode-javascript ==0.19.1,
+             yi-rope ==0.11,
+             yjsvg ==0.2.0.1,
+             yjtools ==0.9.18,
+             yoga ==0.0.0.8,
+             youtube ==0.2.1.1,
+             zenacy-html ==2.1.2,
+             zenacy-unicode ==1.0.3,
+             zenc ==0.1.2,
+             zeromq4-haskell ==0.8.0,
+             zeromq4-patterns ==0.3.1.0,
+             zigzag ==0.1.0.0,
+             zim-parser ==0.2.1.0,
+             zip ==2.2.2,
+             zip-archive ==0.4.3.2,
+             zippers ==0.3.2,
+             zip-stream ==0.2.2.0,
+             zlib ==0.7.1.1,
+             zlib-bindings ==0.1.1.5,
+             zlib-clib ==1.3.2,
+             zot ==0.0.3,
+             zstd ==0.1.3.0
diff --git a/cabal-stackage.project b/cabal-stackage.project
new file mode 100644
--- /dev/null
+++ b/cabal-stackage.project
@@ -0,0 +1,9 @@
+-- cabal.project file that is equivilant to building with stack.yaml,
+-- with package versions from stackage.
+packages:
+  .
+jobs: $ncpus
+semaphore: True
+import: cabal-stackage.config
+constraints: blake3 ==0.3, libmagic ==1.3.2, ram ==0.22.0, botan-low ==0.2.0.1, botan-bindings ==0.3.0.0
+flags: +Botan +MagicMime +Blake3 +XXH3 +OsPath +Dbus
diff --git a/cabal.project b/cabal.project
--- a/cabal.project
+++ b/cabal.project
@@ -1,3 +1,5 @@
+-- cabal.project file that is equivilant to building with stack.yaml,
+-- with package versions from stackage.
 packages:
   .
 jobs: $ncpus
diff --git a/git-annex.cabal b/git-annex.cabal
--- a/git-annex.cabal
+++ b/git-annex.cabal
@@ -1,5 +1,5 @@
 Name: git-annex
-Version: 10.20261026
+Version: 10.20261113
 Cabal-Version: 1.12
 License: AGPL-3
 Maintainer: Joey Hess <id@joeyh.name>
@@ -35,9 +35,10 @@
 -- Include only files that are needed make cabal install git-annex work.
 Extra-Source-Files:
   stack.yaml
-  stack-botan.yaml
   stack-NoLLMDependencies.yaml
   cabal.project
+  cabal-stackage.project
+  cabal-stackage.config
   README
   CHANGELOG
   NEWS
@@ -161,10 +162,6 @@
 Flag Production
   Description: Enable production build (slower build; faster binary)
 
-Flag Botan
-  Description: Build with the Botan C++ library for faster hashing
-  Default: False
-
 Flag TorrentParser
   Description: Use haskell torrent library to parse torrent files
 
@@ -297,7 +294,8 @@
    warp-tls (>= 3.2.2),
    crypton-connection (>= 0.4.3),
    crypton-x509-store,
-   aws (>= 0.24.1)
+   aws (>= 0.24.1),
+   botan-low (< 0.3)
   CC-Options: -Wall
   GHC-Options: -Wall -fno-warn-tabs  -Wincomplete-uni-patterns
   Default-Language: Haskell2010
@@ -311,9 +309,10 @@
     Build-Depends:
      base (>= 4.18.2.1 && < 4.23),
      ram (< 0.21.0),
+     network (< 3.2.9.0),
      persistent (>= 2.13.3) && (< 2.15.0.0),
      warp (< 3.4.11),
-     magic (<= 1.1),
+     http-semantics (< 0.4.2),
      crypton (< 1.1.0),
      tls (< 2.4.4)
   else
@@ -326,7 +325,7 @@
   if flag(Memory)
     Build-Depends: memory, crypton (< 1.1.0)
   else
-    Build-Depends: ram, crypton (>= 1.1.0)
+    Build-Depends: memory, ram, crypton (>= 1.1.0)
 
   -- Fully optimize for production.
   if flag(Production)
@@ -354,13 +353,6 @@
     Build-Depends:
       filepath-bytestring (>= 1.4.2.1.1)
 
-  if flag(Botan)
-    Build-Depends:
-      botan-low (< 0.3)
-    CPP-Options: -DWITH_BOTAN
-    Other-Modules:
-      Utility.Hash.Botan
-
   -- Disabled on arm until this issue is resolved:
   -- https://github.com/k0001/hs-blake3/issues/8
   if flag(Blake3) && (! arch(aarch64) && ! arch(arm))
@@ -386,7 +378,8 @@
       Win32 (>= 2.13.4.0),
       setenv,
       process (>= 1.6.2.0),
-      silently (>= 1.2.5.1)
+      silently (>= 1.2.5.1),
+      nsis
   else
     Build-Depends: unix (>= 2.8.4)
 
@@ -551,7 +544,9 @@
     CPP-Options: -DWITH_TORRENTPARSER
 
   if flag(MagicMime)
-    Build-Depends: magic (<= 1.1)
+    Build-Depends:
+      libmagic (>= 1.3),
+      os-string (>= 2.0.0)
     CPP-Options: -DWITH_MAGICMIME
 
   if flag(Benchmark)
@@ -673,6 +668,7 @@
     Build.Configure
     Build.DesktopFile
     Build.Mans
+    Build.NullSoftInstaller
     Build.TestConfig
     Build.Version
     BuildInfo
@@ -800,6 +796,7 @@
     Command.TestRemote
     Command.Transferrer
     Command.TransferKey
+    Command.Transfers
     Command.Trust
     Command.Unannex
     Command.Undo
@@ -1136,6 +1133,7 @@
     Utility.Glob
     Utility.Gpg
     Utility.Hash
+    Utility.Hash.Botan
     Utility.Hash.Crypton
     Utility.Hash.Incremental
     Utility.Hash.Types
@@ -1150,6 +1148,7 @@
     Utility.LockPool.LockHandle
     Utility.LockPool.STM
     Utility.LogFile
+    Utility.LRU
     Utility.Lsof
     Utility.MagicWormhole
     Utility.Matcher
diff --git a/git-annex.hs b/git-annex.hs
--- a/git-annex.hs
+++ b/git-annex.hs
@@ -7,7 +7,7 @@
 
 {-# LANGUAGE CPP #-}
 
-import System.Environment (getArgs, getProgName)
+import System.Environment (getArgs)
 import System.FilePath
 import Network.Socket (withSocketsDo)
 import qualified Data.Map as M
@@ -27,6 +27,7 @@
 import Utility.UserInfo
 import Utility.Env.Set
 #endif
+import qualified Build.NullSoftInstaller
 
 main :: IO ()
 main = sanitizeTopLevelExceptionMessages $ withSocketsDo $ do
@@ -35,13 +36,14 @@
 #ifdef mingw32_HOST_OS
 	winEnv
 #endif
-	run ps =<< getProgName
+	run ps =<< getCommandName
   where
 	run ps n = case M.lookup (takeFileName n) otherMulticallCommands of
 		Just GitAnnexShell -> CmdLine.GitAnnexShell.run ps
 		Just GitRemoteAnnex -> CmdLine.GitRemoteAnnex.run ps
 		Just GitRemoteP2PAnnex -> CmdLine.GitRemoteP2PAnnex.run ps
 		Just GitRemoteTorAnnex -> CmdLine.GitRemoteTorAnnex.run ps
+		Just NullSoftInstaller -> Build.NullSoftInstaller.main
 		Nothing -> CmdLine.GitAnnex.run
 			Test.optParser
 			Test.runner
diff --git a/stack-NoLLMDependencies.yaml b/stack-NoLLMDependencies.yaml
--- a/stack-NoLLMDependencies.yaml
+++ b/stack-NoLLMDependencies.yaml
@@ -9,7 +9,6 @@
     debuglocks: false
     benchmark: true
     ospath: true
-    botan: false
     blake3: true
     xxh3: true
   file-io:
@@ -28,6 +27,8 @@
 - persistent-sqlite-2.13.3.0
 - yesod-form-1.7.9.2
 - yesod-static-1.6.1.2
-- magic-1.1
+- libmagic-1.3.2
 - crypton-1.0.6
 - tls-2.1.8
+- botan-low-0.2.0.1
+- botan-bindings-0.3.0.0
diff --git a/stack-botan.yaml b/stack-botan.yaml
deleted file mode 100644
--- a/stack-botan.yaml
+++ /dev/null
@@ -1,29 +0,0 @@
-flags:
-  git-annex:
-    NoLLMDependencies: false
-    production: true
-    assistant: true
-    torrentparser: true
-    magicmime: false
-    dbus: false
-    debuglocks: false
-    benchmark: true
-    ospath: true
-    botan: true
-    blake3: true
-    xxh3: true
-  file-io:
-    os-string: true
-  xxhash-ffi:
-    pkg-config: false
-packages:
-- '.'
-resolver: lts-24.52
-extra-deps:
-- aws-0.25.2
-- file-io-0.2.0
-- botan-low-0.2.0.1
-- botan-bindings-0.3.0.0
-- blake3-0.3
-- magic-1.1
-- ram-0.22.0
diff --git a/stack.yaml b/stack.yaml
--- a/stack.yaml
+++ b/stack.yaml
@@ -9,7 +9,6 @@
     debuglocks: false
     benchmark: true
     ospath: true
-    botan: false
     blake3: true
     xxh3: true
   file-io:
@@ -23,5 +22,7 @@
 - aws-0.25.2
 - file-io-0.2.0
 - blake3-0.3
-- magic-1.1
+- libmagic-1.3.2
 - ram-0.22.0
+- botan-low-0.2.0.1
+- botan-bindings-0.3.0.0
