diff --git a/hadrian/bootstrap/README.md b/hadrian/bootstrap/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..c82ace0669f95bf6b5bb24df3a95007c87e47b58
--- /dev/null
+++ b/hadrian/bootstrap/README.md
@@ -0,0 +1,23 @@
+# Bootstrapping hadrian
+
+These scripts are originally from the cabal-install repo with a few
+small tweaks.
+
+This utility allows you to build hadrian without cabal-install, which can be useful
+for packagers. If you are a developer then build hadrian using cabal-install.
+
+If you want to bootstrap with ghc-8.10.5 then run the ./bootstrap script with the
+`plan-bootstrap-8.10.5.json` file.
+
+    bootstrap.py -d plan-bootstrap-8.10.5.json -w /path/to-ghc
+
+The result of the bootstrap script will be a hadrian binary in
+`_build/bin/hadrian`.
+
+There is a script (using nix) which can be used to generate the bootstrap plans for the range
+of supported GHC versions using nix.
+
+    generate_bootstrap_plans
+
+Otherwise you can run the commands in ./generate_bootstrap_plans directly.
+
diff --git a/hadrian/bootstrap/bootstrap.py b/hadrian/bootstrap/bootstrap.py
new file mode 100755
index 0000000000000000000000000000000000000000..8ed4d5588c48d4e13a898b80ef58187ceb27b0e7
--- /dev/null
+++ b/hadrian/bootstrap/bootstrap.py
@@ -0,0 +1,388 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+"""
+bootstrap.py - bootstrapping utility for hadrian
+
+See bootstrap/README.md for usage instructions.
+"""
+
+USAGE = """
+This utility is only intended for use in building hadrian
+on a new platform. If you already have a functional cabal-install
+please rather run `cabal build hadrian .`. or `./hadrian/build`
+"""
+
+from enum import Enum
+import hashlib
+import logging
+import json
+from pathlib import Path
+import platform
+import shutil
+import subprocess
+from textwrap import dedent
+from typing import Set, Optional, Dict, List, Tuple, \
+                   NewType, BinaryIO, NamedTuple, TypeVar
+
+#logging.basicConfig(level=logging.INFO)
+
+BUILDDIR    = Path('_build')
+
+BINDIR      = BUILDDIR / 'bin'            # binaries go there (--bindir)
+DISTDIR     = BUILDDIR / 'dists'          # --builddir
+UNPACKED    = BUILDDIR / 'unpacked'       # where we unpack tarballs
+TARBALLS    = BUILDDIR / 'tarballs'       # where we download tarballks
+PSEUDOSTORE = BUILDDIR / 'pseudostore'    # where we install packages
+ARTIFACTS   = BUILDDIR / 'artifacts'      # Where we put the archive
+TMPDIR      = BUILDDIR / 'tmp'            #
+PKG_DB      = BUILDDIR / 'packages.conf'  # package db
+
+PackageName = NewType('PackageName', str)
+Version = NewType('Version', str)
+SHA256Hash = NewType('SHA256Hash', str)
+
+class PackageSource(Enum):
+    HACKAGE = 'hackage'
+    LOCAL = 'local'
+
+BuiltinDep = NamedTuple('BuiltinDep', [
+    ('package', PackageName),
+    ('version', Version),
+])
+
+BootstrapDep = NamedTuple('BootstrapDep', [
+    ('package', PackageName),
+    ('version', Version),
+    ('source', PackageSource),
+    # source tarball SHA256
+    ('src_sha256', Optional[SHA256Hash]),
+    # `revision` is only valid when source == HACKAGE.
+    ('revision', Optional[int]),
+    ('cabal_sha256', Optional[SHA256Hash]),
+    ('flags', List[str]),
+])
+
+BootstrapInfo = NamedTuple('BootstrapInfo', [
+    ('builtin', List[BuiltinDep]),
+    ('dependencies', List[BootstrapDep]),
+])
+
+class Compiler:
+    def __init__(self, ghc_path: Path):
+        if not ghc_path.is_file():
+            raise TypeError(f'GHC {ghc_path} is not a file')
+
+        self.ghc_path = ghc_path.resolve()
+
+        info = self._get_ghc_info()
+        self.version = info['Project version']
+        #self.lib_dir = Path(info['LibDir'])
+        #self.ghc_pkg_path = (self.lib_dir / 'bin' / 'ghc-pkg').resolve()
+        self.ghc_pkg_path = (self.ghc_path.parent / 'ghc-pkg').resolve()
+        if not self.ghc_pkg_path.is_file():
+            raise TypeError(f'ghc-pkg {self.ghc_pkg_path} is not a file')
+
+    def _get_ghc_info(self) -> Dict[str,str]:
+        from ast import literal_eval
+        p = subprocess_run([self.ghc_path, '--info'], stdout=subprocess.PIPE, check=True, encoding='UTF-8')
+        out = p.stdout.replace('\n', '').strip()
+        return dict(literal_eval(out))
+
+PackageSpec = Tuple[PackageName, Version]
+
+class BadTarball(Exception):
+    def __init__(self, path: Path, expected_sha256: SHA256Hash, found_sha256: SHA256Hash):
+        self.path = path
+        self.expected_sha256 = expected_sha256
+        self.found_sha256 = found_sha256
+
+    def __str__(self):
+        return '\n'.join([
+            f'Bad tarball hash: {str(self.path)}',
+            f'  expected: {self.expected_sha256}',
+            f'  found:    {self.found_sha256}',
+        ])
+
+def package_url(package: PackageName, version: Version) -> str:
+    return f'http://hackage.haskell.org/package/{package}-{version}/{package}-{version}.tar.gz'
+
+def package_cabal_url(package: PackageName, version: Version, revision: int) -> str:
+    return f'http://hackage.haskell.org/package/{package}-{version}/revision/{revision}.cabal'
+
+def verify_sha256(expected_hash: SHA256Hash, f: Path):
+    h = hash_file(hashlib.sha256(), f.open('rb'))
+    if h != expected_hash:
+        raise BadTarball(f, expected_hash, h)
+
+def fetch_package(package: PackageName,
+                  version: Version,
+                  src_sha256: SHA256Hash,
+                  revision: Optional[int],
+                  cabal_sha256: Optional[SHA256Hash],
+                  ) -> (Path, Path):
+    import urllib.request
+
+    # Download source distribution
+    tarball = TARBALLS / f'{package}-{version}.tar.gz'
+    if not tarball.exists():
+        print(f'Fetching {package}-{version}...')
+        tarball.parent.mkdir(parents=True, exist_ok=True)
+        url = package_url(package, version)
+        with urllib.request.urlopen(url) as resp:
+            shutil.copyfileobj(resp, tarball.open('wb'))
+
+    verify_sha256(src_sha256, tarball)
+
+    # Download revised cabal file
+    cabal_file = TARBALLS / f'{package}.cabal'
+    if revision is not None and not cabal_file.exists():
+        assert cabal_sha256 is not None
+        url = package_cabal_url(package, version, revision)
+        with urllib.request.urlopen(url) as resp:
+            shutil.copyfileobj(resp, cabal_file.open('wb'))
+            verify_sha256(cabal_sha256, cabal_file)
+
+    return (tarball, cabal_file)
+
+def read_bootstrap_info(path: Path) -> BootstrapInfo:
+    obj = json.load(path.open())
+
+    def bi_from_json(o: dict) -> BuiltinDep:
+        return BuiltinDep(**o)
+
+    def dep_from_json(o: dict) -> BootstrapDep:
+        o['source'] = PackageSource(o['source'])
+        return BootstrapDep(**o)
+
+    builtin = [bi_from_json(dep) for dep in obj['builtin'] ]
+    deps = [dep_from_json(dep) for dep in obj['dependencies'] ]
+
+    return BootstrapInfo(dependencies=deps, builtin=builtin)
+
+def check_builtin(dep: BuiltinDep, ghc: Compiler) -> None:
+    subprocess_run([str(ghc.ghc_pkg_path), 'describe', f'{dep.package}-{dep.version}'],
+                   check=True, stdout=subprocess.DEVNULL)
+    print(f'Using {dep.package}-{dep.version} from GHC...')
+    return
+
+def install_dep(dep: BootstrapDep, ghc: Compiler) -> None:
+    dist_dir = (DISTDIR / f'{dep.package}-{dep.version}').resolve()
+
+    if dep.source == PackageSource.HACKAGE:
+        assert dep.src_sha256 is not None
+        (tarball, cabal_file) = fetch_package(dep.package, dep.version, dep.src_sha256,
+                                dep.revision, dep.cabal_sha256)
+        UNPACKED.mkdir(parents=True, exist_ok=True)
+        shutil.unpack_archive(tarball.resolve(), UNPACKED, 'gztar')
+        sdist_dir = UNPACKED / f'{dep.package}-{dep.version}'
+
+        # Update cabal file with revision
+        if dep.revision is not None:
+            shutil.copyfile(cabal_file, sdist_dir / f'{dep.package}.cabal')
+
+    elif dep.source == PackageSource.LOCAL:
+        if dep.package == 'hadrian':
+            sdist_dir = Path('../').resolve()
+        else:
+            raise ValueError(f'Unknown local package {dep.package}')
+
+    install_sdist(dist_dir, sdist_dir, ghc, dep.flags)
+
+def install_sdist(dist_dir: Path, sdist_dir: Path, ghc: Compiler, flags: List[str]):
+    prefix = PSEUDOSTORE.resolve()
+    flags_option = ' '.join(flags)
+    setup_dist_dir = dist_dir / 'setup'
+    setup = setup_dist_dir / 'Setup'
+
+    build_args = [
+        f'--builddir={dist_dir}',
+    ]
+
+    configure_args = build_args + [
+        f'--package-db={PKG_DB.resolve()}',
+        f'--prefix={prefix}',
+        f'--bindir={BINDIR.resolve()}',
+        f'--with-compiler={ghc.ghc_path}',
+        f'--with-hc-pkg={ghc.ghc_pkg_path}',
+        f'--flags={flags_option}',
+    ]
+
+    def check_call(args: List[str]) -> None:
+        subprocess_run(args, cwd=sdist_dir, check=True)
+
+    setup_dist_dir.mkdir(parents=True, exist_ok=True)
+
+
+    setup_file = sdist_dir / 'Setup.hs'
+    if not setup_file.exists():
+        with open(setup_file, 'w') as setup_out:
+            setup_out.write('import Distribution.Simple\nmain = defaultMain')
+
+    # Note: we pass -i so GHC doesn't look for anything else
+    # This should be fine for cabal-install dependencies.
+    check_call([str(ghc.ghc_path), '--make', '-package-env=-', '-i', f'-odir={setup_dist_dir}', f'-hidir={setup_dist_dir}', '-o', setup, 'Setup'])
+    check_call([setup, 'configure'] + configure_args)
+    check_call([setup, 'build'] + build_args)
+    check_call([setup, 'install'] + build_args)
+
+def hash_file(h, f: BinaryIO) -> SHA256Hash:
+    while True:
+        d = f.read(1024)
+        if len(d) == 0:
+            return SHA256Hash(h.hexdigest())
+
+        h.update(d)
+
+
+# Cabal plan.json representation
+UnitId = NewType('UnitId', str)
+PlanUnit = NewType('PlanUnit', dict)
+
+def bootstrap(info: BootstrapInfo, ghc: Compiler) -> None:
+    if not PKG_DB.exists():
+        print(f'Creating package database {PKG_DB}')
+        PKG_DB.parent.mkdir(parents=True, exist_ok=True)
+        subprocess_run([ghc.ghc_pkg_path, 'init', PKG_DB])
+
+    for dep in info.builtin:
+        check_builtin(dep, ghc)
+
+    for dep in info.dependencies:
+        install_dep(dep, ghc)
+
+# Steps
+#######################################################################
+
+def linuxname(i, r):
+  i = i.strip() # id
+  r = r.strip() # release
+  if i == '': return 'linux'
+  else: return f"{i}-{r}".lower()
+
+def macname(macver):
+  # https://en.wikipedia.org/wiki/MacOS_version_history#Releases
+  if macver.startswith('10.12.'): return 'sierra'
+  if macver.startswith('10.13.'): return 'high-sierra'
+  if macver.startswith('10.14.'): return 'mojave'
+  if macver.startswith('10.15.'): return 'catalina'
+  if macver.startswith('11.0.'): return 'big-sur'
+  else: return macver
+
+def archive_name(version):
+    # Ask platform information
+    machine = platform.machine()
+    if machine == '': machine = "unknown"
+
+    system = platform.system().lower()
+    if system == '': system = "unknown"
+
+    version = system
+    if system == 'linux':
+        try:
+            i = subprocess_run(['lsb_release', '-si'], stdout=subprocess.PIPE, encoding='UTF-8')
+            r = subprocess_run(['lsb_release', '-sr'], stdout=subprocess.PIPE, encoding='UTF-8')
+            version = linuxname(i.stdout, r.stdout)
+        except:
+            try:
+                with open('/etc/alpine-release') as f:
+                    alpinever = f.read().strip()
+                    return f'alpine-{alpinever}'
+            except:
+                pass
+    elif system == 'darwin':
+        version = 'darwin-' + macname(platform.mac_ver()[0])
+    elif system == 'freebsd':
+        version = 'freebsd-' + platform.release().lower()
+
+    return f'hadrian-{version}-{machine}-{version}'
+
+def make_archive(hadrian_path):
+    import tempfile
+
+    print(f'Creating distribution tarball')
+
+    # Get bootstrapped hadrian version
+    # This also acts as smoke test
+    p = subprocess_run([hadrian_path, '--numeric-version'], stdout=subprocess.PIPE, check=True, encoding='UTF-8')
+    cabalversion = p.stdout.replace('\n', '').strip()
+
+    # Archive name
+    basename = ARTIFACTS.resolve() / (archive_name(cabalversion) + '-bootstrapped')
+
+    # In temporary directory, create a directory which we will archive
+    tmpdir = TMPDIR.resolve()
+    tmpdir.mkdir(parents=True, exist_ok=True)
+
+    rootdir = Path(tempfile.mkdtemp(dir=tmpdir))
+    shutil.copy(hadrian_path, rootdir / 'hadrian')
+
+    # Make archive...
+    fmt = 'xztar'
+    if platform.system() == 'Windows': fmt = 'zip'
+    archivename = shutil.make_archive(basename, fmt, rootdir)
+
+    return archivename
+
+def main() -> None:
+    import argparse
+    parser = argparse.ArgumentParser(
+        description="bootstrapping utility for hadrian.",
+        epilog = USAGE,
+        formatter_class = argparse.RawDescriptionHelpFormatter)
+    parser.add_argument('-d', '--deps', type=Path, default='bootstrap-deps.json',
+                        help='bootstrap dependency file')
+    parser.add_argument('-w', '--with-compiler', type=Path,
+                        help='path to GHC')
+    args = parser.parse_args()
+
+    # Find compiler
+    if args.with_compiler is None:
+        path = shutil.which('ghc')
+        if path is None:
+            raise ValueError("Couldn't find ghc in PATH")
+        ghc = Compiler(Path(path))
+    else:
+        ghc = Compiler(args.with_compiler)
+
+    print(f'Bootstrapping hadrian with GHC {ghc.version} at {ghc.ghc_path}...')
+
+    print(dedent("""
+        DO NOT use this script if you have another recent cabal-install available.
+        This script is intended only for bootstrapping hadrian on new
+        architectures.
+    """))
+
+    info = read_bootstrap_info(args.deps)
+    bootstrap(info, ghc)
+    hadrian_path = (BINDIR / 'hadrian').resolve()
+
+    archive = make_archive(hadrian_path)
+
+    print(dedent(f'''
+        Bootstrapping finished!
+
+        The resulting hadrian executable can be found at
+
+            {hadrian_path}
+
+        It have been archived for distribution in
+
+            {archive}
+
+        You can use this executable to build GHC.
+    '''))
+
+def subprocess_run(args, **kwargs):
+    "Like subprocess.run, but also print what we run"
+
+    args_str = ' '.join(map(str, args))
+    extras = ''
+    if 'cwd' in kwargs:
+        extras += f' cwd={kwargs["cwd"]}'
+    print(f'bootstrap: running{extras} {args_str}')
+
+    return subprocess.run(args, **kwargs)
+
+if __name__ == '__main__':
+    main()
diff --git a/hadrian/bootstrap/cabal.project b/hadrian/bootstrap/cabal.project
new file mode 100644
index 0000000000000000000000000000000000000000..e6fdbadb4398bc0e333947b5fb8021778310d943
--- /dev/null
+++ b/hadrian/bootstrap/cabal.project
@@ -0,0 +1 @@
+packages: .
diff --git a/hadrian/bootstrap/generate_bootstrap_plans b/hadrian/bootstrap/generate_bootstrap_plans
new file mode 100755
index 0000000000000000000000000000000000000000..167559aa531cfa4ef197c02f03dceee7a2da0d29
--- /dev/null
+++ b/hadrian/bootstrap/generate_bootstrap_plans
@@ -0,0 +1,18 @@
+ghcs_nix="https://gitlab.haskell.org/bgamari/ghcs-nix/-/archive/master/ghcs-nix-master.tar.gz"
+
+run() {
+  local ver="$1"
+  local drv="ghc-$ver"
+  echo "$ver"
+  nix build -f "$ghcs_nix" $drv
+  (cd ../; rm -r dist-newstyle; cabal configure hadrian -w bootstrap/result/bin/ghc)
+  cp ../dist-newstyle/cache/plan.json "plan-$ver.json"
+  cabal run -v0 hadrian-bootstrap-gen -- "plan-$ver.json" | tee "plan-bootstrap-$ver.json"
+}
+
+run "8_10_1"
+# run "8_10_2" Broken
+run "8_10_3"
+run "8_10_4"
+run "8_10_5"
+run "9_0_1"
diff --git a/hadrian/bootstrap/hadrian-bootstrap-gen.cabal b/hadrian/bootstrap/hadrian-bootstrap-gen.cabal
new file mode 100644
index 0000000000000000000000000000000000000000..977af35468ead8b230610014a9f2fe16194de7b2
--- /dev/null
+++ b/hadrian/bootstrap/hadrian-bootstrap-gen.cabal
@@ -0,0 +1,20 @@
+cabal-version: 2.2
+name:          hadrian-bootstrap-gen
+version:       0
+
+executable hadrian-bootstrap-gen
+  default-language: Haskell2010
+  hs-source-dirs:   src
+  ghc-options:      -Wall
+  main-is:          Main.hs
+  build-depends:
+    , aeson                  ^>=1.5.2.0
+    , base                   ^>=4.12.0.0 || ^>=4.13.0.0 || ^>=4.14.0.0
+    , bytestring             ^>=0.10.8.2
+    , Cabal                  ^>=3.2.0.0
+    , cabal-install-parsers  ^>=0.3.0.1
+    , cabal-plan             ^>=0.7.0.0
+    , containers             ^>=0.6.0.1
+    , text                   ^>=1.2.3.0
+    , topograph              ^>=1.0.0.1
+    , transformers           ^>=0.5.6.2
diff --git a/hadrian/bootstrap/plan-8_10_1.json b/hadrian/bootstrap/plan-8_10_1.json
new file mode 100644
index 0000000000000000000000000000000000000000..3dd477cf8e3d13ca9ec4a113a7f6250bcd674919
--- /dev/null
+++ b/hadrian/bootstrap/plan-8_10_1.json
@@ -0,0 +1 @@
+{"cabal-version":"3.2.0.0","cabal-lib-version":"3.2.0.0","compiler-id":"ghc-8.10.1","os":"linux","arch":"x86_64","install-plan":[{"type":"pre-existing","id":"Cabal-3.2.0.0","pkg-name":"Cabal","pkg-version":"3.2.0.0","depends":["array-0.5.4.0","base-4.14.0.0","binary-0.8.8.0","bytestring-0.10.10.0","containers-0.6.2.1","deepseq-1.4.4.0","directory-1.3.6.0","filepath-1.4.2.1","mtl-2.2.2","parsec-3.1.14.0","pretty-1.1.3.6","process-1.6.8.2","text-1.2.3.2","time-1.9.3","transformers-0.5.6.2","unix-2.7.2.2"]},{"type":"configured","id":"QuickCheck-2.14.2-3bf861496cce6d2157bfd3021c541eef02c0e69e64932316a5665fc5e4c4102f","pkg-name":"QuickCheck","pkg-version":"2.14.2","flags":{"old-random":false,"templatehaskell":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"4ce29211223d5e6620ebceba34a3ca9ccf1c10c0cf387d48aea45599222ee5aa","pkg-src-sha256":"d87b6c85696b601175274361fa62217894401e401e150c3c5d4013ac53cd36f3","depends":["base-4.14.0.0","containers-0.6.2.1","deepseq-1.4.4.0","random-1.2.0-7dca4da04d1af76b276795b5f4342d551ad8e8615320698c61e830145bad1f46","splitmix-0.1.0.3-0ed9006997a5257b2ba2fca3e9619b8740b49d5b8e73c7ca7421df40f3d8ee0d","template-haskell-2.16.0.0","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"array-0.5.4.0","pkg-name":"array","pkg-version":"0.5.4.0","depends":["base-4.14.0.0"]},{"type":"pre-existing","id":"base-4.14.0.0","pkg-name":"base","pkg-version":"4.14.0.0","depends":["ghc-prim-0.6.1","integer-gmp-1.0.3.0","rts"]},{"type":"pre-existing","id":"binary-0.8.8.0","pkg-name":"binary","pkg-version":"0.8.8.0","depends":["array-0.5.4.0","base-4.14.0.0","bytestring-0.10.10.0","containers-0.6.2.1"]},{"type":"pre-existing","id":"bytestring-0.10.10.0","pkg-name":"bytestring","pkg-version":"0.10.10.0","depends":["base-4.14.0.0","deepseq-1.4.4.0","ghc-prim-0.6.1","integer-gmp-1.0.3.0"]},{"type":"configured","id":"clock-0.8.2-5678492e11bfb8a7d3a2b2e38d8d4c40f7d1b5d4dccfb1b05678d09b7bf1c4bd","pkg-name":"clock","pkg-version":"0.8.2","flags":{"llvm":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"473ffd59765cc67634bdc55b63c699a85addf3a024089073ec2a862881e83e2a","pkg-src-sha256":"0b5db110c703e68b251d5883253a934b012110b45393fc65df1b095eb9a4e461","depends":["base-4.14.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"containers-0.6.2.1","pkg-name":"containers","pkg-version":"0.6.2.1","depends":["array-0.5.4.0","base-4.14.0.0","deepseq-1.4.4.0"]},{"type":"pre-existing","id":"deepseq-1.4.4.0","pkg-name":"deepseq","pkg-version":"1.4.4.0","depends":["array-0.5.4.0","base-4.14.0.0"]},{"type":"pre-existing","id":"directory-1.3.6.0","pkg-name":"directory","pkg-version":"1.3.6.0","depends":["base-4.14.0.0","filepath-1.4.2.1","time-1.9.3","unix-2.7.2.2"]},{"type":"configured","id":"extra-1.7.9-fcbae94026571f14f14a2f934b7ca4aeb931d4388235276e41d1f314dff3ed48","pkg-name":"extra","pkg-version":"1.7.9","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"f1dec740f0f2025790c540732bfd52c556ec55bde4f5dfd7cf18e22bd44ff3d0","pkg-src-sha256":"f66e26a63b216f0ca33665a75c08eada0a96af192ace83a18d87839d79afdf9d","depends":["base-4.14.0.0","clock-0.8.2-5678492e11bfb8a7d3a2b2e38d8d4c40f7d1b5d4dccfb1b05678d09b7bf1c4bd","directory-1.3.6.0","filepath-1.4.2.1","process-1.6.8.2","time-1.9.3","unix-2.7.2.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"filepath-1.4.2.1","pkg-name":"filepath","pkg-version":"1.4.2.1","depends":["base-4.14.0.0"]},{"type":"configured","id":"filepattern-0.1.2-f4bcbba4b051aa2703f4d8db7a044e2e5f0676b5a743af7564a465b04acc2fe0","pkg-name":"filepattern","pkg-version":"0.1.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"aec816ff25418d1b03ba75189e568f490eb86efc47f586d43363fa338e422e81","pkg-src-sha256":"d92912ee0db0b8c50d6b2ffdc1ae91ee30e2704b47896aa325b42b58a2fcf65b","depends":["base-4.14.0.0","directory-1.3.6.0","extra-1.7.9-fcbae94026571f14f14a2f934b7ca4aeb931d4388235276e41d1f314dff3ed48","filepath-1.4.2.1"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"ghc-boot-th-8.10.1","pkg-name":"ghc-boot-th","pkg-version":"8.10.1","depends":["base-4.14.0.0"]},{"type":"pre-existing","id":"ghc-prim-0.6.1","pkg-name":"ghc-prim","pkg-version":"0.6.1","depends":["rts"]},{"type":"configured","id":"hadrian-0.1.0.0-inplace-hadrian","pkg-name":"hadrian","pkg-version":"0.1.0.0","flags":{"threaded":true},"style":"local","pkg-src":{"type":"local","path":"/home/matt/ghc-hadrian-bootstrap/hadrian/."},"dist-dir":"/home/matt/ghc-hadrian-bootstrap/hadrian/dist-newstyle/build/x86_64-linux/ghc-8.10.1/hadrian-0.1.0.0/x/hadrian","depends":["Cabal-3.2.0.0","QuickCheck-2.14.2-3bf861496cce6d2157bfd3021c541eef02c0e69e64932316a5665fc5e4c4102f","base-4.14.0.0","bytestring-0.10.10.0","containers-0.6.2.1","directory-1.3.6.0","extra-1.7.9-fcbae94026571f14f14a2f934b7ca4aeb931d4388235276e41d1f314dff3ed48","filepath-1.4.2.1","mtl-2.2.2","parsec-3.1.14.0","shake-0.19.4-8efe84f02a56166e8783c9ec6246bc734f19a6bb93690c65f6832ed0b0afa88a","transformers-0.5.6.2","unordered-containers-0.2.13.0-515c86b51479cff7046834433af1270b0862534995184bb2b2f9995333de32bf"],"exe-depends":[],"component-name":"exe:hadrian","bin-file":"/home/matt/ghc-hadrian-bootstrap/hadrian/dist-newstyle/build/x86_64-linux/ghc-8.10.1/hadrian-0.1.0.0/x/hadrian/build/hadrian/hadrian"},{"type":"configured","id":"hashable-1.3.1.0-e5266421805138ba33cb27c5894cb8d323461bfd1d26eab8a3eeaa8738feb21f","pkg-name":"hashable","pkg-version":"1.3.1.0","flags":{"integer-gmp":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"d965e098e06cc585b201da6137dcb31c40f35eb7a937b833903969447985c076","pkg-src-sha256":"8061823a4ac521b53912edcba36b956f3159cb885b07ec119af295a6568ca7c4","depends":["base-4.14.0.0","bytestring-0.10.10.0","deepseq-1.4.4.0","ghc-prim-0.6.1","integer-gmp-1.0.3.0","text-1.2.3.2"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"heaps-0.4-ebb85f92a69df2a486999e08b7e807d9fbc4e26e25545eba46f44ce382961342","pkg-name":"heaps","pkg-version":"0.4","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"66b19fcd813b0e4db3e0bac541bd46606c3b13d3d081d9f9666f4be0f5ff14b8","pkg-src-sha256":"89329df8b95ae99ef272e41e7a2d0fe2f1bb7eacfcc34bc01664414b33067cfd","depends":["base-4.14.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"integer-gmp-1.0.3.0","pkg-name":"integer-gmp","pkg-version":"1.0.3.0","depends":["ghc-prim-0.6.1"]},{"type":"configured","id":"js-dgtable-0.5.2-1b1295ec305a0a0a37f8af71db1bf3b9906d5052baa83df910e19162afe8d0af","pkg-name":"js-dgtable","pkg-version":"0.5.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"f75cb4fa53c88c65794becdd48eb0d3b2b8abd89a3d5c19e87af91f5225c15e4","pkg-src-sha256":"e28dd65bee8083b17210134e22e01c6349dc33c3b7bd17705973cd014e9f20ac","depends":["base-4.14.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-flot-0.8.3-24f7575c68cf18833a7af148b1da8ca04552dd81b411728aacefa32c87ac0d48","pkg-name":"js-flot","pkg-version":"0.8.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"4c1c447a9a2fba0adba6d30678302a30c32b9dfde9e7aa9e9156483e1545096d","pkg-src-sha256":"1ba2f2a6b8d85da76c41f526c98903cbb107f8642e506c072c1e7e3c20fe5e7a","depends":["base-4.14.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-jquery-3.3.1-7c01f724a76c7ce3dad098d46b1380931a0b051eb6f623b83fdf8f7f344e10cd","pkg-name":"js-jquery","pkg-version":"3.3.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"59ab6c79159549ef94b584abce8e6d3b336014c2cce1337b59a8f637e2856df5","pkg-src-sha256":"e0e0681f0da1130ede4e03a051630ea439c458cb97216cdb01771ebdbe44069b","depends":["base-4.14.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"mtl-2.2.2","pkg-name":"mtl","pkg-version":"2.2.2","depends":["base-4.14.0.0","transformers-0.5.6.2"]},{"type":"pre-existing","id":"parsec-3.1.14.0","pkg-name":"parsec","pkg-version":"3.1.14.0","depends":["base-4.14.0.0","bytestring-0.10.10.0","mtl-2.2.2","text-1.2.3.2"]},{"type":"pre-existing","id":"pretty-1.1.3.6","pkg-name":"pretty","pkg-version":"1.1.3.6","depends":["base-4.14.0.0","deepseq-1.4.4.0","ghc-prim-0.6.1"]},{"type":"configured","id":"primitive-0.7.1.0-3f661be4f721ce92d10cbee1089ed28cba78d61cc6f3688eddf35cc825d96e95","pkg-name":"primitive","pkg-version":"0.7.1.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"f6357d5720c1c665096c3e011467daf443198b786a708d2ff926958a24d508d4","pkg-src-sha256":"6bebecfdf2a57787d9fd5231bfd612b65a92edd7b33a973b2a0f11312b89a3f0","depends":["base-4.14.0.0","deepseq-1.4.4.0","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"process-1.6.8.2","pkg-name":"process","pkg-version":"1.6.8.2","depends":["base-4.14.0.0","deepseq-1.4.4.0","directory-1.3.6.0","filepath-1.4.2.1","unix-2.7.2.2"]},{"type":"configured","id":"random-1.2.0-7dca4da04d1af76b276795b5f4342d551ad8e8615320698c61e830145bad1f46","pkg-name":"random","pkg-version":"1.2.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"30d72df4cc1d2fe2d445c88f0ee9d21965af7ce86660c43a6c32a6a1d90d51c9","pkg-src-sha256":"e4519cf7c058bfd5bdbe4acc782284acc9e25e74487208619ca83cbcd63fb9de","depends":["base-4.14.0.0","bytestring-0.10.10.0","deepseq-1.4.4.0","mtl-2.2.2","splitmix-0.1.0.3-0ed9006997a5257b2ba2fca3e9619b8740b49d5b8e73c7ca7421df40f3d8ee0d"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"rts","pkg-name":"rts","pkg-version":"1.0","depends":[]},{"type":"configured","id":"shake-0.19.4-46bc09b21201f84f8cfb104e58245d2d8b2af4763aada804340b8cd557beedf9","pkg-name":"shake","pkg-version":"0.19.4","flags":{"cloud":false,"embed-files":false,"portable":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"be81f7c69137e639812380047dfbbdd253ca536cc919504c3bc0f14517e80eb9","pkg-src-sha256":"5bae8873f628113604159f650802edb249dfbe5802c4612751f680ac987d73ee","depends":["base-4.14.0.0","binary-0.8.8.0","bytestring-0.10.10.0","deepseq-1.4.4.0","directory-1.3.6.0","extra-1.7.9-fcbae94026571f14f14a2f934b7ca4aeb931d4388235276e41d1f314dff3ed48","filepath-1.4.2.1","filepattern-0.1.2-f4bcbba4b051aa2703f4d8db7a044e2e5f0676b5a743af7564a465b04acc2fe0","hashable-1.3.1.0-e5266421805138ba33cb27c5894cb8d323461bfd1d26eab8a3eeaa8738feb21f","heaps-0.4-ebb85f92a69df2a486999e08b7e807d9fbc4e26e25545eba46f44ce382961342","js-dgtable-0.5.2-1b1295ec305a0a0a37f8af71db1bf3b9906d5052baa83df910e19162afe8d0af","js-flot-0.8.3-24f7575c68cf18833a7af148b1da8ca04552dd81b411728aacefa32c87ac0d48","js-jquery-3.3.1-7c01f724a76c7ce3dad098d46b1380931a0b051eb6f623b83fdf8f7f344e10cd","primitive-0.7.1.0-3f661be4f721ce92d10cbee1089ed28cba78d61cc6f3688eddf35cc825d96e95","process-1.6.8.2","random-1.2.0-7dca4da04d1af76b276795b5f4342d551ad8e8615320698c61e830145bad1f46","time-1.9.3","transformers-0.5.6.2","unix-2.7.2.2","unordered-containers-0.2.13.0-515c86b51479cff7046834433af1270b0862534995184bb2b2f9995333de32bf","utf8-string-1.0.2-2815d6173223cc0d3fa6daeb6e7e82993bf2b7b864e9ca8453a068a4ab7ffea9"],"exe-depends":[],"component-name":"exe:shake","bin-file":"/home/matt/.cabal/store/ghc-8.10.1/shake-0.19.4-46bc09b21201f84f8cfb104e58245d2d8b2af4763aada804340b8cd557beedf9/bin/shake"},{"type":"configured","id":"shake-0.19.4-8efe84f02a56166e8783c9ec6246bc734f19a6bb93690c65f6832ed0b0afa88a","pkg-name":"shake","pkg-version":"0.19.4","flags":{"cloud":false,"embed-files":false,"portable":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"be81f7c69137e639812380047dfbbdd253ca536cc919504c3bc0f14517e80eb9","pkg-src-sha256":"5bae8873f628113604159f650802edb249dfbe5802c4612751f680ac987d73ee","depends":["base-4.14.0.0","binary-0.8.8.0","bytestring-0.10.10.0","deepseq-1.4.4.0","directory-1.3.6.0","extra-1.7.9-fcbae94026571f14f14a2f934b7ca4aeb931d4388235276e41d1f314dff3ed48","filepath-1.4.2.1","filepattern-0.1.2-f4bcbba4b051aa2703f4d8db7a044e2e5f0676b5a743af7564a465b04acc2fe0","hashable-1.3.1.0-e5266421805138ba33cb27c5894cb8d323461bfd1d26eab8a3eeaa8738feb21f","heaps-0.4-ebb85f92a69df2a486999e08b7e807d9fbc4e26e25545eba46f44ce382961342","js-dgtable-0.5.2-1b1295ec305a0a0a37f8af71db1bf3b9906d5052baa83df910e19162afe8d0af","js-flot-0.8.3-24f7575c68cf18833a7af148b1da8ca04552dd81b411728aacefa32c87ac0d48","js-jquery-3.3.1-7c01f724a76c7ce3dad098d46b1380931a0b051eb6f623b83fdf8f7f344e10cd","primitive-0.7.1.0-3f661be4f721ce92d10cbee1089ed28cba78d61cc6f3688eddf35cc825d96e95","process-1.6.8.2","random-1.2.0-7dca4da04d1af76b276795b5f4342d551ad8e8615320698c61e830145bad1f46","time-1.9.3","transformers-0.5.6.2","unix-2.7.2.2","unordered-containers-0.2.13.0-515c86b51479cff7046834433af1270b0862534995184bb2b2f9995333de32bf","utf8-string-1.0.2-2815d6173223cc0d3fa6daeb6e7e82993bf2b7b864e9ca8453a068a4ab7ffea9"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"splitmix-0.1.0.3-0ed9006997a5257b2ba2fca3e9619b8740b49d5b8e73c7ca7421df40f3d8ee0d","pkg-name":"splitmix","pkg-version":"0.1.0.3","flags":{"optimised-mixer":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"fc3aae74c467f4b608050bef53aec17904a618731df9407e655d8f3bf8c32d5c","pkg-src-sha256":"46009f4b000c9e6613377767b8718bf38476469f2a8e2162d98cc246882d5a35","depends":["base-4.14.0.0","deepseq-1.4.4.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"template-haskell-2.16.0.0","pkg-name":"template-haskell","pkg-version":"2.16.0.0","depends":["base-4.14.0.0","ghc-boot-th-8.10.1","ghc-prim-0.6.1","pretty-1.1.3.6"]},{"type":"pre-existing","id":"text-1.2.3.2","pkg-name":"text","pkg-version":"1.2.3.2","depends":["array-0.5.4.0","base-4.14.0.0","binary-0.8.8.0","bytestring-0.10.10.0","deepseq-1.4.4.0","ghc-prim-0.6.1","integer-gmp-1.0.3.0"]},{"type":"pre-existing","id":"time-1.9.3","pkg-name":"time","pkg-version":"1.9.3","depends":["base-4.14.0.0","deepseq-1.4.4.0"]},{"type":"pre-existing","id":"transformers-0.5.6.2","pkg-name":"transformers","pkg-version":"0.5.6.2","depends":["base-4.14.0.0"]},{"type":"pre-existing","id":"unix-2.7.2.2","pkg-name":"unix","pkg-version":"2.7.2.2","depends":["base-4.14.0.0","bytestring-0.10.10.0","time-1.9.3"]},{"type":"configured","id":"unordered-containers-0.2.13.0-515c86b51479cff7046834433af1270b0862534995184bb2b2f9995333de32bf","pkg-name":"unordered-containers","pkg-version":"0.2.13.0","flags":{"debug":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"6310c636f92ed4908fdd0de582b6be31c2851c7b5f2ec14e9f416eb94df7a078","pkg-src-sha256":"86b01369ab8eb311383a052d389337e2cd71a63088323f02932754df4aa37b55","depends":["base-4.14.0.0","deepseq-1.4.4.0","hashable-1.3.1.0-e5266421805138ba33cb27c5894cb8d323461bfd1d26eab8a3eeaa8738feb21f"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"utf8-string-1.0.2-2815d6173223cc0d3fa6daeb6e7e82993bf2b7b864e9ca8453a068a4ab7ffea9","pkg-name":"utf8-string","pkg-version":"1.0.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"79416292186feeaf1f60e49ac5a1ffae9bf1b120e040a74bf0e81ca7f1d31d3f","pkg-src-sha256":"ee48deada7600370728c4156cb002441de770d0121ae33a68139a9ed9c19b09a","depends":["base-4.14.0.0","bytestring-0.10.10.0"],"exe-depends":[],"component-name":"lib"}]}
\ No newline at end of file
diff --git a/hadrian/bootstrap/plan-8_10_2.json b/hadrian/bootstrap/plan-8_10_2.json
new file mode 100644
index 0000000000000000000000000000000000000000..dc9fff4bc1c1a672130d158496fc7433bfc36430
--- /dev/null
+++ b/hadrian/bootstrap/plan-8_10_2.json
@@ -0,0 +1 @@
+{"cabal-version":"3.2.0.0","cabal-lib-version":"3.2.0.0","compiler-id":"ghc-8.10.2","os":"linux","arch":"x86_64","install-plan":[{"type":"pre-existing","id":"Cabal-3.2.0.0","pkg-name":"Cabal","pkg-version":"3.2.0.0","depends":["array-0.5.4.0","base-4.14.1.0","binary-0.8.8.0","bytestring-0.10.10.0","containers-0.6.2.1","deepseq-1.4.4.0","directory-1.3.6.0","filepath-1.4.2.1","mtl-2.2.2","parsec-3.1.14.0","pretty-1.1.3.6","process-1.6.9.0","text-1.2.3.2","time-1.9.3","transformers-0.5.6.2","unix-2.7.2.2"]},{"type":"configured","id":"QuickCheck-2.14.2-4044f5a3c770279a46a4bce71f9df77e45678626f035897da04ca467e8d974da","pkg-name":"QuickCheck","pkg-version":"2.14.2","flags":{"old-random":false,"templatehaskell":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"4ce29211223d5e6620ebceba34a3ca9ccf1c10c0cf387d48aea45599222ee5aa","pkg-src-sha256":"d87b6c85696b601175274361fa62217894401e401e150c3c5d4013ac53cd36f3","depends":["base-4.14.1.0","containers-0.6.2.1","deepseq-1.4.4.0","random-1.2.0-f056578d75c60848b8e9e432f58aef5a50fd256f12c0d313697cf915d364df6e","splitmix-0.1.0.3-dcfd89d2a83afbc76e693b35ab28b6af92e664e5e9ca7adbee03987ab7311697","template-haskell-2.16.0.0","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"array-0.5.4.0","pkg-name":"array","pkg-version":"0.5.4.0","depends":["base-4.14.1.0"]},{"type":"pre-existing","id":"base-4.14.1.0","pkg-name":"base","pkg-version":"4.14.1.0","depends":["ghc-prim-0.6.1","integer-gmp-1.0.3.0","rts"]},{"type":"pre-existing","id":"binary-0.8.8.0","pkg-name":"binary","pkg-version":"0.8.8.0","depends":["array-0.5.4.0","base-4.14.1.0","bytestring-0.10.10.0","containers-0.6.2.1"]},{"type":"pre-existing","id":"bytestring-0.10.10.0","pkg-name":"bytestring","pkg-version":"0.10.10.0","depends":["base-4.14.1.0","deepseq-1.4.4.0","ghc-prim-0.6.1","integer-gmp-1.0.3.0"]},{"type":"configured","id":"clock-0.8.2-ab5b6c44643ca4539e7f0278ba1ecd8a2b8b7f0c8d1a40e5b2075f360ebc9ef1","pkg-name":"clock","pkg-version":"0.8.2","flags":{"llvm":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"473ffd59765cc67634bdc55b63c699a85addf3a024089073ec2a862881e83e2a","pkg-src-sha256":"0b5db110c703e68b251d5883253a934b012110b45393fc65df1b095eb9a4e461","depends":["base-4.14.1.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"containers-0.6.2.1","pkg-name":"containers","pkg-version":"0.6.2.1","depends":["array-0.5.4.0","base-4.14.1.0","deepseq-1.4.4.0"]},{"type":"pre-existing","id":"deepseq-1.4.4.0","pkg-name":"deepseq","pkg-version":"1.4.4.0","depends":["array-0.5.4.0","base-4.14.1.0"]},{"type":"pre-existing","id":"directory-1.3.6.0","pkg-name":"directory","pkg-version":"1.3.6.0","depends":["base-4.14.1.0","filepath-1.4.2.1","time-1.9.3","unix-2.7.2.2"]},{"type":"configured","id":"extra-1.7.9-6f94da3821f2f5df7b0cd80e72f6f8ebd26d26ff383fd20a81fabf8cc11bc903","pkg-name":"extra","pkg-version":"1.7.9","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"f1dec740f0f2025790c540732bfd52c556ec55bde4f5dfd7cf18e22bd44ff3d0","pkg-src-sha256":"f66e26a63b216f0ca33665a75c08eada0a96af192ace83a18d87839d79afdf9d","depends":["base-4.14.1.0","clock-0.8.2-ab5b6c44643ca4539e7f0278ba1ecd8a2b8b7f0c8d1a40e5b2075f360ebc9ef1","directory-1.3.6.0","filepath-1.4.2.1","process-1.6.9.0","time-1.9.3","unix-2.7.2.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"filepath-1.4.2.1","pkg-name":"filepath","pkg-version":"1.4.2.1","depends":["base-4.14.1.0"]},{"type":"configured","id":"filepattern-0.1.2-482fb6b9851cd3b3ea17ca0f09ae14ceb0b13f1e76d2229921f60707aabd7243","pkg-name":"filepattern","pkg-version":"0.1.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"aec816ff25418d1b03ba75189e568f490eb86efc47f586d43363fa338e422e81","pkg-src-sha256":"d92912ee0db0b8c50d6b2ffdc1ae91ee30e2704b47896aa325b42b58a2fcf65b","depends":["base-4.14.1.0","directory-1.3.6.0","extra-1.7.9-6f94da3821f2f5df7b0cd80e72f6f8ebd26d26ff383fd20a81fabf8cc11bc903","filepath-1.4.2.1"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"ghc-boot-th-8.10.2","pkg-name":"ghc-boot-th","pkg-version":"8.10.2","depends":["base-4.14.1.0"]},{"type":"pre-existing","id":"ghc-prim-0.6.1","pkg-name":"ghc-prim","pkg-version":"0.6.1","depends":["rts"]},{"type":"configured","id":"hadrian-0.1.0.0-inplace-hadrian","pkg-name":"hadrian","pkg-version":"0.1.0.0","flags":{"threaded":true},"style":"local","pkg-src":{"type":"local","path":"/home/matt/ghc-hadrian-bootstrap/hadrian/."},"dist-dir":"/home/matt/ghc-hadrian-bootstrap/hadrian/dist-newstyle/build/x86_64-linux/ghc-8.10.2/hadrian-0.1.0.0/x/hadrian","depends":["Cabal-3.2.0.0","QuickCheck-2.14.2-4044f5a3c770279a46a4bce71f9df77e45678626f035897da04ca467e8d974da","base-4.14.1.0","bytestring-0.10.10.0","containers-0.6.2.1","directory-1.3.6.0","extra-1.7.9-6f94da3821f2f5df7b0cd80e72f6f8ebd26d26ff383fd20a81fabf8cc11bc903","filepath-1.4.2.1","mtl-2.2.2","parsec-3.1.14.0","shake-0.19.4-f8cdc3e489342853f74786242c9a766272e61ed4562f4c435df2b56d21e8d3fd","transformers-0.5.6.2","unordered-containers-0.2.13.0-52616055beaf35b7801a4548d552377bdc0d78bf23390ed0c3384b06e8940f3f"],"exe-depends":[],"component-name":"exe:hadrian","bin-file":"/home/matt/ghc-hadrian-bootstrap/hadrian/dist-newstyle/build/x86_64-linux/ghc-8.10.2/hadrian-0.1.0.0/x/hadrian/build/hadrian/hadrian"},{"type":"configured","id":"hashable-1.3.1.0-7b0e9905af2c8c28f1c93a5db526225be808fbbb246856be800cc8d4fbb94dfd","pkg-name":"hashable","pkg-version":"1.3.1.0","flags":{"integer-gmp":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"d965e098e06cc585b201da6137dcb31c40f35eb7a937b833903969447985c076","pkg-src-sha256":"8061823a4ac521b53912edcba36b956f3159cb885b07ec119af295a6568ca7c4","depends":["base-4.14.1.0","bytestring-0.10.10.0","deepseq-1.4.4.0","ghc-prim-0.6.1","integer-gmp-1.0.3.0","text-1.2.3.2"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"heaps-0.4-a7e7fc85bc63f2274cc7beeb3dca066995f9f0ffa9b8a2eb066886fb968ab7c9","pkg-name":"heaps","pkg-version":"0.4","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"66b19fcd813b0e4db3e0bac541bd46606c3b13d3d081d9f9666f4be0f5ff14b8","pkg-src-sha256":"89329df8b95ae99ef272e41e7a2d0fe2f1bb7eacfcc34bc01664414b33067cfd","depends":["base-4.14.1.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"integer-gmp-1.0.3.0","pkg-name":"integer-gmp","pkg-version":"1.0.3.0","depends":["ghc-prim-0.6.1"]},{"type":"configured","id":"js-dgtable-0.5.2-4f088268d09c2f9647278883e5402bd984046a32e50bcf47f101c4f2dc5fafe0","pkg-name":"js-dgtable","pkg-version":"0.5.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"f75cb4fa53c88c65794becdd48eb0d3b2b8abd89a3d5c19e87af91f5225c15e4","pkg-src-sha256":"e28dd65bee8083b17210134e22e01c6349dc33c3b7bd17705973cd014e9f20ac","depends":["base-4.14.1.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-flot-0.8.3-39743a76d3bd70144281f131cefa148e8394b14de00015baaad9f2e5e7a7cb80","pkg-name":"js-flot","pkg-version":"0.8.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"4c1c447a9a2fba0adba6d30678302a30c32b9dfde9e7aa9e9156483e1545096d","pkg-src-sha256":"1ba2f2a6b8d85da76c41f526c98903cbb107f8642e506c072c1e7e3c20fe5e7a","depends":["base-4.14.1.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-jquery-3.3.1-2c482b4477c7cd995d7a3b1ff5594d388a9f62830d6aba26fceadd912ccf4fd0","pkg-name":"js-jquery","pkg-version":"3.3.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"59ab6c79159549ef94b584abce8e6d3b336014c2cce1337b59a8f637e2856df5","pkg-src-sha256":"e0e0681f0da1130ede4e03a051630ea439c458cb97216cdb01771ebdbe44069b","depends":["base-4.14.1.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"mtl-2.2.2","pkg-name":"mtl","pkg-version":"2.2.2","depends":["base-4.14.1.0","transformers-0.5.6.2"]},{"type":"pre-existing","id":"parsec-3.1.14.0","pkg-name":"parsec","pkg-version":"3.1.14.0","depends":["base-4.14.1.0","bytestring-0.10.10.0","mtl-2.2.2","text-1.2.3.2"]},{"type":"pre-existing","id":"pretty-1.1.3.6","pkg-name":"pretty","pkg-version":"1.1.3.6","depends":["base-4.14.1.0","deepseq-1.4.4.0","ghc-prim-0.6.1"]},{"type":"configured","id":"primitive-0.7.1.0-f012577575c0a83a7acb71352c37f9c2228aa22d38df742952e879128e014616","pkg-name":"primitive","pkg-version":"0.7.1.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"f6357d5720c1c665096c3e011467daf443198b786a708d2ff926958a24d508d4","pkg-src-sha256":"6bebecfdf2a57787d9fd5231bfd612b65a92edd7b33a973b2a0f11312b89a3f0","depends":["base-4.14.1.0","deepseq-1.4.4.0","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"process-1.6.9.0","pkg-name":"process","pkg-version":"1.6.9.0","depends":["base-4.14.1.0","deepseq-1.4.4.0","directory-1.3.6.0","filepath-1.4.2.1","unix-2.7.2.2"]},{"type":"configured","id":"random-1.2.0-f056578d75c60848b8e9e432f58aef5a50fd256f12c0d313697cf915d364df6e","pkg-name":"random","pkg-version":"1.2.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"30d72df4cc1d2fe2d445c88f0ee9d21965af7ce86660c43a6c32a6a1d90d51c9","pkg-src-sha256":"e4519cf7c058bfd5bdbe4acc782284acc9e25e74487208619ca83cbcd63fb9de","depends":["base-4.14.1.0","bytestring-0.10.10.0","deepseq-1.4.4.0","mtl-2.2.2","splitmix-0.1.0.3-dcfd89d2a83afbc76e693b35ab28b6af92e664e5e9ca7adbee03987ab7311697"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"rts","pkg-name":"rts","pkg-version":"1.0","depends":[]},{"type":"configured","id":"shake-0.19.4-043a452e03636c533f8396bf4845a504600fbe9ae9b301a3549004d4b35e16bd","pkg-name":"shake","pkg-version":"0.19.4","flags":{"cloud":false,"embed-files":false,"portable":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"be81f7c69137e639812380047dfbbdd253ca536cc919504c3bc0f14517e80eb9","pkg-src-sha256":"5bae8873f628113604159f650802edb249dfbe5802c4612751f680ac987d73ee","depends":["base-4.14.1.0","binary-0.8.8.0","bytestring-0.10.10.0","deepseq-1.4.4.0","directory-1.3.6.0","extra-1.7.9-6f94da3821f2f5df7b0cd80e72f6f8ebd26d26ff383fd20a81fabf8cc11bc903","filepath-1.4.2.1","filepattern-0.1.2-482fb6b9851cd3b3ea17ca0f09ae14ceb0b13f1e76d2229921f60707aabd7243","hashable-1.3.1.0-7b0e9905af2c8c28f1c93a5db526225be808fbbb246856be800cc8d4fbb94dfd","heaps-0.4-a7e7fc85bc63f2274cc7beeb3dca066995f9f0ffa9b8a2eb066886fb968ab7c9","js-dgtable-0.5.2-4f088268d09c2f9647278883e5402bd984046a32e50bcf47f101c4f2dc5fafe0","js-flot-0.8.3-39743a76d3bd70144281f131cefa148e8394b14de00015baaad9f2e5e7a7cb80","js-jquery-3.3.1-2c482b4477c7cd995d7a3b1ff5594d388a9f62830d6aba26fceadd912ccf4fd0","primitive-0.7.1.0-f012577575c0a83a7acb71352c37f9c2228aa22d38df742952e879128e014616","process-1.6.9.0","random-1.2.0-f056578d75c60848b8e9e432f58aef5a50fd256f12c0d313697cf915d364df6e","time-1.9.3","transformers-0.5.6.2","unix-2.7.2.2","unordered-containers-0.2.13.0-52616055beaf35b7801a4548d552377bdc0d78bf23390ed0c3384b06e8940f3f","utf8-string-1.0.2-7bb4e7e8bc997282589aaaaa9ac99fb554953ac12c720494d91f57d7ff984c86"],"exe-depends":[],"component-name":"exe:shake","bin-file":"/home/matt/.cabal/store/ghc-8.10.2/shake-0.19.4-043a452e03636c533f8396bf4845a504600fbe9ae9b301a3549004d4b35e16bd/bin/shake"},{"type":"configured","id":"shake-0.19.4-f8cdc3e489342853f74786242c9a766272e61ed4562f4c435df2b56d21e8d3fd","pkg-name":"shake","pkg-version":"0.19.4","flags":{"cloud":false,"embed-files":false,"portable":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"be81f7c69137e639812380047dfbbdd253ca536cc919504c3bc0f14517e80eb9","pkg-src-sha256":"5bae8873f628113604159f650802edb249dfbe5802c4612751f680ac987d73ee","depends":["base-4.14.1.0","binary-0.8.8.0","bytestring-0.10.10.0","deepseq-1.4.4.0","directory-1.3.6.0","extra-1.7.9-6f94da3821f2f5df7b0cd80e72f6f8ebd26d26ff383fd20a81fabf8cc11bc903","filepath-1.4.2.1","filepattern-0.1.2-482fb6b9851cd3b3ea17ca0f09ae14ceb0b13f1e76d2229921f60707aabd7243","hashable-1.3.1.0-7b0e9905af2c8c28f1c93a5db526225be808fbbb246856be800cc8d4fbb94dfd","heaps-0.4-a7e7fc85bc63f2274cc7beeb3dca066995f9f0ffa9b8a2eb066886fb968ab7c9","js-dgtable-0.5.2-4f088268d09c2f9647278883e5402bd984046a32e50bcf47f101c4f2dc5fafe0","js-flot-0.8.3-39743a76d3bd70144281f131cefa148e8394b14de00015baaad9f2e5e7a7cb80","js-jquery-3.3.1-2c482b4477c7cd995d7a3b1ff5594d388a9f62830d6aba26fceadd912ccf4fd0","primitive-0.7.1.0-f012577575c0a83a7acb71352c37f9c2228aa22d38df742952e879128e014616","process-1.6.9.0","random-1.2.0-f056578d75c60848b8e9e432f58aef5a50fd256f12c0d313697cf915d364df6e","time-1.9.3","transformers-0.5.6.2","unix-2.7.2.2","unordered-containers-0.2.13.0-52616055beaf35b7801a4548d552377bdc0d78bf23390ed0c3384b06e8940f3f","utf8-string-1.0.2-7bb4e7e8bc997282589aaaaa9ac99fb554953ac12c720494d91f57d7ff984c86"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"splitmix-0.1.0.3-dcfd89d2a83afbc76e693b35ab28b6af92e664e5e9ca7adbee03987ab7311697","pkg-name":"splitmix","pkg-version":"0.1.0.3","flags":{"optimised-mixer":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"fc3aae74c467f4b608050bef53aec17904a618731df9407e655d8f3bf8c32d5c","pkg-src-sha256":"46009f4b000c9e6613377767b8718bf38476469f2a8e2162d98cc246882d5a35","depends":["base-4.14.1.0","deepseq-1.4.4.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"template-haskell-2.16.0.0","pkg-name":"template-haskell","pkg-version":"2.16.0.0","depends":["base-4.14.1.0","ghc-boot-th-8.10.2","ghc-prim-0.6.1","pretty-1.1.3.6"]},{"type":"pre-existing","id":"text-1.2.3.2","pkg-name":"text","pkg-version":"1.2.3.2","depends":["array-0.5.4.0","base-4.14.1.0","binary-0.8.8.0","bytestring-0.10.10.0","deepseq-1.4.4.0","ghc-prim-0.6.1","integer-gmp-1.0.3.0"]},{"type":"pre-existing","id":"time-1.9.3","pkg-name":"time","pkg-version":"1.9.3","depends":["base-4.14.1.0","deepseq-1.4.4.0"]},{"type":"pre-existing","id":"transformers-0.5.6.2","pkg-name":"transformers","pkg-version":"0.5.6.2","depends":["base-4.14.1.0"]},{"type":"pre-existing","id":"unix-2.7.2.2","pkg-name":"unix","pkg-version":"2.7.2.2","depends":["base-4.14.1.0","bytestring-0.10.10.0","time-1.9.3"]},{"type":"configured","id":"unordered-containers-0.2.13.0-52616055beaf35b7801a4548d552377bdc0d78bf23390ed0c3384b06e8940f3f","pkg-name":"unordered-containers","pkg-version":"0.2.13.0","flags":{"debug":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"6310c636f92ed4908fdd0de582b6be31c2851c7b5f2ec14e9f416eb94df7a078","pkg-src-sha256":"86b01369ab8eb311383a052d389337e2cd71a63088323f02932754df4aa37b55","depends":["base-4.14.1.0","deepseq-1.4.4.0","hashable-1.3.1.0-7b0e9905af2c8c28f1c93a5db526225be808fbbb246856be800cc8d4fbb94dfd"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"utf8-string-1.0.2-7bb4e7e8bc997282589aaaaa9ac99fb554953ac12c720494d91f57d7ff984c86","pkg-name":"utf8-string","pkg-version":"1.0.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"79416292186feeaf1f60e49ac5a1ffae9bf1b120e040a74bf0e81ca7f1d31d3f","pkg-src-sha256":"ee48deada7600370728c4156cb002441de770d0121ae33a68139a9ed9c19b09a","depends":["base-4.14.1.0","bytestring-0.10.10.0"],"exe-depends":[],"component-name":"lib"}]}
\ No newline at end of file
diff --git a/hadrian/bootstrap/plan-8_10_3.json b/hadrian/bootstrap/plan-8_10_3.json
new file mode 100644
index 0000000000000000000000000000000000000000..2cb9d47551b824c22eda59a33b032bc382895e6d
--- /dev/null
+++ b/hadrian/bootstrap/plan-8_10_3.json
@@ -0,0 +1 @@
+{"cabal-version":"3.2.0.0","cabal-lib-version":"3.2.0.0","compiler-id":"ghc-8.10.3","os":"linux","arch":"x86_64","install-plan":[{"type":"pre-existing","id":"Cabal-3.2.1.0","pkg-name":"Cabal","pkg-version":"3.2.1.0","depends":["array-0.5.4.0","base-4.14.1.0","binary-0.8.8.0","bytestring-0.10.12.0","containers-0.6.2.1","deepseq-1.4.4.0","directory-1.3.6.0","filepath-1.4.2.1","mtl-2.2.2","parsec-3.1.14.0","pretty-1.1.3.6","process-1.6.9.0","text-1.2.4.1","time-1.9.3","transformers-0.5.6.2","unix-2.7.2.2"]},{"type":"configured","id":"QuickCheck-2.14.2-f6f12c3f614c16e3c653247bcad2dd0dec63c03a385bbdfe3c7e047c86572d3c","pkg-name":"QuickCheck","pkg-version":"2.14.2","flags":{"old-random":false,"templatehaskell":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"4ce29211223d5e6620ebceba34a3ca9ccf1c10c0cf387d48aea45599222ee5aa","pkg-src-sha256":"d87b6c85696b601175274361fa62217894401e401e150c3c5d4013ac53cd36f3","depends":["base-4.14.1.0","containers-0.6.2.1","deepseq-1.4.4.0","random-1.2.0-8751b6ab3bf8a29738d8affd64a32c530278d4d97e2b8b78157213eb4fd0fad3","splitmix-0.1.0.3-5263e456e3deb12ee532288e6660fa3141fb27d86848a24ef3f795b36bf28604","template-haskell-2.16.0.0","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"array-0.5.4.0","pkg-name":"array","pkg-version":"0.5.4.0","depends":["base-4.14.1.0"]},{"type":"pre-existing","id":"base-4.14.1.0","pkg-name":"base","pkg-version":"4.14.1.0","depends":["ghc-prim-0.6.1","integer-gmp-1.0.3.0","rts"]},{"type":"pre-existing","id":"binary-0.8.8.0","pkg-name":"binary","pkg-version":"0.8.8.0","depends":["array-0.5.4.0","base-4.14.1.0","bytestring-0.10.12.0","containers-0.6.2.1"]},{"type":"pre-existing","id":"bytestring-0.10.12.0","pkg-name":"bytestring","pkg-version":"0.10.12.0","depends":["base-4.14.1.0","deepseq-1.4.4.0","ghc-prim-0.6.1","integer-gmp-1.0.3.0"]},{"type":"configured","id":"clock-0.8.2-561bf41aecf0cfc291ef9b3c9a081b639a48cd32a13227a24db604f2b84abc87","pkg-name":"clock","pkg-version":"0.8.2","flags":{"llvm":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"473ffd59765cc67634bdc55b63c699a85addf3a024089073ec2a862881e83e2a","pkg-src-sha256":"0b5db110c703e68b251d5883253a934b012110b45393fc65df1b095eb9a4e461","depends":["base-4.14.1.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"containers-0.6.2.1","pkg-name":"containers","pkg-version":"0.6.2.1","depends":["array-0.5.4.0","base-4.14.1.0","deepseq-1.4.4.0"]},{"type":"pre-existing","id":"deepseq-1.4.4.0","pkg-name":"deepseq","pkg-version":"1.4.4.0","depends":["array-0.5.4.0","base-4.14.1.0"]},{"type":"pre-existing","id":"directory-1.3.6.0","pkg-name":"directory","pkg-version":"1.3.6.0","depends":["base-4.14.1.0","filepath-1.4.2.1","time-1.9.3","unix-2.7.2.2"]},{"type":"configured","id":"extra-1.7.9-dce3c7c629dc8cd0e0494399218eba89ce41cd419182de9b96b1d47307217ba8","pkg-name":"extra","pkg-version":"1.7.9","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"f1dec740f0f2025790c540732bfd52c556ec55bde4f5dfd7cf18e22bd44ff3d0","pkg-src-sha256":"f66e26a63b216f0ca33665a75c08eada0a96af192ace83a18d87839d79afdf9d","depends":["base-4.14.1.0","clock-0.8.2-561bf41aecf0cfc291ef9b3c9a081b639a48cd32a13227a24db604f2b84abc87","directory-1.3.6.0","filepath-1.4.2.1","process-1.6.9.0","time-1.9.3","unix-2.7.2.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"filepath-1.4.2.1","pkg-name":"filepath","pkg-version":"1.4.2.1","depends":["base-4.14.1.0"]},{"type":"configured","id":"filepattern-0.1.2-53645fcb5130018828ce8e09006a2ec9f131b6bd679725f5d2f656e0e63873b2","pkg-name":"filepattern","pkg-version":"0.1.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"aec816ff25418d1b03ba75189e568f490eb86efc47f586d43363fa338e422e81","pkg-src-sha256":"d92912ee0db0b8c50d6b2ffdc1ae91ee30e2704b47896aa325b42b58a2fcf65b","depends":["base-4.14.1.0","directory-1.3.6.0","extra-1.7.9-dce3c7c629dc8cd0e0494399218eba89ce41cd419182de9b96b1d47307217ba8","filepath-1.4.2.1"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"ghc-boot-th-8.10.3","pkg-name":"ghc-boot-th","pkg-version":"8.10.3","depends":["base-4.14.1.0"]},{"type":"pre-existing","id":"ghc-prim-0.6.1","pkg-name":"ghc-prim","pkg-version":"0.6.1","depends":["rts"]},{"type":"configured","id":"hadrian-0.1.0.0-inplace-hadrian","pkg-name":"hadrian","pkg-version":"0.1.0.0","flags":{"threaded":true},"style":"local","pkg-src":{"type":"local","path":"/home/matt/ghc-hadrian-bootstrap/hadrian/."},"dist-dir":"/home/matt/ghc-hadrian-bootstrap/hadrian/dist-newstyle/build/x86_64-linux/ghc-8.10.3/hadrian-0.1.0.0/x/hadrian","depends":["Cabal-3.2.1.0","QuickCheck-2.14.2-f6f12c3f614c16e3c653247bcad2dd0dec63c03a385bbdfe3c7e047c86572d3c","base-4.14.1.0","bytestring-0.10.12.0","containers-0.6.2.1","directory-1.3.6.0","extra-1.7.9-dce3c7c629dc8cd0e0494399218eba89ce41cd419182de9b96b1d47307217ba8","filepath-1.4.2.1","mtl-2.2.2","parsec-3.1.14.0","shake-0.19.4-154a036f7fabd1afe2433f6b01fc055bc27b8bf12b4b54274f96d9d7f95c45af","transformers-0.5.6.2","unordered-containers-0.2.13.0-c339ce8bcad402d54dda48190f0160368a91b33000b6363217428f19f11b311d"],"exe-depends":[],"component-name":"exe:hadrian","bin-file":"/home/matt/ghc-hadrian-bootstrap/hadrian/dist-newstyle/build/x86_64-linux/ghc-8.10.3/hadrian-0.1.0.0/x/hadrian/build/hadrian/hadrian"},{"type":"configured","id":"hashable-1.3.1.0-9d9392e26ad14e913887d96978f75dc08a0b208fc5749961c981ba1e6234b17a","pkg-name":"hashable","pkg-version":"1.3.1.0","flags":{"integer-gmp":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"d965e098e06cc585b201da6137dcb31c40f35eb7a937b833903969447985c076","pkg-src-sha256":"8061823a4ac521b53912edcba36b956f3159cb885b07ec119af295a6568ca7c4","depends":["base-4.14.1.0","bytestring-0.10.12.0","deepseq-1.4.4.0","ghc-prim-0.6.1","integer-gmp-1.0.3.0","text-1.2.4.1"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"heaps-0.4-a2b06a7095349a383c9c422287d4b54d3b349d39442bf720c0dd32927a806724","pkg-name":"heaps","pkg-version":"0.4","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"66b19fcd813b0e4db3e0bac541bd46606c3b13d3d081d9f9666f4be0f5ff14b8","pkg-src-sha256":"89329df8b95ae99ef272e41e7a2d0fe2f1bb7eacfcc34bc01664414b33067cfd","depends":["base-4.14.1.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"integer-gmp-1.0.3.0","pkg-name":"integer-gmp","pkg-version":"1.0.3.0","depends":["ghc-prim-0.6.1"]},{"type":"configured","id":"js-dgtable-0.5.2-77d91e31d290a2be1a0b48b51eda2c33a04d51bdeed64d2341bbee2db7f93554","pkg-name":"js-dgtable","pkg-version":"0.5.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"f75cb4fa53c88c65794becdd48eb0d3b2b8abd89a3d5c19e87af91f5225c15e4","pkg-src-sha256":"e28dd65bee8083b17210134e22e01c6349dc33c3b7bd17705973cd014e9f20ac","depends":["base-4.14.1.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-flot-0.8.3-e6f42e02763ad88995e377c2665c6d778eb08c83c2c1fdd7a8a1a343bebd41f1","pkg-name":"js-flot","pkg-version":"0.8.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"4c1c447a9a2fba0adba6d30678302a30c32b9dfde9e7aa9e9156483e1545096d","pkg-src-sha256":"1ba2f2a6b8d85da76c41f526c98903cbb107f8642e506c072c1e7e3c20fe5e7a","depends":["base-4.14.1.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-jquery-3.3.1-feca31846e8a0af2c70634e7e82c203a09152383c65737988599200ffd674215","pkg-name":"js-jquery","pkg-version":"3.3.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"59ab6c79159549ef94b584abce8e6d3b336014c2cce1337b59a8f637e2856df5","pkg-src-sha256":"e0e0681f0da1130ede4e03a051630ea439c458cb97216cdb01771ebdbe44069b","depends":["base-4.14.1.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"mtl-2.2.2","pkg-name":"mtl","pkg-version":"2.2.2","depends":["base-4.14.1.0","transformers-0.5.6.2"]},{"type":"pre-existing","id":"parsec-3.1.14.0","pkg-name":"parsec","pkg-version":"3.1.14.0","depends":["base-4.14.1.0","bytestring-0.10.12.0","mtl-2.2.2","text-1.2.4.1"]},{"type":"pre-existing","id":"pretty-1.1.3.6","pkg-name":"pretty","pkg-version":"1.1.3.6","depends":["base-4.14.1.0","deepseq-1.4.4.0","ghc-prim-0.6.1"]},{"type":"configured","id":"primitive-0.7.1.0-b64578c3e3db8528a2409db30cbec8c49a4e78bf70f136b4f273606555288293","pkg-name":"primitive","pkg-version":"0.7.1.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"f6357d5720c1c665096c3e011467daf443198b786a708d2ff926958a24d508d4","pkg-src-sha256":"6bebecfdf2a57787d9fd5231bfd612b65a92edd7b33a973b2a0f11312b89a3f0","depends":["base-4.14.1.0","deepseq-1.4.4.0","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"process-1.6.9.0","pkg-name":"process","pkg-version":"1.6.9.0","depends":["base-4.14.1.0","deepseq-1.4.4.0","directory-1.3.6.0","filepath-1.4.2.1","unix-2.7.2.2"]},{"type":"configured","id":"random-1.2.0-8751b6ab3bf8a29738d8affd64a32c530278d4d97e2b8b78157213eb4fd0fad3","pkg-name":"random","pkg-version":"1.2.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"30d72df4cc1d2fe2d445c88f0ee9d21965af7ce86660c43a6c32a6a1d90d51c9","pkg-src-sha256":"e4519cf7c058bfd5bdbe4acc782284acc9e25e74487208619ca83cbcd63fb9de","depends":["base-4.14.1.0","bytestring-0.10.12.0","deepseq-1.4.4.0","mtl-2.2.2","splitmix-0.1.0.3-5263e456e3deb12ee532288e6660fa3141fb27d86848a24ef3f795b36bf28604"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"rts","pkg-name":"rts","pkg-version":"1.0","depends":[]},{"type":"configured","id":"shake-0.19.4-154a036f7fabd1afe2433f6b01fc055bc27b8bf12b4b54274f96d9d7f95c45af","pkg-name":"shake","pkg-version":"0.19.4","flags":{"cloud":false,"embed-files":false,"portable":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"be81f7c69137e639812380047dfbbdd253ca536cc919504c3bc0f14517e80eb9","pkg-src-sha256":"5bae8873f628113604159f650802edb249dfbe5802c4612751f680ac987d73ee","depends":["base-4.14.1.0","binary-0.8.8.0","bytestring-0.10.12.0","deepseq-1.4.4.0","directory-1.3.6.0","extra-1.7.9-dce3c7c629dc8cd0e0494399218eba89ce41cd419182de9b96b1d47307217ba8","filepath-1.4.2.1","filepattern-0.1.2-53645fcb5130018828ce8e09006a2ec9f131b6bd679725f5d2f656e0e63873b2","hashable-1.3.1.0-9d9392e26ad14e913887d96978f75dc08a0b208fc5749961c981ba1e6234b17a","heaps-0.4-a2b06a7095349a383c9c422287d4b54d3b349d39442bf720c0dd32927a806724","js-dgtable-0.5.2-77d91e31d290a2be1a0b48b51eda2c33a04d51bdeed64d2341bbee2db7f93554","js-flot-0.8.3-e6f42e02763ad88995e377c2665c6d778eb08c83c2c1fdd7a8a1a343bebd41f1","js-jquery-3.3.1-feca31846e8a0af2c70634e7e82c203a09152383c65737988599200ffd674215","primitive-0.7.1.0-b64578c3e3db8528a2409db30cbec8c49a4e78bf70f136b4f273606555288293","process-1.6.9.0","random-1.2.0-8751b6ab3bf8a29738d8affd64a32c530278d4d97e2b8b78157213eb4fd0fad3","time-1.9.3","transformers-0.5.6.2","unix-2.7.2.2","unordered-containers-0.2.13.0-c339ce8bcad402d54dda48190f0160368a91b33000b6363217428f19f11b311d","utf8-string-1.0.2-726aff700d8b8562f31c2e2566ac8ba43b365bb48cb8c60dfa098430e9a88f18"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"shake-0.19.4-e592095104d8d10af7c8c638222a4f572e4aa0d8571c63bad3429dfd672ef529","pkg-name":"shake","pkg-version":"0.19.4","flags":{"cloud":false,"embed-files":false,"portable":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"be81f7c69137e639812380047dfbbdd253ca536cc919504c3bc0f14517e80eb9","pkg-src-sha256":"5bae8873f628113604159f650802edb249dfbe5802c4612751f680ac987d73ee","depends":["base-4.14.1.0","binary-0.8.8.0","bytestring-0.10.12.0","deepseq-1.4.4.0","directory-1.3.6.0","extra-1.7.9-dce3c7c629dc8cd0e0494399218eba89ce41cd419182de9b96b1d47307217ba8","filepath-1.4.2.1","filepattern-0.1.2-53645fcb5130018828ce8e09006a2ec9f131b6bd679725f5d2f656e0e63873b2","hashable-1.3.1.0-9d9392e26ad14e913887d96978f75dc08a0b208fc5749961c981ba1e6234b17a","heaps-0.4-a2b06a7095349a383c9c422287d4b54d3b349d39442bf720c0dd32927a806724","js-dgtable-0.5.2-77d91e31d290a2be1a0b48b51eda2c33a04d51bdeed64d2341bbee2db7f93554","js-flot-0.8.3-e6f42e02763ad88995e377c2665c6d778eb08c83c2c1fdd7a8a1a343bebd41f1","js-jquery-3.3.1-feca31846e8a0af2c70634e7e82c203a09152383c65737988599200ffd674215","primitive-0.7.1.0-b64578c3e3db8528a2409db30cbec8c49a4e78bf70f136b4f273606555288293","process-1.6.9.0","random-1.2.0-8751b6ab3bf8a29738d8affd64a32c530278d4d97e2b8b78157213eb4fd0fad3","time-1.9.3","transformers-0.5.6.2","unix-2.7.2.2","unordered-containers-0.2.13.0-c339ce8bcad402d54dda48190f0160368a91b33000b6363217428f19f11b311d","utf8-string-1.0.2-726aff700d8b8562f31c2e2566ac8ba43b365bb48cb8c60dfa098430e9a88f18"],"exe-depends":[],"component-name":"exe:shake","bin-file":"/home/matt/.cabal/store/ghc-8.10.3/shake-0.19.4-e592095104d8d10af7c8c638222a4f572e4aa0d8571c63bad3429dfd672ef529/bin/shake"},{"type":"configured","id":"splitmix-0.1.0.3-5263e456e3deb12ee532288e6660fa3141fb27d86848a24ef3f795b36bf28604","pkg-name":"splitmix","pkg-version":"0.1.0.3","flags":{"optimised-mixer":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"fc3aae74c467f4b608050bef53aec17904a618731df9407e655d8f3bf8c32d5c","pkg-src-sha256":"46009f4b000c9e6613377767b8718bf38476469f2a8e2162d98cc246882d5a35","depends":["base-4.14.1.0","deepseq-1.4.4.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"template-haskell-2.16.0.0","pkg-name":"template-haskell","pkg-version":"2.16.0.0","depends":["base-4.14.1.0","ghc-boot-th-8.10.3","ghc-prim-0.6.1","pretty-1.1.3.6"]},{"type":"pre-existing","id":"text-1.2.4.1","pkg-name":"text","pkg-version":"1.2.4.1","depends":["array-0.5.4.0","base-4.14.1.0","binary-0.8.8.0","bytestring-0.10.12.0","deepseq-1.4.4.0","ghc-prim-0.6.1","integer-gmp-1.0.3.0","template-haskell-2.16.0.0"]},{"type":"pre-existing","id":"time-1.9.3","pkg-name":"time","pkg-version":"1.9.3","depends":["base-4.14.1.0","deepseq-1.4.4.0"]},{"type":"pre-existing","id":"transformers-0.5.6.2","pkg-name":"transformers","pkg-version":"0.5.6.2","depends":["base-4.14.1.0"]},{"type":"pre-existing","id":"unix-2.7.2.2","pkg-name":"unix","pkg-version":"2.7.2.2","depends":["base-4.14.1.0","bytestring-0.10.12.0","time-1.9.3"]},{"type":"configured","id":"unordered-containers-0.2.13.0-c339ce8bcad402d54dda48190f0160368a91b33000b6363217428f19f11b311d","pkg-name":"unordered-containers","pkg-version":"0.2.13.0","flags":{"debug":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"6310c636f92ed4908fdd0de582b6be31c2851c7b5f2ec14e9f416eb94df7a078","pkg-src-sha256":"86b01369ab8eb311383a052d389337e2cd71a63088323f02932754df4aa37b55","depends":["base-4.14.1.0","deepseq-1.4.4.0","hashable-1.3.1.0-9d9392e26ad14e913887d96978f75dc08a0b208fc5749961c981ba1e6234b17a"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"utf8-string-1.0.2-726aff700d8b8562f31c2e2566ac8ba43b365bb48cb8c60dfa098430e9a88f18","pkg-name":"utf8-string","pkg-version":"1.0.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"79416292186feeaf1f60e49ac5a1ffae9bf1b120e040a74bf0e81ca7f1d31d3f","pkg-src-sha256":"ee48deada7600370728c4156cb002441de770d0121ae33a68139a9ed9c19b09a","depends":["base-4.14.1.0","bytestring-0.10.12.0"],"exe-depends":[],"component-name":"lib"}]}
\ No newline at end of file
diff --git a/hadrian/bootstrap/plan-8_10_4.json b/hadrian/bootstrap/plan-8_10_4.json
new file mode 100644
index 0000000000000000000000000000000000000000..7babd506d7c6fe617e3416d0bb38e96257874b85
--- /dev/null
+++ b/hadrian/bootstrap/plan-8_10_4.json
@@ -0,0 +1 @@
+{"cabal-version":"3.2.0.0","cabal-lib-version":"3.2.0.0","compiler-id":"ghc-8.10.4","os":"linux","arch":"x86_64","install-plan":[{"type":"pre-existing","id":"Cabal-3.2.1.0","pkg-name":"Cabal","pkg-version":"3.2.1.0","depends":["array-0.5.4.0","base-4.14.1.0","binary-0.8.8.0","bytestring-0.10.12.0","containers-0.6.2.1","deepseq-1.4.4.0","directory-1.3.6.0","filepath-1.4.2.1","mtl-2.2.2","parsec-3.1.14.0","pretty-1.1.3.6","process-1.6.9.0","text-1.2.4.1","time-1.9.3","transformers-0.5.6.2","unix-2.7.2.2"]},{"type":"configured","id":"QuickCheck-2.14.2-1ff9bae85831dc0b6952a57b65e5655191418d456f323fac5ce787579a76b0b0","pkg-name":"QuickCheck","pkg-version":"2.14.2","flags":{"old-random":false,"templatehaskell":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"4ce29211223d5e6620ebceba34a3ca9ccf1c10c0cf387d48aea45599222ee5aa","pkg-src-sha256":"d87b6c85696b601175274361fa62217894401e401e150c3c5d4013ac53cd36f3","depends":["base-4.14.1.0","containers-0.6.2.1","deepseq-1.4.4.0","random-1.2.0-821b8d1dbfd6e71abc1db66ac7846a36093b1f4ea533fe3af624349f163573ad","splitmix-0.1.0.3-50ec55b0f09ac3f0d066c466987b99709f10e5609d166e51ea3e13c78b1d5ed2","template-haskell-2.16.0.0","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"array-0.5.4.0","pkg-name":"array","pkg-version":"0.5.4.0","depends":["base-4.14.1.0"]},{"type":"pre-existing","id":"base-4.14.1.0","pkg-name":"base","pkg-version":"4.14.1.0","depends":["ghc-prim-0.6.1","integer-gmp-1.0.3.0","rts"]},{"type":"pre-existing","id":"binary-0.8.8.0","pkg-name":"binary","pkg-version":"0.8.8.0","depends":["array-0.5.4.0","base-4.14.1.0","bytestring-0.10.12.0","containers-0.6.2.1"]},{"type":"pre-existing","id":"bytestring-0.10.12.0","pkg-name":"bytestring","pkg-version":"0.10.12.0","depends":["base-4.14.1.0","deepseq-1.4.4.0","ghc-prim-0.6.1","integer-gmp-1.0.3.0"]},{"type":"configured","id":"clock-0.8.2-6b0474766238ffdedd4e520e87f3571bf523807bb3d02cc63bbe924ea35d10f6","pkg-name":"clock","pkg-version":"0.8.2","flags":{"llvm":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"473ffd59765cc67634bdc55b63c699a85addf3a024089073ec2a862881e83e2a","pkg-src-sha256":"0b5db110c703e68b251d5883253a934b012110b45393fc65df1b095eb9a4e461","depends":["base-4.14.1.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"containers-0.6.2.1","pkg-name":"containers","pkg-version":"0.6.2.1","depends":["array-0.5.4.0","base-4.14.1.0","deepseq-1.4.4.0"]},{"type":"pre-existing","id":"deepseq-1.4.4.0","pkg-name":"deepseq","pkg-version":"1.4.4.0","depends":["array-0.5.4.0","base-4.14.1.0"]},{"type":"pre-existing","id":"directory-1.3.6.0","pkg-name":"directory","pkg-version":"1.3.6.0","depends":["base-4.14.1.0","filepath-1.4.2.1","time-1.9.3","unix-2.7.2.2"]},{"type":"configured","id":"extra-1.7.9-47a411b8b20392deafff7b1d1e093c2c91827d2b1bc36a44706a945815afa270","pkg-name":"extra","pkg-version":"1.7.9","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"f1dec740f0f2025790c540732bfd52c556ec55bde4f5dfd7cf18e22bd44ff3d0","pkg-src-sha256":"f66e26a63b216f0ca33665a75c08eada0a96af192ace83a18d87839d79afdf9d","depends":["base-4.14.1.0","clock-0.8.2-6b0474766238ffdedd4e520e87f3571bf523807bb3d02cc63bbe924ea35d10f6","directory-1.3.6.0","filepath-1.4.2.1","process-1.6.9.0","time-1.9.3","unix-2.7.2.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"filepath-1.4.2.1","pkg-name":"filepath","pkg-version":"1.4.2.1","depends":["base-4.14.1.0"]},{"type":"configured","id":"filepattern-0.1.2-69fbc6cf5d277e8ff5f9dd390a3c76533614ff0e9a59297a9261364699bbb5f1","pkg-name":"filepattern","pkg-version":"0.1.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"aec816ff25418d1b03ba75189e568f490eb86efc47f586d43363fa338e422e81","pkg-src-sha256":"d92912ee0db0b8c50d6b2ffdc1ae91ee30e2704b47896aa325b42b58a2fcf65b","depends":["base-4.14.1.0","directory-1.3.6.0","extra-1.7.9-47a411b8b20392deafff7b1d1e093c2c91827d2b1bc36a44706a945815afa270","filepath-1.4.2.1"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"ghc-boot-th-8.10.4","pkg-name":"ghc-boot-th","pkg-version":"8.10.4","depends":["base-4.14.1.0"]},{"type":"pre-existing","id":"ghc-prim-0.6.1","pkg-name":"ghc-prim","pkg-version":"0.6.1","depends":["rts"]},{"type":"configured","id":"hadrian-0.1.0.0-inplace-hadrian","pkg-name":"hadrian","pkg-version":"0.1.0.0","flags":{"threaded":true},"style":"local","pkg-src":{"type":"local","path":"/home/matt/ghc-hadrian-bootstrap/hadrian/."},"dist-dir":"/home/matt/ghc-hadrian-bootstrap/hadrian/dist-newstyle/build/x86_64-linux/ghc-8.10.4/hadrian-0.1.0.0/x/hadrian","depends":["Cabal-3.2.1.0","QuickCheck-2.14.2-1ff9bae85831dc0b6952a57b65e5655191418d456f323fac5ce787579a76b0b0","base-4.14.1.0","bytestring-0.10.12.0","containers-0.6.2.1","directory-1.3.6.0","extra-1.7.9-47a411b8b20392deafff7b1d1e093c2c91827d2b1bc36a44706a945815afa270","filepath-1.4.2.1","mtl-2.2.2","parsec-3.1.14.0","shake-0.19.4-20c6545ab58e09240e1fa246d8fa870a38f1b3f44de1e37fd2fd5ff0f6f94849","transformers-0.5.6.2","unordered-containers-0.2.13.0-25a25c80a274cafa04144e390819c8940e24acb3e26f2c4ae170825b997e9e77"],"exe-depends":[],"component-name":"exe:hadrian","bin-file":"/home/matt/ghc-hadrian-bootstrap/hadrian/dist-newstyle/build/x86_64-linux/ghc-8.10.4/hadrian-0.1.0.0/x/hadrian/build/hadrian/hadrian"},{"type":"configured","id":"hashable-1.3.1.0-d6843a1c354b03ec345a56de12b120cc2558ac419378e59c75471c08f0c9e3bb","pkg-name":"hashable","pkg-version":"1.3.1.0","flags":{"integer-gmp":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"d965e098e06cc585b201da6137dcb31c40f35eb7a937b833903969447985c076","pkg-src-sha256":"8061823a4ac521b53912edcba36b956f3159cb885b07ec119af295a6568ca7c4","depends":["base-4.14.1.0","bytestring-0.10.12.0","deepseq-1.4.4.0","ghc-prim-0.6.1","integer-gmp-1.0.3.0","text-1.2.4.1"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"heaps-0.4-90d3dc4ea8620bd8dbd6e0136cc3ba2daca5664d7545551c36ebb2df08315abb","pkg-name":"heaps","pkg-version":"0.4","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"66b19fcd813b0e4db3e0bac541bd46606c3b13d3d081d9f9666f4be0f5ff14b8","pkg-src-sha256":"89329df8b95ae99ef272e41e7a2d0fe2f1bb7eacfcc34bc01664414b33067cfd","depends":["base-4.14.1.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"integer-gmp-1.0.3.0","pkg-name":"integer-gmp","pkg-version":"1.0.3.0","depends":["ghc-prim-0.6.1"]},{"type":"configured","id":"js-dgtable-0.5.2-31820cf9d5c13023e6017c25e0c81ec87aab55cf480ef8f5062f450bfa2fd177","pkg-name":"js-dgtable","pkg-version":"0.5.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"f75cb4fa53c88c65794becdd48eb0d3b2b8abd89a3d5c19e87af91f5225c15e4","pkg-src-sha256":"e28dd65bee8083b17210134e22e01c6349dc33c3b7bd17705973cd014e9f20ac","depends":["base-4.14.1.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-flot-0.8.3-0977c020259684c26ba34ee6fd3a18fcf317a60de826c6e599f86cd58a8d7a24","pkg-name":"js-flot","pkg-version":"0.8.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"4c1c447a9a2fba0adba6d30678302a30c32b9dfde9e7aa9e9156483e1545096d","pkg-src-sha256":"1ba2f2a6b8d85da76c41f526c98903cbb107f8642e506c072c1e7e3c20fe5e7a","depends":["base-4.14.1.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-jquery-3.3.1-651422bf85670942e80cb1dd65e886868e288fcd18a389b9f0ae2d5b97672daf","pkg-name":"js-jquery","pkg-version":"3.3.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"59ab6c79159549ef94b584abce8e6d3b336014c2cce1337b59a8f637e2856df5","pkg-src-sha256":"e0e0681f0da1130ede4e03a051630ea439c458cb97216cdb01771ebdbe44069b","depends":["base-4.14.1.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"mtl-2.2.2","pkg-name":"mtl","pkg-version":"2.2.2","depends":["base-4.14.1.0","transformers-0.5.6.2"]},{"type":"pre-existing","id":"parsec-3.1.14.0","pkg-name":"parsec","pkg-version":"3.1.14.0","depends":["base-4.14.1.0","bytestring-0.10.12.0","mtl-2.2.2","text-1.2.4.1"]},{"type":"pre-existing","id":"pretty-1.1.3.6","pkg-name":"pretty","pkg-version":"1.1.3.6","depends":["base-4.14.1.0","deepseq-1.4.4.0","ghc-prim-0.6.1"]},{"type":"configured","id":"primitive-0.7.1.0-57016f0038ed9bc68ae4ba8a0bf5334da1a65f93f4331980931e581cdbba846c","pkg-name":"primitive","pkg-version":"0.7.1.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"f6357d5720c1c665096c3e011467daf443198b786a708d2ff926958a24d508d4","pkg-src-sha256":"6bebecfdf2a57787d9fd5231bfd612b65a92edd7b33a973b2a0f11312b89a3f0","depends":["base-4.14.1.0","deepseq-1.4.4.0","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"process-1.6.9.0","pkg-name":"process","pkg-version":"1.6.9.0","depends":["base-4.14.1.0","deepseq-1.4.4.0","directory-1.3.6.0","filepath-1.4.2.1","unix-2.7.2.2"]},{"type":"configured","id":"random-1.2.0-821b8d1dbfd6e71abc1db66ac7846a36093b1f4ea533fe3af624349f163573ad","pkg-name":"random","pkg-version":"1.2.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"30d72df4cc1d2fe2d445c88f0ee9d21965af7ce86660c43a6c32a6a1d90d51c9","pkg-src-sha256":"e4519cf7c058bfd5bdbe4acc782284acc9e25e74487208619ca83cbcd63fb9de","depends":["base-4.14.1.0","bytestring-0.10.12.0","deepseq-1.4.4.0","mtl-2.2.2","splitmix-0.1.0.3-50ec55b0f09ac3f0d066c466987b99709f10e5609d166e51ea3e13c78b1d5ed2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"rts","pkg-name":"rts","pkg-version":"1.0","depends":[]},{"type":"configured","id":"shake-0.19.4-20c6545ab58e09240e1fa246d8fa870a38f1b3f44de1e37fd2fd5ff0f6f94849","pkg-name":"shake","pkg-version":"0.19.4","flags":{"cloud":false,"embed-files":false,"portable":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"be81f7c69137e639812380047dfbbdd253ca536cc919504c3bc0f14517e80eb9","pkg-src-sha256":"5bae8873f628113604159f650802edb249dfbe5802c4612751f680ac987d73ee","depends":["base-4.14.1.0","binary-0.8.8.0","bytestring-0.10.12.0","deepseq-1.4.4.0","directory-1.3.6.0","extra-1.7.9-47a411b8b20392deafff7b1d1e093c2c91827d2b1bc36a44706a945815afa270","filepath-1.4.2.1","filepattern-0.1.2-69fbc6cf5d277e8ff5f9dd390a3c76533614ff0e9a59297a9261364699bbb5f1","hashable-1.3.1.0-d6843a1c354b03ec345a56de12b120cc2558ac419378e59c75471c08f0c9e3bb","heaps-0.4-90d3dc4ea8620bd8dbd6e0136cc3ba2daca5664d7545551c36ebb2df08315abb","js-dgtable-0.5.2-31820cf9d5c13023e6017c25e0c81ec87aab55cf480ef8f5062f450bfa2fd177","js-flot-0.8.3-0977c020259684c26ba34ee6fd3a18fcf317a60de826c6e599f86cd58a8d7a24","js-jquery-3.3.1-651422bf85670942e80cb1dd65e886868e288fcd18a389b9f0ae2d5b97672daf","primitive-0.7.1.0-57016f0038ed9bc68ae4ba8a0bf5334da1a65f93f4331980931e581cdbba846c","process-1.6.9.0","random-1.2.0-821b8d1dbfd6e71abc1db66ac7846a36093b1f4ea533fe3af624349f163573ad","time-1.9.3","transformers-0.5.6.2","unix-2.7.2.2","unordered-containers-0.2.13.0-25a25c80a274cafa04144e390819c8940e24acb3e26f2c4ae170825b997e9e77","utf8-string-1.0.2-57fac2057b6823357928c7f7eaed369df519e527346522b28830a792a7e4423e"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"shake-0.19.4-ae5ec51b1b7f2b7cb1e6cd8d971dc36c890ce50e50ac0a990b9e62f777583125","pkg-name":"shake","pkg-version":"0.19.4","flags":{"cloud":false,"embed-files":false,"portable":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"be81f7c69137e639812380047dfbbdd253ca536cc919504c3bc0f14517e80eb9","pkg-src-sha256":"5bae8873f628113604159f650802edb249dfbe5802c4612751f680ac987d73ee","depends":["base-4.14.1.0","binary-0.8.8.0","bytestring-0.10.12.0","deepseq-1.4.4.0","directory-1.3.6.0","extra-1.7.9-47a411b8b20392deafff7b1d1e093c2c91827d2b1bc36a44706a945815afa270","filepath-1.4.2.1","filepattern-0.1.2-69fbc6cf5d277e8ff5f9dd390a3c76533614ff0e9a59297a9261364699bbb5f1","hashable-1.3.1.0-d6843a1c354b03ec345a56de12b120cc2558ac419378e59c75471c08f0c9e3bb","heaps-0.4-90d3dc4ea8620bd8dbd6e0136cc3ba2daca5664d7545551c36ebb2df08315abb","js-dgtable-0.5.2-31820cf9d5c13023e6017c25e0c81ec87aab55cf480ef8f5062f450bfa2fd177","js-flot-0.8.3-0977c020259684c26ba34ee6fd3a18fcf317a60de826c6e599f86cd58a8d7a24","js-jquery-3.3.1-651422bf85670942e80cb1dd65e886868e288fcd18a389b9f0ae2d5b97672daf","primitive-0.7.1.0-57016f0038ed9bc68ae4ba8a0bf5334da1a65f93f4331980931e581cdbba846c","process-1.6.9.0","random-1.2.0-821b8d1dbfd6e71abc1db66ac7846a36093b1f4ea533fe3af624349f163573ad","time-1.9.3","transformers-0.5.6.2","unix-2.7.2.2","unordered-containers-0.2.13.0-25a25c80a274cafa04144e390819c8940e24acb3e26f2c4ae170825b997e9e77","utf8-string-1.0.2-57fac2057b6823357928c7f7eaed369df519e527346522b28830a792a7e4423e"],"exe-depends":[],"component-name":"exe:shake","bin-file":"/home/matt/.cabal/store/ghc-8.10.4/shake-0.19.4-ae5ec51b1b7f2b7cb1e6cd8d971dc36c890ce50e50ac0a990b9e62f777583125/bin/shake"},{"type":"configured","id":"splitmix-0.1.0.3-50ec55b0f09ac3f0d066c466987b99709f10e5609d166e51ea3e13c78b1d5ed2","pkg-name":"splitmix","pkg-version":"0.1.0.3","flags":{"optimised-mixer":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"fc3aae74c467f4b608050bef53aec17904a618731df9407e655d8f3bf8c32d5c","pkg-src-sha256":"46009f4b000c9e6613377767b8718bf38476469f2a8e2162d98cc246882d5a35","depends":["base-4.14.1.0","deepseq-1.4.4.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"template-haskell-2.16.0.0","pkg-name":"template-haskell","pkg-version":"2.16.0.0","depends":["base-4.14.1.0","ghc-boot-th-8.10.4","ghc-prim-0.6.1","pretty-1.1.3.6"]},{"type":"pre-existing","id":"text-1.2.4.1","pkg-name":"text","pkg-version":"1.2.4.1","depends":["array-0.5.4.0","base-4.14.1.0","binary-0.8.8.0","bytestring-0.10.12.0","deepseq-1.4.4.0","ghc-prim-0.6.1","integer-gmp-1.0.3.0","template-haskell-2.16.0.0"]},{"type":"pre-existing","id":"time-1.9.3","pkg-name":"time","pkg-version":"1.9.3","depends":["base-4.14.1.0","deepseq-1.4.4.0"]},{"type":"pre-existing","id":"transformers-0.5.6.2","pkg-name":"transformers","pkg-version":"0.5.6.2","depends":["base-4.14.1.0"]},{"type":"pre-existing","id":"unix-2.7.2.2","pkg-name":"unix","pkg-version":"2.7.2.2","depends":["base-4.14.1.0","bytestring-0.10.12.0","time-1.9.3"]},{"type":"configured","id":"unordered-containers-0.2.13.0-25a25c80a274cafa04144e390819c8940e24acb3e26f2c4ae170825b997e9e77","pkg-name":"unordered-containers","pkg-version":"0.2.13.0","flags":{"debug":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"6310c636f92ed4908fdd0de582b6be31c2851c7b5f2ec14e9f416eb94df7a078","pkg-src-sha256":"86b01369ab8eb311383a052d389337e2cd71a63088323f02932754df4aa37b55","depends":["base-4.14.1.0","deepseq-1.4.4.0","hashable-1.3.1.0-d6843a1c354b03ec345a56de12b120cc2558ac419378e59c75471c08f0c9e3bb"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"utf8-string-1.0.2-57fac2057b6823357928c7f7eaed369df519e527346522b28830a792a7e4423e","pkg-name":"utf8-string","pkg-version":"1.0.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"79416292186feeaf1f60e49ac5a1ffae9bf1b120e040a74bf0e81ca7f1d31d3f","pkg-src-sha256":"ee48deada7600370728c4156cb002441de770d0121ae33a68139a9ed9c19b09a","depends":["base-4.14.1.0","bytestring-0.10.12.0"],"exe-depends":[],"component-name":"lib"}]}
\ No newline at end of file
diff --git a/hadrian/bootstrap/plan-8_10_5.json b/hadrian/bootstrap/plan-8_10_5.json
new file mode 100644
index 0000000000000000000000000000000000000000..b8002cbb76a412c85b41ba8381a23ae3f236ce56
--- /dev/null
+++ b/hadrian/bootstrap/plan-8_10_5.json
@@ -0,0 +1 @@
+{"cabal-version":"3.2.0.0","cabal-lib-version":"3.2.0.0","compiler-id":"ghc-8.10.5","os":"linux","arch":"x86_64","install-plan":[{"type":"pre-existing","id":"Cabal-3.2.1.0","pkg-name":"Cabal","pkg-version":"3.2.1.0","depends":["array-0.5.4.0","base-4.14.2.0","binary-0.8.8.0","bytestring-0.10.12.0","containers-0.6.4.1","deepseq-1.4.4.0","directory-1.3.6.0","filepath-1.4.2.1","mtl-2.2.2","parsec-3.1.14.0","pretty-1.1.3.6","process-1.6.9.0","text-1.2.4.1","time-1.9.3","transformers-0.5.6.2","unix-2.7.2.2"]},{"type":"configured","id":"QuickCheck-2.14.2-3c87942fc5929dee6aa51ecc936079cd95dd7d471fde77d64ac4579578541913","pkg-name":"QuickCheck","pkg-version":"2.14.2","flags":{"old-random":false,"templatehaskell":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"4ce29211223d5e6620ebceba34a3ca9ccf1c10c0cf387d48aea45599222ee5aa","pkg-src-sha256":"d87b6c85696b601175274361fa62217894401e401e150c3c5d4013ac53cd36f3","depends":["base-4.14.2.0","containers-0.6.4.1","deepseq-1.4.4.0","random-1.2.0-5168e89137eb4ea0630d1d72c47f7987740be427db4e07b39ed7242279cf06fc","splitmix-0.1.0.3-c3b36566ac6fe5013261bb6b4e50474d306e4a9838c78dd76bfe3359275b09f1","template-haskell-2.16.0.0","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"array-0.5.4.0","pkg-name":"array","pkg-version":"0.5.4.0","depends":["base-4.14.2.0"]},{"type":"pre-existing","id":"base-4.14.2.0","pkg-name":"base","pkg-version":"4.14.2.0","depends":["ghc-prim-0.6.1","integer-gmp-1.0.3.0","rts"]},{"type":"pre-existing","id":"binary-0.8.8.0","pkg-name":"binary","pkg-version":"0.8.8.0","depends":["array-0.5.4.0","base-4.14.2.0","bytestring-0.10.12.0","containers-0.6.4.1"]},{"type":"pre-existing","id":"bytestring-0.10.12.0","pkg-name":"bytestring","pkg-version":"0.10.12.0","depends":["base-4.14.2.0","deepseq-1.4.4.0","ghc-prim-0.6.1","integer-gmp-1.0.3.0"]},{"type":"configured","id":"clock-0.8.2-55a22a153f26cf53b6b654282e8c15f783ef2b53faacc8360d4c491d4e07409a","pkg-name":"clock","pkg-version":"0.8.2","flags":{"llvm":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"473ffd59765cc67634bdc55b63c699a85addf3a024089073ec2a862881e83e2a","pkg-src-sha256":"0b5db110c703e68b251d5883253a934b012110b45393fc65df1b095eb9a4e461","depends":["base-4.14.2.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"containers-0.6.4.1","pkg-name":"containers","pkg-version":"0.6.4.1","depends":["array-0.5.4.0","base-4.14.2.0","deepseq-1.4.4.0"]},{"type":"pre-existing","id":"deepseq-1.4.4.0","pkg-name":"deepseq","pkg-version":"1.4.4.0","depends":["array-0.5.4.0","base-4.14.2.0"]},{"type":"pre-existing","id":"directory-1.3.6.0","pkg-name":"directory","pkg-version":"1.3.6.0","depends":["base-4.14.2.0","filepath-1.4.2.1","time-1.9.3","unix-2.7.2.2"]},{"type":"configured","id":"extra-1.7.9-f7e2bbebfc54b6659688f9db579c8c73dd1ba8ab1142cd720c09e215f2be79f5","pkg-name":"extra","pkg-version":"1.7.9","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"f1dec740f0f2025790c540732bfd52c556ec55bde4f5dfd7cf18e22bd44ff3d0","pkg-src-sha256":"f66e26a63b216f0ca33665a75c08eada0a96af192ace83a18d87839d79afdf9d","depends":["base-4.14.2.0","clock-0.8.2-55a22a153f26cf53b6b654282e8c15f783ef2b53faacc8360d4c491d4e07409a","directory-1.3.6.0","filepath-1.4.2.1","process-1.6.9.0","time-1.9.3","unix-2.7.2.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"filepath-1.4.2.1","pkg-name":"filepath","pkg-version":"1.4.2.1","depends":["base-4.14.2.0"]},{"type":"configured","id":"filepattern-0.1.2-b4cad4464f1df6bd2c46516feb4704875ca9ff08d048b2c98426a9455152d297","pkg-name":"filepattern","pkg-version":"0.1.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"aec816ff25418d1b03ba75189e568f490eb86efc47f586d43363fa338e422e81","pkg-src-sha256":"d92912ee0db0b8c50d6b2ffdc1ae91ee30e2704b47896aa325b42b58a2fcf65b","depends":["base-4.14.2.0","directory-1.3.6.0","extra-1.7.9-f7e2bbebfc54b6659688f9db579c8c73dd1ba8ab1142cd720c09e215f2be79f5","filepath-1.4.2.1"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"ghc-boot-th-8.10.5","pkg-name":"ghc-boot-th","pkg-version":"8.10.5","depends":["base-4.14.2.0"]},{"type":"pre-existing","id":"ghc-prim-0.6.1","pkg-name":"ghc-prim","pkg-version":"0.6.1","depends":["rts"]},{"type":"configured","id":"hadrian-0.1.0.0-inplace-hadrian","pkg-name":"hadrian","pkg-version":"0.1.0.0","flags":{"threaded":true},"style":"local","pkg-src":{"type":"local","path":"/home/matt/ghc-hadrian-bootstrap/hadrian/."},"dist-dir":"/home/matt/ghc-hadrian-bootstrap/hadrian/dist-newstyle/build/x86_64-linux/ghc-8.10.5/hadrian-0.1.0.0/x/hadrian","depends":["Cabal-3.2.1.0","QuickCheck-2.14.2-3c87942fc5929dee6aa51ecc936079cd95dd7d471fde77d64ac4579578541913","base-4.14.2.0","bytestring-0.10.12.0","containers-0.6.4.1","directory-1.3.6.0","extra-1.7.9-f7e2bbebfc54b6659688f9db579c8c73dd1ba8ab1142cd720c09e215f2be79f5","filepath-1.4.2.1","mtl-2.2.2","parsec-3.1.14.0","shake-0.19.4-e21a01342ca240404369c44846f296e31657c42fed14a4428dc585df7f46d91c","transformers-0.5.6.2","unordered-containers-0.2.13.0-54ccd9301c36e57d00ecae5b9a167fed0f1b0ee3950e328323bc604f35f98357"],"exe-depends":[],"component-name":"exe:hadrian","bin-file":"/home/matt/ghc-hadrian-bootstrap/hadrian/dist-newstyle/build/x86_64-linux/ghc-8.10.5/hadrian-0.1.0.0/x/hadrian/build/hadrian/hadrian"},{"type":"configured","id":"hashable-1.3.1.0-5c8079f097ccb4a07ade79412359d99109870c422180b241405e865c08d1d256","pkg-name":"hashable","pkg-version":"1.3.1.0","flags":{"integer-gmp":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"d965e098e06cc585b201da6137dcb31c40f35eb7a937b833903969447985c076","pkg-src-sha256":"8061823a4ac521b53912edcba36b956f3159cb885b07ec119af295a6568ca7c4","depends":["base-4.14.2.0","bytestring-0.10.12.0","deepseq-1.4.4.0","ghc-prim-0.6.1","integer-gmp-1.0.3.0","text-1.2.4.1"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"heaps-0.4-bc3cd4eac5ca091f62c7945101f6ecdd6fe44a077745e2ead12dd6b9d52ab6bc","pkg-name":"heaps","pkg-version":"0.4","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"66b19fcd813b0e4db3e0bac541bd46606c3b13d3d081d9f9666f4be0f5ff14b8","pkg-src-sha256":"89329df8b95ae99ef272e41e7a2d0fe2f1bb7eacfcc34bc01664414b33067cfd","depends":["base-4.14.2.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"integer-gmp-1.0.3.0","pkg-name":"integer-gmp","pkg-version":"1.0.3.0","depends":["ghc-prim-0.6.1"]},{"type":"configured","id":"js-dgtable-0.5.2-7db9737be07ccec17708b5ca1b40401ce1090735eb90ba973558d26060497844","pkg-name":"js-dgtable","pkg-version":"0.5.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"f75cb4fa53c88c65794becdd48eb0d3b2b8abd89a3d5c19e87af91f5225c15e4","pkg-src-sha256":"e28dd65bee8083b17210134e22e01c6349dc33c3b7bd17705973cd014e9f20ac","depends":["base-4.14.2.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-flot-0.8.3-8878a9bacfa61fc94b6d648168d753a135d51d736c0a2009340ea368ddbb83f4","pkg-name":"js-flot","pkg-version":"0.8.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"4c1c447a9a2fba0adba6d30678302a30c32b9dfde9e7aa9e9156483e1545096d","pkg-src-sha256":"1ba2f2a6b8d85da76c41f526c98903cbb107f8642e506c072c1e7e3c20fe5e7a","depends":["base-4.14.2.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-jquery-3.3.1-ed9d83375b124b49d06e3787af95cad66ab1ca9d1b374e8fa3e0b8b9ca368258","pkg-name":"js-jquery","pkg-version":"3.3.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"59ab6c79159549ef94b584abce8e6d3b336014c2cce1337b59a8f637e2856df5","pkg-src-sha256":"e0e0681f0da1130ede4e03a051630ea439c458cb97216cdb01771ebdbe44069b","depends":["base-4.14.2.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"mtl-2.2.2","pkg-name":"mtl","pkg-version":"2.2.2","depends":["base-4.14.2.0","transformers-0.5.6.2"]},{"type":"pre-existing","id":"parsec-3.1.14.0","pkg-name":"parsec","pkg-version":"3.1.14.0","depends":["base-4.14.2.0","bytestring-0.10.12.0","mtl-2.2.2","text-1.2.4.1"]},{"type":"pre-existing","id":"pretty-1.1.3.6","pkg-name":"pretty","pkg-version":"1.1.3.6","depends":["base-4.14.2.0","deepseq-1.4.4.0","ghc-prim-0.6.1"]},{"type":"configured","id":"primitive-0.7.1.0-df7304295e6acb489b482bd664f64a1c3559a7f8db0b27cc58d442850043cbeb","pkg-name":"primitive","pkg-version":"0.7.1.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"f6357d5720c1c665096c3e011467daf443198b786a708d2ff926958a24d508d4","pkg-src-sha256":"6bebecfdf2a57787d9fd5231bfd612b65a92edd7b33a973b2a0f11312b89a3f0","depends":["base-4.14.2.0","deepseq-1.4.4.0","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"process-1.6.9.0","pkg-name":"process","pkg-version":"1.6.9.0","depends":["base-4.14.2.0","deepseq-1.4.4.0","directory-1.3.6.0","filepath-1.4.2.1","unix-2.7.2.2"]},{"type":"configured","id":"random-1.2.0-5168e89137eb4ea0630d1d72c47f7987740be427db4e07b39ed7242279cf06fc","pkg-name":"random","pkg-version":"1.2.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"30d72df4cc1d2fe2d445c88f0ee9d21965af7ce86660c43a6c32a6a1d90d51c9","pkg-src-sha256":"e4519cf7c058bfd5bdbe4acc782284acc9e25e74487208619ca83cbcd63fb9de","depends":["base-4.14.2.0","bytestring-0.10.12.0","deepseq-1.4.4.0","mtl-2.2.2","splitmix-0.1.0.3-c3b36566ac6fe5013261bb6b4e50474d306e4a9838c78dd76bfe3359275b09f1"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"rts","pkg-name":"rts","pkg-version":"1.0.1","depends":[]},{"type":"configured","id":"shake-0.19.4-92e4d38ca4821d6fa5e820c36603f31e84450b23dd3dc59b1072cc1cde8d7590","pkg-name":"shake","pkg-version":"0.19.4","flags":{"cloud":false,"embed-files":false,"portable":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"be81f7c69137e639812380047dfbbdd253ca536cc919504c3bc0f14517e80eb9","pkg-src-sha256":"5bae8873f628113604159f650802edb249dfbe5802c4612751f680ac987d73ee","depends":["base-4.14.2.0","binary-0.8.8.0","bytestring-0.10.12.0","deepseq-1.4.4.0","directory-1.3.6.0","extra-1.7.9-f7e2bbebfc54b6659688f9db579c8c73dd1ba8ab1142cd720c09e215f2be79f5","filepath-1.4.2.1","filepattern-0.1.2-b4cad4464f1df6bd2c46516feb4704875ca9ff08d048b2c98426a9455152d297","hashable-1.3.1.0-5c8079f097ccb4a07ade79412359d99109870c422180b241405e865c08d1d256","heaps-0.4-bc3cd4eac5ca091f62c7945101f6ecdd6fe44a077745e2ead12dd6b9d52ab6bc","js-dgtable-0.5.2-7db9737be07ccec17708b5ca1b40401ce1090735eb90ba973558d26060497844","js-flot-0.8.3-8878a9bacfa61fc94b6d648168d753a135d51d736c0a2009340ea368ddbb83f4","js-jquery-3.3.1-ed9d83375b124b49d06e3787af95cad66ab1ca9d1b374e8fa3e0b8b9ca368258","primitive-0.7.1.0-df7304295e6acb489b482bd664f64a1c3559a7f8db0b27cc58d442850043cbeb","process-1.6.9.0","random-1.2.0-5168e89137eb4ea0630d1d72c47f7987740be427db4e07b39ed7242279cf06fc","time-1.9.3","transformers-0.5.6.2","unix-2.7.2.2","unordered-containers-0.2.13.0-54ccd9301c36e57d00ecae5b9a167fed0f1b0ee3950e328323bc604f35f98357","utf8-string-1.0.2-b29a25454cb19836e8343db96d90d2832e49fbc0bc91247893aa677d97ddb24e"],"exe-depends":[],"component-name":"exe:shake","bin-file":"/home/matt/.cabal/store/ghc-8.10.5/shake-0.19.4-92e4d38ca4821d6fa5e820c36603f31e84450b23dd3dc59b1072cc1cde8d7590/bin/shake"},{"type":"configured","id":"shake-0.19.4-e21a01342ca240404369c44846f296e31657c42fed14a4428dc585df7f46d91c","pkg-name":"shake","pkg-version":"0.19.4","flags":{"cloud":false,"embed-files":false,"portable":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"be81f7c69137e639812380047dfbbdd253ca536cc919504c3bc0f14517e80eb9","pkg-src-sha256":"5bae8873f628113604159f650802edb249dfbe5802c4612751f680ac987d73ee","depends":["base-4.14.2.0","binary-0.8.8.0","bytestring-0.10.12.0","deepseq-1.4.4.0","directory-1.3.6.0","extra-1.7.9-f7e2bbebfc54b6659688f9db579c8c73dd1ba8ab1142cd720c09e215f2be79f5","filepath-1.4.2.1","filepattern-0.1.2-b4cad4464f1df6bd2c46516feb4704875ca9ff08d048b2c98426a9455152d297","hashable-1.3.1.0-5c8079f097ccb4a07ade79412359d99109870c422180b241405e865c08d1d256","heaps-0.4-bc3cd4eac5ca091f62c7945101f6ecdd6fe44a077745e2ead12dd6b9d52ab6bc","js-dgtable-0.5.2-7db9737be07ccec17708b5ca1b40401ce1090735eb90ba973558d26060497844","js-flot-0.8.3-8878a9bacfa61fc94b6d648168d753a135d51d736c0a2009340ea368ddbb83f4","js-jquery-3.3.1-ed9d83375b124b49d06e3787af95cad66ab1ca9d1b374e8fa3e0b8b9ca368258","primitive-0.7.1.0-df7304295e6acb489b482bd664f64a1c3559a7f8db0b27cc58d442850043cbeb","process-1.6.9.0","random-1.2.0-5168e89137eb4ea0630d1d72c47f7987740be427db4e07b39ed7242279cf06fc","time-1.9.3","transformers-0.5.6.2","unix-2.7.2.2","unordered-containers-0.2.13.0-54ccd9301c36e57d00ecae5b9a167fed0f1b0ee3950e328323bc604f35f98357","utf8-string-1.0.2-b29a25454cb19836e8343db96d90d2832e49fbc0bc91247893aa677d97ddb24e"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"splitmix-0.1.0.3-c3b36566ac6fe5013261bb6b4e50474d306e4a9838c78dd76bfe3359275b09f1","pkg-name":"splitmix","pkg-version":"0.1.0.3","flags":{"optimised-mixer":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"fc3aae74c467f4b608050bef53aec17904a618731df9407e655d8f3bf8c32d5c","pkg-src-sha256":"46009f4b000c9e6613377767b8718bf38476469f2a8e2162d98cc246882d5a35","depends":["base-4.14.2.0","deepseq-1.4.4.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"template-haskell-2.16.0.0","pkg-name":"template-haskell","pkg-version":"2.16.0.0","depends":["base-4.14.2.0","ghc-boot-th-8.10.5","ghc-prim-0.6.1","pretty-1.1.3.6"]},{"type":"pre-existing","id":"text-1.2.4.1","pkg-name":"text","pkg-version":"1.2.4.1","depends":["array-0.5.4.0","base-4.14.2.0","binary-0.8.8.0","bytestring-0.10.12.0","deepseq-1.4.4.0","ghc-prim-0.6.1","integer-gmp-1.0.3.0","template-haskell-2.16.0.0"]},{"type":"pre-existing","id":"time-1.9.3","pkg-name":"time","pkg-version":"1.9.3","depends":["base-4.14.2.0","deepseq-1.4.4.0"]},{"type":"pre-existing","id":"transformers-0.5.6.2","pkg-name":"transformers","pkg-version":"0.5.6.2","depends":["base-4.14.2.0"]},{"type":"pre-existing","id":"unix-2.7.2.2","pkg-name":"unix","pkg-version":"2.7.2.2","depends":["base-4.14.2.0","bytestring-0.10.12.0","time-1.9.3"]},{"type":"configured","id":"unordered-containers-0.2.13.0-54ccd9301c36e57d00ecae5b9a167fed0f1b0ee3950e328323bc604f35f98357","pkg-name":"unordered-containers","pkg-version":"0.2.13.0","flags":{"debug":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"6310c636f92ed4908fdd0de582b6be31c2851c7b5f2ec14e9f416eb94df7a078","pkg-src-sha256":"86b01369ab8eb311383a052d389337e2cd71a63088323f02932754df4aa37b55","depends":["base-4.14.2.0","deepseq-1.4.4.0","hashable-1.3.1.0-5c8079f097ccb4a07ade79412359d99109870c422180b241405e865c08d1d256"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"utf8-string-1.0.2-b29a25454cb19836e8343db96d90d2832e49fbc0bc91247893aa677d97ddb24e","pkg-name":"utf8-string","pkg-version":"1.0.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"79416292186feeaf1f60e49ac5a1ffae9bf1b120e040a74bf0e81ca7f1d31d3f","pkg-src-sha256":"ee48deada7600370728c4156cb002441de770d0121ae33a68139a9ed9c19b09a","depends":["base-4.14.2.0","bytestring-0.10.12.0"],"exe-depends":[],"component-name":"lib"}]}
\ No newline at end of file
diff --git a/hadrian/bootstrap/plan-9_0_1.json b/hadrian/bootstrap/plan-9_0_1.json
new file mode 100644
index 0000000000000000000000000000000000000000..ef3fd63776d921a56db51c066e448f14bb0bce80
--- /dev/null
+++ b/hadrian/bootstrap/plan-9_0_1.json
@@ -0,0 +1 @@
+{"cabal-version":"3.2.0.0","cabal-lib-version":"3.2.0.0","compiler-id":"ghc-9.0.1","os":"linux","arch":"x86_64","install-plan":[{"type":"pre-existing","id":"Cabal-3.4.0.0","pkg-name":"Cabal","pkg-version":"3.4.0.0","depends":["array-0.5.4.0","base-4.15.0.0","binary-0.8.8.0","bytestring-0.10.12.1","containers-0.6.4.1","deepseq-1.4.5.0","directory-1.3.6.1","filepath-1.4.2.1","mtl-2.2.2","parsec-3.1.14.0","pretty-1.1.3.6","process-1.6.11.0","text-1.2.4.1","time-1.9.3","transformers-0.5.6.2","unix-2.7.2.2"]},{"type":"configured","id":"QuickCheck-2.14.2-1a5ced7bda7b07a7fbcf3b2c9a631d6d6d6f31b01674e1cf2aa430001b83e69e","pkg-name":"QuickCheck","pkg-version":"2.14.2","flags":{"old-random":false,"templatehaskell":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"4ce29211223d5e6620ebceba34a3ca9ccf1c10c0cf387d48aea45599222ee5aa","pkg-src-sha256":"d87b6c85696b601175274361fa62217894401e401e150c3c5d4013ac53cd36f3","depends":["base-4.15.0.0","containers-0.6.4.1","deepseq-1.4.5.0","random-1.2.0-42695b2d92a156e2d79d6b1353900ab25e2ede55fe7b46738e4c426308e80acb","splitmix-0.1.0.3-cc5e2af2f495a04fe592d927ff5c9ccab99979d46d7e1a1c79f457dc2efcf613","template-haskell-2.17.0.0","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"array-0.5.4.0","pkg-name":"array","pkg-version":"0.5.4.0","depends":["base-4.15.0.0"]},{"type":"pre-existing","id":"base-4.15.0.0","pkg-name":"base","pkg-version":"4.15.0.0","depends":["ghc-bignum-1.0","ghc-prim-0.7.0","rts"]},{"type":"pre-existing","id":"binary-0.8.8.0","pkg-name":"binary","pkg-version":"0.8.8.0","depends":["array-0.5.4.0","base-4.15.0.0","bytestring-0.10.12.1","containers-0.6.4.1"]},{"type":"pre-existing","id":"bytestring-0.10.12.1","pkg-name":"bytestring","pkg-version":"0.10.12.1","depends":["base-4.15.0.0","deepseq-1.4.5.0","ghc-bignum-1.0","ghc-prim-0.7.0"]},{"type":"configured","id":"clock-0.8.2-94d35da6efced15094e29084a5f451e0789b94c07444085b3e66bf357595f6a7","pkg-name":"clock","pkg-version":"0.8.2","flags":{"llvm":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"473ffd59765cc67634bdc55b63c699a85addf3a024089073ec2a862881e83e2a","pkg-src-sha256":"0b5db110c703e68b251d5883253a934b012110b45393fc65df1b095eb9a4e461","depends":["base-4.15.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"containers-0.6.4.1","pkg-name":"containers","pkg-version":"0.6.4.1","depends":["array-0.5.4.0","base-4.15.0.0","deepseq-1.4.5.0"]},{"type":"pre-existing","id":"deepseq-1.4.5.0","pkg-name":"deepseq","pkg-version":"1.4.5.0","depends":["array-0.5.4.0","base-4.15.0.0"]},{"type":"pre-existing","id":"directory-1.3.6.1","pkg-name":"directory","pkg-version":"1.3.6.1","depends":["base-4.15.0.0","filepath-1.4.2.1","time-1.9.3","unix-2.7.2.2"]},{"type":"configured","id":"extra-1.7.9-3b5071fb639982c0300593c21906006486c82cfbcfa86fb8452c5ad59c066e91","pkg-name":"extra","pkg-version":"1.7.9","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"f1dec740f0f2025790c540732bfd52c556ec55bde4f5dfd7cf18e22bd44ff3d0","pkg-src-sha256":"f66e26a63b216f0ca33665a75c08eada0a96af192ace83a18d87839d79afdf9d","depends":["base-4.15.0.0","clock-0.8.2-94d35da6efced15094e29084a5f451e0789b94c07444085b3e66bf357595f6a7","directory-1.3.6.1","filepath-1.4.2.1","process-1.6.11.0","time-1.9.3","unix-2.7.2.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"filepath-1.4.2.1","pkg-name":"filepath","pkg-version":"1.4.2.1","depends":["base-4.15.0.0"]},{"type":"configured","id":"filepattern-0.1.2-e1a604f2fb037766dd8dedcdf4412a1060873283818f5babf6c842fcef309004","pkg-name":"filepattern","pkg-version":"0.1.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"aec816ff25418d1b03ba75189e568f490eb86efc47f586d43363fa338e422e81","pkg-src-sha256":"d92912ee0db0b8c50d6b2ffdc1ae91ee30e2704b47896aa325b42b58a2fcf65b","depends":["base-4.15.0.0","directory-1.3.6.1","extra-1.7.9-3b5071fb639982c0300593c21906006486c82cfbcfa86fb8452c5ad59c066e91","filepath-1.4.2.1"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"ghc-bignum-1.0","pkg-name":"ghc-bignum","pkg-version":"1.0","depends":["ghc-prim-0.7.0"]},{"type":"pre-existing","id":"ghc-boot-th-9.0.1","pkg-name":"ghc-boot-th","pkg-version":"9.0.1","depends":["base-4.15.0.0"]},{"type":"pre-existing","id":"ghc-prim-0.7.0","pkg-name":"ghc-prim","pkg-version":"0.7.0","depends":["rts"]},{"type":"configured","id":"hadrian-0.1.0.0-inplace-hadrian","pkg-name":"hadrian","pkg-version":"0.1.0.0","flags":{"threaded":true},"style":"local","pkg-src":{"type":"local","path":"/home/matt/ghc-hadrian-bootstrap/hadrian/."},"dist-dir":"/home/matt/ghc-hadrian-bootstrap/hadrian/dist-newstyle/build/x86_64-linux/ghc-9.0.1/hadrian-0.1.0.0/x/hadrian","depends":["Cabal-3.4.0.0","QuickCheck-2.14.2-1a5ced7bda7b07a7fbcf3b2c9a631d6d6d6f31b01674e1cf2aa430001b83e69e","base-4.15.0.0","bytestring-0.10.12.1","containers-0.6.4.1","directory-1.3.6.1","extra-1.7.9-3b5071fb639982c0300593c21906006486c82cfbcfa86fb8452c5ad59c066e91","filepath-1.4.2.1","mtl-2.2.2","parsec-3.1.14.0","shake-0.19.4-14804ff74b1678b050130a6b940d7752bedd32673aae21cd5eae957bb9cfee11","transformers-0.5.6.2","unordered-containers-0.2.13.0-d5b41b4da4f1acde715ed2aaecf225ba2e02f6b2ee0b14fccdb2e575c6fb1e86"],"exe-depends":[],"component-name":"exe:hadrian","bin-file":"/home/matt/ghc-hadrian-bootstrap/hadrian/dist-newstyle/build/x86_64-linux/ghc-9.0.1/hadrian-0.1.0.0/x/hadrian/build/hadrian/hadrian"},{"type":"configured","id":"hashable-1.3.1.0-a92c75af1fea2a65b2365eb935f4a4802dac5057158f909650e1011dc3a01a23","pkg-name":"hashable","pkg-version":"1.3.1.0","flags":{"integer-gmp":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"d965e098e06cc585b201da6137dcb31c40f35eb7a937b833903969447985c076","pkg-src-sha256":"8061823a4ac521b53912edcba36b956f3159cb885b07ec119af295a6568ca7c4","depends":["base-4.15.0.0","bytestring-0.10.12.1","deepseq-1.4.5.0","ghc-bignum-1.0","ghc-prim-0.7.0","text-1.2.4.1"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"heaps-0.4-87888aff9113a58a699c90be7814d8c23bf04f5a5c526ba9db4c06bfd4975096","pkg-name":"heaps","pkg-version":"0.4","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"66b19fcd813b0e4db3e0bac541bd46606c3b13d3d081d9f9666f4be0f5ff14b8","pkg-src-sha256":"89329df8b95ae99ef272e41e7a2d0fe2f1bb7eacfcc34bc01664414b33067cfd","depends":["base-4.15.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-dgtable-0.5.2-de91c94b5176a9d05a633a22beb7400ea96ff2dd1108d33bc77eff04a92ba35a","pkg-name":"js-dgtable","pkg-version":"0.5.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"f75cb4fa53c88c65794becdd48eb0d3b2b8abd89a3d5c19e87af91f5225c15e4","pkg-src-sha256":"e28dd65bee8083b17210134e22e01c6349dc33c3b7bd17705973cd014e9f20ac","depends":["base-4.15.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-flot-0.8.3-4d1035c07927d31bcbd757690f3cb31c131d26dcb3dc160579d9e8cb05d196e8","pkg-name":"js-flot","pkg-version":"0.8.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"4c1c447a9a2fba0adba6d30678302a30c32b9dfde9e7aa9e9156483e1545096d","pkg-src-sha256":"1ba2f2a6b8d85da76c41f526c98903cbb107f8642e506c072c1e7e3c20fe5e7a","depends":["base-4.15.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-jquery-3.3.1-3fe70afe7299ef4d6c19c49e55872aec043229cfd82d521c08678f06d388613b","pkg-name":"js-jquery","pkg-version":"3.3.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"59ab6c79159549ef94b584abce8e6d3b336014c2cce1337b59a8f637e2856df5","pkg-src-sha256":"e0e0681f0da1130ede4e03a051630ea439c458cb97216cdb01771ebdbe44069b","depends":["base-4.15.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"mtl-2.2.2","pkg-name":"mtl","pkg-version":"2.2.2","depends":["base-4.15.0.0","transformers-0.5.6.2"]},{"type":"pre-existing","id":"parsec-3.1.14.0","pkg-name":"parsec","pkg-version":"3.1.14.0","depends":["base-4.15.0.0","bytestring-0.10.12.1","mtl-2.2.2","text-1.2.4.1"]},{"type":"pre-existing","id":"pretty-1.1.3.6","pkg-name":"pretty","pkg-version":"1.1.3.6","depends":["base-4.15.0.0","deepseq-1.4.5.0","ghc-prim-0.7.0"]},{"type":"configured","id":"primitive-0.7.1.0-f003beddf0fc9d04aaf34af7ddb2d21771469f6e4225ce5a793266b89bfbb923","pkg-name":"primitive","pkg-version":"0.7.1.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"f6357d5720c1c665096c3e011467daf443198b786a708d2ff926958a24d508d4","pkg-src-sha256":"6bebecfdf2a57787d9fd5231bfd612b65a92edd7b33a973b2a0f11312b89a3f0","depends":["base-4.15.0.0","deepseq-1.4.5.0","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"process-1.6.11.0","pkg-name":"process","pkg-version":"1.6.11.0","depends":["base-4.15.0.0","deepseq-1.4.5.0","directory-1.3.6.1","filepath-1.4.2.1","unix-2.7.2.2"]},{"type":"configured","id":"random-1.2.0-42695b2d92a156e2d79d6b1353900ab25e2ede55fe7b46738e4c426308e80acb","pkg-name":"random","pkg-version":"1.2.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"30d72df4cc1d2fe2d445c88f0ee9d21965af7ce86660c43a6c32a6a1d90d51c9","pkg-src-sha256":"e4519cf7c058bfd5bdbe4acc782284acc9e25e74487208619ca83cbcd63fb9de","depends":["base-4.15.0.0","bytestring-0.10.12.1","deepseq-1.4.5.0","mtl-2.2.2","splitmix-0.1.0.3-cc5e2af2f495a04fe592d927ff5c9ccab99979d46d7e1a1c79f457dc2efcf613"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"rts","pkg-name":"rts","pkg-version":"1.0","depends":[]},{"type":"configured","id":"shake-0.19.4-14804ff74b1678b050130a6b940d7752bedd32673aae21cd5eae957bb9cfee11","pkg-name":"shake","pkg-version":"0.19.4","flags":{"cloud":false,"embed-files":false,"portable":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"be81f7c69137e639812380047dfbbdd253ca536cc919504c3bc0f14517e80eb9","pkg-src-sha256":"5bae8873f628113604159f650802edb249dfbe5802c4612751f680ac987d73ee","depends":["base-4.15.0.0","binary-0.8.8.0","bytestring-0.10.12.1","deepseq-1.4.5.0","directory-1.3.6.1","extra-1.7.9-3b5071fb639982c0300593c21906006486c82cfbcfa86fb8452c5ad59c066e91","filepath-1.4.2.1","filepattern-0.1.2-e1a604f2fb037766dd8dedcdf4412a1060873283818f5babf6c842fcef309004","hashable-1.3.1.0-a92c75af1fea2a65b2365eb935f4a4802dac5057158f909650e1011dc3a01a23","heaps-0.4-87888aff9113a58a699c90be7814d8c23bf04f5a5c526ba9db4c06bfd4975096","js-dgtable-0.5.2-de91c94b5176a9d05a633a22beb7400ea96ff2dd1108d33bc77eff04a92ba35a","js-flot-0.8.3-4d1035c07927d31bcbd757690f3cb31c131d26dcb3dc160579d9e8cb05d196e8","js-jquery-3.3.1-3fe70afe7299ef4d6c19c49e55872aec043229cfd82d521c08678f06d388613b","primitive-0.7.1.0-f003beddf0fc9d04aaf34af7ddb2d21771469f6e4225ce5a793266b89bfbb923","process-1.6.11.0","random-1.2.0-42695b2d92a156e2d79d6b1353900ab25e2ede55fe7b46738e4c426308e80acb","time-1.9.3","transformers-0.5.6.2","unix-2.7.2.2","unordered-containers-0.2.13.0-d5b41b4da4f1acde715ed2aaecf225ba2e02f6b2ee0b14fccdb2e575c6fb1e86","utf8-string-1.0.2-062c687b43b30db818356f6c18bf5308582996ce4363a46aa42090181ecf1b53"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"shake-0.19.4-63dd3995f97dd9418e130cf69737e0a0b507ae692b3f4e4f682434074d6a498c","pkg-name":"shake","pkg-version":"0.19.4","flags":{"cloud":false,"embed-files":false,"portable":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"be81f7c69137e639812380047dfbbdd253ca536cc919504c3bc0f14517e80eb9","pkg-src-sha256":"5bae8873f628113604159f650802edb249dfbe5802c4612751f680ac987d73ee","depends":["base-4.15.0.0","binary-0.8.8.0","bytestring-0.10.12.1","deepseq-1.4.5.0","directory-1.3.6.1","extra-1.7.9-3b5071fb639982c0300593c21906006486c82cfbcfa86fb8452c5ad59c066e91","filepath-1.4.2.1","filepattern-0.1.2-e1a604f2fb037766dd8dedcdf4412a1060873283818f5babf6c842fcef309004","hashable-1.3.1.0-a92c75af1fea2a65b2365eb935f4a4802dac5057158f909650e1011dc3a01a23","heaps-0.4-87888aff9113a58a699c90be7814d8c23bf04f5a5c526ba9db4c06bfd4975096","js-dgtable-0.5.2-de91c94b5176a9d05a633a22beb7400ea96ff2dd1108d33bc77eff04a92ba35a","js-flot-0.8.3-4d1035c07927d31bcbd757690f3cb31c131d26dcb3dc160579d9e8cb05d196e8","js-jquery-3.3.1-3fe70afe7299ef4d6c19c49e55872aec043229cfd82d521c08678f06d388613b","primitive-0.7.1.0-f003beddf0fc9d04aaf34af7ddb2d21771469f6e4225ce5a793266b89bfbb923","process-1.6.11.0","random-1.2.0-42695b2d92a156e2d79d6b1353900ab25e2ede55fe7b46738e4c426308e80acb","time-1.9.3","transformers-0.5.6.2","unix-2.7.2.2","unordered-containers-0.2.13.0-d5b41b4da4f1acde715ed2aaecf225ba2e02f6b2ee0b14fccdb2e575c6fb1e86","utf8-string-1.0.2-062c687b43b30db818356f6c18bf5308582996ce4363a46aa42090181ecf1b53"],"exe-depends":[],"component-name":"exe:shake","bin-file":"/home/matt/.cabal/store/ghc-9.0.1/shake-0.19.4-63dd3995f97dd9418e130cf69737e0a0b507ae692b3f4e4f682434074d6a498c/bin/shake"},{"type":"configured","id":"splitmix-0.1.0.3-cc5e2af2f495a04fe592d927ff5c9ccab99979d46d7e1a1c79f457dc2efcf613","pkg-name":"splitmix","pkg-version":"0.1.0.3","flags":{"optimised-mixer":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"fc3aae74c467f4b608050bef53aec17904a618731df9407e655d8f3bf8c32d5c","pkg-src-sha256":"46009f4b000c9e6613377767b8718bf38476469f2a8e2162d98cc246882d5a35","depends":["base-4.15.0.0","deepseq-1.4.5.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"template-haskell-2.17.0.0","pkg-name":"template-haskell","pkg-version":"2.17.0.0","depends":["base-4.15.0.0","ghc-boot-th-9.0.1","ghc-prim-0.7.0","pretty-1.1.3.6"]},{"type":"pre-existing","id":"text-1.2.4.1","pkg-name":"text","pkg-version":"1.2.4.1","depends":["array-0.5.4.0","base-4.15.0.0","binary-0.8.8.0","bytestring-0.10.12.1","deepseq-1.4.5.0","ghc-bignum-1.0","ghc-prim-0.7.0","template-haskell-2.17.0.0"]},{"type":"pre-existing","id":"time-1.9.3","pkg-name":"time","pkg-version":"1.9.3","depends":["base-4.15.0.0","deepseq-1.4.5.0"]},{"type":"pre-existing","id":"transformers-0.5.6.2","pkg-name":"transformers","pkg-version":"0.5.6.2","depends":["base-4.15.0.0"]},{"type":"pre-existing","id":"unix-2.7.2.2","pkg-name":"unix","pkg-version":"2.7.2.2","depends":["base-4.15.0.0","bytestring-0.10.12.1","time-1.9.3"]},{"type":"configured","id":"unordered-containers-0.2.13.0-d5b41b4da4f1acde715ed2aaecf225ba2e02f6b2ee0b14fccdb2e575c6fb1e86","pkg-name":"unordered-containers","pkg-version":"0.2.13.0","flags":{"debug":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"6310c636f92ed4908fdd0de582b6be31c2851c7b5f2ec14e9f416eb94df7a078","pkg-src-sha256":"86b01369ab8eb311383a052d389337e2cd71a63088323f02932754df4aa37b55","depends":["base-4.15.0.0","deepseq-1.4.5.0","hashable-1.3.1.0-a92c75af1fea2a65b2365eb935f4a4802dac5057158f909650e1011dc3a01a23"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"utf8-string-1.0.2-062c687b43b30db818356f6c18bf5308582996ce4363a46aa42090181ecf1b53","pkg-name":"utf8-string","pkg-version":"1.0.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"79416292186feeaf1f60e49ac5a1ffae9bf1b120e040a74bf0e81ca7f1d31d3f","pkg-src-sha256":"ee48deada7600370728c4156cb002441de770d0121ae33a68139a9ed9c19b09a","depends":["base-4.15.0.0","bytestring-0.10.12.1"],"exe-depends":[],"component-name":"lib"}]}
\ No newline at end of file
diff --git a/hadrian/bootstrap/plan-bootstrap-8_10_1.json b/hadrian/bootstrap/plan-bootstrap-8_10_1.json
new file mode 100644
index 0000000000000000000000000000000000000000..bcc9add71a86e38bc257af2716d3cd17b554ffc8
--- /dev/null
+++ b/hadrian/bootstrap/plan-bootstrap-8_10_1.json
@@ -0,0 +1 @@
+{"dependencies":[{"source":"hackage","package":"splitmix","version":"0.1.0.3","flags":["-optimised-mixer"],"cabal_sha256":"fc3aae74c467f4b608050bef53aec17904a618731df9407e655d8f3bf8c32d5c","src_sha256":"46009f4b000c9e6613377767b8718bf38476469f2a8e2162d98cc246882d5a35","revision":0},{"source":"hackage","package":"random","version":"1.2.0","flags":[],"cabal_sha256":"195506fedaa7c31c1fa2a747e9b49b4a5d1f0b09dd8f1291f23a771656faeec3","src_sha256":"e4519cf7c058bfd5bdbe4acc782284acc9e25e74487208619ca83cbcd63fb9de","revision":6},{"source":"hackage","package":"QuickCheck","version":"2.14.2","flags":["-old-random","+templatehaskell"],"cabal_sha256":"4ce29211223d5e6620ebceba34a3ca9ccf1c10c0cf387d48aea45599222ee5aa","src_sha256":"d87b6c85696b601175274361fa62217894401e401e150c3c5d4013ac53cd36f3","revision":0},{"source":"hackage","package":"clock","version":"0.8.2","flags":["-llvm"],"cabal_sha256":"473ffd59765cc67634bdc55b63c699a85addf3a024089073ec2a862881e83e2a","src_sha256":"0b5db110c703e68b251d5883253a934b012110b45393fc65df1b095eb9a4e461","revision":0},{"source":"hackage","package":"extra","version":"1.7.9","flags":[],"cabal_sha256":"f1dec740f0f2025790c540732bfd52c556ec55bde4f5dfd7cf18e22bd44ff3d0","src_sha256":"f66e26a63b216f0ca33665a75c08eada0a96af192ace83a18d87839d79afdf9d","revision":0},{"source":"hackage","package":"filepattern","version":"0.1.2","flags":[],"cabal_sha256":"aec816ff25418d1b03ba75189e568f490eb86efc47f586d43363fa338e422e81","src_sha256":"d92912ee0db0b8c50d6b2ffdc1ae91ee30e2704b47896aa325b42b58a2fcf65b","revision":0},{"source":"hackage","package":"hashable","version":"1.3.1.0","flags":["+integer-gmp"],"cabal_sha256":"d965e098e06cc585b201da6137dcb31c40f35eb7a937b833903969447985c076","src_sha256":"8061823a4ac521b53912edcba36b956f3159cb885b07ec119af295a6568ca7c4","revision":0},{"source":"hackage","package":"heaps","version":"0.4","flags":[],"cabal_sha256":"66b19fcd813b0e4db3e0bac541bd46606c3b13d3d081d9f9666f4be0f5ff14b8","src_sha256":"89329df8b95ae99ef272e41e7a2d0fe2f1bb7eacfcc34bc01664414b33067cfd","revision":0},{"source":"hackage","package":"js-dgtable","version":"0.5.2","flags":[],"cabal_sha256":"f75cb4fa53c88c65794becdd48eb0d3b2b8abd89a3d5c19e87af91f5225c15e4","src_sha256":"e28dd65bee8083b17210134e22e01c6349dc33c3b7bd17705973cd014e9f20ac","revision":0},{"source":"hackage","package":"js-flot","version":"0.8.3","flags":[],"cabal_sha256":"4c1c447a9a2fba0adba6d30678302a30c32b9dfde9e7aa9e9156483e1545096d","src_sha256":"1ba2f2a6b8d85da76c41f526c98903cbb107f8642e506c072c1e7e3c20fe5e7a","revision":0},{"source":"hackage","package":"js-jquery","version":"3.3.1","flags":[],"cabal_sha256":"59ab6c79159549ef94b584abce8e6d3b336014c2cce1337b59a8f637e2856df5","src_sha256":"e0e0681f0da1130ede4e03a051630ea439c458cb97216cdb01771ebdbe44069b","revision":0},{"source":"hackage","package":"primitive","version":"0.7.1.0","flags":[],"cabal_sha256":"29de6bfd0cf8ba023ceb806203dfbec0e51e3524e75ffe41056f70b4229c6f0f","src_sha256":"6bebecfdf2a57787d9fd5231bfd612b65a92edd7b33a973b2a0f11312b89a3f0","revision":3},{"source":"hackage","package":"unordered-containers","version":"0.2.13.0","flags":["-debug"],"cabal_sha256":"6310c636f92ed4908fdd0de582b6be31c2851c7b5f2ec14e9f416eb94df7a078","src_sha256":"86b01369ab8eb311383a052d389337e2cd71a63088323f02932754df4aa37b55","revision":0},{"source":"hackage","package":"utf8-string","version":"1.0.2","flags":[],"cabal_sha256":"79416292186feeaf1f60e49ac5a1ffae9bf1b120e040a74bf0e81ca7f1d31d3f","src_sha256":"ee48deada7600370728c4156cb002441de770d0121ae33a68139a9ed9c19b09a","revision":0},{"source":"hackage","package":"shake","version":"0.19.4","flags":["-cloud","-embed-files","-portable"],"cabal_sha256":"be81f7c69137e639812380047dfbbdd253ca536cc919504c3bc0f14517e80eb9","src_sha256":"5bae8873f628113604159f650802edb249dfbe5802c4612751f680ac987d73ee","revision":0},{"source":"local","package":"hadrian","version":"0.1.0.0","flags":["+threaded"],"cabal_sha256":null,"src_sha256":null,"revision":null}],"builtin":[{"package":"rts","version":"1.0"},{"package":"ghc-prim","version":"0.6.1"},{"package":"integer-gmp","version":"1.0.3.0"},{"package":"base","version":"4.14.0.0"},{"package":"array","version":"0.5.4.0"},{"package":"deepseq","version":"1.4.4.0"},{"package":"bytestring","version":"0.10.10.0"},{"package":"containers","version":"0.6.2.1"},{"package":"binary","version":"0.8.8.0"},{"package":"filepath","version":"1.4.2.1"},{"package":"time","version":"1.9.3"},{"package":"unix","version":"2.7.2.2"},{"package":"directory","version":"1.3.6.0"},{"package":"transformers","version":"0.5.6.2"},{"package":"mtl","version":"2.2.2"},{"package":"text","version":"1.2.3.2"},{"package":"parsec","version":"3.1.14.0"},{"package":"pretty","version":"1.1.3.6"},{"package":"process","version":"1.6.8.2"},{"package":"Cabal","version":"3.2.0.0"},{"package":"ghc-boot-th","version":"8.10.1"},{"package":"template-haskell","version":"2.16.0.0"}]}
\ No newline at end of file
diff --git a/hadrian/bootstrap/plan-bootstrap-8_10_2.json b/hadrian/bootstrap/plan-bootstrap-8_10_2.json
new file mode 100644
index 0000000000000000000000000000000000000000..4fcbffd9c5a165af09482f8743bbd8d46937dcca
--- /dev/null
+++ b/hadrian/bootstrap/plan-bootstrap-8_10_2.json
@@ -0,0 +1 @@
+{"dependencies":[{"source":"hackage","package":"splitmix","version":"0.1.0.3","flags":["-optimised-mixer"],"cabal_sha256":"fc3aae74c467f4b608050bef53aec17904a618731df9407e655d8f3bf8c32d5c","src_sha256":"46009f4b000c9e6613377767b8718bf38476469f2a8e2162d98cc246882d5a35","revision":0},{"source":"hackage","package":"random","version":"1.2.0","flags":[],"cabal_sha256":"195506fedaa7c31c1fa2a747e9b49b4a5d1f0b09dd8f1291f23a771656faeec3","src_sha256":"e4519cf7c058bfd5bdbe4acc782284acc9e25e74487208619ca83cbcd63fb9de","revision":6},{"source":"hackage","package":"QuickCheck","version":"2.14.2","flags":["-old-random","+templatehaskell"],"cabal_sha256":"4ce29211223d5e6620ebceba34a3ca9ccf1c10c0cf387d48aea45599222ee5aa","src_sha256":"d87b6c85696b601175274361fa62217894401e401e150c3c5d4013ac53cd36f3","revision":0},{"source":"hackage","package":"clock","version":"0.8.2","flags":["-llvm"],"cabal_sha256":"473ffd59765cc67634bdc55b63c699a85addf3a024089073ec2a862881e83e2a","src_sha256":"0b5db110c703e68b251d5883253a934b012110b45393fc65df1b095eb9a4e461","revision":0},{"source":"hackage","package":"extra","version":"1.7.9","flags":[],"cabal_sha256":"f1dec740f0f2025790c540732bfd52c556ec55bde4f5dfd7cf18e22bd44ff3d0","src_sha256":"f66e26a63b216f0ca33665a75c08eada0a96af192ace83a18d87839d79afdf9d","revision":0},{"source":"hackage","package":"filepattern","version":"0.1.2","flags":[],"cabal_sha256":"aec816ff25418d1b03ba75189e568f490eb86efc47f586d43363fa338e422e81","src_sha256":"d92912ee0db0b8c50d6b2ffdc1ae91ee30e2704b47896aa325b42b58a2fcf65b","revision":0},{"source":"hackage","package":"hashable","version":"1.3.1.0","flags":["+integer-gmp"],"cabal_sha256":"d965e098e06cc585b201da6137dcb31c40f35eb7a937b833903969447985c076","src_sha256":"8061823a4ac521b53912edcba36b956f3159cb885b07ec119af295a6568ca7c4","revision":0},{"source":"hackage","package":"heaps","version":"0.4","flags":[],"cabal_sha256":"66b19fcd813b0e4db3e0bac541bd46606c3b13d3d081d9f9666f4be0f5ff14b8","src_sha256":"89329df8b95ae99ef272e41e7a2d0fe2f1bb7eacfcc34bc01664414b33067cfd","revision":0},{"source":"hackage","package":"js-dgtable","version":"0.5.2","flags":[],"cabal_sha256":"f75cb4fa53c88c65794becdd48eb0d3b2b8abd89a3d5c19e87af91f5225c15e4","src_sha256":"e28dd65bee8083b17210134e22e01c6349dc33c3b7bd17705973cd014e9f20ac","revision":0},{"source":"hackage","package":"js-flot","version":"0.8.3","flags":[],"cabal_sha256":"4c1c447a9a2fba0adba6d30678302a30c32b9dfde9e7aa9e9156483e1545096d","src_sha256":"1ba2f2a6b8d85da76c41f526c98903cbb107f8642e506c072c1e7e3c20fe5e7a","revision":0},{"source":"hackage","package":"js-jquery","version":"3.3.1","flags":[],"cabal_sha256":"59ab6c79159549ef94b584abce8e6d3b336014c2cce1337b59a8f637e2856df5","src_sha256":"e0e0681f0da1130ede4e03a051630ea439c458cb97216cdb01771ebdbe44069b","revision":0},{"source":"hackage","package":"primitive","version":"0.7.1.0","flags":[],"cabal_sha256":"29de6bfd0cf8ba023ceb806203dfbec0e51e3524e75ffe41056f70b4229c6f0f","src_sha256":"6bebecfdf2a57787d9fd5231bfd612b65a92edd7b33a973b2a0f11312b89a3f0","revision":3},{"source":"hackage","package":"unordered-containers","version":"0.2.13.0","flags":["-debug"],"cabal_sha256":"6310c636f92ed4908fdd0de582b6be31c2851c7b5f2ec14e9f416eb94df7a078","src_sha256":"86b01369ab8eb311383a052d389337e2cd71a63088323f02932754df4aa37b55","revision":0},{"source":"hackage","package":"utf8-string","version":"1.0.2","flags":[],"cabal_sha256":"79416292186feeaf1f60e49ac5a1ffae9bf1b120e040a74bf0e81ca7f1d31d3f","src_sha256":"ee48deada7600370728c4156cb002441de770d0121ae33a68139a9ed9c19b09a","revision":0},{"source":"hackage","package":"shake","version":"0.19.4","flags":["-cloud","-embed-files","-portable"],"cabal_sha256":"be81f7c69137e639812380047dfbbdd253ca536cc919504c3bc0f14517e80eb9","src_sha256":"5bae8873f628113604159f650802edb249dfbe5802c4612751f680ac987d73ee","revision":0},{"source":"local","package":"hadrian","version":"0.1.0.0","flags":["+threaded"],"cabal_sha256":null,"src_sha256":null,"revision":null}],"builtin":[{"package":"rts","version":"1.0"},{"package":"ghc-prim","version":"0.6.1"},{"package":"integer-gmp","version":"1.0.3.0"},{"package":"base","version":"4.14.1.0"},{"package":"array","version":"0.5.4.0"},{"package":"deepseq","version":"1.4.4.0"},{"package":"bytestring","version":"0.10.10.0"},{"package":"containers","version":"0.6.2.1"},{"package":"binary","version":"0.8.8.0"},{"package":"filepath","version":"1.4.2.1"},{"package":"time","version":"1.9.3"},{"package":"unix","version":"2.7.2.2"},{"package":"directory","version":"1.3.6.0"},{"package":"transformers","version":"0.5.6.2"},{"package":"mtl","version":"2.2.2"},{"package":"text","version":"1.2.3.2"},{"package":"parsec","version":"3.1.14.0"},{"package":"pretty","version":"1.1.3.6"},{"package":"process","version":"1.6.9.0"},{"package":"Cabal","version":"3.2.0.0"},{"package":"ghc-boot-th","version":"8.10.2"},{"package":"template-haskell","version":"2.16.0.0"}]}
\ No newline at end of file
diff --git a/hadrian/bootstrap/plan-bootstrap-8_10_3.json b/hadrian/bootstrap/plan-bootstrap-8_10_3.json
new file mode 100644
index 0000000000000000000000000000000000000000..0b76a18a2b9bc276de4ce5e0e2a12572d53b554c
--- /dev/null
+++ b/hadrian/bootstrap/plan-bootstrap-8_10_3.json
@@ -0,0 +1 @@
+{"dependencies":[{"source":"hackage","package":"splitmix","version":"0.1.0.3","flags":["-optimised-mixer"],"cabal_sha256":"fc3aae74c467f4b608050bef53aec17904a618731df9407e655d8f3bf8c32d5c","src_sha256":"46009f4b000c9e6613377767b8718bf38476469f2a8e2162d98cc246882d5a35","revision":0},{"source":"hackage","package":"random","version":"1.2.0","flags":[],"cabal_sha256":"195506fedaa7c31c1fa2a747e9b49b4a5d1f0b09dd8f1291f23a771656faeec3","src_sha256":"e4519cf7c058bfd5bdbe4acc782284acc9e25e74487208619ca83cbcd63fb9de","revision":6},{"source":"hackage","package":"QuickCheck","version":"2.14.2","flags":["-old-random","+templatehaskell"],"cabal_sha256":"4ce29211223d5e6620ebceba34a3ca9ccf1c10c0cf387d48aea45599222ee5aa","src_sha256":"d87b6c85696b601175274361fa62217894401e401e150c3c5d4013ac53cd36f3","revision":0},{"source":"hackage","package":"clock","version":"0.8.2","flags":["-llvm"],"cabal_sha256":"473ffd59765cc67634bdc55b63c699a85addf3a024089073ec2a862881e83e2a","src_sha256":"0b5db110c703e68b251d5883253a934b012110b45393fc65df1b095eb9a4e461","revision":0},{"source":"hackage","package":"extra","version":"1.7.9","flags":[],"cabal_sha256":"f1dec740f0f2025790c540732bfd52c556ec55bde4f5dfd7cf18e22bd44ff3d0","src_sha256":"f66e26a63b216f0ca33665a75c08eada0a96af192ace83a18d87839d79afdf9d","revision":0},{"source":"hackage","package":"filepattern","version":"0.1.2","flags":[],"cabal_sha256":"aec816ff25418d1b03ba75189e568f490eb86efc47f586d43363fa338e422e81","src_sha256":"d92912ee0db0b8c50d6b2ffdc1ae91ee30e2704b47896aa325b42b58a2fcf65b","revision":0},{"source":"hackage","package":"hashable","version":"1.3.1.0","flags":["+integer-gmp"],"cabal_sha256":"d965e098e06cc585b201da6137dcb31c40f35eb7a937b833903969447985c076","src_sha256":"8061823a4ac521b53912edcba36b956f3159cb885b07ec119af295a6568ca7c4","revision":0},{"source":"hackage","package":"heaps","version":"0.4","flags":[],"cabal_sha256":"66b19fcd813b0e4db3e0bac541bd46606c3b13d3d081d9f9666f4be0f5ff14b8","src_sha256":"89329df8b95ae99ef272e41e7a2d0fe2f1bb7eacfcc34bc01664414b33067cfd","revision":0},{"source":"hackage","package":"js-dgtable","version":"0.5.2","flags":[],"cabal_sha256":"f75cb4fa53c88c65794becdd48eb0d3b2b8abd89a3d5c19e87af91f5225c15e4","src_sha256":"e28dd65bee8083b17210134e22e01c6349dc33c3b7bd17705973cd014e9f20ac","revision":0},{"source":"hackage","package":"js-flot","version":"0.8.3","flags":[],"cabal_sha256":"4c1c447a9a2fba0adba6d30678302a30c32b9dfde9e7aa9e9156483e1545096d","src_sha256":"1ba2f2a6b8d85da76c41f526c98903cbb107f8642e506c072c1e7e3c20fe5e7a","revision":0},{"source":"hackage","package":"js-jquery","version":"3.3.1","flags":[],"cabal_sha256":"59ab6c79159549ef94b584abce8e6d3b336014c2cce1337b59a8f637e2856df5","src_sha256":"e0e0681f0da1130ede4e03a051630ea439c458cb97216cdb01771ebdbe44069b","revision":0},{"source":"hackage","package":"primitive","version":"0.7.1.0","flags":[],"cabal_sha256":"29de6bfd0cf8ba023ceb806203dfbec0e51e3524e75ffe41056f70b4229c6f0f","src_sha256":"6bebecfdf2a57787d9fd5231bfd612b65a92edd7b33a973b2a0f11312b89a3f0","revision":3},{"source":"hackage","package":"unordered-containers","version":"0.2.13.0","flags":["-debug"],"cabal_sha256":"6310c636f92ed4908fdd0de582b6be31c2851c7b5f2ec14e9f416eb94df7a078","src_sha256":"86b01369ab8eb311383a052d389337e2cd71a63088323f02932754df4aa37b55","revision":0},{"source":"hackage","package":"utf8-string","version":"1.0.2","flags":[],"cabal_sha256":"79416292186feeaf1f60e49ac5a1ffae9bf1b120e040a74bf0e81ca7f1d31d3f","src_sha256":"ee48deada7600370728c4156cb002441de770d0121ae33a68139a9ed9c19b09a","revision":0},{"source":"hackage","package":"shake","version":"0.19.4","flags":["-cloud","-embed-files","-portable"],"cabal_sha256":"be81f7c69137e639812380047dfbbdd253ca536cc919504c3bc0f14517e80eb9","src_sha256":"5bae8873f628113604159f650802edb249dfbe5802c4612751f680ac987d73ee","revision":0},{"source":"local","package":"hadrian","version":"0.1.0.0","flags":["+threaded"],"cabal_sha256":null,"src_sha256":null,"revision":null}],"builtin":[{"package":"rts","version":"1.0"},{"package":"ghc-prim","version":"0.6.1"},{"package":"integer-gmp","version":"1.0.3.0"},{"package":"base","version":"4.14.1.0"},{"package":"array","version":"0.5.4.0"},{"package":"deepseq","version":"1.4.4.0"},{"package":"bytestring","version":"0.10.12.0"},{"package":"containers","version":"0.6.2.1"},{"package":"binary","version":"0.8.8.0"},{"package":"filepath","version":"1.4.2.1"},{"package":"time","version":"1.9.3"},{"package":"unix","version":"2.7.2.2"},{"package":"directory","version":"1.3.6.0"},{"package":"transformers","version":"0.5.6.2"},{"package":"mtl","version":"2.2.2"},{"package":"ghc-boot-th","version":"8.10.3"},{"package":"pretty","version":"1.1.3.6"},{"package":"template-haskell","version":"2.16.0.0"},{"package":"text","version":"1.2.4.1"},{"package":"parsec","version":"3.1.14.0"},{"package":"process","version":"1.6.9.0"},{"package":"Cabal","version":"3.2.1.0"}]}
\ No newline at end of file
diff --git a/hadrian/bootstrap/plan-bootstrap-8_10_4.json b/hadrian/bootstrap/plan-bootstrap-8_10_4.json
new file mode 100644
index 0000000000000000000000000000000000000000..12977226c62c32727b62235e82f40a5b2d0d32bd
--- /dev/null
+++ b/hadrian/bootstrap/plan-bootstrap-8_10_4.json
@@ -0,0 +1 @@
+{"dependencies":[{"source":"hackage","package":"splitmix","version":"0.1.0.3","flags":["-optimised-mixer"],"cabal_sha256":"fc3aae74c467f4b608050bef53aec17904a618731df9407e655d8f3bf8c32d5c","src_sha256":"46009f4b000c9e6613377767b8718bf38476469f2a8e2162d98cc246882d5a35","revision":0},{"source":"hackage","package":"random","version":"1.2.0","flags":[],"cabal_sha256":"195506fedaa7c31c1fa2a747e9b49b4a5d1f0b09dd8f1291f23a771656faeec3","src_sha256":"e4519cf7c058bfd5bdbe4acc782284acc9e25e74487208619ca83cbcd63fb9de","revision":6},{"source":"hackage","package":"QuickCheck","version":"2.14.2","flags":["-old-random","+templatehaskell"],"cabal_sha256":"4ce29211223d5e6620ebceba34a3ca9ccf1c10c0cf387d48aea45599222ee5aa","src_sha256":"d87b6c85696b601175274361fa62217894401e401e150c3c5d4013ac53cd36f3","revision":0},{"source":"hackage","package":"clock","version":"0.8.2","flags":["-llvm"],"cabal_sha256":"473ffd59765cc67634bdc55b63c699a85addf3a024089073ec2a862881e83e2a","src_sha256":"0b5db110c703e68b251d5883253a934b012110b45393fc65df1b095eb9a4e461","revision":0},{"source":"hackage","package":"extra","version":"1.7.9","flags":[],"cabal_sha256":"f1dec740f0f2025790c540732bfd52c556ec55bde4f5dfd7cf18e22bd44ff3d0","src_sha256":"f66e26a63b216f0ca33665a75c08eada0a96af192ace83a18d87839d79afdf9d","revision":0},{"source":"hackage","package":"filepattern","version":"0.1.2","flags":[],"cabal_sha256":"aec816ff25418d1b03ba75189e568f490eb86efc47f586d43363fa338e422e81","src_sha256":"d92912ee0db0b8c50d6b2ffdc1ae91ee30e2704b47896aa325b42b58a2fcf65b","revision":0},{"source":"hackage","package":"hashable","version":"1.3.1.0","flags":["+integer-gmp"],"cabal_sha256":"d965e098e06cc585b201da6137dcb31c40f35eb7a937b833903969447985c076","src_sha256":"8061823a4ac521b53912edcba36b956f3159cb885b07ec119af295a6568ca7c4","revision":0},{"source":"hackage","package":"heaps","version":"0.4","flags":[],"cabal_sha256":"66b19fcd813b0e4db3e0bac541bd46606c3b13d3d081d9f9666f4be0f5ff14b8","src_sha256":"89329df8b95ae99ef272e41e7a2d0fe2f1bb7eacfcc34bc01664414b33067cfd","revision":0},{"source":"hackage","package":"js-dgtable","version":"0.5.2","flags":[],"cabal_sha256":"f75cb4fa53c88c65794becdd48eb0d3b2b8abd89a3d5c19e87af91f5225c15e4","src_sha256":"e28dd65bee8083b17210134e22e01c6349dc33c3b7bd17705973cd014e9f20ac","revision":0},{"source":"hackage","package":"js-flot","version":"0.8.3","flags":[],"cabal_sha256":"4c1c447a9a2fba0adba6d30678302a30c32b9dfde9e7aa9e9156483e1545096d","src_sha256":"1ba2f2a6b8d85da76c41f526c98903cbb107f8642e506c072c1e7e3c20fe5e7a","revision":0},{"source":"hackage","package":"js-jquery","version":"3.3.1","flags":[],"cabal_sha256":"59ab6c79159549ef94b584abce8e6d3b336014c2cce1337b59a8f637e2856df5","src_sha256":"e0e0681f0da1130ede4e03a051630ea439c458cb97216cdb01771ebdbe44069b","revision":0},{"source":"hackage","package":"primitive","version":"0.7.1.0","flags":[],"cabal_sha256":"29de6bfd0cf8ba023ceb806203dfbec0e51e3524e75ffe41056f70b4229c6f0f","src_sha256":"6bebecfdf2a57787d9fd5231bfd612b65a92edd7b33a973b2a0f11312b89a3f0","revision":3},{"source":"hackage","package":"unordered-containers","version":"0.2.13.0","flags":["-debug"],"cabal_sha256":"6310c636f92ed4908fdd0de582b6be31c2851c7b5f2ec14e9f416eb94df7a078","src_sha256":"86b01369ab8eb311383a052d389337e2cd71a63088323f02932754df4aa37b55","revision":0},{"source":"hackage","package":"utf8-string","version":"1.0.2","flags":[],"cabal_sha256":"79416292186feeaf1f60e49ac5a1ffae9bf1b120e040a74bf0e81ca7f1d31d3f","src_sha256":"ee48deada7600370728c4156cb002441de770d0121ae33a68139a9ed9c19b09a","revision":0},{"source":"hackage","package":"shake","version":"0.19.4","flags":["-cloud","-embed-files","-portable"],"cabal_sha256":"be81f7c69137e639812380047dfbbdd253ca536cc919504c3bc0f14517e80eb9","src_sha256":"5bae8873f628113604159f650802edb249dfbe5802c4612751f680ac987d73ee","revision":0},{"source":"local","package":"hadrian","version":"0.1.0.0","flags":["+threaded"],"cabal_sha256":null,"src_sha256":null,"revision":null}],"builtin":[{"package":"rts","version":"1.0"},{"package":"ghc-prim","version":"0.6.1"},{"package":"integer-gmp","version":"1.0.3.0"},{"package":"base","version":"4.14.1.0"},{"package":"array","version":"0.5.4.0"},{"package":"deepseq","version":"1.4.4.0"},{"package":"bytestring","version":"0.10.12.0"},{"package":"containers","version":"0.6.2.1"},{"package":"binary","version":"0.8.8.0"},{"package":"filepath","version":"1.4.2.1"},{"package":"time","version":"1.9.3"},{"package":"unix","version":"2.7.2.2"},{"package":"directory","version":"1.3.6.0"},{"package":"transformers","version":"0.5.6.2"},{"package":"mtl","version":"2.2.2"},{"package":"ghc-boot-th","version":"8.10.4"},{"package":"pretty","version":"1.1.3.6"},{"package":"template-haskell","version":"2.16.0.0"},{"package":"text","version":"1.2.4.1"},{"package":"parsec","version":"3.1.14.0"},{"package":"process","version":"1.6.9.0"},{"package":"Cabal","version":"3.2.1.0"}]}
\ No newline at end of file
diff --git a/hadrian/bootstrap/plan-bootstrap-8_10_5.json b/hadrian/bootstrap/plan-bootstrap-8_10_5.json
new file mode 100644
index 0000000000000000000000000000000000000000..b978a67f840c5f2559127af395335836591afc29
--- /dev/null
+++ b/hadrian/bootstrap/plan-bootstrap-8_10_5.json
@@ -0,0 +1 @@
+{"dependencies":[{"source":"hackage","package":"splitmix","version":"0.1.0.3","flags":["-optimised-mixer"],"cabal_sha256":"fc3aae74c467f4b608050bef53aec17904a618731df9407e655d8f3bf8c32d5c","src_sha256":"46009f4b000c9e6613377767b8718bf38476469f2a8e2162d98cc246882d5a35","revision":0},{"source":"hackage","package":"random","version":"1.2.0","flags":[],"cabal_sha256":"195506fedaa7c31c1fa2a747e9b49b4a5d1f0b09dd8f1291f23a771656faeec3","src_sha256":"e4519cf7c058bfd5bdbe4acc782284acc9e25e74487208619ca83cbcd63fb9de","revision":6},{"source":"hackage","package":"QuickCheck","version":"2.14.2","flags":["-old-random","+templatehaskell"],"cabal_sha256":"4ce29211223d5e6620ebceba34a3ca9ccf1c10c0cf387d48aea45599222ee5aa","src_sha256":"d87b6c85696b601175274361fa62217894401e401e150c3c5d4013ac53cd36f3","revision":0},{"source":"hackage","package":"clock","version":"0.8.2","flags":["-llvm"],"cabal_sha256":"473ffd59765cc67634bdc55b63c699a85addf3a024089073ec2a862881e83e2a","src_sha256":"0b5db110c703e68b251d5883253a934b012110b45393fc65df1b095eb9a4e461","revision":0},{"source":"hackage","package":"extra","version":"1.7.9","flags":[],"cabal_sha256":"f1dec740f0f2025790c540732bfd52c556ec55bde4f5dfd7cf18e22bd44ff3d0","src_sha256":"f66e26a63b216f0ca33665a75c08eada0a96af192ace83a18d87839d79afdf9d","revision":0},{"source":"hackage","package":"filepattern","version":"0.1.2","flags":[],"cabal_sha256":"aec816ff25418d1b03ba75189e568f490eb86efc47f586d43363fa338e422e81","src_sha256":"d92912ee0db0b8c50d6b2ffdc1ae91ee30e2704b47896aa325b42b58a2fcf65b","revision":0},{"source":"hackage","package":"hashable","version":"1.3.1.0","flags":["+integer-gmp"],"cabal_sha256":"d965e098e06cc585b201da6137dcb31c40f35eb7a937b833903969447985c076","src_sha256":"8061823a4ac521b53912edcba36b956f3159cb885b07ec119af295a6568ca7c4","revision":0},{"source":"hackage","package":"heaps","version":"0.4","flags":[],"cabal_sha256":"66b19fcd813b0e4db3e0bac541bd46606c3b13d3d081d9f9666f4be0f5ff14b8","src_sha256":"89329df8b95ae99ef272e41e7a2d0fe2f1bb7eacfcc34bc01664414b33067cfd","revision":0},{"source":"hackage","package":"js-dgtable","version":"0.5.2","flags":[],"cabal_sha256":"f75cb4fa53c88c65794becdd48eb0d3b2b8abd89a3d5c19e87af91f5225c15e4","src_sha256":"e28dd65bee8083b17210134e22e01c6349dc33c3b7bd17705973cd014e9f20ac","revision":0},{"source":"hackage","package":"js-flot","version":"0.8.3","flags":[],"cabal_sha256":"4c1c447a9a2fba0adba6d30678302a30c32b9dfde9e7aa9e9156483e1545096d","src_sha256":"1ba2f2a6b8d85da76c41f526c98903cbb107f8642e506c072c1e7e3c20fe5e7a","revision":0},{"source":"hackage","package":"js-jquery","version":"3.3.1","flags":[],"cabal_sha256":"59ab6c79159549ef94b584abce8e6d3b336014c2cce1337b59a8f637e2856df5","src_sha256":"e0e0681f0da1130ede4e03a051630ea439c458cb97216cdb01771ebdbe44069b","revision":0},{"source":"hackage","package":"primitive","version":"0.7.1.0","flags":[],"cabal_sha256":"29de6bfd0cf8ba023ceb806203dfbec0e51e3524e75ffe41056f70b4229c6f0f","src_sha256":"6bebecfdf2a57787d9fd5231bfd612b65a92edd7b33a973b2a0f11312b89a3f0","revision":3},{"source":"hackage","package":"unordered-containers","version":"0.2.13.0","flags":["-debug"],"cabal_sha256":"6310c636f92ed4908fdd0de582b6be31c2851c7b5f2ec14e9f416eb94df7a078","src_sha256":"86b01369ab8eb311383a052d389337e2cd71a63088323f02932754df4aa37b55","revision":0},{"source":"hackage","package":"utf8-string","version":"1.0.2","flags":[],"cabal_sha256":"79416292186feeaf1f60e49ac5a1ffae9bf1b120e040a74bf0e81ca7f1d31d3f","src_sha256":"ee48deada7600370728c4156cb002441de770d0121ae33a68139a9ed9c19b09a","revision":0},{"source":"hackage","package":"shake","version":"0.19.4","flags":["-cloud","-embed-files","-portable"],"cabal_sha256":"be81f7c69137e639812380047dfbbdd253ca536cc919504c3bc0f14517e80eb9","src_sha256":"5bae8873f628113604159f650802edb249dfbe5802c4612751f680ac987d73ee","revision":0},{"source":"local","package":"hadrian","version":"0.1.0.0","flags":["+threaded"],"cabal_sha256":null,"src_sha256":null,"revision":null}],"builtin":[{"package":"rts","version":"1.0.1"},{"package":"ghc-prim","version":"0.6.1"},{"package":"integer-gmp","version":"1.0.3.0"},{"package":"base","version":"4.14.2.0"},{"package":"array","version":"0.5.4.0"},{"package":"deepseq","version":"1.4.4.0"},{"package":"bytestring","version":"0.10.12.0"},{"package":"containers","version":"0.6.4.1"},{"package":"binary","version":"0.8.8.0"},{"package":"filepath","version":"1.4.2.1"},{"package":"time","version":"1.9.3"},{"package":"unix","version":"2.7.2.2"},{"package":"directory","version":"1.3.6.0"},{"package":"transformers","version":"0.5.6.2"},{"package":"mtl","version":"2.2.2"},{"package":"ghc-boot-th","version":"8.10.5"},{"package":"pretty","version":"1.1.3.6"},{"package":"template-haskell","version":"2.16.0.0"},{"package":"text","version":"1.2.4.1"},{"package":"parsec","version":"3.1.14.0"},{"package":"process","version":"1.6.9.0"},{"package":"Cabal","version":"3.2.1.0"}]}
\ No newline at end of file
diff --git a/hadrian/bootstrap/plan-bootstrap-9_0_1.json b/hadrian/bootstrap/plan-bootstrap-9_0_1.json
new file mode 100644
index 0000000000000000000000000000000000000000..f166623da56387b58673178211b320fe7e29f035
--- /dev/null
+++ b/hadrian/bootstrap/plan-bootstrap-9_0_1.json
@@ -0,0 +1 @@
+{"dependencies":[{"source":"hackage","package":"splitmix","version":"0.1.0.3","flags":["-optimised-mixer"],"cabal_sha256":"fc3aae74c467f4b608050bef53aec17904a618731df9407e655d8f3bf8c32d5c","src_sha256":"46009f4b000c9e6613377767b8718bf38476469f2a8e2162d98cc246882d5a35","revision":0},{"source":"hackage","package":"random","version":"1.2.0","flags":[],"cabal_sha256":"195506fedaa7c31c1fa2a747e9b49b4a5d1f0b09dd8f1291f23a771656faeec3","src_sha256":"e4519cf7c058bfd5bdbe4acc782284acc9e25e74487208619ca83cbcd63fb9de","revision":6},{"source":"hackage","package":"QuickCheck","version":"2.14.2","flags":["-old-random","+templatehaskell"],"cabal_sha256":"4ce29211223d5e6620ebceba34a3ca9ccf1c10c0cf387d48aea45599222ee5aa","src_sha256":"d87b6c85696b601175274361fa62217894401e401e150c3c5d4013ac53cd36f3","revision":0},{"source":"hackage","package":"clock","version":"0.8.2","flags":["-llvm"],"cabal_sha256":"473ffd59765cc67634bdc55b63c699a85addf3a024089073ec2a862881e83e2a","src_sha256":"0b5db110c703e68b251d5883253a934b012110b45393fc65df1b095eb9a4e461","revision":0},{"source":"hackage","package":"extra","version":"1.7.9","flags":[],"cabal_sha256":"f1dec740f0f2025790c540732bfd52c556ec55bde4f5dfd7cf18e22bd44ff3d0","src_sha256":"f66e26a63b216f0ca33665a75c08eada0a96af192ace83a18d87839d79afdf9d","revision":0},{"source":"hackage","package":"filepattern","version":"0.1.2","flags":[],"cabal_sha256":"aec816ff25418d1b03ba75189e568f490eb86efc47f586d43363fa338e422e81","src_sha256":"d92912ee0db0b8c50d6b2ffdc1ae91ee30e2704b47896aa325b42b58a2fcf65b","revision":0},{"source":"hackage","package":"hashable","version":"1.3.1.0","flags":["+integer-gmp"],"cabal_sha256":"d965e098e06cc585b201da6137dcb31c40f35eb7a937b833903969447985c076","src_sha256":"8061823a4ac521b53912edcba36b956f3159cb885b07ec119af295a6568ca7c4","revision":0},{"source":"hackage","package":"heaps","version":"0.4","flags":[],"cabal_sha256":"66b19fcd813b0e4db3e0bac541bd46606c3b13d3d081d9f9666f4be0f5ff14b8","src_sha256":"89329df8b95ae99ef272e41e7a2d0fe2f1bb7eacfcc34bc01664414b33067cfd","revision":0},{"source":"hackage","package":"js-dgtable","version":"0.5.2","flags":[],"cabal_sha256":"f75cb4fa53c88c65794becdd48eb0d3b2b8abd89a3d5c19e87af91f5225c15e4","src_sha256":"e28dd65bee8083b17210134e22e01c6349dc33c3b7bd17705973cd014e9f20ac","revision":0},{"source":"hackage","package":"js-flot","version":"0.8.3","flags":[],"cabal_sha256":"4c1c447a9a2fba0adba6d30678302a30c32b9dfde9e7aa9e9156483e1545096d","src_sha256":"1ba2f2a6b8d85da76c41f526c98903cbb107f8642e506c072c1e7e3c20fe5e7a","revision":0},{"source":"hackage","package":"js-jquery","version":"3.3.1","flags":[],"cabal_sha256":"59ab6c79159549ef94b584abce8e6d3b336014c2cce1337b59a8f637e2856df5","src_sha256":"e0e0681f0da1130ede4e03a051630ea439c458cb97216cdb01771ebdbe44069b","revision":0},{"source":"hackage","package":"primitive","version":"0.7.1.0","flags":[],"cabal_sha256":"29de6bfd0cf8ba023ceb806203dfbec0e51e3524e75ffe41056f70b4229c6f0f","src_sha256":"6bebecfdf2a57787d9fd5231bfd612b65a92edd7b33a973b2a0f11312b89a3f0","revision":3},{"source":"hackage","package":"unordered-containers","version":"0.2.13.0","flags":["-debug"],"cabal_sha256":"6310c636f92ed4908fdd0de582b6be31c2851c7b5f2ec14e9f416eb94df7a078","src_sha256":"86b01369ab8eb311383a052d389337e2cd71a63088323f02932754df4aa37b55","revision":0},{"source":"hackage","package":"utf8-string","version":"1.0.2","flags":[],"cabal_sha256":"79416292186feeaf1f60e49ac5a1ffae9bf1b120e040a74bf0e81ca7f1d31d3f","src_sha256":"ee48deada7600370728c4156cb002441de770d0121ae33a68139a9ed9c19b09a","revision":0},{"source":"hackage","package":"shake","version":"0.19.4","flags":["-cloud","-embed-files","-portable"],"cabal_sha256":"be81f7c69137e639812380047dfbbdd253ca536cc919504c3bc0f14517e80eb9","src_sha256":"5bae8873f628113604159f650802edb249dfbe5802c4612751f680ac987d73ee","revision":0},{"source":"local","package":"hadrian","version":"0.1.0.0","flags":["+threaded"],"cabal_sha256":null,"src_sha256":null,"revision":null}],"builtin":[{"package":"rts","version":"1.0"},{"package":"ghc-prim","version":"0.7.0"},{"package":"ghc-bignum","version":"1.0"},{"package":"base","version":"4.15.0.0"},{"package":"array","version":"0.5.4.0"},{"package":"deepseq","version":"1.4.5.0"},{"package":"bytestring","version":"0.10.12.1"},{"package":"containers","version":"0.6.4.1"},{"package":"binary","version":"0.8.8.0"},{"package":"filepath","version":"1.4.2.1"},{"package":"time","version":"1.9.3"},{"package":"unix","version":"2.7.2.2"},{"package":"directory","version":"1.3.6.1"},{"package":"transformers","version":"0.5.6.2"},{"package":"mtl","version":"2.2.2"},{"package":"ghc-boot-th","version":"9.0.1"},{"package":"pretty","version":"1.1.3.6"},{"package":"template-haskell","version":"2.17.0.0"},{"package":"text","version":"1.2.4.1"},{"package":"parsec","version":"3.1.14.0"},{"package":"process","version":"1.6.11.0"},{"package":"Cabal","version":"3.4.0.0"}]}
\ No newline at end of file
diff --git a/hadrian/bootstrap/src/Main.hs b/hadrian/bootstrap/src/Main.hs
new file mode 100644
index 0000000000000000000000000000000000000000..c87383d7de3c1415efcc8e552644b5c8891c0250
--- /dev/null
+++ b/hadrian/bootstrap/src/Main.hs
@@ -0,0 +1,233 @@
+module Main (main) where
+
+import Control.Monad      (when)
+import Data.Either        (partitionEithers)
+import Data.Foldable      (for_, traverse_)
+import Data.Maybe         (listToMaybe)
+import Data.String        (fromString)
+import Data.Traversable   (for)
+import System.Environment (getArgs)
+import System.Exit        (exitFailure)
+import System.IO          (hPutStrLn, stderr)
+
+import qualified Data.Text as T
+import qualified Cabal.Index                    as I
+import qualified Cabal.Plan                     as P
+import qualified Data.Aeson                     as A
+import qualified Data.ByteString.Lazy           as LBS
+import qualified Data.Map.Strict                as Map
+import qualified Data.Set                       as Set
+import qualified Distribution.Types.PackageName as C
+import qualified Distribution.Types.Version as C
+import qualified Topograph                      as TG
+
+-------------------------------------------------------------------------------
+-- Main
+-------------------------------------------------------------------------------
+
+main :: IO ()
+main = do
+    args <- getArgs
+    case args of
+        [fp] -> main1 fp
+        _    -> die "Usage: hadrian-bootstrap-gen plan.json"
+
+main1 :: FilePath -> IO ()
+main1 planPath = do
+    meta <- I.cachedHackageMetadata
+    plan <- P.decodePlanJson planPath
+    main2 meta plan
+
+main2 :: Map.Map C.PackageName I.PackageInfo -> P.PlanJson -> IO ()
+main2 meta plan = do
+    info $ show $ Map.keys $ P.pjUnits plan
+
+    -- find hadrian-install:exe:hadrian unit
+    (hadrianUid, hadrianUnit) <- case findHadrianExe plan of
+        Just x  -> return x
+        Nothing -> die "Cannot find hadrian:exe unit"
+
+    info $ "hadrian:exe unit " ++ show hadrianUid
+
+    -- BFS from hadrian unit, getting all dependencies
+    units <- bfs plan hadrianUnit
+
+    info $ "Unit order:"
+    for_ units $ \unit -> do
+        info $ " - " ++ show (P.uId unit)
+
+    (builtin, deps) <- fmap partitionEithers $ for units $ \unit -> do
+        let P.PkgId pkgname@(P.PkgName tpkgname) ver@(P.Ver verdigits) = P.uPId unit
+
+        let uid = P.uId unit
+
+        let cpkgname :: C.PackageName
+            cpkgname = C.mkPackageName (T.unpack tpkgname)
+
+        let cversion :: C.Version
+            cversion = C.mkVersion verdigits
+
+        case P.uType unit of
+            P.UnitTypeBuiltin ->
+                return $ Left Builtin
+                  { builtinPackageName = pkgname
+                  , builtinVersion     = ver
+                  }
+
+            _ -> do
+                (src, rev, revhash) <- case P.uSha256 unit of
+                    Just _  -> do
+                        pkgInfo <- maybe (die $ "Cannot find " ++ show uid ++ " package metadata") return $
+                            Map.lookup cpkgname meta
+                        relInfo <- maybe (die $ "Cannot find " ++ show uid ++ " version metadata") return $
+                            Map.lookup cversion $ I.piVersions pkgInfo
+
+                        return
+                            ( Hackage
+                            , Just $ fromIntegral (I.riRevision relInfo)
+                            , P.sha256FromByteString $ I.getSHA256 $ I.riCabal relInfo
+                            )
+
+                    Nothing -> case P.uType unit of
+                        P.UnitTypeLocal   -> return (Local, Nothing, Nothing)
+                        t                 -> die $ "Unit of wrong type " ++ show uid ++ " " ++ show t
+
+                return $ Right Dep
+                    { depPackageName = pkgname
+                    , depVersion     = ver
+                    , depSource      = src
+                    , depSrcHash     = P.uSha256 unit
+                    , depRevision    = rev
+                    , depRevHash     = revhash
+                    , depFlags       =
+                        [ (if fval then "+" else "-") ++ T.unpack fname
+                        | (P.FlagName fname, fval) <- Map.toList (P.uFlags unit)
+                        ]
+                    }
+
+    LBS.putStr $ A.encode Result
+        { resBuiltin      = builtin
+        , resDependencies = deps
+        }
+
+bfs :: P.PlanJson -> P.Unit -> IO [P.Unit]
+bfs plan unit0 = do
+    uids <- either (\loop -> die $ "Loop in install-plan " ++ show loop) id $ TG.runG am $ \g -> do
+        v <- maybe (die "Cannot find hadrian-install unit in topograph") return $
+            TG.gToVertex g $ P.uId unit0
+
+        let t = TG.dfs g v
+
+        return $ map (TG.gFromVertex g) $
+            -- nub and sort
+            reverse $ Set.toList $ Set.fromList $ concat t
+
+    for uids $ \uid -> do
+        unit <- lookupUnit units uid
+        case Map.toList (P.uComps unit) of
+            [(_, compinfo)] -> checkExeDeps uid (P.pjUnits plan) (P.ciExeDeps compinfo)
+            _               -> die $ "Unit with multiple components " ++ show uid
+        return unit
+
+  where
+    am :: Map.Map P.UnitId (Set.Set P.UnitId)
+    am = fmap (foldMap P.ciLibDeps . P.uComps) units
+
+    units = P.pjUnits plan
+
+checkExeDeps :: P.UnitId -> Map.Map P.UnitId P.Unit -> Set.Set P.UnitId -> IO ()
+checkExeDeps pkgUid units = traverse_ check . Set.toList where
+    check uid = do
+        unit <- lookupUnit units uid
+        let P.PkgId pkgname _ = P.uPId unit
+        when (pkgname /= P.PkgName (fromString "hsc2hs")) $ do
+            die $ "unit " ++ show pkgUid ++ " depends on executable " ++ show uid
+
+lookupUnit :: Map.Map P.UnitId P.Unit -> P.UnitId -> IO P.Unit
+lookupUnit units uid
+    = maybe (die $ "Cannot find unit " ++ show uid) return
+    $ Map.lookup uid units
+
+-------------------------------------------------------------------------------
+-- Data
+-------------------------------------------------------------------------------
+
+data Result = Result
+    { resBuiltin      :: [Builtin]
+    , resDependencies :: [Dep]
+    }
+  deriving (Show)
+
+data Builtin = Builtin
+    { builtinPackageName :: P.PkgName
+    , builtinVersion     :: P.Ver
+    }
+  deriving (Show)
+
+data Dep = Dep
+    { depPackageName :: P.PkgName
+    , depVersion     :: P.Ver
+    , depSource      :: SrcType
+    , depSrcHash     :: Maybe P.Sha256
+    , depRevision    :: Maybe Int
+    , depRevHash     :: Maybe P.Sha256
+    , depFlags       :: [String]
+    }
+  deriving (Show)
+
+data SrcType
+    = Hackage
+    | Local
+  deriving (Show)
+
+instance A.ToJSON Result where
+    toJSON res = A.object
+        [ fromString "builtin"      A..= resBuiltin res
+        , fromString "dependencies" A..= resDependencies res
+        ]
+
+instance A.ToJSON Builtin where
+    toJSON b = A.object
+        [ fromString "package"      A..= builtinPackageName b
+        , fromString "version"      A..= builtinVersion b
+        ]
+
+instance A.ToJSON Dep where
+    toJSON dep = A.object
+        [ fromString "package"      A..= depPackageName dep
+        , fromString "version"      A..= depVersion dep
+        , fromString "source"       A..= depSource dep
+        , fromString "src_sha256"   A..= depSrcHash dep
+        , fromString "revision"     A..= depRevision dep
+        , fromString "cabal_sha256" A..= depRevHash dep
+        , fromString "flags"        A..= depFlags dep
+        ]
+
+instance A.ToJSON SrcType where
+    toJSON Hackage     = fromString "hackage"
+    toJSON Local       = fromString "local"
+
+-------------------------------------------------------------------------------
+-- Utilities
+-------------------------------------------------------------------------------
+
+info :: String -> IO ()
+info msg = hPutStrLn stderr $ "INFO: " ++ msg
+
+die :: String -> IO a
+die msg = do
+    hPutStrLn stderr msg
+    exitFailure
+
+-------------------------------------------------------------------------------
+-- Pure bits
+-------------------------------------------------------------------------------
+
+findHadrianExe :: P.PlanJson -> Maybe (P.UnitId, P.Unit)
+findHadrianExe plan = listToMaybe
+    [ (uid, unit)
+    | (uid, unit) <- Map.toList (P.pjUnits plan)
+    , let P.PkgId pkgname _ = P.uPId unit
+    , pkgname == P.PkgName (fromString "hadrian")
+    , Map.keys (P.uComps unit) == [P.CompNameExe (fromString "hadrian")]
+    ]