Full Code of Microsoft/Ironclad for AI

main 2fe4dcdc323b cached
1364 files
33.5 MB
4.6M tokens
4280 symbols
1 requests
Copy disabled (too large) Download .txt
Showing preview only (18,210K chars total). Download the full file to get everything.
Repository: Microsoft/Ironclad
Branch: main
Commit: 2fe4dcdc323b
Files: 1364
Total size: 33.5 MB

Directory structure:
gitextract_3960jfld/

├── .gitignore
├── LICENSE
├── README.md
├── SECURITY.md
├── ironclad-apps/
│   ├── .gitignore
│   ├── IRONROOT.sentinel
│   ├── README.md
│   ├── boot/
│   │   ├── boot-cp.cmd
│   │   ├── bootd.pdb
│   │   └── boothosts.txt
│   ├── build-tools.ps1
│   ├── def.ps1
│   ├── env.ps1
│   ├── makefile
│   ├── src/
│   │   ├── Checked/
│   │   │   ├── BootLoader/
│   │   │   │   └── SingLdrPc/
│   │   │   │       ├── .gitignore
│   │   │   │       ├── bl.h
│   │   │   │       ├── bl.inc
│   │   │   │       ├── blacpi.cpp
│   │   │   │       ├── blcdrom.cpp
│   │   │   │       ├── blcom.cpp
│   │   │   │       ├── blentry.cpp
│   │   │   │       ├── blentry16.asm
│   │   │   │       ├── blfat.cpp
│   │   │   │       ├── blflash.cpp
│   │   │   │       ├── blkd.cpp
│   │   │   │       ├── blkd1394.cpp
│   │   │   │       ├── blkd1394.h
│   │   │   │       ├── blkdcom.cpp
│   │   │   │       ├── blmm.cpp
│   │   │   │       ├── blmps.cpp
│   │   │   │       ├── blpci.cpp
│   │   │   │       ├── blpecoff.cpp
│   │   │   │       ├── blpnp.cpp
│   │   │   │       ├── blpool.cpp
│   │   │   │       ├── blpxe.cpp
│   │   │   │       ├── blsingularity.cpp
│   │   │   │       ├── blsmap.cpp
│   │   │   │       ├── blstring.cpp
│   │   │   │       ├── bltrap.cpp
│   │   │   │       ├── blutil.cpp
│   │   │   │       ├── blvesa.cpp
│   │   │   │       ├── blvideo.cpp
│   │   │   │       ├── makefile
│   │   │   │       ├── platform.h
│   │   │   │       ├── tpm/
│   │   │   │       │   ├── aik.cpp
│   │   │   │       │   └── aik.h
│   │   │   │       └── x86/
│   │   │   │           ├── blcrtasm.asm
│   │   │   │           ├── blidt.asm
│   │   │   │           ├── blioport.asm
│   │   │   │           ├── bllegacy.asm
│   │   │   │           └── blutilasm.asm
│   │   │   ├── Libraries/
│   │   │   │   └── DafnyCC/
│   │   │   │       ├── Base.dfy
│   │   │   │       └── Seq.dfy
│   │   │   └── Nucleus/
│   │   │       ├── Base/
│   │   │       │   ├── BitVectorLemmasBase.ifc.beat
│   │   │       │   ├── BitVectorLemmasBase.imp.beat
│   │   │       │   ├── Core.ifc.beat
│   │   │       │   ├── Core.imp.beat
│   │   │       │   ├── Instructions.ifc.beat
│   │   │       │   ├── Instructions.imp.beat
│   │   │       │   ├── IntLemmasBase.ifc.beat
│   │   │       │   ├── IntLemmasBase.imp.beat
│   │   │       │   ├── LogicalAddressing.ifc.beat
│   │   │       │   ├── LogicalAddressing.imp.beat
│   │   │       │   ├── Overflow.imp.beat
│   │   │       │   ├── Partition.ifc.beat
│   │   │       │   ├── Partition.imp.beat
│   │   │       │   ├── Separation.ifc.beat
│   │   │       │   ├── Separation.imp.beat
│   │   │       │   ├── Stacks.ifc.beat
│   │   │       │   ├── Stacks.imp.beat
│   │   │       │   ├── Util.ifc.beat
│   │   │       │   └── Util.imp.beat
│   │   │       ├── Devices/
│   │   │       │   ├── BitVectorLemmasDevices.ifc.beat
│   │   │       │   ├── BitVectorLemmasDevices.imp.beat
│   │   │       │   ├── IntLemmasDevices.ifc.beat
│   │   │       │   ├── IntLemmasDevices.imp.beat
│   │   │       │   ├── IntelNIC.ifc.beat
│   │   │       │   ├── IntelNIC.imp.beat
│   │   │       │   ├── IoMain.ifc.beat
│   │   │       │   ├── IoMain.imp.beat
│   │   │       │   ├── PCI.ifc.beat
│   │   │       │   └── PCI.imp.beat
│   │   │       ├── GC/
│   │   │       │   ├── BitVectorLemmasGc.ifc.beat
│   │   │       │   ├── BitVectorLemmasGc.imp.beat
│   │   │       │   ├── IntLemmasGc.ifc.beat
│   │   │       │   ├── IntLemmasGc.imp.beat
│   │   │       │   ├── SimpleCollector.ifc.beat
│   │   │       │   ├── SimpleCollector.imp.beat
│   │   │       │   ├── SimpleCommon.ifc.beat
│   │   │       │   ├── SimpleCommon.imp.beat
│   │   │       │   ├── SimpleGc.ifc.beat
│   │   │       │   ├── SimpleGcMemory.ifc.beat
│   │   │       │   └── SimpleGcMemory.imp.beat
│   │   │       └── Main/
│   │   │           ├── BitVectorLemmasMain.ifc.beat
│   │   │           ├── BitVectorLemmasMain.imp.beat
│   │   │           ├── Cube.ifc.beat
│   │   │           ├── DafnyAssembly.ifc.beat
│   │   │           ├── DafnyAssembly.imp.beat
│   │   │           ├── Entry.imp.beat
│   │   │           ├── IntLemmasMain.ifc.beat
│   │   │           ├── IntLemmasMain.imp.beat
│   │   │           ├── Main.ifc.beat
│   │   │           ├── axiom.whitelist
│   │   │           ├── dafny_FatNatX86_i.imp.beat
│   │   │           ├── dafny_FatNatX86big_i.imp.beat
│   │   │           ├── dafny_FleetNatMulLoopOpt_i.imp.beat
│   │   │           ├── dafny_FleetNatMulOpt_i.imp.beat
│   │   │           ├── dafny_assembly_i.imp.beat
│   │   │           ├── dafny_bit_vector_lemmas_i.imp.beat
│   │   │           ├── dafny_io_mem_i.imp.beat
│   │   │           ├── dafny_pci_i.imp.beat
│   │   │           ├── dafny_sha256opt2_i.imp.beat
│   │   │           ├── dafny_sha256opt_i.imp.basm
│   │   │           ├── mul_plan.txt
│   │   │           ├── sha256opt2.plan
│   │   │           └── sha256opt2.plan2
│   │   ├── Clients/
│   │   │   ├── Benchmark/
│   │   │   │   ├── BenchSpec.py
│   │   │   │   ├── BenchmarkAnalyzer.py
│   │   │   │   ├── BenchmarkDriver.py
│   │   │   │   ├── BenchmarkRequestCmd/
│   │   │   │   │   ├── App.config
│   │   │   │   │   ├── BenchmarkRequestCmd.csproj
│   │   │   │   │   ├── GlobalSuppressions.cs
│   │   │   │   │   ├── Program.cs
│   │   │   │   │   └── Properties/
│   │   │   │   │       └── AssemblyInfo.cs
│   │   │   │   ├── BenchmarkRequestGui/
│   │   │   │   │   ├── App.config
│   │   │   │   │   ├── App.xaml
│   │   │   │   │   ├── App.xaml.cs
│   │   │   │   │   ├── BenchmarkRequestGui.csproj
│   │   │   │   │   ├── GlobalSuppressions.cs
│   │   │   │   │   ├── MainWindow.xaml
│   │   │   │   │   ├── MainWindow.xaml.cs
│   │   │   │   │   └── Properties/
│   │   │   │   │       ├── AssemblyInfo.cs
│   │   │   │   │       ├── Resources.Designer.cs
│   │   │   │   │       ├── Resources.resx
│   │   │   │   │       ├── Settings.Designer.cs
│   │   │   │   │       └── Settings.settings
│   │   │   │   ├── Communication/
│   │   │   │   │   ├── BenchmarkList.cs
│   │   │   │   │   ├── Communication.csproj
│   │   │   │   │   ├── Connection.cs
│   │   │   │   │   ├── GlobalSuppressions.cs
│   │   │   │   │   ├── Properties/
│   │   │   │   │   │   └── AssemblyInfo.cs
│   │   │   │   │   ├── Request.cs
│   │   │   │   │   └── Response.cs
│   │   │   │   ├── TestEcho.py
│   │   │   │   └── notes
│   │   │   ├── Benchmark.sln
│   │   │   ├── Clients.sln
│   │   │   ├── Common/
│   │   │   │   ├── Common.cs
│   │   │   │   ├── Common.csproj
│   │   │   │   ├── CommonParams.cs
│   │   │   │   ├── GetQuote.cs
│   │   │   │   ├── Profiler.cs
│   │   │   │   └── Properties/
│   │   │   │       └── AssemblyInfo.cs
│   │   │   ├── DiffPriv/
│   │   │   │   ├── App.config
│   │   │   │   ├── DiffPriv.csproj
│   │   │   │   ├── DiffPrivRequests.cs
│   │   │   │   ├── DiffPrivResponses.cs
│   │   │   │   ├── Parameters.cs
│   │   │   │   ├── Program.cs
│   │   │   │   ├── Properties/
│   │   │   │   │   └── AssemblyInfo.cs
│   │   │   │   └── Rational.cs
│   │   │   ├── DiffPrivSrv/
│   │   │   │   ├── App.config
│   │   │   │   ├── BigRational.cs
│   │   │   │   ├── DiffPrivRequest.cs
│   │   │   │   ├── DiffPrivResponse.cs
│   │   │   │   ├── DiffPrivSrv.csproj
│   │   │   │   ├── Parameters.cs
│   │   │   │   ├── Program.cs
│   │   │   │   ├── Properties/
│   │   │   │   │   └── AssemblyInfo.cs
│   │   │   │   └── StateMachine.cs
│   │   │   ├── DotNetSHABench/
│   │   │   │   ├── App.config
│   │   │   │   ├── DotNetSHABench.csproj
│   │   │   │   ├── Parameters.cs
│   │   │   │   ├── Program.cs
│   │   │   │   └── Properties/
│   │   │   │       └── AssemblyInfo.cs
│   │   │   ├── Notary/
│   │   │   │   ├── App.config
│   │   │   │   ├── Notary.csproj
│   │   │   │   ├── NotaryRequests.cs
│   │   │   │   ├── NotaryResponses.cs
│   │   │   │   ├── Parameters.cs
│   │   │   │   ├── Program.cs
│   │   │   │   └── Properties/
│   │   │   │       └── AssemblyInfo.cs
│   │   │   ├── NotarySrv/
│   │   │   │   ├── App.config
│   │   │   │   ├── NotaryRequest.cs
│   │   │   │   ├── NotaryResponse.cs
│   │   │   │   ├── NotarySrv.csproj
│   │   │   │   ├── Parameters.cs
│   │   │   │   ├── Program.cs
│   │   │   │   ├── Properties/
│   │   │   │   │   └── AssemblyInfo.cs
│   │   │   │   └── StateMachine.cs
│   │   │   ├── PassHash/
│   │   │   │   ├── App.config
│   │   │   │   ├── Parameters.cs
│   │   │   │   ├── PassHash.csproj
│   │   │   │   ├── PassHashRequests.cs
│   │   │   │   ├── PassHashResponses.cs
│   │   │   │   ├── Program.cs
│   │   │   │   └── Properties/
│   │   │   │       └── AssemblyInfo.cs
│   │   │   ├── PassHashSrv/
│   │   │   │   ├── App.config
│   │   │   │   ├── Parameters.cs
│   │   │   │   ├── PassHashRequest.cs
│   │   │   │   ├── PassHashResponse.cs
│   │   │   │   ├── PassHashSrv.csproj
│   │   │   │   ├── Program.cs
│   │   │   │   ├── Properties/
│   │   │   │   │   └── AssemblyInfo.cs
│   │   │   │   └── StateMachine.cs
│   │   │   ├── TrInc/
│   │   │   │   ├── App.config
│   │   │   │   ├── Parameters.cs
│   │   │   │   ├── Program.cs
│   │   │   │   ├── Properties/
│   │   │   │   │   └── AssemblyInfo.cs
│   │   │   │   ├── TrInc.csproj
│   │   │   │   ├── TrIncRequests.cs
│   │   │   │   └── TrIncResponses.cs
│   │   │   ├── TrIncSrv/
│   │   │   │   ├── App.config
│   │   │   │   ├── Parameters.cs
│   │   │   │   ├── Program.cs
│   │   │   │   ├── Properties/
│   │   │   │   │   └── AssemblyInfo.cs
│   │   │   │   ├── StateMachine.cs
│   │   │   │   ├── TrIncRequest.cs
│   │   │   │   ├── TrIncResponse.cs
│   │   │   │   └── TrIncSrv.csproj
│   │   │   ├── UdpEchoClient/
│   │   │   │   ├── App.config
│   │   │   │   ├── Program.cs
│   │   │   │   ├── Properties/
│   │   │   │   │   └── AssemblyInfo.cs
│   │   │   │   └── UdpEchoClient.csproj
│   │   │   └── UdpEchoClient.sln
│   │   ├── Dafny/
│   │   │   ├── .gitignore
│   │   │   ├── Apps/
│   │   │   │   ├── .gitignore
│   │   │   │   ├── AddPerf/
│   │   │   │   │   └── Main.i.dfy
│   │   │   │   ├── AppLoader/
│   │   │   │   │   └── Main.i.dfy
│   │   │   │   ├── BenchmarkApp/
│   │   │   │   │   └── Main.i.dfy
│   │   │   │   ├── BenchmarkService/
│   │   │   │   │   ├── BenchmarkCore.i.dfy
│   │   │   │   │   ├── BenchmarkList.i.dfy
│   │   │   │   │   ├── Main.i.dfy
│   │   │   │   │   └── Protocol.i.dfy
│   │   │   │   ├── Common/
│   │   │   │   │   ├── .gitignore
│   │   │   │   │   ├── CommonState.i.dfy
│   │   │   │   │   └── CommonState.s.dfy
│   │   │   │   ├── DafnyCCTest/
│   │   │   │   │   └── Main.i.dfy
│   │   │   │   ├── DiffPriv/
│   │   │   │   │   ├── .gitignore
│   │   │   │   │   ├── Database.s.dfy
│   │   │   │   │   ├── DiffPriv.i.dfy
│   │   │   │   │   ├── DiffPriv.s.dfy
│   │   │   │   │   ├── DiffPrivPerformQuery.i.dfy
│   │   │   │   │   ├── ErrorCodes.i.dfy
│   │   │   │   │   ├── Main.i.dfy
│   │   │   │   │   ├── Mapper.i.dfy
│   │   │   │   │   ├── Mapper.s.dfy
│   │   │   │   │   ├── Math.s.dfy
│   │   │   │   │   ├── Noise.i.dfy
│   │   │   │   │   ├── Noise.s.dfy
│   │   │   │   │   ├── PacketParsing.c.dfy
│   │   │   │   │   ├── PacketParsing.i.dfy
│   │   │   │   │   ├── RelationalProperties.i.dfy
│   │   │   │   │   ├── StateMachine.i.dfy
│   │   │   │   │   ├── StateMachine.s.dfy
│   │   │   │   │   ├── StateMachine2.i.dfy
│   │   │   │   │   ├── SumReducer.i.dfy
│   │   │   │   │   └── SumReducer.s.dfy
│   │   │   │   ├── EtherTest/
│   │   │   │   │   └── EtherTest.i.dfy
│   │   │   │   ├── Notary/
│   │   │   │   │   ├── .gitignore
│   │   │   │   │   ├── Main.i.dfy
│   │   │   │   │   ├── MainOneStep.i.dfy
│   │   │   │   │   ├── Notary.i.dfy
│   │   │   │   │   ├── Notary.s.dfy
│   │   │   │   │   ├── PacketParsing.c.dfy
│   │   │   │   │   ├── PacketParsing.i.dfy
│   │   │   │   │   ├── StateMachine.i.dfy
│   │   │   │   │   └── StateMachine.s.dfy
│   │   │   │   ├── PassHash/
│   │   │   │   │   ├── Main.i.dfy
│   │   │   │   │   ├── PacketParsing.c.dfy
│   │   │   │   │   ├── PacketParsing.i.dfy
│   │   │   │   │   ├── PassHash.i.dfy
│   │   │   │   │   ├── PassHash.s.dfy
│   │   │   │   │   └── StateMachine.s.dfy
│   │   │   │   ├── TPMTest/
│   │   │   │   │   └── TPMTest.i.dfy
│   │   │   │   ├── TrInc/
│   │   │   │   │   ├── .gitignore
│   │   │   │   │   ├── Main.i.dfy
│   │   │   │   │   ├── PacketParsing.c.dfy
│   │   │   │   │   ├── PacketParsing.i.dfy
│   │   │   │   │   ├── StateMachine.i.dfy
│   │   │   │   │   ├── StateMachine.s.dfy
│   │   │   │   │   ├── TrInc.i.dfy
│   │   │   │   │   └── TrInc.s.dfy
│   │   │   │   ├── UdpEchoService/
│   │   │   │   │   └── UdpEchoService.i.dfy
│   │   │   │   └── apps.dfy.batch
│   │   │   ├── BuildExceptions.py
│   │   │   ├── Drivers/
│   │   │   │   ├── .gitignore
│   │   │   │   ├── CPU/
│   │   │   │   │   ├── assembly.i.dfy
│   │   │   │   │   ├── assembly.s.dfy
│   │   │   │   │   └── assembly_premium.i.dfy
│   │   │   │   ├── IO/
│   │   │   │   │   ├── io_mem.i.dfy
│   │   │   │   │   ├── io_mem.s.dfy
│   │   │   │   │   └── pci.i.dfy
│   │   │   │   ├── Network/
│   │   │   │   │   ├── .gitignore
│   │   │   │   │   └── Intel/
│   │   │   │   │       ├── .gitignore
│   │   │   │   │       └── driver.i.dfy
│   │   │   │   └── TPM/
│   │   │   │       ├── .gitignore
│   │   │   │       ├── tpm-device.s.dfy
│   │   │   │       ├── tpm-device.s.dfy.disabled
│   │   │   │       ├── tpm-driver.i.dfy
│   │   │   │       ├── tpm-wrapper-randoms.i.dfy
│   │   │   │       └── tpm-wrapper.i.dfy
│   │   │   └── Libraries/
│   │   │       ├── .gitignore
│   │   │       ├── BigNum/
│   │   │       │   ├── .gitignore
│   │   │       │   ├── BigNatAdd.i.dfy
│   │   │       │   ├── BigNatBitCount.i.dfy
│   │   │       │   ├── BigNatBitwise.i.dfy
│   │   │       │   ├── BigNatCompare.i.dfy
│   │   │       │   ├── BigNatCore.i.dfy
│   │   │       │   ├── BigNatDiv.i.dfy
│   │   │       │   ├── BigNatMod.i.dfy
│   │   │       │   ├── BigNatMul.i.dfy
│   │   │       │   ├── BigNatPartial.i.dfy
│   │   │       │   ├── BigNatRandom.i.dfy
│   │   │       │   ├── BigNatSub.i.dfy
│   │   │       │   ├── BigNatTestLib.i.dfy
│   │   │       │   ├── BigNatX86Shim.i.dfy
│   │   │       │   ├── BigNum.i.dfy
│   │   │       │   ├── BigNumBEAdaptor.i.dfy
│   │   │       │   ├── BigRat.i.dfy
│   │   │       │   └── Word32.i.dfy
│   │   │       ├── Crypto/
│   │   │       │   ├── .gitignore
│   │   │       │   ├── Hash/
│   │   │       │   │   ├── .gitignore
│   │   │       │   │   ├── Digest.i.dfy
│   │   │       │   │   ├── Digest.s.dfy
│   │   │       │   │   ├── hmac_common.i.dfy
│   │   │       │   │   ├── hmac_common.s.dfy
│   │   │       │   │   ├── sha1.i.dfy
│   │   │       │   │   ├── sha1.s.dfy
│   │   │       │   │   ├── sha1_hmac.i.dfy
│   │   │       │   │   ├── sha256.i.dfy
│   │   │       │   │   ├── sha256.s.dfy
│   │   │       │   │   ├── sha256_hmac.i.dfy
│   │   │       │   │   ├── sha256common.i.dfy
│   │   │       │   │   ├── sha256opt.i.dfy
│   │   │       │   │   ├── sha256opt2.i.dfy
│   │   │       │   │   ├── sha_common.i.dfy
│   │   │       │   │   ├── sha_common.s.dfy
│   │   │       │   │   ├── sha_padding.i.dfy
│   │   │       │   │   └── sha_test.i.dfy
│   │   │       │   ├── RSA/
│   │   │       │   │   ├── .gitignore
│   │   │       │   │   ├── BlockEncoding.i.dfy
│   │   │       │   │   ├── ByteSequences.i.dfy
│   │   │       │   │   ├── Extended_GCD.i.dfy
│   │   │       │   │   ├── KeyGen.i.dfy
│   │   │       │   │   ├── KeyGen.s.dfy
│   │   │       │   │   ├── KeyImpl.i.dfy
│   │   │       │   │   ├── KeybitsLength.i.dfy
│   │   │       │   │   ├── MillerRabin.i.dfy
│   │   │       │   │   ├── MillerRabin.s.dfy
│   │   │       │   │   ├── MultiplicativeInverse.i.dfy
│   │   │       │   │   ├── OAEP.i.dfy
│   │   │       │   │   ├── OAEP.s.dfy
│   │   │       │   │   ├── PSS.s.dfy
│   │   │       │   │   ├── RSA.i.dfy
│   │   │       │   │   ├── RSADigestedSign.i.dfy
│   │   │       │   │   ├── RSAOps.i.dfy
│   │   │       │   │   ├── RSAPublicWrapper.i.dfy
│   │   │       │   │   ├── RSASpec.s.dfy
│   │   │       │   │   ├── RSA_Decrypt.i.dfy
│   │   │       │   │   ├── division.i.dfy
│   │   │       │   │   ├── rfc4251.s.dfy
│   │   │       │   │   ├── rfc4251decode.i.dfy
│   │   │       │   │   └── rfc4251impl.i.dfy
│   │   │       │   ├── RandomNumberGen.s.dfy
│   │   │       │   └── RandomTracing.s.dfy
│   │   │       ├── FatNat/
│   │   │       │   ├── BigNatToFatNatAdaptor.i.dfy
│   │   │       │   ├── Bitwise.i.dfy
│   │   │       │   ├── CanonicalArrays.i.dfy
│   │   │       │   ├── FatInt.i.dfy
│   │   │       │   ├── FatNatAdd.i.dfy
│   │   │       │   ├── FatNatAddLemmas.i.dfy
│   │   │       │   ├── FatNatAddUnrolled.i.dfy
│   │   │       │   ├── FatNatCommon.i.dfy
│   │   │       │   ├── FatNatCompare.i.dfy
│   │   │       │   ├── FatNatDiv.i.dfy
│   │   │       │   ├── FatNatDivDefs.i.dfy
│   │   │       │   ├── FatNatDivEstDiv32.i.dfy
│   │   │       │   ├── FatNatDivEstTrivial.i.dfy
│   │   │       │   ├── FatNatMod.i.dfy
│   │   │       │   ├── FatNatModesty.i.dfy
│   │   │       │   ├── FatNatMul.i.dfy
│   │   │       │   ├── FatNatRandom.i.dfy
│   │   │       │   ├── FatNatReciprocal.i.dfy
│   │   │       │   ├── FatNatSub.i.dfy
│   │   │       │   ├── FatNatX86.i.dfy
│   │   │       │   ├── FatNatX86big.i.dfy
│   │   │       │   ├── Transforms.i.dfy
│   │   │       │   └── WordBoundHack.i.dfy
│   │   │       ├── FleetNat/
│   │   │       │   ├── Bizarre.dfy
│   │   │       │   ├── FleetNatAdd.i.dfy
│   │   │       │   ├── FleetNatCommon.i.dfy
│   │   │       │   ├── FleetNatMul.i.dfy
│   │   │       │   ├── FleetNatMulLemmas.i.dfy
│   │   │       │   ├── FleetNatMulLoopOpt.i.dfy
│   │   │       │   ├── FleetNatMulLoopOptLemmas.i.dfy
│   │   │       │   ├── FleetNatMulOpt.i.dfy
│   │   │       │   ├── FleetNatSub.i.dfy
│   │   │       │   └── FleetNatSubOpt.i.dfy
│   │   │       ├── Math/
│   │   │       │   ├── .gitignore
│   │   │       │   ├── BitwiseOperations.i.dfy
│   │   │       │   ├── GCD.s.dfy
│   │   │       │   ├── bit_vector_lemmas.i.dfy
│   │   │       │   ├── bit_vector_lemmas_premium.i.dfy
│   │   │       │   ├── div.i.dfy
│   │   │       │   ├── div_boogie.i.dfy
│   │   │       │   ├── div_def.i.dfy
│   │   │       │   ├── div_nonlinear.i.dfy
│   │   │       │   ├── evenodd.i.dfy
│   │   │       │   ├── mul.i.dfy
│   │   │       │   ├── mul_nonlinear.i.dfy
│   │   │       │   ├── power.i.dfy
│   │   │       │   ├── power.s.dfy
│   │   │       │   ├── power2.i.dfy
│   │   │       │   ├── power2.s.dfy
│   │   │       │   ├── power2methods.i.dfy
│   │   │       │   ├── round.i.dfy
│   │   │       │   └── round.s.dfy
│   │   │       ├── Net/
│   │   │       │   ├── .gitignore
│   │   │       │   ├── IPv4.i.dfy
│   │   │       │   ├── InternetChecksum.i.dfy
│   │   │       │   ├── Udp.i.dfy
│   │   │       │   └── ethernet.i.dfy
│   │   │       ├── Util/
│   │   │       │   ├── .gitignore
│   │   │       │   ├── DebugPrint.i.dfy
│   │   │       │   ├── Halter.i.dfy
│   │   │       │   ├── ProfileIfc.i.dfy
│   │   │       │   ├── arrays.i.dfy
│   │   │       │   ├── arrays_2.i.dfy
│   │   │       │   ├── arrays_and_seqs.i.dfy
│   │   │       │   ├── be_sequences.s.dfy
│   │   │       │   ├── beseqs_simple.i.dfy
│   │   │       │   ├── bytes_and_words.s.dfy
│   │   │       │   ├── insecure_prng.i.dfy
│   │   │       │   ├── integer_sequences.i.dfy
│   │   │       │   ├── integer_sequences.s.dfy
│   │   │       │   ├── integer_sequences_premium.i.dfy
│   │   │       │   ├── relational.i.dfy
│   │   │       │   ├── relational.s.dfy
│   │   │       │   ├── repeat_digit.i.dfy
│   │   │       │   ├── seq_blocking.i.dfy
│   │   │       │   ├── seq_blocking.s.dfy
│   │   │       │   ├── seqs_and_ints.i.dfy
│   │   │       │   ├── seqs_canonical.i.dfy
│   │   │       │   ├── seqs_common.i.dfy
│   │   │       │   ├── seqs_reverse.i.dfy
│   │   │       │   ├── seqs_simple.i.dfy
│   │   │       │   ├── seqs_transforms.i.dfy
│   │   │       │   └── word_bits.i.dfy
│   │   │       └── base.s.dfy
│   │   ├── DafnyTestDriver/
│   │   │   ├── DafnyTestDriver/
│   │   │   │   ├── App.config
│   │   │   │   ├── DafnyTestDriver.csproj
│   │   │   │   ├── Program.cs
│   │   │   │   ├── Properties/
│   │   │   │   │   └── AssemblyInfo.cs
│   │   │   │   ├── assembly.cs
│   │   │   │   ├── debug.cs
│   │   │   │   └── profile.cs
│   │   │   └── DafnyTestDriver.sln
│   │   └── Trusted/
│   │       ├── DafnySpec/
│   │       │   └── Seq.s.dfy
│   │       └── Spec/
│   │           ├── AddPerf/
│   │           │   └── AppRequirements.ifc.stitch
│   │           ├── AppLoader/
│   │           │   └── AppRequirements.ifc.stitch
│   │           ├── AppLoaderContract.ifc.basm
│   │           ├── AppLoaderContract.imp.basm
│   │           ├── AssemblySpec.ifc.basm
│   │           ├── AssemblySpec.imp.basm
│   │           ├── Assembly_axioms.bpl
│   │           ├── BaseSpec.ifc.basm
│   │           ├── BaseSpec.imp.basm
│   │           ├── Base_axioms.bpl
│   │           ├── BenchmarkApp/
│   │           │   └── AppRequirements.ifc.stitch
│   │           ├── BenchmarkService/
│   │           │   └── AppRequirements.ifc.stitch
│   │           ├── BitVector_axioms.bpl
│   │           ├── DafnyCCTest/
│   │           │   └── AppRequirements.ifc.stitch
│   │           ├── DiffPriv/
│   │           │   └── AppRequirements.ifc.stitch
│   │           ├── Entry.ifc.basm.stitch
│   │           ├── ExtendedAssembly.ifc.basm
│   │           ├── ExtendedAssembly.imp.basm
│   │           ├── IntSpec.ifc.basm
│   │           ├── IntSpec.imp.basm
│   │           ├── IntSpec_axioms.bpl
│   │           ├── InterruptsSpec.ifc.basm
│   │           ├── InterruptsSpec.imp.basm
│   │           ├── IoSpec.ifc.basm
│   │           ├── IoSpec.imp.basm
│   │           ├── IoTypesSpec.ifc.basm
│   │           ├── IoTypesSpec.imp.basm
│   │           ├── Io_axioms.bpl
│   │           ├── MachineStateSpec.ifc.basm
│   │           ├── MachineStateSpec.imp.basm
│   │           ├── MemorySpec.ifc.basm
│   │           ├── MemorySpec.imp.basm
│   │           ├── Memory_axioms.bpl
│   │           ├── Notary/
│   │           │   └── AppRequirements.ifc.stitch
│   │           ├── NucleusInvCopying.bpl
│   │           ├── Overflow.ifc.basm
│   │           ├── PassHash/
│   │           │   └── AppRequirements.ifc.stitch
│   │           ├── TPMTest/
│   │           │   └── AppRequirements.ifc.stitch
│   │           ├── TrInc/
│   │           │   └── AppRequirements.ifc.stitch
│   │           └── Word_axioms.bpl
│   └── tools/
│       ├── Beat/
│       │   ├── ast.fs
│       │   ├── beat.vim
│       │   ├── lex.fsl
│       │   ├── main.fs
│       │   ├── makefile
│       │   ├── makefile.fs
│       │   ├── nubuild-manifest.txt
│       │   ├── parse.fsy
│       │   └── parse_util.fs
│       ├── BoogieAsm/
│       │   ├── SymdiffMerge.cs
│       │   ├── ast.fs
│       │   ├── emit_bpl.fs
│       │   ├── lex.fsl
│       │   ├── main.fs
│       │   ├── makefile
│       │   ├── makefile.fs
│       │   ├── nubuild-manifest.txt
│       │   ├── parse.fsy
│       │   └── parse_util.fs
│       ├── Dafny/
│       │   ├── AbsInt.pdb
│       │   ├── BVD.exe.config
│       │   ├── BVD.pdb
│       │   ├── Basetypes.pdb
│       │   ├── Boogie.pdb
│       │   ├── Boogie.suo
│       │   ├── Boogie.vshost.exe.manifest
│       │   ├── CodeContracts/
│       │   │   └── Dafny.Contracts.pdb
│       │   ├── CodeContractsExtender.pdb
│       │   ├── Concurrency.pdb
│       │   ├── Core.pdb
│       │   ├── Dafny.exe.config
│       │   ├── Dafny.pdb
│       │   ├── Dafny.vshost.exe.config
│       │   ├── Dafny.vshost.exe.manifest
│       │   ├── DafnyLanguageService.pdb
│       │   ├── DafnyLanguageService.vsix
│       │   ├── DafnyMenu.pdb
│       │   ├── DafnyMenu.pkgdef
│       │   ├── DafnyMenu.vsix
│       │   ├── DafnyPipeline.pdb
│       │   ├── DafnyPrelude.bpl
│       │   ├── DafnyRuntime.cs
│       │   ├── Doomed.pdb
│       │   ├── ExecutionEngine.pdb
│       │   ├── Graph.pdb
│       │   ├── Houdini.pdb
│       │   ├── Microsoft.Z3.xml
│       │   ├── Model.pdb
│       │   ├── ModelViewer.pdb
│       │   ├── ParserHelper.pdb
│       │   ├── Predication.pdb
│       │   ├── PrepareBoogieZip.bat
│       │   ├── PrepareDafnyZip.bat
│       │   ├── Provers.SMTLib.pdb
│       │   ├── README
│       │   ├── VCExpr.pdb
│       │   ├── VCGeneration.pdb
│       │   ├── extension.vsixmanifest
│       │   ├── libiz3.lib
│       │   ├── z3.lib
│       │   └── z3_dbg.lib
│       ├── DafnyCC/
│       │   ├── .gitignore
│       │   ├── Analyze.cs
│       │   ├── CompileMethod.cs
│       │   ├── DafnyCC.cs
│       │   ├── DafnyCC.csproj
│       │   ├── DafnyCC.sln
│       │   ├── Makefile
│       │   ├── RegAlloc.cs
│       │   ├── Rtl.cs
│       │   ├── blueprints/
│       │   │   ├── Analyze.bpl
│       │   │   └── RegAlloc.bpl
│       │   └── nubuild-manifest.txt
│       ├── DafnySpec/
│       │   ├── .gitignore
│       │   ├── Compile.cs
│       │   ├── CompileField.cs
│       │   ├── CompileFunction.cs
│       │   ├── CompileMethodGhost.cs
│       │   ├── DafnyPrelude.dfy
│       │   ├── DafnySpec.cs
│       │   ├── DafnySpec.csproj
│       │   ├── DafnySpec.sln
│       │   ├── DafnySpecAst/
│       │   │   ├── DafnySpecAst.cs
│       │   │   ├── DafnySpecAst.csproj
│       │   │   └── nubuild-manifest.txt
│       │   ├── Makefile
│       │   ├── ParseMain.cs
│       │   ├── Parser/
│       │   │   ├── Parser.csproj
│       │   │   ├── ReadMe.txt
│       │   │   ├── lex.fsl
│       │   │   ├── nubuild-manifest.txt
│       │   │   ├── parse.fsy
│       │   │   ├── parse_util.fs
│       │   │   └── parser.fs
│       │   ├── RtlGhost.cs
│       │   ├── Util.cs
│       │   └── nubuild-manifest.txt
│       ├── LineCount/
│       │   ├── lex.fsl
│       │   ├── main.fs
│       │   ├── makefile
│       │   └── parse_util.fs
│       ├── NuBuild/
│       │   ├── .gitignore
│       │   ├── AzureManager/
│       │   │   ├── App.config
│       │   │   ├── AzureAccount.cs
│       │   │   ├── AzureManager.csproj
│       │   │   ├── Program.cs
│       │   │   ├── Properties/
│       │   │   │   └── AssemblyInfo.cs
│       │   │   └── ServiceConfiguration.cs
│       │   ├── CloudExecutionEngine/
│       │   │   ├── App.config
│       │   │   ├── CloudExecutionEngine.csproj
│       │   │   ├── Program.cs
│       │   │   └── Properties/
│       │   │       └── AssemblyInfo.cs
│       │   ├── CloudExecutionWorker/
│       │   │   ├── CloudExecutionEngine.cs
│       │   │   ├── CloudExecutionWorker.csproj
│       │   │   ├── Properties/
│       │   │   │   └── AssemblyInfo.cs
│       │   │   ├── WorkerRole.cs
│       │   │   └── app.config
│       │   ├── CloudQueueTool/
│       │   │   ├── App.config
│       │   │   ├── CloudQueueTool.csproj
│       │   │   ├── Program.cs
│       │   │   └── Properties/
│       │   │       └── AssemblyInfo.cs
│       │   ├── CustomDictionary.xml
│       │   ├── ItemCacheTool/
│       │   │   ├── App.config
│       │   │   ├── CacheState.cs
│       │   │   ├── ItemCacheTool.csproj
│       │   │   ├── Program.cs
│       │   │   └── Properties/
│       │   │       └── AssemblyInfo.cs
│       │   ├── NuBuild/
│       │   │   ├── .gitignore
│       │   │   ├── AbstractId.cs
│       │   │   ├── AnnotationScanner.cs
│       │   │   ├── App.config
│       │   │   ├── AsmRewriterVerb.cs
│       │   │   ├── BackgroundWorker.cs
│       │   │   ├── BasmObligationIncludes.cs
│       │   │   ├── BasmTransitiveDepsVerb.cs
│       │   │   ├── BatchVerifyVerb.cs
│       │   │   ├── BeatExtensions.cs
│       │   │   ├── BeatIncludes.cs
│       │   │   ├── BeatVerb.cs
│       │   │   ├── BoogieAsmDepBase.cs
│       │   │   ├── BoogieAsmLinkVerb.cs
│       │   │   ├── BoogieAsmVerificationObligationListVerb.cs
│       │   │   ├── BoogieAsmVerifyVerb.cs
│       │   │   ├── BoogieAsmWorkerBase.cs
│       │   │   ├── BoogieVerb.cs
│       │   │   ├── BootableAppVerb.cs
│       │   │   ├── BuildEngine.cs
│       │   │   ├── BuildObject.cs
│       │   │   ├── BuildObjectValuePointer.cs
│       │   │   ├── CachedHash.cs
│       │   │   ├── CloudExecutionQueue.cs
│       │   │   ├── CloudExecutionReport.cs
│       │   │   ├── CloudExecutionRequest.cs
│       │   │   ├── CloudExecutionWaiter.cs
│       │   │   ├── CloudSubmitter.cs
│       │   │   ├── ConcatContext.cs
│       │   │   ├── ConcatContextVerb.cs
│       │   │   ├── ContextContents.cs
│       │   │   ├── ContextGeneratingVerb.cs
│       │   │   ├── CustomManifestParser.cs
│       │   │   ├── DafnyCCVerb.cs
│       │   │   ├── DafnyCompileOneVerb.cs
│       │   │   ├── DafnyExecutableDependencies.cs
│       │   │   ├── DafnyExtensions.cs
│       │   │   ├── DafnyIncludes.cs
│       │   │   ├── DafnySpecVerb.cs
│       │   │   ├── DafnyTransformBaseVerb.cs
│       │   │   ├── DafnyTransitiveDepsVerb.cs
│       │   │   ├── DafnyVerifyOneVerb.cs
│       │   │   ├── DafnyVerifyTreeVerb.cs
│       │   │   ├── DbgFileCopySpeedTest.cs
│       │   │   ├── DbgHashSpeedTest.cs
│       │   │   ├── DbgVerbCounter.cs
│       │   │   ├── DependencyCache.cs
│       │   │   ├── DependencyDisposition.cs
│       │   │   ├── Disposition.cs
│       │   │   ├── EntryStitcherVerb.cs
│       │   │   ├── Hasher.cs
│       │   │   ├── IAsmProducer.cs
│       │   │   ├── IContextGeneratingVerb.cs
│       │   │   ├── IHasher.cs
│       │   │   ├── IIncludeFactory.cs
│       │   │   ├── IIncludePathContext.cs
│       │   │   ├── IItemCache.cs
│       │   │   ├── IObligationsProducer.cs
│       │   │   ├── IProcessInvokeAsyncVerb.cs
│       │   │   ├── IProcessInvoker.cs
│       │   │   ├── IRejectable.cs
│       │   │   ├── IVerb.cs
│       │   │   ├── IVerbWorker.cs
│       │   │   ├── IVerificationResultParser.cs
│       │   │   ├── IncludePathContext.cs
│       │   │   ├── IronRootDirectory.cs
│       │   │   ├── IroncladAppVerb.cs
│       │   │   ├── IronfleetAppVerb.cs
│       │   │   ├── ItemCacheCloud.cs
│       │   │   ├── ItemCacheLocal.cs
│       │   │   ├── ItemCacheMultiplexer.cs
│       │   │   ├── Job.cs
│       │   │   ├── LinkerVerb.cs
│       │   │   ├── Logger.cs
│       │   │   ├── MasmVerb.cs
│       │   │   ├── NMakeVerb.cs
│       │   │   ├── NuBuild.csproj
│       │   │   ├── ObjectFailedException.cs
│       │   │   ├── ObjectMissingFromCacheException.cs
│       │   │   ├── ObjectNotReadyException.cs
│       │   │   ├── OrderPreservingSet.cs
│       │   │   ├── PathNormalizer.cs
│       │   │   ├── PoundDefines.cs
│       │   │   ├── Presentater.cs
│       │   │   ├── Presentation.cs
│       │   │   ├── PresentationBuilder.cs
│       │   │   ├── ProcessInvokeAsyncWorker.cs
│       │   │   ├── ProcessInvoker.cs
│       │   │   ├── Program.cs
│       │   │   ├── Properties/
│       │   │   │   └── AssemblyInfo.cs
│       │   │   ├── Repository.cs
│       │   │   ├── ResultSummaryRecord.cs
│       │   │   ├── Scheduler.cs
│       │   │   ├── SourceConfigurationError.cs
│       │   │   ├── SourcePath.cs
│       │   │   ├── SourcePathIncludeContext.cs
│       │   │   ├── StaticContextVerb.cs
│       │   │   ├── SymDiffBaseVerb.cs
│       │   │   ├── SymDiffCombineVerb.cs
│       │   │   ├── SymDiffEngine.cs
│       │   │   ├── SymDiffExtractVerb.cs
│       │   │   ├── SymDiffInferVerb.cs
│       │   │   ├── SymDiffMergeBaseVerb.cs
│       │   │   ├── SymDiffMergeConfigVerb.cs
│       │   │   ├── SymDiffMergeVerb.cs
│       │   │   ├── TransitiveDepsContents.cs
│       │   │   ├── TransitiveDepsVerb.cs
│       │   │   ├── UnverifiedSentinelVirtualContents.cs
│       │   │   ├── UserError.cs
│       │   │   ├── Util.cs
│       │   │   ├── VSProjectParser.cs
│       │   │   ├── VSSolutionParser.cs
│       │   │   ├── VSSolutionVerb.cs
│       │   │   ├── Verb.cs
│       │   │   ├── VerbOutputsContext.cs
│       │   │   ├── VerbOutputsContextVerb.cs
│       │   │   ├── VerbRunner.cs
│       │   │   ├── VerbSyncWorker.cs
│       │   │   ├── VerbToposorter.cs
│       │   │   ├── VerificationMessage.cs
│       │   │   ├── VerificationObligationList.cs
│       │   │   ├── VerificationRequest.cs
│       │   │   ├── VerificationResult.cs
│       │   │   ├── VerificationResultBoogieParser.cs
│       │   │   ├── VerificationResultDafnyParser.cs
│       │   │   ├── VerificationResultSummaryVerb.cs
│       │   │   ├── VerificationResultVerb.cs
│       │   │   ├── VirtualBuildObject.cs
│       │   │   ├── VirtualContents.cs
│       │   │   ├── WaitIndex.cs
│       │   │   ├── WinLinkerVerb.cs
│       │   │   ├── WorkingDirectory.cs
│       │   │   └── XmlFiller.cs
│       │   ├── NuBuild.sln
│       │   ├── NuBuildExecutionService/
│       │   │   ├── .gitignore
│       │   │   ├── CloudExecutionWorkerContent/
│       │   │   │   └── diagnostics.wadcfg
│       │   │   ├── NuBuildExecutionService.ccproj
│       │   │   ├── ServiceConfiguration.Cloud.cscfg
│       │   │   ├── ServiceConfiguration.Local.cscfg
│       │   │   └── ServiceDefinition.csdef
│       │   ├── References/
│       │   │   ├── Microsoft.Threading.Tasks.xml
│       │   │   ├── Microsoft.WindowsAzure.Common.NetFramework.xml
│       │   │   ├── Microsoft.WindowsAzure.Common.xml
│       │   │   ├── Microsoft.WindowsAzure.Management.Compute.xml
│       │   │   ├── Microsoft.WindowsAzure.Management.Storage.xml
│       │   │   └── Microsoft.WindowsAzure.Storage.xml
│       │   ├── Settings.StyleCop
│       │   └── makefile
│       ├── NuBuild2/
│       │   ├── .gitignore
│       │   ├── AzureManager/
│       │   │   ├── App.config
│       │   │   ├── AzureAccount.cs
│       │   │   ├── AzureManager.csproj
│       │   │   ├── Program.cs
│       │   │   ├── Properties/
│       │   │   │   └── AssemblyInfo.cs
│       │   │   └── ServiceConfiguration.cs
│       │   ├── CloudExecutionEngine/
│       │   │   ├── App.config
│       │   │   ├── CloudExecutionEngine.csproj
│       │   │   ├── Program.cs
│       │   │   └── Properties/
│       │   │       └── AssemblyInfo.cs
│       │   ├── CloudExecutionWorker/
│       │   │   ├── CloudExecutionEngine.cs
│       │   │   ├── CloudExecutionWorker.csproj
│       │   │   ├── Properties/
│       │   │   │   └── AssemblyInfo.cs
│       │   │   ├── WorkerRole.cs
│       │   │   └── app.config
│       │   ├── CloudQueueTool/
│       │   │   ├── App.config
│       │   │   ├── CloudQueueTool.csproj
│       │   │   ├── Program.cs
│       │   │   └── Properties/
│       │   │       └── AssemblyInfo.cs
│       │   ├── CustomDictionary.xml
│       │   ├── ItemCacheTool/
│       │   │   ├── App.config
│       │   │   ├── CacheState.cs
│       │   │   ├── ItemCacheTool.csproj
│       │   │   ├── Program.cs
│       │   │   └── Properties/
│       │   │       └── AssemblyInfo.cs
│       │   ├── NuBuild/
│       │   │   ├── .gitignore
│       │   │   ├── AbstractId.cs
│       │   │   ├── AnnotationScanner.cs
│       │   │   ├── App.config
│       │   │   ├── AsmRewriterVerb.cs
│       │   │   ├── BackgroundWorker.cs
│       │   │   ├── BasmObligationIncludes.cs
│       │   │   ├── BasmTransitiveDepsVerb.cs
│       │   │   ├── BatchVerifyVerb.cs
│       │   │   ├── BeatExtensions.cs
│       │   │   ├── BeatIncludes.cs
│       │   │   ├── BeatVerb.cs
│       │   │   ├── BoogieAsmDepBase.cs
│       │   │   ├── BoogieAsmLinkVerb.cs
│       │   │   ├── BoogieAsmVerificationObligationListVerb.cs
│       │   │   ├── BoogieAsmVerifyVerb.cs
│       │   │   ├── BoogieAsmWorkerBase.cs
│       │   │   ├── BoogieVerb.cs
│       │   │   ├── BootableAppVerb.cs
│       │   │   ├── BuildEngine.cs
│       │   │   ├── BuildObject.cs
│       │   │   ├── BuildObjectValuePointer.cs
│       │   │   ├── CachedHash.cs
│       │   │   ├── CloudExecutionQueue.cs
│       │   │   ├── CloudExecutionReport.cs
│       │   │   ├── CloudExecutionRequest.cs
│       │   │   ├── CloudExecutionWaiter.cs
│       │   │   ├── CloudSubmitter.cs
│       │   │   ├── ConcatContext.cs
│       │   │   ├── ConcatContextVerb.cs
│       │   │   ├── ContextContents.cs
│       │   │   ├── ContextGeneratingVerb.cs
│       │   │   ├── CustomManifestParser.cs
│       │   │   ├── DafnyCCVerb.cs
│       │   │   ├── DafnyCompileOneVerb.cs
│       │   │   ├── DafnyExecutableDependencies.cs
│       │   │   ├── DafnyExtensions.cs
│       │   │   ├── DafnyIncludes.cs
│       │   │   ├── DafnySpecVerb.cs
│       │   │   ├── DafnyTransformBaseVerb.cs
│       │   │   ├── DafnyTransitiveDepsVerb.cs
│       │   │   ├── DafnyVerifyOneVerb.cs
│       │   │   ├── DafnyVerifyTreeVerb.cs
│       │   │   ├── DbgFileCopySpeedTest.cs
│       │   │   ├── DbgHashSpeedTest.cs
│       │   │   ├── DbgVerbCounter.cs
│       │   │   ├── DependencyCache.cs
│       │   │   ├── DependencyDisposition.cs
│       │   │   ├── Disposition.cs
│       │   │   ├── EntryStitcherVerb.cs
│       │   │   ├── Hasher.cs
│       │   │   ├── IAsmProducer.cs
│       │   │   ├── IContextGeneratingVerb.cs
│       │   │   ├── IHasher.cs
│       │   │   ├── IIncludeFactory.cs
│       │   │   ├── IIncludePathContext.cs
│       │   │   ├── IItemCache.cs
│       │   │   ├── IObligationsProducer.cs
│       │   │   ├── IProcessInvokeAsyncVerb.cs
│       │   │   ├── IProcessInvoker.cs
│       │   │   ├── IRejectable.cs
│       │   │   ├── IVerb.cs
│       │   │   ├── IVerbWorker.cs
│       │   │   ├── IVerificationResultParser.cs
│       │   │   ├── IncludePathContext.cs
│       │   │   ├── IronRootDirectory.cs
│       │   │   ├── IroncladAppVerb.cs
│       │   │   ├── IronfleetAppVerb.cs
│       │   │   ├── ItemCacheCloud.cs
│       │   │   ├── ItemCacheLocal.cs
│       │   │   ├── ItemCacheMultiplexer.cs
│       │   │   ├── Job.cs
│       │   │   ├── LinkerVerb.cs
│       │   │   ├── Logger.cs
│       │   │   ├── MasmVerb.cs
│       │   │   ├── NMakeVerb.cs
│       │   │   ├── NuBuild.csproj
│       │   │   ├── ObjectFailedException.cs
│       │   │   ├── ObjectMissingFromCacheException.cs
│       │   │   ├── ObjectNotReadyException.cs
│       │   │   ├── OrderPreservingSet.cs
│       │   │   ├── PathNormalizer.cs
│       │   │   ├── PoundDefines.cs
│       │   │   ├── Presentater.cs
│       │   │   ├── Presentation.cs
│       │   │   ├── PresentationBuilder.cs
│       │   │   ├── ProcessInvokeAsyncWorker.cs
│       │   │   ├── ProcessInvoker.cs
│       │   │   ├── Program.cs
│       │   │   ├── Properties/
│       │   │   │   └── AssemblyInfo.cs
│       │   │   ├── Repository.cs
│       │   │   ├── ResultSummaryRecord.cs
│       │   │   ├── Scheduler.cs
│       │   │   ├── SourceConfigurationError.cs
│       │   │   ├── SourcePath.cs
│       │   │   ├── SourcePathIncludeContext.cs
│       │   │   ├── StaticContextVerb.cs
│       │   │   ├── SymDiffBaseVerb.cs
│       │   │   ├── SymDiffCombineVerb.cs
│       │   │   ├── SymDiffEngine.cs
│       │   │   ├── SymDiffExtractVerb.cs
│       │   │   ├── SymDiffInferVerb.cs
│       │   │   ├── SymDiffMergeBaseVerb.cs
│       │   │   ├── SymDiffMergeConfigVerb.cs
│       │   │   ├── SymDiffMergeVerb.cs
│       │   │   ├── ToDo.txt
│       │   │   ├── TransitiveDepsContents.cs
│       │   │   ├── TransitiveDepsVerb.cs
│       │   │   ├── UnverifiedSentinelVirtualContents.cs
│       │   │   ├── UserError.cs
│       │   │   ├── Util.cs
│       │   │   ├── VSProjectParser.cs
│       │   │   ├── VSSolutionParser.cs
│       │   │   ├── VSSolutionVerb.cs
│       │   │   ├── Verb.cs
│       │   │   ├── VerbOutputsContext.cs
│       │   │   ├── VerbOutputsContextVerb.cs
│       │   │   ├── VerbRunner.cs
│       │   │   ├── VerbSyncWorker.cs
│       │   │   ├── VerbToposorter.cs
│       │   │   ├── VerificationMessage.cs
│       │   │   ├── VerificationObligationList.cs
│       │   │   ├── VerificationRequest.cs
│       │   │   ├── VerificationResult.cs
│       │   │   ├── VerificationResultBoogieParser.cs
│       │   │   ├── VerificationResultDafnyParser.cs
│       │   │   ├── VerificationResultSummaryVerb.cs
│       │   │   ├── VerificationResultVerb.cs
│       │   │   ├── VirtualBuildObject.cs
│       │   │   ├── VirtualContents.cs
│       │   │   ├── WaitIndex.cs
│       │   │   ├── WinLinkerVerb.cs
│       │   │   ├── WorkingDirectory.cs
│       │   │   └── XmlFiller.cs
│       │   ├── NuBuild.sln
│       │   ├── NuBuildExecutionService/
│       │   │   ├── .gitignore
│       │   │   ├── CloudExecutionWorkerContent/
│       │   │   │   └── diagnostics.wadcfg
│       │   │   ├── NuBuildExecutionService.ccproj
│       │   │   ├── ServiceConfiguration.Cloud.cscfg
│       │   │   ├── ServiceConfiguration.Local.cscfg
│       │   │   ├── ServiceDefinition.csdef
│       │   │   └── csx/
│       │   │       └── Release/
│       │   │           └── roles/
│       │   │               └── CloudExecutionWorker/
│       │   │                   └── base/
│       │   │                       └── x64/
│       │   │                           └── WaHostBootstrapper.exe.config
│       │   ├── References/
│       │   │   ├── Microsoft.Threading.Tasks.xml
│       │   │   ├── Microsoft.WindowsAzure.Common.NetFramework.xml
│       │   │   ├── Microsoft.WindowsAzure.Common.xml
│       │   │   ├── Microsoft.WindowsAzure.Management.Compute.xml
│       │   │   ├── Microsoft.WindowsAzure.Management.Storage.xml
│       │   │   └── Microsoft.WindowsAzure.Storage.xml
│       │   ├── Settings.StyleCop
│       │   ├── makefile
│       │   ├── modules.log
│       │   └── modules.result
│       ├── SymDiff/
│       │   ├── AIFramework.pdb
│       │   ├── AbsInt.pdb
│       │   ├── Basetypes.pdb
│       │   ├── CodeContractsExtender.pdb
│       │   ├── Core.pdb
│       │   ├── Graph.pdb
│       │   ├── Model.pdb
│       │   ├── ParserHelper.pdb
│       │   ├── Provers.SMTLib.pdb
│       │   ├── SymDiff.exe.config
│       │   ├── SymDiff.pdb
│       │   ├── SymDiff.vshost.exe.config
│       │   ├── SymDiff.vshost.exe.manifest
│       │   ├── TypedUnivBackPred2.sx
│       │   ├── UnivBackPred2.smt
│       │   ├── UnivBackPred2.smt2
│       │   ├── UnivBackPred2.sx
│       │   ├── VCExpr.pdb
│       │   └── VCGeneration.pdb
│       ├── build/
│       │   └── x86_x86/
│       │       ├── cl.exe.config
│       │       └── link.exe.config
│       ├── fsharp/
│       │   ├── FSharp.Compiler.CodeDom.xml
│       │   ├── FSharp.Core.pdb
│       │   ├── FSharp.Core.xml
│       │   ├── FSharp.PowerPack.Build.Tasks.pdb
│       │   ├── FSharp.PowerPack.Build.Tasks.xml
│       │   ├── FSharp.PowerPack.Linq.pdb
│       │   ├── FSharp.PowerPack.Linq.xml
│       │   ├── FSharp.PowerPack.Metadata.pdb
│       │   ├── FSharp.PowerPack.Metadata.xml
│       │   ├── FSharp.PowerPack.pdb
│       │   └── FSharp.PowerPack.xml
│       ├── scripts/
│       │   ├── .gitignore
│       │   ├── binary_to_c_symbols.py
│       │   ├── build-standalone-asm.py
│       │   ├── build-standalone-init.sh
│       │   ├── zero-obj.bz2
│       │   └── zero.asm
│       └── standalone/
│           ├── .gitignore
│           ├── StandAloneSupport.sln
│           ├── StandAloneSupport.vcxproj
│           ├── StandAloneSupport.vcxproj.filters
│           └── support.cpp
└── ironfleet/
    ├── .gitignore
    ├── CODE.md
    ├── CONTRIBUTING.md
    ├── IRONROOT.sentinel
    ├── LICENSE
    ├── README.md
    ├── SConstruct
    ├── STYLE.md
    ├── src/
    │   ├── CreateIronServiceCerts/
    │   │   ├── .gitignore
    │   │   ├── CreateIronServiceCerts.csproj
    │   │   ├── CreateIronServiceCerts.sln
    │   │   ├── Params.cs
    │   │   └── Program.cs
    │   ├── Dafny/
    │   │   ├── .gitignore
    │   │   ├── Distributed/
    │   │   │   ├── Common/
    │   │   │   │   ├── .gitignore
    │   │   │   │   ├── Collections/
    │   │   │   │   │   ├── CountMatches.i.dfy
    │   │   │   │   │   ├── Maps.i.dfy
    │   │   │   │   │   ├── Maps2.i.dfy
    │   │   │   │   │   ├── Maps2.s.dfy
    │   │   │   │   │   ├── Multisets.s.dfy
    │   │   │   │   │   ├── Seqs.i.dfy
    │   │   │   │   │   ├── Seqs.s.dfy
    │   │   │   │   │   └── Sets.i.dfy
    │   │   │   │   ├── Framework/
    │   │   │   │   │   ├── AbstractService.s.dfy
    │   │   │   │   │   ├── DistributedSystem.s.dfy
    │   │   │   │   │   ├── Environment.s.dfy
    │   │   │   │   │   ├── EnvironmentSynchrony.s.dfy
    │   │   │   │   │   ├── EnvironmentSynchronyLemmas.i.dfy
    │   │   │   │   │   ├── Host.s.dfy
    │   │   │   │   │   ├── HostQueueLemmas.i.dfy
    │   │   │   │   │   └── Main.s.dfy
    │   │   │   │   ├── Logic/
    │   │   │   │   │   ├── Option.i.dfy
    │   │   │   │   │   └── Temporal/
    │   │   │   │   │       ├── Heuristics.i.dfy
    │   │   │   │   │       ├── Induction.i.dfy
    │   │   │   │   │       ├── LeadsTo.i.dfy
    │   │   │   │   │       ├── Monotonicity.i.dfy
    │   │   │   │   │       ├── Rules.i.dfy
    │   │   │   │   │       ├── Sets.i.dfy
    │   │   │   │   │       ├── Temporal.s.dfy
    │   │   │   │   │       ├── Time.i.dfy
    │   │   │   │   │       ├── Time.s.dfy
    │   │   │   │   │       └── WF1.i.dfy
    │   │   │   │   └── Native/
    │   │   │   │       ├── Io.s.dfy
    │   │   │   │       ├── IoFramework.cs
    │   │   │   │       ├── IoLemmas.i.dfy
    │   │   │   │       ├── IoNative.cs
    │   │   │   │       ├── NativeTypes.i.dfy
    │   │   │   │       └── NativeTypes.s.dfy
    │   │   │   ├── Impl/
    │   │   │   │   ├── Common/
    │   │   │   │   │   ├── CmdLineParser.i.dfy
    │   │   │   │   │   ├── GenericMarshalling.i.dfy
    │   │   │   │   │   ├── GenericRefinement.i.dfy
    │   │   │   │   │   ├── MarshallInt.i.dfy
    │   │   │   │   │   ├── NetClient.i.dfy
    │   │   │   │   │   ├── NodeIdentity.i.dfy
    │   │   │   │   │   ├── SeqIsUnique.i.dfy
    │   │   │   │   │   ├── SeqIsUniqueDef.i.dfy
    │   │   │   │   │   ├── UpperBound.i.dfy
    │   │   │   │   │   └── Util.i.dfy
    │   │   │   │   ├── LiveSHT/
    │   │   │   │   │   ├── CmdLineParser.i.dfy
    │   │   │   │   │   ├── Host.i.dfy
    │   │   │   │   │   ├── NetSHT.i.dfy
    │   │   │   │   │   ├── SchedulerImpl.i.dfy
    │   │   │   │   │   ├── SchedulerModel.i.dfy
    │   │   │   │   │   └── Unsendable.i.dfy
    │   │   │   │   ├── Lock/
    │   │   │   │   │   ├── CmdLineParser.i.dfy
    │   │   │   │   │   ├── Host.i.dfy
    │   │   │   │   │   ├── Message.i.dfy
    │   │   │   │   │   ├── NetLock.i.dfy
    │   │   │   │   │   ├── Node.i.dfy
    │   │   │   │   │   ├── NodeImpl.i.dfy
    │   │   │   │   │   └── PacketParsing.i.dfy
    │   │   │   │   ├── RSL/
    │   │   │   │   │   ├── AcceptorModel.i.dfy
    │   │   │   │   │   ├── AcceptorState.i.dfy
    │   │   │   │   │   ├── AppInterface.i.dfy
    │   │   │   │   │   ├── Broadcast.i.dfy
    │   │   │   │   │   ├── CClockReading.i.dfy
    │   │   │   │   │   ├── CLastCheckpointedMap.i.dfy
    │   │   │   │   │   ├── CMessage.i.dfy
    │   │   │   │   │   ├── CMessageRefinements.i.dfy
    │   │   │   │   │   ├── COperationNumberSort.i.dfy
    │   │   │   │   │   ├── CPaxosConfiguration.i.dfy
    │   │   │   │   │   ├── CTypes.i.dfy
    │   │   │   │   │   ├── CmdLineParser.i.dfy
    │   │   │   │   │   ├── ConstantsState.i.dfy
    │   │   │   │   │   ├── ElectionModel.i.dfy
    │   │   │   │   │   ├── ElectionState.i.dfy
    │   │   │   │   │   ├── ExecutorModel.i.dfy
    │   │   │   │   │   ├── ExecutorState.i.dfy
    │   │   │   │   │   ├── Host.i.dfy
    │   │   │   │   │   ├── LearnerModel.i.dfy
    │   │   │   │   │   ├── LearnerState.i.dfy
    │   │   │   │   │   ├── MinCQuorumSize.i.dfy
    │   │   │   │   │   ├── NetRSL.i.dfy
    │   │   │   │   │   ├── PacketParsing.i.dfy
    │   │   │   │   │   ├── ParametersState.i.dfy
    │   │   │   │   │   ├── PaxosWorldState.i.dfy
    │   │   │   │   │   ├── ProposerLemmas.i.dfy
    │   │   │   │   │   ├── ProposerModel.i.dfy
    │   │   │   │   │   ├── ProposerState.i.dfy
    │   │   │   │   │   ├── QRelations.i.dfy
    │   │   │   │   │   ├── ReplicaConstantsState.i.dfy
    │   │   │   │   │   ├── ReplicaImplClass.i.dfy
    │   │   │   │   │   ├── ReplicaImplDelivery.i.dfy
    │   │   │   │   │   ├── ReplicaImplLemmas.i.dfy
    │   │   │   │   │   ├── ReplicaImplMain.i.dfy
    │   │   │   │   │   ├── ReplicaImplNoReceiveClock.i.dfy
    │   │   │   │   │   ├── ReplicaImplNoReceiveNoClock.i.dfy
    │   │   │   │   │   ├── ReplicaImplProcessPacketNoClock.i.dfy
    │   │   │   │   │   ├── ReplicaImplProcessPacketX.i.dfy
    │   │   │   │   │   ├── ReplicaImplReadClock.i.dfy
    │   │   │   │   │   ├── ReplicaModel-Part1.i.dfy
    │   │   │   │   │   ├── ReplicaModel-Part2.i.dfy
    │   │   │   │   │   ├── ReplicaModel-Part3.i.dfy
    │   │   │   │   │   ├── ReplicaModel-Part4.i.dfy
    │   │   │   │   │   ├── ReplicaModel-Part5.i.dfy
    │   │   │   │   │   ├── ReplicaModel.i.dfy
    │   │   │   │   │   ├── ReplicaState.i.dfy
    │   │   │   │   │   └── Unsendable.i.dfy
    │   │   │   │   └── SHT/
    │   │   │   │       ├── AppInterface.i.dfy
    │   │   │   │       ├── AppInterfaceConcrete.i.dfy
    │   │   │   │       ├── CMessage.i.dfy
    │   │   │   │       ├── ConstantsState.i.dfy
    │   │   │   │       ├── DelegationLookup.i.dfy
    │   │   │   │       ├── Delegations.i.dfy
    │   │   │   │       ├── HostModel.i.dfy
    │   │   │   │       ├── HostState.i.dfy
    │   │   │   │       ├── PacketParsing.i.dfy
    │   │   │   │       ├── Parameters.i.dfy
    │   │   │   │       ├── SHTConcreteConfiguration.i.dfy
    │   │   │   │       ├── SingleDeliveryModel.i.dfy
    │   │   │   │       └── SingleDeliveryState.i.dfy
    │   │   │   ├── Protocol/
    │   │   │   │   ├── Common/
    │   │   │   │   │   ├── Liveness/
    │   │   │   │   │   │   └── RTSchedule.i.dfy
    │   │   │   │   │   ├── NodeIdentity.i.dfy
    │   │   │   │   │   ├── NodeIdentity.s.dfy
    │   │   │   │   │   └── UpperBound.s.dfy
    │   │   │   │   ├── LiveSHT/
    │   │   │   │   │   ├── LivenessProof/
    │   │   │   │   │   │   ├── Acks.i.dfy
    │   │   │   │   │   │   ├── Actions.i.dfy
    │   │   │   │   │   │   ├── Assumptions.i.dfy
    │   │   │   │   │   │   ├── Constants.i.dfy
    │   │   │   │   │   │   ├── Environment.i.dfy
    │   │   │   │   │   │   ├── InfiniteSends.i.dfy
    │   │   │   │   │   │   ├── Invariants.i.dfy
    │   │   │   │   │   │   ├── LivenessProof.i.dfy
    │   │   │   │   │   │   ├── PacketReceipt.i.dfy
    │   │   │   │   │   │   ├── PacketSending.i.dfy
    │   │   │   │   │   │   ├── RefinementInvariants.i.dfy
    │   │   │   │   │   │   ├── RoundRobin.i.dfy
    │   │   │   │   │   │   └── Seqno.i.dfy
    │   │   │   │   │   ├── RefinementProof/
    │   │   │   │   │   │   ├── Environment.i.dfy
    │   │   │   │   │   │   ├── EnvironmentLemmas.i.dfy
    │   │   │   │   │   │   ├── EnvironmentRefinement.i.dfy
    │   │   │   │   │   │   ├── SHT.i.dfy
    │   │   │   │   │   │   ├── SHTLemmas.i.dfy
    │   │   │   │   │   │   ├── SHTRefinement.i.dfy
    │   │   │   │   │   │   ├── SchedulerLemmas.i.dfy
    │   │   │   │   │   │   └── SchedulerRefinement.i.dfy
    │   │   │   │   │   └── Scheduler.i.dfy
    │   │   │   │   ├── Lock/
    │   │   │   │   │   ├── Node.i.dfy
    │   │   │   │   │   ├── RefinementProof/
    │   │   │   │   │   │   ├── DistributedSystem.i.dfy
    │   │   │   │   │   │   ├── Refinement.i.dfy
    │   │   │   │   │   │   └── RefinementProof.i.dfy
    │   │   │   │   │   └── Types.i.dfy
    │   │   │   │   ├── RSL/
    │   │   │   │   │   ├── Acceptor.i.dfy
    │   │   │   │   │   ├── Broadcast.i.dfy
    │   │   │   │   │   ├── ClockReading.i.dfy
    │   │   │   │   │   ├── CommonProof/
    │   │   │   │   │   │   ├── Actions.i.dfy
    │   │   │   │   │   │   ├── Assumptions.i.dfy
    │   │   │   │   │   │   ├── CanonicalizeBallot.i.dfy
    │   │   │   │   │   │   ├── Chosen.i.dfy
    │   │   │   │   │   │   ├── Constants.i.dfy
    │   │   │   │   │   │   ├── Environment.i.dfy
    │   │   │   │   │   │   ├── LearnerState.i.dfy
    │   │   │   │   │   │   ├── LogTruncationPoint.i.dfy
    │   │   │   │   │   │   ├── MaxBallot.i.dfy
    │   │   │   │   │   │   ├── MaxBallotISent1a.i.dfy
    │   │   │   │   │   │   ├── Message1b.i.dfy
    │   │   │   │   │   │   ├── Message2a.i.dfy
    │   │   │   │   │   │   ├── Message2b.i.dfy
    │   │   │   │   │   │   ├── PacketSending.i.dfy
    │   │   │   │   │   │   ├── Quorum.i.dfy
    │   │   │   │   │   │   ├── Received1b.i.dfy
    │   │   │   │   │   │   ├── ReplyCache.i.dfy
    │   │   │   │   │   │   └── Requests.i.dfy
    │   │   │   │   │   ├── Configuration.i.dfy
    │   │   │   │   │   ├── Constants.i.dfy
    │   │   │   │   │   ├── DistributedSystem.i.dfy
    │   │   │   │   │   ├── Election.i.dfy
    │   │   │   │   │   ├── Environment.i.dfy
    │   │   │   │   │   ├── Executor.i.dfy
    │   │   │   │   │   ├── Learner.i.dfy
    │   │   │   │   │   ├── LivenessProof/
    │   │   │   │   │   │   ├── Assumptions.i.dfy
    │   │   │   │   │   │   ├── Catchup.i.dfy
    │   │   │   │   │   │   ├── Environment.i.dfy
    │   │   │   │   │   │   ├── EpochLength.i.dfy
    │   │   │   │   │   │   ├── Execution.i.dfy
    │   │   │   │   │   │   ├── GenericInvariants.i.dfy
    │   │   │   │   │   │   ├── Invariants.i.dfy
    │   │   │   │   │   │   ├── LivenessProof.i.dfy
    │   │   │   │   │   │   ├── MaxBalReflected.i.dfy
    │   │   │   │   │   │   ├── MaxBallot.i.dfy
    │   │   │   │   │   │   ├── MaxBallotISent1a.i.dfy
    │   │   │   │   │   │   ├── NextOp.i.dfy
    │   │   │   │   │   │   ├── PacketHandling.i.dfy
    │   │   │   │   │   │   ├── Phase1a.i.dfy
    │   │   │   │   │   │   ├── Phase1b.i.dfy
    │   │   │   │   │   │   ├── Phase1bCont.i.dfy
    │   │   │   │   │   │   ├── Phase2Conclusion.i.dfy
    │   │   │   │   │   │   ├── Phase2Invariants.i.dfy
    │   │   │   │   │   │   ├── Phase2Start.i.dfy
    │   │   │   │   │   │   ├── Phase2a.i.dfy
    │   │   │   │   │   │   ├── Phase2b.i.dfy
    │   │   │   │   │   │   ├── Phase2c.i.dfy
    │   │   │   │   │   │   ├── RealTime.i.dfy
    │   │   │   │   │   │   ├── RequestQueue.i.dfy
    │   │   │   │   │   │   ├── RequestsReceived.i.dfy
    │   │   │   │   │   │   ├── RoundRobin.i.dfy
    │   │   │   │   │   │   ├── Seqno.i.dfy
    │   │   │   │   │   │   ├── StablePeriod.i.dfy
    │   │   │   │   │   │   ├── StateTransfer.i.dfy
    │   │   │   │   │   │   ├── ViewAdvance.i.dfy
    │   │   │   │   │   │   ├── ViewChange.i.dfy
    │   │   │   │   │   │   ├── ViewPersistence.i.dfy
    │   │   │   │   │   │   ├── ViewPropagation.i.dfy
    │   │   │   │   │   │   ├── ViewPropagation2.i.dfy
    │   │   │   │   │   │   ├── ViewSuspicion.i.dfy
    │   │   │   │   │   │   └── WF1.i.dfy
    │   │   │   │   │   ├── Message.i.dfy
    │   │   │   │   │   ├── Parameters.i.dfy
    │   │   │   │   │   ├── Proposer.i.dfy
    │   │   │   │   │   ├── RefinementProof/
    │   │   │   │   │   │   ├── Chosen.i.dfy
    │   │   │   │   │   │   ├── Execution.i.dfy
    │   │   │   │   │   │   ├── HandleRequestBatch.i.dfy
    │   │   │   │   │   │   ├── Refinement.i.dfy
    │   │   │   │   │   │   ├── Requests.i.dfy
    │   │   │   │   │   │   └── StateMachine.i.dfy
    │   │   │   │   │   ├── Replica.i.dfy
    │   │   │   │   │   ├── StateMachine.i.dfy
    │   │   │   │   │   └── Types.i.dfy
    │   │   │   │   └── SHT/
    │   │   │   │       ├── Configuration.i.dfy
    │   │   │   │       ├── Delegations.i.dfy
    │   │   │   │       ├── Host.i.dfy
    │   │   │   │       ├── Keys.i.dfy
    │   │   │   │       ├── Message.i.dfy
    │   │   │   │       ├── Network.i.dfy
    │   │   │   │       ├── Parameters.i.dfy
    │   │   │   │       ├── RefinementProof/
    │   │   │   │       │   ├── InvDefs.i.dfy
    │   │   │   │       │   ├── InvProof.i.dfy
    │   │   │   │       │   ├── Refinement.i.dfy
    │   │   │   │       │   ├── RefinementProof.i.dfy
    │   │   │   │       │   └── SHT.i.dfy
    │   │   │   │       ├── SingleDelivery.i.dfy
    │   │   │   │       └── SingleMessage.i.dfy
    │   │   │   ├── Services/
    │   │   │   │   ├── Lock/
    │   │   │   │   │   ├── .gitignore
    │   │   │   │   │   ├── AbstractService.s.dfy
    │   │   │   │   │   ├── LockDistributedSystem.i.dfy
    │   │   │   │   │   ├── Main.i.dfy
    │   │   │   │   │   └── Marshall.i.dfy
    │   │   │   │   ├── RSL/
    │   │   │   │   │   ├── .gitignore
    │   │   │   │   │   ├── AbstractService.s.dfy
    │   │   │   │   │   ├── AppStateMachine.s.dfy
    │   │   │   │   │   ├── Main.i.dfy
    │   │   │   │   │   ├── Marshall.i.dfy
    │   │   │   │   │   ├── Program.cs
    │   │   │   │   │   └── RSLDistributedSystem.i.dfy
    │   │   │   │   └── SHT/
    │   │   │   │       ├── .gitignore
    │   │   │   │       ├── AbstractService.s.dfy
    │   │   │   │       ├── AppInterface.i.dfy
    │   │   │   │       ├── AppInterface.s.dfy
    │   │   │   │       ├── Bytes.s.dfy
    │   │   │   │       ├── HT.s.dfy
    │   │   │   │       ├── Main.i.dfy
    │   │   │   │       ├── Marshall.i.dfy
    │   │   │   │       └── SHTDistributedSystem.i.dfy
    │   │   │   └── apps.dfy.batch
    │   │   └── Libraries/
    │   │       ├── .gitignore
    │   │       └── Math/
    │   │           ├── .gitignore
    │   │           ├── div.i.dfy
    │   │           ├── div_auto.i.dfy
    │   │           ├── div_auto_proofs.i.dfy
    │   │           ├── div_def.i.dfy
    │   │           ├── div_nonlinear.i.dfy
    │   │           ├── mod_auto.i.dfy
    │   │           ├── mod_auto_proofs.i.dfy
    │   │           ├── mul.i.dfy
    │   │           ├── mul_auto.i.dfy
    │   │           ├── mul_auto_proofs.i.dfy
    │   │           ├── mul_nonlinear.i.dfy
    │   │           ├── power.i.dfy
    │   │           ├── power2.i.dfy
    │   │           ├── power2s.i.dfy
    │   │           └── powers.i.dfy
    │   ├── IronLockServer/
    │   │   ├── .gitignore
    │   │   ├── IronLockServer.csproj
    │   │   ├── IronLockServer.sln
    │   │   ├── Params.cs
    │   │   └── Program.cs
    │   ├── IronRSLClient/
    │   │   ├── .gitignore
    │   │   ├── IronRSLClient.csproj
    │   │   ├── IronRSLClient.sln
    │   │   └── RSLClient.cs
    │   ├── IronRSLCounterClient/
    │   │   ├── .gitignore
    │   │   ├── Client.cs
    │   │   ├── IronRSLCounterClient.csproj
    │   │   ├── IronRSLCounterClient.sln
    │   │   ├── Params.cs
    │   │   └── Program.cs
    │   ├── IronRSLCounterServer/
    │   │   ├── .gitignore
    │   │   ├── IronRSLCounterServer.csproj
    │   │   ├── IronRSLCounterServer.sln
    │   │   └── Service.cs
    │   ├── IronRSLKVClient/
    │   │   ├── .gitignore
    │   │   ├── Client.cs
    │   │   ├── IronRSLKVClient.csproj
    │   │   ├── IronRSLKVClient.sln
    │   │   ├── Params.cs
    │   │   └── Program.cs
    │   ├── IronRSLKVServer/
    │   │   ├── .gitignore
    │   │   ├── IronRSLKVServer.csproj
    │   │   ├── IronRSLKVServer.sln
    │   │   ├── KVMessages.cs
    │   │   └── Service.cs
    │   ├── IronSHTClient/
    │   │   ├── .gitignore
    │   │   ├── Client.cs
    │   │   ├── IronSHTClient.csproj
    │   │   ├── IronSHTClient.sln
    │   │   ├── Params.cs
    │   │   └── Program.cs
    │   ├── IronSHTServer/
    │   │   ├── .gitignore
    │   │   ├── IronSHTServer.csproj
    │   │   ├── IronSHTServer.sln
    │   │   ├── Params.cs
    │   │   └── Program.cs
    │   ├── IronfleetCommon/
    │   │   ├── Networking.cs
    │   │   ├── Profiler.cs
    │   │   └── Timer.cs
    │   ├── RedisClient/
    │   │   ├── .gitignore
    │   │   ├── IronfleetShtClient/
    │   │   │   ├── App.config
    │   │   │   ├── Experiment.cs
    │   │   │   ├── IVocabularyModule.cs
    │   │   │   ├── IronfleetShtClient.csproj
    │   │   │   ├── KeyValueStoreClient.cs
    │   │   │   ├── Program.cs
    │   │   │   ├── Properties/
    │   │   │   │   └── AssemblyInfo.cs
    │   │   │   ├── RedisClient.cs
    │   │   │   ├── StrawDog.cs
    │   │   │   ├── Vocabulary.cs
    │   │   │   └── packages.config
    │   │   └── IronfleetShtClient.sln
    │   └── TestIoFramework/
    │       ├── .gitignore
    │       ├── Params.cs
    │       ├── Program.cs
    │       ├── TestIoFramework.csproj
    │       └── TestIoFramework.sln
    └── tools/
        ├── DepGraph/
        │   └── parse.py
        └── scripts/
            ├── .gitignore
            ├── build-summary.py
            ├── check-lf.ps1
            ├── dafny-line-count.py
            ├── dafny-oneproc.py
            ├── dafnyBuildVsix.ps1
            ├── expand-tabs-in-place
            ├── function_call_graph.py
            ├── integration-project/
            │   ├── build.py
            │   ├── build.pyproj
            │   ├── build.sln
            │   ├── make-project.sln
            │   └── make-project.vcxproj
            ├── integration-testing.ps1
            └── purge.py

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitignore
================================================
#
# This file needs to exist to work-around a bug in Visual Studio 2013's Git.
#
# Without this file, VS doesn't read any .gitignore files in any subdirectories
# of this directory, with the end result being that some should-be-ignored files
# show up as "Untracked Files" in the "Team Explorer - Changes" panel.
#


================================================
FILE: LICENSE
================================================
Ironclad 1.0

Copyright (c) Microsoft Corporation
All rights reserved. 

MIT License

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the ""Software""), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.




================================================
FILE: README.md
================================================
# About

To learn more about the Ironclad Apps project, please see the related [README](./ironclad-apps/README.md) file.

To learn more about the IronFleet project, please see the related [README](./ironfleet/README.md) file.



================================================
FILE: SECURITY.md
================================================
<!-- BEGIN MICROSOFT SECURITY.MD V0.0.8 BLOCK -->

## Security

Microsoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), and [our GitHub organizations](https://opensource.microsoft.com/).

If you believe you have found a security vulnerability in any Microsoft-owned repository that meets [Microsoft's definition of a security vulnerability](https://aka.ms/opensource/security/definition), please report it to us as described below.

## Reporting Security Issues

**Please do not report security vulnerabilities through public GitHub issues.**

Instead, please report them to the Microsoft Security Response Center (MSRC) at [https://msrc.microsoft.com/create-report](https://aka.ms/opensource/security/create-report).

If you prefer to submit without logging in, send email to [secure@microsoft.com](mailto:secure@microsoft.com).  If possible, encrypt your message with our PGP key; please download it from the [Microsoft Security Response Center PGP Key page](https://aka.ms/opensource/security/pgpkey).

You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://aka.ms/opensource/security/msrc). 

Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue:

  * Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.)
  * Full paths of source file(s) related to the manifestation of the issue
  * The location of the affected source code (tag/branch/commit or direct URL)
  * Any special configuration required to reproduce the issue
  * Step-by-step instructions to reproduce the issue
  * Proof-of-concept or exploit code (if possible)
  * Impact of the issue, including how an attacker might exploit the issue

This information will help us triage your report more quickly.

If you are reporting for a bug bounty, more complete reports can contribute to a higher bounty award. Please visit our [Microsoft Bug Bounty Program](https://aka.ms/opensource/security/bounty) page for more details about our active programs.

## Preferred Languages

We prefer all communications to be in English.

## Policy

Microsoft follows the principle of [Coordinated Vulnerability Disclosure](https://aka.ms/opensource/security/cvd).

<!-- END MICROSOFT SECURITY.MD BLOCK -->


================================================
FILE: ironclad-apps/.gitignore
================================================
codeplex
obj/
obj-*/
bin-*/
bin/
bin_tools/
obj_tools/
src/Clients/*/bin/
*-disabled
nucache/
nuobj/
nutemp/
nubuild.config
nubuild.cloud-credentials
nubuild.log
nubuild.progress
Experiments/
*.csproj.user
StyleCop.Cache
tmp/


================================================
FILE: ironclad-apps/IRONROOT.sentinel
================================================
This file marks the top of the Ironclad source repository.
Its presence is used by the NuBuild system to orient itself
to the src/, nuobj/, and nucache/ directories.


================================================
FILE: ironclad-apps/README.md
================================================
# About

This directory contains experimental verified Ironclad Apps code,
as described in:

>  [_Ironclad Apps: End-to-End Security via Automated Full-System Verification_](http://research.microsoft.com/apps/pubs/default.aspx?id=230123)
>  Chris Hawblitzel, Jon Howell, Jacob R. Lorch, Arjun Narayan, Bryan Parno, Danfeng Zhang, and Brian Zill.
>  In Proceedings of the USENIX Symposium on Operating Systems Design and Implementation (OSDI)
>  October 6, 2014.

As a brief summary, an Ironclad App lets a user securely transmit her data to a remote
machine with the guarantee that every instruction executed on that machine adheres to a
formal abstract specification of the app’s behavior. This does more than eliminate
implementation vulnerabilities such as buffer overflows, parsing errors, or data leaks; it
tells the user exactly how the app will behave at all times. We provide these guarantees
via complete, low-level software verification. We then use cryptography and secure
hardware to enable secure channels from the verified software to remote users. To achieve
such complete verification, we developed a set of new and modified tools, a collection of
techniques and engineering disciplines, and a methodology focused on rapid development of
verified systems software. We describe our methodology, formal results, and lessons we
learned from building a full stack of verified software. That software includes a verified
kernel; verified drivers; verified system and crypto libraries including SHA, HMAC, and
RSA; and four Ironclad Apps

See http://research.microsoft.com/ironclad for more details.

# License

The Ironclad Apps code is licensed under the MIT license included in the [LICENSE](../ironfleet/LICENSE) file.

# Setup

The build process currently requires Windows PowerShell, though this should be relatively
simple to replace.  Since the build process uses PowerShell scripts, script execution must
be enabled.  (For example, launch "powershell.exe -ExecutionPolicy RemoteSigned".)

To build the tools from a PowerShell prompt, simply run: `.\build-tools`.  
This will build all of the basic tools, including NuBuild (aka IronBuild),
our distributed verification and build tool.

To use Dafny interactively, you'll need Visual Studio 2012 or newer, Vim, or Emacs.
Each has a plugin:
  - For Vim, we suggest the vim-loves-dafny plugin:
      https://github.com/mlr-msft/vim-loves-dafny
  - For Emacs, we suggest the Emacs packages boogie-mode and dafny-mode:
      https://github.com/boogie-org/boogie-friends
  - For Visual Studio, open:
      `./tools/Dafny/DafnyLanguageService.vsix`
    to install the Dafny plugin with our default settings.
    If you're running on Windows Server, and you see an error message that says Z3 has crashed,
    then you may need to install the 
    [Microsoft Visual C++ runtime](http://www.microsoft.com/en-us/download/details.aspx?id=5555).
    
These instructions assume you're running on Windows.  However, Dafny, and all of its
dependencies, also run on Linux.  You can obtain Dafny sources from:

  https://github.com/Microsoft/Dafny/

Dafny's INSTALL file contains instructions for building on Linux with Mono.  Note that we have
not yet tested building our build tool, NuBuild, on Linux, so your mileage may vary.

# Verification

To perform our definitive verifications, we use our NuBuild tool, which handles dependency
tracking, caches intermediate verification results locally and in the cloud, and can
utilize a cluster of cloud VMs to parallelize verification.  To enable cloud features,
you'll need an Azure account and an Azure storage account.  Once you have an Azure storage
account, put your storage account's connection string into the
`bin_tools/NuBuild/Nubuild.exe.config` file.  This will let you make use of the cloud
cache capabilities.  To use the cloud build functionality, you'll need to add your
subscription Id and Certificate (base64 encoded) to
`bin_tools/NuBuild/AzureManage.exe.config`, which will then let you manage a cluster of
VMs to serve as workers.
You can still use NuBuild without cloud support, however, by passing the `--no-cloudcache` option.

In the examples below, we'll assume you're using Cygwin, but other shells (e.g.,
Powershell) should work as well.  

To verify an individual Dafny file (and all of its dependencies), run:

  `./bin_tools/NuBuild/NuBuild.exe --no-cloudcache -j 3 DafnyVerifyTree src/Dafny/Libraries/Math/power2.i.dfy`

which uses the `-j` flag to add 3-way local parallelism.

To verify a forest of Dafny files (e.g., all of the IronFleet files), run:

  `./bin_tools/NuBuild/NuBuild.exe --no-cloudcache -j 3 BatchDafny src/Dafny/Apps/apps.dfy.batch`

to do a high-level Dafny verification.  This is a useful
sanity check, but it is not the definitive verification for the system.

The definitive verification, which includes all of the assembly code that will be
executed, is run via:

  `./bin_tools/NuBuild/NuBuild.exe --no-cloudcache -j 3 IroncladApp src/Dafny/Apps/DafnyCCTest/Main.i.dfy`

to verify and build a very simple Ironclad App.  Try pointing it at other files in:
  `./src/Dafny/Apps/*/Main.i.dfy`
to build the other apps.

To build a version that actually boots, use `BootableApp` in place of `IroncladApp`.

To build a debug version that runs on Windows, use the `--windows flag` to NuBuild.  
This is most useful when accompanied by the `--useFramePointer` which enables more detailed profiling.

# Running

To run an Ironclad App, you'll need an AMD machine with SVM support and a TPM. Adjust
`boot/boot-cp.cmd` to point at the executable output by the `BootableApp` verb above,
and run `boot/boot-cp.cmd`, which will start a PXE boot server that your AMD machine
should be configured to connect to.

# Contributing

See the [CONTRIBUTING](../ironfleet/CONTRIBUTING.md) file for more details.

# Version History
- v0.1:   Initial code release on GitHub.


================================================
FILE: ironclad-apps/boot/boot-cp.cmd
================================================
@rem //////////////////////////////////////////////////////////////////////
@rem 
@rem   Microsoft Research Singularity
@rem 
@rem   Copyright (c) Microsoft Corporation.  All rights reserved.
@rem 
@rem This script launches bootd with paths set up for the current build
@rem environment.  It replies to hosts specified in the file
@rem %SINGULARITY_ROOT%\boothosts.txt.  MAC addresses should appear one per
@rem line.
@rem
@echo off

setlocal enabledelayedexpansion enableextensions

:parse

if /I .%1==./1394 (
    set ConnectArgs=/dhcp /c:DBG=1
    shift
    goto :parse
)

if not defined BOOT_HOSTS (
    set BOOT_HOSTS=%~dp0\boothosts.txt
)

if not exist "%BOOT_HOSTS%" (
    echo.Could not find boot hosts file:
    echo.
    echo.  %BOOT_HOSTS%
    echo.
    echo.The boot hosts file should specify a list of MAC addresses one per
    echo.line for bootd to respond to.  If IP addresses are to be associated
    echo.with a MAC address then they should be comma-separated from their MAC
    echo.addresses, e.g. 00-01-02-03-04-05,10.0.0.1
    exit /b 1
)

@rem NB using type here because of need to quote protect path to support
@rem paths with spaces in.
set MacArgs=
for /F %%m in ('type "%BOOT_HOSTS%"') do (
    set MacArgs=!MacArgs! /m:%%m
)

start %~dp0\bootd.exe /dhcp %ConnectArgs% /b:pxe-loader !MacArgs! /tftp /v ..\nuobj\src\Dafny\Apps\BenchmarkService\bootable-NoVerify %*


================================================
FILE: ironclad-apps/boot/boothosts.txt
================================================
90-e2-ba-4f-0c-5b
d4-85-64-c3-19-f6


================================================
FILE: ironclad-apps/build-tools.ps1
================================================
. .\env.ps1

$ROOT="."

. $ROOT\def.ps1 $args

$NMAKE = "$(ls $BUILD\nmake.exe)"
$MSBUILD="C:/Windows/Microsoft.NET/Framework/v4.0.30319/MSBuild.exe"
$VSVERSION="/property:VisualStudioVersion=12.0"

ensureDir("$OBJROOT")
ensureDir("$BINROOT")

# Cygwin make helpfully passes along an argument that NMAKE doesn't understand
$Env:MAKEFLAGS = ""

echo "Building NuBuild"
runShell "cd tools\NuBuild; & `"$MSBUILD`" $VSVERSION NuBuild.sln"

ensureDir("$OBJROOT\Checked\BootLoader\SingLdrPc")
ensureDir("$OBJROOT\Checked\BootLoader\x86")
ensureDir("$OBJROOT\Checked\BootLoader\tpm")

echo "Building Bootloader"
runShell "cd src\Checked\BootLoader\SingLdrPc; & `"$NMAKE`" /nologo OBJ=..\..\..\..\obj$BUILD_SUFFIX\Checked\BootLoader" pxe-loader


================================================
FILE: ironclad-apps/def.ps1
================================================
$build_args = $args[0]
$BUILD_SUFFIX = "$($build_args | %{"-$_"})".Replace(" ", "")
$BUILD_DEFS = $($build_args | %{"-def"; $_})

$BUILD = "$ROOT\tools\build"
$OBJROOT = "$ROOT\obj$BUILD_SUFFIX"
$BINROOT = "$ROOT\bin$BUILD_SUFFIX"
$BINTOOLS = "$ROOT\bin_tools"
$SPEC = "$ROOT\src\Trusted\Spec"

# By default, all the following should be true:
$SYMDIFF_ENABLED = $false
$BOOGIE_ENABLED = $true
$DAFNYCC_INCREMENTAL_BUILD = $true

# The AppLoader doesn't know any secrets, so we don't need to run SymDiff on it.
if ($build_args -contains "AppLoader")
{
    $SYMDIFF_ENABLED = $false
}

function list
{
    @($args)
}

$boogieasm_x64_flag = ""
if ($build_args.Contains("x64"))
{
    $boogieasm_x64_flag = "-x64"
}

# recursively flatten all arrays into a single array
function flatten($arr)
{
    do
    {
        $c = $arr.count
        $arr = @($arr | %{$_})
    } while ($c -ne $arr.count)
    ,($arr)
}

function run([Parameter(Mandatory=$true)]$cmd, [Parameter(ValueFromRemainingArguments=$true)]$arr)
{
    & $cmd $(flatten $arr)
    if($LastExitCode)
    {
        throw "error running $cmd $(flatten $arr)"
    }
}

function runShell
{
    powershell -command "$(flatten $args)"
    if($LastExitCode)
    {
        throw "error running $(flatten $args)"
    }
}

function needToBuild($out, $ins)
{
    #Write-Host "Do I need to build $out ?"
    if (-not (test-path $out)) { return $true }
    $t = (get-item $out).LastWriteTimeUtc
    foreach ($f in $ins)
    {
        if (-not (test-path $f)) { throw "cannot find input file $f" }
        if ($t -lt (get-item $f).LastWriteTimeUtc) { return $true }
        #Write-Host "Checking need to build based on: $f"
    }
    return $false
}

function ensureDir($dir)
{
    if (-not (test-path $dir)) { mkdir $dir }
}

function ensureDirForFile($path)
{
    $dir = [System.IO.Path]::GetDirectoryName($path)
    if (-not (test-path $dir)) { mkdir $dir }
}

function _boogie_dbg([Parameter(Mandatory=$true)]$out, [Parameter(ValueFromRemainingArguments=$true)]$arr)
{
    $arr = flatten $arr
    $boogieasm = "$BINTOOLS\boogieasm\boogieasm.exe"
    $ins = @($arr | ?{-not $_.StartsWith("/")}) + @($boogieasm)
    if (needToBuild $out $ins)
    {
        ensureDirForFile($out)
        "boogie $arr"
        $bpls = $arr | ?{$_.EndsWith(".bpl")}
        $flags = $arr | ?{-not $_.EndsWith(".bpl")}
        run $boogieasm $BUILD_DEFS $boogieasm_x64_flag "-verify" "-out" "$out.bpl" $bpls
        $time1 = Get-Date
        & "$ROOT\..\iron\build\boogie-new\boogie.exe" /printModel:4 /noinfer /typeEncoding:m $flags "$out.bpl" | out-file -encoding ascii "$out.err"
        #& "$ROOT\..\iron\build\boogie-new\boogie.exe" /mv:model.bvd /noinfer /typeEncoding:m $flags "$out.bpl" | out-file -encoding ascii "$out.err"
        $time2 = Get-Date
        cat "$out.err"
        if(-not (findstr /c:"verified, 0 errors" "$out.err")) {throw "error building $out"}
        if(     (findstr /c:"inconclusive" "$out.err")) {throw "error building $out"}
        if(     (findstr /c:"time out" "$out.err")) {throw "error building $out"}
        mv -force "$out.err" $out
        "Time: $($time2 - $time1)"
        ""
    }
}

function __boogie_exe($out, $flags, $arr)
{
    $time1 = Get-Date
    "$ROOT\tools\Dafny\boogie.exe    /noinfer /typeEncoding:m /z3opt:ARITH_RANDOM_SEED=1 $flags  $out.bpl"
    & "$ROOT\tools\Dafny\boogie.exe" /noinfer /typeEncoding:m /z3opt:ARITH_RANDOM_SEED=1 $flags "$out.bpl" | out-file -encoding ascii "$out.err"
    $time2 = Get-Date
    cat "$out.err"
    if(-not (findstr /c:"verified, 0 errors" "$out.err")) {throw "error building $out"}
    if(     (findstr /c:"inconclusive" "$out.err")) {throw "error building $out"}
    if(     (findstr /c:"time out" "$out.err")) {throw "error building $out"}
    mv -force "$out.err" $out
    "Time: $(($time2 - $time1).TotalSeconds) $out"
    ""
}

function __boogie_sd_optional($out, $sdiff, $arr)
{
    $arr = flatten $arr
    $boogieasm = "$BINTOOLS\boogieasm\boogieasm.exe"
    $ins = @($arr | ?{-not $_.StartsWith("/")}) + @($boogieasm)
    $outname = $out


    # Assume the file to be verified is the last in line
    $src = $arr[-1]
    $src_i = $src.replace(".bpl", "_i.bpl")  # Create the potential interface file name 

    # Check whether the Boogie files use relational logic
    $rel_i = $false
    $pub_i = $false
    if (Test-Path ($src_i)) {  # If this is the module implementation, check the interface too
      $rel_i = (Select-String -CaseSensitive "[^a-zA-Z0-9_]relation\(.*\)" $src_i).Count -gt 0
      $pub_i = (Select-String -CaseSensitive "[^a-zA-Z0-9_]public\(.*\)"   $src_i).Count -gt 0
    }
    $rel   = (Select-String -CaseSensitive "[^a-zA-Z0-9_]relation\(.*\)" $src).Count   -gt 0 
    $pub   = (Select-String -CaseSensitive "[^a-zA-Z0-9_]public\(.*\)"   $src).Count   -gt 0 

    if ($src.EndsWith("EntryCP.bpl")) { # Special-case entry, since its interface lives in spec land
      $rel_i = $true
    }

    # Apply SymDiff if we find relation or public in the implementation or the interface
    $deduced_symdiff = $rel -or $pub -or $rel_i -or $pub_i

    #echo "For $src, sdiff is $sdiff and I deduced $deduced_symdiff" | out-file -append -encoding ascii sdiff.txt
    $sdiff = $deduced_symdiff

    if ($sdiff -and $SYMDIFF_ENABLED)
    {
        $outname = "$out.merged"
    }
    if (((needToBuild $outname $ins) -and $BOOGIE_ENABLED) -or ((-not $BOOGIE_ENABLED) -and (needToBuild "$outname.assume" $ins)))
    {
        ensureDirForFile($out)
        "boogie $arr"
        $bpls = $arr | ?{$_.EndsWith(".bpl")}
        $ba_flagnames = @("")
        $ba_flags = $arr | ?{$ba_flagnames -contains $_} | %{$_.Replace("/", "-")}
        $flags = $arr | ?{-not $_.EndsWith(".bpl")} | ?{-not ($ba_flagnames -contains $_)}
        $fulltime1 = Get-Date
        if ($sdiff)
        {
            run $boogieasm $BUILD_DEFS $boogieasm_x64_flag $ba_flags "-verify" "-symdiffok" "-out" "$out.bpl" $bpls
            run $boogieasm $BUILD_DEFS $boogieasm_x64_flag $ba_flags "-verify" "-symdiffms" "$out.ms.bpl" "-out" "$out.symdiff.bpl" $bpls
        }
        else
        {
            run $boogieasm $BUILD_DEFS $boogieasm_x64_flag $ba_flags "-verify" "-out" "$out.bpl" $bpls
        }
        $fulltime2 = Get-Date
        if ($BOOGIE_ENABLED) {
          __boogie_exe $out $flags $arr
        } else {
          echo $null > "$out.assume"
        }
        $fulltime3 = Get-Date
        if ($sdiff -and $SYMDIFF_ENABLED)
        {
            $save_dir = pwd
            try
            {
                $outfile = [System.IO.Path]::GetFileName($out)
                cd $([System.IO.Path]::GetDirectoryName($out))
                cp $($outfile + ".symdiff.bpl") v1.bpl
                cp $($outfile + ".symdiff.bpl") v2.bpl
                echo "" | out-file -encoding ascii ms_symdiff_file.bpl
                echo "LOOPS"
                run "$SYMDIFF\symdiff.exe" -extractLoops v1.bpl v1_u.bpl
                run "$SYMDIFF\symdiff.exe" -extractLoops v2.bpl v2_u.bpl
                echo "INFER"
                run "$SYMDIFF\symdiff.exe" -inferConfig v1_u.bpl v2_u.bpl | out-file -encoding ascii v1_uv2_u.config
                echo "CONFIGURE"
                run $BINTOOLS\boogieasm\symdiffmerge.exe -config "$outfile.ms.bpl" v1_uv2_u.config | out-file -encoding ascii "$outfile.config"
                echo "RUN SYMDIFF"
                run "$SYMDIFF\symdiff.exe" -allInOne  v1_u.bpl v2_u.bpl "$outfile.config" -asserts -freeContracts -usemutual -sound -dontUseHoudiniForMS -checkMutualPrecondNonTerminating
                echo "MERGE"
                run $BINTOOLS\boogieasm\symdiffmerge.exe -merge "$outfile.ms.bpl" mergedProgSingle.bpl | out-file -encoding ascii "$outfile.merged.bpl"
                cd $save_dir
                echo "RUN BOOGIE"
                __boogie_exe $outname $flags $arr
            }
            finally
            {
                cd $save_dir
            }
        }
        $fulltime4 = Get-Date
        $t = $(($fulltime2 - $fulltime1).TotalSeconds); $t | out-file -encoding ascii "$out.____$($t)____.time_bgasm"
        $t = $(($fulltime3 - $fulltime2).TotalSeconds); $t | out-file -encoding ascii "$out.____$($t)____.time_boogie"
        $t = $(($fulltime4 - $fulltime3).TotalSeconds); $t | out-file -encoding ascii "$out.____$($t)____.time_symdiff"
    }
}

function _boogie_sd_optional([Parameter(Mandatory=$true)]$out, [Parameter(Mandatory=$true)]$relational, [Parameter(ValueFromRemainingArguments=$true)]$arr)
{
    __boogie_sd_optional $out $relational $arr
}

function _boogie([Parameter(Mandatory=$true)]$out, [Parameter(ValueFromRemainingArguments=$true)]$arr)
{
    __boogie_sd_optional $out $false $arr
}

function _boogie_symdiff([Parameter(Mandatory=$true)]$out, [Parameter(ValueFromRemainingArguments=$true)]$arr)
{
    __boogie_sd_optional $out $true $arr
}

function _copy([Parameter(Mandatory=$true)]$out, [Parameter(Mandatory=$true)]$in)
{
    $ins = list $in
    if (needToBuild $out $ins)
    {
        ensureDirForFile($out);
        "copy -out $out -in $in"
        cat $in | out-file -encoding ascii $out
    }
}

function _copy_if_different([Parameter(Mandatory=$true)]$out, [Parameter(Mandatory=$true)]$in)
{
    if (-not $DAFNYCC_INCREMENTAL_BUILD)
    {
        cp $in $out
    }
    elseif (-not (test-path $out))
    {
        cp $in $out
    }
    else
    {
        $bytes_out = [System.IO.File]::ReadAllBytes((ls $out).FullName)
        $bytes_in = [System.IO.File]::ReadAllBytes((ls $in).FullName)
        if (-not ([System.Collections.StructuralComparisons]::StructuralEqualityComparer.Equals($bytes_out, $bytes_in)))
        {
            cp $in $out
        }
    }
}

function _cat([Parameter(Mandatory=$true)]$out, [Parameter(Mandatory=$true)][string[]]$in)
{
    $ins = $in
    if (needToBuild $out $ins)
    {
        ensureDirForFile($out);
        "cat -out $out -in $in"
        cat $in | out-file -encoding ascii $out
    }
}

function _beat([Parameter(Mandatory=$true)]$out, [Parameter(Mandatory=$true)]$in, [string[]]$includes)
{
    if ($includes -eq $null) { $includes = @() }
    $beat = "$BINTOOLS\beat\beat.exe"
    $ins = flatten (list $in $beat $includes)
    if (needToBuild $out $ins)
    {
        ensureDirForFile($out)
        $incls = @($includes | %{"-i"; $_})
        "beat $BUILD_DEFS -out $out.tmp -in $in $incls"
        # & $beat -printAndExit $BUILD_DEFS -in $in $incls | out-file -encoding ascii "$out.ppall"
        # if($LastExitCode) { cat "$out.ppall"; throw "error building $out" }
        # & $beat -printNonghostAndExit $BUILD_DEFS -in $in $incls | out-file -encoding ascii "$out.ppwog"
        # if($LastExitCode) { cat "$out.ppwog"; throw "error building $out" }
        & $beat $BUILD_DEFS -in $in $incls | out-file -encoding ascii "$out.tmp"
        if($LastExitCode)
        {
            cat "$out.tmp"
            throw "error building $out"
        }
        mv -force "$out.tmp" $out
        ""
    }
}

function _dafnyspec([Parameter(Mandatory=$true)]$outdir, [Parameter(Mandatory=$true)]$outlist, [Parameter(Mandatory=$true)]$deps, [Parameter(Mandatory=$true)]$in)
{
    $dafnyspec = "$BINTOOLS\dafnyspec\dafnyspec.exe"
    $ins = flatten ((list $in $dafnyspec) + @($deps))
    if (needToBuild $outlist $ins)
    {
        ensureDirForFile("$outdir\dummy")
        "dafnyspec $in /outdir:$outdir /outlist:$outlist"
        & $dafnyspec $in /outdir:$outdir /outlist:$outlist
        if($LastExitCode)
        {
            throw "error building $out"
        }
        ""
    }
}

function _dafnycc([Parameter(Mandatory=$true)]$outdir, [Parameter(Mandatory=$true)]$outlist, [Parameter(Mandatory=$true)]$heap, [Parameter(Mandatory=$true)]$heapi, [Parameter(Mandatory=$true)]$deps, [Parameter(Mandatory=$true)]$in)
{
    $dafnycc = "$BINTOOLS\dafnycc\dafnycc.exe"
    $ins = flatten ((list $in $dafnycc) + @($deps))
    if ($build_args.Contains("x64"))
    {
        $x64_flag = "/x64"
    }
    if (needToBuild $heap $ins)
    {
        ensureDirForFile($heap)
        ensureDirForFile($heapi)
        ensureDirForFile("$outdir\dummy")
        "dafnycc $in /useFramePointer /heapfile:$heap /heapifile:$heapi /outdir:$outdir /relational /outlist:$outlist $x64_flag"
        & $dafnycc $in /useFramePointer /heapfile:$heap /heapifile:$heapi /outdir:$outdir /relational /outlist:$outlist $x64_flag
        if($LastExitCode)
        {
            throw "error building $out"
        }
        ""
    }
}

function _boogieasm([Parameter(Mandatory=$true)]$out, [Parameter(ValueFromRemainingArguments=$true)]$arr)
{
    $boogieasm = "$BINTOOLS\boogieasm\boogieasm.exe"
    $arr = flatten $arr
    $ins = @($arr | %{"$_.bpl"}) + @($arr | %{"$($_)_i.bpl"}) + @($boogieasm)
    if (needToBuild $out $ins)
    {
        ensureDirForFile($out)
        "$boogieasm $BUILD_DEFS $boogieasm_x64_flag -link $arr | out-file -encoding ascii $out.tmp "
        & $boogieasm $BUILD_DEFS $boogieasm_x64_flag -link $arr | out-file -encoding ascii "$out.tmp"
        if($LastExitCode)
        {
            #cat "$out.tmp" | out-file -encoding ascii "$OBJROOT\$out.tmp"
            throw "error building $out.  Check the end of $out.tmp for more details."
        }
        mv -force "$out.tmp" $out
        ""
    }
}

function _cdimage([Parameter(Mandatory=$true)]$inDir, [Parameter(Mandatory=$true)]$bootSector, [Parameter(Mandatory=$true)]$out, [Parameter(ValueFromRemainingArguments=$true)]$arr)
{
    $arr = flatten $arr
    $ins = @(ls -r $inDir | %{$_.FullName}) + @($bootsector)
    if (needToBuild $out $ins)
    {
        ensureDirForFile($out)
        "cdimage $arr -b$bootSector $inDir $out"
        run $BUILD\cdimage.exe $arr "-b$bootSector" $inDir $out
        ""
    }
}


================================================
FILE: ironclad-apps/env.ps1
================================================
if ($env:SAFEOS_ROOT -eq $null)
{
    $env:SAFEOS_ROOT = $PWD
    $env:PATH = $env:PATH + ";$env:SAFEOS_ROOT\tools\build"
}


================================================
FILE: ironclad-apps/makefile
================================================
NUBUILD=bin_tools/NuBuild/NuBuild.exe -j $(j)

all: $(NUBUILD)
	$(NUBUILD) DafnyVerifyTree src/Dafny/apps/apps.batch
#	$(NUBUILD) --html nuobj/summary.html DafnyVerifyTree src/Dafny/apps/apps.batch

$(NUBUILD):
	make -C tools/NuBuild

nuobj/test.tgz: all
	find nuobj -name \*.vdfy | tar --files-from=- -czf $@

#all:
#	tools/scripts/ironmake.py
#	+make -C obj

#test.tgz:
#	tools/scripts/ironmake.py
#	+DAFNYTIMELIMIT=120 make -C obj test.tgz

clean-dafny:
	find obj -name \*.res\* | xargs rm


================================================
FILE: ironclad-apps/src/Checked/BootLoader/SingLdrPc/.gitignore
================================================
tags


================================================
FILE: ironclad-apps/src/Checked/BootLoader/SingLdrPc/bl.h
================================================
//++
//
//  Copyright (c) Microsoft Corporation
//
//  Module Name:
//
//    bl.h
//
//  Abstract:
//
//    This module contains definitions for the boot loader.
//
//  Environment:
//
//    Boot loader.
//
//--

#pragma once

#pragma warning(disable:4127)           // conditional expression is constant
#pragma warning(disable:4152)           // function/data pointer conversion in expression
#pragma warning(disable:4200)           // zero-sized array in struct/union
#pragma warning(disable:4201)           // nameless struct/union
#pragma warning(disable:4214)           // bit field types other than int

//
// Constants for selectively enabling verbose debug output.
//

#define ACPI_VERBOSE                    0
#define APM_VERBOSE                     0
#define CDROM_VERBOSE                   0
#define COM_VERBOSE                     0
#define DISTRO_VERBOSE                  1
#define FAT_VERBOSE                     0
#define KD_VERBOSE                      0
#define MM_VERBOSE                      0
#define MPS_VERBOSE                     0
#define PCI_VERBOSE                     0
#define PECOFF_VERBOSE                  1
#define PNP_VERBOSE                     0
#define POOL_VERBOSE                    0
#define PXE_VERBOSE                     0
#define SINGULARITY_VERBOSE             0
#define SMAP_VERBOSE                    0

#define DEBUG_MSG(msg)              \
{                                   \
  UINT32 my_debug_cntr = 0;         \
  while (my_debug_cntr < 1<<31) {   \
    if (my_debug_cntr == 0) {       \
      BlRtlPrintf(msg);             \
    }                               \
    my_debug_cntr += 1;             \
  }                                 \
}


//
// Basic platform constants.
//

#define PAGE_SIZE                       4096
#define LEGACY_MEMORY_LIMIT             0x100000

//
// Compile-time assertion support.
//

#define C_ASSERT(e) typedef char __C_ASSERT__[(e)?1:-1]

//
// Basic integer types.
//

typedef char                CHAR;
typedef unsigned char       UCHAR;

typedef char                INT8;
typedef unsigned char       UINT8;
typedef short               INT16;
typedef unsigned short      UINT16;
typedef long                INT32;
typedef unsigned long       UINT32;
typedef __int64             INT64;
typedef unsigned __int64    UINT64;

#if defined(BOOT_X86)

typedef INT32               LONG_PTR;
typedef UINT32              ULONG_PTR;

#elif defined (BOOT_X64)

typedef INT64               LONG_PTR;
typedef UINT64              ULONG_PTR;

#endif


//
// Basic boolean type.
//

typedef unsigned char       BOOLEAN;

//
// Basic pointer types.
//

typedef void                VOID;
typedef VOID *              PVOID;
typedef const VOID *        PCVOID;
typedef CHAR *              PCHAR;
typedef INT8 *              PINT8;
typedef UINT8 *             PUINT8;
typedef INT16 *             PINT16;
typedef UINT16 *            PUINT16;
typedef INT32 *             PINT32;
typedef UINT32 *            PUINT32;
typedef INT64 *             PINT64;
typedef UINT64 *            PUINT64;
typedef LONG_PTR *          PLONG_PTR;
typedef ULONG_PTR *         PULONG_PTR;
typedef BOOLEAN             PBOOLEAN;

//
// Wide character types.
//

typedef wchar_t             WCHAR;
typedef WCHAR *             PWCHAR;
typedef const WCHAR *       PCWSTR;
typedef const CHAR *        PCSTR;

//
// Structure macros.
//

#define FIELD_OFFSET(Type, Field)               ((UINT32) (ULONG_PTR) &(((Type *) 0)->Field))
#define CONTAINING_RECORD(Address, Type, Field) ((Type *) ((ULONG_PTR) (Address) - FIELD_OFFSET(Type, Field)))
#define ARRAY_SIZE(Array)                       (sizeof(Array) / sizeof(Array[0]))

//
// Macros for rounding up.
//

#define ROUND_UP_TO_POWER2(X, P)        (((X) + ((P) - 1)) & (~((P) - 1)))
#define ROUND_UP_TO_PAGES(X)            ROUND_UP_TO_POWER2(X, PAGE_SIZE)

//
// The following macro is used to satisfy the compiler. Note that the
// expressions/statements passed to this macro are not necessary for
// correctness, but without them the compiler cannot compile with W4.
//

#define SATISFY_OVERZEALOUS_COMPILER(X) X

//
// Function modifiers.
//

#define FORCEINLINE         __forceinline

//
// Basic constants.
//

#define FALSE               0
#define TRUE                1
#define NULL                0

//
// va support (from vadefs.h).
//

typedef char *va_list;

#if defined(BOOT_X86)

#define _ADDRESSOF(v)   ( &(v) )
#define _INTSIZEOF(n)   ( (sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1) )

#define _crt_va_start(ap,v)  ( ap = (va_list)_ADDRESSOF(v) + _INTSIZEOF(v) )
#define _crt_va_arg(ap,t)    ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )
#define _crt_va_end(ap)      ( ap = (va_list)0 )

#elif defined(BOOT_X64)

extern "C" void __cdecl __va_start(va_list *, ...);

#define _crt_va_start(ap, x) ( __va_start(&ap, x) )
#define _crt_va_arg(ap, t)   \
    ( ( sizeof(t) > sizeof(__int64) || ( sizeof(t) & (sizeof(t) - 1) ) != 0 ) \
        ? **(t **)( ( ap += sizeof(__int64) ) - sizeof(__int64) ) \
        :  *(t  *)( ( ap += sizeof(__int64) ) - sizeof(__int64) ) )
#define _crt_va_end(ap)      ( ap = (va_list)0 )

#endif

#define va_start    _crt_va_start
#define va_arg      _crt_va_arg
#define va_end      _crt_va_end

UINT32
DisablePaging(
    UINT32 arg
    );

//
// Runtime assertion support.
//

BOOLEAN
BlRtlPrintf(
    PCSTR Format,
    ...
    );

VOID
BlRtlHaltInternal(
    PCSTR FileName,
    UINT32 LineNumber
    );

VOID
BlRtlAssertFailed(
    PCSTR FileName,
    UINT32 LineNumber
    );

VOID
BlRtlAssertFailedPtr(
    PCSTR FileName,
    UINT32 LineNumber,
    ULONG_PTR Param
    );

#define BlRtlHalt() BlRtlHaltInternal(__FILE__, __LINE__)

#define BLASSERT(X)                                 \
    if (!(X)) {                                     \
        BlRtlAssertFailed(__FILE__, __LINE__);      \
    }

#define BLASSERT_PTR(X, P)                                          \
    if (!(X)) {                                                     \
        BlRtlAssertFailedPtr(__FILE__, __LINE__, (ULONG_PTR) (P));  \
    }

//
// Linked list support.
//

typedef struct _LIST_ENTRY {
   struct _LIST_ENTRY *Flink;
   struct _LIST_ENTRY *Blink;
} LIST_ENTRY, *PLIST_ENTRY;

VOID
BlRtlInitializeListHead(
    PLIST_ENTRY Head
    );

BOOLEAN
BlRtlIsListEmpty(
    PLIST_ENTRY Head
    );

BOOLEAN
BlRtlRemoveEntryList(
    PLIST_ENTRY Entry
    );

PLIST_ENTRY
BlRtlRemoveHeadList(
    PLIST_ENTRY Head
    );

PLIST_ENTRY
BlRtlRemoveTailList(
    PLIST_ENTRY Head
    );

VOID
BlRtlInsertTailList(
    PLIST_ENTRY Head,
    PLIST_ENTRY Entry
    );

VOID
BlRtlInsertHeadList(
    PLIST_ENTRY Head,
    PLIST_ENTRY Entry
    );

//
// Legacy far pointer support.
//

typedef struct _FAR_POINTER {
    UINT16 Offset;
    UINT16 Segment;
} FAR_POINTER, *PFAR_POINTER;

C_ASSERT(sizeof(FAR_POINTER) == sizeof(UINT32));

VOID
BlRtlConvertLinearPointerToFarPointer(
    PVOID LinearPointer,
    PFAR_POINTER FarPointer
    );

PVOID
BlRtlConvertFarPointerToLinearPointer(
    PFAR_POINTER FarPointer
    );

//
// Boot environment block.
//

typedef struct _BEB {
    UINT32 BootType;
    UINT32 BootDriveNumber;
    UINT32 FlashImage;
    UINT32 SmapAddr;
    UINT32 SmapSize;
    UINT32 LegacyCallAddress;
    UINT32 LegacyReturnAddress;
    UINT32 LegacyReturnCr3;
    UINT32 LegacyCall_OpCode;
    UINT32 LegacyCall_Vector;
    UINT32 LegacyCall_ax;
    UINT32 LegacyCall_bx;
    UINT32 LegacyCall_cx;
    UINT32 LegacyCall_dx;
    UINT32 LegacyCall_si;
    UINT32 LegacyCall_di;
    UINT32 LegacyCall_ds;
    UINT32 LegacyCall_es;
    UINT32 LegacyCall_flags;
    FAR_POINTER LegacyCall_FramePtr;
    UINT32 LegacyCall_FrameSize;
    FAR_POINTER LegacyCall_FuncPtr;
    FAR_POINTER ApEntry16;
    UINT32 ApEntry;
    FAR_POINTER ApStartupLock;
} BEB, *PBEB;

#define BEB_BASE                        ((ULONG_PTR) 0x2F000)

FORCEINLINE
PBEB
BlGetBeb(
    VOID
    )

//++
//
//Routine Description:
//
//  This function returns a pointer to the boot environment block.
//
//Return Value:
//
//  Pointer to the boot environment block.
//
//--

{
    return ((PBEB) BEB_BASE);
}

//
// Boot sources.
//

#define BL_CD_BOOT      1
#define BL_FAT16_BOOT   2
#define BL_FAT32_BOOT   3
#define BL_PXE_BOOT     4
#define BL_FLASH_BOOT   5

//
// Legacy call context.
//

typedef struct _BL_LEGACY_CALL_CONTEXT {
    UINT32 eax;
    UINT32 ebx;
    UINT32 ecx;
    UINT32 edx;
    UINT32 esi;
    UINT32 edi;
    UINT32 ds;
    UINT32 es;
    UINT32 eflags;
} BL_LEGACY_CALL_CONTEXT, *PBL_LEGACY_CALL_CONTEXT;

//
// Legacy call opcodes.
//

#define LC_NOP                          0x0000
#define LC_INTXX                        0x0001
#define LC_FARCALL                      0x0002

//
// RFLAGS.
//

#define RFLAGS_CF                       0x0001

//
// Utility functions.
//

VOID
BlRtlZeroMemory(
    PVOID Buffer,
    ULONG_PTR Length
    );

VOID
BlRtlCopyMemory(
    PVOID Destination,
    PCVOID Source,
    ULONG_PTR Length
    );

BOOLEAN
BlRtlCompareMemory(
    PCVOID Buffer1,
    PCVOID Buffer2,
    ULONG_PTR Length
    );

VOID
BlRtlCallLegacyInterruptService(
    UINT8 Vector,
    PBL_LEGACY_CALL_CONTEXT Input,
    PBL_LEGACY_CALL_CONTEXT Output
    );

VOID
BlRtlCallLegacyFunction(
    UINT16 CodeSegment16,
    UINT16 CodeOffset16,
    PVOID CallFrame,
    UINT32 CallFrameSize,
    PBL_LEGACY_CALL_CONTEXT Input,
    PBL_LEGACY_CALL_CONTEXT Output
    );

UINT8
BlRtlComputeChecksum8(
    PCVOID Buffer,
    UINT32 Size
    );

UINT32
BlGetCpuidEax(
    UINT32 reg
    );

UINT32
BlGetCpuidEbx(
    UINT32 reg
    );

UINT32
BlGetCpuidEcx(
    UINT32 reg
    );

UINT32
BlGetCpuidEdx(
    UINT32 reg
    );

//
// Constants and macros for accessing the keyboard controller.
//

#define BL_KEYBOARD_STATUS_PORT                 0x0064
#define BL_KEYBOARD_COMMAND_PORT                0x0064
#define BL_KEYBOARD_DATA_PORT                   0x0060

#define BL_KEYBOARD_STATUS_INPUT_BUFFER_FULL    0x02

#define BL_KEYBOARD_COMMAND_WRITE_OUTPUT_PORT   0xD1
#define BL_KEYBOARD_COMMAND_PULSE_RESET_BIT     0xFE
#define BL_KEYBOARD_COMMAND_PULSE_OUTPUT_PORT   0xFF

#define BL_KEYBOARD_A20_ENABLE                  0xDF

#define BL_KEYBOARD_WAIT_FOR_IDLE()                                                                 \
    while ((BlRtlReadPort8(BL_KEYBOARD_STATUS_PORT) & BL_KEYBOARD_STATUS_INPUT_BUFFER_FULL) != 0) { \
    }

#define BL_KEYBOARD_WRITE_COMMAND(X)                                                                \
    {                                                                                               \
        BL_KEYBOARD_WAIT_FOR_IDLE();                                                                \
        BlRtlWritePort8(BL_KEYBOARD_COMMAND_PORT, (X));                                             \
        BL_KEYBOARD_WAIT_FOR_IDLE();                                                                \
    }

#define BL_KEYBOARD_WRITE_OUTPUT_PORT(X)                                                            \
    {                                                                                               \
        BL_KEYBOARD_WAIT_FOR_IDLE();                                                                \
        BlRtlWritePort8(BL_KEYBOARD_COMMAND_PORT, BL_KEYBOARD_COMMAND_WRITE_OUTPUT_PORT);           \
        BL_KEYBOARD_WAIT_FOR_IDLE();                                                                \
        BlRtlWritePort8(BL_KEYBOARD_DATA_PORT, (X));                                                \
        BL_KEYBOARD_WAIT_FOR_IDLE();                                                                \
    }

VOID
BlRtlResetSystem(
    VOID
    );

VOID
BlRtlShutdownSystem(
    VOID
    );

//
// Drive access routines.
//

#pragma pack(1)

typedef struct _INT13_DRIVE_PARAMETERS {
    UINT16 StructureSize;
    UINT16 InformationFlags;
    UINT32 NumberOfCylinders;
    UINT32 NumberOfHeads;
    UINT32 SectorsPerTrack;
    UINT64 TotalNumberOfSectors;
    UINT16 BytesPerSector;
} INT13_DRIVE_PARAMETERS, *PINT13_DRIVE_PARAMETERS;

C_ASSERT(sizeof(INT13_DRIVE_PARAMETERS) == 0x1A);

#pragma pack()

BOOLEAN
BlRtlGetDriveParameters(
    UINT8 DriveId,
    PINT13_DRIVE_PARAMETERS DriveParameters
    );

BOOLEAN
BlRtlReadDrive(
    UINT8 DriveId,
    UINT64 FirstBlock,
    UINT16 NumberOfBlocks,
    PVOID Buffer
    );

//
// I/O port access routines.
//

UINT8
BlRtlReadPort8(
    UINT16 Port
    );

UINT32
BlRtlReadPort32(
    UINT16 Port
    );

VOID
BlRtlWritePort8(
    UINT16 Port,
    UINT8 Value
    );

VOID
BlRtlWritePort32(
    UINT16 Port,
    UINT32 Value
    );

//
// String support.
//

CHAR
BlRtlConvertCharacterToUpperCase(
    CHAR C
    );

PCSTR
BlRtlFindSubstring(
    PCSTR String,
    PCSTR Substring
    );

BOOLEAN
BlRtlParsePositiveDecimal(
    PCSTR String,
    PUINT32 Number,
    PUINT32 CharactersConsumed
    );

BOOLEAN
BlRtlFormatString(
    PCHAR Output,
    UINT32 OutputSize,
    PCSTR Format,
    va_list ArgumentList
    );

UINT32
BlRtlStringLength(
    PCSTR String
    );

UINT32
BlRtlStringLengthW(
    PCWSTR String
    );

BOOLEAN
BlRtlEqualStringN(
    PCSTR String1,
    PCSTR String2,
    UINT32 Count
    );

BOOLEAN
BlRtlEqualStringI(
    PCSTR String1,
    PCSTR String2
    );

//
// Video support.
//

VOID
BlVideoPrintString(
    PCSTR String
    );

BOOLEAN
BlVideoPrintf(
    PCSTR Format,
    ...
    );

VOID
BlVideoInitialize(
    VOID
    );

//
// COM port support.
//

#define COM_MAX_PORT                    4

extern const UINT16 BlComBasePort[COM_MAX_PORT + 1];

BOOLEAN
BlComInitialize(
    UINT8 PortNumber,
    UINT32 BaudRate
    );

BOOLEAN
BlComSendByte(
    UINT8 PortNumber,
    UINT8 Byte
    );

BOOLEAN
BlComDataAvailable(
    UINT8 PortNumber
    );

UINT8
BlComReceiveByte(
    UINT8 PortNumber
    );

//
// KD support.
//

#define KD_RETRY_COUNT                      16

#define KD_PACKET_LEADER                    0x30303030
#define KD_CONTROL_PACKET_LEADER            0x69696969

#define KD_PACKET_TYPE_KD_DEBUG_IO          3
#define KD_PACKET_TYPE_KD_RESEND            5       // Packet-control type
#define KD_PACKET_TYPE_KD_RESET             6       // Packet-control type

#define KD_API_PRINT_STRING                 0x00003230

typedef struct _KD_PACKET {
    UINT32 PacketLeader;
    UINT16 PacketType;
    UINT16 ByteCount;
    UINT32 PacketId;
    UINT32 Checksum;
} KD_PACKET, *PKD_PACKET;

typedef struct _KD_PRINT_STRING {
    UINT32 LengthOfString;
} KD_PRINT_STRING, *PKD_PRINT_STRING;

typedef struct _KD_GET_STRING {
    UINT32 LengthOfPromptString;
    UINT32 LengthOfStringRead;
} KD_GET_STRING, *PKD_GET_STRING;

typedef struct _KD_DEBUG_IO {
    UINT32 ApiNumber;
    UINT16 ProcessorLevel;
    UINT16 Processor;
    union {
        KD_PRINT_STRING PrintString;
        KD_GET_STRING GetString;
    } u1;
} KD_DEBUG_IO, *PKD_DEBUG_IO;

extern UINT8 BlSingularityOhci1394Buffer[3 * PAGE_SIZE];

extern UINT8 BlKdComPort;

extern UINT32 BlKdNextPacketId;

VOID
BlKdInitialize(
    VOID
    );

VOID
BlKdSpin(
    VOID
    );

BOOLEAN
BlKdPrintString(
    PCSTR String
    );

BOOLEAN
BlKdPrintf(
    PCSTR Format,
    ...
    );

UINT32
BlKdComputeChecksum(
    PCVOID Buffer,
    UINT32 Length
    );

BOOLEAN
BlKd1394Connect(
    VOID
    );

BOOLEAN
BlKd1394SendPacket(
    UINT16 PacketType,
    PCVOID Header,
    UINT16 HeaderSize,
    PCVOID Data,
    UINT16 DataSize
    );

BOOLEAN
BlKdComConnect(
    VOID
    );

BOOLEAN
BlKdComSendPacket(
    UINT16 PacketType,
    PCVOID Header,
    UINT16 HeaderSize,
    PCVOID Data,
    UINT16 DataSize
    );

//
// System memory map (SMAP) support.
//

#define BL_SMAP_AVAILABLE        1
#define BL_SMAP_RESERVED         2
#define BL_SMAP_ACPI_RECLAIM     3
#define BL_SMAP_ACPI_NVS         4
#define BL_SMAP_UNUSABLE         5
#define BL_SMAP_KERNEL_NONGC     6
#define BL_SMAP_KERNEL_STACK     7

typedef struct _BL_SMAP_ENTRY {
    UINT64 Base;
    UINT64 Size;
    UINT32 Type;
    UINT32 ExtendedAttributes;
} BL_SMAP_ENTRY, *PBL_SMAP_ENTRY;

#define BL_MAX_SMAP_ENTRIES 128

typedef struct _BL_SMAP {
    BL_SMAP_ENTRY Entry[BL_MAX_SMAP_ENTRIES];
    UINT32 EntryCount;
} BL_SMAP, *PBL_SMAP;

extern BL_SMAP BlSystemMemoryMap;

VOID
BlSmapInitialize(
    VOID
    );

//
// Pool support.
//

VOID
BlPoolInitialize(
    VOID
    );

PVOID
BlPoolAllocateBlock(
    UINT32 Size
    );

VOID
BlPoolFreeBlock(
    PVOID P
    );

//
// PNP BIOS support.
//

#pragma pack(1)

typedef struct _PNP_INSTALLATION_CHECK {
    CHAR Signature[4];
    UINT8 Version;
    UINT8 Length;
    UINT16 ControlField;
    UINT8 Checksum;
    UINT32 EventNotificationFlagAddress;
    UINT16 RealModeCodeOffset16;
    UINT16 RealModeCodeSegment16;
    UINT16 ProtectedModeCodeOffset16;
    UINT32 ProtectedModeCodeSegmentBase32;
    UINT32 OEMDeviceId;
    UINT16 RealModeDataSegment16;
    UINT32 ProtectedModeDataSegmentBase32;
} PNP_INSTALLATION_CHECK, *PPNP_INSTALLATION_CHECK;

C_ASSERT(sizeof(PNP_INSTALLATION_CHECK) == 0x21);

typedef struct _PNP_SYSTEM_DEVICE_NODE {
    UINT16 Size;
    UINT8 Handle;
    UINT32 ProductId;
    UINT8 DeviceTypeCode[3];
    UINT16 DeviceNodeAttributes;
} PNP_SYSTEM_DEVICE_NODE, *PPNP_SYSTEM_DEVICE_NODE;

typedef struct _PNP_ISA_CONFIGURATION {
    UINT8 Revision;
    UINT8 NumberOfCardSelectNumbers;
    UINT16 DataReadPort;
    UINT16 Reserved;
} PNP_ISA_CONFIGURATION, *PPNP_ISA_CONFIGURATION;

#pragma pack()

extern PPNP_SYSTEM_DEVICE_NODE BlPnpSystemDeviceNodeList;
extern UINT32 BlPnpSystemDeviceNodeListSize;
extern PNP_ISA_CONFIGURATION BlPnpIsaConfiguration;

VOID
BlPnpInitialize(
    VOID
    );

//
// PCI support.
//

typedef struct _PCI_INSTALLATION_CHECK {
    UINT32 Eax;
    UINT32 Ebx;
    UINT32 Ecx;
    UINT32 Edx;
    UINT8 HardwareCharacteristics;
    UINT8 MajorVersion;
    UINT8 MinorVersion;
    UINT8 LastBusNumber;
    UINT32 ProtectedModeEntryPoint;
} PCI_INSTALLATION_CHECK, *PPCI_INSTALLATION_CHECK;

extern PCI_INSTALLATION_CHECK BlPciInstallationCheck;
extern UINT32 BlPciOhci1394BaseAddress;

VOID
BlPciInitialize(
    VOID
    );

//
// ACPI support.
//

extern UINT32 BlAcpiNumberOfProcessors;
extern PVOID BlAcpiRsdpAddress;

VOID
BlAcpiInitialize(
    VOID
    );

VOID
BlAcpiResetSystem(
    VOID
    );

//
// Segment management.
//

#define NULL_SELECTOR                0x0000
#define RM_VIDEO_SELECTOR            0x0008
#define RM_CODE_SELECTOR             0x0010
#define RM_DATA_SELECTOR             0x0018
#define PM_CODE_SELECTOR             0x0020
#define PM_DATA_SELECTOR             0x0028
#define LM_CODE_SELECTOR             0x0030
#define LM_DATA_SELECTOR             0x0038
#define UM_CODE_SELECTOR             0x0040
#define UM_DATA_SELECTOR             0x0048
#define PROCESSOR_SELECTOR           0x0050
#define UNUSED_SELECTOR              0x0058
#define TSS_SELECTOR                 0x0060

typedef struct _CODE_SEGMENT {
    UINT64 Limit_15_0:16;
    UINT64 Base_23_0:24;
    UINT64 Accessed:1;
    UINT64 Readable:1;
    UINT64 Conforming:1;
    UINT64 Code:1;
    UINT64 S:1;
    UINT64 Dpl:2;
    UINT64 Present:1;
    UINT64 Limit_19_16:4;
    UINT64 Unused:1;
    UINT64 Long:1;
    UINT64 Default:1;
    UINT64 Granularity:1;
    UINT64 Base_31_24:8;
} CODE_SEGMENT, *PCODE_SEGMENT;

typedef struct _DATA_SEGMENT {
    UINT64 Limit_15_0:16;
    UINT64 Base_23_0:24;
    UINT64 Accessed:1;
    UINT64 Writable:1;
    UINT64 Expansion:1;
    UINT64 Code:1;
    UINT64 S:1;
    UINT64 Dpl:2;
    UINT64 Present:1;
    UINT64 Limit_19_16:4;
    UINT64 Unused:1;
    UINT64 Reserved:1;
    UINT64 Big:1;
    UINT64 Granularity:1;
    UINT64 Base_31_24:8;
} DATA_SEGMENT, *PDATA_SEGMENT;

#define SSDT_AVAILABLE_TSS  0x09
#define SSDT_BUSY_TSS       0x0B

typedef struct _SYSTEM_SEGMENT {
    UINT64 Limit_15_0:16;
    UINT64 Base_23_0:24;
    UINT64 Type:4;
    UINT64 S:1;
    UINT64 Dpl:2;
    UINT64 Present:1;
    UINT64 Limit_19_16:4;
    UINT64 Unused:1;
    UINT64 Reserved1:2;
    UINT64 Granularity:1;
    UINT64 Base_31_24:8;
#if defined(BOOT_X64)
    UINT64 Base_63_32:32;
    UINT64 Reserved2:32;
#endif
} SYSTEM_SEGMENT, *PSYSTEM_SEGMENT;

#pragma pack(1)

typedef struct _GDTR {
    UINT16 Limit;
    UINT64 Base;
} GDTR, *PGDTR;

C_ASSERT(sizeof(GDTR) == 10);

typedef struct _IDTR {
    UINT16 Limit;
    UINT64 Base;
} IDTR, *PIDTR;

C_ASSERT(sizeof(IDTR) == 10);

#pragma pack()

extern GDTR BlMmInitialGdtr;

ULONG_PTR
BlMmGetCr3(
    VOID
    );

VOID
BlMmSetCr3(
    ULONG_PTR Value
    );

VOID
BlFakeSKINIT(
    ULONG_PTR Value
    );

VOID
BlRealSKINIT(
    ULONG_PTR Value
    );

#if defined(BOOT_X86)

UINT16
BlMmGetFs(
    VOID
    );

VOID
BlMmSetFs(
    UINT16 Value
    );

#elif defined(BOOT_X64)

UINT16
BlMmGetGs(
    VOID
    );

VOID
BlMmSetGs(
    UINT16 Value
    );

#endif

VOID
BlMmSwitchStack(
    PVOID Stack,
    PVOID Function
    );

VOID
BlMmGetGdtr(
    PGDTR Gdtr
    );

VOID
BlMmSetGdtr(
    PGDTR Gdtr
    );

VOID
BlMmInitializeCodeSegment(
    PCODE_SEGMENT CodeSegment
    );

VOID
BlMmInitializeDataSegment(
    PDATA_SEGMENT DataSegment,
    UINT32 Base,
    UINT32 Limit
    );

VOID
BlMmInitializeSystemSegment(
    PSYSTEM_SEGMENT SystemSegment,
    UINT32 Type,
    ULONG_PTR Base,
    UINT32 Limit
    );

//
// Memory management.
//

#define PAGE_PRESENT                        ((UINT64) 0x01)
#define PAGE_WRITEABLE                      ((UINT64) 0x02)
#define PAGE_WRITETHROUGH                   ((UINT64) 0x08)
#define PAGE_CACHEDISABLE                   ((UINT64) 0x10)
#define PAGE_ACCESSED                       ((UINT64) 0x20)
#define PAGE_2MB                            ((UINT64) 0x80)

#define BL_MM_PHYSICAL_REGION_MIN_TYPE                      0x00000001
#define BL_MM_PHYSICAL_REGION_FREE                          0x00000001
#define BL_MM_PHYSICAL_REGION_BIOS                          0x00000002
#define BL_MM_PHYSICAL_REGION_BOOT_LOADER                   0x00000003
#define BL_MM_PHYSICAL_REGION_SMAP_RESERVED                 0x00000004
#define BL_MM_PHYSICAL_REGION_DISTRO                        0x00000005
#define BL_MM_PHYSICAL_REGION_KERNEL_IMAGE                  0x00000006
#define BL_MM_PHYSICAL_REGION_NATIVE_PLATFORM               0x00000007
#define BL_MM_PHYSICAL_REGION_NATIVE_PROCESSOR              0x00000008
#define BL_MM_PHYSICAL_REGION_LOG_RECORD                    0x00000009
#define BL_MM_PHYSICAL_REGION_LOG_TEXT                      0x0000000A
#define BL_MM_PHYSICAL_REGION_KERNEL_STACK                  0x0000000B
#define BL_MM_PHYSICAL_REGION_CONTEXT                       0x0000000C
#define BL_MM_PHYSICAL_REGION_TASK                          0x0000000D
#define BL_MM_PHYSICAL_REGION_SINGULARITY                   0x0000000E
#define BL_MM_PHYSICAL_REGION_BOOT_STACK                    0x0000000F
#define BL_MM_PHYSICAL_REGION_SINGULARITY_SMAP              0x00000010
#define BL_MM_PHYSICAL_REGION_MAX_TYPE                      0x00000010

#define BL_MM_BIOS_SIZE                         (1024 * 1024)

typedef struct _BL_MM_PHYSICAL_REGION {
    LIST_ENTRY Entry;
    UINT64 Start;
    UINT64 Size;
    UINT64 Limit;
    UINT32 Type;
} BL_MM_PHYSICAL_REGION, *PBL_MM_PHYSICAL_REGION;

extern ULONG_PTR BlMmBootCr3;

VOID
BlMmEnableA20Gate(
    VOID
    );

VOID
BlMmInitializeSystem(
    VOID
    );

PCHAR
BlMmPhysicalRegionTypeString(
    UINT32 Type
    );

UINT64
BlMmAllocatePhysicalRegion(
    UINT32 Size,
    UINT32 Type
    );

BOOLEAN
BlMmAllocateSpecificPhysicalRegion(
    UINT64 Base,
    UINT64 Size,
    UINT32 Type
    );

BOOLEAN
BlMmFindFreePhysicalRegion(
    PUINT64 Base,
    PUINT64 Size
    );

BOOLEAN
BlMmGetNextPhysicalRegion(
    PVOID *Handle,
    PUINT64 Base,
    PUINT64 Size,
    PUINT32 Type
    );

VOID
BlMmDumpPhysicalRegionList(
    VOID
    );

VOID
BlMmMapVirtualPage(
    PVOID VirtualAddress,
    PVOID PhysicalAddress,
    BOOLEAN Writeable,
    BOOLEAN Cacheable,
    BOOLEAN WriteThrough
    );

VOID
BlMmMapVirtualRange(
    PVOID VirtualAddress,
    PVOID PhysicalAddress,
    ULONG_PTR Size,
    BOOLEAN Writeable,
    BOOLEAN Cacheable,
    BOOLEAN WriteThrough
    );

extern PVOID BlMmExtendedBiosDataArea;

//
// File system support.
//

extern
BOOLEAN
(*BlFsGetFileSize)(
    PCSTR Path,
    PUINT32 FileSize
    );

extern
BOOLEAN
(*BlFsReadFile)(
    PCSTR Path,
    PVOID Buffer,
    UINT32 NumberOfBytes
    );

//
// CDROM support.
//

VOID
BlCdInitialize(
    UINT8 DriveId
    );

//
// FAT support.
//

#define MBR_FAT32LBA                    0x0C
#define MBR_FAT16LBA                    0x0E

VOID
BlFatInitialize(
    UINT8 DriveId,
    UINT8 FatType
    );

//
// Flash support.
//

VOID
BlFlashInitialize(
    PVOID SearchBegin,
    PVOID SearchLimit
    );

//
// PXE support.
//

VOID
BlPxeInitialize(
    VOID
    );

//
// PE/COFF support.
//

VOID
BlPeGetVirtualRange(
    PVOID Image,
    PVOID *VirtualBase,
    ULONG_PTR *VirtualSize
    );

VOID
BlPeLoadImage(
    PVOID LoadBase,
    UINT32 ImageSize,
    PVOID Image,
    PVOID *EntryPoint,
    BOOLEAN isSLB
    );

//
// RTC support.
//

typedef struct _BL_TIME {
    UINT32 Year;
    UINT8 Month;
    UINT8 Day;
    UINT8 Hour;
    UINT8 Minute;
    UINT8 Second;
} BL_TIME, *PBL_TIME;

VOID
BlRtlGetCurrentTime(
    PBL_TIME Time
    );

extern BL_TIME BlStartTime;

//
// MPS support.
//

VOID
BlMpsInitialize(
    VOID
    );

extern PVOID BlMpsFps;

//
// VESA Support.
//

BOOLEAN
BlVesaInitialize(
    VOID
    );

extern ULONG_PTR BlVesaVideoBuffer;

//
// Call stack support.
//

#if defined(BOOT_X86)

PVOID
BlRtlGetEbp(
    VOID
    );

#elif defined(BOOT_X64)

PVOID
BlRtlGetRbp(
    VOID
    );

#endif

VOID
BlRtlCaptureCallStack(
    PVOID *FrameArray,
    UINT32 FrameCount
    );

//
// Trap Support.
//

typedef struct _BL_TRAP_CONTEXT {

#if defined(BOOT_X86)

    UINT32  Cr2;
    UINT32  Esp;
    UINT32  Ebp;
    UINT32  Edi;
    UINT32  Esi;
    UINT32  Edx;
    UINT32  Ecx;
    UINT32  Ebx;
    UINT32  Eax;
    UINT32  Num;
    UINT32  Err;
    UINT32  Eip;
    UINT32  Cs0;
    UINT32  Efl;

#elif defined (BOOT_X64)

    UINT64  Cr2;
    UINT64  Rsp;
    UINT64  R15;
    UINT64  R14;
    UINT64  R13;
    UINT64  R12;
    UINT64  R11;
    UINT64  R10;
    UINT64  R9;
    UINT64  R8;
    UINT64  Rbp;
    UINT64  Rdi;
    UINT64  Rsi;
    UINT64  Rdx;
    UINT64  Rcx;
    UINT64  Rbx;
    UINT64  Rax;
    UINT64  Num;
    UINT64  Err;
    UINT64  Rip;
    UINT64  Cs0;
    UINT64  Rfl;

#endif

} BL_TRAP_CONTEXT, *PBL_TRAP_CONTEXT;

typedef struct _IDTE {

    UINT16  Offset0To15;
    UINT16  Selector;
    UINT8   Flags;
    UINT8   Access;
    UINT16  Offset16To31;

#if defined(BOOT_X64)

    UINT32  Offset32To63;
    UINT32  Reserved;

#endif

} IDTE, *PIDTE;


VOID
BlTrapEnable(
    VOID
    );

VOID
BlTrapEnter(
    VOID
    );

VOID
BlTrapFatal(
    UINT32 Trap,
    PBL_TRAP_CONTEXT Context
    );

VOID
BlTrapSetIdtr(
    PIDTR Idtr
    );


//
// Singularity bridge.
//

extern PWCHAR BlCommandLine;

VOID
BlSingularityInitialize(
    UINT32 NumberOfProcessors,
    PFAR_POINTER ApEntry16,
    PFAR_POINTER ApStartupLock
    );

VOID
BlSingularityApEntry(
    VOID
    );

extern "C" void * _ReturnAddress(void);

#pragma intrinsic(_ReturnAddress)



================================================
FILE: ironclad-apps/src/Checked/BootLoader/SingLdrPc/bl.inc
================================================
;++
;
; Copyright (c) Microsoft Corporation
;
; Module Name:
;
;     bl.inc
;
; Abstract:
;
;     This module contains definitions for the boot loader.
;
; Environment:
;
;     Boot loader.
;
;--

;
; Boot sources.
;

CD_BOOT                 equ     00001h
FAT16_BOOT              equ     00002h
FAT32_BOOT              equ     00003h
PXE_BOOT                equ     00004h
FLASH_BOOT              equ     00005h

;
; Segment selectors.
;

NULL_SELECTOR           equ     000h
RM_VIDEO_SELECTOR       equ     008h
RM_CODE_SELECTOR        equ     010h
RM_DATA_SELECTOR        equ     018h
PM_CODE_SELECTOR        equ     020h
PM_DATA_SELECTOR        equ     028h    
LM_CODE_SELECTOR        equ     030h
LM_DATA_SELECTOR        equ     038h
UM_CODE_SELECTOR        equ     040h
UM_DATA_SELECTOR        equ     048h
PROCESSOR_SELECTOR      equ     050h
UNUSED_SELECTOR         equ     058h
TSS_SELECTOR            equ     060h
        
;
; CR0 flags.
;

CR0_PE                  equ     000000001h
CR0_NE                  equ     000000020h
CR0_PG                  equ     080000000h

;
; CR4 flags.
;

CR4_PSE                 equ     000000010h
CR4_PAE                 equ     000000020h
CR4_PCE                 equ     000000100h
CR4_OSFXSR              equ     000000200h

;
; Initial stack pointer values.
;

RM_INITIAL_SS           equ     01000h
RM_INITIAL_SP           equ     0FFF8h
PM_INITIAL_ESP          equ     000020000h
BL_ENTRY_SP             equ     000080000h

;
; Page table addresses.
;

LM_PML4T_ADDRESS        equ     000021000h
PM_PDPT_ADDRESS         equ     000022000h
PM_PDT_ADDRESS          equ     000023000h

;
; Page table entry flags.
;

PTE_PRESENT             equ     000000001h
PTE_WRITEABLE           equ     000000002h
PTE_ACCESSED            equ     000000020h
PTE_2MB                 equ     000000080h

;
; EFER MSR index. (Long Mode)
;

EFER_MSR_INDEX          equ     0C0000080h

;
; EFER flags. (Long Mode)
;

EFER_LME                equ     000000100h
EFER_NXE                equ     000000800h

;
; Image target address.
;

IMAGE_ADDRESS           equ     000040000h

;
; Boot environment block (BEB).
;

BEB_BASE                equ     00002F000h
BEB_SEG16               equ     02F00h
BEB_OFF16               equ     00000h

BEB     struct

        BootType                dd      ?
        BootDriveNumber         dd      ?
        FlashImage              dd      ?
        SmapAddr                dd      ?
        SmapSize                dd      ?
        LegacyCallAddress       dd      ?
        LegacyReturnAddress     dd      ?
        LegacyReturnCr3         dd      ?
        LegacyCall_OpCode       dd      ?
        LegacyCall_Vector       dd      ?
        LegacyCall_eax          dd      ?
        LegacyCall_ebx          dd      ?
        LegacyCall_ecx          dd      ?
        LegacyCall_edx          dd      ?
        LegacyCall_esi          dd      ?
        LegacyCall_edi          dd      ?
        LegacyCall_ds           dd      ?
        LegacyCall_es           dd      ?
        LegacyCall_eflags       dd      ?
        LegacyCall_FramePtr     dd      ?
        LegacyCall_FrameSize    dd      ?
        LegacyCall_FuncPtr      dd      ?
        ApEntry16               dd      ?
        ApEntry                 dd      ?
        ApStartupLock           dd      ?

BEB     ends

;
; Trap Context
;

BL_TRAP_CONTEXT struct

ifdef BOOT_X86
        
        TrapCr2         dd      ?
        TrapEsp         dd      ?
        TrapEbp         dd      ?
        TrapEdi         dd      ?
        TrapEsi         dd      ?
        TrapEdx         dd      ?
        TrapEcx         dd      ?
        TrapEbx         dd      ?
        TrapEax         dd      ?
        TrapNum         dd      ?
        TrapErr         dd      ?
        TrapEip         dd      ?
        TrapCs0         dd      ?
        TrapEfl         dd      ?
        
endif
        
ifdef BOOT_X64
        
        TrapCr2         dq      ?
        TrapRsp         dq      ?
        TrapR15         dq      ?
        TrapR14         dq      ?
        TrapR13         dq      ?
        TrapR12         dq      ?
        TrapR11         dq      ?
        TrapR10         dq      ?
        TrapR09         dq      ?
        TrapR08         dq      ?
        TrapRbp         dq      ?
        TrapRdi         dq      ?
        TrapRsi         dq      ?
        TrapRdx         dq      ?
        TrapRcx         dq      ?
        TrapRbx         dq      ?
        TrapRax         dq      ?
        TrapNum         dq      ?
        TrapErr         dq      ?
        TrapRip         dq      ?
        TrapCs0         dq      ?
        TrapRfl         dq      ?
        
endif        

BL_TRAP_CONTEXT ends

;
; Legacy call opcodes.
;

LC_NOP                          equ     00000h
LC_INTXX                        equ     00001h
LC_FARCALL                      equ     00002h

;
; PE/COFF structures.
;

;
; typedef struct _IMAGE_DOS_HEADER {      // DOS .EXE header
;     WORD   e_magic;                     // Magic number
;     WORD   e_cblp;                      // Bytes on last page of file
;     WORD   e_cp;                        // Pages in file
;     WORD   e_crlc;                      // Relocations
;     WORD   e_cparhdr;                   // Size of header in paragraphs
;     WORD   e_minalloc;                  // Minimum extra paragraphs needed
;     WORD   e_maxalloc;                  // Maximum extra paragraphs needed
;     WORD   e_ss;                        // Initial (relative) SS value
;     WORD   e_sp;                        // Initial SP value
;     WORD   e_csum;                      // Checksum
;     WORD   e_ip;                        // Initial IP value
;     WORD   e_cs;                        // Initial (relative) CS value
;     WORD   e_lfarlc;                    // File address of relocation table
;     WORD   e_ovno;                      // Overlay number
;     WORD   e_res[4];                    // Reserved words
;     WORD   e_oemid;                     // OEM identifier (for e_oeminfo)
;     WORD   e_oeminfo;                   // OEM information; e_oemid specific
;     WORD   e_res2[10];                  // Reserved words
;     LONG   e_lfanew;                    // File address of new exe header
;   } IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;
;

IDH_NT_HEADER_OFFSET            equ     00000003Ch

;
; typedef struct _IMAGE_FILE_HEADER {
;     WORD    Machine;
;     WORD    NumberOfSections;
;     DWORD   TimeDateStamp;
;     DWORD   PointerToSymbolTable;
;     DWORD   NumberOfSymbols;
;     WORD    SizeOfOptionalHeader;
;     WORD    Characteristics;
; } IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;
;

IFH_NUMBER_OF_SECTIONS          equ     000000002h
IFH_SIZE_OF_OPTIONAL_HEADER     equ     000000010h

ifdef BOOT_X86

;
; typedef struct _IMAGE_OPTIONAL_HEADER32 {
;     WORD    Magic;
;     BYTE    MajorLinkerVersion;
;     BYTE    MinorLinkerVersion;
;     DWORD   SizeOfCode;
;     DWORD   SizeOfInitializedData;
;     DWORD   SizeOfUninitializedData;
;     DWORD   AddressOfEntryPoint;
;     DWORD   BaseOfCode;
;     DWORD   BaseOfData;
;     DWORD   ImageBase;
;     DWORD   SectionAlignment;
;     DWORD   FileAlignment;
;     WORD    MajorOperatingSystemVersion;
;     WORD    MinorOperatingSystemVersion;
;     WORD    MajorImageVersion;
;     WORD    MinorImageVersion;
;     WORD    MajorSubsystemVersion;
;     WORD    MinorSubsystemVersion;
;     DWORD   Win32VersionValue;
;     DWORD   SizeOfImage;
;     DWORD   SizeOfHeaders;
;     DWORD   CheckSum;
;     WORD    Subsystem;
;     WORD    DllCharacteristics;
;     DWORD   SizeOfStackReserve;
;     DWORD   SizeOfStackCommit;
;     DWORD   SizeOfHeapReserve;
;     DWORD   SizeOfHeapCommit;
;     DWORD   LoaderFlags;
;     DWORD   NumberOfRvaAndSizes;
;     IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
; } IMAGE_OPTIONAL_HEADER32, *PIMAGE_OPTIONAL_HEADER32;
;

IOH32_IMAGE_BASE                equ     00000001Ch

endif

ifdef BOOT_X64

;
; typedef struct _IMAGE_OPTIONAL_HEADER64 {
;     WORD        Magic;
;     BYTE        MajorLinkerVersion;
;     BYTE        MinorLinkerVersion;
;     DWORD       SizeOfCode;
;     DWORD       SizeOfInitializedData;
;     DWORD       SizeOfUninitializedData;
;     DWORD       AddressOfEntryPoint;
;     DWORD       BaseOfCode;
;     ULONGLONG   ImageBase;
;     DWORD       SectionAlignment;
;     DWORD       FileAlignment;
;     WORD        MajorOperatingSystemVersion;
;     WORD        MinorOperatingSystemVersion;
;     WORD        MajorImageVersion;
;     WORD        MinorImageVersion;
;     WORD        MajorSubsystemVersion;
;     WORD        MinorSubsystemVersion;
;     DWORD       Win32VersionValue;
;     DWORD       SizeOfImage;
;     DWORD       SizeOfHeaders;
;     DWORD       CheckSum;
;     WORD        Subsystem;
;     WORD        DllCharacteristics;
;     ULONGLONG   SizeOfStackReserve;
;     ULONGLONG   SizeOfStackCommit;
;     ULONGLONG   SizeOfHeapReserve;
;     ULONGLONG   SizeOfHeapCommit;
;     DWORD       LoaderFlags;
;     DWORD       NumberOfRvaAndSizes;
;     IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
; } IMAGE_OPTIONAL_HEADER64, *PIMAGE_OPTIONAL_HEADER64;
;

IOH64_IMAGE_BASE                equ     000000018h

endif
        
IOH_ADDRESS_OF_ENTRY_POINT      equ     000000010h
IOH_SIZE_OF_HEADERS             equ     00000003Ch

;
; typedef struct _IMAGE_NT_HEADERS32/64 {
;     DWORD Signature;
;     IMAGE_FILE_HEADER FileHeader;
;     IMAGE_OPTIONAL_HEADER32/64 OptionalHeader;
; } IMAGE_NT_HEADERS32/64, *PIMAGE_NT_HEADERS32/64;
;

INH_SIGNATURE                   equ     000000000h
INH_FILE_HEADER                 equ     000000004h
INH_OPTIONAL_HEADER             equ     000000018h

;
; Signatures.
;

IMAGE_DOS_SIGNATURE             equ     05A4Dh          ; MZ
IMAGE_NT_SIGNATURE              equ     000004550h      ; PE00

;
; typedef struct _IMAGE_SECTION_HEADER {
;     BYTE    Name[IMAGE_SIZEOF_SHORT_NAME];
;     union {
;             DWORD   PhysicalAddress;
;             DWORD   VirtualSize;
;     } Misc;
;     DWORD   VirtualAddress;
;     DWORD   SizeOfRawData;
;     DWORD   PointerToRawData;
;     DWORD   PointerToRelocations;
;     DWORD   PointerToLinenumbers;
;     WORD    NumberOfRelocations;
;     WORD    NumberOfLinenumbers;
;     DWORD   Characteristics;
; } IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;
;

ISH_VIRTUAL_SIZE                equ     000000008h
ISH_VIRTUAL_ADDRESS             equ     00000000Ch
ISH_SIZE_OF_RAW_DATA            equ     000000010h
ISH_POINTER_TO_RAW_DATA         equ     000000014h

IMAGE_SECTION_HEADER_SIZE       equ     000000028h





================================================
FILE: ironclad-apps/src/Checked/BootLoader/SingLdrPc/blacpi.cpp
================================================
//++
//
//  Copyright (c) Microsoft Corporation
//
//  Module Name:
//
//    blacpi.cpp
//
//  Abstract:
//
//    This module implements ACPI support for the boot loader environment.
//
//  Environment:
//
//    Boot loader.
//
//--

#include "bl.h"

#pragma pack(1)

//
// Generic Address Structure (GAS)
//

#define ACPI_GAS_MEMORY                 0
#define ACPI_GAS_IO                     1
#define ACPI_GAS_PCI                    2

#define ACPI_GAS_ACCESS_SIZE_UNDEFINED  0
#define ACPI_GAS_ACCESS_SIZE_BYTE       1
#define ACPI_GAS_ACCESS_SIZE_WORD       2
#define ACPI_GAS_ACCESS_SIZE_DWORD      3
#define ACPI_GAS_ACCESS_SIZE_QWORD      4

typedef struct _ACPI_GAS {
    UINT8 AddressSpaceId;
    UINT8 RegisterBitWidth;
    UINT8 RegisterBitOffset;
    UINT8 AccessSize;
    UINT64 Address;
} ACPI_GAS, *PACPI_GAS;

C_ASSERT(sizeof(ACPI_GAS) == 12);

//
// Root System Description Pointer (RSDP)
//

typedef struct _ACPI_RSDP {
    CHAR Signature[8];
    UINT8 Checksum;
    CHAR OemId[6];
    UINT8 Revision;
    UINT32 RsdtAddress;
    UINT32 Length;
    UINT64 XsdtAddress;
    UINT8 ExtendedChecksum;
    UINT8 Reserved[3];
} ACPI_RSDP, *PACPI_RSDP;

C_ASSERT(sizeof(ACPI_RSDP) == 36);

//
// Root System Description Table (RSDT)
//

typedef struct _ACPI_RSDT {
    UINT8 Signature[4];
    UINT32 Length;
    UINT8 Revision;
    UINT8 Checksum;
    UINT8 OemId[6];
    UINT8 OemTableId[8];
    UINT32 OemRevision;
    UINT32 CreatorId;
    UINT32 CreatorRevision;
    UINT32 Entry[];
} ACPI_RSDT, *PACPI_RSDT;

C_ASSERT(sizeof(ACPI_RSDT) == 36);

//
// Multiple APIC Description Table (MADT)
//

typedef struct _ACPI_MADT {
    UINT8 Signature[4];
    UINT32 Length;
    UINT8 Revision;
    UINT8 Checksum;
    UINT8 OemId[6];
    UINT8 OemTableId[8];
    UINT32 OemRevision;
    UINT32 CreatorId;
    UINT32 CreatorRevision;
    UINT32 LocalApicAddress;
    UINT32 Flags;
    UINT8 ApicStructures[];
} ACPI_MADT, *PACPI_MADT;

C_ASSERT(sizeof(ACPI_MADT) == 44);

#define ACPI_APIC_TYPE_PROCESSOR_LOCAL  0

typedef struct _ACPI_MADT_ENTRY {
    UINT8 Type;
    UINT8 Length;
} ACPI_MADT_ENTRY, *PACPI_MADT_ENTRY;

typedef struct _ACPI_PROCESSOR_LOCAL_APIC {
    UINT8 Type;
    UINT8 Length;
    UINT8 AcpiProcessorId;
    UINT8 ApicId;
    union {
        struct {
            UINT32 Enabled:1;
            UINT32 Reserved:31;
        } s1;
        UINT32 Flags;
    } u1;
} ACPI_PROCESSOR_LOCAL_APIC, *PACPI_PROCESSOR_LOCAL_APIC;

C_ASSERT(sizeof(ACPI_PROCESSOR_LOCAL_APIC) == 8);

//
//System Resource Affinity Table (SRAT)
//

typedef struct _ACPI_SRAT {
    UINT8 Signature[4];
    UINT32 Length;
    UINT8 Revision;
    UINT8 Checksum;
    UINT8 OemId[6];
    UINT8 OemTableId[8];
    UINT32 OemRevision;
    UINT32 CreatorId;
    UINT32 CreatorRevision;
    UINT8 Reserved[12];
    UINT8 SratStructures[];
} ACPI_SRAT, *PACPI_SRAT;

C_ASSERT(sizeof(ACPI_SRAT) == 48);

#define ACPI_SRAT_TYPE_PROC_AFFINITY_ENTRY 0
#define ACPI_SRAT_TYPE_MEM_AFFINITY_ENTRY 1

typedef ACPI_MADT_ENTRY ACPI_SRAT_ENTRY;
typedef PACPI_MADT_ENTRY PACPI_SRAT_ENTRY;

typedef struct _ACPI_SRAT_PROC_AFFINITY_ENTRY {
    UINT8 Type;
    UINT8 Length;
    UINT8 ProximityDomainLowEightBits;
    UINT8 ApicID;
    UINT32 Flags;
    UINT8 LocalApicEid;
    UINT8 ProximityDomainHighTwentyFourBits[3];
    UINT32 Reserved;
} ACPI_SRAT_PROC_AFFINITY_ENTRY, *PACPI_SRAT_PROC_AFFINITY_ENTRY;

typedef struct _ACPI_SRAT_MEM_AFFINITY_ENTRY {
    UINT8 Type;
    UINT8 Length;
    UINT32 ProximityDomain;
    UINT8 Reserved[2];
    UINT32 BaseAddressLow;
    UINT32 BaseAddressHigh;
    UINT32 LengthLow;
    UINT32 LengthHigh;
    UINT32 Reserved2;
    UINT32 Flags;
    UINT8 Reserved3[8];
} ACPI_SRAT_MEM_AFFINITY_ENTRY, *PACPI_SRAT_MEM_AFFINITY_ENTRY;

//
// Fixed ACPI Description Table (FADT)
//

#define ACPI_FADT_FLAGS_RESET_SUPPORTED 0x400

typedef struct _ACPI_FADT {
    UINT8 Signature[4];
    UINT32 Length;
    UINT8 Revision;
    UINT8 Checksum;
    UINT8 OemId[6];
    UINT8 OemTableId[8];
    UINT32 OemRevision;
    UINT32 CreatorId;
    UINT32 CreatorRevision;
    UINT8 Data1[112-36];
    UINT32 Flags;
    ACPI_GAS ResetRegister;
    UINT8 ResetValue;
    UINT8 Data2[244-129];
} ACPI_FADT, *PACPI_FADT;

C_ASSERT(FIELD_OFFSET(ACPI_FADT, Flags) == 112);
C_ASSERT(FIELD_OFFSET(ACPI_FADT, ResetRegister) == 116);
C_ASSERT(FIELD_OFFSET(ACPI_FADT, ResetValue) == 128);
C_ASSERT(sizeof(ACPI_FADT) == 244);

#pragma pack()

PACPI_FADT BlAcpiFadt;
PACPI_MADT BlAcpiMadt;
UINT32 BlAcpiNumberOfProcessors;
PACPI_RSDP BlAcpiRsdp;
PVOID BlAcpiRsdpAddress;
PACPI_RSDT BlAcpiRsdt;
PACPI_SRAT BlAcpiSrat;

PACPI_RSDP
BlAcpiLocateRsdp(
    VOID
    )

//++
//
//  Routine Description:
//
//    This function locates the ACPI RSDP structure.
//
//  Return Value:
//
//    ACPI RSDP structure, if located.
//    NULL, otherwise.
//
//--

{
    ULONG_PTR End;
    PACPI_RSDP Rsdp;
    ULONG_PTR Start;

    Start = 0xE0000;
    End = 0x100000;

    while (Start < End) {

        Rsdp = (PACPI_RSDP) Start;

        if ((Rsdp->Signature[0] == 'R') &&
            (Rsdp->Signature[1] == 'S') &&
            (Rsdp->Signature[2] == 'D') &&
            (Rsdp->Signature[3] == ' ') &&
            (Rsdp->Signature[4] == 'P') &&
            (Rsdp->Signature[5] == 'T') &&
            (Rsdp->Signature[6] == 'R') &&
            (Rsdp->Signature[7] == ' ') &&
            (BlRtlComputeChecksum8(Rsdp, 20) == 0)
            ) {

            return Rsdp;
        }

        Start += 0x10;
    }

    Start = (ULONG_PTR) BlMmExtendedBiosDataArea;
    End = Start + 0x10000;

    while (Start < End) {

        Rsdp = (PACPI_RSDP) Start;

        if ((Rsdp->Signature[0] == 'R') &&
            (Rsdp->Signature[1] == 'S') &&
            (Rsdp->Signature[2] == 'D') &&
            (Rsdp->Signature[3] == ' ') &&
            (Rsdp->Signature[4] == 'P') &&
            (Rsdp->Signature[5] == 'T') &&
            (Rsdp->Signature[6] == 'R') &&
            (Rsdp->Signature[7] == ' ') &&
            (BlRtlComputeChecksum8(Rsdp, 20) == 0)
            ) {

            return Rsdp;
        }

        Start += 0x10;
    }

    return NULL;
}

PACPI_RSDT
BlAcpiLocateRsdt(
    PACPI_RSDP Rsdp
    )

//++
//
//  Routine Description:
//
//    This function locates the ACPI RSDT structure.
//
//  Arguments:
//
//    Rsdp    - Supplies a pointer to the ACPI RSDP structure.
//
//  Return Value:
//
//    ACPI RSDT structure, if located.
//    NULL, otherwise.
//
//--

{
    PACPI_RSDT Rsdt;

    Rsdt = (PACPI_RSDT) (ULONG_PTR) Rsdp->RsdtAddress;

    if (Rsdt == NULL) {

        return NULL;
    }

    if ((Rsdt->Signature[0] == 'R') &&
        (Rsdt->Signature[1] == 'S') &&
        (Rsdt->Signature[2] == 'D') &&
        (Rsdt->Signature[3] == 'T') &&
        (Rsdt->Length >= sizeof(ACPI_RSDT)) &&
        (BlRtlComputeChecksum8(Rsdt, Rsdt->Length) == 0)) {

        return Rsdt;
    }

    return NULL;
}

PACPI_MADT
BlAcpiLocateMadt(
    PACPI_RSDT Rsdt
    )

//++
//
//  Routine Description:
//
//    This function locates the ACPI MADT structure.
//
//  Arguments:
//
//    Rsdt    - Supplies a pointer to the ACPI RSDT structure.
//
//  Return Value:
//
//    ACPI MADT structure, if located.
//    NULL, otherwise.
//
//--

{
    UINT32 Index;
    PACPI_MADT Madt;
    UINT32 NumberOfTables;

    NumberOfTables = (Rsdt->Length - FIELD_OFFSET(ACPI_RSDT, Entry)) / sizeof(Rsdt->Entry[0]);

    for (Index = 0; Index < NumberOfTables; Index += 1) {

        Madt = (PACPI_MADT) (ULONG_PTR) Rsdt->Entry[Index];

        if ((Madt->Signature[0] == 'A') &&
            (Madt->Signature[1] == 'P') &&
            (Madt->Signature[2] == 'I') &&
            (Madt->Signature[3] == 'C') &&
            (Madt->Length >= sizeof(ACPI_MADT)) &&
            (BlRtlComputeChecksum8(Madt, Madt->Length) == 0)) {

            return Madt;
        }
    }

    return NULL;
}

PACPI_SRAT
BlAcpiLocateSrat(
    PACPI_RSDT Rsdt
    )

//++
//
//  Routine Description:
//
//    This function locates the ACPI SRAT structure.
//
//  Arguments:
//
//    Rsdt    - Supplies a pointer to the ACPI RSDT structure.
//
//  Return Value:
//
//    ACPI SRAT structure, if located.
//    NULL, otherwise.
//
//--

{
    UINT32 Index;
    PACPI_SRAT Srat;
    UINT32 NumberOfTables;

    NumberOfTables = (Rsdt->Length - FIELD_OFFSET(ACPI_RSDT, Entry)) / sizeof(Rsdt->Entry[0]);

    for (Index = 0; Index < NumberOfTables; Index += 1) {

        Srat = (PACPI_SRAT) (ULONG_PTR) Rsdt->Entry[Index];

        if ((Srat->Signature[0] == 'S') &&
            (Srat->Signature[1] == 'R') &&
            (Srat->Signature[2] == 'A') &&
            (Srat->Signature[3] == 'T') &&
            (Srat->Length >= sizeof(ACPI_SRAT)) &&
            (BlRtlComputeChecksum8(Srat, Srat->Length) == 0)) {
#if ACPI_VERBOSE
                BlRtlPrintf("ACPI: Found SRAT Table\n");
#endif

            return Srat;
        }
    }

    return NULL;
}

VOID
BlAcpiDumpSratEntries(
    VOID
    )
//++
//
//  Routine Description:
//
//    This function prints out the SRAT table.
//--
{
    PACPI_SRAT_ENTRY Entry;
    PCHAR Limit;
    PACPI_SRAT_PROC_AFFINITY_ENTRY ProcAffinityEntry;
    PACPI_SRAT_MEM_AFFINITY_ENTRY MemAffinityEntry;
    PCHAR Next;
    UINT32 hbits;
    UINT32 totalbits;

    if (BlAcpiSrat == NULL) {
        BlRtlPrintf("ACPI: No Srat??\n");
        return;
    }
#if ACPI_VERBOSE
    BlRtlPrintf("SRAT:\n");
#endif

    Next = (PCHAR) &BlAcpiSrat->SratStructures[0];
    Limit = ((PCHAR) BlAcpiSrat) + BlAcpiSrat->Length;

    while (Next < Limit) {

        Entry = (PACPI_SRAT_ENTRY) Next;

        if ((Entry->Type == ACPI_SRAT_TYPE_PROC_AFFINITY_ENTRY) &&
            (Entry->Length >= sizeof(ACPI_SRAT_PROC_AFFINITY_ENTRY))) {

            ProcAffinityEntry = (PACPI_SRAT_PROC_AFFINITY_ENTRY) Next;
#if ACPI_VERBOSE
            BlRtlPrintf(" Processor:\n");
#endif
            hbits = 0;
            hbits += ProcAffinityEntry->ProximityDomainHighTwentyFourBits[0] << 24;
            hbits += ProcAffinityEntry->ProximityDomainHighTwentyFourBits[1] << 16;
            hbits += ProcAffinityEntry->ProximityDomainHighTwentyFourBits[2] << 8;
            totalbits = hbits | ProcAffinityEntry->ProximityDomainLowEightBits;
#if ACPI_VERBOSE
            BlRtlPrintf("  HighDomain 0x%06x LowDomain 0x%02x totalbits 0x%08x\n",
                        hbits, ProcAffinityEntry->ProximityDomainLowEightBits,
                        totalbits);
            BlRtlPrintf("  ApicID: %d flags 0x%08x\n", ProcAffinityEntry->ApicID,
                        ProcAffinityEntry->Flags);
#endif
        }
        else if ((Entry->Type == ACPI_SRAT_TYPE_MEM_AFFINITY_ENTRY) &&
                   (Entry->Length >= sizeof(ACPI_SRAT_MEM_AFFINITY_ENTRY))) {

            MemAffinityEntry = (PACPI_SRAT_MEM_AFFINITY_ENTRY) Next;
#if ACPI_VERBOSE
            BlRtlPrintf(" Memory:\n");
            BlRtlPrintf("  BaseAddress 0x%08x.%08x ..  0x%08x.%08x",
                        MemAffinityEntry->BaseAddressHigh, MemAffinityEntry->BaseAddressLow,
                        MemAffinityEntry->LengthHigh, MemAffinityEntry->LengthLow);
            BlRtlPrintf("  Domain %d  Flags 0x%08x\n",
                        MemAffinityEntry->ProximityDomain,
                        MemAffinityEntry->Flags);
#endif
        }

        Next += Entry->Length;
    }
}

UINT32
BlAcpiGetNumberOfProcessors(
    VOID
    )
//++
//
//  Routine Description:
//
//    This function returns the number of processors.
//
//  Return Value:
//
//    Number of processors.
//
//--

{
    PACPI_MADT_ENTRY Entry;
    PCHAR Limit;
    PACPI_PROCESSOR_LOCAL_APIC LocalApic;
    PCHAR Next;
    UINT32 NumberOfProcessors;

    if (BlAcpiMadt == NULL) {

        return 1;
    }

    Next = (PCHAR) &BlAcpiMadt->ApicStructures[0];
    Limit = ((PCHAR) BlAcpiMadt) + BlAcpiMadt->Length;
    NumberOfProcessors = 0;

    while (Next < Limit) {

        Entry = (PACPI_MADT_ENTRY) Next;

        if ((Entry->Type == ACPI_APIC_TYPE_PROCESSOR_LOCAL) &&
            (Entry->Length >= sizeof(ACPI_PROCESSOR_LOCAL_APIC))) {

            LocalApic = (PACPI_PROCESSOR_LOCAL_APIC) Next;

            if (LocalApic->u1.s1.Enabled != FALSE) {

#if ACPI_VERBOSE

                BlRtlPrintf("ACPI: AcpiProcessorId=%u , LocalApicId=%u\n",
                            LocalApic->AcpiProcessorId,
                            LocalApic->ApicId);

#endif

                NumberOfProcessors += 1;
            }
        }

        Next += Entry->Length;
    }

    return NumberOfProcessors;
}

PACPI_FADT
BlAcpiLocateFadt(
    PACPI_RSDT Rsdt
    )

//++
//
//  Routine Description:
//
//    This function locates the ACPI FADT structure.
//
//  Arguments:
//
//    Rsdt    - Supplies a pointer to the ACPI RSDT structure.
//
//  Return Value:
//
//    ACPI FADT structure, if located.
//    NULL, otherwise.
//
//--

{
    PACPI_FADT Fadt;
    UINT32 Index;
    UINT32 NumberOfTables;

    NumberOfTables = (Rsdt->Length - FIELD_OFFSET(ACPI_RSDT, Entry)) / sizeof(Rsdt->Entry[0]);

    for (Index = 0; Index < NumberOfTables; Index += 1) {

        Fadt = (PACPI_FADT) (ULONG_PTR) Rsdt->Entry[Index];

        if ((Fadt->Signature[0] == 'F') &&
            (Fadt->Signature[1] == 'A') &&
            (Fadt->Signature[2] == 'C') &&
            (Fadt->Signature[3] == 'P') &&
            (BlRtlComputeChecksum8(Fadt, Fadt->Length) == 0)) {

            return Fadt;
        }
    }

    return NULL;
}

VOID
BlAcpiResetSystem(
    VOID
    )

//++
//
//  Routine Description:
//
//    This function resets the system through the ACPI reset register.
//
//--

{
    if ((BlAcpiFadt->Revision < 2) ||
        (BlAcpiFadt->Length < (FIELD_OFFSET(ACPI_FADT, ResetValue) + sizeof(UINT8))) ||
        ((BlAcpiFadt->Flags & ACPI_FADT_FLAGS_RESET_SUPPORTED) == 0)
        ) {

#if ACPI_VERBOSE

        BlRtlPrintf("ACPI: Reset register is not supported! [FADT v%u]\n", BlAcpiFadt->Revision);

#endif

        return;
    }

#if ACPI_VERBOSE

    BlRtlPrintf("ACPI: Reset register type is %u.\n", BlAcpiFadt->ResetRegister.AddressSpaceId);

#endif

    switch (BlAcpiFadt->ResetRegister.AddressSpaceId) {

        case ACPI_GAS_IO: {

            BlRtlWritePort8((UINT16) BlAcpiFadt->ResetRegister.Address, BlAcpiFadt->ResetValue);

            break;
        }
    }
}

VOID
BlAcpiInitialize(
    VOID
    )

//++
//
//  Routine Description:
//
//    This function initializes ACPI support for the boot loader.
//
//--

{
    BlAcpiRsdp = BlAcpiLocateRsdp();

    if (BlAcpiRsdp == NULL) {

        BlRtlPrintf("ACPI: No RSDP!\n");
        BlRtlHalt();
    }

    BlAcpiRsdpAddress = (PVOID) BlAcpiRsdp;

    BlAcpiRsdt = BlAcpiLocateRsdt(BlAcpiRsdp);

    if (BlAcpiRsdt == NULL) {

        BlRtlPrintf("ACPI: No RSDT!\n");
        BlRtlHalt();
    }

    BlAcpiFadt = BlAcpiLocateFadt(BlAcpiRsdt);

    if (BlAcpiFadt == NULL) {

        BlRtlPrintf("ACPI: No FADT!\n");
        //BlRtlHalt();
    }

    BlAcpiMadt = BlAcpiLocateMadt(BlAcpiRsdt);

    if (BlAcpiMadt == NULL) {

        BlAcpiNumberOfProcessors = 1;

    } else {

        BlAcpiNumberOfProcessors = BlAcpiGetNumberOfProcessors();
    }

    if (BlAcpiNumberOfProcessors == 0) {

        BlRtlPrintf("ACPI: No local APIC!\n");
        BlRtlHalt();
    }

    BlAcpiSrat = BlAcpiLocateSrat(BlAcpiRsdt);
    if (BlAcpiSrat != NULL) {
        BlAcpiDumpSratEntries();
    }


#if ACPI_VERBOSE

    BlRtlPrintf("ACPI: RSDP @ %p\n"
                "ACPI: RSDT @ %p\n"
                "ACPI: FADT @ %p [Revision=%u , Length=%u]\n"
                "ACPI: MADT @ %p\n"
                "ACPI: %u processor(s)\n",
                BlAcpiRsdp,
                BlAcpiRsdt,
                BlAcpiFadt,
                BlAcpiFadt->Revision,
                BlAcpiFadt->Length,
                BlAcpiMadt,
                BlAcpiNumberOfProcessors);

#endif

    //
    // Map APIC page uncached.
    //

    if ((BlAcpiMadt != NULL) && (BlAcpiMadt->LocalApicAddress != 0)) {

#if ACPI_VERBOSE

        BlRtlPrintf("ACPI: APIC mapped @ %p.\n", BlAcpiMadt->LocalApicAddress);

#endif

        BlMmMapVirtualRange((PVOID) (ULONG_PTR) BlAcpiMadt->LocalApicAddress,
                            (PVOID) (ULONG_PTR) BlAcpiMadt->LocalApicAddress,
                            PAGE_SIZE,
                            TRUE,
                            FALSE,
                            FALSE);
    }
}


================================================
FILE: ironclad-apps/src/Checked/BootLoader/SingLdrPc/blcdrom.cpp
================================================
//++
//
//  Copyright (c) Microsoft Corporation
//
//  Module Name:
//
//    blcdrom.cpp
//
//  Abstract:
//
//    This module implements CDROM support for the boot loader.
//
//--

#include "bl.h"

#define ISO9660_LOGICAL_BLOCK_SIZE                      2048
#define ISO9660_ROUND_UP_TO_LOGICAL_BLOCKS(X)           (((X) + ISO9660_LOGICAL_BLOCK_SIZE - 1) & (~(ISO9660_LOGICAL_BLOCK_SIZE - 1)))

#define ISO9660_VOLUME_SPACE_DATA_AREA_LBN              16

#define ISO9660_VOLUME_DESCRIPTOR_TYPE_BOOT             0x00
#define ISO9660_VOLUME_DESCRIPTOR_TYPE_PRIMARY          0x01
#define ISO9660_VOLUME_DESCRIPTOR_TYPE_SUPPLEMENTARY    0x02
#define ISO9660_VOLUME_DESCRIPTOR_TYPE_TERMINATOR       0xFF

#define ISO9660_MAX_PATH                                255

#pragma pack(1)

typedef struct _ISO9660_LOGICAL_BLOCK {
    UINT8 Data[ISO9660_LOGICAL_BLOCK_SIZE];
} ISO9660_LOGICAL_BLOCK, *PISO9660_LOGICAL_BLOCK;

C_ASSERT(sizeof(ISO9660_LOGICAL_BLOCK) == ISO9660_LOGICAL_BLOCK_SIZE);

typedef struct _ISO9660_DIRECTORY_RECORD {
    UINT8 DirectoryRecordLength;
    UINT8 ExtendedAttributeRecordLength;
    UINT32 ExtentLocation;
    UINT32 ExtentLocation_BigEndian;
    UINT32 DataLength;
    UINT32 DataLength_BigEndian;
    UINT8 RecordingDateTime[7];
    union {
        struct {
            UINT8 Present:1;
            UINT8 Directory:1;
            UINT8 AssociatedFile:1;
            UINT8 Record:1;
            UINT8 Protection:1;
            UINT8 Reserved:2;
            UINT8 MultiExtent:1;
        } s1;
        UINT8 FileFlags;
    } u1;
    UINT8 FileUnitSize;
    UINT8 InterleaveGapSize;
    UINT16 VolumeSequenceNumber;
    UINT16 VolumeSequenceNumber_BigEndian;
    UINT8 FileIdentifierLength;
    UINT8 FileIdentifier[1];
} ISO9660_DIRECTORY_RECORD, *PISO9660_DIRECTORY_RECORD;

C_ASSERT(sizeof(ISO9660_DIRECTORY_RECORD) == 34);

typedef struct _ISO9660_PRIMARY_VOLUME_DESCRIPTOR {
    UINT8 VolumeDescriptorType;
    UINT8 StandardIdentifier[5];
    UINT8 VolumeDescriptorVersion;
    UINT8 Reserved1;
    UINT8 SystemIdentifier[32];
    UINT8 VolumeIdentifier[32];
    UINT8 Reserved2[8];
    UINT32 VolumeSpaceSize;
    UINT32 VolumeSpaceSize_BigEndian;
    UINT8 Reserved3[32];
    UINT16 VolumeSetSize;
    UINT16 VolumeSetSize_BigEndian;
    UINT16 VolumeSequenceNumber;
    UINT16 VolumeSequenceNumber_BigEndian;
    UINT16 LogicalBlockSize;
    UINT16 LogicalBlockSize_BigEndian;
    UINT32 PathTableSize;
    UINT32 PathTableSize_BigEndian;
    UINT32 PathTableLocation[2];
    UINT32 PathTableLocation_BigEndian[2];
    ISO9660_DIRECTORY_RECORD RootDirectory;
    UINT8 VolumeSetIdentifier[128];
    UINT8 PublisherIdentifier[128];
    UINT8 DataPreparerIdentifier[128];
    UINT8 ApplicationIdentifier[128];
    UINT8 CopyrightFileIdentifier[37];
    UINT8 AbstractFileIdentifier[37];
    UINT8 BibliographicFileIdentifier[37];
    UINT8 VolumeCreationDateTime[17];
    UINT8 VolumeModificationDateTime[17];
    UINT8 VolumeExpirationDateTime[17];
    UINT8 VolumeEffectiveDateTime[17];
    UINT8 FileStructureVersion;
    UINT8 Reserved4;
    UINT8 ReservedForApplication[512];
    UINT8 Reserved5[653];
} ISO9660_PRIMARY_VOLUME_DESCRIPTOR, *PISO9660_PRIMARY_VOLUME_DESCRIPTOR;

C_ASSERT(sizeof(ISO9660_PRIMARY_VOLUME_DESCRIPTOR) == ISO9660_LOGICAL_BLOCK_SIZE);

typedef struct _ISO9660_SUPPLEMENTARY_VOLUME_DESCRIPTOR {
    UINT8 VolumeDescriptorType;
    UINT8 StandardIdentifier[5];
    UINT8 VolumeDescriptorVersion;
    UINT8 VolumeFlags;
    UINT8 SystemIdentifier[32];
    UINT8 VolumeIdentifier[32];
    UINT8 Reserved2[8];
    UINT32 VolumeSpaceSize;
    UINT32 VolumeSpaceSize_BigEndian;
    UINT8 EscapeSequences[32];
    UINT16 VolumeSetSize;
    UINT16 VolumeSetSize_BigEndian;
    UINT16 VolumeSequenceNumber;
    UINT16 VolumeSequenceNumber_BigEndian;
    UINT16 LogicalBlockSize;
    UINT16 LogicalBlockSize_BigEndian;
    UINT32 PathTableSize;
    UINT32 PathTableSize_BigEndian;
    UINT32 PathTableLocation[2];
    UINT32 PathTableLocation_BigEndian[2];
    ISO9660_DIRECTORY_RECORD RootDirectory;
    UINT8 VolumeSetIdentifier[128];
    UINT8 PublisherIdentifier[128];
    UINT8 DataPreparerIdentifier[128];
    UINT8 ApplicationIdentifier[128];
    UINT8 CopyrightFileIdentifier[37];
    UINT8 AbstractFileIdentifier[37];
    UINT8 BibliographicFileIdentifier[37];
    UINT8 VolumeCreationDateTime[17];
    UINT8 VolumeModificationDateTime[17];
    UINT8 VolumeExpirationDateTime[17];
    UINT8 VolumeEffectiveDateTime[17];
    UINT8 FileStructureVersion;
    UINT8 Reserved4;
    UINT8 ReservedForApplication[512];
    UINT8 Reserved5[653];
} ISO9660_SUPPLEMENTARY_VOLUME_DESCRIPTOR, *PISO9660_SUPPLEMENTARY_VOLUME_DESCRIPTOR;

C_ASSERT(sizeof(ISO9660_SUPPLEMENTARY_VOLUME_DESCRIPTOR) == ISO9660_LOGICAL_BLOCK_SIZE);

typedef struct _ISO9660_VOLUME_DESCRIPTOR {
    union {
        UINT8 VolumeDescriptorType;
        ISO9660_PRIMARY_VOLUME_DESCRIPTOR Primary;
        ISO9660_SUPPLEMENTARY_VOLUME_DESCRIPTOR Supplementary;
    } u1;
} ISO9660_VOLUME_DESCRIPTOR, *PISO9660_VOLUME_DESCRIPTOR;

C_ASSERT(sizeof(ISO9660_VOLUME_DESCRIPTOR) == ISO9660_LOGICAL_BLOCK_SIZE);

#pragma pack()

UINT8 BlCdDriveId;
INT13_DRIVE_PARAMETERS BlCdDriveParameters;
ISO9660_VOLUME_DESCRIPTOR BlCdVolumeDescriptor;

ISO9660_LOGICAL_BLOCK BlCdTemporaryBlock[32];
UINT16 BlCdTemporaryBlockCount = sizeof(BlCdTemporaryBlock) / sizeof(BlCdTemporaryBlock[0]);

VOID
BlCdReadLogicalBlock(
    UINT32 LogicalBlockNumber,
    UINT32 NumberOfBlocks,
    PISO9660_LOGICAL_BLOCK LogicalBlock
    )

//++
//
//  Routine Description:
//
//    This function reads the specified logical block.
//
//  Arguments:
//
//    LogicalBlockNumber  - Supplies the number of the logical block to read.
//
//    NumberOfBlocks      - Supplies the number of blocks to read.
//
//    LogicalBlock        - Receives logical block data.
//
//--

{
    UINT16 ChunkSize;
    BOOLEAN Result;

    while (NumberOfBlocks > 0) {

        if (NumberOfBlocks < BlCdTemporaryBlockCount) {

            ChunkSize = (UINT16) NumberOfBlocks;

        } else {

            ChunkSize = BlCdTemporaryBlockCount;
        }

        Result = BlRtlReadDrive(BlCdDriveId,
                                LogicalBlockNumber,
                                ChunkSize,
                                BlCdTemporaryBlock);

        if (Result == FALSE) {

            BlRtlPrintf("CDROM: I/O Error: DriveID=0x%02x LBN=%u Count=%u\n",
                        BlCdDriveId,
                        LogicalBlockNumber,
                        ChunkSize);

            BlRtlHalt();
        }

        BlRtlCopyMemory(LogicalBlock,
                        BlCdTemporaryBlock,
                        ChunkSize * sizeof(ISO9660_LOGICAL_BLOCK));

        LogicalBlockNumber += ChunkSize;
        LogicalBlock += ChunkSize;
        NumberOfBlocks -= ChunkSize;
    }

    return;
}

BOOLEAN
BlCdFindDirectoryRecord(
    PCSTR Path,
    PISO9660_DIRECTORY_RECORD DirectoryRecord
    )

//++
//
//  Routine Description:
//
//    This function finds the directory record for the specified path.
//
//  Arguments:
//
//    Path                - Supplies the path to look up.
//
//    DirectoryRecord     - Receives directory record.
//
//  Return Value:
//
//    TRUE, if directory record was found.
//    FALSE, otherwise.
//
//--

{
    PISO9660_LOGICAL_BLOCK DirectoryData;
    UINT32 DirectoryDataIndex;
    ULONG_PTR DirectoryDataLimit;
    UINT32 DirectoryDataExtentStart;
    UINT32 DirectoryDataExtentSize;
    PISO9660_DIRECTORY_RECORD Entry;
    UINT32 Index;
    PCSTR NextToken;
    PCSTR Separator;
    CHAR Temp[ISO9660_MAX_PATH];
    CHAR Token[ISO9660_MAX_PATH];
    UINT32 TokenSize;

    DirectoryDataExtentStart = BlCdVolumeDescriptor.u1.Supplementary.RootDirectory.ExtentLocation;
    DirectoryDataExtentSize = ROUND_UP_TO_POWER2(BlCdVolumeDescriptor.u1.Supplementary.RootDirectory.DataLength, ISO9660_LOGICAL_BLOCK_SIZE) / ISO9660_LOGICAL_BLOCK_SIZE;

    NextToken = Path;

    for (;;) {

        BLASSERT(DirectoryDataExtentStart > ISO9660_VOLUME_SPACE_DATA_AREA_LBN);

        BLASSERT(DirectoryDataExtentSize > 0);

        BLASSERT((*NextToken != 0) && (*NextToken != '/'));

        Separator = NextToken;

        while ((*Separator != '/') && (*Separator != 0)) {

            Separator += 1;
        }

        TokenSize = (UINT32) (Separator - NextToken);

        for (Index = 0; Index < TokenSize; Index += 1) {

            Token[Index] = BlRtlConvertCharacterToUpperCase(NextToken[Index]);
        }

        Token[TokenSize] = 0;

        DirectoryData = (PISO9660_LOGICAL_BLOCK) BlPoolAllocateBlock(DirectoryDataExtentSize * ISO9660_LOGICAL_BLOCK_SIZE);
        DirectoryDataLimit = (ULONG_PTR) DirectoryData + (DirectoryDataExtentSize * ISO9660_LOGICAL_BLOCK_SIZE);

        BlCdReadLogicalBlock(DirectoryDataExtentStart,
                             DirectoryDataExtentSize,
                             DirectoryData);

        Entry = NULL;

        for (DirectoryDataIndex = 0; (Entry == NULL) && (DirectoryDataIndex < DirectoryDataExtentSize); DirectoryDataIndex += 1) {

            Entry = (PISO9660_DIRECTORY_RECORD) &DirectoryData[DirectoryDataIndex];

            for (;;) {

                if (Entry->DirectoryRecordLength == 0) {

                    Entry = NULL;
                    break;
                }

                if (Entry->FileIdentifierLength == (TokenSize * 2)) {

                    for (Index = 0; Index < TokenSize; Index += 1) {

                        Temp[Index] = BlRtlConvertCharacterToUpperCase(Entry->FileIdentifier[(Index * 2) + 1]);
                    }

                    if (BlRtlCompareMemory(Temp, Token, TokenSize) != FALSE) {

                        break;
                    }
                }

                Entry = (PISO9660_DIRECTORY_RECORD) ROUND_UP_TO_POWER2((((ULONG_PTR) Entry) + Entry->DirectoryRecordLength), 2);

                if ((ULONG_PTR) Entry >= DirectoryDataLimit) {

                    Entry = NULL;
                    break;
                }
            }
        }

        if (Entry == NULL) {

            BlPoolFreeBlock(DirectoryData);

            return FALSE;
        }

        if (*Separator == 0) {

            BlRtlCopyMemory(DirectoryRecord,
                            Entry,
                            sizeof(ISO9660_DIRECTORY_RECORD));

            BlPoolFreeBlock(DirectoryData);

            return TRUE;
        }

        if (Entry->u1.s1.Directory == FALSE) {

            BlPoolFreeBlock(DirectoryData);

            return FALSE;
        }

        DirectoryDataExtentStart = Entry->ExtentLocation;
        DirectoryDataExtentSize = ROUND_UP_TO_POWER2(Entry->DataLength, ISO9660_LOGICAL_BLOCK_SIZE) / ISO9660_LOGICAL_BLOCK_SIZE;
        NextToken = Separator + 1;

        BlPoolFreeBlock(DirectoryData);
    }
}

BOOLEAN
BlCdGetFileSize(
    PCSTR Path,
    PUINT32 FileSize
    )

//++
//
//  Routine Description:
//
//    This function queries the size of the specified file.
//
//  Arguments:
//
//    Path        - Supplies the path to the file to query.
//
//    FileSize    - Receives the size of the file.
//
//  Return Value:
//
//    TRUE, if the query operation was successful.
//    FALSE, otherwise.
//
//--

{
    ISO9660_DIRECTORY_RECORD DirectoryRecord;

    if (BlCdFindDirectoryRecord(Path, &DirectoryRecord) == FALSE) {

        BlRtlPrintf("CdGetFileSize: [%s] FAILED 1\n", Path);

        return FALSE;
    }

    if (DirectoryRecord.u1.s1.Directory != FALSE) {

        BlRtlPrintf("CdGetFileSize: [%s] FAILED 2\n", Path);

        return FALSE;
    }

    *FileSize = DirectoryRecord.DataLength;
    return TRUE;
}

BOOLEAN
BlCdReadFile(
    PCSTR Path,
    PVOID Buffer,
    UINT32 NumberOfBytes
    )

//++
//
//  Routine Description:
//
//    This function reads from the specified file.
//
//  Arguments:
//
//    Path            - Supplies the path to the file to read.
//
//    Buffer          - Receives data.
//
//    NumberOfBytes   - Supplies the number of bytes to read.
//
//  Return Value:
//
//    TRUE, if the read operation was successful.
//    FALSE, otherwise.
//
//--

{
    ISO9660_LOGICAL_BLOCK Block;
    UINT32 ChunkOffset;
    UINT32 ChunkSize;
    ISO9660_DIRECTORY_RECORD DirectoryRecord;
    PUINT8 Next;
    UINT32 Offset = 0;

    if (BlCdFindDirectoryRecord(Path, &DirectoryRecord) == FALSE) {

        return FALSE;
    }

    if (DirectoryRecord.u1.s1.Directory != FALSE) {

        return FALSE;
    }

    if (NumberOfBytes > DirectoryRecord.DataLength) {

        return FALSE;
    }

    if (NumberOfBytes == 0) {

        return TRUE;
    }

    Next = (PUINT8) Buffer;

    //
    // Handle full-read blocks in a single step.
    //

    if (NumberOfBytes >= ISO9660_LOGICAL_BLOCK_SIZE) {

        ChunkSize = NumberOfBytes - (NumberOfBytes % ISO9660_LOGICAL_BLOCK_SIZE);

        BlCdReadLogicalBlock(DirectoryRecord.ExtentLocation,
                             ChunkSize / ISO9660_LOGICAL_BLOCK_SIZE,
                             (PISO9660_LOGICAL_BLOCK) Next);

        Next += ChunkSize;
        Offset += ChunkSize;
        NumberOfBytes -= ChunkSize;
    }

    //
    // Check if the ending block is a partial read.
    //

    BLASSERT(NumberOfBytes < ISO9660_LOGICAL_BLOCK_SIZE);

    if (NumberOfBytes > 0) {

        BlCdReadLogicalBlock(DirectoryRecord.ExtentLocation + (Offset / ISO9660_LOGICAL_BLOCK_SIZE),
                             1,
                             &Block);

        BlRtlCopyMemory(Next,
                        Block.Data,
                        NumberOfBytes);
    }

    return TRUE;
}

VOID
BlCdInitialize(
    UINT8 DriveId
    )

//++
//
//  Routine Description:
//
//    This function initializes CDROM support.
//
//  Arguments:
//
//    DriveId     - Supplies CDROM drive ID.
//
//  --

{
    UINT32 LogicalBlockNumber;

    BlCdDriveId = DriveId;

    if (BlRtlGetDriveParameters(BlCdDriveId, &BlCdDriveParameters) == FALSE) {

        BlRtlPrintf("CDROM: Unable to get drive parameters!\n");
        BlRtlHalt();
    }

    if (BlCdDriveParameters.BytesPerSector != ISO9660_LOGICAL_BLOCK_SIZE) {

        BlRtlPrintf("CDROM: Unexpected sector size!\n");
        BlRtlHalt();
    }

    //
    // Locate Joliet volume descriptor.
    //

    LogicalBlockNumber = ISO9660_VOLUME_SPACE_DATA_AREA_LBN;

    for (;;) {

        BlCdReadLogicalBlock(LogicalBlockNumber,
                             1,
                             (PISO9660_LOGICAL_BLOCK) &BlCdVolumeDescriptor);

        if ((BlCdVolumeDescriptor.u1.VolumeDescriptorType == ISO9660_VOLUME_DESCRIPTOR_TYPE_SUPPLEMENTARY) &&
            (BlCdVolumeDescriptor.u1.Supplementary.EscapeSequences[0] == 0x25) &&
            (BlCdVolumeDescriptor.u1.Supplementary.EscapeSequences[1] == 0x2F) &&
            (BlCdVolumeDescriptor.u1.Supplementary.EscapeSequences[2] == 0x45)){

            break;
        }

        if (BlCdVolumeDescriptor.u1.VolumeDescriptorType == ISO9660_VOLUME_DESCRIPTOR_TYPE_TERMINATOR) {

            BlRtlPrintf("CDROM: Unable to find Joliet volume descriptor.\n");
            BlRtlHalt();
        }

        LogicalBlockNumber += 1;
    }

    BlFsGetFileSize = BlCdGetFileSize;
    BlFsReadFile = BlCdReadFile;

    return;
}



================================================
FILE: ironclad-apps/src/Checked/BootLoader/SingLdrPc/blcom.cpp
================================================
//++
//
//  Copyright (c) Microsoft Corporation
//
//  Module Name:
//
//    blcom.cpp
//
//  Abstract:
//
//    This module implements COM port support for the boot loader.
//
//--

#include "bl.h"

#define COM1_ADDRESS                            0x3F8
#define COM2_ADDRESS                            0x2F8
#define COM3_ADDRESS                            0x3E8
#define COM4_ADDRESS                            0x2E8

const UINT16 BlComBasePort[COM_MAX_PORT + 1] = {
    0,
    COM1_ADDRESS,
    COM2_ADDRESS,
    COM3_ADDRESS,
    COM4_ADDRESS
};

#define COM_DATA_REGISTER                       0x0000
#define COM_INTERRUPT_ENABLE_REGISTER           0x0001
#define COM_INTERRUPT_IDENTIFICATION_REGISTER   0x0002
#define COM_FIFO_CONTROL_REGISTER               0x0002
#define COM_LINE_CONTROL_REGISTER               0x0003
#define COM_MODEM_CONTROL_REGISTER              0x0004
#define COM_LINE_STATUS_REGISTER                0x0005
#define COM_MODEM_STATUS_REGISTER               0x0006
#define COM_SCRATCH_REGISTER                    0x0007

#define COM_DIVISOR_LATCH_REGISTER_LOW          0x0000
#define COM_DIVISOR_LATCH_REGISTER_HIGH         0x0001

#define COM_CLOCK_RATE                          0x1C200

#define COM_LINE_CONTROL_8BITS_1STOP            0x03
#define COM_LINE_CONTROL_DIVISOR_ACCESS         0x80

#define COM_MODEM_CONTROL_DATA_TERMINAL_READY   0x01
#define COM_MODEM_CONTROL_REQUEST_TO_SEND       0x02

#define COM_LINE_STATUS_DATA_READY              0x01
#define COM_LINE_STATUS_OVERRUN_ERROR           0x02
#define COM_LINE_STATUS_PARITY_ERROR            0x04
#define COM_LINE_STATUS_FRAMING_ERROR           0x08
#define COM_LINE_STATUS_SEND_BUFFER_EMPTY       0x20

BOOLEAN
BlComInitialize(
    UINT8 PortNumber,
    UINT32 BaudRate
    )

//++
//
//  Routine Description:
//
//    This function initializes the specified COM port.
//
//  Arguments:
//
//    PortNumber  - Supplies the number of the port to initialize.
//
//    BaudRate    - Supplies the baud rate.
//
//  Return Value:
//
//    TRUE, if initialization was successful.
//    FALSE, otherwise.
//
//--

{
    UINT16 Base;
    UINT16 Divisor;
    UINT8 Index;
    UINT8 Status;

    BLASSERT((PortNumber >= 1) && (PortNumber <= COM_MAX_PORT));

    BLASSERT(BaudRate != 0);

    BLASSERT(BaudRate <= COM_CLOCK_RATE);

    BLASSERT((COM_CLOCK_RATE % BaudRate) == 0);

    BLASSERT((COM_CLOCK_RATE / BaudRate) <= 0x10000);

    Base = BlComBasePort[PortNumber];

    BlRtlWritePort8(Base + COM_LINE_CONTROL_REGISTER, 0);
    BlRtlWritePort8(Base + COM_INTERRUPT_ENABLE_REGISTER, 0);
    BlRtlWritePort8(Base + COM_MODEM_CONTROL_REGISTER, COM_MODEM_CONTROL_DATA_TERMINAL_READY | COM_MODEM_CONTROL_REQUEST_TO_SEND);

    Divisor = (UINT16) (COM_CLOCK_RATE / BaudRate);

    BlRtlWritePort8(Base + COM_LINE_CONTROL_REGISTER, COM_LINE_CONTROL_DIVISOR_ACCESS);
    BlRtlWritePort8(Base + COM_DIVISOR_LATCH_REGISTER_LOW, (UINT8) (Divisor & 0xFF));
    BlRtlWritePort8(Base + COM_DIVISOR_LATCH_REGISTER_HIGH, (UINT8) (Divisor >> 8));

    BlRtlWritePort8(Base + COM_LINE_CONTROL_REGISTER, COM_LINE_CONTROL_8BITS_1STOP);

    Index = 0;

    do {

        BlRtlWritePort8(Base + COM_SCRATCH_REGISTER, Index);

        if (BlRtlReadPort8(Base + COM_SCRATCH_REGISTER) != Index) {

            return FALSE;
        }

        Index += 1;

    } while (Index != 0);

    Status = BlRtlReadPort8(Base + COM_LINE_STATUS_REGISTER);

    if (Status == 0xFF) {

        return FALSE;
    }

#if COM_VERBOSE

    if ((Status & COM_LINE_STATUS_OVERRUN_ERROR) != 0) {

        BlVideoPrintf("COM%u: Overrun error!\n", PortNumber);
    }

    if ((Status & COM_LINE_STATUS_PARITY_ERROR) != 0) {

        BlVideoPrintf("COM%u: Parity error!\n", PortNumber);
    }

    if ((Status & COM_LINE_STATUS_FRAMING_ERROR) != 0) {

        BlVideoPrintf("COM%u: Framing error!\n", PortNumber);
    }

#endif

    return TRUE;
}

BOOLEAN
BlComSendByte(
    UINT8 PortNumber,
    UINT8 Byte
    )

//++
//
//  Routine Description:
//
//    This function sends a byte to the specified COM port.
//
//  Arguments:
//
//    PortNumber  - Supplies the number of the port to send to.
//
//    Byte        - Supplies the byte to send.
//
//  Return Value:
//
//    TRUE, if data was sent.
//    FALSE, otherwise.
//
//--

{
    UINT16 Base;
    UINT8 Status;

    BLASSERT((PortNumber >= 1) && (PortNumber <= COM_MAX_PORT));

    Base = BlComBasePort[PortNumber];

    do {

        Status = BlRtlReadPort8(Base + COM_LINE_STATUS_REGISTER);

#if COM_VERBOSE

        if ((Status & COM_LINE_STATUS_OVERRUN_ERROR) != 0) {

            BlVideoPrintf("COM%u: Overrun error!\n", PortNumber);
        }

        if ((Status & COM_LINE_STATUS_PARITY_ERROR) != 0) {

            BlVideoPrintf("COM%u: Parity error!\n", PortNumber);
        }

        if ((Status & COM_LINE_STATUS_FRAMING_ERROR) != 0) {

            BlVideoPrintf("COM%u: Framing error!\n", PortNumber);
        }

#endif

    } while ((Status & COM_LINE_STATUS_SEND_BUFFER_EMPTY) == 0);

    BlRtlWritePort8(Base + COM_DATA_REGISTER, Byte);

    Status = BlRtlReadPort8(Base + COM_LINE_STATUS_REGISTER);

#if COM_VERBOSE

    if ((Status & COM_LINE_STATUS_OVERRUN_ERROR) != 0) {

        BlVideoPrintf("COM%u: Overrun error!\n", PortNumber);
    }

    if ((Status & COM_LINE_STATUS_PARITY_ERROR) != 0) {

        BlVideoPrintf("COM%u: Parity error!\n", PortNumber);
    }

    if ((Status & COM_LINE_STATUS_FRAMING_ERROR) != 0) {

        BlVideoPrintf("COM%u: Framing error!\n", PortNumber);
    }

#endif

    return TRUE;
}

BOOLEAN
BlComDataAvailable(
    UINT8 PortNumber
    )

//++
//
//  Routine Description:
//
//    This function checks if data is available at the specified COM port.
//
//  Arguments:
//
//    PortNumber  - Supplies the number of the port to check.
//
//  Return Value:
//
//    TRUE, if data is available.
//    FALSE, otherwise.
//
//--

{
    UINT16 Base;
    UINT8 Status;

    BLASSERT((PortNumber >= 1) && (PortNumber <= COM_MAX_PORT));

    Base = BlComBasePort[PortNumber];

    Status = BlRtlReadPort8(Base + COM_LINE_STATUS_REGISTER);

#if COM_VERBOSE

    if ((Status & COM_LINE_STATUS_OVERRUN_ERROR) != 0) {

        BlVideoPrintf("COM%u: Overrun error!\n", PortNumber);
    }

    if ((Status & COM_LINE_STATUS_PARITY_ERROR) != 0) {

        BlVideoPrintf("COM%u: Parity error!\n", PortNumber);
    }

    if ((Status & COM_LINE_STATUS_FRAMING_ERROR) != 0) {

        BlVideoPrintf("COM%u: Framing error!\n", PortNumber);
    }

#endif

    return ((Status & COM_LINE_STATUS_DATA_READY) != 0);
}

UINT8
BlComReceiveByte(
    UINT8 PortNumber
    )

//++
//
//  Routine Description:
//
//    This function receives a byte from the specified COM port.
//
//  Arguments:
//
//    PortNumber  - Supplies the number of the port to receive from.
//
//  Return Value:
//
//    Byte received from the specified COM port.
//
//--

{
    UINT16 Base;
    UINT8 Byte;
    UINT8 Status;

    BLASSERT((PortNumber >= 1) && (PortNumber <= COM_MAX_PORT));

    Base = BlComBasePort[PortNumber];

    BlRtlReadPort8(Base + COM_MODEM_STATUS_REGISTER);

    do {

        Status = BlRtlReadPort8(Base + COM_LINE_STATUS_REGISTER);

#if COM_VERBOSE

        if ((Status & COM_LINE_STATUS_OVERRUN_ERROR) != 0) {

            BlVideoPrintf("COM%u: Overrun error!\n", PortNumber);
        }

        if ((Status & COM_LINE_STATUS_PARITY_ERROR) != 0) {

            BlVideoPrintf("COM%u: Parity error!\n", PortNumber);
        }

        if ((Status & COM_LINE_STATUS_FRAMING_ERROR) != 0) {

            BlVideoPrintf("COM%u: Framing error!\n", PortNumber);
        }

#endif

    } while ((Status & COM_LINE_STATUS_DATA_READY) == 0);

    Byte = BlRtlReadPort8(Base + COM_DATA_REGISTER);

    Status = BlRtlReadPort8(Base + COM_LINE_STATUS_REGISTER);

#if COM_VERBOSE

    if ((Status & COM_LINE_STATUS_OVERRUN_ERROR) != 0) {

        BlVideoPrintf("COM%u: Overrun error!\n", PortNumber);
    }

    if ((Status & COM_LINE_STATUS_PARITY_ERROR) != 0) {

        BlVideoPrintf("COM%u: Parity error!\n", PortNumber);
    }

    if ((Status & COM_LINE_STATUS_FRAMING_ERROR) != 0) {

        BlVideoPrintf("COM%u: Framing error!\n", PortNumber);
    }

#endif

    return Byte;
}


================================================
FILE: ironclad-apps/src/Checked/BootLoader/SingLdrPc/blentry.cpp
================================================
//++
//
//  Copyright (c) Microsoft Corporation
//
//  Module Name:
//
//    blentry.cpp
//
//  Abstract:
//
//    This module implements the entry point for the boot loader.
//
//--

#include "bl.h"

//#define VESA_ENABLED 1

#define BL_BOOT_STACK_SIZE  0x10000

PVOID BlBootStackLimit;
PVOID BlBootStackBase;

VOID
BlApEntry(
    VOID
    )

//++
//
//  Routine Description:
//
//    This function implements the non-legacy entry point for application processors.
//
//--

{
    BlSingularityApEntry();

    BlRtlHalt();
}

VOID
BlInitialize(
    VOID
    )

//++
//
//  Routine Description:
//
//    This function initializes the boot loader.
//
//--

{
    PBEB Beb;

    Beb = BlGetBeb();

    //
    // Check boot type and perform any necessary source specific initialization.
    //

    BlRtlPrintf("Booting from ");

    switch (Beb->BootType) {

        case BL_CD_BOOT: {

            BlRtlPrintf("CD in drive 0x%02x.\n\n", Beb->BootDriveNumber);

            BlCdInitialize((UINT8) Beb->BootDriveNumber);

            break;
        }

        case BL_FAT16_BOOT: {

            BlRtlPrintf("FAT16 on drive 0x%02x.\n\n", Beb->BootDriveNumber);

            BlFatInitialize((UINT8) Beb->BootDriveNumber, MBR_FAT16LBA);

            break;
        }

        case BL_FAT32_BOOT: {

            BlRtlPrintf("FAT32 on drive 0x%02x.\n\n", Beb->BootDriveNumber);

            BlFatInitialize((UINT8) Beb->BootDriveNumber, MBR_FAT32LBA);

            break;
        }

        case BL_PXE_BOOT: {

            BlRtlPrintf("network.\n");

            BlPxeInitialize();

            break;
        }

        case BL_FLASH_BOOT: {

            BlRtlPrintf("Flash.\n");

            BlFlashInitialize((PVOID)Beb->FlashImage, (PVOID)Beb->FlashImage);

            break;
        }

        default: {

            BlRtlPrintf("unknown source!\n");

            BlRtlHalt();
        }
    }

    //
    // Initialize PNP BIOS support.
    //

    if (Beb->BootType != BL_FLASH_BOOT) {

        BlPnpInitialize();

    }

    //
    // Initialize MPS support.
    //

    BlMpsInitialize();

    //
    // Initialize ACPI support.
    //

    if (Beb->BootType != BL_FLASH_BOOT) {

        BlAcpiInitialize();

    }
    else {

        BlAcpiNumberOfProcessors = 1;

    }

    //
    // Set AP entry address.
    //

    Beb->ApEntry = (UINT32) (ULONG_PTR) BlApEntry;

    //
    // Initialize Singularity.
    //

    if (BlCommandLine == NULL) {

        BlCommandLine = L"";
    }

    BlSingularityInitialize(BlAcpiNumberOfProcessors,
                            &Beb->ApEntry16,
                            &Beb->ApStartupLock);
}

#if defined(BOOT_X86)

#define PLATFORM_STRING                 "x86"

#elif defined(BOOT_X64)

#define PLATFORM_STRING                 "x64"

#endif

BL_TIME BlStartTime;

VOID
BlEntry(
    VOID
    )

//++
//
//  Routine Description:
//
//    This function implements the non-legacy entry point for the boot loader.
//
//--

{
    PBEB Beb;

    Beb = BlGetBeb();

    //
    // Initialize the trap table.
    //
    BlTrapEnable();

    //
    // Initialize video.
    //

    BlVideoInitialize();

    //
    // Print the welcome banner.
    //

    BlRtlPrintf("Singularity %s Boot Loader [%s %s]\n"
                "\n",
                PLATFORM_STRING,
                __DATE__,
                __TIME__);

    //
    // Capture boot start time.
    //

    if (Beb->BootType != BL_FLASH_BOOT) {

        BlRtlGetCurrentTime(&BlStartTime);

    }

    //
    // Initialize memory management (ring transitions must follow this call).
    //

    BlMmInitializeSystem();

    //
    // Initialize PCI support (probe for 1394 interfaces for KD).
    //

    if (Beb->BootType != BL_FLASH_BOOT) {

        BlPciInitialize();

    }

    //
    // Initialize KD.
    //

    BlRtlPrintf("Looking for debugger.\n");
//    BlKdInitialize();

    //
    // Print the welcome banner.
    //

    BlRtlPrintf("Boot Time: %02u/%02u/%02u %02u:%02u:%02u\n",
                BlStartTime.Month,
                BlStartTime.Day,
                BlStartTime.Year,
                BlStartTime.Hour,
                BlStartTime.Minute,
                BlStartTime.Second);

    //
    // Initialize VESA support.
    //

#if VESA_ENABLED

    BlVesaInitialize();

#endif

    //
    // Allocate and switch to the boot stack.
    //

    BlBootStackLimit = (PVOID) (ULONG_PTR) BlMmAllocatePhysicalRegion(BL_BOOT_STACK_SIZE, BL_MM_PHYSICAL_REGION_BOOT_STACK);
    BlBootStackBase = (PVOID) ((ULONG_PTR) BlBootStackLimit + BL_BOOT_STACK_SIZE);

    BlMmSwitchStack(BlBootStackBase, BlInitialize);
}


================================================
FILE: ironclad-apps/src/Checked/BootLoader/SingLdrPc/blentry16.asm
================================================
;++
;
; Copyright (c) Microsoft Corporation
;
; Module Name:
;
;     blentry16.asm (x64)
;
; Abstract:
;
;     This module implements the 16-bit entry point for the boot loader.
;
; Environment:
;
;     Boot loader.
;
;--


.model tiny, c

OPTION SCOPED

include bl.inc

REAL_MODE_BASE          equ     07b00h
VIDEO_BASE              equ     0b8000h
BLUE                    equ     01f00h
RED                     equ     02f00h        
GREEN                   equ     04f00h
        
.code
.686p

JMPF16 MACRO SEG:REQ,OFF:REQ
        db      0eah
        dw      OFF
        dw      SEG
ENDM        

JMPF32 MACRO SEG:REQ,OFF:REQ
        db      0eah
        dd      OFF
        dw      SEG
ENDM

_TEXT16 segment page public use16 'CODE'

        org     100h

;++
;
; VOID
; BlEntry16(
;     VOID
;     )
;
; Routine Description:
;
;   This function is the 16-bit entry point for the boot loader and it detects
;   the type of boot to perform and calls the appropriate function.
;
;--

BlEntry16       proc

;
; Disable interrupts.
;

        cli

        mov     bp, sp

        ;; Write a character to the screen.
        ;; Configure GS to point to the text-mode video console.
        mov     ax, 0b800h
        mov     gs, ax

        mov     ax, GREEN + 'A'
        mov     gs:[0], ax

        mov     ax, GREEN + '-'
        mov     gs:[2], ax
        
;
; If CS is 0x5000, then it indicates a CD or HD boot.
;

        mov     bx, PXE_BOOT
        mov     dx, 0
        mov     ax, cs
        cmp     ax, 05000h
        jne     boot_ready

;
; Check for CD signature on the stack.
;

        mov     dx, word ptr [bp + 8]
        mov     bx, CD_BOOT
        cmp     word ptr [bp + 4], 04344h
        je      boot_needs_fixup

;
; Check for FAT16 signature on the stack.
;

        mov     bx, FAT16_BOOT
        cmp     word ptr [bp + 4], 04806h
        je      boot_needs_fixup

;
; Check for FAT32 signature on the stack.
;

        mov     bx, FAT32_BOOT
        cmp     word ptr [bp + 4], 04803h
        je      boot_needs_fixup

;
; Unknown boot device
;

        mov     ax, GREEN + 'B'
        mov     gs:[2], ax
@@:
        jmp @b

;
; Copy 64K from 57C0:0000 to 07C0:0000.
;

boot_needs_fixup:
        mov     ax, GREEN + 'C'
        mov     gs:[4], ax
        
        mov     ax, 057C0h
        mov     ds, ax
        mov     si, 0
        mov     ax, 007C0h
        mov     es, ax
        mov     di, 0
        mov     cx, 04000h

        rep movsd

;
; Continue execution at the relocated block with known segment selector.
;

boot_ready:

        mov     ax, GREEN + 'D'
        mov     gs:[6], ax
  
;
; Jump to relocated code.
;
        
        JMPF16  07b0h, @f
@@:      

        ;     bx = BootType
        ;     dx = BootDriveNumber

;
; Initialize DS, ES, SS, and SP for real mode.
;

        mov     ax, cs
        mov     ds, ax
        mov     es, ax
        mov     ax, RM_INITIAL_SS
        mov     ss, ax
        mov     sp, RM_INITIAL_SP

        mov     ax, GREEN + 'E'
        mov     gs:[8], ax
        
;
; Initialize boot environment block (pass bx & dx).
;

        call    BlInitializeBeb

;
; Initialize video.
;

        call    BlInitializeVideo

;
; Load GDT.
;

        mov     ax, GREEN + 'F'
        mov     gs:[10], ax
        
        mov     di, OFFSET BlGDTS_Limit
        lgdt    fword ptr ds:[di]

        mov     ax, RM_VIDEO_SELECTOR
        mov     gs, ax

        mov     ax, GREEN + 'G'
        mov     gs:[12], ax
        
;
; Clear the real-mode segment registers.
;
        
        xor     ax, ax
        mov     ds, ax
        mov     es, ax
        mov     ss, ax
        mov     fs, ax
        mov     gs, ax
        
;
; Enable protected mode.
;

        mov     eax, cr0
        or      eax, CR0_PE OR CR0_NE
        mov     cr0, eax

;
; Jump far to 32-bit protected-mode code.
;

        JMPF16  PM_CODE_SELECTOR, LOWWORD ( REAL_MODE_BASE + OFFSET BlEntry32 )
        
BlEntry16       endp

;++
;
; VOID
; BlInitializeVideo(
;     VOID
;     )
;
; Routine Description:
;
;   This function initializes video support for the boot loader.
;
;--

BlInitializeVideo       proc

        mov     ax, 1202h       ; LINES_400_CONFIGURATION
        mov     bx, 0301h       ; SELECT_SCAN_LINE
        int     10h

        mov     ax, 3h          ; SET_80X25_16_COLOR_MODE
        mov     bx, 0h          ; PAGE0
        int     10h

        mov     ax, 1112h       ; LOAD_8X8_CHARACTER_SET
        mov     bx, 0h
        int     10h

        mov     ax, 1003h       ; Disable BLINK mode, enable background intensity.
        mov     bx, 0h
        int     10h

        mov     ax, 0200h       ; Set Cursor position to 0, 0
        mov     bx, 0h
        mov     dx, 0h
        int     10h

        ret

BlInitializeVideo       endp

;++
;
; VOID
; BlInitializeBeb(
;     bx = BootType
;     dx = BootDriveNumber
;     )
;
; Routine Description:
;
;   This function initializes the boot environment block.
;
;--

BlInitializeBeb proc

        push    es
        push    di

        mov     di, BEB_SEG16
        mov     es, di
        mov     di, BEB_OFF16

        xor     al, al
        mov     cx, 4096
        rep stosb

        mov     di, BEB_OFF16

        ;;  See if we are booting from Flash
        
        mov     si, BlFlashImage
        mov     eax, [si]
        cmp     eax, 0
        je      @f
        
        mov     dword ptr es:[di].BEB.FlashImage, eax
        mov     si, BlSmapAddr
        mov     eax, [si]
        mov     dword ptr es:[di].BEB.SmapAddr, eax
        mov     si, BlSmapSize
        mov     eax, [si]
        mov     dword ptr es:[di].BEB.SmapSize, eax
        mov     bx, FLASH_BOOT
@@:     
                
        mov     word ptr es:[di].BEB.BootType, bx
        mov     word ptr es:[di].BEB.BootDriveNumber, dx
ifdef BOOT_X64        
        mov     dword ptr es:[di].BEB.LegacyReturnCr3, LM_PML4T_ADDRESS
else
        mov     dword ptr es:[di].BEB.LegacyReturnCr3, PM_PDPT_ADDRESS
endif
        lea     ax, BlApEntry16
        mov     word ptr es:[di].BEB.ApEntry16, ax
        mov     ax, cs
        mov     word ptr es:[di].BEB.ApEntry16 + 2, ax

        lea     ax, BlApStartupLock
        mov     word ptr es:[di].BEB.ApStartupLock, ax
        mov     ax, cs
        mov     word ptr es:[di].BEB.ApStartupLock + 2, ax

        pop     di
        pop     es
        ret

BlInitializeBeb endp

;++
;
; Hardware Protection Configuration Data 
;
;--

;
; TSS.
;

ALIGN 16

BlTSS:

        db      066h dup (0)
        dw      068h

;
; Global Descriptor Table (GDT).
;

ALIGN 16

BlGDTStart:

        dq      00000000000000000h      ; 00: NULL segment              [NULL_SELECTOR].
        dq      00000930B8000FFFFh      ; 08: 000B8000[0000FFFF] Data   [PM_VIDEO_SELECTOR].
        dq      000009B007B00FFFFh      ; 10: 00007800[0000FFFF] COde   [RM_CODE_SELECTOR].
        dq      0000093007B00FFFFh      ; 18: 00007B00[0000FFFF] Data   [RM_DATA_SELECTOR].
        dq      000CF9B000000FFFFh      ; 20: PM code segment           [PM_CODE_SELECTOR].
        dq      000CF93000000FFFFh      ; 28: PM data segment           [PM_DATA_SELECTOR].
        dq      000209B0000000000h      ; 30: LM code segment           [LM_CODE_SELECTOR].
        dq      00000930000000000h      ; 38: LM data segment           [LM_DATA_SELECTOR].
        dq      00000000000000000h      ; 40: PM user code segment      [UM_CODE_SELECTOR].
        dq      00000000000000000h      ; 48: PM user data segment      [UM_DATA_SELECTOR].
        dq      00000000000000000h      ; 50: FS/GS segment             [PROCESSOR_SELECTOR].
        dq      00000000000000000h      ; 58:                           [UNUSED_SELECTOR]

;
; TSS segment.
;

        dw      00067h
        dw      REAL_MODE_BASE + OFFSET BlTSS
        db      000h
        db      089h
        dw      00000h
ifdef BOOT_X64        
        dq      00000000000000000h
endif        

BlGDTLimit:

;
; Global Descriptor Table Selector (GDTS).
;

ALIGN 16

;; Padding to align address (and limit to -2)
        dw      00000h
        dw      00000h
        dw      00000h
BlGDTS_Limit:
        dw      offset BlGDTLimit - offset BlGDTStart
BlGDTS_Address:
        dw      REAL_MODE_BASE + OFFSET BlGDTStart
        dw      0
        dd      0

;++
;
; VOID
; BlReturnToRealMode(
;     VOID
;     )
;
; Routine Description:
;
;   This function switches the processor back to real mode to execute a real
;   mode request.
;
;--

ALIGN 16
BlReturnToRealMode      proc

;
; Zero all registers.
;

        xor     ebx, ebx
        xor     ecx, ecx
        xor     edx, edx
        xor     esi, esi
        xor     edi, edi
        xor     esp, esp
        xor     ebp, ebp

        mov     ax, RM_DATA_SELECTOR
        mov     ds, ax
        mov     es, ax
        mov     ss, ax
        mov     fs, ax
        mov     gs, ax
;
; Disable protected mode.
;

        mov     eax, cr0
        and     eax, NOT (CR0_PE OR CR0_NE)
        mov     cr0, eax

;
; Return to real mode.
;
        JMPF16  07b0h, OFFSET BlProcessRealModeRequest

BlReturnToRealMode      endp

;++
;
; VOID
; BlLeaveLrbPmToBoot(
;     VOID
;     )
;
; Routine Description:
;
;   This function switches the processor back to real mode for boot.
;
;--

ALIGN 16
BlLeaveLrbPmToBoot      PROC

        mov     ax, RM_VIDEO_SELECTOR
        mov     gs, ax
        ;; Write to position 0.
        mov     ax, RED + 'T'
        mov     gs:[12], ax
        
; Zero all registers.
;

        xor     ebx, ebx
        xor     ecx, ecx
        xor     edx, edx
        xor     esi, esi
        xor     edi, edi
        xor     esp, esp
        xor     ebp, ebp

;
; Disable paging.
;

        mov     eax, cr0
        and     eax, NOT (CR0_PG)
        mov     cr0, eax
        
        xor     eax, eax
        mov     cr3, eax
        mov     cr4, eax

;
; Disable long mode and return to legacy protected-mode.
;

        mov     ecx, EFER_MSR_INDEX
        rdmsr
        and     eax, NOT (EFER_LME OR EFER_NXE)
        wrmsr

;
; Disable protected mode.
;

        mov     eax, cr0
        and     eax, NOT (CR0_PE OR CR0_NE)
        mov     cr0, eax
        
;
; Return to real mode.
;
        JMPF16  07b0h, OFFSET @f
@@:     
        mov     ax, 0b800h
        mov     gs, ax
        
        ;; Write to position 0.
        mov     ax, RED + 'U'
        mov     gs:[14], ax

        mov     ax, cs
        mov     ds, ax
        mov     es, ax
        mov     ax, RM_INITIAL_SS
        mov     ss, ax
        mov     sp, RM_INITIAL_SP
        
        ;; Write to position 0.
        mov     ax, RED + 'V'
        mov     gs:[16], ax

;
; Return to real mode boot entry.
;
        JMPF16  07b0h, OFFSET BlEntry16

BlLeaveLrbPmToBoot  endp

;++
;
; VOID
; BlProcessRealModeRequest(
;     VOID
;     )
;
; Routine Description:
;
;   This function performs the requested real mode operation and returns back to
;   protected mode as necessary.
;
;--

;
; Real-mode IDTR.
;

BlRealModeIdtr:

        dw      01000h
        dq      0

;
; Protected-mode IDTR.
;

BlProtModeIdtr:

        dw      01000h
        dq      0

BlProcessRealModeRequest        proc

;
; Set DS, ES, SS, SP, and SI for real-mode legacy call.
;

        xor     eax,eax
        mov     ax, cs
        mov     ds, ax
        mov     ax, BEB_SEG16
        mov     es, ax
        mov     ax, RM_INITIAL_SS
        mov     ss, ax
        mov     sp, RM_INITIAL_SP
        mov     si, BEB_OFF16

;
; Switch back to real-mode IDT.
;

        lea     eax, BlRealModeIdtr
        lidt    fword ptr ds:[eax]
                   
        cmp     word ptr es:[si].BEB.LegacyCall_OpCode, LC_INTXX
        jne     @f

        mov     cl, byte ptr es:[si].BEB.LegacyCall_Vector
        call    BlProcessIntXx
        jmp     BlProcessRealModeRequest_Exit

@@:

        cmp     word ptr es:[si].BEB.LegacyCall_OpCode, LC_FARCALL
        jne     @f

        call    BlProcessFarCall
        jmp     BlProcessRealModeRequest_Exit

@@:

BlProcessRealModeRequest_Exit:

;
; Restore DS, ES, SS, and SP to their initial real-mode values.
;

        mov     ax, cs
        mov     ds, ax
        mov     es, ax
        mov     ax, RM_INITIAL_SS
        mov     ss, ax
        mov     sp, RM_INITIAL_SP

;
; Load GDT.
;

        mov     di, OFFSET BlGDTS_Limit
        lgdt    fword ptr ds:[di]

;
; Clear the real-mode segment registers.
;
        
        xor     ax, ax
        mov     ds, ax
        mov     es, ax
        mov     ss, ax
        mov     fs, ax
        mov     gs, ax
        
;
; Enable protected mode.
;

        mov     eax, cr0
        or      eax, CR0_PE OR CR0_NE
        mov     cr0, eax

;
; Jump far to 32-bit protected-mode code.
;
        
        JMPF16  PM_CODE_SELECTOR, LOWWORD ( REAL_MODE_BASE + OFFSET BlEnter32AfterRealModeRequest )
        
BlProcessRealModeRequest        endp

;++
;
; Lock to protect shared access to real-mode boot stack.
;
;--
                
BlApStartupLock:

        dd      0

Bl16End db      0deh, 0adh, 0beh, 0efh

        
        org     500h

;++
;
; VOID
; BlApEntry16(
;     VOID
;     )
;
; Routine Description:
;
;   This function implements the entry point for application processors
;   on a multi-processor system.
;
;--

BlApEntry16     proc

;
; Disable interrupts.
;

        cli

;
; Set DS to access AP startup lock.
;

        mov     ax, 07b0h
        mov     ds, ax

;
; Acquire AP startup lock before touching any other memory or stack.
;

@@:
        cmp     word ptr ds:[BlApStartupLock], 0
        jne     @b

        mov     ax, 1
        xchg    word ptr ds:[BlApStartupLock], ax

        cmp     ax, 0
        jne     @b

;
; Set SS & SP and switch to 16-bit entry CS.
;

        mov     ax, RM_INITIAL_SS
        mov     ss, ax
        mov     sp, RM_INITIAL_SP

        JMPF16  07b0h, OFFSET @f
@@:

;
; Initialize DS, ES, SS, and SP for real mode.
;

        mov     ax, cs
        mov     ds, ax
        mov     es, ax
        mov     ax, RM_INITIAL_SS
        mov     ss, ax
        mov     sp, RM_INITIAL_SP

;
; Load GDT.
;

        mov     di, OFFSET BlGDTS_Limit
        lgdt    fword ptr ds:[di]

;
; Clear the real-mode segment registers.
;
        
        xor     ax, ax
        mov     ds, ax
        mov     es, ax
        mov     ss, ax
        mov     fs, ax
        mov     gs, ax
        
;
; Enable protected mode.
;

        mov     eax, cr0
        or      eax, CR0_PE OR CR0_NE
        mov     cr0, eax

;
; Jump far to 32-bit protected-mode code.
;
        
        JMPF16  PM_CODE_SELECTOR, LOWWORD ( REAL_MODE_BASE + OFFSET BlApEntry32 )
        
BlApEntry16     endp

;
;
;
              
SAVE_CONTEXT_TO_STACK           macro

        push    eax
        push    ebx
        push    ecx
        push    edx
        push    esi
        push    edi
        push    ds
        push    es
        pushfd

endm

RESTORE_CONTEXT_FROM_STACK      macro

        popfd
        pop     es
        pop     ds
        pop     edi
        pop     esi
        pop     edx
        pop     ecx
        pop     ebx
        pop     eax

endm

SAVE_CALL_CONTEXT_TO_STACK      macro

        mov     ax, BEB_SEG16
        mov     es, ax
        mov     si, BEB_OFF16

        push    dword ptr es:[si].BEB.LegacyCall_eax
        push    dword ptr es:[si].BEB.LegacyCall_ebx
        push    dword ptr es:[si].BEB.LegacyCall_ecx
        push    dword ptr es:[si].BEB.LegacyCall_edx
        push    dword ptr es:[si].BEB.LegacyCall_esi
        push    dword ptr es:[si].BEB.LegacyCall_edi
        push    word ptr es:[si].BEB.LegacyCall_ds
        push    word ptr es:[si].BEB.LegacyCall_es
        pushfd

endm

RESTORE_CALL_CONTEXT_FROM_STACK macro

        mov     ax, BEB_SEG16
        mov     es, ax
        mov     si, BEB_OFF16

        pop     dword ptr es:[si].BEB.LegacyCall_eflags
        pop     word ptr es:[si].BEB.LegacyCall_es
        pop     word ptr es:[si].BEB.LegacyCall_ds
        pop     dword ptr es:[si].BEB.LegacyCall_edi
        pop     dword ptr es:[si].BEB.LegacyCall_esi
        pop     dword ptr es:[si].BEB.LegacyCall_edx
        pop     dword ptr es:[si].BEB.LegacyCall_ecx
        pop     dword ptr es:[si].BEB.LegacyCall_ebx
        pop     dword ptr es:[si].BEB.LegacyCall_eax

endm

;++
;
; VOID
; BlProcessIntXx(
;     UCHAR InterruptVector
;     )
;
; Routine Description:
;
;   This function processes INT XX requests.
;
; Arguments:
;
;   InterruptVector (cl) - Supplies the interrupt vector to invoke.
;
;--

BlProcessIntXx  proc

        mov     byte ptr @f, cl

        SAVE_CONTEXT_TO_STACK

        SAVE_CALL_CONTEXT_TO_STACK

        RESTORE_CONTEXT_FROM_STACK

;
; INT XX instruction.
;

        db      0CDh

@@:

        db      000h

        SAVE_CONTEXT_TO_STACK

        RESTORE_CALL_CONTEXT_FROM_STACK

        RESTORE_CONTEXT_FROM_STACK

        ret

BlProcessIntXx  endp

;++
;
; VOID
; BlProcessFarCall(
;     UCHAR InterruptVector
;     )
;
; Routine Description:
;
;   This function processes far call requests.
;
;--

BlProcessFarCall        proc

        SAVE_CONTEXT_TO_STACK

        push    bp
        mov     bp, sp

;
; Copy the call frame to the stack.
;

        mov     ax, BEB_SEG16
        mov     es, ax
        mov     si, BEB_OFF16

        mov     ax, word ptr es:[si].BEB.LegacyCall_FramePtr + 2
        mov     ds, ax
        mov     bx, word ptr es:[si].BEB.LegacyCall_FramePtr

        mov     cx, word ptr es:[si].BEB.LegacyCall_FrameSize
        add     bx, cx
        mov     ax, cx

@@:

        cmp     ax, 0
        je      @f

        sub     bx, 2
        push    word ptr ds:[bx]

        sub     ax, 2
        jmp     @b

@@:

;
; Set return address.
;

        push    cs
        push    @f

;
; Set call address.
;

        push    dword ptr es:[si].BEB.LegacyCall_FuncPtr

;
; Set caller provided context.
;

        SAVE_CALL_CONTEXT_TO_STACK

        RESTORE_CONTEXT_FROM_STACK

;
; Call the specified function with a far return.
;

        retf

@@:

;
; Copy the output context to BEB.
;

        SAVE_CONTEXT_TO_STACK

        RESTORE_CALL_CONTEXT_FROM_STACK

        mov     sp, bp
        pop     bp

        RESTORE_CONTEXT_FROM_STACK

        ret

BlProcessFarCall        endp
        
_TEXT16 ends

_TEXT32 segment page public use32 'CODE'

;++
;
; VOID
; BlEntry32(
;     VOID
;     )
;
; Routine Description:
;
;   This function implements the 32-bit entry point for the boot loader.
;
;--

BlEntry32       proc

;
; Load the protected-mode segment registers.
;
        mov     ax, PM_DATA_SELECTOR
        mov     ds, ax
        mov     es, ax
        mov     ss, ax
        mov     esp, PM_INITIAL_ESP

        mov     ax, NULL_SELECTOR
        mov     fs, ax
        mov     gs, ax

        mov     esi, VIDEO_BASE + 14
        mov     [esi], ax
   
ifdef BOOT_X64             
;
; Check for long mode.
;

        call    BlCheckLongMode
        cmp     eax, 0
        jne     @f

;
; Long mode is not supported -- halt execution.
;

        call    BlHalt

@@:
endif
        
;
; Initialize boot environment block.
;

        call    BlRegisterExitAddress

;
; Prepare page tables.
;

        call    BlPreparePageTables

        mov     ax, GREEN + 'I'
        mov     esi, VIDEO_BASE + 14
        mov     [esi], ax
        
        
;
; Enable PSE, PAE, performance counters, and floating point support.
;

        mov     eax, cr4
        ;or      eax,                        CR4_PCE OR CR4_OSFXSR
        or      eax, CR4_PSE OR CR4_PAE OR CR4_PCE OR CR4_OSFXSR
        mov     cr4, eax

;
; Set root page table.
;

ifdef BOOT_X64
        mov     eax, LM_PML4T_ADDRESS
else
        mov     eax, PM_PDPT_ADDRESS
endif
        mov     cr3, eax

ifdef BOOT_X64        
;
; Enable long-mode and no-execute.
;

        mov     ecx, EFER_MSR_INDEX
        rdmsr
        or      eax, EFER_LME OR EFER_NXE
        wrmsr
endif        

;
; Enable paging.
;
         ;hlt
        mov     eax, cr0
        or      eax, CR0_PG
        mov     cr0, eax
;         mov  eax, cr0
;myInfLoop:         
;         and eax, 080000000h;
;         cmp eax, 0
;         jne myInfLoop


;
; Load PE image.
;

        call    BlLoadImage

        mov     bx, GREEN + 'J'
        mov     esi, VIDEO_BASE + 16
        mov     [esi], bx
        
ifdef BOOT_X64        
;
; Enter long mode.
;

        JMPF32  LM_CODE_SELECTOR, REAL_MODE_BASE + OFFSET @f
@@:

        mov     dx, LM_DATA_SELECTOR
        mov     ds, dx
        mov     es, dx
        mov     ss, dx

        mov     bx, GREEN + 'K'
        mov     esi, VIDEO_BASE + 18
        mov     [esi], bx
endif
                
;
; Switch to entry stack and call entry point.
;
        
        mov     esp, BL_ENTRY_SP
        call    eax

BlEntry32       endp

;++
;
; VOID
; BlEnter32AfterRealModeRequest(
;     VOID
;     )
;
; Routine Description:
;
;   This function returns to normal mode after a legacy mode request was handled.
;
;--

BlEnter32AfterRealModeRequest    proc

;
; Load the protected-mode segment registers.
;
        mov     ax, PM_DATA_SELECTOR
        mov     ds, ax
        mov     es, ax
        mov     ss, ax
        mov     esp, PM_INITIAL_ESP

        mov     ax, NULL_SELECTOR
        mov     fs, ax
        mov     gs, ax

;
; Enable PSE, PAE, performance counters, and floating point support.
;

        mov     eax, cr4
        ;or      eax,                        CR4_PCE OR CR4_OSFXSR
        or      eax, CR4_PSE OR CR4_PAE OR CR4_PCE OR CR4_OSFXSR
        mov     cr4, eax

;
; Set root page table.
;

        mov     eax, BEB_BASE
        mov     eax, dword ptr [eax].BEB.LegacyReturnCr3
        mov     cr3, eax

ifdef BOOT_X64
;
; Enable long-mode and no-execute.
;

        mov     ecx, EFER_MSR_INDEX
        rdmsr
        or      eax, EFER_LME OR EFER_NXE
        wrmsr
endif

;
; Restore the IDT
;

        mov     eax, OFFSET BlProtModeIdtr
        add     eax, REAL_MODE_BASE
        lidt    fword ptr ds:[eax]
        
;
; Enable paging.
;

        mov     eax, cr0
        or      eax, CR0_PG
        mov     cr0, eax

;
; Get return address from BEB.
;

        mov     eax, BEB_BASE
        mov     eax, dword ptr [eax].BEB.LegacyReturnAddress

ifdef BOOT_X64
;
; Enter long mode.
;

        JMPF32  LM_CODE_SELECTOR, REAL_MODE_BASE + OFFSET @f
@@:

        mov     edx, LM_DATA_SELECTOR
        mov     ds, edx
        mov     es, edx
        mov     ss, edx

endif
        
;
; Return to normal code.
;
        
        call    eax

BlEnter32AfterRealModeRequest    endp

;++
;
; VOID
; BlPreparePageTables(
;     VOID
;     )
;
; Routine Description:
;
;   This function prepares page tables for long mode execution.
;
;--

BlPreparePageTables     proc

ifdef BOOT_X64
;
; Clear all entries for 4th level table.
;

        xor     eax, eax
        mov     edi, LM_PML4T_ADDRESS
        mov     ecx, 0400h
        rep stosd

;
; Create a single 4th level entry.
;

        mov     eax, LM_PML4T_ADDRESS
        mov     dword ptr [eax], PM_PDPT_ADDRESS OR PTE_PRESENT OR PTE_WRITEABLE OR PTE_ACCESSED

endif
        
;
; Clear all entries for 2nd and 3rd level tables.
;

        xor     eax, eax
        mov     edi, PM_PDPT_ADDRESS
        mov     ecx, 0400h
        rep stosd

        xor     eax, eax
        mov     edi, PM_PDT_ADDRESS
        mov     ecx, 0400h
        rep stosd

;
; Create a single 3rd level entry.
;

        mov     eax, PM_PDPT_ADDRESS
ifdef BOOT_X64        
        mov     dword ptr [eax], PM_PDT_ADDRESS OR PTE_PRESENT OR PTE_WRITEABLE OR PTE_ACCESSED
else
;;; See if these can't be the same.
        mov     dword ptr [eax], PM_PDT_ADDRESS OR PTE_PRESENT
endif

;
; Create a single 2nd level entry to identity-map the first 2MB of memory.
;

        mov     eax, PM_PDT_ADDRESS
        mov     dword ptr [eax], 0 OR PTE_PRESENT OR PTE_WRITEABLE OR PTE_ACCESSED OR PTE_2MB

        ret

BlPreparePageTables     endp

ifdef BOOT_X64
                
;++
;
; VOID
; BlCheckLongMode(
;     VOID
;     )
;
; Routine Description:
;
;   This function checks if the processor supports long mode execution.
;
; Return Value:
;
;   TRUE, if long mode execution is supported.
;   FALSE, otherwise.
;
;--

BlCheckLongMode proc

;
; Get the largest extended function supported.
;

        mov     eax, 080000000h
        cpuid

;
; If 0x80000000 is the limit, then long mode is not supported.
;

        cmp     eax, 080000000h
        jbe     NoLongMode

;
; Execute extended function 1 and check for long mode bit.
;

        mov     eax, 080000001h
        cpuid

        bt      edx, 29
        jnc     NoLongMode

;
; Return 1 to indicate presence of long mode.
;

        mov     eax, 1
        ret

NoLongMode:

;
; Return 0 to indicate absense of long mode.
;

        mov     eax, 0
        ret

BlCheckLongMode endp

endif

;++
;
; VOID
; BlHalt(
;     VOID
;     )
;
; Routine Description:
;
;   This function halts execution.
;
;--

BlHalt  proc

@@:

        jmp     @b

BlHalt  endp

;++
;
; VOID
; BlLeaveProtectedMode(
;     VOID
;     )
;
; Routine Description:
;
;   This function leaves protected mode to perform a real mode operation.
;
;--

ALIGN 16        
BlLeaveProtectedMode    proc

;
; Disable paging, reset root page table, and flush TLB.
;

        mov     eax, cr0
        and     eax, NOT CR0_PG
        mov     cr0, eax

        xor     eax, eax
        mov     cr3, eax
        mov     cr4, eax

        jmp     @f
ALIGN 16
@@:

;
; Save the IDT.
;
             
        mov     eax, OFFSET BlProtModeIdtr
        add     eax, REAL_MODE_BASE
        sidt    fword ptr ds:[eax]
           
ifdef BOOT_X64        

;
; Disable long mode and return to legacy protected-mode.
;

        mov     ecx, EFER_MSR_INDEX
        rdmsr
        and     eax, NOT (EFER_LME OR EFER_NXE)
        wrmsr
endif
        
;
; Return to real-mode code.
;

        JMPF32  RM_CODE_SELECTOR, OFFSET BlReturnToRealMode

BlLeaveProtectedMode    endp

;++
;
; PVOID
; BlLoadImage(
;     VOID
;     )
;
; Routine Description:
;
;   This function loads the higher-level boot loader image.
;
; Return Value:
;
;   Entry point address for the loaded image.
;
;--

BlLoadImage     proc

        lea     ebp, OFFSET BlImageStart
        add     ebp, REAL_MODE_BASE

;
; Check DOS signature.
;

        cmp     word ptr [ebp], IMAGE_DOS_SIGNATURE
        jne     BlInvalidImage

;
; Calculate NT header address.
;

        mov     ebx, dword ptr [ebp + IDH_NT_HEADER_OFFSET]
        add     ebx, ebp

;
; Check NT signature.
;

        cmp     dword ptr [ebx + INH_SIGNATURE], IMAGE_NT_SIGNATURE
        jne     BlInvalidImage

;
; Check image base.
;

ifdef BOOT_X64        
        cmp     dword ptr [ebx + INH_OPTIONAL_HEADER + IOH64_IMAGE_BASE + 4], 0
        jne     BlInvalidImage

        cmp     dword ptr [ebx + INH_OPTIONAL_HEADER + IOH64_IMAGE_BASE], IMAGE_ADDRESS
else
        cmp     dword ptr [ebx + INH_OPTIONAL_HEADER + IOH32_IMAGE_BASE], IMAGE_ADDRESS
endif
        jne     BlInvalidImage

;
; Copy headers.
;

        mov     esi, ebp
        mov     edi, IMAGE_ADDRESS
        mov     ecx, dword ptr [ebx + INH_OPTIONAL_HEADER + IOH_SIZE_OF_HEADERS]
        rep movsb

;
; Calculate the address of first section header.
;
; SectionHeader = (PIMAGE_SECTION_HEADER) (((ULONG_PTR) &NtHeaders->OptionalHeader) + NtHeaders->FileHeader.SizeOfOptionalHeader)
;

        xor     esi, esi
        mov     si, word ptr [ebx + INH_FILE_HEADER + IFH_SIZE_OF_OPTIONAL_HEADER]
        add     esi, INH_OPTIONAL_HEADER
        add     esi, ebx

        xor     ecx, ecx
        mov     cx, word ptr [ebx + INH_FILE_HEADER + IFH_NUMBER_OF_SECTIONS]
        cmp     cx, 0
        jne     @f

        call    BlInvalidImage

;
; for (Index = 0; Index < NtHeaders->FileHeader.NumberOfSections; Index += 1) {
;
;     BlCopySection(DosHeader, &SectionHeader[Index]);
; }
;

@@:

        push    ecx

        mov     ecx, ebp
        mov     edx, esi

        call    BlCopySection

        pop     ecx

        add     esi, IMAGE_SECTION_HEADER_SIZE

        dec     ecx
        jnz     @b

        mov     eax, dword ptr [ebx + INH_OPTIONAL_HEADER + IOH_ADDRESS_OF_ENTRY_POINT]
        add     eax, IMAGE_ADDRESS
        ret

BlLoadImage     endp

;++
;
; VOID
; FASTCALL
; BlCopySection(
;     PIMAGE_DOS_HEADER DosHeader,
;     PIMAGE_SECTION_HEADER SectionHeader
;     )
;
; Routine Description:
;
;   This function copies the specified image section.
;
; Arguments:
;
;   DosHeader (ecx)     - Supplies a pointer to the source image to copy from.
;
;   SectionHeader (edx) - Supplies a pointer to the section header describing
;                         the section to copy.
;
;--

BlCopySection   proc

;
; Create call frame and save non-volatile registers that will be used.
;

        push    ebp
        mov     ebp, esp

        push    esi
        push    edi

;
; Calculate source and destination address for the copy operation.
;

        mov     esi, dword ptr [edx + ISH_POINTER_TO_RAW_DATA]
        add     esi, ecx

        mov     edi, dword ptr [edx + ISH_VIRTUAL_ADDRESS]
        add     edi, IMAGE_ADDRESS

;
; Save source and destination addresses -- rep stosb below will use them.
;

        push    esi
        push    edi

;
; Zero the entire target virtual range.
;

        mov     eax, 0
        mov     ecx, dword ptr [edx + ISH_VIRTUAL_SIZE]
        rep stosb

;
; Restore source and destination addresses.
;

        pop     edi
        pop     esi

;
; BytesToCopy = min(SectionHeader->VirtualSize, SectionHeader->SizeOfRawData)
;
        mov     ecx, dword ptr [edx + ISH_VIRTUAL_SIZE]
        cmp     ecx, dword ptr [edx + ISH_SIZE_OF_RAW_DATA]
        jl      @f

        mov     ecx, dword ptr [edx + ISH_SIZE_OF_RAW_DATA]

@@:

;
; Perform copy.
;

        rep movsb

;
; Restore used non-volatile registers, base pointer, and return.
;

        pop     edi
        pop     esi
        mov     esp, ebp
        pop     ebp
        ret

BlCopySection   endp

;++
;
; VOID
; BlInvalidImage(
;     VOID
;     )
;
; Routine Description:
;
;   This function is called to halt execution if the embedded image is corrupted.
;
;--

BlInvalidImage  proc

        call    BlHalt

BlInvalidImage  endp

;++
;
; VOID
; BlRegisterExitAddress(
;     VOID
;     )
;
; Routine Description:
;
;   This function registers the exit address in the boot environment block.
;
;--

BlRegisterExitAddress   proc

        mov     ecx, BEB_BASE

        lea     eax, BlLeaveProtectedMode
        add     eax, REAL_MODE_BASE

        mov     dword ptr [ecx].BEB.LegacyCallAddress, eax

        ret

BlRegisterExitAddress   endp

;++
;
; VOID
; BlApEntry32(
;     VOID
;     )
;
; Routine Description:
;
;   This function implements 32-bit entry point for application processors.
;
;--

BlApEntry32     proc

;
; Load the protected-mode segment registers.
;
        mov     ax, PM_DATA_SELECTOR
        mov     ds, ax
        mov     es, ax
        mov     ss, ax
        mov     esp, PM_INITIAL_ESP

        mov     ax, NULL_SELECTOR
        mov     fs, ax
        mov     gs, ax

;
; Enable PSE, PAE, performance counters, and floating point support.
;

        mov     eax, cr4
        or      eax, CR4_PSE OR CR4_PAE OR CR4_PCE OR CR4_OSFXSR
        mov     cr4, eax

;
; Set root page table.
;

        mov     eax, BEB_BASE
        mov     eax, dword ptr [eax].BEB.LegacyReturnCr3
        mov     cr3, eax

ifdef BOOT_X64        
;
; Enable long-mode and no-execute.
;

        mov     ecx, EFER_MSR_INDEX
        rdmsr
        or      eax, EFER_LME OR EFER_NXE
        wrmsr
endif
        
;
; Enable paging.
;

        mov     eax, cr0
        or      eax, CR0_PG
        mov     cr0, eax

;
; Get entry address from BEB.
;

        mov     eax, BEB_BASE
        mov     eax, dword ptr [eax].BEB.ApEntry

ifdef BOOT_X64
;
; Enter long mode.
;

        JMPF32  LM_CODE_SELECTOR, REAL_MODE_BASE + OFFSET @f
@@:

        mov     edx, LM_DATA_SELECTOR
        mov     ds, edx
        mov     es, edx
        mov     ss, edx
endif

;
; Switch to entry stack and call entry point.
;

        mov     esp, BL_ENTRY_SP
        call    eax

BlApEntry32     endp

        
;++
;
; VOID
; BlLeaveLrb64ToBoot(
;     VOID
;     )
;
; Routine Description:
;
;   This function leaves paging and protected mode to boot.
;
;--

ALIGN 16

        db      'S','I','N','G'
        db      'L','R','B',0
        db      0f8h, 0f9h, 0fah, 0fbh
        db      0fch, 0fdh, 0feh, 0ffh
BlFlashImage:         
        dd      0
BlSmapAddr:             
        dd      0
BlSmapSize:             
        dd      0
        dd      0
        
BlLeaveLrb64ToBoot    proc
        mov     eax, BLUE + 'P'
        mov     esi, VIDEO_BASE + 0
        mov     [esi], ax
        
        mov     eax, BLUE + 'O'
        mov     esi, VIDEO_BASE + 2
        mov     [esi], ax

        mov     eax, BLUE + 'N'
        mov     esi, VIDEO_BASE + 4
        mov     [esi], ax

        mov     eax, BLUE + 'M'
        mov     esi, VIDEO_BASE + 6
        mov     [esi], ax

        mov     eax, BLUE + 'L'
        mov     esi, VIDEO_BASE + 8
        mov     [esi], ax

;
; Prepare a known GDT.
;
        mov     eax, BLUE + 'K'
        mov     esi, VIDEO_BASE + 10
        mov     [esi], ax

        mov     eax, BLUE + 'J'
        mov     esi, VIDEO_BASE + 12
        mov     [esi], ax

;
; Load the known GDT.
;
        
        mov     edi, BlGDTS_Limit
        add     edi, REAL_MODE_BASE
        lgdt    fword ptr ds:[edi]
        
        mov     eax, RED + 'R'
        mov     esi, VIDEO_BASE + 8
        mov     [esi], ax

        mov     eax, RED + 'S'
        mov     esi, VIDEO_BASE + 10
        mov     [esi], ax

        mov     edi, REAL_MODE_BASE + offset target
        jmp     fword ptr [edi]
target: 
        dd      OFFSET BlLeaveLrbPmToBoot
        dw      RM_CODE_SELECTOR
        
BlLeaveLrb64ToBoot    endp

;
; Align to 16-bytes before PE image is concatenated.
;
        
ALIGN 16

BlImageStart:

_TEXT32 ends

end BlEntry16


================================================
FILE: ironclad-apps/src/Checked/BootLoader/SingLdrPc/blfat.cpp
================================================
//++
//
//  Copyright (c) Microsoft Corporation
//
//  Module Name:
//
//    blfat.cpp
//
//  Abstract:
//
//    This module implements FAT support for the boot loader.
//
//--

#include "bl.h"

//
// MBR definitions.
//

#pragma pack(1)

#define MBR_BOOTABLE                    0x80

typedef struct _MBR_PARTITION {
    UINT8 Status;
    UINT8 FirstSectorCHS[3];
    UINT8 Type;
    UINT8 LastSectorCHS[3];
    UINT32 FirstSector;
    UINT32 NumberOfSectors;
} MBR_PARTITION, *PMBR_PARTITION;

C_ASSERT(sizeof(MBR_PARTITION) == 16);

#define MBR_SIGNATURE                   0xAA55

typedef struct _MBR {
    UINT8 BootCode[446];
    MBR_PARTITION Partition[4];
    UINT16 Signature;
} MBR, *PMBR;

C_ASSERT(sizeof(MBR) == 512);

#pragma pack()

//
// FAT definitions.
//

#define FAT_SECTOR_SIZE                 512
#define FAT_FIRST_DATA_CLUSTER          2

#define FAT16_CLUSTER_MASK              0xFFFF
#define FAT16_LINK_TERMINATOR           0xFFFF

#define FAT32_CLUSTER_MASK              0x0FFFFFFF
#define FAT32_LINK_TERMINATOR           0x0FFFFFFF


#pragma pack(1)

typedef struct __declspec(align(FAT_SECTOR_SIZE)) _FAT_SECTOR {
    UINT8 Data[FAT_SECTOR_SIZE];
} FAT_SECTOR, *PFAT_SECTOR;

typedef struct _FAT16_BOOT_SECTOR {
    UINT8 JumpInstruction[3];
    UINT8 OemName[8];
    UINT16 BytesPerSector;
    UINT8 SectorsPerCluster;
    UINT16 NumberOfReservedSectors;
    UINT8 NumberOfFATs;
    UINT16 NumberOfRootDirectoryEntries;
    UINT16 TotalSectorCount16;
    UINT8 Media;
    UINT16 SectorsPerFAT;
    UINT16 SectorsPerTrack;
    UINT16 NumberOfHeads;
    UINT32 NumberOfHiddenSectors;
    UINT32 TotalSectorCount32;
    UINT8 DriveNumber;
    UINT8 Reserved1;
    UINT8 ExtendedBootSignature;
    UINT32 VolumeSerialNumber;
    UINT8 VolumeLabel[11];
    UINT8 FileSystemType[8];
    UINT8 BootCode[448];
    UINT16 Signature;
} FAT16_BOOT_SECTOR, *PFAT16_BOOT_SECTOR;

C_ASSERT(sizeof(FAT16_BOOT_SECTOR) == FAT_SECTOR_SIZE);

typedef struct _FAT32_BOOT_SECTOR {
    UINT8 JumpInstruction[3];
    UINT8 OemName[8];
    UINT16 BytesPerSector;
    UINT8 SectorsPerCluster;
    UINT16 NumberOfReservedSectors;
    UINT8 NumberOfFATs;
    UINT16 NumberOfRootDirectoryEntries;
    UINT16 TotalSectorCount16;
    UINT8 Media;
    UINT16 SectorsPerFAT16;
    UINT16 SectorsPerTrack;
    UINT16 NumberOfHeads;
    UINT32 NumberOfHiddenSectors;
    UINT32 TotalSectorCount32;
    UINT32 SectorsPerFAT32;
    UINT16 Flags;
    UINT16 FileSystemVersion;
    UINT32 RootDirectoryFirstCluster;
    UINT16 FileSystemInfoSector;
    UINT16 BackupBootSector;
    UINT8 Reserved[12];
    UINT8 DriveNumber;
    UINT8 Reserved1;
    UINT8 ExtendedBootSignature;
    UINT32 VolumeSerialNumber;
    UINT8 VolumeLabel[11];
    UINT8 FileSystemType[8];
    UINT8 BootCode[420];
    UINT16 Signature;
} FAT32_BOOT_SECTOR, *PFAT32_BOOT_SECTOR;

C_ASSERT(sizeof(FAT32_BOOT_SECTOR) == FAT_SECTOR_SIZE);

typedef struct _FAT_BOOT_SECTOR {
    union {
        FAT16_BOOT_SECTOR Fat16;
        FAT32_BOOT_SECTOR Fat32;
    } u1;
} FAT_BOOT_SECTOR, *PFAT_BOOT_SECTOR;

C_ASSERT(sizeof(FAT_BOOT_SECTOR) == FAT_SECTOR_SIZE);

#define FAT_DIRECTORY_ENTRY_FREE        0xE5
#define FAT_DIRECTORY_ENTRY_LAST        0x00

#define FAT_ATTRIBUTE_READ_ONLY         0x01
#define FAT_ATTRIBUTE_HIDDEN            0x02
#define FAT_ATTRIBUTE_SYSTEM            0x04
#define FAT_ATTRIBUTE_VOLUME_ID         0x08
#define FAT_ATTRIBUTE_DIRECTORY         0x10
#define FAT_ATTRIBUTE_ARCHIVE           0x20
#define FAT_ATTRIBUTE_LONG_NAME         (FAT_ATTRIBUTE_READ_ONLY | FAT_ATTRIBUTE_HIDDEN | FAT_ATTRIBUTE_SYSTEM | FAT_ATTRIBUTE_VOLUME_ID)
#define FAT_ATTRIBUTE_MASK              0x3F

#define FAT_LONG_NAME_TERMINATOR        0x40
#define FAT_LONG_NAME_ORDER_MASK        0x3F

typedef struct _FAT_DIRECTORY_ENTRY {
    union {
        struct {
            UINT8 Name[11];
            UINT8 Attribute;
            UINT8 ReservedForNT;
            UINT8 CreationTime[3];
            UINT8 CreationDate[2];
            UINT8 LastAccessDate[2];
            UINT16 FirstClusterHigh;
            UINT8 ModificationTime[2];
            UINT8 ModificationDate[2];
            UINT16 FirstClusterLow;
            UINT32 Size;
        } Short;
        struct {
            UINT8 Order;
            WCHAR NameW1_5[5];
            UINT8 Attribute;
            UINT8 Type;
            UINT8 Checksum;
            WCHAR NameW6_11[6];
            UINT16 Zero;
            WCHAR NameW12_13[2];
        } Long;
    } u1;
} FAT_DIRECTORY_ENTRY, *PFAT_DIRECTORY_ENTRY;

C_ASSERT(sizeof(FAT_DIRECTORY_ENTRY) == 32);

#define FAT_MAX_PATH                    255

typedef struct _FAT_NAME {
    UINT8 ShortName[13];
    UINT8 LongName[FAT_MAX_PATH + 1];
} FAT_NAME, *PFAT_NAME;

#pragma pack()


FAT_BOOT_SECTOR BlFatBootSector;
UINT32 BlFatBytesPerCluster;
UINT32 BlFatDataStart;
UINT8 BlFatDriveId;
INT13_DRIVE_PARAMETERS BlFatDriveParameters;
UINT32 BlFatLinkTerminator;
MBR BlFatMbr;
UINT32 BlFatNumberOfDataClusters;
UINT32 BlFatNumberOfRootDirectoryEntries;
UINT32 BlFatPartitionId;
UINT32 BlFatPartitionStart;
UINT32 BlFatPartitionSize;
PFAT_DIRECTORY_ENTRY BlFatRootDirectory;
UINT32 BlFatRootStart;
UINT32 BlFatSectorsPerCluster;
UINT32 BlFatTableStart;
FAT_SECTOR BlFatTemporaryBlock[64];
UINT16 BlFatTemporaryBlockCount = sizeof(BlFatTemporaryBlock) / sizeof(BlFatTemporaryBlock[0]);
UINT32 BlFatTotalSectorCount;

#define FAT_IS_DATA_CLUSTER(X)          (((X) >= FAT_FIRST_DATA_CLUSTER) && (((X) - FAT_FIRST_DATA_CLUSTER) < BlFatNumberOfDataClusters))
#define FAT_DATA_CLUSTER_TO_SECTOR(X)   (BlFatDataStart + (((X) - 2) * BlFatSectorsPerCluster))
#define FAT_IS_TERMINATOR(X)            (((UINT32) (X)) == BlFatLinkTerminator)
#define BlFatHalt()                     BlFatHaltInternal(__LINE__)

BOOLEAN
(*BlFatGetNextCluster)(
    UINT32 Cluster,
    PUINT32 NextCluster
    );

VOID
BlFatHaltInternal(
    UINT32 Line
    )

//++
//
//  Routine Description:
//
//    Prints an error message and halts.
//
//--

{
    BlRtlPrintf("FAT: Error reading disk image!\n");
    BlRtlHaltInternal(__FILE__, Line);
}

BOOLEAN
BlFatReadSector(
    UINT32 FirstSector,
    UINT32 NumberOfSectors,
    PFAT_SECTOR Buffer
    )

//++
//
//  Routine Description:
//
//    This function reads the specified range of sectors.
//
//  Arguments:
//
//    FirstSector     - Supplies the first sector to read.
//
//    NumberOfSectors - Supplies the number of sectors to read.
//
//    Buffer          - Receives data.
//
//  Return Value:
//
//    TRUE, if read operation was successful.
//    FALSE, otherwise.
//
//--

{
    UINT16 StepSize;

    BLASSERT_PTR(FirstSector < BlFatTotalSectorCount, FirstSector);

    BLASSERT(NumberOfSectors > 0);

    BLASSERT(FirstSector + NumberOfSectors > FirstSector);

    BLASSERT((FirstSector + NumberOfSectors) < BlFatTotalSectorCount);

    while (NumberOfSectors > 0) {

        if (NumberOfSectors < BlFatTemporaryBlockCount) {

            StepSize = (UINT16) NumberOfSectors;

        } else {

            StepSize = BlFatTemporaryBlockCount;
        }

        if (BlRtlReadDrive(BlFatDriveId,
                           BlFatPartitionStart + FirstSector,
                           StepSize,
                           BlFatTemporaryBlock) == FALSE) {

#if FAT_VERBOSE

            BlRtlPrintf("FAT: I/O error reading sector %u on drive 0x%02x!\n",
                        BlFatPartitionStart + FirstSector,
                        BlFatDriveId);

#endif

            return FALSE;
        }

        BlRtlCopyMemory(Buffer,
                        BlFatTemporaryBlock,
                        StepSize * FAT_SECTOR_SIZE);

        FirstSector += StepSize;
        NumberOfSectors -= StepSize;
        Buffer += StepSize;
    }

    return TRUE;
}

BOOLEAN
BlFatDirectoryEntryToName(
    PFAT_DIRECTORY_ENTRY ShortEntry,
    PFAT_NAME Name,
    PFAT_DIRECTORY_ENTRY TableStart
    )

//++
//
//  Routine Description:
//
//    This function extracts FAT short and long names from the specified directory entry.
//
//  Arguments:
//
//    ShortEntry  - Supplies a pointer to the short name entry.
//
//    Name        - Receives short and long names.
//
//    TableStart  - Supplies the start address for the directory table.
//
//  Return Value:
//
//    TRUE, if names were extracted successfully.
//    FALSE, otherwise.
//
//--

{
    UINT8 Character;
    PFAT_DIRECTORY_ENTRY Entry;
    UINT8 LongNameComponentIndex;
    UINT32 SourceIndex;
    UINT32 TargetIndex;

    if ((ShortEntry->u1.Short.Attribute & FAT_ATTRIBUTE_MASK) == FAT_ATTRIBUTE_LONG_NAME) {

        return FALSE;
    }

    //
    // Extract short name.
    //

    TargetIndex = 0;

    for (SourceIndex = 0; SourceIndex < 8; SourceIndex += 1) {

        Character = ShortEntry->u1.Short.Name[SourceIndex];

        if (Character == ' ') {

            if (SourceIndex == 0) {

                return FALSE;
            }

            break;
        }

        if (Character == '.') {

            return FALSE;
        }

        Name->ShortName[TargetIndex] = Character;
        TargetIndex += 1;
    }

    if (ShortEntry->u1.Short.Name[8] != ' ') {

        Name->ShortName[TargetIndex] = '.';
        TargetIndex += 1;

        for (SourceIndex = 8; SourceIndex < 11; SourceIndex += 1) {

            Character = ShortEntry->u1.Short.Name[SourceIndex];

            if (Character == ' ') {

                break;
            }

            if (Character == '.') {

                return FALSE;
            }

            Name->ShortName[TargetIndex] = Character;
            TargetIndex += 1;
        }
    }

    Name->ShortName[TargetIndex] = 0;

    //
    // If there is a long name, extract it by walking backwards from the short entry.
    // Otherwise, set long name to empty string.
    //

    Name->LongName[0] = 0;

    Entry = ShortEntry - 1;

    if (Entry < TableStart) {

        return TRUE;
    }

    if ((Entry->u1.Short.Attribute & FAT_ATTRIBUTE_MASK) != FAT_ATTRIBUTE_LONG_NAME) {

        return TRUE;
    }

    LongNameComponentIndex = 1;
    TargetIndex = 0;

    for (;;) {

        if (TargetIndex == FAT_MAX_PATH) {

            return FALSE;
        }

        if (Entry < TableStart) {

            return FALSE;
        }

        if ((Entry->u1.Long.Order & FAT_LONG_NAME_ORDER_MASK) != LongNameComponentIndex) {

            return FALSE;
        }

#define ADD_CHARACTER(C)                                \
                                                        \
        if (TargetIndex == FAT_MAX_PATH) {              \
                                                        \
            return FALSE;                               \
        }                                               \
                                                        \
        if (((C) != 0) && ((C) != 0xFFFF)) {            \
                                                        \
            Name->LongName[TargetIndex] = (UINT8) (C);  \
            TargetIndex += 1;                           \
        }

        ADD_CHARACTER(Entry->u1.Long.NameW1_5[0]);
        ADD_CHARACTER(Entry->u1.Long.NameW1_5[1]);
        ADD_CHARACTER(Entry->u1.Long.NameW1_5[2]);
        ADD_CHARACTER(Entry->u1.Long.NameW1_5[3]);
        ADD_CHARACTER(Entry->u1.Long.NameW1_5[4]);
        ADD_CHARACTER(Entry->u1.Long.NameW6_11[0]);
        ADD_CHARACTER(Entry->u1.Long.NameW6_11[1]);
        ADD_CHARACTER(Entry->u1.Long.NameW6_11[2]);
        ADD_CHARACTER(Entry->u1.Long.NameW6_11[3]);
        ADD_CHARACTER(Entry->u1.Long.NameW6_11[4]);
        ADD_CHARACTER(Entry->u1.Long.NameW6_11[5]);
        ADD_CHARACTER(Entry->u1.Long.NameW12_13[0]);
        ADD_CHARACTER(Entry->u1.Long.NameW12_13[1]);

#undef ADD_CHARACTER

        if ((Entry->u1.Long.Order & FAT_LONG_NAME_TERMINATOR)) {

            break;
        }

        Entry -= 1;
        LongNameComponentIndex += 1;
    }

    Name->LongName[TargetIndex] = 0;

    return TRUE;
}

PFAT_DIRECTORY_ENTRY
BlFatFindDirectoryTableEntry(
    PFAT_DIRECTORY_ENTRY Table,
    UINT32 NumberOfEntries,
    PCSTR Name
    )

//++
//
//  Routine Description:
//
//    This function finds the directory table entry matching the specified name.
//
//  Arguments:
//
//    Table           - Supplies a pointer to the table to find in.
//
//    NumberOfEntries - Supplies the number of entries in the table.
//
//    Name            - Supplies the name to look for.
//
//  Return Value:
//
//    TRUE, if a matching entry was located.
//    FALSE, otherwise.
//
//--

{
    PFAT_DIRECTORY_ENTRY Entry;
    FAT_NAME EntryName;
    PFAT_DIRECTORY_ENTRY Limit;

    BLASSERT(Name[0] != 0);

    Limit = Table + NumberOfEntries;

    for (Entry = Table; Entry != Limit; Entry += 1) {

        if (Entry->u1.Short.Name[0] == FAT_DIRECTORY_ENTRY_FREE) {

            continue;
        }

        if (Entry->u1.Short.Name[0] == FAT_DIRECTORY_ENTRY_LAST) {

            break;
        }

        if (Entry->u1.Short.Name[0] == '.') {

            continue;
        }

        if ((Entry->u1.Short.Attribute & FAT_ATTRIBUTE_MASK) == FAT_ATTRIBUTE_VOLUME_ID) {

            continue;
        }

        if (BlFatDirectoryEntryToName(Entry,
                                      &EntryName,
                                      Table) != FALSE) {

            if ((BlRtlEqualStringI(Name, (PCSTR) EntryName.ShortName) != FALSE) ||
                (BlRtlEqualStringI(Name, (PCSTR) EntryName.LongName) != FALSE)) {

                return Entry;
            }
        }
    }

    return NULL;
}

BOOLEAN
BlFatGetLengthClusterChain(
    UINT32 Cluster,
    PUINT32 Length
    )

//++
//
//  Routine Description:
//
//    This function queries the length of the specified cluster chain.
//
//  Arguments:
//
//    Cluster     - Supplies the index of the first cluster in the chain.
//
//    Length      - Receives the length of the chain.
//
//  Return Value:
//
//    TRUE, if query operation was successful.
//    FALSE, otherwise.
//
//--

{
    *Length = 0;

    do {

        if (FAT_IS_DATA_CLUSTER(Cluster) == FALSE) {

            return FALSE;
        }

        if (BlFatGetNextCluster(Cluster, &Cluster) == FALSE) {

            return FALSE;
        }

        *Length += 1;

    } while (Cluster != BlFatLinkTerminator);

    return TRUE;
}

BOOLEAN
BlFatReadClusterChain(
    UINT32 Cluster,
    UINT32 BytesToRead,
    PVOID Buffer
    )

//++
//
//  Routine Description:
//
//    This function reads from the specified FAT data cluster chain.
//
//  Arguments:
//
//    Cluster     - Supplies the index of the first cluster in the chain.
//
//    BytesToRead - Supplies number of bytes to read.
//
//    Buffer      - Receives data.
//
//  Return Value:
//
//    TRUE, if read operation was successful.
//    FALSE, otherwise.
//
//--

{
    PVOID ClusterData;
    PUINT8 Next;
    UINT32 Sector;

    BLASSERT_PTR(FAT_IS_DATA_CLUSTER(Cluster) != FALSE, Cluster);

    BLASSERT(BytesToRead > 0);

    Next = (PUINT8) Buffer;

    for (;;) {

        //
        // If the cluster number is not within the valid data range, then fail the read operation.
        //

        if (FAT_IS_DATA_CLUSTER(Cluster) == FALSE) {

#if FAT_VERBOSE

            BlRtlPrintf("FAT: ReadClusterChain: Cluster %u is out of range!\n", Cluster);

#endif

            return FALSE;
        }

        //
        // Calculate the first sector in the cluster.
        //

        Sector = FAT_DATA_CLUSTER_TO_SECTOR(Cluster);

        //
        // If remaining bytes to read is less than the cluster size, then read it using a
        // temporary buffer, since the caller provided buffer is not necessarily a multiple
        // of cluster size.
        //

        if (BytesToRead < BlFatBytesPerCluster) {

            ClusterData = BlPoolAllocateBlock(BlFatBytesPerCluster);

            if (BlFatReadSector(Sector,
                                ROUND_UP_TO_POWER2(BytesToRead, FAT_SECTOR_SIZE) / FAT_SECTOR_SIZE,
                                (PFAT_SECTOR) ClusterData) == FALSE) {

                BlPoolFreeBlock(ClusterData);

                return FALSE;
            }

            BlRtlCopyMemory(Next,
                            ClusterData,
                            BytesToRead);

            BlPoolFreeBlock(ClusterData);

            return TRUE;
        }

        //
        // Otherwise, read the entire cluster and advance by full cluster size.
        //

        if (BlFatReadSector(Sector,
                            BlFatSectorsPerCluster,
                            (PFAT_SECTOR) Next) == FALSE) {

            return FALSE;
        }

        BytesToRead -= BlFatBytesPerCluster;
        Next += BlFatBytesPerCluster;

        if (BytesToRead == 0) {

            return TRUE;
        }

        //
        // Get the next cluster index.
        //

        if (BlFatGetNextCluster(Cluster, &Cluster) == FALSE) {

            return FALSE;
        }
    }
}

BOOLEAN
BlFatFindFileEntry(
    PCSTR Path,
    PFAT_DIRECTORY_ENTRY FileEntry
    )

//++
//
//  Routine Description:
//
//    This function finds the entry matching the specified file path.
//
//  Arguments:
//
//    Path        - Supplies a pointer to the path to look up.
//
//    FileEntry   - Receives the contents of the entry matching the specified path.
//
//  Return Value:
//
//    TRUE, if a match was found.
//    FALSE, otherwise.
//
//--

{
    UINT32 DirectoryCluster;
    UINT32 DirectoryClusterCount;
    UINT32 Depth;
    FAT_DIRECTORY_ENTRY Entry;
    PFAT_DIRECTORY_ENTRY Match;
    PCSTR Next;
    PFAT_DIRECTORY_ENTRY Table;
    UINT32 TableSize;
    UINT8 Token[FAT_MAX_PATH];
    UINT32 TokenIndex;

    if ((Path[0] == 0) ||
        (Path[0] == '/') ||
        (BlRtlStringLength(Path) >= FAT_MAX_PATH)) {

        return FALSE;
    }

    Next = Path;
    Depth = 0;

    SATISFY_OVERZEALOUS_COMPILER(BlRtlZeroMemory(&Entry, sizeof(Entry)));

    for (;;) {

        if (*Next == 0) {

            if ((Entry.u1.Short.Attribute & FAT_ATTRIBUTE_DIRECTORY) != 0) {

#if FAT_VERBOSE

                BlRtlPrintf("FAT: FindFileEntry: %s is a directory!\n", Path);

#endif

                return FALSE;
            }

            *FileEntry = Entry;

            return TRUE;
        }

        //
        // If the next token is empty (i.e. back to back separators), then this is a malformed path.
        //

        if (*Next == '/') {

#if FAT_VERBOSE

            BlRtlPrintf("FAT: FindFileEntry: %s is a malformed path!\n", Path);

#endif

            return FALSE;
        }

        //
        // Extract the next token.
        //

        TokenIndex = 0;

        for (;;) {

            if (*Next == 0) {

                break;
            }

            if (*Next == '/') {

                Next += 1;

                break;
            }

            Token[TokenIndex] = *Next;
            TokenIndex += 1;
            Next += 1;
        }

        BLASSERT(TokenIndex > 0);

        Token[TokenIndex] = 0;

        if (Depth == 0) {

            Table = BlFatRootDirectory;
            TableSize = BlFatNumberOfRootDirectoryEntries;

        } else {

            DirectoryCluster = Entry.u1.Short.FirstClusterLow;

            if (BlFatGetLengthClusterChain(DirectoryCluster, &DirectoryClusterCount) == FALSE) {

                return FALSE;
            }

            Table = (PFAT_DIRECTORY_ENTRY)
                BlPoolAllocateBlock(DirectoryClusterCount * BlFatBytesPerCluster);

            if (BlFatReadClusterChain(DirectoryCluster,
                                      DirectoryClusterCount * BlFatBytesPerCluster,
                                      Table) == FALSE) {

                BlPoolFreeBlock(Table);

                return FALSE;
            }

            TableSize = (DirectoryClusterCount * BlFatBytesPerCluster) / sizeof(FAT_DIRECTORY_ENTRY);
        }

        //
        // Walk the directory table matching the previous token for an entry matching the next token.
        //

        Match = BlFatFindDirectoryTableEntry(Table,
                                             TableSize,
                                             (PCSTR) Token);

        if (Match == NULL) {

#if FAT_VERBOSE

            BlRtlPrintf("FAT: FindFileEntry: Unable to find directory entry for token %s.\n", Token);

#endif

            if (Table != BlFatRootDirectory) {

                BlPoolFreeBlock(Table);
            }

            return FALSE;
        }

        Entry = *Match;

        if (Table != BlFatRootDirectory) {

            BlPoolFreeBlock(Table);
        }

        Depth += 1;
    }
}

BOOLEAN
BlFatGetFileSize(
    PCSTR Path,
    PUINT32 FileSize
    )

//++
//
//  Routine Description:
//
//    This function queries the size of the specified file.
//
//  Arguments:
//
//    Path        - Supplies the path to the file to query.
//
//    FileSize    - Receives the size of the file.
//
//  Return Value:
//
//    TRUE, if the query operation was successful.
//    FALSE, otherwise.
//
//--

{
    FAT_DIRECTORY_ENTRY Entry;

    if (BlFatFindFileEntry(Path, &Entry) == FALSE) {

        return FALSE;
    }

    *FileSize = Entry.u1.Short.Size;

    return TRUE;
}

BOOLEAN
BlFatReadFile(
    PCSTR Path,
    PVOID Buffer,
    UINT32 NumberOfBytes
    )

//++
//
//  Routine Description:
//
//    This function reads from the specified file.
//
//  Arguments:
//
//    Path            - Supplies the path to the file to read.
//
//    Buffer          - Receives data.
//
//    NumberOfBytes   - Supplies the number of bytes to read.
//
//  Return Value:
//
//    TRUE, if the read operation was successful.
//    FALSE, otherwise.
//
//--

{
    FAT_DIRECTORY_ENTRY Entry;
    BOOLEAN Result;

    if (BlFatFindFileEntry(Path, &Entry) == FALSE) {

        return FALSE;
    }

    if (NumberOfBytes > Entry.u1.Short.Size) {

        return FALSE;
    }

    Result = BlFatReadClusterChain(Entry.u1.Short.FirstClusterLow,
                                   NumberOfBytes,
                                   Buffer);

    return Result;
}

BOOLEAN
BlFat16GetNextCluster(
    UINT32 Cluster,
    PUINT32 NextCluster
    )

//++
//
//  Routine Description:
//
//    This function gets the index of the cluster following the specified cluster.
//
//  Arguments:
//
//    Cluster     - Supplies the index of the cluster.
//
//    NextCluster - Receives the index of the next cluster.
//
//  Return Value:
//
//    TRUE, if query operation was successful.
//    FALSE, otherwise.
//
//--

{
    UINT32 Offset;
    UINT32 Sector;
    FAT_SECTOR TablePage;

    if (FAT_IS_DATA_CLUSTER(Cluster) == FALSE) {

#if FAT_VERBOSE

        BlRtlPrintf("FAT: Fat16GetNextCluster: Cluster %u is out of range!\n", Cluster);

#endif

        return FALSE;
    }

    Sector = BlFatTableStart + (Cluster / 256);
    Offset = Cluster % 256;

    if (BlFatReadSector(Sector, 1, &TablePage) == FALSE) {

        return FALSE;
    }

    *NextCluster = (UINT32) (((PUINT16) &TablePage)[Offset]);

    return TRUE;
}

VOID
BlFat16Initialize(
    VOID
    )

//++
//
//  Routine Description:
//
//    This function initializes FAT16 support.
//
//--

{
    PFAT16_BOOT_SECTOR BootSector;

    BootSector = &BlFatBootSector.u1.Fat16;

    BLASSERT(BlFatMbr.Partition[BlFatPartitionId].Type == MBR_FAT16LBA);

    //
    // Read FAT16 boot sector.
    //

    if (BlRtlReadDrive(BlFatDriveId,
                       BlFatPartitionStart,
                       1,
                       BootSector) == FALSE) {

#if FAT_VERBOSE
        BlRtlPrintf("FAT: Error reading boot sector!\n");
#endif
        BlFatHalt();
    }

    //
    // Extract volume geometry.
    //

    if (BootSector->BytesPerSector != FAT_SECTOR_SIZE) {

#if FAT_VERBOSE
        BlRtlPrintf("FAT: Unsupported sector size (%u)!\n", BootSector->BytesPerSector);
#endif
        BlFatHalt();
    }

    BlFatSectorsPerCluster = BootSector->SectorsPerCluster;

    if (BlFatSectorsPerCluster == 0) {

#if FAT_VERBOSE
        BlRtlPrintf("FAT: SectorsPerCluster == 0!\n");
#endif
        BlFatHalt();
    }

    BlFatBytesPerCluster = BlFatSectorsPerCluster * FAT_SECTOR_SIZE;

    if (BootSector->TotalSectorCount32 > 0) {

        BlFatTotalSectorCount = BootSector->TotalSectorCount32;

    } else {

        BlFatTotalSectorCount = BootSector->TotalSectorCount16;
    }

    if (BlFatTotalSectorCount > BlFatPartitionSize) {

#if FAT_VERBOSE
        BlRtlPrintf("FAT: Boot sector claims more sectors than MBR!\n");
#endif
        BlFatHalt();
    }

    if (BootSector->NumberOfFATs == 0) {

#if FAT_VERBOSE
        BlRtlPrintf("FAT: NumberOfFATs == 0!\n");
#endif
        BlFatHalt();
    }

    if (BootSector->SectorsPerFAT == 0) {

#if FAT_VERBOSE
        BlRtlPrintf("FAT: SectorsPerFAT == 0!\n");
#endif
        BlFatHalt();
    }

    BlFatNumberOfRootDirectoryEntries = BootSector->NumberOfRootDirectoryEntries;

    if ((BlFatNumberOfRootDirectoryEntries == 0) ||
        ((BlFatNumberOfRootDirectoryEntries % 64) != 0)) {

#if FAT_VERBOSE
        BlRtlPrintf("FAT: Invalid number of root directory entries (%u)!\n", BlFatNumberOfRootDirectoryEntries);
#endif
        BlFatHalt();
    }

    BlFatTableStart = BootSector->NumberOfReservedSectors;

    if (BlFatTotalSectorCount < BlFatTableStart) {

#if FAT_VERBOSE
        BlRtlPrintf("FAT: TotalSectorCount < TableStart!\n");
#endif
        BlFatHalt();
    }

    BlFatRootStart = BlFatTableStart + (BootSector->NumberOfFATs * BootSector->SectorsPerFAT);

    if (BlFatTotalSectorCount < BlFatRootStart) {

#if FAT_VERBOSE
        BlRtlPrintf("FAT: TotalSectorCount < RootStart!\n");
#endif
        BlFatHalt();
    }

    BlFatDataStart = BlFatRootStart + (ROUND_UP_TO_POWER2(BlFatNumberOfRootDirectoryEntries * sizeof(FAT_DIRECTORY_ENTRY), FAT_SECTOR_SIZE) / FAT_SECTOR_SIZE);

    if (BlFatTotalSectorCount < BlFatDataStart) {

#if FAT_VERBOSE
        BlRtlPrintf("FAT: TotalSectorCount < DataStart!\n");
#endif
        BlFatHalt();
    }

    BlFatNumberOfDataClusters = (BlFatTotalSectorCount - BlFatDataStart) / BlFatSectorsPerCluster;

    if (BlFatNumberOfDataClusters == 0) {

#if FAT_VERBOSE
        BlRtlPrintf("FAT: NumberOfDataClusters == 0!\n");
#endif
        BlFatHalt();
    }

    BlFatLinkTerminator = FAT16_LINK_TERMINATOR;
    BlFatGetNextCluster = BlFat16GetNextCluster;

    //
    // Read root directory.
    //

    BlFatRootDirectory = (PFAT_DIRECTORY_ENTRY) BlPoolAllocateBlock((BlFatDataStart - BlFatRootStart) * FAT_SECTOR_SIZE);

    if (BlFatReadSector(BlFatRootStart,
                        BlFatDataStart - BlFatRootStart,
                        (PFAT_SECTOR) BlFatRootDirectory) == FALSE) {

#if FAT_VERBOSE
        BlRtlPrintf("FAT: Error reading root directory!\n");
#endif
        BlFatHalt();
    }

    BLASSERT(FAT_IS_DATA_CLUSTER(FAT16_LINK_TERMINATOR) == FALSE);

    return;
}

BOOLEAN
BlFat32GetNextCluster(
    UINT32 Cluster,
    PUINT32 NextCluster
    )

//++
//
//  Routine Description:
//
//    This function gets the index of the cluster following the specified cluster.
//
//  Arguments:
//
//    Cluster     - Supplies the index of the cluster.
//
//    NextCluster - Receives the index of the next cluster.
//
//  Return Value:
//
//    TRUE, if query operation was successful.
//    FALSE, otherwise.
//
//--

{
    UINT32 Offset;
    UINT32 Sector;
    FAT_SECTOR TablePage;

    if (FAT_IS_DATA_CLUSTER(Cluster) == FALSE) {

#if FAT_VERBOSE

        BlRtlPrintf("FAT: Fat32GetNextCluster: Cluster %u is out of range!\n", Cluster);

#endif

        return FALSE;
    }

    Sector = BlFatTableStart + (Cluster / 128);
    Offset = Cluster % 128;

    if (BlFatReadSector(Sector, 1, &TablePage) == FALSE) {

        return FALSE;
    }

    *NextCluster = ((PUINT32) &TablePage)[Offset];

    return TRUE;
}

VOID
BlFat32Initialize(
    VOID
    )

//++
//
//  Routine Description:
//
//    This function initializes FAT32 support.
//
//--

{
    PFAT32_BOOT_SECTOR BootSector;
    UINT32 RootDirectoryChainLength;

    BootSector = &BlFatBootSector.u1.Fat32;

    BLASSERT(BlFatMbr.Partition[BlFatPartitionId].Type == MBR_FAT32LBA);

    //
    // Read FAT32 boot sector.
    //

    if (BlRtlReadDrive(BlFatDriveId,
                       BlFatPartitionStart,
                       1,
                       BootSector) == FALSE) {

#if FAT_VERBOSE
        BlRtlPrintf("FAT: Error reading boot sector!\n");
#endif
        BlFatHalt();
    }

    //
    // Extract volume geometry.
    //

    if (BootSector->BytesPerSector != FAT_SECTOR_SIZE) {

#if FAT_VERBOSE
        BlRtlPrintf("FAT: Unsupported sector size (%u)!\n", BootSector->BytesPerSector);
#endif
        BlFatHalt();
    }

    BlFatSectorsPerCluster = BootSector->SectorsPerCluster;

    if (BlFatSectorsPerCluster == 0) {

#if FAT_VERBOSE
        BlRtlPrintf("FAT: SectorsPerCluster == 0!\n");
#endif
        BlFatHalt();
    }

    BlFatBytesPerCluster = BlFatSectorsPerCluster * FAT_SECTOR_SIZE;

    if (BootSector->TotalSectorCount32 > 0) {

        BlFatTotalSectorCount = BootSector->TotalSectorCount32;

    } else {

        BlFatTotalSectorCount = BootSector->TotalSectorCount16;
    }

    if (BlFatTotalSectorCount > BlFatPartitionSize) {

#if FAT_VERBOSE
        BlRtlPrintf("FAT: Boot sector claims more sectors than MBR!\n");
#endif
        BlFatHalt();
    }

    if (BootSector->NumberOfFATs == 0) {

#if FAT_VERBOSE
        BlRtlPrintf("FAT: NumberOfFATs == 0!\n");
#endif
        BlFatHalt();
    }

    if (BootSector->SectorsPerFAT32 == 0) {

#if FAT_VERBOSE
        BlRtlPrintf("FAT: SectorsPerFAT == 0!\n");
#endif
        BlFatHalt();
    }

    if (BootSector->NumberOfRootDirectoryEntries != 0) {

#if FAT_VERBOSE
        BlRtlPrintf("FAT: BootSector->NumberOfRootDirectoryEntries != 0!\n");
#endif
        BlFatHalt();
    }

    BlFatTableStart = BootSector->NumberOfReservedSectors;

    if (BlFatTotalSectorCount < BlFatTableStart) {

#if FAT_VERBOSE
        BlRtlPrintf("FAT: TotalSectorCount < TableStart!\n");
#endif
        BlFatHalt();
    }

    BlFatDataStart = BlFatTableStart + (BootSector->NumberOfFATs * BootSector->SectorsPerFAT32);

    if (BlFatTotalSectorCount < BlFatDataStart) {

#if FAT_VERBOSE
        BlRtlPrintf("FAT: TotalSectorCount < DataStart!\n");
#endif
        BlFatHalt();
    }

    BlFatNumberOfDataClusters = (BlFatTotalSectorCount - BlFatDataStart) / BlFatSectorsPerCluster;

    if (BlFatNumberOfDataClusters == 0) {

#if FAT_VERBOSE
        BlRtlPrintf("FAT: NumberOfDataClusters == 0!\n");
#endif
        BlFatHalt();
    }

    BlFatLinkTerminator = FAT32_LINK_TERMINATOR;
    BlFatGetNextCluster = BlFat32GetNextCluster;

    //
    // Read root directory.
    //

    if (BlFatGetLengthClusterChain(BootSector->RootDirectoryFirstCluster, &RootDirectoryChainLength) == FALSE) {

#if FAT_VERBOSE
        BlRtlPrintf("FAT: Error querying chain length of root directory!\n");
#endif
        BlFatHalt();
    }

    BlFatRootDirectory = (PFAT_DIRECTORY_ENTRY) BlPoolAllocateBlock(RootDirectoryChainLength * BlFatBytesPerCluster);

    if (BlFatReadClusterChain(BootSector->RootDirectoryFirstCluster,
                              RootDirectoryChainLength * BlFatBytesPerCluster,
                              BlFatRootDirectory) == FALSE) {

#if FAT_VERBOSE
        BlRtlPrintf("FAT: Error reading root directory!\n");
#endif
        BlFatHalt();
    }

    BlFatNumberOfRootDirectoryEntries = (RootDirectoryChainLength * BlFatBytesPerCluster) / sizeof(FAT_DIRECTORY_ENTRY);


    BLASSERT(FAT_IS_DATA_CLUSTER(FAT32_LINK_TERMINATOR) == FALSE);

    return;
}

VOID
BlFatInitialize(
    UINT8 DriveId,
    UINT8 FatType
    )

//++
//
//  Routine Description:
//
//    This function initializes FAT support.
//
//  Arguments:
//
//    DriveId     - Supplies boot drive ID.
//
//    FatType     - Supplies the FAT type to look for.
//
//--

{
    UINT32 Index;

    BLASSERT((FatType == MBR_FAT16LBA) || (FatType == MBR_FAT32LBA));

    if (BlRtlGetDriveParameters(DriveId, &BlFatDriveParameters) == FALSE) {

        BlRtlPrintf("FAT: Can't get drive info 0x%02x!\n", DriveId);
        BlRtlHalt();
    }

    if (BlFatDriveParameters.BytesPerSector != FAT_SECTOR_SIZE) {

        BlRtlPrintf("FAT: Unexpected bytes per sector (%u)!\n", BlFatDriveParameters.BytesPerSector);
        BlRtlHalt();
    }

    if (BlRtlReadDrive(DriveId, 0, 1, &BlFatMbr) == FALSE) {

        BlRtlPrintf("FAT: Error reading MBR!\n");
        BlRtlHalt();
    }

    if (BlFatMbr.Signature != MBR_SIGNATURE) {

        BlRtlPrintf("FAT: No MBR signature!\n");
    }

    BlFatPartitionId = (UINT32) -1;

    for (Index = 0; Index <= 4; Index += 1) {

        if (FatType == BlFatMbr.Partition[Index].Type) {

            switch (BlFatMbr.Partition[Index].Type) {

                case MBR_FAT16LBA: {

                    BlFatDriveId = DriveId;
                    BlFatPartitionId = Index;
                    BlFatPartitionStart = BlFatMbr.Partition[Index].FirstSector;
                    BlFatPartitionSize = BlFatMbr.Partition[Index].NumberOfSectors;

                    BlFat16Initialize();

                    break;
                }

                case MBR_FAT32LBA: {

                    BlFatDriveId = DriveId;
                    BlFatPartitionId = Index;
                    BlFatPartitionStart = BlFatMbr.Partition[Index].FirstSector;
                    BlFatPartitionSize = BlFatMbr.Partition[Index].NumberOfSectors;

                    BlFat32Initialize();

                    break;
                }
            }
        }
    }

    if (BlFatPartitionId == (UINT32) -1) {

        BlRtlPrintf("FAT: No %s partitions!\n", FatType == MBR_FAT16LBA ? "FAT16" : "FAT32");

        BlRtlHalt();
    }

    BlFsGetFileSize = BlFatGetFileSize;
    BlFsReadFile = BlFatReadFile;

    return;
}


================================================
FILE: ironclad-apps/src/Checked/BootLoader/SingLdrPc/blflash.cpp
================================================
//++
//
//  Copyright (c) Microsoft Corporation
//
//  Module Name:
//
//    blflash.cpp
//
//  Abstract:
//
//    This module implements flash support for the boot loader.
//
//--

#include "bl.h"

struct FLASH_HEADER
{
    UINT8   Label[18];
    UINT8   HeadSize;
    UINT8   SpecSize;
    UINT32  PageSize;
    UINT32  MajorVersion;
    UINT32  MinorVersion;
};

struct FLASH_FILE
{
    UINT32  PathOffset;
    UINT32  DataOffset;
    UINT32  Size;
};

static PUINT8       BlFlashBase = NULL;
static FLASH_FILE * BlFlashImages = NULL;

FLASH_FILE *
BlFlashRecordIsValid(
    FLASH_FILE *Current
    )

//++
//
//  Routine Description:
//
//    Find the next valid flash file record.
//
//  Return Value:
//
//    Pointer to the next valid flash file record, if the query operation was successful.
//    NULL, if there are no remaining valid record.
//
//--

{
    for (;; Current++) {
        if ((Current->DataOffset == 0xffffffff && Current->Size == 0xffffffff) ||
            (Current->DataOffset == 0 && Current->Size == 0)) {
            continue;
        }
        else if (Current->DataOffset == 0xffffffff && Current->Size == 0) {
            return NULL;
        }
        return Current;
    }
}

FLASH_FILE *
BlFlashFindFile(
    PCSTR Path
    )

//++
//
//  Routine Description:
//
//    Find the flash file record matching this path name.
//
//  Arguments:
//
//    Path        - Supplies the path to the file to query.
//
//  Return Value:
//
//    Pointer to the flash file record, if the query operation was successful.
//    NULL, otherwise.
//
//--

{
    for (FLASH_FILE *File = BlFlashImages; File != NULL; File = BlFlashRecordIsValid(File + 1)) {
        if (BlRtlEqualStringI(Path, (PCSTR)(BlFlashBase + File->PathOffset))) {
            return File;
        }
    }
    return NULL;
}


BOOLEAN
BlFlashGetFileSize(
    PCSTR Path,
    PUINT32 FileSize
    )

//++
//
//  Routine Description:
//
//    This function queries the size of the specified file.
//
//  Arguments:
//
//    Path        - Supplies the path to the file to query.
//
//    FileSize    - Receives the size of the file.
//
//  Return Value:
//
//    TRUE, if the query operation was successful.
//    FALSE, otherwise.
//
//--

{
    FLASH_FILE * File = BlFlashFindFile(Path);

    if (File != NULL) {

        *FileSize = File->Size;

        return TRUE;

    }

    return FALSE;
}

//++
//
//  Routine Description:
//
//    This function reads from the specified file.
//
//  Arguments:
//
//    Path            - Supplies the path to the file to read.
//
//    Buffer          - Receives data.
//
//    NumberOfBytes   - Supplies the number of bytes to read.
//
//  Return Value:
//
//    TRUE, if the read operation was successful.
//    FALSE, otherwise.
//
//--

BOOLEAN
BlFlashReadFile(
    PCSTR Path,
    PVOID Buffer,
    UINT32 NumberOfBytes
    )
{
    (void)Path;
    (void)NumberOfBytes;
    (void)Buffer;

    FLASH_FILE * File = BlFlashFindFile(Path);

    if (File != NULL) {

        BlRtlCopyMemory(Buffer, BlFlashBase + File->DataOffset, NumberOfBytes);

        return TRUE;
    }

    return FALSE;
}

VOID
BlFlashInitialize(
    PVOID SearchBegin,
    PVOID SearchLimit
    )
{
    // walk through at 64KB boundaries looking for flash image.
    for (FLASH_HEADER * Search = (FLASH_HEADER *)SearchBegin;
         Search <= (FLASH_HEADER *)SearchLimit;
         Search = (FLASH_HEADER *)(((PUINT8)Search) + 0x10000)) {

        if (!BlRtlEqualStringI((PCSTR)Search->Label, "SingularityFlash!")) {
            continue;
        }
        if (Search->HeadSize != sizeof(FLASH_HEADER)) {
            continue;
        }
        if (Search->SpecSize != sizeof(FLASH_FILE)) {
            continue;
        }
        if (Search->MajorVersion != ~0u || Search->MinorVersion != ~0u) {
            BlRtlPrintf("--- Version %x.%x didn't match\n",
                        Search->MajorVersion, Search->MinorVersion);
            continue;
        }
        if (Search->PageSize != 0x1000) {
            continue;
        }

        BlFlashBase = (PUINT8)Search;
        BlFlashImages = BlFlashRecordIsValid((FLASH_FILE *)(Search + 1));
        break;
    }

    BlFsGetFileSize = BlFlashGetFileSize;
    BlFsReadFile = BlFlashReadFile;
}


================================================
FILE: ironclad-apps/src/Checked/BootLoader/SingLdrPc/blkd.cpp
================================================
//++
//
//  Copyright (c) Microsoft Corporation
//
//  Module Name:
//
//    blkd.cpp
//
//  Abstract:
//
//    This module implements KD support for the boot loader.
//
//--

#include "bl.h"

UINT32 BlKdNextPacketId;

VOID
BlKdSpin(
    VOID
    )

//++
//
//  Routine Description:
//
//    Provide user feedback that we are waiting on the kernel debugger.
//
//--

{
    static UINT8 state = 0;

    //
    // Write the spinner character to the top left corner of the screen.
    //

    *((UINT16 *)(ULONG_PTR)0xb809e) = 0x2f00 + ("+-|*" [state++ & 0x3]);
}

UINT32
BlKdComputeChecksum(
    PCVOID Buffer,
    UINT32 Length
    )

//++
//
//  Routine Description:
//
//    This function computes the checksum of a KD buffer.
//
//  Arguments:
//
//    Buffer  - Supplies a pointer to the buffer.
//
//    Length  - Supplies the length of the buffer.
//
//  Return Value:
//
//    Checksum value for the specified buffer.
//
//--

{
    UINT32 Checksum;
    UINT32 Index;

    Checksum = 0;

    for (Index = 0; Index < Length; Index += 1) {

        Checksum += ((PCHAR)Buffer)[Index];
    }

    return Checksum;
}

BOOLEAN
BlKdPrintString(
    PCSTR String
    )

//++
//
//  Routine Description:
//
//    This function prints the specified string to the KD.
//
//  Arguments:
//
//    String  - Supplies a pointer to the string to print.
//
//  Return Value:
//
//    TRUE, if operation was successful.
//    FALSE, otherwise.
//
//--

{
    KD_DEBUG_IO Packet;
    UINT32 StringLength;

    StringLength = BlRtlStringLength(String);

    if (StringLength >= 0xFFFF) {

        return FALSE;
    }

    BlRtlZeroMemory(&Packet, sizeof(Packet));

    Packet.ApiNumber = KD_API_PRINT_STRING;
    Packet.u1.PrintString.LengthOfString = StringLength;

    if (BlKdComPort != 0) {

        return BlKdComSendPacket(KD_PACKET_TYPE_KD_DEBUG_IO,
                                 &Packet,
                                 sizeof(Packet),
                                 String,
                                 (UINT16) StringLength + 1);

    }
    else if (BlPciOhci1394BaseAddress != 0) {

        return BlKd1394SendPacket(KD_PACKET_TYPE_KD_DEBUG_IO,
                                  &Packet,
                                  sizeof(Packet),
                                  String,
                                  (UINT16) StringLength + 1);

    }

    return FALSE;
}

BOOLEAN
BlKdPrintf(
    PCSTR Format,
    ...
    )

//++
//
//  Routine Description:
//
//    This function prints out a string to KD.
//
//  Arguments:
//
//    Format          - Supplies the format string.
//
//    ...             - Supplies the input parameters.
//
//  Return Value:
//
//    TRUE, if operation was successful.
//    FALSE, otherwise.
//
//--

{
    va_list ArgumentList;
    CHAR Buffer[4096];

    va_start(ArgumentList, Format);

    if (BlRtlFormatString(Buffer,
                          sizeof(Buffer),
                          Format,
                          ArgumentList) == FALSE) {

        return FALSE;
    }

    BlKdPrintString(Buffer);

    return TRUE;
}

VOID
BlKdInitialize(
    VOID
    )

//++
//
//  Routine Description:
//
//    This function initializes KD support for the boot loader.
//
//--

{
    //
    // Try serial first.
    //

    if (BlKdComConnect() != FALSE) {

#if KD_VERBOSE

        BlVideoPrintf("KD: Connected to COM%u\n", BlKdComPort);

#endif

        return;
    }

    //
    // Try the 1394 transport next.
    //

    if (BlKd1394Connect() != FALSE) {

#if KD_VERBOSE

        BlVideoPrintf("KD: Connected to 1394:%u\n", 0);

#endif

        return;
    }

    return;
}


================================================
FILE: ironclad-apps/src/Checked/BootLoader/SingLdrPc/blkd1394.cpp
================================================
//++
//
//  Copyright (c) Microsoft Corporation
//
//  Module Name:
//
//    blkd1394.cpp
//
//  Abstract:
//
//    This module implements the 1394 transport for KD.
//
//--

#include "bl.h"
#include "blkd1394.h"

#if defined(BOOT_X64)

BOOLEAN
BlKd1394InitHardware(
    UINT16 Channel,
    PVOID IoRegion
    )
{
    return FALSE;
}

BOOLEAN
BlKd1394Connect(
    VOID
    )
{
    return FALSE;
}

BOOLEAN
BlKd1394SendPacket(
    UINT16 PacketType,
    PCVOID Header,
    UINT16 HeaderSize,
    PCVOID Data,
    UINT16 DataSize)
{
    return FALSE;
}

#else // !defined(BOOT_X64)

#define PACKET_READY        0x00000000  // Aka STATUS_SUCCESS
#define PACKET_PENDING      0x00000103  // Aka STATUS_PENDING

//
// Change these macros to debug the debugger transport.
//

#define KDDBG if (0) BlVideoPrintf
#define KDDBG2 if (0) BlVideoPrintf

//
//  These structures are accessed directly by the host using RDMA.
//

#define DEBUG_BUS1394_MAX_PACKET_SIZE       4000

#define DEBUG_1394_MAJOR_VERSION            0x1
#define DEBUG_1394_MINOR_VERSION            0x0
#define DEBUG_1394_CONFIG_TAG               0xBABABABA

typedef struct _DEBUG_1394_SEND_PACKET {
    UINT32               TransferStatus;
    UINT32               PacketHeader[4];
    UINT32               Length;
    UINT8               Packet[DEBUG_BUS1394_MAX_PACKET_SIZE];
    UINT8               Padding[72];
} DEBUG_1394_SEND_PACKET;

C_ASSERT(sizeof(DEBUG_1394_SEND_PACKET) == 4096);

typedef struct _DEBUG_1394_RECEIVE_PACKET {
    UINT32               TransferStatus;
    UINT32               Length;
    UINT8               Packet[DEBUG_BUS1394_MAX_PACKET_SIZE];
    UINT8               Padding[88];
} DEBUG_1394_RECEIVE_PACKET;

C_ASSERT(sizeof(DEBUG_1394_RECEIVE_PACKET) == 4096);

typedef struct _DEBUG_1394_CONFIG {
    UINT32               Tag;
    UINT16              MajorVersion;
    UINT16              MinorVersion;
    UINT32               Id;
    UINT32               BusPresent;
    UINT64           SendPacket;
    UINT64           ReceivePacket;
} DEBUG_1394_CONFIG;

C_ASSERT(sizeof(DEBUG_1394_CONFIG) == 32);

typedef struct _DEBUG_1394_DATA {
    UINT32                       CromBuffer[248];    // our config ROM - must be 1k aligned
    DEBUG_1394_CONFIG           Config;             // our config for this session
    DEBUG_1394_SEND_PACKET      SendPacket;         // our send packet (isoch packet)
    DEBUG_1394_RECEIVE_PACKET   ReceivePacket;      // our receive packet
} DEBUG_1394_DATA;

C_ASSERT(sizeof(DEBUG_1394_DATA) == 1024 + 4096 + 4096);

//
// Timing constants.
//

#define TIMEOUT_COUNT                   100000
#define MAX_REGISTER_READS              400000

//
// Static Data Structures
//

static DEBUG_1394_DATA *            Kd1394Data = NULL;
static volatile OHCI_REGISTER_MAP * KdRegisters = NULL;

UINT32
BlKd1394StallExecution(
    UINT32 LoopCount
    )

//++
//
//  Routine Description:
//
//    Stall for a finite time to allow hardware to respond.
//
//  Arguments:
//
//    LoopCount    - Number of times to run the outer loop.
//
//  Return Value:
//
//    Ignored.
//
//--

{
    volatile UINT32 b;
    volatile UINT32 k;
    volatile UINT32 i;

    b = 1;

    for (k = 0; k < LoopCount; k++) {

        BlKdSpin();

        for (i = 1; i < 10000; i++) {

            b = b * (i>>k);
        }
    }
    return b;
}

UINT32
BlKd1394ByteSwap(
    UINT32 Source
    )

//++
//
//  Routine Description:
//
//    Reverse the order of byte in the UINT32.
//
//  Arguments:
//
//    Source    - 32-bit UINT32 value.
//
//  Return Value:
//
//    The input value with byte pairs 0:3 and 1:2 swapped.
//
//--

{
    return (((Source)              << (8 * 3)) |
            ((Source & 0x0000FF00) << (8 * 1)) |
            ((Source & 0x00FF0000) >> (8 * 1)) |
            ((Source)              >> (8 * 3)));
}

UINT32
BlKd1394Crc16(
    UINT32 Data,
    UINT32 Check
    )

//++
//
//  Routine Description:
//
//    Derive the 16-bit CRC as defined by IEEE 1212 clause 8.1.5. (ISO/IEC 13213)
//    First edition 1994-10-05.
//
//  Arguments:
//
//    Data - UINT32 data to derive CRC from.
//
//    Check - check value.
//
//  Return Value:
//
//    The 16-bit CRC.
//
//--

{
    UINT32 Next = Check;
    INT32 Shift;

    for (Shift = 28; Shift >= 0; Shift -= 4) {
        UINT32 Sum;

        Sum = ((Next >> 12) ^ (Data >> Shift)) & 0xf;
        Next = (Next << 4) ^ (Sum << 12) ^ (Sum << 5) ^ (Sum);
    }
    return (Next & 0xFFFF);
}

UINT16
BlKd1394CalculateCrc(
    UINT32 *Quadlet,
    UINT32 Length
    )

//++
//
//  Routine Description:
//
//    Calculate a CRC for the pointer to the Quadlet data.
//
//  Arguments:
//
//    Quadlet - Pointer to data to CRC.
//
//    Length  - Length of data to CRC.
//
//  Return Value:
//
//    The 16-bit CRC.
//
//--

{
    UINT32 Temp = 0;
    UINT32 Index;

    Temp = 0;

    for (Index = 0; Index < Length; Index++) {

        Temp = BlKd1394Crc16(Quadlet[Index], Temp);
    }

    return (UINT16)Temp;
}

BOOLEAN
BlKd1394InitHardware(
    UINT16 Channel,
    PVOID IoRegion
    )

//++
//
//  Routine Description:
//
//    Initialize the 1394 hardware and connect it to KD.
//
//  Arguments:
//
//    Channel     - KD 1394 Channel.  Default is channel 0, but can be changed if 1394 is shared.
//
//    IoRegion    - Pointer to the 1394 registers mapped into our address space.
//
//  Return Value:
//
//    The 16-bit CRC.
//
//--

{
    UINT32 ulVersion;
    UINT8 MajorVersion;
    HC_CONTROL_REGISTER HCControl;
    UINT32 retry;
    LINK_CONTROL_REGISTER LinkControl;
    NODE_ID_REGISTER NodeId;
    BUS_OPTIONS_REGISTER BusOptions;
    CONFIG_ROM_INFO ConfigRomHeader;
    IMMEDIATE_ENTRY CromEntry;
    DIRECTORY_INFO DirInfo;
    PHY_CONTROL_REGISTER PhyControl;
    UINT8 Data;
    volatile OHCI_REGISTER_MAP * Registers;

#if KD_VERBOSE

    BlVideoPrintf("1394: IoRegion: %p\n", IoRegion);

#endif

    //
    // Note: Kd1394Data must be in the low 32-bits of address space due to
    //       limits on valid 1394 DMA addresses.  It must also be contiguous.
    //       It must be in the low 24-bits of address space to statisfy KD.
    //

    Kd1394Data = (DEBUG_1394_DATA *) BlSingularityOhci1394Buffer;
    BlRtlZeroMemory(Kd1394Data, sizeof(*Kd1394Data));

    //
    // Get our base address.
    //

    Registers = (volatile OHCI_REGISTER_MAP *)IoRegion;

    //
    // Initialize our config info for host debugger to read.
    //

    Kd1394Data->Config.Tag = DEBUG_1394_CONFIG_TAG;
    Kd1394Data->Config.MajorVersion = DEBUG_1394_MAJOR_VERSION;
    Kd1394Data->Config.MinorVersion = DEBUG_1394_MINOR_VERSION;
    Kd1394Data->Config.Id = Channel;
    Kd1394Data->Config.BusPresent = FALSE;
    Kd1394Data->Config.SendPacket = (UINT64) &Kd1394Data->SendPacket;
    Kd1394Data->Config.ReceivePacket = (UINT64) &Kd1394Data->ReceivePacket;

    //
    // Get the transport version.
    //

    ulVersion = Registers->Version.all;
    MajorVersion = (UINT8)(ulVersion >> 16);

    //
    // Make sure we have a valid version.
    //

    if (MajorVersion != 1) { // INVESTIGATE

#if KD_VERBOSE

        BlVideoPrintf("1394: MajorVersion != 1\n");

#endif

        return FALSE;
    }

    //
    // Soft reset to initialize the controller.
    //

    HCControl.all = 0;
    HCControl.SoftReset = TRUE;
    Registers->HCControlSet.all = HCControl.all;

    //
    // wait until reset completes.
    //

    retry = 1000; // ??

    do {

        HCControl.all = Registers->HCControlSet.all;

        BlKd1394StallExecution(1);

    } while ((HCControl.SoftReset) && (--retry));

    if (retry == 0) {

#if KD_VERBOSE

        BlVideoPrintf("1394: Reset failed\n");

#endif

        return FALSE;
    }

    //
    // Enable link to phy communication.
    //

    HCControl.all = 0;
    HCControl.Lps = TRUE;
    Registers->HCControlSet.all = HCControl.all;

    BlKd1394StallExecution(20);

    //
    // Initialize HCControl register
    // Send data in little-endian order (i.e. do byte swap).
    //

    HCControl.all = 0;
    HCControl.NoByteSwapData = TRUE;
    Registers->HCControlClear.all = HCControl.all;

    //
    // Enable posted writes.
    //

    HCControl.all = 0;
    HCControl.PostedWriteEnable = TRUE;
    Registers->HCControlSet.all = HCControl.all;

    //
    // Setup the link control.
    //

    LinkControl.all = 0;
    LinkControl.CycleTimerEnable = TRUE;
    LinkControl.CycleMaster = TRUE;
    LinkControl.RcvPhyPkt = TRUE;
    LinkControl.RcvSelfId = TRUE;
    Registers->LinkControlClear.all = LinkControl.all;

    LinkControl.all = 0;
    LinkControl.CycleTimerEnable = TRUE;
    LinkControl.CycleMaster = TRUE;
    Registers->LinkControlSet.all = LinkControl.all;

    //
    // Set the bus number (hardcoded to 0x3FF) - ??? what about node id??
    //

    NodeId.all = 0;
    NodeId.BusId = (UINT16)0x3FF;
    Registers->NodeId.all = NodeId.all;

    //
    // Do something with the crom...
    //

    //
    // 0xf0000404 - bus id register
    //
    Kd1394Data->CromBuffer[1] = 0x31333934;

    //
    // 0xf0000408 - bus options register
    //

    BusOptions.all = BlKd1394ByteSwap(Registers->BusOptions.all);
    BusOptions.Pmc = FALSE;
    BusOptions.Bmc = FALSE;
    BusOptions.Isc = FALSE;
    BusOptions.Cmc = FALSE;
    BusOptions.Irmc = FALSE;
    BusOptions.g = 1;
    Kd1394Data->CromBuffer[2] = BlKd1394ByteSwap(BusOptions.all);

    //
    // 0xf000040c - global unique id hi
    //

    Kd1394Data->CromBuffer[3] = Registers->GuidHi;

    //
    // 0xf0000410 - global unique id lo
    //

    Kd1394Data->CromBuffer[4] = Registers->GuidLo;

    //
    // 0xf0000400 - config ROM header - set last to calculate CRC!
    //

    ConfigRomHeader.all = 0;
    ConfigRomHeader.CRI_Info_Length = 4;
    ConfigRomHeader.CRI_CRC_Length = 4;
    ConfigRomHeader.CRI_CRC_Value = BlKd1394CalculateCrc(&Kd1394Data->CromBuffer[1],
                                                         ConfigRomHeader.CRI_CRC_Length);
    Kd1394Data->CromBuffer[0] = ConfigRomHeader.all;

    Kd1394Data->CromBuffer[6] = 0xC083000C; // 0xf0000418 - node capabilities
    Kd1394Data->CromBuffer[7] = 0xF2500003; // 0xf000041C - module vendor id

    //
    // KD's state machine looks for 1c w/ 50f2, 1d w/ 02, then 1e w/ address.
    //

    Kd1394Data->CromBuffer[8] = 0xF250001C; // 0xf0000420 - extended key (for KD)
    Kd1394Data->CromBuffer[9] = 0x0200001D; // 0xf0000424 - debug key (for KD)

    //
    // 0xf0000428 - debug value (for KD)
    //

    CromEntry.all = (UINT32)(ULONG_PTR) &Kd1394Data->Config;
    CromEntry.IE_Key = 0x1E;
    Kd1394Data->CromBuffer[10] = BlKd1394ByteSwap(CromEntry.all);

    //
    // 0xf0000414 - root 
Download .txt
gitextract_3960jfld/

├── .gitignore
├── LICENSE
├── README.md
├── SECURITY.md
├── ironclad-apps/
│   ├── .gitignore
│   ├── IRONROOT.sentinel
│   ├── README.md
│   ├── boot/
│   │   ├── boot-cp.cmd
│   │   ├── bootd.pdb
│   │   └── boothosts.txt
│   ├── build-tools.ps1
│   ├── def.ps1
│   ├── env.ps1
│   ├── makefile
│   ├── src/
│   │   ├── Checked/
│   │   │   ├── BootLoader/
│   │   │   │   └── SingLdrPc/
│   │   │   │       ├── .gitignore
│   │   │   │       ├── bl.h
│   │   │   │       ├── bl.inc
│   │   │   │       ├── blacpi.cpp
│   │   │   │       ├── blcdrom.cpp
│   │   │   │       ├── blcom.cpp
│   │   │   │       ├── blentry.cpp
│   │   │   │       ├── blentry16.asm
│   │   │   │       ├── blfat.cpp
│   │   │   │       ├── blflash.cpp
│   │   │   │       ├── blkd.cpp
│   │   │   │       ├── blkd1394.cpp
│   │   │   │       ├── blkd1394.h
│   │   │   │       ├── blkdcom.cpp
│   │   │   │       ├── blmm.cpp
│   │   │   │       ├── blmps.cpp
│   │   │   │       ├── blpci.cpp
│   │   │   │       ├── blpecoff.cpp
│   │   │   │       ├── blpnp.cpp
│   │   │   │       ├── blpool.cpp
│   │   │   │       ├── blpxe.cpp
│   │   │   │       ├── blsingularity.cpp
│   │   │   │       ├── blsmap.cpp
│   │   │   │       ├── blstring.cpp
│   │   │   │       ├── bltrap.cpp
│   │   │   │       ├── blutil.cpp
│   │   │   │       ├── blvesa.cpp
│   │   │   │       ├── blvideo.cpp
│   │   │   │       ├── makefile
│   │   │   │       ├── platform.h
│   │   │   │       ├── tpm/
│   │   │   │       │   ├── aik.cpp
│   │   │   │       │   └── aik.h
│   │   │   │       └── x86/
│   │   │   │           ├── blcrtasm.asm
│   │   │   │           ├── blidt.asm
│   │   │   │           ├── blioport.asm
│   │   │   │           ├── bllegacy.asm
│   │   │   │           └── blutilasm.asm
│   │   │   ├── Libraries/
│   │   │   │   └── DafnyCC/
│   │   │   │       ├── Base.dfy
│   │   │   │       └── Seq.dfy
│   │   │   └── Nucleus/
│   │   │       ├── Base/
│   │   │       │   ├── BitVectorLemmasBase.ifc.beat
│   │   │       │   ├── BitVectorLemmasBase.imp.beat
│   │   │       │   ├── Core.ifc.beat
│   │   │       │   ├── Core.imp.beat
│   │   │       │   ├── Instructions.ifc.beat
│   │   │       │   ├── Instructions.imp.beat
│   │   │       │   ├── IntLemmasBase.ifc.beat
│   │   │       │   ├── IntLemmasBase.imp.beat
│   │   │       │   ├── LogicalAddressing.ifc.beat
│   │   │       │   ├── LogicalAddressing.imp.beat
│   │   │       │   ├── Overflow.imp.beat
│   │   │       │   ├── Partition.ifc.beat
│   │   │       │   ├── Partition.imp.beat
│   │   │       │   ├── Separation.ifc.beat
│   │   │       │   ├── Separation.imp.beat
│   │   │       │   ├── Stacks.ifc.beat
│   │   │       │   ├── Stacks.imp.beat
│   │   │       │   ├── Util.ifc.beat
│   │   │       │   └── Util.imp.beat
│   │   │       ├── Devices/
│   │   │       │   ├── BitVectorLemmasDevices.ifc.beat
│   │   │       │   ├── BitVectorLemmasDevices.imp.beat
│   │   │       │   ├── IntLemmasDevices.ifc.beat
│   │   │       │   ├── IntLemmasDevices.imp.beat
│   │   │       │   ├── IntelNIC.ifc.beat
│   │   │       │   ├── IntelNIC.imp.beat
│   │   │       │   ├── IoMain.ifc.beat
│   │   │       │   ├── IoMain.imp.beat
│   │   │       │   ├── PCI.ifc.beat
│   │   │       │   └── PCI.imp.beat
│   │   │       ├── GC/
│   │   │       │   ├── BitVectorLemmasGc.ifc.beat
│   │   │       │   ├── BitVectorLemmasGc.imp.beat
│   │   │       │   ├── IntLemmasGc.ifc.beat
│   │   │       │   ├── IntLemmasGc.imp.beat
│   │   │       │   ├── SimpleCollector.ifc.beat
│   │   │       │   ├── SimpleCollector.imp.beat
│   │   │       │   ├── SimpleCommon.ifc.beat
│   │   │       │   ├── SimpleCommon.imp.beat
│   │   │       │   ├── SimpleGc.ifc.beat
│   │   │       │   ├── SimpleGcMemory.ifc.beat
│   │   │       │   └── SimpleGcMemory.imp.beat
│   │   │       └── Main/
│   │   │           ├── BitVectorLemmasMain.ifc.beat
│   │   │           ├── BitVectorLemmasMain.imp.beat
│   │   │           ├── Cube.ifc.beat
│   │   │           ├── DafnyAssembly.ifc.beat
│   │   │           ├── DafnyAssembly.imp.beat
│   │   │           ├── Entry.imp.beat
│   │   │           ├── IntLemmasMain.ifc.beat
│   │   │           ├── IntLemmasMain.imp.beat
│   │   │           ├── Main.ifc.beat
│   │   │           ├── axiom.whitelist
│   │   │           ├── dafny_FatNatX86_i.imp.beat
│   │   │           ├── dafny_FatNatX86big_i.imp.beat
│   │   │           ├── dafny_FleetNatMulLoopOpt_i.imp.beat
│   │   │           ├── dafny_FleetNatMulOpt_i.imp.beat
│   │   │           ├── dafny_assembly_i.imp.beat
│   │   │           ├── dafny_bit_vector_lemmas_i.imp.beat
│   │   │           ├── dafny_io_mem_i.imp.beat
│   │   │           ├── dafny_pci_i.imp.beat
│   │   │           ├── dafny_sha256opt2_i.imp.beat
│   │   │           ├── dafny_sha256opt_i.imp.basm
│   │   │           ├── mul_plan.txt
│   │   │           ├── sha256opt2.plan
│   │   │           └── sha256opt2.plan2
│   │   ├── Clients/
│   │   │   ├── Benchmark/
│   │   │   │   ├── BenchSpec.py
│   │   │   │   ├── BenchmarkAnalyzer.py
│   │   │   │   ├── BenchmarkDriver.py
│   │   │   │   ├── BenchmarkRequestCmd/
│   │   │   │   │   ├── App.config
│   │   │   │   │   ├── BenchmarkRequestCmd.csproj
│   │   │   │   │   ├── GlobalSuppressions.cs
│   │   │   │   │   ├── Program.cs
│   │   │   │   │   └── Properties/
│   │   │   │   │       └── AssemblyInfo.cs
│   │   │   │   ├── BenchmarkRequestGui/
│   │   │   │   │   ├── App.config
│   │   │   │   │   ├── App.xaml
│   │   │   │   │   ├── App.xaml.cs
│   │   │   │   │   ├── BenchmarkRequestGui.csproj
│   │   │   │   │   ├── GlobalSuppressions.cs
│   │   │   │   │   ├── MainWindow.xaml
│   │   │   │   │   ├── MainWindow.xaml.cs
│   │   │   │   │   └── Properties/
│   │   │   │   │       ├── AssemblyInfo.cs
│   │   │   │   │       ├── Resources.Designer.cs
│   │   │   │   │       ├── Resources.resx
│   │   │   │   │       ├── Settings.Designer.cs
│   │   │   │   │       └── Settings.settings
│   │   │   │   ├── Communication/
│   │   │   │   │   ├── BenchmarkList.cs
│   │   │   │   │   ├── Communication.csproj
│   │   │   │   │   ├── Connection.cs
│   │   │   │   │   ├── GlobalSuppressions.cs
│   │   │   │   │   ├── Properties/
│   │   │   │   │   │   └── AssemblyInfo.cs
│   │   │   │   │   ├── Request.cs
│   │   │   │   │   └── Response.cs
│   │   │   │   ├── TestEcho.py
│   │   │   │   └── notes
│   │   │   ├── Benchmark.sln
│   │   │   ├── Clients.sln
│   │   │   ├── Common/
│   │   │   │   ├── Common.cs
│   │   │   │   ├── Common.csproj
│   │   │   │   ├── CommonParams.cs
│   │   │   │   ├── GetQuote.cs
│   │   │   │   ├── Profiler.cs
│   │   │   │   └── Properties/
│   │   │   │       └── AssemblyInfo.cs
│   │   │   ├── DiffPriv/
│   │   │   │   ├── App.config
│   │   │   │   ├── DiffPriv.csproj
│   │   │   │   ├── DiffPrivRequests.cs
│   │   │   │   ├── DiffPrivResponses.cs
│   │   │   │   ├── Parameters.cs
│   │   │   │   ├── Program.cs
│   │   │   │   ├── Properties/
│   │   │   │   │   └── AssemblyInfo.cs
│   │   │   │   └── Rational.cs
│   │   │   ├── DiffPrivSrv/
│   │   │   │   ├── App.config
│   │   │   │   ├── BigRational.cs
│   │   │   │   ├── DiffPrivRequest.cs
│   │   │   │   ├── DiffPrivResponse.cs
│   │   │   │   ├── DiffPrivSrv.csproj
│   │   │   │   ├── Parameters.cs
│   │   │   │   ├── Program.cs
│   │   │   │   ├── Properties/
│   │   │   │   │   └── AssemblyInfo.cs
│   │   │   │   └── StateMachine.cs
│   │   │   ├── DotNetSHABench/
│   │   │   │   ├── App.config
│   │   │   │   ├── DotNetSHABench.csproj
│   │   │   │   ├── Parameters.cs
│   │   │   │   ├── Program.cs
│   │   │   │   └── Properties/
│   │   │   │       └── AssemblyInfo.cs
│   │   │   ├── Notary/
│   │   │   │   ├── App.config
│   │   │   │   ├── Notary.csproj
│   │   │   │   ├── NotaryRequests.cs
│   │   │   │   ├── NotaryResponses.cs
│   │   │   │   ├── Parameters.cs
│   │   │   │   ├── Program.cs
│   │   │   │   └── Properties/
│   │   │   │       └── AssemblyInfo.cs
│   │   │   ├── NotarySrv/
│   │   │   │   ├── App.config
│   │   │   │   ├── NotaryRequest.cs
│   │   │   │   ├── NotaryResponse.cs
│   │   │   │   ├── NotarySrv.csproj
│   │   │   │   ├── Parameters.cs
│   │   │   │   ├── Program.cs
│   │   │   │   ├── Properties/
│   │   │   │   │   └── AssemblyInfo.cs
│   │   │   │   └── StateMachine.cs
│   │   │   ├── PassHash/
│   │   │   │   ├── App.config
│   │   │   │   ├── Parameters.cs
│   │   │   │   ├── PassHash.csproj
│   │   │   │   ├── PassHashRequests.cs
│   │   │   │   ├── PassHashResponses.cs
│   │   │   │   ├── Program.cs
│   │   │   │   └── Properties/
│   │   │   │       └── AssemblyInfo.cs
│   │   │   ├── PassHashSrv/
│   │   │   │   ├── App.config
│   │   │   │   ├── Parameters.cs
│   │   │   │   ├── PassHashRequest.cs
│   │   │   │   ├── PassHashResponse.cs
│   │   │   │   ├── PassHashSrv.csproj
│   │   │   │   ├── Program.cs
│   │   │   │   ├── Properties/
│   │   │   │   │   └── AssemblyInfo.cs
│   │   │   │   └── StateMachine.cs
│   │   │   ├── TrInc/
│   │   │   │   ├── App.config
│   │   │   │   ├── Parameters.cs
│   │   │   │   ├── Program.cs
│   │   │   │   ├── Properties/
│   │   │   │   │   └── AssemblyInfo.cs
│   │   │   │   ├── TrInc.csproj
│   │   │   │   ├── TrIncRequests.cs
│   │   │   │   └── TrIncResponses.cs
│   │   │   ├── TrIncSrv/
│   │   │   │   ├── App.config
│   │   │   │   ├── Parameters.cs
│   │   │   │   ├── Program.cs
│   │   │   │   ├── Properties/
│   │   │   │   │   └── AssemblyInfo.cs
│   │   │   │   ├── StateMachine.cs
│   │   │   │   ├── TrIncRequest.cs
│   │   │   │   ├── TrIncResponse.cs
│   │   │   │   └── TrIncSrv.csproj
│   │   │   ├── UdpEchoClient/
│   │   │   │   ├── App.config
│   │   │   │   ├── Program.cs
│   │   │   │   ├── Properties/
│   │   │   │   │   └── AssemblyInfo.cs
│   │   │   │   └── UdpEchoClient.csproj
│   │   │   └── UdpEchoClient.sln
│   │   ├── Dafny/
│   │   │   ├── .gitignore
│   │   │   ├── Apps/
│   │   │   │   ├── .gitignore
│   │   │   │   ├── AddPerf/
│   │   │   │   │   └── Main.i.dfy
│   │   │   │   ├── AppLoader/
│   │   │   │   │   └── Main.i.dfy
│   │   │   │   ├── BenchmarkApp/
│   │   │   │   │   └── Main.i.dfy
│   │   │   │   ├── BenchmarkService/
│   │   │   │   │   ├── BenchmarkCore.i.dfy
│   │   │   │   │   ├── BenchmarkList.i.dfy
│   │   │   │   │   ├── Main.i.dfy
│   │   │   │   │   └── Protocol.i.dfy
│   │   │   │   ├── Common/
│   │   │   │   │   ├── .gitignore
│   │   │   │   │   ├── CommonState.i.dfy
│   │   │   │   │   └── CommonState.s.dfy
│   │   │   │   ├── DafnyCCTest/
│   │   │   │   │   └── Main.i.dfy
│   │   │   │   ├── DiffPriv/
│   │   │   │   │   ├── .gitignore
│   │   │   │   │   ├── Database.s.dfy
│   │   │   │   │   ├── DiffPriv.i.dfy
│   │   │   │   │   ├── DiffPriv.s.dfy
│   │   │   │   │   ├── DiffPrivPerformQuery.i.dfy
│   │   │   │   │   ├── ErrorCodes.i.dfy
│   │   │   │   │   ├── Main.i.dfy
│   │   │   │   │   ├── Mapper.i.dfy
│   │   │   │   │   ├── Mapper.s.dfy
│   │   │   │   │   ├── Math.s.dfy
│   │   │   │   │   ├── Noise.i.dfy
│   │   │   │   │   ├── Noise.s.dfy
│   │   │   │   │   ├── PacketParsing.c.dfy
│   │   │   │   │   ├── PacketParsing.i.dfy
│   │   │   │   │   ├── RelationalProperties.i.dfy
│   │   │   │   │   ├── StateMachine.i.dfy
│   │   │   │   │   ├── StateMachine.s.dfy
│   │   │   │   │   ├── StateMachine2.i.dfy
│   │   │   │   │   ├── SumReducer.i.dfy
│   │   │   │   │   └── SumReducer.s.dfy
│   │   │   │   ├── EtherTest/
│   │   │   │   │   └── EtherTest.i.dfy
│   │   │   │   ├── Notary/
│   │   │   │   │   ├── .gitignore
│   │   │   │   │   ├── Main.i.dfy
│   │   │   │   │   ├── MainOneStep.i.dfy
│   │   │   │   │   ├── Notary.i.dfy
│   │   │   │   │   ├── Notary.s.dfy
│   │   │   │   │   ├── PacketParsing.c.dfy
│   │   │   │   │   ├── PacketParsing.i.dfy
│   │   │   │   │   ├── StateMachine.i.dfy
│   │   │   │   │   └── StateMachine.s.dfy
│   │   │   │   ├── PassHash/
│   │   │   │   │   ├── Main.i.dfy
│   │   │   │   │   ├── PacketParsing.c.dfy
│   │   │   │   │   ├── PacketParsing.i.dfy
│   │   │   │   │   ├── PassHash.i.dfy
│   │   │   │   │   ├── PassHash.s.dfy
│   │   │   │   │   └── StateMachine.s.dfy
│   │   │   │   ├── TPMTest/
│   │   │   │   │   └── TPMTest.i.dfy
│   │   │   │   ├── TrInc/
│   │   │   │   │   ├── .gitignore
│   │   │   │   │   ├── Main.i.dfy
│   │   │   │   │   ├── PacketParsing.c.dfy
│   │   │   │   │   ├── PacketParsing.i.dfy
│   │   │   │   │   ├── StateMachine.i.dfy
│   │   │   │   │   ├── StateMachine.s.dfy
│   │   │   │   │   ├── TrInc.i.dfy
│   │   │   │   │   └── TrInc.s.dfy
│   │   │   │   ├── UdpEchoService/
│   │   │   │   │   └── UdpEchoService.i.dfy
│   │   │   │   └── apps.dfy.batch
│   │   │   ├── BuildExceptions.py
│   │   │   ├── Drivers/
│   │   │   │   ├── .gitignore
│   │   │   │   ├── CPU/
│   │   │   │   │   ├── assembly.i.dfy
│   │   │   │   │   ├── assembly.s.dfy
│   │   │   │   │   └── assembly_premium.i.dfy
│   │   │   │   ├── IO/
│   │   │   │   │   ├── io_mem.i.dfy
│   │   │   │   │   ├── io_mem.s.dfy
│   │   │   │   │   └── pci.i.dfy
│   │   │   │   ├── Network/
│   │   │   │   │   ├── .gitignore
│   │   │   │   │   └── Intel/
│   │   │   │   │       ├── .gitignore
│   │   │   │   │       └── driver.i.dfy
│   │   │   │   └── TPM/
│   │   │   │       ├── .gitignore
│   │   │   │       ├── tpm-device.s.dfy
│   │   │   │       ├── tpm-device.s.dfy.disabled
│   │   │   │       ├── tpm-driver.i.dfy
│   │   │   │       ├── tpm-wrapper-randoms.i.dfy
│   │   │   │       └── tpm-wrapper.i.dfy
│   │   │   └── Libraries/
│   │   │       ├── .gitignore
│   │   │       ├── BigNum/
│   │   │       │   ├── .gitignore
│   │   │       │   ├── BigNatAdd.i.dfy
│   │   │       │   ├── BigNatBitCount.i.dfy
│   │   │       │   ├── BigNatBitwise.i.dfy
│   │   │       │   ├── BigNatCompare.i.dfy
│   │   │       │   ├── BigNatCore.i.dfy
│   │   │       │   ├── BigNatDiv.i.dfy
│   │   │       │   ├── BigNatMod.i.dfy
│   │   │       │   ├── BigNatMul.i.dfy
│   │   │       │   ├── BigNatPartial.i.dfy
│   │   │       │   ├── BigNatRandom.i.dfy
│   │   │       │   ├── BigNatSub.i.dfy
│   │   │       │   ├── BigNatTestLib.i.dfy
│   │   │       │   ├── BigNatX86Shim.i.dfy
│   │   │       │   ├── BigNum.i.dfy
│   │   │       │   ├── BigNumBEAdaptor.i.dfy
│   │   │       │   ├── BigRat.i.dfy
│   │   │       │   └── Word32.i.dfy
│   │   │       ├── Crypto/
│   │   │       │   ├── .gitignore
│   │   │       │   ├── Hash/
│   │   │       │   │   ├── .gitignore
│   │   │       │   │   ├── Digest.i.dfy
│   │   │       │   │   ├── Digest.s.dfy
│   │   │       │   │   ├── hmac_common.i.dfy
│   │   │       │   │   ├── hmac_common.s.dfy
│   │   │       │   │   ├── sha1.i.dfy
│   │   │       │   │   ├── sha1.s.dfy
│   │   │       │   │   ├── sha1_hmac.i.dfy
│   │   │       │   │   ├── sha256.i.dfy
│   │   │       │   │   ├── sha256.s.dfy
│   │   │       │   │   ├── sha256_hmac.i.dfy
│   │   │       │   │   ├── sha256common.i.dfy
│   │   │       │   │   ├── sha256opt.i.dfy
│   │   │       │   │   ├── sha256opt2.i.dfy
│   │   │       │   │   ├── sha_common.i.dfy
│   │   │       │   │   ├── sha_common.s.dfy
│   │   │       │   │   ├── sha_padding.i.dfy
│   │   │       │   │   └── sha_test.i.dfy
│   │   │       │   ├── RSA/
│   │   │       │   │   ├── .gitignore
│   │   │       │   │   ├── BlockEncoding.i.dfy
│   │   │       │   │   ├── ByteSequences.i.dfy
│   │   │       │   │   ├── Extended_GCD.i.dfy
│   │   │       │   │   ├── KeyGen.i.dfy
│   │   │       │   │   ├── KeyGen.s.dfy
│   │   │       │   │   ├── KeyImpl.i.dfy
│   │   │       │   │   ├── KeybitsLength.i.dfy
│   │   │       │   │   ├── MillerRabin.i.dfy
│   │   │       │   │   ├── MillerRabin.s.dfy
│   │   │       │   │   ├── MultiplicativeInverse.i.dfy
│   │   │       │   │   ├── OAEP.i.dfy
│   │   │       │   │   ├── OAEP.s.dfy
│   │   │       │   │   ├── PSS.s.dfy
│   │   │       │   │   ├── RSA.i.dfy
│   │   │       │   │   ├── RSADigestedSign.i.dfy
│   │   │       │   │   ├── RSAOps.i.dfy
│   │   │       │   │   ├── RSAPublicWrapper.i.dfy
│   │   │       │   │   ├── RSASpec.s.dfy
│   │   │       │   │   ├── RSA_Decrypt.i.dfy
│   │   │       │   │   ├── division.i.dfy
│   │   │       │   │   ├── rfc4251.s.dfy
│   │   │       │   │   ├── rfc4251decode.i.dfy
│   │   │       │   │   └── rfc4251impl.i.dfy
│   │   │       │   ├── RandomNumberGen.s.dfy
│   │   │       │   └── RandomTracing.s.dfy
│   │   │       ├── FatNat/
│   │   │       │   ├── BigNatToFatNatAdaptor.i.dfy
│   │   │       │   ├── Bitwise.i.dfy
│   │   │       │   ├── CanonicalArrays.i.dfy
│   │   │       │   ├── FatInt.i.dfy
│   │   │       │   ├── FatNatAdd.i.dfy
│   │   │       │   ├── FatNatAddLemmas.i.dfy
│   │   │       │   ├── FatNatAddUnrolled.i.dfy
│   │   │       │   ├── FatNatCommon.i.dfy
│   │   │       │   ├── FatNatCompare.i.dfy
│   │   │       │   ├── FatNatDiv.i.dfy
│   │   │       │   ├── FatNatDivDefs.i.dfy
│   │   │       │   ├── FatNatDivEstDiv32.i.dfy
│   │   │       │   ├── FatNatDivEstTrivial.i.dfy
│   │   │       │   ├── FatNatMod.i.dfy
│   │   │       │   ├── FatNatModesty.i.dfy
│   │   │       │   ├── FatNatMul.i.dfy
│   │   │       │   ├── FatNatRandom.i.dfy
│   │   │       │   ├── FatNatReciprocal.i.dfy
│   │   │       │   ├── FatNatSub.i.dfy
│   │   │       │   ├── FatNatX86.i.dfy
│   │   │       │   ├── FatNatX86big.i.dfy
│   │   │       │   ├── Transforms.i.dfy
│   │   │       │   └── WordBoundHack.i.dfy
│   │   │       ├── FleetNat/
│   │   │       │   ├── Bizarre.dfy
│   │   │       │   ├── FleetNatAdd.i.dfy
│   │   │       │   ├── FleetNatCommon.i.dfy
│   │   │       │   ├── FleetNatMul.i.dfy
│   │   │       │   ├── FleetNatMulLemmas.i.dfy
│   │   │       │   ├── FleetNatMulLoopOpt.i.dfy
│   │   │       │   ├── FleetNatMulLoopOptLemmas.i.dfy
│   │   │       │   ├── FleetNatMulOpt.i.dfy
│   │   │       │   ├── FleetNatSub.i.dfy
│   │   │       │   └── FleetNatSubOpt.i.dfy
│   │   │       ├── Math/
│   │   │       │   ├── .gitignore
│   │   │       │   ├── BitwiseOperations.i.dfy
│   │   │       │   ├── GCD.s.dfy
│   │   │       │   ├── bit_vector_lemmas.i.dfy
│   │   │       │   ├── bit_vector_lemmas_premium.i.dfy
│   │   │       │   ├── div.i.dfy
│   │   │       │   ├── div_boogie.i.dfy
│   │   │       │   ├── div_def.i.dfy
│   │   │       │   ├── div_nonlinear.i.dfy
│   │   │       │   ├── evenodd.i.dfy
│   │   │       │   ├── mul.i.dfy
│   │   │       │   ├── mul_nonlinear.i.dfy
│   │   │       │   ├── power.i.dfy
│   │   │       │   ├── power.s.dfy
│   │   │       │   ├── power2.i.dfy
│   │   │       │   ├── power2.s.dfy
│   │   │       │   ├── power2methods.i.dfy
│   │   │       │   ├── round.i.dfy
│   │   │       │   └── round.s.dfy
│   │   │       ├── Net/
│   │   │       │   ├── .gitignore
│   │   │       │   ├── IPv4.i.dfy
│   │   │       │   ├── InternetChecksum.i.dfy
│   │   │       │   ├── Udp.i.dfy
│   │   │       │   └── ethernet.i.dfy
│   │   │       ├── Util/
│   │   │       │   ├── .gitignore
│   │   │       │   ├── DebugPrint.i.dfy
│   │   │       │   ├── Halter.i.dfy
│   │   │       │   ├── ProfileIfc.i.dfy
│   │   │       │   ├── arrays.i.dfy
│   │   │       │   ├── arrays_2.i.dfy
│   │   │       │   ├── arrays_and_seqs.i.dfy
│   │   │       │   ├── be_sequences.s.dfy
│   │   │       │   ├── beseqs_simple.i.dfy
│   │   │       │   ├── bytes_and_words.s.dfy
│   │   │       │   ├── insecure_prng.i.dfy
│   │   │       │   ├── integer_sequences.i.dfy
│   │   │       │   ├── integer_sequences.s.dfy
│   │   │       │   ├── integer_sequences_premium.i.dfy
│   │   │       │   ├── relational.i.dfy
│   │   │       │   ├── relational.s.dfy
│   │   │       │   ├── repeat_digit.i.dfy
│   │   │       │   ├── seq_blocking.i.dfy
│   │   │       │   ├── seq_blocking.s.dfy
│   │   │       │   ├── seqs_and_ints.i.dfy
│   │   │       │   ├── seqs_canonical.i.dfy
│   │   │       │   ├── seqs_common.i.dfy
│   │   │       │   ├── seqs_reverse.i.dfy
│   │   │       │   ├── seqs_simple.i.dfy
│   │   │       │   ├── seqs_transforms.i.dfy
│   │   │       │   └── word_bits.i.dfy
│   │   │       └── base.s.dfy
│   │   ├── DafnyTestDriver/
│   │   │   ├── DafnyTestDriver/
│   │   │   │   ├── App.config
│   │   │   │   ├── DafnyTestDriver.csproj
│   │   │   │   ├── Program.cs
│   │   │   │   ├── Properties/
│   │   │   │   │   └── AssemblyInfo.cs
│   │   │   │   ├── assembly.cs
│   │   │   │   ├── debug.cs
│   │   │   │   └── profile.cs
│   │   │   └── DafnyTestDriver.sln
│   │   └── Trusted/
│   │       ├── DafnySpec/
│   │       │   └── Seq.s.dfy
│   │       └── Spec/
│   │           ├── AddPerf/
│   │           │   └── AppRequirements.ifc.stitch
│   │           ├── AppLoader/
│   │           │   └── AppRequirements.ifc.stitch
│   │           ├── AppLoaderContract.ifc.basm
│   │           ├── AppLoaderContract.imp.basm
│   │           ├── AssemblySpec.ifc.basm
│   │           ├── AssemblySpec.imp.basm
│   │           ├── Assembly_axioms.bpl
│   │           ├── BaseSpec.ifc.basm
│   │           ├── BaseSpec.imp.basm
│   │           ├── Base_axioms.bpl
│   │           ├── BenchmarkApp/
│   │           │   └── AppRequirements.ifc.stitch
│   │           ├── BenchmarkService/
│   │           │   └── AppRequirements.ifc.stitch
│   │           ├── BitVector_axioms.bpl
│   │           ├── DafnyCCTest/
│   │           │   └── AppRequirements.ifc.stitch
│   │           ├── DiffPriv/
│   │           │   └── AppRequirements.ifc.stitch
│   │           ├── Entry.ifc.basm.stitch
│   │           ├── ExtendedAssembly.ifc.basm
│   │           ├── ExtendedAssembly.imp.basm
│   │           ├── IntSpec.ifc.basm
│   │           ├── IntSpec.imp.basm
│   │           ├── IntSpec_axioms.bpl
│   │           ├── InterruptsSpec.ifc.basm
│   │           ├── InterruptsSpec.imp.basm
│   │           ├── IoSpec.ifc.basm
│   │           ├── IoSpec.imp.basm
│   │           ├── IoTypesSpec.ifc.basm
│   │           ├── IoTypesSpec.imp.basm
│   │           ├── Io_axioms.bpl
│   │           ├── MachineStateSpec.ifc.basm
│   │           ├── MachineStateSpec.imp.basm
│   │           ├── MemorySpec.ifc.basm
│   │           ├── MemorySpec.imp.basm
│   │           ├── Memory_axioms.bpl
│   │           ├── Notary/
│   │           │   └── AppRequirements.ifc.stitch
│   │           ├── NucleusInvCopying.bpl
│   │           ├── Overflow.ifc.basm
│   │           ├── PassHash/
│   │           │   └── AppRequirements.ifc.stitch
│   │           ├── TPMTest/
│   │           │   └── AppRequirements.ifc.stitch
│   │           ├── TrInc/
│   │           │   └── AppRequirements.ifc.stitch
│   │           └── Word_axioms.bpl
│   └── tools/
│       ├── Beat/
│       │   ├── ast.fs
│       │   ├── beat.vim
│       │   ├── lex.fsl
│       │   ├── main.fs
│       │   ├── makefile
│       │   ├── makefile.fs
│       │   ├── nubuild-manifest.txt
│       │   ├── parse.fsy
│       │   └── parse_util.fs
│       ├── BoogieAsm/
│       │   ├── SymdiffMerge.cs
│       │   ├── ast.fs
│       │   ├── emit_bpl.fs
│       │   ├── lex.fsl
│       │   ├── main.fs
│       │   ├── makefile
│       │   ├── makefile.fs
│       │   ├── nubuild-manifest.txt
│       │   ├── parse.fsy
│       │   └── parse_util.fs
│       ├── Dafny/
│       │   ├── AbsInt.pdb
│       │   ├── BVD.exe.config
│       │   ├── BVD.pdb
│       │   ├── Basetypes.pdb
│       │   ├── Boogie.pdb
│       │   ├── Boogie.suo
│       │   ├── Boogie.vshost.exe.manifest
│       │   ├── CodeContracts/
│       │   │   └── Dafny.Contracts.pdb
│       │   ├── CodeContractsExtender.pdb
│       │   ├── Concurrency.pdb
│       │   ├── Core.pdb
│       │   ├── Dafny.exe.config
│       │   ├── Dafny.pdb
│       │   ├── Dafny.vshost.exe.config
│       │   ├── Dafny.vshost.exe.manifest
│       │   ├── DafnyLanguageService.pdb
│       │   ├── DafnyLanguageService.vsix
│       │   ├── DafnyMenu.pdb
│       │   ├── DafnyMenu.pkgdef
│       │   ├── DafnyMenu.vsix
│       │   ├── DafnyPipeline.pdb
│       │   ├── DafnyPrelude.bpl
│       │   ├── DafnyRuntime.cs
│       │   ├── Doomed.pdb
│       │   ├── ExecutionEngine.pdb
│       │   ├── Graph.pdb
│       │   ├── Houdini.pdb
│       │   ├── Microsoft.Z3.xml
│       │   ├── Model.pdb
│       │   ├── ModelViewer.pdb
│       │   ├── ParserHelper.pdb
│       │   ├── Predication.pdb
│       │   ├── PrepareBoogieZip.bat
│       │   ├── PrepareDafnyZip.bat
│       │   ├── Provers.SMTLib.pdb
│       │   ├── README
│       │   ├── VCExpr.pdb
│       │   ├── VCGeneration.pdb
│       │   ├── extension.vsixmanifest
│       │   ├── libiz3.lib
│       │   ├── z3.lib
│       │   └── z3_dbg.lib
│       ├── DafnyCC/
│       │   ├── .gitignore
│       │   ├── Analyze.cs
│       │   ├── CompileMethod.cs
│       │   ├── DafnyCC.cs
│       │   ├── DafnyCC.csproj
│       │   ├── DafnyCC.sln
│       │   ├── Makefile
│       │   ├── RegAlloc.cs
│       │   ├── Rtl.cs
│       │   ├── blueprints/
│       │   │   ├── Analyze.bpl
│       │   │   └── RegAlloc.bpl
│       │   └── nubuild-manifest.txt
│       ├── DafnySpec/
│       │   ├── .gitignore
│       │   ├── Compile.cs
│       │   ├── CompileField.cs
│       │   ├── CompileFunction.cs
│       │   ├── CompileMethodGhost.cs
│       │   ├── DafnyPrelude.dfy
│       │   ├── DafnySpec.cs
│       │   ├── DafnySpec.csproj
│       │   ├── DafnySpec.sln
│       │   ├── DafnySpecAst/
│       │   │   ├── DafnySpecAst.cs
│       │   │   ├── DafnySpecAst.csproj
│       │   │   └── nubuild-manifest.txt
│       │   ├── Makefile
│       │   ├── ParseMain.cs
│       │   ├── Parser/
│       │   │   ├── Parser.csproj
│       │   │   ├── ReadMe.txt
│       │   │   ├── lex.fsl
│       │   │   ├── nubuild-manifest.txt
│       │   │   ├── parse.fsy
│       │   │   ├── parse_util.fs
│       │   │   └── parser.fs
│       │   ├── RtlGhost.cs
│       │   ├── Util.cs
│       │   └── nubuild-manifest.txt
│       ├── LineCount/
│       │   ├── lex.fsl
│       │   ├── main.fs
│       │   ├── makefile
│       │   └── parse_util.fs
│       ├── NuBuild/
│       │   ├── .gitignore
│       │   ├── AzureManager/
│       │   │   ├── App.config
│       │   │   ├── AzureAccount.cs
│       │   │   ├── AzureManager.csproj
│       │   │   ├── Program.cs
│       │   │   ├── Properties/
│       │   │   │   └── AssemblyInfo.cs
│       │   │   └── ServiceConfiguration.cs
│       │   ├── CloudExecutionEngine/
│       │   │   ├── App.config
│       │   │   ├── CloudExecutionEngine.csproj
│       │   │   ├── Program.cs
│       │   │   └── Properties/
│       │   │       └── AssemblyInfo.cs
│       │   ├── CloudExecutionWorker/
│       │   │   ├── CloudExecutionEngine.cs
│       │   │   ├── CloudExecutionWorker.csproj
│       │   │   ├── Properties/
│       │   │   │   └── AssemblyInfo.cs
│       │   │   ├── WorkerRole.cs
│       │   │   └── app.config
│       │   ├── CloudQueueTool/
│       │   │   ├── App.config
│       │   │   ├── CloudQueueTool.csproj
│       │   │   ├── Program.cs
│       │   │   └── Properties/
│       │   │       └── AssemblyInfo.cs
│       │   ├── CustomDictionary.xml
│       │   ├── ItemCacheTool/
│       │   │   ├── App.config
│       │   │   ├── CacheState.cs
│       │   │   ├── ItemCacheTool.csproj
│       │   │   ├── Program.cs
│       │   │   └── Properties/
│       │   │       └── AssemblyInfo.cs
│       │   ├── NuBuild/
│       │   │   ├── .gitignore
│       │   │   ├── AbstractId.cs
│       │   │   ├── AnnotationScanner.cs
│       │   │   ├── App.config
│       │   │   ├── AsmRewriterVerb.cs
│       │   │   ├── BackgroundWorker.cs
│       │   │   ├── BasmObligationIncludes.cs
│       │   │   ├── BasmTransitiveDepsVerb.cs
│       │   │   ├── BatchVerifyVerb.cs
│       │   │   ├── BeatExtensions.cs
│       │   │   ├── BeatIncludes.cs
│       │   │   ├── BeatVerb.cs
│       │   │   ├── BoogieAsmDepBase.cs
│       │   │   ├── BoogieAsmLinkVerb.cs
│       │   │   ├── BoogieAsmVerificationObligationListVerb.cs
│       │   │   ├── BoogieAsmVerifyVerb.cs
│       │   │   ├── BoogieAsmWorkerBase.cs
│       │   │   ├── BoogieVerb.cs
│       │   │   ├── BootableAppVerb.cs
│       │   │   ├── BuildEngine.cs
│       │   │   ├── BuildObject.cs
│       │   │   ├── BuildObjectValuePointer.cs
│       │   │   ├── CachedHash.cs
│       │   │   ├── CloudExecutionQueue.cs
│       │   │   ├── CloudExecutionReport.cs
│       │   │   ├── CloudExecutionRequest.cs
│       │   │   ├── CloudExecutionWaiter.cs
│       │   │   ├── CloudSubmitter.cs
│       │   │   ├── ConcatContext.cs
│       │   │   ├── ConcatContextVerb.cs
│       │   │   ├── ContextContents.cs
│       │   │   ├── ContextGeneratingVerb.cs
│       │   │   ├── CustomManifestParser.cs
│       │   │   ├── DafnyCCVerb.cs
│       │   │   ├── DafnyCompileOneVerb.cs
│       │   │   ├── DafnyExecutableDependencies.cs
│       │   │   ├── DafnyExtensions.cs
│       │   │   ├── DafnyIncludes.cs
│       │   │   ├── DafnySpecVerb.cs
│       │   │   ├── DafnyTransformBaseVerb.cs
│       │   │   ├── DafnyTransitiveDepsVerb.cs
│       │   │   ├── DafnyVerifyOneVerb.cs
│       │   │   ├── DafnyVerifyTreeVerb.cs
│       │   │   ├── DbgFileCopySpeedTest.cs
│       │   │   ├── DbgHashSpeedTest.cs
│       │   │   ├── DbgVerbCounter.cs
│       │   │   ├── DependencyCache.cs
│       │   │   ├── DependencyDisposition.cs
│       │   │   ├── Disposition.cs
│       │   │   ├── EntryStitcherVerb.cs
│       │   │   ├── Hasher.cs
│       │   │   ├── IAsmProducer.cs
│       │   │   ├── IContextGeneratingVerb.cs
│       │   │   ├── IHasher.cs
│       │   │   ├── IIncludeFactory.cs
│       │   │   ├── IIncludePathContext.cs
│       │   │   ├── IItemCache.cs
│       │   │   ├── IObligationsProducer.cs
│       │   │   ├── IProcessInvokeAsyncVerb.cs
│       │   │   ├── IProcessInvoker.cs
│       │   │   ├── IRejectable.cs
│       │   │   ├── IVerb.cs
│       │   │   ├── IVerbWorker.cs
│       │   │   ├── IVerificationResultParser.cs
│       │   │   ├── IncludePathContext.cs
│       │   │   ├── IronRootDirectory.cs
│       │   │   ├── IroncladAppVerb.cs
│       │   │   ├── IronfleetAppVerb.cs
│       │   │   ├── ItemCacheCloud.cs
│       │   │   ├── ItemCacheLocal.cs
│       │   │   ├── ItemCacheMultiplexer.cs
│       │   │   ├── Job.cs
│       │   │   ├── LinkerVerb.cs
│       │   │   ├── Logger.cs
│       │   │   ├── MasmVerb.cs
│       │   │   ├── NMakeVerb.cs
│       │   │   ├── NuBuild.csproj
│       │   │   ├── ObjectFailedException.cs
│       │   │   ├── ObjectMissingFromCacheException.cs
│       │   │   ├── ObjectNotReadyException.cs
│       │   │   ├── OrderPreservingSet.cs
│       │   │   ├── PathNormalizer.cs
│       │   │   ├── PoundDefines.cs
│       │   │   ├── Presentater.cs
│       │   │   ├── Presentation.cs
│       │   │   ├── PresentationBuilder.cs
│       │   │   ├── ProcessInvokeAsyncWorker.cs
│       │   │   ├── ProcessInvoker.cs
│       │   │   ├── Program.cs
│       │   │   ├── Properties/
│       │   │   │   └── AssemblyInfo.cs
│       │   │   ├── Repository.cs
│       │   │   ├── ResultSummaryRecord.cs
│       │   │   ├── Scheduler.cs
│       │   │   ├── SourceConfigurationError.cs
│       │   │   ├── SourcePath.cs
│       │   │   ├── SourcePathIncludeContext.cs
│       │   │   ├── StaticContextVerb.cs
│       │   │   ├── SymDiffBaseVerb.cs
│       │   │   ├── SymDiffCombineVerb.cs
│       │   │   ├── SymDiffEngine.cs
│       │   │   ├── SymDiffExtractVerb.cs
│       │   │   ├── SymDiffInferVerb.cs
│       │   │   ├── SymDiffMergeBaseVerb.cs
│       │   │   ├── SymDiffMergeConfigVerb.cs
│       │   │   ├── SymDiffMergeVerb.cs
│       │   │   ├── TransitiveDepsContents.cs
│       │   │   ├── TransitiveDepsVerb.cs
│       │   │   ├── UnverifiedSentinelVirtualContents.cs
│       │   │   ├── UserError.cs
│       │   │   ├── Util.cs
│       │   │   ├── VSProjectParser.cs
│       │   │   ├── VSSolutionParser.cs
│       │   │   ├── VSSolutionVerb.cs
│       │   │   ├── Verb.cs
│       │   │   ├── VerbOutputsContext.cs
│       │   │   ├── VerbOutputsContextVerb.cs
│       │   │   ├── VerbRunner.cs
│       │   │   ├── VerbSyncWorker.cs
│       │   │   ├── VerbToposorter.cs
│       │   │   ├── VerificationMessage.cs
│       │   │   ├── VerificationObligationList.cs
│       │   │   ├── VerificationRequest.cs
│       │   │   ├── VerificationResult.cs
│       │   │   ├── VerificationResultBoogieParser.cs
│       │   │   ├── VerificationResultDafnyParser.cs
│       │   │   ├── VerificationResultSummaryVerb.cs
│       │   │   ├── VerificationResultVerb.cs
│       │   │   ├── VirtualBuildObject.cs
│       │   │   ├── VirtualContents.cs
│       │   │   ├── WaitIndex.cs
│       │   │   ├── WinLinkerVerb.cs
│       │   │   ├── WorkingDirectory.cs
│       │   │   └── XmlFiller.cs
│       │   ├── NuBuild.sln
│       │   ├── NuBuildExecutionService/
│       │   │   ├── .gitignore
│       │   │   ├── CloudExecutionWorkerContent/
│       │   │   │   └── diagnostics.wadcfg
│       │   │   ├── NuBuildExecutionService.ccproj
│       │   │   ├── ServiceConfiguration.Cloud.cscfg
│       │   │   ├── ServiceConfiguration.Local.cscfg
│       │   │   └── ServiceDefinition.csdef
│       │   ├── References/
│       │   │   ├── Microsoft.Threading.Tasks.xml
│       │   │   ├── Microsoft.WindowsAzure.Common.NetFramework.xml
│       │   │   ├── Microsoft.WindowsAzure.Common.xml
│       │   │   ├── Microsoft.WindowsAzure.Management.Compute.xml
│       │   │   ├── Microsoft.WindowsAzure.Management.Storage.xml
│       │   │   └── Microsoft.WindowsAzure.Storage.xml
│       │   ├── Settings.StyleCop
│       │   └── makefile
│       ├── NuBuild2/
│       │   ├── .gitignore
│       │   ├── AzureManager/
│       │   │   ├── App.config
│       │   │   ├── AzureAccount.cs
│       │   │   ├── AzureManager.csproj
│       │   │   ├── Program.cs
│       │   │   ├── Properties/
│       │   │   │   └── AssemblyInfo.cs
│       │   │   └── ServiceConfiguration.cs
│       │   ├── CloudExecutionEngine/
│       │   │   ├── App.config
│       │   │   ├── CloudExecutionEngine.csproj
│       │   │   ├── Program.cs
│       │   │   └── Properties/
│       │   │       └── AssemblyInfo.cs
│       │   ├── CloudExecutionWorker/
│       │   │   ├── CloudExecutionEngine.cs
│       │   │   ├── CloudExecutionWorker.csproj
│       │   │   ├── Properties/
│       │   │   │   └── AssemblyInfo.cs
│       │   │   ├── WorkerRole.cs
│       │   │   └── app.config
│       │   ├── CloudQueueTool/
│       │   │   ├── App.config
│       │   │   ├── CloudQueueTool.csproj
│       │   │   ├── Program.cs
│       │   │   └── Properties/
│       │   │       └── AssemblyInfo.cs
│       │   ├── CustomDictionary.xml
│       │   ├── ItemCacheTool/
│       │   │   ├── App.config
│       │   │   ├── CacheState.cs
│       │   │   ├── ItemCacheTool.csproj
│       │   │   ├── Program.cs
│       │   │   └── Properties/
│       │   │       └── AssemblyInfo.cs
│       │   ├── NuBuild/
│       │   │   ├── .gitignore
│       │   │   ├── AbstractId.cs
│       │   │   ├── AnnotationScanner.cs
│       │   │   ├── App.config
│       │   │   ├── AsmRewriterVerb.cs
│       │   │   ├── BackgroundWorker.cs
│       │   │   ├── BasmObligationIncludes.cs
│       │   │   ├── BasmTransitiveDepsVerb.cs
│       │   │   ├── BatchVerifyVerb.cs
│       │   │   ├── BeatExtensions.cs
│       │   │   ├── BeatIncludes.cs
│       │   │   ├── BeatVerb.cs
│       │   │   ├── BoogieAsmDepBase.cs
│       │   │   ├── BoogieAsmLinkVerb.cs
│       │   │   ├── BoogieAsmVerificationObligationListVerb.cs
│       │   │   ├── BoogieAsmVerifyVerb.cs
│       │   │   ├── BoogieAsmWorkerBase.cs
│       │   │   ├── BoogieVerb.cs
│       │   │   ├── BootableAppVerb.cs
│       │   │   ├── BuildEngine.cs
│       │   │   ├── BuildObject.cs
│       │   │   ├── BuildObjectValuePointer.cs
│       │   │   ├── CachedHash.cs
│       │   │   ├── CloudExecutionQueue.cs
│       │   │   ├── CloudExecutionReport.cs
│       │   │   ├── CloudExecutionRequest.cs
│       │   │   ├── CloudExecutionWaiter.cs
│       │   │   ├── CloudSubmitter.cs
│       │   │   ├── ConcatContext.cs
│       │   │   ├── ConcatContextVerb.cs
│       │   │   ├── ContextContents.cs
│       │   │   ├── ContextGeneratingVerb.cs
│       │   │   ├── CustomManifestParser.cs
│       │   │   ├── DafnyCCVerb.cs
│       │   │   ├── DafnyCompileOneVerb.cs
│       │   │   ├── DafnyExecutableDependencies.cs
│       │   │   ├── DafnyExtensions.cs
│       │   │   ├── DafnyIncludes.cs
│       │   │   ├── DafnySpecVerb.cs
│       │   │   ├── DafnyTransformBaseVerb.cs
│       │   │   ├── DafnyTransitiveDepsVerb.cs
│       │   │   ├── DafnyVerifyOneVerb.cs
│       │   │   ├── DafnyVerifyTreeVerb.cs
│       │   │   ├── DbgFileCopySpeedTest.cs
│       │   │   ├── DbgHashSpeedTest.cs
│       │   │   ├── DbgVerbCounter.cs
│       │   │   ├── DependencyCache.cs
│       │   │   ├── DependencyDisposition.cs
│       │   │   ├── Disposition.cs
│       │   │   ├── EntryStitcherVerb.cs
│       │   │   ├── Hasher.cs
│       │   │   ├── IAsmProducer.cs
│       │   │   ├── IContextGeneratingVerb.cs
│       │   │   ├── IHasher.cs
│       │   │   ├── IIncludeFactory.cs
│       │   │   ├── IIncludePathContext.cs
│       │   │   ├── IItemCache.cs
│       │   │   ├── IObligationsProducer.cs
│       │   │   ├── IProcessInvokeAsyncVerb.cs
│       │   │   ├── IProcessInvoker.cs
│       │   │   ├── IRejectable.cs
│       │   │   ├── IVerb.cs
│       │   │   ├── IVerbWorker.cs
│       │   │   ├── IVerificationResultParser.cs
│       │   │   ├── IncludePathContext.cs
│       │   │   ├── IronRootDirectory.cs
│       │   │   ├── IroncladAppVerb.cs
│       │   │   ├── IronfleetAppVerb.cs
│       │   │   ├── ItemCacheCloud.cs
│       │   │   ├── ItemCacheLocal.cs
│       │   │   ├── ItemCacheMultiplexer.cs
│       │   │   ├── Job.cs
│       │   │   ├── LinkerVerb.cs
│       │   │   ├── Logger.cs
│       │   │   ├── MasmVerb.cs
│       │   │   ├── NMakeVerb.cs
│       │   │   ├── NuBuild.csproj
│       │   │   ├── ObjectFailedException.cs
│       │   │   ├── ObjectMissingFromCacheException.cs
│       │   │   ├── ObjectNotReadyException.cs
│       │   │   ├── OrderPreservingSet.cs
│       │   │   ├── PathNormalizer.cs
│       │   │   ├── PoundDefines.cs
│       │   │   ├── Presentater.cs
│       │   │   ├── Presentation.cs
│       │   │   ├── PresentationBuilder.cs
│       │   │   ├── ProcessInvokeAsyncWorker.cs
│       │   │   ├── ProcessInvoker.cs
│       │   │   ├── Program.cs
│       │   │   ├── Properties/
│       │   │   │   └── AssemblyInfo.cs
│       │   │   ├── Repository.cs
│       │   │   ├── ResultSummaryRecord.cs
│       │   │   ├── Scheduler.cs
│       │   │   ├── SourceConfigurationError.cs
│       │   │   ├── SourcePath.cs
│       │   │   ├── SourcePathIncludeContext.cs
│       │   │   ├── StaticContextVerb.cs
│       │   │   ├── SymDiffBaseVerb.cs
│       │   │   ├── SymDiffCombineVerb.cs
│       │   │   ├── SymDiffEngine.cs
│       │   │   ├── SymDiffExtractVerb.cs
│       │   │   ├── SymDiffInferVerb.cs
│       │   │   ├── SymDiffMergeBaseVerb.cs
│       │   │   ├── SymDiffMergeConfigVerb.cs
│       │   │   ├── SymDiffMergeVerb.cs
│       │   │   ├── ToDo.txt
│       │   │   ├── TransitiveDepsContents.cs
│       │   │   ├── TransitiveDepsVerb.cs
│       │   │   ├── UnverifiedSentinelVirtualContents.cs
│       │   │   ├── UserError.cs
│       │   │   ├── Util.cs
│       │   │   ├── VSProjectParser.cs
│       │   │   ├── VSSolutionParser.cs
│       │   │   ├── VSSolutionVerb.cs
│       │   │   ├── Verb.cs
│       │   │   ├── VerbOutputsContext.cs
│       │   │   ├── VerbOutputsContextVerb.cs
│       │   │   ├── VerbRunner.cs
│       │   │   ├── VerbSyncWorker.cs
│       │   │   ├── VerbToposorter.cs
│       │   │   ├── VerificationMessage.cs
│       │   │   ├── VerificationObligationList.cs
│       │   │   ├── VerificationRequest.cs
│       │   │   ├── VerificationResult.cs
│       │   │   ├── VerificationResultBoogieParser.cs
│       │   │   ├── VerificationResultDafnyParser.cs
│       │   │   ├── VerificationResultSummaryVerb.cs
│       │   │   ├── VerificationResultVerb.cs
│       │   │   ├── VirtualBuildObject.cs
│       │   │   ├── VirtualContents.cs
│       │   │   ├── WaitIndex.cs
│       │   │   ├── WinLinkerVerb.cs
│       │   │   ├── WorkingDirectory.cs
│       │   │   └── XmlFiller.cs
│       │   ├── NuBuild.sln
│       │   ├── NuBuildExecutionService/
│       │   │   ├── .gitignore
│       │   │   ├── CloudExecutionWorkerContent/
│       │   │   │   └── diagnostics.wadcfg
│       │   │   ├── NuBuildExecutionService.ccproj
│       │   │   ├── ServiceConfiguration.Cloud.cscfg
│       │   │   ├── ServiceConfiguration.Local.cscfg
│       │   │   ├── ServiceDefinition.csdef
│       │   │   └── csx/
│       │   │       └── Release/
│       │   │           └── roles/
│       │   │               └── CloudExecutionWorker/
│       │   │                   └── base/
│       │   │                       └── x64/
│       │   │                           └── WaHostBootstrapper.exe.config
│       │   ├── References/
│       │   │   ├── Microsoft.Threading.Tasks.xml
│       │   │   ├── Microsoft.WindowsAzure.Common.NetFramework.xml
│       │   │   ├── Microsoft.WindowsAzure.Common.xml
│       │   │   ├── Microsoft.WindowsAzure.Management.Compute.xml
│       │   │   ├── Microsoft.WindowsAzure.Management.Storage.xml
│       │   │   └── Microsoft.WindowsAzure.Storage.xml
│       │   ├── Settings.StyleCop
│       │   ├── makefile
│       │   ├── modules.log
│       │   └── modules.result
│       ├── SymDiff/
│       │   ├── AIFramework.pdb
│       │   ├── AbsInt.pdb
│       │   ├── Basetypes.pdb
│       │   ├── CodeContractsExtender.pdb
│       │   ├── Core.pdb
│       │   ├── Graph.pdb
│       │   ├── Model.pdb
│       │   ├── ParserHelper.pdb
│       │   ├── Provers.SMTLib.pdb
│       │   ├── SymDiff.exe.config
│       │   ├── SymDiff.pdb
│       │   ├── SymDiff.vshost.exe.config
│       │   ├── SymDiff.vshost.exe.manifest
│       │   ├── TypedUnivBackPred2.sx
│       │   ├── UnivBackPred2.smt
│       │   ├── UnivBackPred2.smt2
│       │   ├── UnivBackPred2.sx
│       │   ├── VCExpr.pdb
│       │   └── VCGeneration.pdb
│       ├── build/
│       │   └── x86_x86/
│       │       ├── cl.exe.config
│       │       └── link.exe.config
│       ├── fsharp/
│       │   ├── FSharp.Compiler.CodeDom.xml
│       │   ├── FSharp.Core.pdb
│       │   ├── FSharp.Core.xml
│       │   ├── FSharp.PowerPack.Build.Tasks.pdb
│       │   ├── FSharp.PowerPack.Build.Tasks.xml
│       │   ├── FSharp.PowerPack.Linq.pdb
│       │   ├── FSharp.PowerPack.Linq.xml
│       │   ├── FSharp.PowerPack.Metadata.pdb
│       │   ├── FSharp.PowerPack.Metadata.xml
│       │   ├── FSharp.PowerPack.pdb
│       │   └── FSharp.PowerPack.xml
│       ├── scripts/
│       │   ├── .gitignore
│       │   ├── binary_to_c_symbols.py
│       │   ├── build-standalone-asm.py
│       │   ├── build-standalone-init.sh
│       │   ├── zero-obj.bz2
│       │   └── zero.asm
│       └── standalone/
│           ├── .gitignore
│           ├── StandAloneSupport.sln
│           ├── StandAloneSupport.vcxproj
│           ├── StandAloneSupport.vcxproj.filters
│           └── support.cpp
└── ironfleet/
    ├── .gitignore
    ├── CODE.md
    ├── CONTRIBUTING.md
    ├── IRONROOT.sentinel
    ├── LICENSE
    ├── README.md
    ├── SConstruct
    ├── STYLE.md
    ├── src/
    │   ├── CreateIronServiceCerts/
    │   │   ├── .gitignore
    │   │   ├── CreateIronServiceCerts.csproj
    │   │   ├── CreateIronServiceCerts.sln
    │   │   ├── Params.cs
    │   │   └── Program.cs
    │   ├── Dafny/
    │   │   ├── .gitignore
    │   │   ├── Distributed/
    │   │   │   ├── Common/
    │   │   │   │   ├── .gitignore
    │   │   │   │   ├── Collections/
    │   │   │   │   │   ├── CountMatches.i.dfy
    │   │   │   │   │   ├── Maps.i.dfy
    │   │   │   │   │   ├── Maps2.i.dfy
    │   │   │   │   │   ├── Maps2.s.dfy
    │   │   │   │   │   ├── Multisets.s.dfy
    │   │   │   │   │   ├── Seqs.i.dfy
    │   │   │   │   │   ├── Seqs.s.dfy
    │   │   │   │   │   └── Sets.i.dfy
    │   │   │   │   ├── Framework/
    │   │   │   │   │   ├── AbstractService.s.dfy
    │   │   │   │   │   ├── DistributedSystem.s.dfy
    │   │   │   │   │   ├── Environment.s.dfy
    │   │   │   │   │   ├── EnvironmentSynchrony.s.dfy
    │   │   │   │   │   ├── EnvironmentSynchronyLemmas.i.dfy
    │   │   │   │   │   ├── Host.s.dfy
    │   │   │   │   │   ├── HostQueueLemmas.i.dfy
    │   │   │   │   │   └── Main.s.dfy
    │   │   │   │   ├── Logic/
    │   │   │   │   │   ├── Option.i.dfy
    │   │   │   │   │   └── Temporal/
    │   │   │   │   │       ├── Heuristics.i.dfy
    │   │   │   │   │       ├── Induction.i.dfy
    │   │   │   │   │       ├── LeadsTo.i.dfy
    │   │   │   │   │       ├── Monotonicity.i.dfy
    │   │   │   │   │       ├── Rules.i.dfy
    │   │   │   │   │       ├── Sets.i.dfy
    │   │   │   │   │       ├── Temporal.s.dfy
    │   │   │   │   │       ├── Time.i.dfy
    │   │   │   │   │       ├── Time.s.dfy
    │   │   │   │   │       └── WF1.i.dfy
    │   │   │   │   └── Native/
    │   │   │   │       ├── Io.s.dfy
    │   │   │   │       ├── IoFramework.cs
    │   │   │   │       ├── IoLemmas.i.dfy
    │   │   │   │       ├── IoNative.cs
    │   │   │   │       ├── NativeTypes.i.dfy
    │   │   │   │       └── NativeTypes.s.dfy
    │   │   │   ├── Impl/
    │   │   │   │   ├── Common/
    │   │   │   │   │   ├── CmdLineParser.i.dfy
    │   │   │   │   │   ├── GenericMarshalling.i.dfy
    │   │   │   │   │   ├── GenericRefinement.i.dfy
    │   │   │   │   │   ├── MarshallInt.i.dfy
    │   │   │   │   │   ├── NetClient.i.dfy
    │   │   │   │   │   ├── NodeIdentity.i.dfy
    │   │   │   │   │   ├── SeqIsUnique.i.dfy
    │   │   │   │   │   ├── SeqIsUniqueDef.i.dfy
    │   │   │   │   │   ├── UpperBound.i.dfy
    │   │   │   │   │   └── Util.i.dfy
    │   │   │   │   ├── LiveSHT/
    │   │   │   │   │   ├── CmdLineParser.i.dfy
    │   │   │   │   │   ├── Host.i.dfy
    │   │   │   │   │   ├── NetSHT.i.dfy
    │   │   │   │   │   ├── SchedulerImpl.i.dfy
    │   │   │   │   │   ├── SchedulerModel.i.dfy
    │   │   │   │   │   └── Unsendable.i.dfy
    │   │   │   │   ├── Lock/
    │   │   │   │   │   ├── CmdLineParser.i.dfy
    │   │   │   │   │   ├── Host.i.dfy
    │   │   │   │   │   ├── Message.i.dfy
    │   │   │   │   │   ├── NetLock.i.dfy
    │   │   │   │   │   ├── Node.i.dfy
    │   │   │   │   │   ├── NodeImpl.i.dfy
    │   │   │   │   │   └── PacketParsing.i.dfy
    │   │   │   │   ├── RSL/
    │   │   │   │   │   ├── AcceptorModel.i.dfy
    │   │   │   │   │   ├── AcceptorState.i.dfy
    │   │   │   │   │   ├── AppInterface.i.dfy
    │   │   │   │   │   ├── Broadcast.i.dfy
    │   │   │   │   │   ├── CClockReading.i.dfy
    │   │   │   │   │   ├── CLastCheckpointedMap.i.dfy
    │   │   │   │   │   ├── CMessage.i.dfy
    │   │   │   │   │   ├── CMessageRefinements.i.dfy
    │   │   │   │   │   ├── COperationNumberSort.i.dfy
    │   │   │   │   │   ├── CPaxosConfiguration.i.dfy
    │   │   │   │   │   ├── CTypes.i.dfy
    │   │   │   │   │   ├── CmdLineParser.i.dfy
    │   │   │   │   │   ├── ConstantsState.i.dfy
    │   │   │   │   │   ├── ElectionModel.i.dfy
    │   │   │   │   │   ├── ElectionState.i.dfy
    │   │   │   │   │   ├── ExecutorModel.i.dfy
    │   │   │   │   │   ├── ExecutorState.i.dfy
    │   │   │   │   │   ├── Host.i.dfy
    │   │   │   │   │   ├── LearnerModel.i.dfy
    │   │   │   │   │   ├── LearnerState.i.dfy
    │   │   │   │   │   ├── MinCQuorumSize.i.dfy
    │   │   │   │   │   ├── NetRSL.i.dfy
    │   │   │   │   │   ├── PacketParsing.i.dfy
    │   │   │   │   │   ├── ParametersState.i.dfy
    │   │   │   │   │   ├── PaxosWorldState.i.dfy
    │   │   │   │   │   ├── ProposerLemmas.i.dfy
    │   │   │   │   │   ├── ProposerModel.i.dfy
    │   │   │   │   │   ├── ProposerState.i.dfy
    │   │   │   │   │   ├── QRelations.i.dfy
    │   │   │   │   │   ├── ReplicaConstantsState.i.dfy
    │   │   │   │   │   ├── ReplicaImplClass.i.dfy
    │   │   │   │   │   ├── ReplicaImplDelivery.i.dfy
    │   │   │   │   │   ├── ReplicaImplLemmas.i.dfy
    │   │   │   │   │   ├── ReplicaImplMain.i.dfy
    │   │   │   │   │   ├── ReplicaImplNoReceiveClock.i.dfy
    │   │   │   │   │   ├── ReplicaImplNoReceiveNoClock.i.dfy
    │   │   │   │   │   ├── ReplicaImplProcessPacketNoClock.i.dfy
    │   │   │   │   │   ├── ReplicaImplProcessPacketX.i.dfy
    │   │   │   │   │   ├── ReplicaImplReadClock.i.dfy
    │   │   │   │   │   ├── ReplicaModel-Part1.i.dfy
    │   │   │   │   │   ├── ReplicaModel-Part2.i.dfy
    │   │   │   │   │   ├── ReplicaModel-Part3.i.dfy
    │   │   │   │   │   ├── ReplicaModel-Part4.i.dfy
    │   │   │   │   │   ├── ReplicaModel-Part5.i.dfy
    │   │   │   │   │   ├── ReplicaModel.i.dfy
    │   │   │   │   │   ├── ReplicaState.i.dfy
    │   │   │   │   │   └── Unsendable.i.dfy
    │   │   │   │   └── SHT/
    │   │   │   │       ├── AppInterface.i.dfy
    │   │   │   │       ├── AppInterfaceConcrete.i.dfy
    │   │   │   │       ├── CMessage.i.dfy
    │   │   │   │       ├── ConstantsState.i.dfy
    │   │   │   │       ├── DelegationLookup.i.dfy
    │   │   │   │       ├── Delegations.i.dfy
    │   │   │   │       ├── HostModel.i.dfy
    │   │   │   │       ├── HostState.i.dfy
    │   │   │   │       ├── PacketParsing.i.dfy
    │   │   │   │       ├── Parameters.i.dfy
    │   │   │   │       ├── SHTConcreteConfiguration.i.dfy
    │   │   │   │       ├── SingleDeliveryModel.i.dfy
    │   │   │   │       └── SingleDeliveryState.i.dfy
    │   │   │   ├── Protocol/
    │   │   │   │   ├── Common/
    │   │   │   │   │   ├── Liveness/
    │   │   │   │   │   │   └── RTSchedule.i.dfy
    │   │   │   │   │   ├── NodeIdentity.i.dfy
    │   │   │   │   │   ├── NodeIdentity.s.dfy
    │   │   │   │   │   └── UpperBound.s.dfy
    │   │   │   │   ├── LiveSHT/
    │   │   │   │   │   ├── LivenessProof/
    │   │   │   │   │   │   ├── Acks.i.dfy
    │   │   │   │   │   │   ├── Actions.i.dfy
    │   │   │   │   │   │   ├── Assumptions.i.dfy
    │   │   │   │   │   │   ├── Constants.i.dfy
    │   │   │   │   │   │   ├── Environment.i.dfy
    │   │   │   │   │   │   ├── InfiniteSends.i.dfy
    │   │   │   │   │   │   ├── Invariants.i.dfy
    │   │   │   │   │   │   ├── LivenessProof.i.dfy
    │   │   │   │   │   │   ├── PacketReceipt.i.dfy
    │   │   │   │   │   │   ├── PacketSending.i.dfy
    │   │   │   │   │   │   ├── RefinementInvariants.i.dfy
    │   │   │   │   │   │   ├── RoundRobin.i.dfy
    │   │   │   │   │   │   └── Seqno.i.dfy
    │   │   │   │   │   ├── RefinementProof/
    │   │   │   │   │   │   ├── Environment.i.dfy
    │   │   │   │   │   │   ├── EnvironmentLemmas.i.dfy
    │   │   │   │   │   │   ├── EnvironmentRefinement.i.dfy
    │   │   │   │   │   │   ├── SHT.i.dfy
    │   │   │   │   │   │   ├── SHTLemmas.i.dfy
    │   │   │   │   │   │   ├── SHTRefinement.i.dfy
    │   │   │   │   │   │   ├── SchedulerLemmas.i.dfy
    │   │   │   │   │   │   └── SchedulerRefinement.i.dfy
    │   │   │   │   │   └── Scheduler.i.dfy
    │   │   │   │   ├── Lock/
    │   │   │   │   │   ├── Node.i.dfy
    │   │   │   │   │   ├── RefinementProof/
    │   │   │   │   │   │   ├── DistributedSystem.i.dfy
    │   │   │   │   │   │   ├── Refinement.i.dfy
    │   │   │   │   │   │   └── RefinementProof.i.dfy
    │   │   │   │   │   └── Types.i.dfy
    │   │   │   │   ├── RSL/
    │   │   │   │   │   ├── Acceptor.i.dfy
    │   │   │   │   │   ├── Broadcast.i.dfy
    │   │   │   │   │   ├── ClockReading.i.dfy
    │   │   │   │   │   ├── CommonProof/
    │   │   │   │   │   │   ├── Actions.i.dfy
    │   │   │   │   │   │   ├── Assumptions.i.dfy
    │   │   │   │   │   │   ├── CanonicalizeBallot.i.dfy
    │   │   │   │   │   │   ├── Chosen.i.dfy
    │   │   │   │   │   │   ├── Constants.i.dfy
    │   │   │   │   │   │   ├── Environment.i.dfy
    │   │   │   │   │   │   ├── LearnerState.i.dfy
    │   │   │   │   │   │   ├── LogTruncationPoint.i.dfy
    │   │   │   │   │   │   ├── MaxBallot.i.dfy
    │   │   │   │   │   │   ├── MaxBallotISent1a.i.dfy
    │   │   │   │   │   │   ├── Message1b.i.dfy
    │   │   │   │   │   │   ├── Message2a.i.dfy
    │   │   │   │   │   │   ├── Message2b.i.dfy
    │   │   │   │   │   │   ├── PacketSending.i.dfy
    │   │   │   │   │   │   ├── Quorum.i.dfy
    │   │   │   │   │   │   ├── Received1b.i.dfy
    │   │   │   │   │   │   ├── ReplyCache.i.dfy
    │   │   │   │   │   │   └── Requests.i.dfy
    │   │   │   │   │   ├── Configuration.i.dfy
    │   │   │   │   │   ├── Constants.i.dfy
    │   │   │   │   │   ├── DistributedSystem.i.dfy
    │   │   │   │   │   ├── Election.i.dfy
    │   │   │   │   │   ├── Environment.i.dfy
    │   │   │   │   │   ├── Executor.i.dfy
    │   │   │   │   │   ├── Learner.i.dfy
    │   │   │   │   │   ├── LivenessProof/
    │   │   │   │   │   │   ├── Assumptions.i.dfy
    │   │   │   │   │   │   ├── Catchup.i.dfy
    │   │   │   │   │   │   ├── Environment.i.dfy
    │   │   │   │   │   │   ├── EpochLength.i.dfy
    │   │   │   │   │   │   ├── Execution.i.dfy
    │   │   │   │   │   │   ├── GenericInvariants.i.dfy
    │   │   │   │   │   │   ├── Invariants.i.dfy
    │   │   │   │   │   │   ├── LivenessProof.i.dfy
    │   │   │   │   │   │   ├── MaxBalReflected.i.dfy
    │   │   │   │   │   │   ├── MaxBallot.i.dfy
    │   │   │   │   │   │   ├── MaxBallotISent1a.i.dfy
    │   │   │   │   │   │   ├── NextOp.i.dfy
    │   │   │   │   │   │   ├── PacketHandling.i.dfy
    │   │   │   │   │   │   ├── Phase1a.i.dfy
    │   │   │   │   │   │   ├── Phase1b.i.dfy
    │   │   │   │   │   │   ├── Phase1bCont.i.dfy
    │   │   │   │   │   │   ├── Phase2Conclusion.i.dfy
    │   │   │   │   │   │   ├── Phase2Invariants.i.dfy
    │   │   │   │   │   │   ├── Phase2Start.i.dfy
    │   │   │   │   │   │   ├── Phase2a.i.dfy
    │   │   │   │   │   │   ├── Phase2b.i.dfy
    │   │   │   │   │   │   ├── Phase2c.i.dfy
    │   │   │   │   │   │   ├── RealTime.i.dfy
    │   │   │   │   │   │   ├── RequestQueue.i.dfy
    │   │   │   │   │   │   ├── RequestsReceived.i.dfy
    │   │   │   │   │   │   ├── RoundRobin.i.dfy
    │   │   │   │   │   │   ├── Seqno.i.dfy
    │   │   │   │   │   │   ├── StablePeriod.i.dfy
    │   │   │   │   │   │   ├── StateTransfer.i.dfy
    │   │   │   │   │   │   ├── ViewAdvance.i.dfy
    │   │   │   │   │   │   ├── ViewChange.i.dfy
    │   │   │   │   │   │   ├── ViewPersistence.i.dfy
    │   │   │   │   │   │   ├── ViewPropagation.i.dfy
    │   │   │   │   │   │   ├── ViewPropagation2.i.dfy
    │   │   │   │   │   │   ├── ViewSuspicion.i.dfy
    │   │   │   │   │   │   └── WF1.i.dfy
    │   │   │   │   │   ├── Message.i.dfy
    │   │   │   │   │   ├── Parameters.i.dfy
    │   │   │   │   │   ├── Proposer.i.dfy
    │   │   │   │   │   ├── RefinementProof/
    │   │   │   │   │   │   ├── Chosen.i.dfy
    │   │   │   │   │   │   ├── Execution.i.dfy
    │   │   │   │   │   │   ├── HandleRequestBatch.i.dfy
    │   │   │   │   │   │   ├── Refinement.i.dfy
    │   │   │   │   │   │   ├── Requests.i.dfy
    │   │   │   │   │   │   └── StateMachine.i.dfy
    │   │   │   │   │   ├── Replica.i.dfy
    │   │   │   │   │   ├── StateMachine.i.dfy
    │   │   │   │   │   └── Types.i.dfy
    │   │   │   │   └── SHT/
    │   │   │   │       ├── Configuration.i.dfy
    │   │   │   │       ├── Delegations.i.dfy
    │   │   │   │       ├── Host.i.dfy
    │   │   │   │       ├── Keys.i.dfy
    │   │   │   │       ├── Message.i.dfy
    │   │   │   │       ├── Network.i.dfy
    │   │   │   │       ├── Parameters.i.dfy
    │   │   │   │       ├── RefinementProof/
    │   │   │   │       │   ├── InvDefs.i.dfy
    │   │   │   │       │   ├── InvProof.i.dfy
    │   │   │   │       │   ├── Refinement.i.dfy
    │   │   │   │       │   ├── RefinementProof.i.dfy
    │   │   │   │       │   └── SHT.i.dfy
    │   │   │   │       ├── SingleDelivery.i.dfy
    │   │   │   │       └── SingleMessage.i.dfy
    │   │   │   ├── Services/
    │   │   │   │   ├── Lock/
    │   │   │   │   │   ├── .gitignore
    │   │   │   │   │   ├── AbstractService.s.dfy
    │   │   │   │   │   ├── LockDistributedSystem.i.dfy
    │   │   │   │   │   ├── Main.i.dfy
    │   │   │   │   │   └── Marshall.i.dfy
    │   │   │   │   ├── RSL/
    │   │   │   │   │   ├── .gitignore
    │   │   │   │   │   ├── AbstractService.s.dfy
    │   │   │   │   │   ├── AppStateMachine.s.dfy
    │   │   │   │   │   ├── Main.i.dfy
    │   │   │   │   │   ├── Marshall.i.dfy
    │   │   │   │   │   ├── Program.cs
    │   │   │   │   │   └── RSLDistributedSystem.i.dfy
    │   │   │   │   └── SHT/
    │   │   │   │       ├── .gitignore
    │   │   │   │       ├── AbstractService.s.dfy
    │   │   │   │       ├── AppInterface.i.dfy
    │   │   │   │       ├── AppInterface.s.dfy
    │   │   │   │       ├── Bytes.s.dfy
    │   │   │   │       ├── HT.s.dfy
    │   │   │   │       ├── Main.i.dfy
    │   │   │   │       ├── Marshall.i.dfy
    │   │   │   │       └── SHTDistributedSystem.i.dfy
    │   │   │   └── apps.dfy.batch
    │   │   └── Libraries/
    │   │       ├── .gitignore
    │   │       └── Math/
    │   │           ├── .gitignore
    │   │           ├── div.i.dfy
    │   │           ├── div_auto.i.dfy
    │   │           ├── div_auto_proofs.i.dfy
    │   │           ├── div_def.i.dfy
    │   │           ├── div_nonlinear.i.dfy
    │   │           ├── mod_auto.i.dfy
    │   │           ├── mod_auto_proofs.i.dfy
    │   │           ├── mul.i.dfy
    │   │           ├── mul_auto.i.dfy
    │   │           ├── mul_auto_proofs.i.dfy
    │   │           ├── mul_nonlinear.i.dfy
    │   │           ├── power.i.dfy
    │   │           ├── power2.i.dfy
    │   │           ├── power2s.i.dfy
    │   │           └── powers.i.dfy
    │   ├── IronLockServer/
    │   │   ├── .gitignore
    │   │   ├── IronLockServer.csproj
    │   │   ├── IronLockServer.sln
    │   │   ├── Params.cs
    │   │   └── Program.cs
    │   ├── IronRSLClient/
    │   │   ├── .gitignore
    │   │   ├── IronRSLClient.csproj
    │   │   ├── IronRSLClient.sln
    │   │   └── RSLClient.cs
    │   ├── IronRSLCounterClient/
    │   │   ├── .gitignore
    │   │   ├── Client.cs
    │   │   ├── IronRSLCounterClient.csproj
    │   │   ├── IronRSLCounterClient.sln
    │   │   ├── Params.cs
    │   │   └── Program.cs
    │   ├── IronRSLCounterServer/
    │   │   ├── .gitignore
    │   │   ├── IronRSLCounterServer.csproj
    │   │   ├── IronRSLCounterServer.sln
    │   │   └── Service.cs
    │   ├── IronRSLKVClient/
    │   │   ├── .gitignore
    │   │   ├── Client.cs
    │   │   ├── IronRSLKVClient.csproj
    │   │   ├── IronRSLKVClient.sln
    │   │   ├── Params.cs
    │   │   └── Program.cs
    │   ├── IronRSLKVServer/
    │   │   ├── .gitignore
    │   │   ├── IronRSLKVServer.csproj
    │   │   ├── IronRSLKVServer.sln
    │   │   ├── KVMessages.cs
    │   │   └── Service.cs
    │   ├── IronSHTClient/
    │   │   ├── .gitignore
    │   │   ├── Client.cs
    │   │   ├── IronSHTClient.csproj
    │   │   ├── IronSHTClient.sln
    │   │   ├── Params.cs
    │   │   └── Program.cs
    │   ├── IronSHTServer/
    │   │   ├── .gitignore
    │   │   ├── IronSHTServer.csproj
    │   │   ├── IronSHTServer.sln
    │   │   ├── Params.cs
    │   │   └── Program.cs
    │   ├── IronfleetCommon/
    │   │   ├── Networking.cs
    │   │   ├── Profiler.cs
    │   │   └── Timer.cs
    │   ├── RedisClient/
    │   │   ├── .gitignore
    │   │   ├── IronfleetShtClient/
    │   │   │   ├── App.config
    │   │   │   ├── Experiment.cs
    │   │   │   ├── IVocabularyModule.cs
    │   │   │   ├── IronfleetShtClient.csproj
    │   │   │   ├── KeyValueStoreClient.cs
    │   │   │   ├── Program.cs
    │   │   │   ├── Properties/
    │   │   │   │   └── AssemblyInfo.cs
    │   │   │   ├── RedisClient.cs
    │   │   │   ├── StrawDog.cs
    │   │   │   ├── Vocabulary.cs
    │   │   │   └── packages.config
    │   │   └── IronfleetShtClient.sln
    │   └── TestIoFramework/
    │       ├── .gitignore
    │       ├── Params.cs
    │       ├── Program.cs
    │       ├── TestIoFramework.csproj
    │       └── TestIoFramework.sln
    └── tools/
        ├── DepGraph/
        │   └── parse.py
        └── scripts/
            ├── .gitignore
            ├── build-summary.py
            ├── check-lf.ps1
            ├── dafny-line-count.py
            ├── dafny-oneproc.py
            ├── dafnyBuildVsix.ps1
            ├── expand-tabs-in-place
            ├── function_call_graph.py
            ├── integration-project/
            │   ├── build.py
            │   ├── build.pyproj
            │   ├── build.sln
            │   ├── make-project.sln
            │   └── make-project.vcxproj
            ├── integration-testing.ps1
            └── purge.py
Download .txt
Showing preview only (370K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (4280 symbols across 422 files)

FILE: ironclad-apps/src/Checked/BootLoader/SingLdrPc/bl.h
  type CHAR (line 77) | typedef char                CHAR;
  type UCHAR (line 78) | typedef unsigned char       UCHAR;
  type INT8 (line 80) | typedef char                INT8;
  type UINT8 (line 81) | typedef unsigned char       UINT8;
  type INT16 (line 82) | typedef short               INT16;
  type UINT16 (line 83) | typedef unsigned short      UINT16;
  type INT32 (line 84) | typedef long                INT32;
  type UINT32 (line 85) | typedef unsigned long       UINT32;
  type __int64 (line 86) | typedef __int64             INT64;
  type UINT64 (line 87) | typedef unsigned __int64    UINT64;
  type INT32 (line 91) | typedef INT32               LONG_PTR;
  type UINT32 (line 92) | typedef UINT32              ULONG_PTR;
  type INT64 (line 96) | typedef INT64               LONG_PTR;
  type UINT64 (line 97) | typedef UINT64              ULONG_PTR;
  type BOOLEAN (line 106) | typedef unsigned char       BOOLEAN;
  type VOID (line 112) | typedef void                VOID;
  type VOID (line 113) | typedef VOID *              PVOID;
  type VOID (line 114) | typedef const VOID *        PCVOID;
  type CHAR (line 115) | typedef CHAR *              PCHAR;
  type INT8 (line 116) | typedef INT8 *              PINT8;
  type UINT8 (line 117) | typedef UINT8 *             PUINT8;
  type INT16 (line 118) | typedef INT16 *             PINT16;
  type UINT16 (line 119) | typedef UINT16 *            PUINT16;
  type INT32 (line 120) | typedef INT32 *             PINT32;
  type UINT32 (line 121) | typedef UINT32 *            PUINT32;
  type INT64 (line 122) | typedef INT64 *             PINT64;
  type UINT64 (line 123) | typedef UINT64 *            PUINT64;
  type LONG_PTR (line 124) | typedef LONG_PTR *          PLONG_PTR;
  type ULONG_PTR (line 125) | typedef ULONG_PTR *         PULONG_PTR;
  type BOOLEAN (line 126) | typedef BOOLEAN             PBOOLEAN;
  type wchar_t (line 132) | typedef wchar_t             WCHAR;
  type WCHAR (line 133) | typedef WCHAR *             PWCHAR;
  type WCHAR (line 134) | typedef const WCHAR *       PCWSTR;
  type CHAR (line 135) | typedef const CHAR *        PCSTR;
  type LIST_ENTRY (line 256) | typedef struct _LIST_ENTRY {
  type FAR_POINTER (line 302) | typedef struct _FAR_POINTER {
  type BEB (line 324) | typedef struct _BEB {
  function FORCEINLINE (line 354) | FORCEINLINE
  type BL_LEGACY_CALL_CONTEXT (line 390) | typedef struct _BL_LEGACY_CALL_CONTEXT {
  type INT13_DRIVE_PARAMETERS (line 535) | typedef struct _INT13_DRIVE_PARAMETERS {
  type KD_PACKET (line 707) | typedef struct _KD_PACKET {
  type KD_PRINT_STRING (line 715) | typedef struct _KD_PRINT_STRING {
  type KD_GET_STRING (line 719) | typedef struct _KD_GET_STRING {
  type KD_DEBUG_IO (line 724) | typedef struct _KD_DEBUG_IO {
  type BL_SMAP_ENTRY (line 807) | typedef struct _BL_SMAP_ENTRY {
  type BL_SMAP (line 816) | typedef struct _BL_SMAP {
  type PNP_INSTALLATION_CHECK (line 853) | typedef struct _PNP_INSTALLATION_CHECK {
  type PNP_SYSTEM_DEVICE_NODE (line 871) | typedef struct _PNP_SYSTEM_DEVICE_NODE {
  type PNP_ISA_CONFIGURATION (line 879) | typedef struct _PNP_ISA_CONFIGURATION {
  type PCI_INSTALLATION_CHECK (line 901) | typedef struct _PCI_INSTALLATION_CHECK {
  type CODE_SEGMENT (line 956) | typedef struct _CODE_SEGMENT {
  type DATA_SEGMENT (line 974) | typedef struct _DATA_SEGMENT {
  type SYSTEM_SEGMENT (line 995) | typedef struct _SYSTEM_SEGMENT {
  type GDTR (line 1015) | typedef struct _GDTR {
  type IDTR (line 1022) | typedef struct _IDTR {
  type BL_MM_PHYSICAL_REGION (line 1147) | typedef struct _BL_MM_PHYSICAL_REGION {
  type BL_TIME (line 1309) | typedef struct _BL_TIME {
  type BL_TRAP_CONTEXT (line 1377) | typedef struct _BL_TRAP_CONTEXT {
  type IDTE (line 1425) | typedef struct _IDTE {

FILE: ironclad-apps/src/Checked/BootLoader/SingLdrPc/blacpi.cpp
  type _ACPI_GAS (line 37) | struct _ACPI_GAS {
  type _ACPI_RSDP (line 51) | struct _ACPI_RSDP {
  type _ACPI_RSDT (line 69) | struct _ACPI_RSDT {
  type _ACPI_MADT (line 88) | struct _ACPI_MADT {
  type _ACPI_MADT_ENTRY (line 107) | struct _ACPI_MADT_ENTRY {
  type _ACPI_PROCESSOR_LOCAL_APIC (line 112) | struct _ACPI_PROCESSOR_LOCAL_APIC {
  type _ACPI_SRAT (line 132) | struct _ACPI_SRAT {
  type _ACPI_SRAT_PROC_AFFINITY_ENTRY (line 154) | struct _ACPI_SRAT_PROC_AFFINITY_ENTRY {
  type _ACPI_SRAT_MEM_AFFINITY_ENTRY (line 165) | struct _ACPI_SRAT_MEM_AFFINITY_ENTRY {
  type _ACPI_FADT (line 185) | struct _ACPI_FADT {
  function PACPI_RSDP (line 217) | PACPI_RSDP
  function PACPI_RSDT (line 291) | PACPI_RSDT
  function PACPI_MADT (line 336) | PACPI_MADT
  function PACPI_SRAT (line 383) | PACPI_SRAT
  function VOID (line 433) | VOID
  function UINT32 (line 506) | UINT32
  function PACPI_FADT (line 567) | PACPI_FADT
  function VOID (line 613) | VOID
  function VOID (line 658) | VOID

FILE: ironclad-apps/src/Checked/BootLoader/SingLdrPc/blcdrom.cpp
  type _ISO9660_LOGICAL_BLOCK (line 31) | struct _ISO9660_LOGICAL_BLOCK {
  type _ISO9660_DIRECTORY_RECORD (line 37) | struct _ISO9660_DIRECTORY_RECORD {
  type _ISO9660_PRIMARY_VOLUME_DESCRIPTOR (line 67) | struct _ISO9660_PRIMARY_VOLUME_DESCRIPTOR {
  type _ISO9660_SUPPLEMENTARY_VOLUME_DESCRIPTOR (line 108) | struct _ISO9660_SUPPLEMENTARY_VOLUME_DESCRIPTOR {
  type _ISO9660_VOLUME_DESCRIPTOR (line 149) | struct _ISO9660_VOLUME_DESCRIPTOR {
  function VOID (line 168) | VOID
  function BOOLEAN (line 233) | BOOLEAN
  function BOOLEAN (line 378) | BOOLEAN
  function BOOLEAN (line 424) | BOOLEAN
  function VOID (line 519) | VOID

FILE: ironclad-apps/src/Checked/BootLoader/SingLdrPc/blcom.cpp
  function BOOLEAN (line 57) | BOOLEAN
  function BOOLEAN (line 156) | BOOLEAN
  function BOOLEAN (line 240) | BOOLEAN
  function UINT8 (line 294) | UINT8

FILE: ironclad-apps/src/Checked/BootLoader/SingLdrPc/blentry.cpp
  function VOID (line 24) | VOID
  function VOID (line 43) | VOID
  function VOID (line 185) | VOID

FILE: ironclad-apps/src/Checked/BootLoader/SingLdrPc/blfat.cpp
  type _MBR_PARTITION (line 25) | struct _MBR_PARTITION {
  type _MBR (line 38) | struct _MBR {
  type _FAT_SECTOR (line 64) | struct __declspec(align(FAT_SECTOR_SIZE)) _FAT_SECTOR {
  type _FAT16_BOOT_SECTOR (line 68) | struct _FAT16_BOOT_SECTOR {
  type _FAT32_BOOT_SECTOR (line 95) | struct _FAT32_BOOT_SECTOR {
  type _FAT_BOOT_SECTOR (line 129) | struct _FAT_BOOT_SECTOR {
  type _FAT_DIRECTORY_ENTRY (line 153) | struct _FAT_DIRECTORY_ENTRY {
  type _FAT_NAME (line 185) | struct _FAT_NAME {
  function VOID (line 224) | VOID
  function BOOLEAN (line 242) | BOOLEAN
  function BOOLEAN (line 320) | BOOLEAN
  function PFAT_DIRECTORY_ENTRY (line 497) | PFAT_DIRECTORY_ENTRY
  function BOOLEAN (line 571) | BOOLEAN
  function BOOLEAN (line 618) | BOOLEAN
  function BOOLEAN (line 738) | BOOLEAN
  function BOOLEAN (line 915) | BOOLEAN
  function BOOLEAN (line 953) | BOOLEAN
  function BOOLEAN (line 1002) | BOOLEAN
  function VOID (line 1056) | VOID
  function BOOLEAN (line 1223) | BOOLEAN
  function VOID (line 1277) | VOID
  function VOID (line 1443) | VOID

FILE: ironclad-apps/src/Checked/BootLoader/SingLdrPc/blflash.cpp
  type FLASH_HEADER (line 17) | struct FLASH_HEADER
  type FLASH_FILE (line 27) | struct FLASH_FILE
  function FLASH_FILE (line 37) | FLASH_FILE *
  function FLASH_FILE (line 68) | FLASH_FILE *
  function BOOLEAN (line 100) | BOOLEAN
  function BOOLEAN (line 160) | BOOLEAN
  function VOID (line 183) | VOID

FILE: ironclad-apps/src/Checked/BootLoader/SingLdrPc/blkd.cpp
  function VOID (line 19) | VOID
  function UINT32 (line 42) | UINT32
  function BOOLEAN (line 80) | BOOLEAN
  function BOOLEAN (line 140) | BOOLEAN
  function VOID (line 184) | VOID

FILE: ironclad-apps/src/Checked/BootLoader/SingLdrPc/blkd1394.cpp
  function BOOLEAN (line 20) | BOOLEAN
  function BOOLEAN (line 29) | BOOLEAN
  function BOOLEAN (line 37) | BOOLEAN
  type _DEBUG_1394_SEND_PACKET (line 70) | struct _DEBUG_1394_SEND_PACKET {
  type _DEBUG_1394_RECEIVE_PACKET (line 80) | struct _DEBUG_1394_RECEIVE_PACKET {
  type _DEBUG_1394_CONFIG (line 89) | struct _DEBUG_1394_CONFIG {
  type _DEBUG_1394_DATA (line 101) | struct _DEBUG_1394_DATA {
  function UINT32 (line 124) | UINT32
  function UINT32 (line 164) | UINT32
  function UINT32 (line 192) | UINT32
  function UINT16 (line 230) | UINT16
  function BOOLEAN (line 268) | BOOLEAN
  function VOID (line 625) | VOID
  function BOOLEAN (line 671) | BOOLEAN
  function BOOLEAN (line 837) | BOOLEAN

FILE: ironclad-apps/src/Checked/BootLoader/SingLdrPc/blkd1394.h
  type VERSION_REGISTER (line 26) | typedef union _VERSION_REGISTER {
  type VENDOR_ID_REGISTER (line 38) | typedef union _VENDOR_ID_REGISTER {
  type GUID_ROM_REGISTER (line 47) | typedef union _GUID_ROM_REGISTER {
  type AT_RETRIES_REGISTER (line 60) | typedef union _AT_RETRIES_REGISTER {
  type CSR_CONTROL_REGISTER (line 73) | typedef union _CSR_CONTROL_REGISTER {
  type CONFIG_ROM_HEADER_REGISTER (line 83) | typedef union _CONFIG_ROM_HEADER_REGISTER {
  type BUS_OPTIONS_REGISTER (line 93) | typedef union _BUS_OPTIONS_REGISTER {
  type HC_CONTROL_REGISTER (line 112) | typedef union _HC_CONTROL_REGISTER {
  type FAIRNESS_CONTROL_REGISTER (line 130) | typedef union _FAIRNESS_CONTROL_REGISTER {
  type LINK_CONTROL_REGISTER (line 139) | typedef union _LINK_CONTROL_REGISTER {
  type NODE_ID_REGISTER (line 156) | typedef union _NODE_ID_REGISTER {
  type SELF_ID_BUFFER_REGISTER (line 170) | typedef union _SELF_ID_BUFFER_REGISTER {
  type SELF_ID_COUNT_REGISTER (line 180) | typedef union _SELF_ID_COUNT_REGISTER {
  type PHY_CONTROL_REGISTER (line 193) | typedef union _PHY_CONTROL_REGISTER {
  type ISOCH_CYCLE_TIMER_REGISTER (line 209) | typedef union _ISOCH_CYCLE_TIMER_REGISTER {
  type INT_EVENT_MASK_REGISTER (line 219) | typedef union _INT_EVENT_MASK_REGISTER {
  type COMMAND_POINTER_REGISTER (line 251) | typedef union _COMMAND_POINTER_REGISTER {
  type CONTEXT_CONTROL_REGISTER (line 260) | typedef union _CONTEXT_CONTROL_REGISTER {
  type IT_CONTEXT_CONTROL_REGISTER (line 276) | typedef union _IT_CONTEXT_CONTROL_REGISTER {
  type IR_CONTEXT_CONTROL_REGISTER (line 293) | typedef union _IR_CONTEXT_CONTROL_REGISTER {
  type CONTEXT_MATCH_REGISTER (line 313) | typedef union _CONTEXT_MATCH_REGISTER {
  type DMA_CONTEXT_REGISTERS (line 329) | typedef struct _DMA_CONTEXT_REGISTERS {
  type DMA_ISOCH_RCV_CONTEXT_REGISTERS (line 337) | typedef struct _DMA_ISOCH_RCV_CONTEXT_REGISTERS {
  type DMA_ISOCH_XMIT_CONTEXT_REGISTERS (line 346) | typedef struct _DMA_ISOCH_XMIT_CONTEXT_REGISTERS {
  type OHCI_REGISTER_MAP (line 353) | typedef struct _OHCI_REGISTER_MAP {
  type CONFIG_ROM_INFO (line 450) | typedef union _CONFIG_ROM_INFO {
  type IMMEDIATE_ENTRY (line 469) | typedef union _IMMEDIATE_ENTRY {
  type DIRECTORY_INFO (line 481) | typedef union _DIRECTORY_INFO {

FILE: ironclad-apps/src/Checked/BootLoader/SingLdrPc/blkdcom.cpp
  function BOOLEAN (line 31) | BOOLEAN
  function BOOLEAN (line 84) | BOOLEAN
  function BOOLEAN (line 123) | BOOLEAN
  function BOOLEAN (line 162) | BOOLEAN
  function BOOLEAN (line 210) | BOOLEAN
  function BOOLEAN (line 306) | BOOLEAN
  function BOOLEAN (line 443) | BOOLEAN

FILE: ironclad-apps/src/Checked/BootLoader/SingLdrPc/blmm.cpp
  type _BL_MM_PAGE_TABLE (line 29) | struct _BL_MM_PAGE_TABLE {
  function VOID (line 45) | VOID
  function VOID (line 111) | VOID
  function VOID (line 157) | VOID
  function UINT64 (line 246) | UINT64
  function BOOLEAN (line 338) | BOOLEAN
  function BOOLEAN (line 461) | BOOLEAN
  function BOOLEAN (line 510) | BOOLEAN
  function PCHAR (line 578) | PCHAR
  function VOID (line 629) | VOID
  function VOID (line 670) | VOID
  function VOID (line 773) | VOID
  function VOID (line 912) | VOID
  function VOID (line 973) | VOID
  function VOID (line 1003) | VOID
  function VOID (line 1053) | VOID
  function VOID (line 1110) | VOID
  function PVOID (line 1132) | PVOID
  function VOID (line 1157) | VOID

FILE: ironclad-apps/src/Checked/BootLoader/SingLdrPc/blmps.cpp
  type _MPS_FPS (line 22) | struct _MPS_FPS {
  function PMPS_FPS (line 35) | PMPS_FPS
  function PMPS_FPS (line 85) | PMPS_FPS
  function VOID (line 146) | VOID

FILE: ironclad-apps/src/Checked/BootLoader/SingLdrPc/blpci.cpp
  type _PCI_CONFIGURATION_SPACE_HEADER (line 46) | struct _PCI_CONFIGURATION_SPACE_HEADER {
  type _PCI_CONFIG_ADDRESS (line 84) | struct _PCI_CONFIG_ADDRESS {
  type _PCI_BASE_ADDRESS (line 104) | struct _PCI_BASE_ADDRESS {
  function BOOLEAN (line 143) | BOOLEAN
  function UINT32 (line 209) | UINT32
  function VOID (line 262) | VOID
  function VOID (line 313) | VOID
  function VOID (line 365) | VOID
  function VOID (line 593) | VOID

FILE: ironclad-apps/src/Checked/BootLoader/SingLdrPc/blpecoff.cpp
  type _IMAGE_DOS_HEADER (line 20) | struct _IMAGE_DOS_HEADER {      //- DOS .EXE header
  type _IMAGE_FILE_HEADER (line 43) | struct _IMAGE_FILE_HEADER {
  type _IMAGE_DATA_DIRECTORY (line 53) | struct _IMAGE_DATA_DIRECTORY {
  type _IMAGE_OPTIONAL_HEADER_32 (line 64) | struct _IMAGE_OPTIONAL_HEADER_32 {
  type _IMAGE_NT_HEADERS32 (line 98) | struct _IMAGE_NT_HEADERS32 {
  type _IMAGE_OPTIONAL_HEADER64 (line 108) | struct _IMAGE_OPTIONAL_HEADER64 {
  type _IMAGE_NT_HEADERS64 (line 141) | struct _IMAGE_NT_HEADERS64 {
  type _IMAGE_SECTION_HEADER (line 153) | struct _IMAGE_SECTION_HEADER {
  type _IMAGE_BASE_RELOCATION (line 169) | struct _IMAGE_BASE_RELOCATION {
  function VOID (line 179) | VOID
  function VOID (line 257) | VOID
  function VOID (line 358) | VOID

FILE: ironclad-apps/src/Checked/BootLoader/SingLdrPc/blpnp.cpp
  function PNP_STATUS (line 53) | PNP_STATUS
  function PNP_STATUS (line 109) | PNP_STATUS
  function PNP_STATUS (line 182) | PNP_STATUS
  function PPNP_INSTALLATION_CHECK (line 229) | PPNP_INSTALLATION_CHECK
  function VOID (line 277) | VOID

FILE: ironclad-apps/src/Checked/BootLoader/SingLdrPc/blpool.cpp
  type _BL_POOL_BLOCK (line 44) | struct _BL_POOL_BLOCK {
  type _BL_POOL_SEGMENT (line 68) | struct _BL_POOL_SEGMENT {
  function VOID (line 80) | VOID
  function VOID (line 107) | VOID
  function VOID (line 162) | VOID
  function VOID (line 237) | VOID
  function PVOID (line 291) | PVOID
  function VOID (line 384) | VOID

FILE: ironclad-apps/src/Checked/BootLoader/SingLdrPc/blpxe.cpp
  type _IP_ADDRESS (line 19) | struct _IP_ADDRESS {
  type _DHCP_OPTION_HEADER (line 29) | struct _DHCP_OPTION_HEADER {
  type _BOOTP_REPLY (line 36) | struct _BOOTP_REPLY {
  type _PXE_INSTALLATION_CHECK (line 55) | struct _PXE_INSTALLATION_CHECK {
  type _PXE_SEGMENT_DESCRIPTOR (line 78) | struct _PXE_SEGMENT_DESCRIPTOR {
  type _PXE_EXTENDED_INFORMATION (line 86) | struct _PXE_EXTENDED_INFORMATION {
  type _PXE_GET_CACHED_INFO (line 122) | struct _PXE_GET_CACHED_INFO {
  type _PXE_TFTP_GET_FILE_SIZE (line 130) | struct _PXE_TFTP_GET_FILE_SIZE {
  type _PXE_TFTP_READ_FILE (line 140) | struct _PXE_TFTP_READ_FILE {
  type _PXE_API_PACKET (line 154) | struct _PXE_API_PACKET {
  function VOID (line 171) | VOID
  function VOID (line 228) | VOID
  function BOOLEAN (line 368) | BOOLEAN
  function BOOLEAN (line 428) | BOOLEAN
  function VOID (line 516) | VOID

FILE: ironclad-apps/src/Checked/BootLoader/SingLdrPc/blsingularity.cpp
  type _BL_DISTRO_FILE (line 59) | struct _BL_DISTRO_FILE {
  type _BL_DISTRO (line 66) | struct _BL_DISTRO {
  function VOID (line 101) | VOID
  function VOID (line 342) | VOID
  function ULONG_PTR (line 404) | ULONG_PTR
  type _BL_PROCESSOR (line 493) | struct _BL_PROCESSOR {
  function VOID (line 506) | VOID
  function UINT8 (line 589) | UINT8
  function UINT8 (line 609) | UINT8
  function UINT8 (line 615) | UINT8
  function UINT32 (line 646) | UINT32
  function VOID (line 758) | VOID
  function VOID (line 822) | VOID
  function IsApicPresent (line 896) | unsigned int IsApicPresent (void)
  function GetAPIC_ID (line 908) | unsigned char GetAPIC_ID (void)
  function VOID (line 915) | VOID
  function VOID (line 1278) | VOID

FILE: ironclad-apps/src/Checked/BootLoader/SingLdrPc/blsmap.cpp
  function PCHAR (line 22) | PCHAR
  function VOID (line 75) | VOID

FILE: ironclad-apps/src/Checked/BootLoader/SingLdrPc/blstring.cpp
  function CHAR (line 29) | CHAR
  function BOOLEAN (line 59) | BOOLEAN
  function BOOLEAN (line 122) | BOOLEAN
  function BOOLEAN (line 342) | BOOLEAN
  function BOOLEAN (line 490) | BOOLEAN
  function BOOLEAN (line 655) | BOOLEAN
  function UINT32 (line 820) | UINT32
  function UINT32 (line 854) | UINT32
  function BOOLEAN (line 888) | BOOLEAN
  function BOOLEAN (line 1000) | BOOLEAN
  function BOOLEAN (line 1053) | BOOLEAN
  function BOOLEAN (line 1309) | BOOLEAN
  function BOOLEAN (line 1352) | BOOLEAN
  function BOOLEAN (line 1401) | BOOLEAN
  function PCSTR (line 1444) | PCSTR

FILE: ironclad-apps/src/Checked/BootLoader/SingLdrPc/bltrap.cpp
  function VOID (line 21) | VOID
  function VOID (line 55) | VOID

FILE: ironclad-apps/src/Checked/BootLoader/SingLdrPc/blutil.cpp
  function VOID (line 22) | VOID
  function BOOLEAN (line 43) | BOOLEAN
  function BOOLEAN (line 69) | BOOLEAN
  function PLIST_ENTRY (line 107) | PLIST_ENTRY
  function PLIST_ENTRY (line 143) | PLIST_ENTRY
  function VOID (line 179) | VOID
  function VOID (line 211) | VOID
  function VOID (line 243) | VOID
  function PVOID (line 270) | PVOID
  function VOID (line 296) | VOID
  function VOID (line 330) | VOID
  function BOOLEAN (line 396) | BOOLEAN
  function VOID (line 438) | VOID
  function VOID (line 467) | VOID
  function VOID (line 519) | VOID
  function VOID (line 587) | VOID
  function VOID (line 615) | VOID
  function VOID (line 644) | VOID
  function UINT8 (line 668) | UINT8
  function BOOLEAN (line 706) | BOOLEAN
  type _INT13_DISK_ADDRESS_PACKET (line 762) | struct _INT13_DISK_ADDRESS_PACKET {
  function BOOLEAN (line 776) | BOOLEAN
  function UINT8 (line 872) | UINT8
  function VOID (line 899) | VOID
  function VOID (line 925) | VOID
  function VOID (line 1004) | VOID
  function UINT8 (line 1141) | UINT8
  function VOID (line 1166) | VOID

FILE: ironclad-apps/src/Checked/BootLoader/SingLdrPc/blvesa.cpp
  function UINT32 (line 77) | UINT32
  function BOOLEAN (line 103) | BOOLEAN

FILE: ironclad-apps/src/Checked/BootLoader/SingLdrPc/blvideo.cpp
  function VOID (line 33) | VOID
  function VOID (line 63) | VOID
  function VOID (line 88) | VOID
  function VOID (line 114) | VOID
  function VOID (line 156) | VOID
  function VOID (line 226) | VOID
  function BOOLEAN (line 255) | BOOLEAN
  function VOID (line 299) | VOID

FILE: ironclad-apps/src/Checked/BootLoader/SingLdrPc/platform.h
  type __int64 (line 1) | typedef __int64 Gdte;
  type byte (line 2) | typedef unsigned char byte;
  type ushort (line 3) | typedef unsigned short ushort;
  type uint (line 4) | typedef unsigned uint;
  type ulong (line 5) | typedef unsigned __int64 ulong;
  type ULONG_PTR (line 6) | typedef ULONG_PTR UIntPtr;
  type Class_Microsoft_Singularity_MpBootInfo (line 16) | struct Class_Microsoft_Singularity_MpBootInfo
  type Struct_Microsoft_Singularity_Isal_IX_DescriptorTable_Gdt (line 25) | struct Struct_Microsoft_Singularity_Isal_IX_DescriptorTable_Gdt
  type Struct_Microsoft_Singularity_Isal_IX_Gdtp (line 42) | struct Struct_Microsoft_Singularity_Isal_IX_Gdtp
  type Struct_Microsoft_Singularity_Isal_IX_DescriptorTable (line 49) | struct Struct_Microsoft_Singularity_Isal_IX_DescriptorTable
  type Class_Microsoft_Singularity_Hal_Cpu (line 55) | struct Class_Microsoft_Singularity_Hal_Cpu
  type Class_Microsoft_Singularity_Hal_Platform (line 67) | struct Class_Microsoft_Singularity_Hal_Platform
  type Struct_Microsoft_Singularity_Io_FileImage (line 163) | struct Struct_Microsoft_Singularity_Io_FileImage
  type Struct_Microsoft_Singularity_Isal_IX_TSS (line 169) | struct Struct_Microsoft_Singularity_Isal_IX_TSS

FILE: ironclad-apps/src/Clients/Benchmark/BenchSpec.py
  class BenchSpec (line 24) | class BenchSpec():
    method __init__ (line 25) | def __init__(self, benchmark, iterations, key_length, message_length, ...
    method tuple (line 35) | def tuple(self):
    method __repr__ (line 38) | def __repr__(self):
    method spec_tuple (line 41) | def spec_tuple(self):
    method compatible (line 44) | def compatible(self, other):

FILE: ironclad-apps/src/Clients/Benchmark/BenchmarkAnalyzer.py
  function parse_openssl (line 191) | def parse_openssl(label, text):
  function Mean (line 271) | def Mean(benchmark, points):
  function Means (line 279) | def Means(benchmark, points):
  function LinearRegression (line 289) | def LinearRegression(benchmark, points):

FILE: ironclad-apps/src/Clients/Benchmark/BenchmarkDriver.py
  class HelpfulRE (line 7) | class HelpfulRE:
    method __init__ (line 8) | def __init__(self, pattern):
  class BenchmarkDriver (line 12) | class BenchmarkDriver:
    method __init__ (line 13) | def __init__(self):
    method regrab (line 18) | def regrab(self, text, re):
    method execute_test (line 25) | def execute_test(self, spec):
    method parse_reply (line 34) | def parse_reply(self, text, annotation):
    method suite0 (line 38) | def suite0(self):
    method suite1 (line 47) | def suite1(self):
    method suite2 (line 52) | def suite2(self):
    method suite3 (line 56) | def suite3(self):

FILE: ironclad-apps/src/Clients/Benchmark/BenchmarkRequestCmd/Program.cs
  class Program (line 14) | public static class Program
    method Main (line 25) | private static void Main(string[] args)
    method Usage (line 93) | private static void Usage()

FILE: ironclad-apps/src/Clients/Benchmark/BenchmarkRequestGui/App.xaml.cs
  class App (line 14) | public partial class App : Application

FILE: ironclad-apps/src/Clients/Benchmark/BenchmarkRequestGui/MainWindow.xaml.cs
  class MainWindow (line 21) | public partial class MainWindow : Window
    method MainWindow (line 23) | public MainWindow()

FILE: ironclad-apps/src/Clients/Benchmark/BenchmarkRequestGui/Properties/Resources.Designer.cs
  class Resources (line 22) | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resource...
    method Resources (line 31) | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Mic...

FILE: ironclad-apps/src/Clients/Benchmark/BenchmarkRequestGui/Properties/Settings.Designer.cs
  class Settings (line 14) | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]

FILE: ironclad-apps/src/Clients/Benchmark/Communication/BenchmarkList.cs
  type Benchmark (line 18) | public enum Benchmark

FILE: ironclad-apps/src/Clients/Benchmark/Communication/Connection.cs
  class Connection (line 16) | public class Connection : IDisposable
    method Connection (line 32) | public Connection(string serverName)
    method Dispose (line 49) | public void Dispose()
    method Dispose (line 59) | protected virtual void Dispose(bool disposing)

FILE: ironclad-apps/src/Clients/Benchmark/Communication/Request.cs
  class Request (line 15) | public class Request
    method Request (line 50) | public Request()
    method SendOnConnection (line 74) | public int SendOnConnection(Connection connection)
    method EncodeBEWord (line 98) | private static byte[] EncodeBEWord(UInt32 value)

FILE: ironclad-apps/src/Clients/Benchmark/Communication/Response.cs
  class Response (line 17) | public class Response
    method Response (line 67) | public Response(Connection connection)
    method CalculateElapsedTime (line 185) | public float CalculateElapsedTime(UInt64 clockSpeedInHertz)
    method ReverseByteOrder (line 197) | private static byte[] ReverseByteOrder(byte[] input, int offset, int l...
    method ExtractBEWord (line 209) | private static UInt32 ExtractBEWord(byte[] byteArray, int offset)

FILE: ironclad-apps/src/Clients/Common/Common.cs
  class ErrorCodeException (line 15) | public class ErrorCodeException : Exception
    method ErrorCodeException (line 19) | public ErrorCodeException(UInt32 i_error_code)
    method ToString (line 24) | public override string ToString()
  class InvalidRequest (line 30) | public class InvalidRequest
    method InvalidRequest (line 32) | public InvalidRequest() { }
  class InvalidResponse (line 35) | public class InvalidResponse
    method InvalidResponse (line 37) | public InvalidResponse() { }
    method Encode (line 39) | public static byte[] Encode()
  class CommonRoutines (line 47) | public class CommonRoutines
    method ExtractBEWord (line 49) | public static UInt32 ExtractBEWord(byte[] byteArray, int offset)
    method EncodeBEWord (line 56) | public static byte[] EncodeBEWord(UInt32 value)
    method EncodeMPInt (line 63) | public static byte[] EncodeMPInt(UInt32 value)
    method EncodeMPBigInteger (line 80) | public static byte[] EncodeMPBigInteger(BigInteger value)
    method DecodeShortMPInt (line 88) | public static UInt32 DecodeShortMPInt(byte[] byteArray, ref int offset)
    method DecodeMPBigInteger (line 113) | public static BigInteger DecodeMPBigInteger(byte[] byteArray, ref int ...
    method StripProtectiveZero (line 132) | public static byte[] StripProtectiveZero(byte[] mpi)
    method DecodePublicKey (line 144) | public static RSACryptoServiceProvider DecodePublicKey(byte[] encoded_...
    method ParseFakeReply (line 216) | public static byte[] ParseFakeReply(string pastedhex)
    method WriteHexArray (line 228) | static public void WriteHexArray(StreamWriter sw, byte[] bytes, string...
    method SquirtBakedKey (line 240) | static public void SquirtBakedKey()
    method SendRequest (line 261) | public static byte[] SendRequest(UdpClient client, byte[] request, str...
    method GetIroncladPublicKey (line 294) | public static RSACryptoServiceProvider GetIroncladPublicKey(UdpClient ...
    method CombineByteArrays (line 303) | public static byte[] CombineByteArrays (params byte[][] arrays)
    method mpint_encode (line 314) | public static byte[] mpint_encode(byte[] raw)
    method EncodePublicKey (line 338) | public static byte[] EncodePublicKey (RSACryptoServiceProvider key_pair)
    method BEByteSeqToWordSeq (line 350) | public static UInt32[] BEByteSeqToWordSeq(byte[] bytes)
    method GetIPEndPoint (line 361) | public static IPEndPoint GetIPEndPoint(string hostname, int port)
    method StartClient (line 376) | public static UdpClient StartClient()
    method StartServer (line 384) | public static UdpClient StartServer()

FILE: ironclad-apps/src/Clients/Common/CommonParams.cs
  class CommonParams (line 9) | public class CommonParams
    method Print (line 20) | public static void Print()
    method PrintUsage (line 32) | public static void PrintUsage()
    method ApplyArgument (line 44) | public static bool ApplyArgument (string parameter, string value)

FILE: ironclad-apps/src/Clients/Common/GetQuote.cs
  class GetQuoteRequest (line 10) | public class GetQuoteRequest
    method GetQuoteRequest (line 14) | public GetQuoteRequest()
    method GetQuoteRequest (line 21) | public GetQuoteRequest(byte[] i_nonce)
    method GetPacket (line 26) | public byte[] GetPacket()
    method ParseRequest (line 35) | public static object ParseRequest (byte[] packet)
  class GetQuoteResponse (line 47) | public class GetQuoteResponse
    method GetQuoteResponse (line 56) | public GetQuoteResponse(byte[] packet)
    method GetQuoteResponse (line 87) | public GetQuoteResponse (UInt32 i_error_code, RSACryptoServiceProvider...
    method ToString (line 113) | public override string ToString()
    method GetZeroPCR (line 118) | private byte[] GetZeroPCR()
    method ExtendPCR (line 128) | private byte[] ExtendPCR(SHA1Managed hasher, byte[] currentValue, byte...
    method ConvertHexStringToByteArray (line 133) | private byte[] ConvertHexStringToByteArray(string hex)
    method GetExpectedPCR17 (line 144) | private byte[] GetExpectedPCR17()
    method GetExpectedPCR19 (line 149) | private byte[] GetExpectedPCR19(SHA1Managed hasher, byte[] encoded_pub...
    method CheckPCRInfo (line 157) | private void CheckPCRInfo(byte[] pcr_info, byte[] encoded_public_key)
    method Encode (line 185) | public byte[] Encode ()

FILE: ironclad-apps/src/Clients/Common/Profiler.cs
  class Aggregator (line 11) | public class Aggregator
    method Initialize (line 20) | public static void Initialize()
    method Aggregator (line 25) | public Aggregator(string i_name, bool i_times)
    method AddValue (line 34) | public void AddValue(long value)
    method AddTime (line 46) | public void AddTime(Stopwatch s)
    method ToString (line 51) | public override string ToString()
  class Profiler (line 78) | public class Profiler
    method Initialize (line 82) | public static void Initialize()
    method Record (line 88) | public static void Record(string name, long value)
    method Record (line 98) | public static void Record(string name, Stopwatch stopwatch)
    method Print (line 108) | public static void Print()

FILE: ironclad-apps/src/Clients/DiffPriv/DiffPrivRequests.cs
  class InitializeDBRequest (line 11) | public class InitializeDBRequest
    method InitializeDBRequest (line 15) | public InitializeDBRequest(Rational i_budget)
    method GetPacket (line 20) | public byte[] GetPacket()
  class AddRowRequest (line 29) | public class AddRowRequest
    method AddRowRequest (line 35) | public AddRowRequest(UInt32[] i_values, Rational i_max_budget, Random ...
    method GetPacket (line 43) | public byte[] GetPacket(RSACryptoServiceProvider ironclad_public_key)
  class QueryRequest (line 70) | public class QueryRequest
    method QueryRequest (line 81) | public QueryRequest(UInt32 i_row_min, UInt32 i_row_max, UInt32 i_answe...
    method GetPacket (line 94) | public byte[] GetPacket()

FILE: ironclad-apps/src/Clients/DiffPriv/DiffPrivResponses.cs
  class InitializeDBResponse (line 11) | class InitializeDBResponse
    method InitializeDBResponse (line 17) | public InitializeDBResponse(byte[] packet)
    method ToString (line 34) | public override string ToString()
  class AddRowResponse (line 40) | class AddRowResponse
    method AddRowResponse (line 42) | public AddRowResponse(byte[] packet)
    method ToString (line 54) | public override string ToString()
  class QueryResponse (line 60) | class QueryResponse
    method QueryResponse (line 68) | public QueryResponse(byte[] packet)
    method ToString (line 86) | public override string ToString()

FILE: ironclad-apps/src/Clients/DiffPriv/Parameters.cs
  class InvalidParameterException (line 11) | class InvalidParameterException : Exception
    method InvalidParameterException (line 14) | public InvalidParameterException(string i_contents) { contents = i_con...
  class Parameters (line 17) | public class Parameters
    method Print (line 25) | public static void Print()
    method PrintUsage (line 35) | public static void PrintUsage()
    method ApplyArguments (line 48) | public static void ApplyArguments (string[] args)
    method ApplyArgument (line 65) | public static void ApplyArgument (string arg)
    method ApplyArgumentsInFile (line 116) | public static void ApplyArgumentsInFile(string filename)

FILE: ironclad-apps/src/Clients/DiffPriv/Program.cs
  class Program (line 14) | class Program
    method InitializeDB (line 16) | static void InitializeDB(UdpClient client, Rational budget)
    method GetRandomRow (line 24) | static UInt32[] GetRandomRow(Random rng)
    method AddRow (line 34) | static void AddRow(UdpClient client, Rational max_budget, UInt32[] val...
    method PerformQuery (line 42) | static void PerformQuery(UdpClient client, UInt32 row_min, UInt32 row_...
    method MakeProgram (line 52) | static UInt32[] MakeProgram()
    method Main (line 80) | static void Main(string[] args)

FILE: ironclad-apps/src/Clients/DiffPriv/Rational.cs
  class Rational (line 9) | public class Rational
    method Rational (line 14) | public Rational(UInt32 i_num, UInt32 i_den)
    method Rational (line 20) | public Rational(UInt32 value)

FILE: ironclad-apps/src/Clients/DiffPrivSrv/BigRational.cs
  class BigRational (line 10) | class BigRational
    method BigRational (line 15) | public BigRational(BigInteger i_numerator, BigInteger i_denominator)
    method BigRational (line 21) | public BigRational(int i_numerator, int i_denominator)
    method BigRational (line 27) | public BigRational(int value)
    method BigRational (line 33) | public BigRational(BigInteger value)
    method IsNegative (line 39) | public bool IsNegative()
    method IsZero (line 44) | public bool IsZero()
    method IsPositive (line 49) | public bool IsPositive()
    method Equals (line 104) | public override bool Equals(object obj)
    method GetHashCode (line 109) | public override int GetHashCode()
    method Power (line 114) | public static BigRational Power(BigRational x, UInt32 e)

FILE: ironclad-apps/src/Clients/DiffPrivSrv/DiffPrivRequest.cs
  class DiffPrivRequest (line 10) | public class DiffPrivRequest
    method DiffPrivRequest (line 12) | public DiffPrivRequest() { }
    method ParseRequest (line 14) | public static object ParseRequest (byte[] request)
  class InitializeDBRequest (line 42) | public class InitializeDBRequest
    method InitializeDBRequest (line 47) | public InitializeDBRequest(UInt32 i_budget_num, UInt32 i_budget_den)
    method ParseRequest (line 53) | public static object ParseRequest (byte[] request)
  class AddRowRequest (line 66) | public class AddRowRequest
    method AddRowRequest (line 70) | public AddRowRequest(byte[] i_ciphertext)
    method ParseRequest (line 75) | public static object ParseRequest (byte[] request)
  class QueryRequest (line 87) | public class QueryRequest
    method QueryRequest (line 100) | public QueryRequest(UInt32 i_row_min, UInt32 i_row_max, UInt32 i_answe...
    method ParseRequest (line 115) | public static object ParseRequest (byte[] request)

FILE: ironclad-apps/src/Clients/DiffPrivSrv/DiffPrivResponse.cs
  class DiffPrivSrvResponse (line 10) | class DiffPrivSrvResponse
    method EncodeInitializeDBResponse (line 12) | public static byte[] EncodeInitializeDBResponse (UInt32 error_code)
    method EncodeAddRowResponse (line 22) | public static byte[] EncodeAddRowResponse ()
    method EncodeQueryResponse (line 29) | public static byte[] EncodeQueryResponse (UInt32 error_code, UInt32 re...

FILE: ironclad-apps/src/Clients/DiffPrivSrv/Parameters.cs
  class InvalidParameterException (line 10) | class InvalidParameterException : Exception
    method InvalidParameterException (line 13) | public InvalidParameterException(string i_contents) { contents = i_con...
  class Parameters (line 16) | public class Parameters
    method Print (line 18) | public static void Print()
    method PrintUsage (line 23) | public static void PrintUsage()
    method ApplyArguments (line 31) | public static void ApplyArguments (string[] args)
    method ApplyArgument (line 48) | public static void ApplyArgument (string arg)
    method ApplyArgumentsInFile (line 74) | public static void ApplyArgumentsInFile(string filename)

FILE: ironclad-apps/src/Clients/DiffPrivSrv/Program.cs
  class Program (line 12) | class Program
    method HandleRequest (line 14) | static byte[] HandleRequest(byte[] request)
    method Main (line 19) | static void Main(string[] args)

FILE: ironclad-apps/src/Clients/DiffPrivSrv/StateMachine.cs
  class DiffPrivRow (line 11) | class DiffPrivRow
    method DiffPrivRow (line 16) | public DiffPrivRow(byte[] i_nonce, UInt32[] i_data)
  class Operation (line 23) | abstract class Operation
    method Operation (line 25) | public Operation() { }
    method ConvertWordToOperation (line 27) | public static Operation ConvertWordToOperation(UInt32 w)
    method StackSizeChange (line 44) | public abstract int StackSizeChange();
    method Apply (line 45) | public abstract void Apply(Stack<UInt32> stack, UInt32[] data);
  class OperationColumn (line 48) | class OperationColumn : Operation
    method OperationColumn (line 50) | public OperationColumn() { }
    method StackSizeChange (line 51) | public override int StackSizeChange() { return 0; }
    method Apply (line 53) | public override void Apply(Stack<UInt32> stack, UInt32[] data)
  class OperationIf (line 61) | class OperationIf : Operation
    method OperationIf (line 63) | public OperationIf() { }
    method StackSizeChange (line 64) | public override int StackSizeChange() { return -2; }
    method Apply (line 66) | public override void Apply(Stack<UInt32> stack, UInt32[] data)
  class OperationAdd (line 76) | class OperationAdd : Operation
    method OperationAdd (line 78) | public OperationAdd() { }
    method StackSizeChange (line 79) | public override int StackSizeChange() { return -1; }
    method Apply (line 81) | public override void Apply(Stack<UInt32> stack, UInt32[] data)
  class OperationSub (line 90) | class OperationSub : Operation
    method OperationSub (line 92) | public OperationSub() { }
    method StackSizeChange (line 93) | public override int StackSizeChange() { return -1; }
    method Apply (line 95) | public override void Apply(Stack<UInt32> stack, UInt32[] data)
  class OperationMul (line 104) | class OperationMul : Operation
    method OperationMul (line 106) | public OperationMul() { }
    method StackSizeChange (line 107) | public override int StackSizeChange() { return -1; }
    method Apply (line 109) | public override void Apply(Stack<UInt32> stack, UInt32[] data)
  class OperationDiv (line 118) | class OperationDiv : Operation
    method OperationDiv (line 120) | public OperationDiv() { }
    method StackSizeChange (line 121) | public override int StackSizeChange() { return -1; }
    method Apply (line 123) | public override void Apply(Stack<UInt32> stack, UInt32[] data)
  class OperationMod (line 132) | class OperationMod : Operation
    method OperationMod (line 134) | public OperationMod() { }
    method StackSizeChange (line 135) | public override int StackSizeChange() { return -1; }
    method Apply (line 137) | public override void Apply(Stack<UInt32> stack, UInt32[] data)
  class OperationGt (line 146) | class OperationGt : Operation
    method OperationGt (line 148) | public OperationGt() { }
    method StackSizeChange (line 149) | public override int StackSizeChange() { return -1; }
    method Apply (line 151) | public override void Apply(Stack<UInt32> stack, UInt32[] data)
  class OperationLt (line 160) | class OperationLt : Operation
    method OperationLt (line 162) | public OperationLt() { }
    method StackSizeChange (line 163) | public override int StackSizeChange() { return -1; }
    method Apply (line 165) | public override void Apply(Stack<UInt32> stack, UInt32[] data)
  class OperationEq (line 174) | class OperationEq : Operation
    method OperationEq (line 176) | public OperationEq() { }
    method StackSizeChange (line 177) | public override int StackSizeChange() { return -1; }
    method Apply (line 179) | public override void Apply(Stack<UInt32> stack, UInt32[] data)
  class OperationGe (line 188) | class OperationGe : Operation
    method OperationGe (line 190) | public OperationGe() { }
    method StackSizeChange (line 191) | public override int StackSizeChange() { return -1; }
    method Apply (line 193) | public override void Apply(Stack<UInt32> stack, UInt32[] data)
  class OperationLe (line 202) | class OperationLe : Operation
    method OperationLe (line 204) | public OperationLe() { }
    method StackSizeChange (line 205) | public override int StackSizeChange() { return -1; }
    method Apply (line 207) | public override void Apply(Stack<UInt32> stack, UInt32[] data)
  class OperationPush (line 216) | class OperationPush : Operation
    method OperationPush (line 219) | public OperationPush(UInt32 i_value) { value = i_value; }
    method StackSizeChange (line 220) | public override int StackSizeChange() { return 1; }
    method Apply (line 222) | public override void Apply(Stack<UInt32> stack, UInt32[] data)
  class MapperProgram (line 228) | public class MapperProgram
    method MapperProgram (line 232) | public MapperProgram(UInt32[] program_encoding)
    method IsValid (line 241) | public bool IsValid()
    method Run (line 255) | public UInt32 Run(UInt32[] data)
  class StateMachine (line 266) | public class StateMachine
    method StateMachine (line 274) | public StateMachine()
    method HandleRequest (line 283) | public byte[] HandleRequest(byte[] requestBytes)
    method HandleAddRowRequest (line 335) | public void HandleAddRowRequest(byte[] plaintext)
    method FindHigherPowerOfTwo (line 382) | private static bool FindHigherPowerOfTwo (BigRational r, out UInt32 x)
    method DivideRoundingUp (line 399) | private static UInt32 DivideRoundingUp (UInt32 a, UInt32 b)
    method RoundUpToMultiple (line 404) | private static UInt32 RoundUpToMultiple (UInt32 a, UInt32 b)
    method FindHighestPowerLeThreshold (line 417) | private static UInt32 FindHighestPowerLeThreshold (BigRational alpha, ...
    method ClipWord32 (line 433) | private static UInt32 ClipWord32 (UInt32 x, UInt32 min_x, UInt32 max_x)
    method SaturatingAdd (line 446) | private static UInt32 SaturatingAdd (UInt32 x, UInt32 y)
    method ComputeSum (line 458) | private UInt32 ComputeSum (MapperProgram program, UInt32 row_min, UInt...
    method AddNoise (line 485) | private UInt32 AddNoise (UInt32 answer, UInt32 absolute_noise, bool ne...
    method HandleQueryRequest (line 504) | public byte[] HandleQueryRequest(QueryRequest request)

FILE: ironclad-apps/src/Clients/DotNetSHABench/Parameters.cs
  class InvalidParameterException (line 10) | class InvalidParameterException : Exception
    method InvalidParameterException (line 13) | public InvalidParameterException(string i_contents) { contents = i_con...
  class Parameters (line 16) | public class Parameters
    method Print (line 21) | public static void Print()
    method PrintUsage (line 27) | public static void PrintUsage()
    method ApplyArguments (line 36) | public static void ApplyArguments (string[] args)
    method ApplyArgument (line 53) | public static void ApplyArgument (string arg)
    method ApplyArgumentsInFile (line 85) | public static void ApplyArgumentsInFile(string filename)

FILE: ironclad-apps/src/Clients/DotNetSHABench/Program.cs
  class Program (line 12) | class Program
    method TestSHA (line 14) | static void TestSHA (int message_size, int num_runs)
    method DoAllTests (line 31) | static void DoAllTests()
    method Main (line 124) | static void Main(string[] args)

FILE: ironclad-apps/src/Clients/Notary/NotaryRequests.cs
  class AdvanceCounterRequest (line 11) | public class AdvanceCounterRequest
    method AdvanceCounterRequest (line 15) | public AdvanceCounterRequest(byte[] i_message)
    method GetPacket (line 20) | public byte[] GetPacket()

FILE: ironclad-apps/src/Clients/Notary/NotaryResponses.cs
  class AdvanceCounterResponse (line 13) | class AdvanceCounterResponse
    method AdvanceCounterResponse (line 23) | public AdvanceCounterResponse(byte[] packet, RSACryptoServiceProvider ...
    method ToString (line 63) | public override string ToString()

FILE: ironclad-apps/src/Clients/Notary/Parameters.cs
  class InvalidParameterException (line 10) | class InvalidParameterException : Exception
    method InvalidParameterException (line 13) | public InvalidParameterException(string i_contents) { contents = i_con...
  class Parameters (line 16) | public class Parameters
    method Print (line 20) | public static void Print()
    method PrintUsage (line 26) | public static void PrintUsage()
    method ApplyArguments (line 35) | public static void ApplyArguments (string[] args)
    method ApplyArgument (line 52) | public static void ApplyArgument (string arg)
    method ApplyArgumentsInFile (line 83) | public static void ApplyArgumentsInFile(string filename)

FILE: ironclad-apps/src/Clients/Notary/Program.cs
  class Program (line 15) | class Program
    method AdvanceCounter (line 17) | static void AdvanceCounter(UdpClient client, RSACryptoServiceProvider ...
    method TestStuff (line 37) | static void TestStuff()
    method Main (line 47) | static void Main(string[] args)

FILE: ironclad-apps/src/Clients/NotarySrv/NotaryRequest.cs
  class NotaryRequest (line 10) | public class NotaryRequest
    method NotaryRequest (line 12) | public NotaryRequest() { }
    method ParseRequest (line 14) | public static object ParseRequest (byte[] request)
  class AdvanceCounterRequest (line 34) | public class AdvanceCounterRequest
    method AdvanceCounterRequest (line 38) | public AdvanceCounterRequest(byte[] i_message)
    method ParseRequest (line 43) | public static object ParseRequest (byte[] request)

FILE: ironclad-apps/src/Clients/NotarySrv/NotaryResponse.cs
  class NotarySrvResponse (line 10) | class NotarySrvResponse
    method EncodeAdvanceCounterResponse (line 12) | public static byte[] EncodeAdvanceCounterResponse (UInt32 error_code, ...

FILE: ironclad-apps/src/Clients/NotarySrv/Parameters.cs
  class InvalidParameterException (line 10) | class InvalidParameterException : Exception
    method InvalidParameterException (line 13) | public InvalidParameterException(string i_contents) { contents = i_con...
  class Parameters (line 16) | public class Parameters
    method Print (line 18) | public static void Print()
    method PrintUsage (line 23) | public static void PrintUsage()
    method ApplyArguments (line 31) | public static void ApplyArguments (string[] args)
    method ApplyArgument (line 48) | public static void ApplyArgument (string arg)
    method ApplyArgumentsInFile (line 74) | public static void ApplyArgumentsInFile(string filename)

FILE: ironclad-apps/src/Clients/NotarySrv/Program.cs
  class Program (line 12) | class Program
    method HandleRequest (line 14) | static byte[] HandleRequest(byte[] request)
    method Main (line 19) | static void Main(string[] args)

FILE: ironclad-apps/src/Clients/NotarySrv/StateMachine.cs
  class StateMachine (line 11) | class StateMachine
    method StateMachine (line 16) | public StateMachine()
    method HandleRequest (line 22) | public byte[] HandleRequest(byte[] requestBytes)

FILE: ironclad-apps/src/Clients/PassHash/Parameters.cs
  class InvalidParameterException (line 11) | class InvalidParameterException : Exception
    method InvalidParameterException (line 14) | public InvalidParameterException(string i_contents) { contents = i_con...
  class Parameters (line 17) | public class Parameters
    method Print (line 22) | public static void Print()
    method PrintUsage (line 29) | public static void PrintUsage()
    method ApplyArguments (line 39) | public static void ApplyArguments (string[] args)
    method ApplyArgument (line 56) | public static void ApplyArgument (string arg)
    method ApplyArgumentsInFile (line 92) | public static void ApplyArgumentsInFile(string filename)

FILE: ironclad-apps/src/Clients/PassHash/PassHashRequests.cs
  class PerformHashRequest (line 10) | public class PerformHashRequest
    method PerformHashRequest (line 15) | public PerformHashRequest(byte[] i_message, byte[] i_salt)
    method GetPacket (line 21) | public byte[] GetPacket()

FILE: ironclad-apps/src/Clients/PassHash/PassHashResponses.cs
  class PerformHashResponse (line 10) | class PerformHashResponse
    method PerformHashResponse (line 17) | public PerformHashResponse(byte[] packet)
    method ToString (line 35) | public override string ToString()

FILE: ironclad-apps/src/Clients/PassHash/Program.cs
  class Program (line 12) | class Program
    method PerformHash (line 14) | static void PerformHash(UdpClient client, byte[] password, byte[] salt)
    method Main (line 22) | static void Main(string[] args)

FILE: ironclad-apps/src/Clients/PassHashSrv/Parameters.cs
  class InvalidParameterException (line 10) | class InvalidParameterException : Exception
    method InvalidParameterException (line 13) | public InvalidParameterException(string i_contents) { contents = i_con...
  class Parameters (line 16) | public class Parameters
    method Print (line 20) | public static void Print()
    method PrintUsage (line 26) | public static void PrintUsage()
    method ApplyArguments (line 35) | public static void ApplyArguments (string[] args)
    method ApplyArgument (line 52) | public static void ApplyArgument (string arg)
    method ApplyArgumentsInFile (line 83) | public static void ApplyArgumentsInFile(string filename)

FILE: ironclad-apps/src/Clients/PassHashSrv/PassHashRequest.cs
  class PassHashRequest (line 10) | public class PassHashRequest
    method PassHashRequest (line 12) | public PassHashRequest() { }
    method ParseRequest (line 14) | public static PassHashRequest ParseRequest (byte[] request)
  class InvalidRequest (line 30) | public class InvalidRequest : PassHashRequest
    method InvalidRequest (line 32) | public InvalidRequest() { }
  class PerformHashRequest (line 35) | public class PerformHashRequest : PassHashRequest
    method PerformHashRequest (line 40) | public PerformHashRequest(byte[] i_message, byte[] i_salt)
    method ParsePassHashRequest (line 46) | public static PassHashRequest ParsePassHashRequest (byte[] request)

FILE: ironclad-apps/src/Clients/PassHashSrv/PassHashResponse.cs
  class PassHashResponse (line 10) | class PassHashResponse
    method EncodePerformHashResponse (line 12) | public static byte[] EncodePerformHashResponse (UInt32 errorCode, byte...

FILE: ironclad-apps/src/Clients/PassHashSrv/Program.cs
  class Program (line 12) | class Program
    method HandleRequest (line 14) | static byte[] HandleRequest(byte[] request)
    method Main (line 19) | static void Main(string[] args)

FILE: ironclad-apps/src/Clients/PassHashSrv/StateMachine.cs
  class StateMachine (line 10) | class StateMachine
    method StateMachine (line 15) | public StateMachine()
    method HandleRequest (line 23) | public byte[] HandleRequest(byte[] requestBytes)

FILE: ironclad-apps/src/Clients/TrInc/Parameters.cs
  class InvalidParameterException (line 10) | class InvalidParameterException : Exception
    method InvalidParameterException (line 13) | public InvalidParameterException(string i_contents) { contents = i_con...
  class Parameters (line 16) | public class Parameters
    method Print (line 21) | public static void Print()
    method PrintUsage (line 28) | public static void PrintUsage()
    method ApplyArguments (line 38) | public static void ApplyArguments (string[] args)
    method ApplyArgument (line 55) | public static void ApplyArgument (string arg)
    method ApplyArgumentsInFile (line 101) | public static void ApplyArgumentsInFile(string filename)

FILE: ironclad-apps/src/Clients/TrInc/Program.cs
  class Program (line 13) | class Program
    method CreateNewCounter (line 15) | static RSACryptoServiceProvider CreateNewCounter(UdpClient client, boo...
    method AdvanceCounter (line 31) | static void AdvanceCounter(UdpClient client, RSACryptoServiceProvider ...
    method Main (line 55) | static void Main(string[] args)

FILE: ironclad-apps/src/Clients/TrInc/TrIncRequests.cs
  class CreateCounterRequest (line 11) | public class CreateCounterRequest
    method CreateCounterRequest (line 18) | public CreateCounterRequest(int i_key_size)
    method GetPacket (line 24) | public byte[] GetPacket()
  class AdvanceCounterRequest (line 33) | public class AdvanceCounterRequest
    method AdvanceCounterRequest (line 40) | public AdvanceCounterRequest(UInt32 i_counter_index, UInt32 i_new_coun...
    method GetPacket (line 48) | public byte[] GetPacket(SHA256Managed hasher)

FILE: ironclad-apps/src/Clients/TrInc/TrIncResponses.cs
  class CreateCounterResponse (line 11) | class CreateCounterResponse
    method CreateCounterResponse (line 19) | public CreateCounterResponse(byte[] packet)
    method ToString (line 37) | public override string ToString()
  class AdvanceCounterResponse (line 43) | class AdvanceCounterResponse
    method AdvanceCounterResponse (line 57) | public AdvanceCounterResponse(byte[] packet, RSACryptoServiceProvider ...
    method ToString (line 99) | public override string ToString()

FILE: ironclad-apps/src/Clients/TrIncSrv/Parameters.cs
  class InvalidParameterException (line 10) | class InvalidParameterException : Exception
    method InvalidParameterException (line 13) | public InvalidParameterException(string i_contents) { contents = i_con...
  class Parameters (line 16) | public class Parameters
    method Print (line 18) | public static void Print()
    method PrintUsage (line 23) | public static void PrintUsage()
    method ApplyArguments (line 31) | public static void ApplyArguments (string[] args)
    method ApplyArgument (line 48) | public static void ApplyArgument (string arg)
    method ApplyArgumentsInFile (line 74) | public static void ApplyArgumentsInFile(string filename)

FILE: ironclad-apps/src/Clients/TrIncSrv/Program.cs
  class Program (line 12) | class Program
    method HandleRequest (line 14) | static byte[] HandleRequest(byte[] request)
    method Main (line 19) | static void Main(string[] args)

FILE: ironclad-apps/src/Clients/TrIncSrv/StateMachine.cs
  class TrIncCounter (line 11) | class TrIncCounter
    method TrIncCounter (line 19) | public TrIncCounter(RSACryptoServiceProvider i_public_key)
  class StateMachine (line 26) | class StateMachine
    method StateMachine (line 32) | public StateMachine()
    method HandleRequest (line 39) | public byte[] HandleRequest(byte[] requestBytes)

FILE: ironclad-apps/src/Clients/TrIncSrv/TrIncRequest.cs
  class TrIncRequest (line 10) | public class TrIncRequest
    method TrIncRequest (line 12) | public TrIncRequest() { }
    method ParseRequest (line 14) | public static object ParseRequest (byte[] request)
  class CreateCounterRequest (line 38) | public class CreateCounterRequest
    method CreateCounterRequest (line 42) | public CreateCounterRequest(byte[] i_public_key)
    method ParseRequest (line 47) | public static object ParseRequest (byte[] request)
  class AdvanceCounterRequest (line 65) | public class AdvanceCounterRequest
    method AdvanceCounterRequest (line 72) | public AdvanceCounterRequest(UInt32 i_counter_index, byte[] i_new_coun...
    method ParseRequest (line 80) | public static object ParseRequest (byte[] request)

FILE: ironclad-apps/src/Clients/TrIncSrv/TrIncResponse.cs
  class TrIncSrvResponse (line 10) | class TrIncSrvResponse
    method EncodeCreateCounterResponse (line 12) | public static byte[] EncodeCreateCounterResponse (UInt32 error_code, U...
    method EncodeAdvanceCounterResponse (line 23) | public static byte[] EncodeAdvanceCounterResponse (UInt32 error_code, ...

FILE: ironclad-apps/src/Clients/UdpEchoClient/Program.cs
  class Program (line 8) | class Program
    method Main (line 10) | static void Main(string[] Args)
    method Usage (line 53) | static void Usage()

FILE: ironclad-apps/src/Dafny/BuildExceptions.py
  class Exceptions (line 3) | class Exceptions():
    method __init__ (line 4) | def __init__(self):
    method addFlag (line 13) | def addFlag(self, basename, flagstr):
    method __getitem__ (line 17) | def __getitem__(self, basename):

FILE: ironclad-apps/src/DafnyTestDriver/DafnyTestDriver/Program.cs
  class Program (line 10) | class Program
    method Main (line 13) | static void Main(string[] args)

FILE: ironclad-apps/src/DafnyTestDriver/DafnyTestDriver/assembly.cs
  class @__default (line 5) | public partial class @__default
    method @asm__BitwiseXor (line 7) | public static BigInteger @asm__BitwiseXor(BigInteger a, BigInteger b)
    method @asm__BitwiseAnd (line 11) | public static BigInteger @asm__BitwiseAnd(BigInteger a, BigInteger b)
    method @asm__BitwiseOr (line 15) | public static BigInteger @asm__BitwiseOr(BigInteger a, BigInteger b)
    method @asm__LeftShift (line 19) | public static BigInteger @asm__LeftShift(BigInteger a, BigInteger b)
    method @asm__RightShift (line 26) | public static BigInteger @asm__RightShift(BigInteger a, BigInteger b)
    method @asm__BitwiseNot (line 30) | public static BigInteger @asm__BitwiseNot(BigInteger a)
    method @asm__RotateRight (line 34) | public static BigInteger @asm__RotateRight(BigInteger a, BigInteger b)
    method @asm__RotateLeft (line 42) | public static BigInteger @asm__RotateLeft(BigInteger a, BigInteger b)
    method Word32 (line 54) | static void Word32(BigInteger a)
    method @asm__Add (line 59) | public static BigInteger @asm__Add(BigInteger a, BigInteger b)
    method @asm__Sub (line 69) | public static BigInteger @asm__Sub(BigInteger a, BigInteger b)
    method @method__Mul (line 78) | public static void @method__Mul(BigInteger a, BigInteger b, out BigInt...
    method @asm__Mul64 (line 85) | public static void @asm__Mul64(BigInteger a, BigInteger b, out BigInte...
    method @asm__Mul (line 97) | public static BigInteger @asm__Mul(BigInteger a, BigInteger b)
    method @asm__Div (line 106) | public static BigInteger @asm__Div(BigInteger a, BigInteger b)
    method @asm__Mod (line 113) | public static BigInteger @asm__Mod(BigInteger a, BigInteger b)
    method @method__DivMod (line 120) | public static void @method__DivMod(BigInteger zero/*?*/, BigInteger a,...
    method @asm__Rdtsc (line 127) | public static void @asm__Rdtsc(out BigInteger hi, out BigInteger lo)
    method @asm__declassify__result (line 133) | public void @asm__declassify__result(BigInteger @concrete, out BigInte...
    method @GetBootloaderArgWord (line 137) | public static void @GetBootloaderArgWord(BigInteger @index, out BigInt...
    method display_seq (line 143) | public void display_seq(BigInteger[] x)
    method @get__random (line 153) | public void @get__random(BigInteger countb, out Dafny.Sequence<BigInte...
    method InitK__SHA256__0__to__10 (line 166) | public static void InitK__SHA256__0__to__10(BigInteger[] @result)
    method @ComputeWsForBlockStep2__SHA256 (line 171) | public static void @ComputeWsForBlockStep2__SHA256(BigInteger[] @M, Bi...
    method debug__print (line 175) | public static void debug__print(BigInteger m1, BigInteger m2)

FILE: ironclad-apps/src/DafnyTestDriver/DafnyTestDriver/debug.cs
  class @__default (line 3) | public partial class @__default
    method BIFake (line 6) | public static BigInteger BIFake(int val, int count)

FILE: ironclad-apps/src/DafnyTestDriver/DafnyTestDriver/profile.cs
  class Profiler (line 7) | public class Profiler
    method Profiler (line 14) | public Profiler(StreamWriter tw)
    method ResetTally (line 33) | public void ResetTally()
    method ProfileTally (line 39) | public void ProfileTally(int category, int value)
    method DisplayTally (line 47) | public void DisplayTally()
  class @__default (line 63) | public partial class @__default
    method ResetTally (line 66) | public static void ResetTally()
    method ProfileTally (line 70) | public static void ProfileTally(BigInteger _category, BigInteger _value)
    method DisplayTally (line 74) | public static void DisplayTally()

FILE: ironclad-apps/tools/BoogieAsm/SymdiffMerge.cs
  class SymdiffMerge (line 9) | class SymdiffMerge
    method Main (line 11) | public static int Main(string[] args)
    method FunVars (line 42) | public List<string> FunVars(string line)
    method ReadMutualSummaries (line 50) | public void ReadMutualSummaries(string msfile)
    method Config (line 77) | public void Config(string msfile, string configfile)
    method Merge (line 99) | public void Merge(string msfile, string mergefile, string axiomWhiteli...

FILE: ironclad-apps/tools/Dafny/DafnyRuntime.cs
  class Set (line 8) | public class Set<T>
    method Set (line 11) | Set(Dictionary<T, bool> d) {
    method FromElements (line 19) | public static Set<T> FromElements(params T[] values) {
    method FromCollection (line 25) | public static Set<T> FromCollection(ICollection<T> values) {
    method Equals (line 66) | public bool Equals(Set<T> other) {
    method Equals (line 69) | public override bool Equals(object other) {
    method GetHashCode (line 72) | public override int GetHashCode() {
    method ToString (line 75) | public override string ToString() {
    method IsProperSubsetOf (line 84) | public bool IsProperSubsetOf(Set<T> other) {
    method IsSubsetOf (line 87) | public bool IsSubsetOf(Set<T> other) {
    method IsSupersetOf (line 96) | public bool IsSupersetOf(Set<T> other) {
    method IsProperSupersetOf (line 99) | public bool IsProperSupersetOf(Set<T> other) {
    method IsDisjointFrom (line 102) | public bool IsDisjointFrom(Set<T> other) {
    method Contains (line 115) | public bool Contains(T t) {
    method Union (line 118) | public Set<T> Union(Set<T> other) {
    method Intersect (line 136) | public Set<T> Intersect(Set<T> other) {
    method Difference (line 154) | public Set<T> Difference(Set<T> other) {
  class MultiSet (line 167) | public class MultiSet<T>
    method MultiSet (line 170) | MultiSet(Dictionary<T, int> d) {
    method FromElements (line 178) | public static MultiSet<T> FromElements(params T[] values) {
    method FromCollection (line 189) | public static MultiSet<T> FromCollection(ICollection<T> values) {
    method FromSeq (line 200) | public static MultiSet<T> FromSeq(Sequence<T> values) {
    method FromSet (line 211) | public static MultiSet<T> FromSet(Set<T> values) {
    method Equals (line 219) | public bool Equals(MultiSet<T> other) {
    method Equals (line 222) | public override bool Equals(object other) {
    method GetHashCode (line 225) | public override int GetHashCode() {
    method ToString (line 228) | public override string ToString() {
    method IsProperSubsetOf (line 240) | public bool IsProperSubsetOf(MultiSet<T> other) {
    method IsSubsetOf (line 243) | public bool IsSubsetOf(MultiSet<T> other) {
    method IsSupersetOf (line 250) | public bool IsSupersetOf(MultiSet<T> other) {
    method IsProperSupersetOf (line 253) | public bool IsProperSupersetOf(MultiSet<T> other) {
    method IsDisjointFrom (line 256) | public bool IsDisjointFrom(MultiSet<T> other) {
    method Contains (line 267) | public bool Contains(T t) {
    method Union (line 270) | public MultiSet<T> Union(MultiSet<T> other) {
    method Intersect (line 292) | public MultiSet<T> Intersect(MultiSet<T> other) {
    method Difference (line 305) | public MultiSet<T> Difference(MultiSet<T> other) {
  class Map (line 335) | public class Map<U, V>
    method Map (line 338) | Map(Dictionary<U, V> d) {
    method FromElements (line 346) | public static Map<U, V> FromElements(params Pair<U, V>[] values) {
    method FromCollection (line 353) | public static Map<U, V> FromCollection(List<Pair<U, V>> values) {
    method Equals (line 360) | public bool Equals(Map<U, V> other) {
    method Equals (line 380) | public override bool Equals(object other) {
    method GetHashCode (line 383) | public override int GetHashCode() {
    method ToString (line 386) | public override string ToString() {
    method IsDisjointFrom (line 395) | public bool IsDisjointFrom(Map<U, V> other) {
    method Contains (line 406) | public bool Contains(U u) {
    method Select (line 409) | public V Select(U index) {
    method Update (line 412) | public Map<U, V> Update(U index, V val) {
  class Sequence (line 423) | public class Sequence<T>
    method Sequence (line 426) | public Sequence(T[] ee) {
    method FromElements (line 434) | public static Sequence<T> FromElements(params T[] values) {
    method FromString (line 437) | public static Sequence<char> FromString(string s) {
    method Select (line 457) | public T Select(ulong index) {
    method Select (line 460) | public T Select(long index) {
    method Select (line 463) | public T Select(uint index) {
    method Select (line 466) | public T Select(int index) {
    method Select (line 469) | public T Select(BigInteger index) {
    method Update (line 472) | public Sequence<T> Update(long index, T t) {
    method Update (line 477) | public Sequence<T> Update(ulong index, T t) {
    method Update (line 480) | public Sequence<T> Update(BigInteger index, T t) {
    method Equals (line 483) | public bool Equals(Sequence<T> other) {
    method Equals (line 487) | public override bool Equals(object other) {
    method GetHashCode (line 490) | public override int GetHashCode() {
    method ToString (line 493) | public override string ToString() {
    method EqualUntil (line 510) | bool EqualUntil(Sequence<T> other, int n) {
    method IsProperPrefixOf (line 517) | public bool IsProperPrefixOf(Sequence<T> other) {
    method IsPrefixOf (line 521) | public bool IsPrefixOf(Sequence<T> other) {
    method Concat (line 525) | public Sequence<T> Concat(Sequence<T> other) {
    method Contains (line 535) | public bool Contains(T t) {
    method Take (line 543) | public Sequence<T> Take(long m) {
    method Take (line 550) | public Sequence<T> Take(ulong n) {
    method Take (line 553) | public Sequence<T> Take(BigInteger n) {
    method Drop (line 556) | public Sequence<T> Drop(long m) {
    method Drop (line 563) | public Sequence<T> Drop(ulong n) {
    method Drop (line 566) | public Sequence<T> Drop(BigInteger n) {
  type Pair (line 572) | public struct Pair<A, B>
    method Pair (line 576) | public Pair(A a, B b) {
  class Helpers (line 581) | public partial class Helpers {
    method QuantBool (line 583) | public static bool QuantBool(bool frall, System.Predicate<bool> pred) {
    method QuantInt (line 590) | public static bool QuantInt(BigInteger lo, BigInteger hi, bool frall, ...
    method QuantSet (line 596) | public static bool QuantSet<U>(Dafny.Set<U> set, bool frall, System.Pr...
    method QuantMap (line 602) | public static bool QuantMap<U,V>(Dafny.Map<U,V> map, bool frall, Syste...
    method QuantSeq (line 608) | public static bool QuantSeq<U>(Dafny.Sequence<U> seq, bool frall, Syst...
    method QuantDatatype (line 614) | public static bool QuantDatatype<U>(IEnumerable<U> set, bool frall, Sy...
    method EuclideanDivision_sbyte (line 640) | public static sbyte EuclideanDivision_sbyte(sbyte a, sbyte b) {
    method EuclideanDivision_short (line 643) | public static short EuclideanDivision_short(short a, short b) {
    method EuclideanDivision_int (line 646) | public static int EuclideanDivision_int(int a, int b) {
    method EuclideanDivision_long (line 665) | public static long EuclideanDivision_long(long a, long b) {
    method EuclideanDivision (line 684) | public static BigInteger EuclideanDivision(BigInteger a, BigInteger b) {
    method EuclideanModulus_sbyte (line 705) | public static sbyte EuclideanModulus_sbyte(sbyte a, sbyte b) {
    method EuclideanModulus_short (line 708) | public static short EuclideanModulus_short(short a, short b) {
    method EuclideanModulus_int (line 711) | public static int EuclideanModulus_int(int a, int b) {
    method EuclideanModulus_long (line 724) | public static long EuclideanModulus_long(long a, long b) {
    method EuclideanModulus (line 737) | public static BigInteger EuclideanModulus(BigInteger a, BigInteger b) {
    method SeqFromArray (line 750) | public static Sequence<T> SeqFromArray<T>(T[] array) {
    method ExpressionSequence (line 756) | public static U ExpressionSequence<T, U>(T t, U u)
    method Let (line 761) | public static U Let<T, U>(T t, Func<T,U> f) {
    method Id (line 767) | public static A Id<A>(A a) {
  type BigRational (line 772) | public struct BigRational
    method ToString (line 777) | public override string ToString() {
    method BigRational (line 780) | public BigRational(int n) {
    method BigRational (line 784) | public BigRational(BigInteger n, BigInteger d) {
    method ToBigInteger (line 789) | public BigInteger ToBigInteger() {
    method Normalize (line 799) | private static void Normalize(BigRational a, BigRational b, out BigInt...
    method CompareTo (line 808) | public int CompareTo(BigRational that) {
    method GetHashCode (line 825) | public override int GetHashCode() {
    method Equals (line 828) | public override bool Equals(object obj) {

FILE: ironclad-apps/tools/DafnyCC/Analyze.cs
  class Set (line 9) | public class Set<A>
    method Set (line 14) | public Set(bool full = false)
    method Set (line 19) | public Set(Set<A> s)
    method Set (line 25) | public Set(IEnumerable<A> elems)
    method Contains (line 31) | public bool Contains(A a) { return full || map.ContainsKey(a); }
    method Add (line 33) | public void Add(A a)
    method IntersectFrom (line 38) | public bool IntersectFrom(Set<A> s)
    method Equals (line 58) | public override bool Equals(object o)
    method ToString (line 65) | public override string ToString()
    method GetHashCode (line 70) | public override int GetHashCode()
  class Analyze (line 76) | public abstract class Analyze
    method Analyze (line 87) | public Analyze(List<string> inVars, List<string> outVars, List<RtlStmt...
    method ComputeControl (line 97) | void ComputeControl()
    method Dataflow (line 128) | void Dataflow(bool forward, bool addAll, Action<int> init, Func<int,Rt...
    method ComputeLiveVars (line 160) | void ComputeLiveVars()
    method ComputeDefVars (line 204) | void ComputeDefVars()
  class Optimize (line 222) | public class Optimize: Analyze
    method Optimize (line 226) | public Optimize(List<string> inVars, List<string> outVars, List<RtlStm...
    method ComputeLiveStmts (line 232) | void ComputeLiveStmts()
    method Run (line 252) | public List<RtlStmt> Run()

FILE: ironclad-apps/tools/DafnyCC/CompileMethod.cs
  class CompileMethod (line 11) | public class CompileMethod: CompileMethodGhost
    method CompileMethod (line 22) | public CompileMethod(DafnySpec dafnySpec, Method method, TypeApply typ...
    method ProcName (line 44) | public static string ProcName(bool isGhost, string x) { return DafnyCC...
    method NewLabel (line 46) | string NewLabel()
    method AsVarOrTemp (line 51) | public RtlVar AsVarOrTemp(Expression exp)
    method AsInt (line 62) | BigInteger? AsInt(Expression exp)
    method AsSimple (line 104) | RtlExp AsSimple(Expression exp)
    method AsSimpleOrTemp (line 123) | RtlExp AsSimpleOrTemp(Expression exp)
    method GroupStatements (line 136) | public void GroupStatements(int startIndex)
    method Move (line 147) | void Move(RtlVar dest, RtlExp src, bool isPtr)
    method Label (line 180) | void Label(string label, bool loop = false)
    method JumpIfHasType (line 185) | void JumpIfHasType(string label, RtlVar e0, string constructor, Type t...
    method Jump (line 203) | void Jump(string label, RtlBinary e = null)
    method Jump (line 251) | void Jump(string label, Expression exp, bool jumpIf = true)
    method ArrayLength (line 340) | void ArrayLength(RtlVar dest, RtlExp eArr)
    method BinaryInstOp (line 354) | string BinaryInstOp(BinaryExpr.Opcode op)
    method AddBoolViaJump (line 368) | void AddBoolViaJump(RtlVar dest, Expression exp)
    method AddBinary (line 381) | void AddBinary(RtlVar dest, string op, Expression exp0, Expression exp1,
    method AddBuildSequenceRec (line 444) | SeqTree AddBuildSequenceRec(Expression exp, List<Tuple<bool,Expression...
    method AddBuildSequence (line 470) | void AddBuildSequence(RtlVar dest, Expression exp)
    method AddFieldSelect (line 479) | void AddFieldSelect(RtlVar dest, RtlVar obj, Type objType, string fiel...
    method AddMatch (line 503) | public void AddMatch<Case>(RtlVar dest, Expression src, List<Case> cases,
    method AddExpression (line 559) | void AddExpression(RtlVar dest, Expression exp)
    method AddAssignmentRhs (line 902) | void AddAssignmentRhs(RtlVar dest, AssignmentRhs rhs)
    method AssignmentRhsAsSimpleOrTemp (line 924) | RtlExp AssignmentRhsAsSimpleOrTemp(Type t, AssignmentRhs rhs)
    method AssignSeqLhs (line 940) | void AssignSeqLhs(RtlVar eSeq, RtlExp eInd, RtlExp eVal)
    method AssignLhs (line 971) | Tuple<RtlVar,Action> AssignLhs(Expression lhs)
    method InstructionAttributes (line 992) | List<Tuple<string,string>> InstructionAttributes(Attributes attrs)
    method AsRtlMem (line 1001) | public RtlMem AsRtlMem(Expression e)
    method AddCallInstruction (line 1014) | public void AddCallInstruction(List<RtlVar> destVars, List<Formal> ins...
    method AddCall (line 1084) | public void AddCall(List<RtlVar> destVars, bool isGhost, bool isHeap, ...
    method AddCall (line 1185) | public void AddCall(List<RtlVar> destVars, bool isGhost, bool isHeap, ...
    method AddCall (line 1190) | private void AddCall<T>(List<RtlVar> destVars, bool isGhost, bool isHe...
    method AddCall (line 1195) | private void AddCall<T>(List<RtlVar> destVars, bool isGhost, bool isHe...
    method AddCall (line 1213) | private void AddCall<T>(List<RtlVar> destVars, bool isGhost, bool isHe...
    method AddReturn (line 1219) | void AddReturn(List<AssignmentRhs> rhss)
    method AddVarDecl (line 1239) | void AddVarDecl(string varName, Type t, bool isGhost)
    method AddResolvedGhostStatement (line 1250) | public override void AddResolvedGhostStatement(Statement stmt, Attribu...
    method AddResolvedStatement (line 1296) | void AddResolvedStatement(Statement stmt)
    method AddStatement (line 1465) | void AddStatement(Statement stmt)
    method IsPtrType (line 1485) | public static bool IsPtrType(Type t)
    method WriteDefaultRelationalRequires (line 1490) | protected void WriteDefaultRelationalRequires(bool isRelational)
    method WriteDefaultRelationalEnsures (line 1499) | protected void WriteDefaultRelationalEnsures(bool isRelational)
    method WriteAllVars (line 1512) | protected void WriteAllVars()
    method CompileInstruction (line 1522) | public void CompileInstruction()
    method Compile (line 1654) | public override void Compile()

FILE: ironclad-apps/tools/DafnyCC/DafnyCC.cs
  class DafnyCC_Options (line 11) | public class DafnyCC_Options: DafnySpec_Options
    method ParseOption (line 17) | protected override bool ParseOption(string name, Bpl.CommandLineOption...
  class DafnyCC (line 36) | public class DafnyCC: DafnySpec
    method Main (line 93) | public static new void Main(string[] args)
    method ProcName (line 127) | public static string ProcName(bool isGhost, string x) { return (isGhos...
    method PreserveHeap (line 129) | public static string PreserveHeap(bool minVerify, List<string> mods, s...
    method PreserveHeap (line 140) | public static string PreserveHeap(bool minVerify)
    method AddLemma (line 145) | public override void AddLemma(LemmaCall lemma)
    method AddMethodAsLemma (line 150) | public override void AddMethodAsLemma(Method method)
    method WriteLemmas (line 161) | public override void WriteLemmas(TextWriter writer, CompileBase contex...
    method WriteAxiomAnnotations (line 207) | private void WriteAxiomAnnotations(TextWriter writer, IEnumerable<stri...
    method ChooseOutDirWriter (line 216) | public override Tuple<TextWriter,TextWriter,string,List<string>> Choos...
    method ChooseWriter (line 262) | public override Tuple<TextWriter,TextWriter,string,List<string>> Choos...
    method CompileDatatype1Code (line 288) | void CompileDatatype1Code(Type t, TypeApply app)
    method CompileDatatype1 (line 350) | void CompileDatatype1(Type t, TypeApply app)
    method loadTagDecl (line 364) | string loadTagDecl(String List, String tags)
    method allocDecl1 (line 382) | string allocDecl1(string list, string cons, string _cons, string Param...
    method allocDecl2 (line 396) | string allocDecl2(string list, string cons, string preserve, string args)
    method allocDeclArray (line 413) | string allocDeclArray(int IPSize, string preserve)
    method loadField (line 440) | string loadField(string list, string dataIsCons, string tl)
    method arrayElementProperties (line 459) | string arrayElementProperties()
    method loadArrayElement (line 475) | string loadArrayElement()
    method storeArrayElement (line 498) | string storeArrayElement()
    method allocImpl1 (line 527) | string allocImpl1(string list, string con, string cons, string _cons, ...
    method allocImplInt (line 579) | string allocImplInt(string list, string cons, string tl, string stackO...
    method allocImplPtr (line 589) | string allocImplPtr(string list, string cons, string tl, string stackO...
    method allocImpl2 (line 601) | string allocImpl2(string list, string cons, string destOffset)
    method allocArrayImpl (line 617) | string allocArrayImpl(int IPSize, string triggers, string destOffset)
    method arrayElementPropertiesImpl (line 680) | string arrayElementPropertiesImpl()
    method loadArrayElementImpl (line 693) | string loadArrayElementImpl()
    method storeArrayElementImpl (line 708) | string storeArrayElementImpl()
    method CompileDatatype2 (line 724) | void CompileDatatype2(Type t, TypeApply app)
    method heapDecl (line 871) | string heapDecl()
    method heapProcs (line 912) | string heapProcs()
    method heapWordInvArray (line 974) | string heapWordInvArray()
    method StackTO (line 987) | string StackTO(int offset)
    method StackTO64 (line 992) | string StackTO64(int offset)
    method GcTO (line 997) | string GcTO(int offset)
    method GcTO64 (line 1002) | string GcTO64(int offset)
    method CompileDatatypes (line 1007) | void CompileDatatypes()
    method AddDatatypeLemmas (line 1064) | public override void AddDatatypeLemmas(UserDefinedType t, TypeApply ap...
    method NewCompileMethod (line 1092) | public override CompileMethodGhost NewCompileMethod(DafnySpec dafnySpe...
    method Compile_FunctionAsMethod (line 1098) | public override void Compile_FunctionAsMethod(Function function, Dicti...
    method GetSeqBuildMethod (line 1168) | public Tuple<Method,TypeApply> GetSeqBuildMethod(Type t, SeqTree tree,...
    method addAxioms (line 1308) | void addAxioms(TextWriter sw, IEnumerable<string> axiomModules)
    method CompileCodeStart (line 1316) | public Dictionary<string,string> CompileCodeStart(DafnyCC_Options opti...
    method CompileCodeEnd (line 1359) | public void CompileCodeEnd(DafnyCC_Options options)
    method CompileCode (line 1385) | public void CompileCode(DafnyCC_Options options, IList<string> files)

FILE: ironclad-apps/tools/DafnyCC/RegAlloc.cs
  class RegAlloc (line 11) | public class RegAlloc : Analyze
    method RegAlloc (line 38) | public RegAlloc(
    method Reg (line 122) | public static string Reg(string s)
    method TypeString (line 127) | public string TypeString(Type t)
    method IsPtr (line 132) | public bool IsPtr(string x)
    method IsArray (line 137) | public bool IsArray(string x)
    method ArgsRetsCount (line 142) | public int ArgsRetsCount() { return Math.Max(callIntArgs + callIntRets...
    method LocalsCount (line 143) | public int LocalsCount() { return Math.Max(spillInts.Count, spillPtrs....
    method InsOutsCount (line 144) | public int InsOutsCount() { return Math.Max(inInts.Count + outInts.Cou...
    method FrameCount (line 147) | public int FrameCount()
    method FrameVisibleCount (line 153) | public int FrameVisibleCount()
    method LocalsOffset (line 158) | public int LocalsOffset() { return ArgsRetsCount() * 4; }
    method OutsOffset (line 159) | public int OutsOffset() { return LocalsOffset() + 4 * LocalsCount() + ...
    method InIntsOffset (line 160) | public int InIntsOffset() { return OutsOffset() + 4 * outInts.Count; }
    method InPtrsOffset (line 161) | public int InPtrsOffset() { return OutsOffset() + 4 * outPtrs.Count; }
    method StackOMem (line 163) | private string StackOMem(int offset) { return "OMem(MReg(ESP, " + offs...
    method StackOMemPtr (line 164) | private string StackOMemPtr(int offset) { return StackOMem(offset + st...
    method Spill (line 166) | private RtlExp Spill(string x)
    method Alloc (line 188) | public List<RtlStmt> Alloc()
    method MakeMap (line 699) | public Dictionary<string, string> MakeMap(List<string> assignment)

FILE: ironclad-apps/tools/DafnyCC/Rtl.cs
  class RtlMem (line 9) | public class RtlMem: RtlExp
    method RtlMem (line 16) | public RtlMem(RtlExp ptr, string offset):this(ptr, new RtlLiteral(offs...
    method RtlMem (line 17) | public RtlMem(RtlExp ptr, RtlExp offset):this(ptr, null, null, offset)...
    method RtlMem (line 19) | public RtlMem(RtlExp ptr, RtlExp scale, RtlExp index, RtlExp offset)
    method AddVars (line 34) | public override void AddVars(List<string> vars)
    method Subst (line 43) | public override RtlExp Subst(Dictionary<string,string> map)
    method ToString (line 48) | public override string ToString() { return "INVALID_BOOGIE_CODE+RtlMem...
    method AsOperand (line 50) | public override string AsOperand()
  class RtlLoopStart (line 60) | public class RtlLoopStart: RtlStmt
    method RtlLoopStart (line 62) | public RtlLoopStart() {}
    method ToString (line 63) | public override string ToString() { return ""; }
  class RtlStmtGroup (line 67) | public class RtlStmtGroup: RtlStmt
    method RtlStmtGroup (line 71) | public RtlStmtGroup(IEnumerable<RtlStmt> stmts)
    method Subst (line 77) | public override RtlStmt Subst(Dictionary<string,string> map)
    method AddDefs (line 81) | public override void AddDefs(List<string> vars)
    method AddUses (line 85) | public override void AddUses(List<string> vars)
    method ToString (line 89) | public override string ToString()
  class RtlArg (line 95) | public class RtlArg
    method RtlArg (line 102) | public RtlArg(bool isIn, bool isOut, RtlExp e, string pinReg = null)
    method Subst (line 110) | public virtual RtlArg Subst(Dictionary<string,string> map)
    method ToString (line 115) | public override string ToString() { return e.ToString(); }
    method AsOperand (line 116) | public virtual string AsOperand() { return isOut ? e.ToString() : e.As...
  class RtlInst (line 119) | public class RtlInst: RtlStmt
    method RtlInst (line 127) | public RtlInst(string op, IEnumerable<RtlArg> args, bool ghost, string...
    method RtlInst (line 136) | public RtlInst(string op, IEnumerable<RtlVar> outs, IEnumerable<RtlVar...
    method AddDefs (line 145) | public override void AddDefs(List<string> vars)
    method AddUses (line 153) | public override void AddUses(List<string> vars)
    method Subst (line 161) | public override RtlStmt Subst(Dictionary<string,string> map)
    method ToString (line 166) | public override string ToString()
  class RtlCallInOut (line 181) | public class RtlCallInOut: RtlInst
    method RtlCallInOut (line 186) | public RtlCallInOut(int index, bool isRet, RtlExp e):
    method Subst (line 193) | public override RtlStmt Subst(Dictionary<string,string> map)
    method ToString (line 198) | public override string ToString()
  class RtlCall (line 204) | public class RtlCall: RtlInst
    method RtlCall (line 206) | public RtlCall(string op, IEnumerable<RtlVar> outs, IEnumerable<RtlExp...
    method AddDefs (line 211) | public override void AddDefs(List<string> vars)
    method AddUses (line 216) | public override void AddUses(List<string> vars)
    method Subst (line 221) | public override RtlStmt Subst(Dictionary<string, string> map)
    method ToString (line 227) | public override string ToString()
  class RtlStmtComputed (line 248) | public class RtlStmtComputed: RtlInst
    method RtlStmtComputed (line 252) | public RtlStmtComputed(Func<RtlStmtComputed,string> toString, IEnumera...
    method Subst (line 258) | public override RtlStmt Subst(Dictionary<string, string> map)
    method ToString (line 265) | public override string ToString()
  class RtlLabel (line 271) | public class RtlLabel: RtlStmt
    method RtlLabel (line 275) | public RtlLabel(string label, bool loop = false) { this.label = label;...
    method ToString (line 277) | public override string ToString()
  class RtlJump (line 283) | public class RtlJump: RtlStmt
    method RtlJump (line 287) | public RtlJump(string label, RtlBinary cond)
    method AddUses (line 294) | public override void AddUses(List<string> vars)
    method Subst (line 302) | public override RtlStmt Subst(Dictionary<string,string> map)
    method ToString (line 307) | public override string ToString()
  class RtlReturn (line 332) | public class RtlReturn: RtlStmt
    method RtlReturn (line 336) | public RtlReturn(IEnumerable<RtlVar> args)
    method AddUses (line 341) | public override void AddUses(List<string> vars)
    method Subst (line 346) | public override RtlStmt Subst(Dictionary<string,string> map)
    method ToString (line 351) | public override string ToString()

FILE: ironclad-apps/tools/DafnySpec/Compile.cs
  class TypeApply (line 11) | public class TypeApply
    method TypeApply (line 21) | public TypeApply(DafnySpec dafnySpec, string name, List<TypeParameter>...
    method ToType (line 40) | static Type ToType(Type t)
    method AppType (line 45) | public Type AppType(Type t)
    method AppName (line 53) | public string AppName()
    method AppFullName (line 58) | public string AppFullName()
    method Equals (line 64) | public override bool Equals(object obj)
    method GetHashCode (line 76) | public override int GetHashCode()
  class SeqTree (line 82) | public class SeqTree
    method SeqTree (line 87) | public SeqTree(SeqTree left, SeqTree right, int buildCount) { this.lef...
    method TreeName (line 89) | public static string TreeName(SeqTree s)
  class CompileBase (line 96) | public class CompileBase
    method CompileBase (line 121) | public CompileBase(DafnySpec dafnySpec, TypeApply typeApply,
    method GhostProcName (line 133) | public static string GhostProcName(string x) { return DafnySpec.GhostP...
    method FunName (line 134) | public static string FunName(string x) { return DafnySpec.FunName(x); }
    method SimpleName (line 135) | public static string SimpleName(string x) { return DafnySpec.SimpleNam...
    method AppType (line 136) | public Type AppType(Type t) { return typeApply.AppType(t); }
    method TypeString (line 137) | public string TypeString(Type t) { return dafnySpec.TypeString(t); }
    method GhostVar (line 139) | public string GhostVar(string x, bool allowRename = true)
    method TempName (line 145) | public string TempName()
    method AddRename (line 150) | public void AddRename(string x)
    method PushRename (line 155) | public Dictionary<string,string> PushRename()
    method PushRename (line 160) | public Dictionary<string,string> PushRename(string x)
    method PushRename (line 167) | public Dictionary<string,string> PushRename(IEnumerable<string> xs)
    method PopRename (line 174) | public void PopRename(Dictionary<string,string> oldRenamer)
    method PushForall (line 179) | public RtlStmt PushForall()
    method PopForall (line 188) | public void PopForall()
    method Indent (line 193) | public void Indent()
    method Unindent (line 198) | public void Unindent()
    method IsConstant (line 203) | public static bool IsConstant(Expression e)
    method IntToTyped (line 218) | public static string IntToTyped(Type t, string e)
    method IntEqTyped (line 227) | public static RtlExp IntEqTyped(Type t, RtlExp et, RtlExp ei)
    method IntEqTyped (line 238) | public static string IntEqTyped(Type t, string et, string ei)
    method GetExp (line 243) | public Expression GetExp(Expression e)
    method TempVar (line 250) | public RtlVar TempVar(Type t, bool declare = true)
    method AsVar (line 261) | public RtlVar AsVar(Expression exp)
    method AsVar (line 279) | public RtlVar AsVar(BoundVar x)
    method Triggers (line 285) | public string Triggers(Attributes attrs, Func<Expression,RtlExp> f)
    method GhostIfThenElse (line 298) | public RtlExp GhostIfThenElse(RtlExp eTest, Func<RtlExp> feThen, Func<...
    method GhostLet (line 323) | public RtlExp GhostLet(Microsoft.Boogie.IToken tok, List<BoundVar> lhs...
    method GhostExpressionRec (line 352) | public RtlExp GhostExpressionRec(Expression exp, bool inRecSpec = fals...
    method GhostExpression (line 749) | public RtlExp GhostExpression(Expression exp, bool inRecSpec = false, ...
    method DecreasesExp (line 758) | public string DecreasesExp(ICallable target)
    method AddTypeWellFormed (line 801) | public void AddTypeWellFormed(List<RtlExp> specs, RtlExp exp, bool isG...
    method AddTypeWellFormed (line 835) | public void AddTypeWellFormed(List<RtlExp> specs, string name, bool is...
    method AddTypeWellFormed (line 840) | public void AddTypeWellFormed(List<RtlExp> specs, List<Formal> formals)
    method GetTypeWellFormed (line 845) | public List<RtlExp> GetTypeWellFormed(List<Tuple<string,bool,Type>> vars)
    method GetTypeWellFormedExp (line 852) | public RtlExp GetTypeWellFormedExp(List<Tuple<string,bool,Type>> vars,...
    method SymdiffLinearityPoint (line 862) | public void SymdiffLinearityPoint()
    method AddGhostCall (line 867) | public void AddGhostCall(List<RtlVar> destVars, string name, List<Expr...
    method AddGhostCall (line 886) | private void AddGhostCall(List<RtlVar> destVars, List<Expression> args...
    method AddGhostVarDecl (line 891) | public void AddGhostVarDecl(string varName, Type t, bool isGhost)
    method MoveGhost (line 903) | public void MoveGhost(RtlVar destVar, RtlExp rhs)
    method AddResolvedGhostStatement (line 908) | public virtual void AddResolvedGhostStatement(Statement stmt, Attribut...
    method ResolveStmt (line 1121) | public List<Statement> ResolveStmt(Statement s)
    method GetTypeArgs (line 1138) | public List<Type> GetTypeArgs(Attributes attrs)
    method StartTypeArg (line 1166) | public Type StartTypeArg(Attributes attrs)
    method AddGhostStatement (line 1197) | public void AddGhostStatement(Statement stmt, Attributes attribs)

FILE: ironclad-apps/tools/DafnySpec/CompileField.cs
  class CompileField (line 11) | public class CompileField
    method CompileField (line 17) | public CompileField(DafnySpec dafnySpec, Field field, TextWriter iwriter)
    method Compile (line 24) | public void Compile()

FILE: ironclad-apps/tools/DafnySpec/CompileFunction.cs
  class CompileFunction (line 11) | public class CompileFunction: CompileBase
    method CompileFunction (line 15) | public CompileFunction(DafnySpec dafnySpec, Function function, TypeApp...
    method Compile (line 22) | public void Compile()

FILE: ironclad-apps/tools/DafnySpec/CompileMethodGhost.cs
  class CompileMethodGhost (line 11) | public class CompileMethodGhost: CompileBase
    method CompileMethodGhost (line 17) | public CompileMethodGhost(DafnySpec dafnySpec, Method method, TypeAppl...
    method GetStaticFieldMods (line 24) | public List<string> GetStaticFieldMods()
    method CompileGhost (line 31) | public void CompileGhost(string name, string parms, string rets, strin...
    method CompileGhost (line 62) | public void CompileGhost()
    method Compile (line 134) | public virtual void Compile()

FILE: ironclad-apps/tools/DafnySpec/DafnySpec.cs
  class DafnySpec_Options (line 11) | public class DafnySpec_Options: DafnyOptions
    method ParseOption (line 16) | protected override bool ParseOption(string name, Bpl.CommandLineOption...
  class LemmaCall (line 35) | public class LemmaCall
    method LemmaCall (line 42) | public LemmaCall(string module, Type type, string stmt, bool loopLemma)
  class NonglobalVariable (line 51) | public class NonglobalVariable
    method CompilerizeName (line 53) | public static string CompilerizeName(string s)
  class DafnySpec (line 60) | public class DafnySpec
    method Main (line 84) | public static void Main(string[] args)
    method CleanName (line 112) | public static string CleanName(string x)
    method GhostProcName (line 117) | public static string GhostProcName(string x) { return "proc_" + CleanN...
    method FunName (line 118) | public static string FunName(string x) { return "fun_" + CleanName(x); }
    method SimpleName (line 119) | public static string SimpleName(string x) { return x.Contains('.') ? x...
    method SanitizedName (line 121) | public static string SanitizedName(MemberDecl m)
    method SimpleSanitizedName (line 126) | public static string SimpleSanitizedName(MemberDecl m) { return Simple...
    method IsArrayType (line 128) | public static bool IsArrayType(Type t)
    method IsHeapFunction (line 133) | public static bool IsHeapFunction(Function f)
    method IsHeapMethod (line 140) | public static bool IsHeapMethod(Method m)
    method IsPtrType (line 148) | public static bool IsPtrType(Type t)
    method MakeIdentifierExpr (line 153) | public static IdentifierExpr MakeIdentifierExpr(string name, Type type...
    method MakeBinaryExpr (line 162) | public static BinaryExpr MakeBinaryExpr(BinaryExpr.Opcode op,
    method ToType (line 172) | public static Type ToType(Type t)
    method TypeString (line 187) | public string TypeString(Type t)
    method FindMethod (line 244) | public Method FindMethod(string name)
    method FindFunction (line 256) | public Function FindFunction(string name)
    method FindDatatype (line 268) | public DatatypeDecl FindDatatype(string name)
    method AddLemma (line 280) | public virtual void AddLemma(LemmaCall lemma)
    method AddMethodAsLemma (line 284) | public virtual void AddMethodAsLemma(Method method)
    method WriteLemmas (line 288) | public virtual void WriteLemmas(TextWriter writer, CompileBase context...
    method WriteInterfaceImports (line 295) | public void WriteInterfaceImports(TextWriter writer, IEnumerable<strin...
    method GatherAllImports (line 304) | public IEnumerable<string> GatherAllImports(List<string> imports)
    method WriteImplementationHeader (line 315) | public void WriteImplementationHeader(TextWriter writer, string name, ...
    method IsSeqFile (line 323) | public bool IsSeqFile(string filename, bool spec)
    method IsSpecFile (line 329) | public bool IsSpecFile(string filename)
    method ModuleNameFromFilename (line 334) | public string ModuleNameFromFilename(string filename)
    method AddImports (line 340) | public void AddImports(Dictionary<string,string> imports, string filen...
    method ChooseOutDirWriter (line 389) | public virtual Tuple<TextWriter,TextWriter,string,List<string>> Choose...
    method TrustedType (line 425) | public bool TrustedType(Type t)
    method TrustedType (line 443) | public bool TrustedType(IEnumerable<Type> ts)
    method ChooseWriter (line 448) | public virtual Tuple<TextWriter,TextWriter,string,List<string>> Choose...
    method CompileDatatype1Ghost (line 469) | public void CompileDatatype1Ghost(Type t, TypeApply app, TextWriter wr...
    method CompileDatatypesGhost (line 524) | void CompileDatatypesGhost()
    method NewCompileMethod (line 534) | public virtual CompileMethodGhost NewCompileMethod(DafnySpec dafnySpec...
    method Compile_Method (line 540) | public TypeApply Compile_Method(Method method, Dictionary<TypeParamete...
    method Compile_FunctionAsMethod (line 573) | public virtual void Compile_FunctionAsMethod(Function function, Dictio...
    method Compile_Function (line 578) | public TypeApply Compile_Function(Function function, Dictionary<TypePa...
    method AddDatatypeLemmas (line 630) | public virtual void AddDatatypeLemmas(UserDefinedType t, TypeApply apply)
    method Compile_Datatype (line 634) | public TypeApply Compile_Datatype(UserDefinedType t)
    method Compile_Constructor (line 652) | public TypeApply Compile_Constructor(Type t, string constructor, List<...
    method Compile_Constructor (line 671) | public TypeApply Compile_Constructor(Type t, string constructor, Dicti...
    method Compile_SeqType (line 680) | public TypeApply Compile_SeqType(SeqType t)
    method GetSeqOperation (line 687) | public Tuple<Function,TypeApply> GetSeqOperation(Type t, string op)
    method GetSeqOperationName (line 694) | public string GetSeqOperationName(Type t, string op)
    method GetSeqMethod (line 701) | public Tuple<Method,TypeApply> GetSeqMethod(Type t, string op)
    method CompileSpecStart (line 708) | public Dictionary<string,string> CompileSpecStart(DafnySpec_Options op...
    method CompileSpecEnd (line 736) | public void CompileSpecEnd()
    method DeclareProgram (line 756) | public void DeclareProgram(Program program)
    method CompileProgram (line 788) | public void CompileProgram(Program program)
    method CompileSequenceSpecs (line 845) | public void CompileSequenceSpecs()
    method CompileSpec (line 866) | public void CompileSpec(DafnySpec_Options options, IList<string> files)

FILE: ironclad-apps/tools/DafnySpec/DafnySpecAst/DafnySpecAst.cs
  type IToken (line 11) | public interface IToken
  class Token (line 17) | public class Token: IToken
    method Token (line 24) | public Token(string filename, int line) { this._filename = filename; t...
  class BigDec (line 34) | public class BigDec
    method BigDec (line 37) | internal BigDec(string s) { this.s = s; }
    method FromString (line 38) | public static BigDec FromString(string s) { return new BigDec(s); }
    method ToString (line 39) | public override string ToString() { return s; }
    method ToDecimalString (line 40) | public string ToDecimalString() { return s; }
  class Attributes (line 48) | public class Attributes
    method Attributes (line 54) | public Attributes(string Name, List<Expression> Args, Attributes Prev)...
    method Resolve (line 56) | public static void Resolve(Resolver resolver, Attributes attrs)
    method Contains (line 67) | public static bool Contains(Attributes attrs, string name)
    method FindExpressions (line 72) | public static List<Expression> FindExpressions(Attributes attrs, strin...
  class Type (line 83) | public abstract class Type
    type NumericPersuation (line 90) | public enum NumericPersuation { Int, Real }
    method IsNumericBased (line 92) | public bool IsNumericBased(NumericPersuation p) {
    method TypeName (line 97) | public abstract string TypeName(object o);
    method Equals (line 100) | public override abstract bool Equals(Object o);
    method GetHashCode (line 101) | public override int GetHashCode() { return 0; }
    method Subst (line 102) | public abstract Type Subst(Dictionary<TypeParameter,Type> map);
    method Resolve (line 103) | public virtual void Resolve(Resolver resolver) {}
  class TypeParameter (line 106) | public class TypeParameter
    method TypeParameter (line 110) | public TypeParameter(string Name) { this.Name = Name; }
    method TypeParameter (line 111) | public TypeParameter(Token tok, string Name) { this.Name = Name; }
    method Equals (line 113) | public override bool Equals(object other)
    method GetHashCode (line 119) | public override int GetHashCode() { return Name.GetHashCode(); }
  class TypeProxy (line 122) | public class TypeProxy: Type
    method TypeProxy (line 126) | public TypeProxy(Type T) { this.T = T; }
    method Equals (line 128) | public override bool Equals(Object o) { return T.Equals(o); }
    method GetHashCode (line 129) | public override int GetHashCode() { return T.GetHashCode(); }
    method TypeName (line 130) | public override string TypeName(object o) { return T.TypeName(o); }
    method Subst (line 131) | public override Type Subst(Dictionary<TypeParameter,Type> map) { retur...
  class IntType (line 134) | public class IntType: Type
    method Equals (line 136) | public override bool Equals(Object o) { return o is IntType && !(o is ...
    method GetHashCode (line 137) | public override int GetHashCode() { return 0; }
    method TypeName (line 138) | public override string TypeName(object o) { return "int"; }
    method Subst (line 139) | public override Type Subst(Dictionary<TypeParameter,Type> map) { retur...
  class NatType (line 142) | public class NatType: IntType
    method Equals (line 144) | public override bool Equals(Object o) { return o is NatType; }
    method GetHashCode (line 145) | public override int GetHashCode() { return 0; }
    method TypeName (line 146) | public override string TypeName(object o) { return "nat"; }
    method Subst (line 147) | public override Type Subst(Dictionary<TypeParameter,Type> map) { retur...
  class RealType (line 150) | public class RealType: Type
    method Equals (line 152) | public override bool Equals(Object o) { return o is RealType; }
    method GetHashCode (line 153) | public override int GetHashCode() { return 0; }
    method TypeName (line 154) | public override string TypeName(object o) { return "real"; }
    method Subst (line 155) | public override Type Subst(Dictionary<TypeParameter,Type> map) { retur...
  class BoolType (line 158) | public class BoolType: Type
    method Equals (line 160) | public override bool Equals(Object o) { return o is BoolType; }
    method GetHashCode (line 161) | public override int GetHashCode() { return 0; }
    method TypeName (line 162) | public override string TypeName(object o) { return "bool"; }
    method Subst (line 163) | public override Type Subst(Dictionary<TypeParameter,Type> map) { retur...
  class SeqType (line 166) | public class SeqType: Type
    method SeqType (line 170) | public SeqType(Type Arg) { this.Arg = Arg; }
    method Equals (line 172) | public override bool Equals(Object o) { SeqType that = o as SeqType; r...
    method GetHashCode (line 173) | public override int GetHashCode() { return Arg.GetHashCode(); }
    method TypeName (line 174) | public override string TypeName(object o) { return "seq<" + Arg.TypeNa...
    method Subst (line 175) | public override Type Subst(Dictionary<TypeParameter,Type> map) { retur...
    method Resolve (line 176) | public override void Resolve(Resolver resolver) { Arg.Resolve(resolver...
  class MapType (line 179) | public class MapType: Type
    method MapType (line 184) | public MapType(Type Domain, Type Range) { this.Domain = Domain; this.R...
    method Equals (line 186) | public override bool Equals(Object o) { MapType that = o as MapType; r...
    method GetHashCode (line 187) | public override int GetHashCode() { return Range.GetHashCode(); }
    method TypeName (line 188) | public override string TypeName(object o) { return "map<" + Domain.Typ...
    method Subst (line 189) | public override Type Subst(Dictionary<TypeParameter,Type> map) { retur...
    method Resolve (line 190) | public override void Resolve(Resolver resolver) { Domain.Resolve(resol...
  class UserDefinedType (line 193) | public class UserDefinedType: Type
    method UserDefinedType (line 201) | public UserDefinedType(Token tok, string name, DatatypeDecl decl, List...
    method UserDefinedType (line 211) | public UserDefinedType(Token tok, string name, DatatypeDecl decl, List...
    method UserDefinedType (line 216) | internal UserDefinedType(string name)
    method TypeName (line 221) | public override string TypeName(object o)
    method Equals (line 231) | public override bool Equals(Object o)
    method GetHashCode (line 239) | public override int GetHashCode() { return Name.GetHashCode(); }
    method Subst (line 241) | public override Type Subst(Dictionary<TypeParameter,Type> map)
    method Resolve (line 255) | public override void Resolve(Resolver resolver)
  class BoundVar (line 272) | public class BoundVar
    method BoundVar (line 278) | public BoundVar(Token tok, string name, Type Type)
    method Resolve (line 284) | public void Resolve(Resolver resolver, Type t)
  class Formal (line 292) | public class Formal
    method Formal (line 298) | public Formal(string name, Type type, bool IsGhost) { this.Name = name...
    method Formal (line 300) | public Formal(Token tok, string name, Type type, bool b1, bool b2)
    method Resolve (line 308) | public void Resolve(Resolver resolver)
  class Expression (line 315) | public class Expression
    method WasResolved (line 321) | public bool WasResolved() { return false; }
    method Resolve (line 322) | public virtual Expression Resolve(Resolver resolver, Type t) { Type = ...
  class IdentifierExpr (line 325) | public class IdentifierExpr: Expression
    method IdentifierExpr (line 330) | public IdentifierExpr(Token tok, string name)
    method Resolve (line 335) | public override Expression Resolve(Resolver resolver, Type t)
  class ThisExpr (line 370) | public class ThisExpr: Expression
  class ImplicitThisExpr (line 374) | public class ImplicitThisExpr: Expression
    method ImplicitThisExpr (line 376) | public ImplicitThisExpr() { this.Type = Type.Bool; }
  class ParensExpression (line 379) | public class ParensExpression: Expression
    method ParensExpression (line 382) | private ParensExpression() {}
  class StmtExpr (line 385) | public abstract class StmtExpr: Expression
  class StmtExprCall (line 391) | public class StmtExprCall: StmtExpr
    method StmtExprCall (line 398) | public StmtExprCall(string Name, List<Expression> Args, Expression E) ...
    method Resolve (line 400) | public override Expression Resolve(Resolver resolver, Type t)
  class LiteralExpr (line 413) | public class LiteralExpr: Expression
    method LiteralExpr (line 417) | public LiteralExpr(object Value) { this.Value = Value; }
    method Resolve (line 419) | public override Expression Resolve(Resolver resolver, Type t)
    method IsTrue (line 428) | public static bool IsTrue(Expression e)
  class StringLiteralExpr (line 437) | public class StringLiteralExpr : LiteralExpr
    method StringLiteralExpr (line 439) | public StringLiteralExpr(string s) : base(s) {}
  class UnaryExpr (line 443) | public class UnaryExpr: Expression
  class UnaryOpExpr (line 447) | public class UnaryOpExpr: UnaryExpr
    type Opcode (line 449) | public enum Opcode { Not, Cardinality, Fresh }
    method UnaryOpExpr (line 454) | public UnaryOpExpr(Token tok, Opcode op, Expression e)
    method Resolve (line 460) | public override Expression Resolve(Resolver resolver, Type t)
  class ConversionExpr (line 473) | public class ConversionExpr : UnaryExpr
    method ConversionExpr (line 478) | public ConversionExpr(Type ToType, Expression Input)
    method Resolve (line 484) | public override Expression Resolve(Resolver resolver, Type t)
  class BinaryExpr (line 492) | public class BinaryExpr: Expression
    type Opcode (line 494) | public enum Opcode {
    type ResolvedOpcode (line 500) | public enum ResolvedOpcode { None, SeqEq, SeqNeq, Concat }
    method BinaryExpr (line 507) | public BinaryExpr(Token tok, Opcode op, Expression e0, Expression e1)
    method Resolve (line 514) | public override Expression Resolve(Resolver resolver, Type t)
    method OpcodeString (line 577) | public static string OpcodeString(Opcode Op)
  class ITEExpr (line 605) | public class ITEExpr: Expression
    method ITEExpr (line 611) | public ITEExpr(Expression Test, Expression Thn, Expression Els) { this...
    method Resolve (line 613) | public override Expression Resolve(Resolver resolver, Type t)
  class QuantifierExpr (line 625) | public abstract class QuantifierExpr: Expression
    method QuantifierExpr (line 631) | public QuantifierExpr(List<BoundVar> BoundVars, Attributes Attributes,...
    method Resolve (line 638) | public override Expression Resolve(Resolver resolver, Type t)
  class ExistsExpr (line 657) | public class ExistsExpr: QuantifierExpr
    method ExistsExpr (line 659) | public ExistsExpr(List<BoundVar> BoundVars, Attributes Attributes, Exp...
  class ForallExpr (line 662) | public class ForallExpr: QuantifierExpr
    method ForallExpr (line 664) | public ForallExpr(List<BoundVar> BoundVars, Attributes Attributes, Exp...
  class Lhs (line 667) | public class Lhs
  class LetExpr (line 671) | public class LetExpr: Expression
    method LetExpr (line 679) | public LetExpr(bool Exact, List<ExprLhs> LHSs, List<Expression> RHSs, ...
    method Resolve (line 687) | public override Expression Resolve(Resolver resolver, Type t)
  class MatchCaseExpr (line 713) | public class MatchCaseExpr
    method MatchCaseExpr (line 720) | public MatchCaseExpr(string name, List<BoundVar> Arguments, Expression...
    method Resolve (line 722) | public void Resolve(Resolver resolver, DatatypeDecl data, Type t)
  class MatchExpr (line 741) | public class MatchExpr: Expression
    method MatchExpr (line 747) | public MatchExpr(Expression Source, List<MatchCaseExpr> Cases) { this....
    method Resolve (line 749) | public override Expression Resolve(Resolver resolver, Type t)
  class OldExpr (line 759) | public class OldExpr: Expression
    method OldExpr (line 763) | public OldExpr(Expression E) { this.E = E; }
    method Resolve (line 764) | public override Expression Resolve(Resolver resolver, Type t) { E = E....
  class FunctionCallExpr (line 767) | public class FunctionCallExpr: Expression
    method FunctionCallExpr (line 775) | public FunctionCallExpr(string name, List<Type> typeArgs, List<Express...
    method Resolve (line 782) | public override Expression Resolve(Resolver resolver, Type t)
  class DatatypeValue (line 845) | public class DatatypeValue: Expression
    method DatatypeValue (line 851) | public DatatypeValue(List<Type> InferredTypeArgs, DatatypeCtor Ctor, L...
    method Resolve (line 859) | public override Expression Resolve(Resolver resolver, Type t)
  class LocalVariable (line 866) | public class LocalVariable {
    method LocalVariable (line 871) | public LocalVariable(Token Tok, Token EndTok, String Name, Type Type, ...
  class MemberSelectExpr (line 879) | public class MemberSelectExpr: Expression
    method MemberSelectExpr (line 886) | public MemberSelectExpr(Expression Obj, string FieldName) { this.Obj =...
    method MemberSelectExpr (line 888) | public MemberSelectExpr(Method Method, Dictionary<TypeParameter,Type> ...
    method TypeArgumentSubstitutions (line 890) | public Dictionary<TypeParameter,Type> TypeArgumentSubstitutions()
    method Resolve (line 895) | public override Expression Resolve(Resolver resolver, Type t)
  class SeqSelectExpr (line 921) | public class SeqSelectExpr: Expression
    method SeqSelectExpr (line 928) | public SeqSelectExpr(bool SelectOne, Expression Seq, Expression E0, Ex...
    method Resolve (line 930) | public override Expression Resolve(Resolver resolver, Type t)
  class SeqUpdateExpr (line 940) | public class SeqUpdateExpr: Expression
    method SeqUpdateExpr (line 947) | public SeqUpdateExpr(Expression Seq, Expression Index, Expression Valu...
    method Resolve (line 951) | public override Expression Resolve(Resolver resolver, Type t)
  class SeqDisplayExpr (line 995) | public class SeqDisplayExpr: Expression
    method SeqDisplayExpr (line 999) | public SeqDisplayExpr(List<Expression> Elements) { this.Elements = Ele...
    method Resolve (line 1001) | public override Expression Resolve(Resolver resolver, Type t)
  class ExprLhs (line 1010) | public class ExprLhs
    method ExprLhs (line 1013) | public ExprLhs(BoundVar Var) { this.Var = Var; }
  class ExprRhs (line 1016) | public class ExprRhs
    method ExprRhs (line 1019) | public ExprRhs(Expression Expr) { this.Expr = Expr; }
  class SpecExpression (line 1022) | public class SpecExpression
    method SpecExpression (line 1027) | public SpecExpression(Attributes Attributes, Expression E) { this.Attr...
    method Resolve (line 1028) | public void Resolve(Resolver resolver)
  class FrameExpression (line 1035) | public class FrameExpression
    method FrameExpression (line 1042) | public FrameExpression(string FieldName) { this.FieldName = FieldName; }
    method Resolve (line 1043) | public void Resolve(Resolver resolver) { Field = resolver.Find(resolve...
  class Statement (line 1046) | public class Statement
  class BlockStmt (line 1051) | public class BlockStmt: Statement
    method BlockStmt (line 1055) | public BlockStmt() { Body = new List<Statement>(); }
  class VarDeclStmt (line 1058) | public class VarDeclStmt: Statement
  class VarDecl (line 1068) | internal class VarDecl
    method VarDecl (line 1074) | public VarDecl(string name, Type type, bool isGhost) { this.Name = nam...
    method VarDecl (line 1075) | public VarDecl(Token tok1, Token tok2, string name, Type type, bool is...
  class IfStmt (line 1078) | public class IfStmt: Statement
  class AssertStmt (line 1085) | public class AssertStmt: Statement
  class AssignStmt (line 1090) | public class AssignStmt: Statement
  class CallStmt (line 1096) | public class CallStmt: Statement
    method CallStmt (line 1102) | internal CallStmt(List<Expression> Args, Dictionary<TypeParameter,Type...
  class CalcStmt (line 1110) | public class CalcStmt: Statement
    class BinaryCalcOp (line 1112) | public class BinaryCalcOp
    method Lhs (line 1121) | public static Expression Lhs(Expression e) { return null; }
  class ForallStmt (line 1124) | public class ForallStmt: Statement
  class AssignSuchThatStmt (line 1132) | public class AssignSuchThatStmt: Statement
  class UpdateStmtRhs (line 1138) | public class UpdateStmtRhs
  class ConcreteSyntaxStatement (line 1143) | public class ConcreteSyntaxStatement: Statement
  class UpdateStmt (line 1148) | public class UpdateStmt: Statement
  class Mod (line 1154) | public class Mod
    method Mod (line 1157) | public Mod(List<FrameExpression> Expressions) { this.Expressions = Exp...
  class Decreases (line 1160) | public class Decreases
    method Decreases (line 1163) | public Decreases(List<Expression> Expressions) { this.Expressions = Ex...
    method Resolve (line 1164) | public void Resolve(Resolver resolver)
  type ICallable (line 1174) | public interface ICallable
  class MemberDecl (line 1180) | public class MemberDecl
    method MemberDecl (line 1188) | public MemberDecl(Token tok, Attributes Attributes, string Name, bool ...
  class Field (line 1198) | public class Field: MemberDecl
    method Field (line 1202) | public Field(Token tok, Attributes Attributes, string Name, bool IsGho...
  class Function (line 1211) | public class Function: MemberDecl, ICallable
    method Function (line 1225) | internal Function(string Name): base(Token.NoToken, null, Name, true) {}
    method Function (line 1227) | public Function(Token tok, Attributes Attributes, string Name, bool Is...
  class Method (line 1247) | public class Method: MemberDecl, ICallable
    method Method (line 1259) | public Method(Token tok, Attributes Attributes, string Name, bool IsGh...
  class Lemma (line 1280) | abstract public class Lemma: Method
    method Lemma (line 1282) | public Lemma(Token tok, Attributes Attributes, string Name, bool IsGhost,
  class TopLevelDecl (line 1290) | public class TopLevelDecl
  class DatatypeCtor (line 1297) | public class DatatypeCtor
    method DatatypeCtor (line 1302) | public DatatypeCtor(string Name, List<Formal> Formals) { this.Name = N...
  class DatatypeDestructor (line 1305) | public class DatatypeDestructor : Field
    method DatatypeDestructor (line 1309) | public DatatypeDestructor(DatatypeCtor EnclosingCtor, Token tok, Attri...
  class DatatypeDecl (line 1313) | public class DatatypeDecl: TopLevelDecl
    method DatatypeDecl (line 1318) | public DatatypeDecl(Token tok, string name, Attributes attrs, List<Typ...
  class ClassDecl (line 1328) | public class ClassDecl: TopLevelDecl
  class ModuleDefinition (line 1335) | public class ModuleDefinition
    method ModuleDefinition (line 1339) | public ModuleDefinition(string Name, List<TopLevelDecl> TopLevelDecls)...
  class Program (line 1342) | public class Program
    method Program (line 1345) | public Program(List<ModuleDefinition> Modules) { this.Modules = Module...
    method MakeList (line 1347) | public static List<A> MakeList<A>(IEnumerable<A> e) { return new List<...
  class Resolver (line 1350) | public class Resolver
    method Find (line 1352) | public A Find<A>(Dictionary<string,A> dict, string key)
    method Resolver (line 1370) | public Resolver(Program program)
    method varList (line 1399) | List<VarDecl> varList(string x)
    method PushTypeParam (line 1405) | public void PushTypeParam(TypeParameter p) { typeParams.Add(p.Name, p); }
    method PopTypeParam (line 1406) | public void PopTypeParam(TypeParameter p) { typeParams.Remove(p.Name); }
    method PushVar (line 1408) | public void PushVar(string x, Type t, bool isGhost) { varList(x).Add(n...
    method PushVar (line 1409) | public void PushVar(BoundVar x) { PushVar(x.Name, x.Type, x.IsGhost); }
    method PopVar (line 1410) | public void PopVar(string x) { vars[x].RemoveAt(vars[x].Count - 1); }
    method Var (line 1411) | internal VarDecl Var(string x) { return vars.ContainsKey(x) && vars[x]...
    method PushGhost (line 1413) | public void PushGhost() { ghost++; }
    method PopGhost (line 1414) | public void PopGhost() { ghost--; }
    method IsGhost (line 1415) | public bool IsGhost() { return ghost != 0; }
    method PushVarCollect (line 1417) | public void PushVarCollect() { collectVars.Add(new Dictionary<string,b...
    method PopVarCollect (line 1418) | public Dictionary<string,bool> PopVarCollect() { Dictionary<string,boo...
    method CollectVar (line 1419) | public void CollectVar(string x) { foreach (Dictionary<string,bool> d ...
    method SubstType (line 1421) | public static Type SubstType(Type t, Dictionary<TypeParameter,Type> map)

FILE: ironclad-apps/tools/DafnySpec/ParseMain.cs
  class CommandLineOptionEngine (line 13) | public class CommandLineOptionEngine
    class CommandLineParseState (line 15) | public class CommandLineParseState
      method ConfirmArgumentCount (line 19) | public bool ConfirmArgumentCount(int n)
  class CommandLineOptions (line 26) | public class CommandLineOptions
    method ParseOption (line 33) | protected virtual bool ParseOption(string name, CommandLineOptionEngin...
    method Parse (line 38) | public bool Parse(string[] args)
  class DafnyOptions (line 70) | public class DafnyOptions: CommandLineOptions
    method Install (line 72) | public static void Install(DafnyOptions options)
  class AutoReq (line 78) | class AutoReq
    method AutoReq (line 84) | internal AutoReq(Resolver resolver)
    method ReqFunction (line 89) | internal void ReqFunction(Function fun)
    method ReqMethod (line 123) | internal void ReqMethod(Method method)
    method Andify (line 144) | Expression Andify(List<Expression> exprs)
    method GatherReqs (line 155) | List<Expression> GatherReqs(Function fun, List<Expression> args)
    method GenerateAutoReqs (line 174) | List<Expression> GenerateAutoReqs(Expression expr, Function parent)
  class Main (line 332) | public class Main
    method Resolve (line 334) | public static void Resolve(Resolver resolver, Program program)
    method ParseCheck (line 443) | public static string ParseCheck(List<string> modules, string name, out...

FILE: ironclad-apps/tools/DafnySpec/RtlGhost.cs
  class RtlExp (line 9) | public abstract class RtlExp
    method Vars (line 11) | public List<string> Vars()
    method Subst (line 18) | public virtual RtlExp Subst(Dictionary<string,string> map)
    method AddVars (line 24) | public virtual void AddVars(List<string> vars) {}
    method AsOperand (line 25) | public virtual string AsOperand() { return ToString(); }
  class RtlLiteral (line 28) | public class RtlLiteral: RtlExp
    method RtlLiteral (line 31) | public RtlLiteral(string s) { this.str = s; }
    method AddVars (line 33) | public override void AddVars(List<string> vars) {}
    method Subst (line 34) | public override RtlExp Subst(Dictionary<string, string> map) { return ...
    method ToString (line 36) | public override string ToString()
  class RtlVar (line 42) | public class RtlVar: RtlExp
    method RtlVar (line 47) | public RtlVar(string x, bool isGhost, Microsoft.Dafny.Type t = null) {...
    method getName (line 48) | public string getName() { return x; }
    method AddVars (line 50) | public override void AddVars(List<string> vars)
    method ToString (line 57) | public override string ToString()
    method AsOperand (line 61) | public override string AsOperand()
    method Subst (line 66) | public override RtlExp Subst(Dictionary<string, string> map)
  class RtlInt (line 72) | public class RtlInt: RtlExp
    method RtlInt (line 75) | public RtlInt(int i) { this.i = new BigInteger(i); }
    method RtlInt (line 76) | public RtlInt(BigInteger i) { this.i = i; }
    method ToString (line 77) | public override string ToString() { return i.ToString(); }
    method AsOperand (line 78) | public override string AsOperand() { return "OConst(" + i + ")"; }
  class RtlBinary (line 81) | public class RtlBinary: RtlExp
    method RtlBinary (line 86) | public RtlBinary(string op, RtlExp e0, RtlExp e1)
    method AddVars (line 93) | public override void AddVars(List<string> vars)
    method Subst (line 99) | public override RtlExp Subst(Dictionary<string,string> map)
    method ToString (line 104) | public override string ToString()
  class RtlApply (line 111) | public class RtlApply: RtlExp
    method RtlApply (line 115) | public RtlApply(string op, IEnumerable<RtlExp> args)
    method AddVars (line 121) | public override void AddVars(List<string> vars)
    method Subst (line 126) | public override RtlExp Subst(Dictionary<string,string> map)
    method ToString (line 131) | public override string ToString()
  class RtlExpComputed (line 137) | public class RtlExpComputed: RtlExp
    method RtlExpComputed (line 142) | public RtlExpComputed(Func<RtlExpComputed,string> toString, IEnumerabl...
    method AddVars (line 148) | public override void AddVars(List<string> vars)
    method Subst (line 153) | public override RtlExp Subst(Dictionary<string,string> map)
    method ToString (line 158) | public override string ToString()
  class RtlStmt (line 164) | public abstract class RtlStmt
    method WithComment (line 168) | public RtlStmt WithComment(string comment) { this.comment = () => comm...
    method WithComment (line 169) | public RtlStmt WithComment(Func<string> comment) { this.comment = comm...
    method Defs (line 171) | public List<string> Defs()
    method Uses (line 178) | public List<string> Uses()
    method Vars (line 185) | public List<string> Vars()
    method Subst (line 193) | public virtual RtlStmt Subst(Dictionary<string,string> map)
    method AddDefs (line 198) | public virtual void AddDefs(List<string> vars) {}
    method AddUses (line 199) | public virtual void AddUses(List<string> vars) {}
  class RtlComment (line 202) | public class RtlComment: RtlStmt
    method RtlComment (line 204) | public RtlComment(string comment)
    method RtlComment (line 209) | public RtlComment(Func<string> comment)
    method ToString (line 214) | public override string ToString()
  class RtlIndent (line 220) | public class RtlIndent: RtlStmt
    method RtlIndent (line 224) | public RtlIndent(bool Positive)
    method ToString (line 229) | public override string ToString()
  class RtlGhostMove (line 235) | public class RtlGhostMove: RtlStmt
    method RtlGhostMove (line 240) | public RtlGhostMove(IEnumerable<RtlVar> outs, IEnumerable<RtlExp> ins)
    method ToString (line 246) | public override string ToString()
  class RtlGhostCall (line 252) | public class RtlGhostCall: RtlGhostMove
    method RtlGhostCall (line 256) | public RtlGhostCall(string op, IEnumerable<RtlVar> outs, IEnumerable<R...
    method ToString (line 262) | public override string ToString()
  class RtlGhostStmtComputed (line 268) | public class RtlGhostStmtComputed: RtlStmt
    method RtlGhostStmtComputed (line 273) | public RtlGhostStmtComputed(Func<RtlGhostStmtComputed,string> toString...
    method ToString (line 279) | public override string ToString()
  class RtlAssert (line 285) | public class RtlAssert: RtlStmt
    method RtlAssert (line 289) | public RtlAssert(RtlExp e, bool isLoop = false) { this.e = e; this.isL...
    method Subst (line 291) | public override RtlStmt Subst(Dictionary<string,string> map)
    method ToString (line 296) | public override string ToString()

FILE: ironclad-apps/tools/DafnySpec/Util.cs
  class Util (line 9) | public class Util
    method Assert (line 11) | public static void Assert(bool b)
    method DebugWriteLine (line 19) | public static void DebugWriteLine()
    method DebugWriteLine (line 24) | public static void DebugWriteLine(object o)

FILE: ironclad-apps/tools/NuBuild/AzureManager/AzureAccount.cs
  class AzureAccount (line 21) | public class AzureAccount
    method AzureAccount (line 43) | public AzureAccount(string subscriptionId, X509Certificate2 cert)
    method GetServiceInformation (line 56) | public HostedServiceGetDetailedResponse GetServiceInformation(string s...
    method CreateServiceSpecification (line 73) | public void CreateServiceSpecification(string serviceName, string loca...
    method DeleteDeployment (line 91) | public void DeleteDeployment(string serviceName, DeploymentSlot deploy...
    method DeployService (line 108) | public void DeployService(
    method GetConnectionStringForStorageAccount (line 133) | public string GetConnectionStringForStorageAccount(string storageAccou...
    method TestSomething (line 151) | public void TestSomething()
    method ShowDeployments (line 174) | public void ShowDeployments(string serviceName)

FILE: ironclad-apps/tools/NuBuild/AzureManager/Program.cs
  class Program (line 21) | public class Program
    method Main (line 56) | private static void Main(string[] args)
    method Usage (line 176) | private static void Usage(int exitcode)
    method GetOurAzureAccount (line 207) | private static AzureAccount GetOurAzureAccount()
    method DisplayServiceInformation (line 243) | private static void DisplayServiceInformation(HostedServiceGetDetailed...
    method GetPackageBlob (line 287) | private static CloudBlockBlob GetPackageBlob(AzureAccount azureAccount...

FILE: ironclad-apps/tools/NuBuild/AzureManager/ServiceConfiguration.cs
  class ServiceConfiguration (line 39) | public class ServiceConfiguration
    method ServiceConfiguration (line 144) | public ServiceConfiguration(
    method FromXml (line 217) | public static ServiceConfiguration FromXml(string xs)
    method ReadXml (line 243) | public static ServiceConfiguration ReadXml(XmlReader xr)
    method ToXml (line 299) | public string ToXml()
    method WriteXml (line 317) | public void WriteXml(XmlWriter xw)
    method ToString (line 350) | public override string ToString()

FILE: ironclad-apps/tools/NuBuild/CloudExecutionEngine/Program.cs
  class Program (line 17) | internal class Program
    method Main (line 23) | public static void Main(string[] args)

FILE: ironclad-apps/tools/NuBuild/CloudExecutionWorker/CloudExecutionEngine.cs
  class CloudExecutionEngine (line 17) | public class CloudExecutionEngine
    method CloudExecutionEngine (line 48) | public CloudExecutionEngine()
    method Run (line 68) | public void Run()
    method Stop (line 140) | public void Stop()
    method RunAnExecutable (line 150) | private CloudExecutionReport RunAnExecutable(CloudExecutionRequest exe...

FILE: ironclad-apps/tools/NuBuild/CloudExecutionWorker/WorkerRole.cs
  class WorkerRole (line 24) | public class WorkerRole : RoleEntryPoint
    method Run (line 35) | public override void Run()
    method OnStart (line 51) | public override bool OnStart()
    method OnStop (line 63) | public override void OnStop()

FILE: ironclad-apps/tools/NuBuild/CloudQueueTool/Program.cs
  class Program (line 19) | internal class Program
    method Main (line 25) | private static void Main(string[] args)
    method Status (line 109) | private static void Status(IEnumerable<CloudQueue> queues)
    method Usage (line 118) | private static void Usage()

FILE: ironclad-apps/tools/NuBuild/ItemCacheTool/CacheState.cs
  class CacheState (line 17) | public class CacheState
    method CacheState (line 23) | public CacheState()
    method ParseCacheName (line 50) | public IItemCache[] ParseCacheName(string input)
    method ParseContainerName (line 70) | public ItemCacheContainer[] ParseContainerName(string input)
    method GetDefaultIronRoot (line 94) | private static string GetDefaultIronRoot()

FILE: ironclad-apps/tools/NuBuild/ItemCacheTool/Program.cs
  class Program (line 22) | public static class Program
    method Main (line 28) | private static void Main(string[] args)
    method Usage (line 161) | private static void Usage(CacheState caches)
    method CacheStatus (line 185) | private static void CacheStatus(
    method CompareCacheContainers (line 223) | private static void CompareCacheContainers(
    method DeleteItems (line 251) | private static void DeleteItems(
    method DeleteItems (line 291) | private static void DeleteItems(
    method DeleteItemsConfirmation (line 322) | private static bool DeleteItemsConfirmation()
    method DumpItems (line 345) | private static void DumpItems(
    method DumpItem (line 376) | private static void DumpItem(IItemCache cache, ItemCacheContainer cont...
    method CheckResults (line 408) | private static void CheckResults(
    method FetchRecord (line 589) | private static ResultSummaryRecord FetchRecord(IItemCache cache, ItemC...

FILE: ironclad-apps/tools/NuBuild/NuBuild/AbstractId.cs
  class AbstractId (line 11) | internal class AbstractId
    method AbstractId (line 26) | public AbstractId(string verbName, int version, string abstractOnly, P...
    method Equals (line 35) | public override bool Equals(object obj)
    method GetHashCode (line 52) | public override int GetHashCode()
    method ToString (line 57) | public override string ToString()
    method CompareTo (line 69) | public int CompareTo(object other)
    method getConcreteId (line 74) | public string getConcreteId()

FILE: ironclad-apps/tools/NuBuild/NuBuild/AnnotationScanner.cs
  class AnnotationScanner (line 16) | internal class AnnotationScanner
    method AnnotationScanner (line 23) | public AnnotationScanner()
    method AnnotationScanner (line 30) | public AnnotationScanner(BuildObject inputObject)
    method addAnnotation (line 57) | public void addAnnotation(string[] annotation)
    method emit (line 63) | public string emit(string commentToken)
    method getAnnotations (line 75) | public IEnumerable<string[]> getAnnotations(string label)
    method getTheAnnotation (line 81) | public string getTheAnnotation(string label, string defaultValue)
    method transferAnnotations (line 102) | internal static void transferAnnotations(WorkingDirectory workingDirec...
    method injectAnnotations (line 108) | internal void injectAnnotations(WorkingDirectory workingDirectory, Bui...

FILE: ironclad-apps/tools/NuBuild/NuBuild/AsmRewriterVerb.cs
  class AsmRewriterVerb (line 13) | internal class AsmRewriterVerb : Verb, IProcessInvokeAsyncVerb, IAsmProd...
    method AsmRewriterVerb (line 24) | public AsmRewriterVerb(BoogieAsmLinkVerb asmVerb)
    method getAbstractIdentifier (line 34) | public override AbstractId getAbstractIdentifier()
    method getAsmFile (line 39) | public BuildObject getAsmFile()
    method getDependencies (line 44) | public override IEnumerable<BuildObject> getDependencies(out Dependenc...
    method getVerbs (line 50) | public override IEnumerable<IVerb> getVerbs()
    method getOutputs (line 55) | public override IEnumerable<BuildObject> getOutputs()
    method getWorker (line 60) | public override IVerbWorker getWorker(WorkingDirectory workingDirectory)
    method Complete (line 81) | public Disposition Complete(WorkingDirectory workingDirectory, double ...

FILE: ironclad-apps/tools/NuBuild/NuBuild/BackgroundWorker.cs
  class BackgroundWorker (line 29) | public class BackgroundWorker : IDisposable
    method BackgroundWorker (line 79) | public BackgroundWorker()
    method QueueWork (line 129) | public void QueueWork(BackgroundWorkerProcedure procedure, object argu...
    method StopWork (line 145) | public void StopWork()
    method WaitForCompletion (line 162) | public void WaitForCompletion()
    method Dispose (line 170) | public void Dispose()
    method Dispose (line 180) | protected virtual void Dispose(bool disposing)
    method StopWorkerThread (line 205) | private void StopWorkerThread(
    method WorkerThreadMain (line 215) | [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "...
    class BackgroundWorkerQueueItem (line 272) | private class BackgroundWorkerQueueItem
      method BackgroundWorkerQueueItem (line 295) | public BackgroundWorkerQueueItem(

FILE: ironclad-apps/tools/NuBuild/NuBuild/BasmObligationIncludes.cs
  class BasmObligationIncludes (line 15) | internal class BasmObligationIncludes
    method BasmObligationIncludes (line 21) | public BasmObligationIncludes(IIncludePathContext includePathSearcher)
    method getIncludes (line 27) | public IEnumerable<BuildObject> getIncludes(BuildObject beatsrc)

FILE: ironclad-apps/tools/NuBuild/NuBuild/BasmTransitiveDepsVerb.cs
  class BasmTransitiveDepsVerb (line 12) | internal class BasmTransitiveDepsVerb
    method BasmTransitiveDepsVerb (line 17) | public BasmTransitiveDepsVerb(IContextGeneratingVerb contextVerb, Buil...
    method factory (line 23) | protected override TransitiveDepsVerb factory(BuildObject obj)
    method extendDeps (line 28) | protected override void extendDeps(List<BuildObject> deps)
    method getIncludeFactory (line 33) | protected override IIncludeFactory getIncludeFactory()

FILE: ironclad-apps/tools/NuBuild/NuBuild/BatchVerifyVerb.cs
  class BatchVerifyVerb (line 14) | internal class BatchVerifyVerb
    method BatchVerifyVerb (line 26) | public BatchVerifyVerb(SourcePath batch_file, BatchMode mode, Verifica...
    method BatchVerifyVerb (line 62) | public BatchVerifyVerb(BuildObject batch_label, HashSet<IObligationsPr...
    type BatchMode (line 71) | public enum BatchMode
    method getAbstractIdentifier (line 77) | public override AbstractId getAbstractIdentifier()
    method getObligationSet (line 82) | public BuildObject getObligationSet()
    method getDependencies (line 87) | public override IEnumerable<BuildObject> getDependencies(out Dependenc...
    method getVerbs (line 102) | public override IEnumerable<IVerb> getVerbs()
    method getOutputs (line 115) | public override IEnumerable<BuildObject> getOutputs()
    method getWorker (line 120) | public override IVerbWorker getWorker(WorkingDirectory workingDirectory)

FILE: ironclad-apps/tools/NuBuild/NuBuild/BeatExtensions.cs
  type ModPart (line 15) | public enum ModPart
  class ModPartExtensions (line 22) | public static class ModPartExtensions
    method ExtnStr (line 28) | public static string ExtnStr(this ModPart modPart)
  class BeatExtensions (line 40) | internal class BeatExtensions
    method whichPart (line 46) | public static ModPart whichPart(string filenameOrExtn)
    method makeOutputObject (line 57) | public static BuildObject makeOutputObject(BuildObject input, string t...
    method makeLabeledOutputObject (line 62) | internal static BuildObject makeLabeledOutputObject(BuildObject input,...
    method whichPart (line 77) | public static ModPart whichPart(BuildObject obj)
    method getBeatFlavoredShallowIncludesLabeled (line 82) | private static IEnumerable<BeatIncludes.LabeledInclude> getBeatFlavore...
    method getBeatFlavoredShallowIncludes (line 100) | public static IEnumerable<BuildObject> getBeatFlavoredShallowIncludes(
    method propagatePrivateImports (line 109) | public static void propagatePrivateImports(
    method getBeatFlavoredShallowDependencies (line 143) | public static OrderPreservingSet<BuildObject> getBeatFlavoredShallowDe...
    method getBasmFlavoredTransitiveDepVerb (line 166) | public static BasmTransitiveDepsVerb getBasmFlavoredTransitiveDepVerb(...
    method getBasmFlavoredTransitiveDependencies (line 172) | public static OrderPreservingSet<BuildObject> getBasmFlavoredTransitiv...

FILE: ironclad-apps/tools/NuBuild/NuBuild/BeatIncludes.cs
  class BeatIncludes (line 16) | internal class BeatIncludes
    method BeatIncludes (line 26) | public BeatIncludes(IIncludePathContext includePathSearcher)
    type ImportFilter (line 31) | public enum ImportFilter
    method parseLabeledIncludes (line 37) | public static List<LabeledInclude> parseLabeledIncludes(IIncludePathCo...
    method getLabeledIncludes (line 75) | public List<LabeledInclude> getLabeledIncludes(BuildObject beatsrc)
    method getBasmIncludes (line 81) | public IEnumerable<BuildObject> getBasmIncludes(BuildObject beatsrc)
    method computeLabeledIncludes (line 86) | protected List<LabeledInclude> computeLabeledIncludes(BuildObject beat...
    method fetchModule (line 91) | private BuildObject fetchModule(string module)
    class LabeledInclude (line 108) | public class LabeledInclude
      method LabeledInclude (line 113) | public LabeledInclude(ImportFilter importFilter, BuildObject buildOb...
    class FetchModuleCache (line 120) | private class FetchModuleCache
      method FetchModuleCache (line 125) | public FetchModuleCache(IIncludePathContext context)
      method get (line 131) | public BuildObject get(string module)
      method fetchModule (line 136) | private BuildObject fetchModule(string module)

FILE: ironclad-apps/tools/NuBuild/NuBuild/BeatVerb.cs
  class BeatVerb (line 15) | internal class BeatVerb
    method BeatVerb (line 27) | public BeatVerb(IContextGeneratingVerb contextVerb, BuildObject beatob...
    method isBeat (line 35) | public static bool isBeat(BuildObject obj)
    method getDependencies (line 41) | public override IEnumerable<BuildObject> getDependencies(out Dependenc...
    method getVerbs (line 49) | public override IEnumerable<IVerb> getVerbs()
    method getOutputs (line 54) | public override IEnumerable<BuildObject> getOutputs()
    method getAbstractIdentifier (line 59) | public override AbstractId getAbstractIdentifier()
    method getBeatExecutable (line 64) | public BuildObject getBeatExecutable()
    method getWorker (line 71) | public override IVerbWorker getWorker(WorkingDirectory workingDirectory)
    method Complete (line 105) | public Disposition Complete(WorkingDirectory workingDirectory, double ...
    method outputFile (line 122) | private BuildObject outputFile()
    method getModuleNameForObj (line 129) | private string getModuleNameForObj(BuildObject obj)

FILE: ironclad-apps/tools/NuBuild/NuBuild/BoogieAsmDepBase.cs
  class BoogieAsmDepBase (line 15) | internal abstract class BoogieAsmDepBase
    method BoogieAsmDepBase (line 32) | public BoogieAsmDepBase(IContextGeneratingVerb context, BuildObject in...
    method isBasm (line 39) | public static bool isBasm(BuildObject obj)
    method outputFile (line 45) | public abstract BuildObject outputFile();
    method getVersion (line 47) | protected abstract int getVersion();
    method includeAllImps (line 49) | protected abstract bool includeAllImps();
    method getExtraAbstractID (line 51) | protected virtual string getExtraAbstractID()
    method getBoogieasmExecutable (line 56) | protected static BuildObject getBoogieasmExecutable()
    method getExtraDeps (line 61) | protected virtual IEnumerable<BuildObject> getExtraDeps(out Dependency...
    method computeBasmInput (line 67) | public static BuildObject computeBasmInput(PoundDefines poundDefines, ...
    method getOutputs (line 79) | public override IEnumerable<BuildObject> getOutputs()
    method getAbstractIdentifier (line 84) | public override AbstractId getAbstractIdentifier()
    class BasmModuleAccumulator (line 94) | internal class BasmModuleAccumulator
      method getDeps (line 113) | public IEnumerable<BuildObject> getDeps()
      method BasmModuleAccumulator (line 123) | public BasmModuleAccumulator(IContextGeneratingVerb contextGenVerb, ...
      method maybeBeat (line 204) | private BuildObject maybeBeat(BuildObject obj, HashSet<IVerb> mutabl...
      method getBasmModule (line 225) | private void getBasmModule(string modName, ModPart modPart)
    method getBoogieVerbs (line 243) | protected IEnumerable<BoogieVerb> getBoogieVerbs(VerificationRequest v...
    method getVerifyishVerbs (line 276) | protected IEnumerable<IVerb> getVerifyishVerbs()
    method getDependencies (line 286) | public override IEnumerable<BuildObject> getDependencies(out Dependenc...

FILE: ironclad-apps/tools/NuBuild/NuBuild/BoogieAsmLinkVerb.cs
  class BoogieAsmLinkVerb (line 12) | internal class BoogieAsmLinkVerb
    method BoogieAsmLinkVerb (line 15) | public BoogieAsmLinkVerb(IContextGeneratingVerb context, BuildObject i...
    method getAsmFile (line 20) | public BuildObject getAsmFile()
    method outputFile (line 25) | public override BuildObject outputFile()
    method getVerbs (line 30) | public override IEnumerable<IVerb> getVerbs()
    method getVersion (line 35) | protected override int getVersion()
    method getAction (line 40) | protected override string getAction()
    method outFlagWorks (line 45) | protected override bool outFlagWorks()
    method includeAllImps (line 50) | protected override bool includeAllImps()

FILE: ironclad-apps/tools/NuBuild/NuBuild/BoogieAsmVerificationObligationListVerb.cs
  class BoogieAsmVerificationObligationListVerb (line 16) | internal class BoogieAsmVerificationObligationListVerb
    method BoogieAsmVerificationObligationListVerb (line 22) | public BoogieAsmVerificationObligationListVerb(IContextGeneratingVerb ...
    method getObligationSet (line 29) | public BuildObject getObligationSet()
    method outputFile (line 34) | public override BuildObject outputFile()
    method getVerbs (line 39) | public override IEnumerable<IVerb> getVerbs()
    method getObligationSatisfyingVerbs (line 56) | public IEnumerable<IVerb> getObligationSatisfyingVerbs()
    method getWorker (line 61) | public override IVerbWorker getWorker(WorkingDirectory workingDirectory)
    method getVersion (line 70) | protected override int getVersion()
    method includeAllImps (line 75) | protected override bool includeAllImps()
    method getExtraAbstractID (line 80) | protected override string getExtraAbstractID()

FILE: ironclad-apps/tools/NuBuild/NuBuild/BoogieAsmVerifyVerb.cs
  class BoogieAsmVerifyVerb (line 13) | internal class BoogieAsmVerifyVerb
    method BoogieAsmVerifyVerb (line 26) | public BoogieAsmVerifyVerb(IContextGeneratingVerb context, BuildObject...
    method needs_symdiff (line 33) | public static bool needs_symdiff(BuildObject basm)
    method outputFile (line 51) | public override BuildObject outputFile()
    method getVerbs (line 68) | public override IEnumerable<IVerb> getVerbs()
    method getMutualSummary (line 74) | public BuildObject getMutualSummary()
    method getOutputs (line 82) | public override IEnumerable<BuildObject> getOutputs()
    method getExtraDeps (line 93) | protected override IEnumerable<BuildObject> getExtraDeps(out Dependenc...
    method extendArgs (line 114) | protected override void extendArgs(List<string> args)
    method postprocess (line 145) | protected override void postprocess(WorkingDirectory workingDirectory)
    method getVersion (line 150) | protected override int getVersion()
    method getAction (line 155) | protected override string getAction()
    method outFlagWorks (line 160) | protected override bool outFlagWorks()
    method includeAllImps (line 165) | protected override bool includeAllImps()
    method getExtraAbstractID (line 170) | protected override string getExtraAbstractID()
    method getTrustedBoogieAxioms (line 175) | private IEnumerable<SourcePath> getTrustedBoogieAxioms()

FILE: ironclad-apps/tools/NuBuild/NuBuild/BoogieAsmWorkerBase.cs
  class BoogieAsmWorkerBase (line 15) | internal abstract class BoogieAsmWorkerBase
    method BoogieAsmWorkerBase (line 18) | public BoogieAsmWorkerBase(IContextGeneratingVerb context, BuildObject...
    method getWorker (line 23) | public override IVerbWorker getWorker(WorkingDirectory workingDirectory)
    method Complete (line 56) | public Disposition Complete(WorkingDirectory workingDirectory, double ...
    method getAction (line 62) | protected abstract string getAction();
    method outFlagWorks (line 64) | protected abstract bool outFlagWorks();
    method extendArgs (line 66) | protected virtual void extendArgs(List<string> args)
    method postprocess (line 70) | protected virtual void postprocess(WorkingDirectory workingDirectory)

FILE: ironclad-apps/tools/NuBuild/NuBuild/BoogieVerb.cs
  class BoogieVerb (line 14) | internal class BoogieVerb
    method BoogieVerb (line 34) | public BoogieVerb(IContextGeneratingVerb context, BuildObject bplInput...
    method getDependencies (line 62) | public override IEnumerable<BuildObject> getDependencies(out Dependenc...
    method getVerbs (line 71) | public override IEnumerable<IVerb> getVerbs()
    method getOutputFile (line 76) | public override BuildObject getOutputFile()
    method getOutputs (line 81) | public override IEnumerable<BuildObject> getOutputs()
    method getAbstractIdentifier (line 86) | public override AbstractId getAbstractIdentifier()
    method getWorker (line 91) | public override IVerbWorker getWorker(WorkingDirectory workingDirectory)
    method Complete (line 121) | public Disposition Complete(WorkingDirectory workingDirectory, double ...
    method getSource (line 135) | protected override BuildObject getSource()
    method getBoogieExecutable (line 140) | private static SourcePath getBoogieExecutable()
    method getBoogieExecutableDependencies (line 151) | private static IEnumerable<BuildObject> getBoogieExecutableDependencies()
    method getFlags (line 177) | private IEnumerable<string> getFlags()

FILE: ironclad-apps/tools/NuBuild/NuBuild/BootableAppVerb.cs
  class BootableAppVerb (line 19) | internal class BootableAppVerb
    method BootableAppVerb (line 45) | public BootableAppVerb(SourcePath dfyroot, DafnyCCVerb.FramePointerMod...
    method getDependencies (line 71) | public override IEnumerable<BuildObject> getDependencies(out Dependenc...
    method getWorker (line 84) | public override IVerbWorker getWorker(WorkingDirectory workingDirectory)
    method getVerbs (line 107) | public override IEnumerable<IVerb> getVerbs()
    method getOutputs (line 118) | public override IEnumerable<BuildObject> getOutputs()
    method getAbstractIdentifier (line 123) | public override AbstractId getAbstractIdentifier()
    method getPresentation (line 128) | public override Presentation getPresentation()
    method targetExecutableName (line 133) | private string targetExecutableName(IroncladAppVerb fromVerb)
    method mkBootFileEntry (line 141) | private string mkBootFileEntry(WorkingDirectory workingDirectory, Buil...
    method writeBootFile (line 146) | private void writeBootFile(WorkingDirectory workingDirectory)

FILE: ironclad-apps/tools/NuBuild/NuBuild/BuildEngine.cs
  class BuildEngine (line 12) | internal class BuildEngine
    method BuildEngine (line 29) | public BuildEngine()
    method getVervePathContext (line 70) | public SourcePathIncludeContext getVervePathContext()
    method getVerveContextVerb (line 91) | public IContextGeneratingVerb getVerveContextVerb(PoundDefines poundDe...
    method getIronRoot (line 110) | public string getIronRoot()
    method setIronRoot (line 115) | internal void setIronRoot(string ironRoot)
    method normalizeIronPath (line 121) | internal string normalizeIronPath(string ironRelPath)
    method getObjRoot (line 128) | internal string getObjRoot()
    method getSrcRoot (line 133) | internal string getSrcRoot()
    method getVirtualRoot (line 138) | internal string getVirtualRoot()
    method getToolsRoot (line 143) | internal string getToolsRoot()
    method getBinToolsRoot (line 148) | internal string getBinToolsRoot()
    method setLocalCache (line 153) | internal void setLocalCache(string path)
    method getLocalCache (line 158) | internal string getLocalCache()
    method getHasher (line 163) | internal IHasher getHasher()

FILE: ironclad-apps/tools/NuBuild/NuBuild/BuildObject.cs
  class BuildObject (line 26) | public class BuildObject
    method BuildObject (line 68) | public BuildObject(string path, bool isTrusted = false)
    method BuildObject (line 82) | protected BuildObject(string path)
    method getRelativePath (line 112) | public string getRelativePath()
    method ToString (line 121) | public override string ToString()
    method getDirPath (line 130) | public string getDirPath()
    method getFileName (line 139) | public string getFileName()
    method getFileNameWithoutExtension (line 148) | public string getFileNameWithoutExtension()
    method getExtension (line 158) | public string getExtension()
    method Equals (line 173) | public override bool Equals(object obj)
    method GetHashCode (line 194) | public override int GetHashCode()
    method makeOutputObject (line 205) | public BuildObject makeOutputObject(string extension)
    method makeLabeledOutputObject (line 218) | public BuildObject makeLabeledOutputObject(string appLabel, string ext...
    method makeVirtualObject (line 246) | public BuildObject makeVirtualObject(string extension)
    method ReadXml (line 263) | public static BuildObject ReadXml(XmlReader xr)
    method WriteXml (line 275) | public void WriteXml(XmlWriter xw)
    method splitExtension (line 286) | private void splitExtension()
    method mashedPathname (line 322) | private string mashedPathname(string root, string extension)
    method getDirRelativeToSrcOrObj (line 339) | private string getDirRelativeToSrcOrObj()

FILE: ironclad-apps/tools/NuBuild/NuBuild/BuildObjectValuePointer.cs
  class BuildObjectValuePointer (line 17) | public class BuildObjectValuePointer
    method BuildObjectValuePointer (line 53) | public BuildObjectValuePointer(string objectHash, string relativePath)
    method ReadXml (line 89) | public static BuildObjectValuePointer ReadXml(XmlReader xr)
    method WriteXml (line 102) | public void WriteXml(XmlWriter xw)

FILE: ironclad-apps/tools/NuBuild/NuBuild/CachedHash.cs
  class CachedHash (line 12) | internal class CachedHash<HashedObjectType, ValueType>
    method CachedHash (line 19) | public CachedHash(
    type FailureBehavior (line 34) | public enum FailureBehavior
    method get (line 40) | public ValueType get(HashedObjectType hashObj)

FILE: ironclad-apps/tools/NuBuild/NuBuild/CloudExecutionQueue.cs
  class CloudExecutionQueue (line 20) | public class CloudExecutionQueue
    method CloudExecutionQueue (line 107) | public CloudExecutionQueue()
    method CloudExecutionQueue (line 147) | public CloudExecutionQueue(string reportQueueName)
    method DeleteQueue (line 190) | public void DeleteQueue(string queueName)
    method SubmitRequest (line 202) | public void SubmitRequest(CloudExecutionRequest request)
    method GetRequest (line 213) | public CloudExecutionRequest GetRequest(bool block = false)
    method DeleteRequest (line 252) | public void DeleteRequest(CloudExecutionRequest request)
    method SubmitReport (line 263) | public void SubmitReport(CloudExecutionReport report, string reportQue...
    method GetReport (line 283) | public CloudExecutionReport GetReport(string reportIdentifier, out int...
    method MonitorReportQueue (line 300) | private void MonitorReportQueue()

FILE: ironclad-apps/tools/NuBuild/NuBuild/CloudExecutionReport.cs
  class CloudExecutionReport (line 21) | public class CloudExecutionReport
    method CloudExecutionReport (line 146) | public CloudExecutionReport(
    method CloudExecutionReport (line 172) | public CloudExecutionReport(
    method CloudExecutionReport (line 206) | private CloudExecutionReport(
    type StatusCode (line 231) | public enum StatusCode : int
    method FromMessage (line 334) | public static CloudExecutionReport FromMessage(CloudQueueMessage message)
    method FromXml (line 351) | public static CloudExecutionReport FromXml(string xs)
    method ReadXml (line 377) | public static CloudExecutionReport ReadXml(XmlReader xr)
    method ToXml (line 473) | public string ToXml()
    method WriteXml (line 490) | public void WriteXml(XmlWriter xw)

FILE: ironclad-apps/tools/NuBuild/NuBuild/CloudExecutionRequest.cs
  class CloudExecutionRequest (line 21) | public class CloudExecutionRequest
    method CloudExecutionRequest (line 134) | public CloudExecutionRequest(
    method CloudExecutionRequest (line 170) | private CloudExecutionRequest(
    type Operation (line 193) | public enum Operation : int
    method FromMessage (line 294) | public static CloudExecutionRequest FromMessage(CloudQueueMessage mess...
    method FromXml (line 311) | public static CloudExecutionRequest FromXml(string xs)
    method ReadXml (line 337) | public static CloudExecutionRequest ReadXml(XmlReader xr)
    method ToXml (line 436) | public string ToXml()
    method WriteXml (line 453) | public void WriteXml(XmlWriter xw)
    method ToString (line 507) | public override string ToString()

FILE: ironclad-apps/tools/NuBuild/NuBuild/CloudExecutionWaiter.cs
  class CloudExecutionWaiter (line 15) | internal class CloudExecutionWaiter
    method CloudExecutionWaiter (line 35) | public CloudExecutionWaiter()
    method WaitForReport (line 45) | public CloudExecutionReport WaitForReport(out int numberOfOtherWaiters)
    method GiveReportToWaiter (line 58) | public void GiveReportToWaiter(CloudExecutionReport executionReport, i...

FILE: ironclad-apps/tools/NuBuild/NuBuild/CloudSubmitter.cs
  class CloudSubmitter (line 18) | internal class CloudSubmitter : IProcessInvoker
    method CloudSubmitter (line 72) | public CloudSubmitter(
    method GetStdout (line 179) | public string GetStdout()
    method GetStderr (line 188) | public string GetStderr()

FILE: ironclad-apps/tools/NuBuild/NuBuild/ConcatContext.cs
  class ConcatContext (line 12) | internal class ConcatContext
    method ConcatContext (line 18) | public ConcatContext(IEnumerable<IIncludePathContext> contexts)
    method ToString (line 24) | public override string ToString()
    method search (line 29) | public override BuildObject search(string basename, ModPart modPart = ...

FILE: ironclad-apps/tools/NuBuild/NuBuild/ConcatContextVerb.cs
  class ConcatContextVerb (line 13) | internal class ConcatContextVerb
    method ConcatContextVerb (line 18) | public ConcatContextVerb(IEnumerable<IContextGeneratingVerb> parents, ...
    method ConcatContextVerb (line 24) | public ConcatContextVerb(IContextGeneratingVerb parentA, IContextGener...
    method ConcatContextVerb (line 29) | public ConcatContextVerb(IContextGeneratingVerb parentA, IContextGener...
    method getDependencies (line 34) | public override IEnumerable<BuildObject> getDependencies(out Dependenc...
    method getVerbs (line 40) | public override IEnumerable<IVerb> getVerbs()
    method getWorker (line 45) | public override IVerbWorker getWorker(WorkingDirectory workingDirectory)

FILE: ironclad-apps/tools/NuBuild/NuBuild/ContextContents.cs
  class ContextContents (line 11) | internal class ContextContents
    method ContextContents (line 16) | public ContextContents(IIncludePathContext context)

FILE: ironclad-apps/tools/NuBuild/NuBuild/ContextGeneratingVerb.cs
  class ContextGeneratingVerb (line 13) | internal abstract class ContextGeneratingVerb
    method ContextGeneratingVerb (line 25) | public ContextGeneratingVerb(string nickname, PoundDefines poundDefines)
    method getPoundDefines (line 31) | public PoundDefines getPoundDefines()
    method getContextIdentifier (line 36) | public string getContextIdentifier()
    method getAbstractIdentifier (line 41) | public override AbstractId getAbstractIdentifier()
    method getOutputs (line 46) | public override IEnumerable<BuildObject> getOutputs()
    method getContextOutput (line 51) | public BuildObject getContextOutput()
  class ContextGeneratingVerbExtensions (line 63) | internal static class ContextGeneratingVerbExtensions
    method fetchIfAvailable (line 65) | internal static IIncludePathContext fetchIfAvailable(this IContextGene...

FILE: ironclad-apps/tools/NuBuild/NuBuild/CustomManifestParser.cs
  class CustomManifestParser (line 14) | internal class CustomManifestParser
    method CustomManifestParser (line 19) | public CustomManifestParser(SourcePath basePath)
    method getDependencies (line 24) | public IEnumerable<BuildObject> getDependencies()
    method getOutputs (line 29) | public IEnumerable<BuildObject> getOutputs()
    method parseCustomManifest (line 34) | private void parseCustomManifest(SourcePath basePath)

FILE: ironclad-apps/tools/NuBuild/NuBuild/DafnyCCVerb.cs
  class DafnyCCVerb (line 14) | internal class DafnyCCVerb
    method DafnyCCVerb (line 21) | public DafnyCCVerb(SourcePath dfyroot, string appLabel, FramePointerMo...
    type FramePointerMode (line 29) | public enum FramePointerMode
    method getVerbs (line 35) | public override IEnumerable<IVerb> getVerbs()
    method getAbstractIdentifier (line 40) | public override AbstractId getAbstractIdentifier()
    method AssertSmellsImplementy (line 47) | internal static void AssertSmellsImplementy(BuildObject obj)
    method getVersion (line 57) | protected override int getVersion()
    method getExecutable (line 62) | protected override BuildObject getExecutable()
    method getExtraDependencies (line 67) | protected override IEnumerable<BuildObject> getExtraDependencies()
    method getRootArgs (line 86) | protected override IEnumerable<SourcePath> getRootArgs()
    method getExtraSpecialOutputs (line 94) | protected override IEnumerable<string> getExtraSpecialOutputs()
    method addExtraArgs (line 102) | protected override void addExtraArgs(List<string> args)
    method getRoots (line 111) | protected override IEnumerable<SourcePath> getRoots()

FILE: ironclad-apps/tools/NuBuild/NuBuild/DafnyCompileOneVerb.cs
  class DafnyCompileOneVerb (line 17) | internal class DafnyCompileOneVerb : Verb, IProcessInvokeAsyncVerb
    method DafnyCompileOneVerb (line 31) | public DafnyCompileOneVerb(SourcePath input)
    method getDependencies (line 45) | public override IEnumerable<BuildObject> getDependencies(out Dependenc...
    method getVerbs (line 72) | public override IEnumerable<IVerb> getVerbs()
    method getOutputs (line 77) | public override IEnumerable<BuildObject> getOutputs()
    method getWorker (line 82) | public override IVerbWorker getWorker(WorkingDirectory workingDirectory)
    method getAbstractIdentifier (line 106) | public override AbstractId getAbstractIdentifier()
    method Complete (line 111) | public Disposition Complete(WorkingDirectory workingDirectory, double ...
    method RewriteCSharpFile (line 130) | private void RewriteCSharpFile(string inputPath, string outputPath)

FILE: ironclad-apps/tools/NuBuild/NuBuild/DafnyExecutableDependencies.cs
  class DafnyExecutableDependencies (line 9) | class DafnyExecutableDependencies
    method getDafnyExecutable (line 13) | public static SourcePath getDafnyExecutable()
    method getDafnyExecutableDependencies (line 25) | public static IEnumerable<BuildObject> getDafnyExecutableDependencies()

FILE: ironclad-apps/tools/NuBuild/NuBuild/DafnyExtensions.cs
  class DafnyExtensions (line 13) | internal class DafnyExtensions
    method getForestDependencies (line 15) | public static HashSet<BuildObject> getForestDependencies(IEnumerable<B...
    method getForestVerbs (line 31) | public static IEnumerable<IVerb> getForestVerbs(IEnumerable<BuildObjec...

FILE: ironclad-apps/tools/NuBuild/NuBuild/DafnyIncludes.cs
  class DafnyIncludes (line 17) | internal class DafnyIncludes
    method DafnyIncludes (line 44) | public DafnyIncludes()
    method getIncludes (line 54) | public IEnumerable<BuildObject> getIncludes(BuildObject dfysource)
    method ExpandDafny (line 93) | public void ExpandDafny(WorkingDirectory workingDirectory, SourcePath ...
    method ExpandDafnyRecurse (line 116) | private bool ExpandDafnyRecurse(SourcePath input)

FILE: ironclad-apps/tools/NuBuild/NuBuild/DafnySpecVerb.cs
  class DafnySpecVerb (line 14) | internal class DafnySpecVerb
    method DafnySpecVerb (line 20) | public DafnySpecVerb(SourcePath dfyroot, string appLabel)
    method getAbstractIdentifier (line 27) | public override AbstractId getAbstractIdentifier()
    method getVerbs (line 32) | public override IEnumerable<IVerb> getVerbs()
    method getVersion (line 37) | protected override int getVersion()
    method getExecutable (line 42) | protected override BuildObject getExecutable()
    method getExtraDependencies (line 47) | protected override IEnumerable<BuildObject> getExtraDependencies()
    method getRoots (line 58) | protected override IEnumerable<SourcePath> getRoots()
    method transformFilterAccepts (line 64) | protected override bool transformFilterAccepts(BuildObject dfysource)
    method getRootArgs (line 78) | protected override IEnumerable<SourcePath> getRootArgs()
    method getSeqSpec (line 95) | private SourcePath getSeqSpec()

FILE: ironclad-apps/tools/NuBuild/NuBuild/DafnyTransformBaseVerb.cs
  class DafnyTransformBaseVerb (line 14) | internal abstract class DafnyTransformBaseVerb
    method DafnyTransformBaseVerb (line 35) | public DafnyTransformBaseVerb(SourcePath dfyroot, string appLabel)
    method getDependencies (line 46) | public override IEnumerable<BuildObject> getDependencies(out Dependenc...
    method getVerbs (line 54) | public override IEnumerable<IVerb> getVerbs()
    method getOutputs (line 59) | public override IEnumerable<BuildObject> getOutputs()
    method getWorker (line 78) | public override IVerbWorker getWorker(WorkingDirectory workingDirectory)
    method Complete (line 99) | public Disposition Complete(WorkingDirectory workingDirectory, double ...
    method getVersion (line 138) | protected abstract int getVersion();
    method getExecutable (line 140) | protected abstract BuildObject getExecutable();
    method getRoots (line 146) | protected abstract IEnumerable<SourcePath> getRoots();
    method getRootArgs (line 155) | protected abstract IEnumerable<SourcePath> getRootArgs();
    method getExtraDependencies (line 157) | protected virtual IEnumerable<BuildObject> getExtraDependencies()
    method getExtraSpecialOutputs (line 162) | protected virtual IEnumerable<string> getExtraSpecialOutputs()
    method addExtraArgs (line 167) | protected virtual void addExtraArgs(List<string> args)
    method transformFilterAccepts (line 171) | protected virtual bool transformFilterAccepts(BuildObject dfysource)
    method getAllDafnyModules (line 176) | protected virtual IEnumerable<SourcePath> getAllDafnyModules(out Depen...
    method getDafnyPrelude (line 198) | protected SourcePath getDafnyPrelude()
    method getDestPath (line 203) | private string getDestPath()
    method basmOutputForDafnyModule (line 217) | private BuildObject basmOutputForDafnyModule(string modulename, string...
    method getAbsDestPath (line 226) | private BuildObject getAbsDestPath()
    method getInOutMappings (line 231) | private List<InOutMapping> getInOutMappings()
    class InOutMapping (line 270) | private class InOutMapping
      method InOutMapping (line 276) | public InOutMapping(BuildObject dfysource, BuildObject basmIfc, Buil...

FILE: ironclad-apps/tools/NuBuild/NuBuild/DafnyTransitiveDepsVerb.cs
  class DafnyTransitiveDepsVerb (line 11) | internal class DafnyTransitiveDepsVerb
    method DafnyTransitiveDepsVerb (line 14) | public DafnyTransitiveDepsVerb(BuildObject input)
    method factory (line 19) | protected override TransitiveDepsVerb factory(BuildObject obj)
    method getIncludeFactory (line 24) | protected override IIncludeFactory getIncludeFactory()

FILE: ironclad-apps/tools/NuBuild/NuBuild/DafnyVerifyOneVerb.cs
  class DafnyVerifyOneVerb (line 12) | internal class DafnyVerifyOneVerb
    method DafnyVerifyOneVerb (line 22) | public DafnyVerifyOneVerb(SourcePath dfysource)
    method getAbstractIdentifier (line 28) | public override AbstractId getAbstractIdentifier()
    method getDependencies (line 33) | public override IEnumerable<BuildObject> getDependencies(out Dependenc...
    method getVerbs (line 41) | public override IEnumerable<IVerb> getVerbs()
    method getOutputFile (line 46) | public override BuildObject getOutputFile()
    method getOutputs (line 51) | public override IEnumerable<BuildObject> getOutputs()
    method getWorker (line 56) | public override IVerbWorker getWorker(WorkingDirectory workingDirectory)
    method Complete (line 95) | public Disposition Complete(WorkingDirectory workingDirectory, double ...
    method getDirectIncludes (line 109) | public IEnumerable<BuildObject> getDirectIncludes()
    method getSource (line 118) | protected override BuildObject getSource()
    method getTransitiveDepsVerb (line 123) | private TransitiveDepsVerb getTransitiveDepsVerb()

FILE: ironclad-apps/tools/NuBuild/NuBuild/DafnyVerifyTreeVerb.cs
  class DafnyVerifyTreeVerb (line 13) | internal class DafnyVerifyTreeVerb
    method DafnyVerifyTreeVerb (line 24) | public DafnyVerifyTreeVerb(SourcePath root)
    method getAbstractIdentifier (line 31) | public override AbstractId getAbstractIdentifier()
    method getObligationSet (line 36) | public BuildObject getObligationSet()
    method getDependencies (line 41) | public override IEnumerable<BuildObject> getDependencies(out Dependenc...
    method getVerbs (line 61) | public override IEnumerable<IVerb> getVerbs()
    method getOutputs (line 75) | public override IEnumerable<BuildObject> getOutputs()
    method getWorker (line 80) | public override IVerbWorker getWorker(WorkingDirectory workingDirectory)
    method mkVerificationObject (line 90) | private BuildObject mkVerificationObject(BuildObject dfysource)
    method getAvailableDeps (line 95) | private HashSet<BuildObject> getAvailableDeps(out DependencyDispositio...
    method getDafnyDependencies (line 103) | private IEnumerable<BuildObject> getDafnyDependencies(out DependencyDi...

FILE: ironclad-apps/tools/NuBuild/NuBuild/DbgFileCopySpeedTest.cs
  class DbgFileCopySpeedTest (line 6) | internal class DbgFileCopySpeedTest
    method thing (line 8) | public static void thing()

FILE: ironclad-apps/tools/NuBuild/NuBuild/DbgHashSpeedTest.cs
  class DbgHashSpeedTest (line 7) | internal class DbgHashSpeedTest
    method thing (line 9) | public static void thing()

FILE: ironclad-apps/tools/NuBuild/NuBuild/DbgVerbCounter.cs
  class DbgVerbCounter (line 11) | internal class DbgVerbCounter
    type DbgVerbCondition (line 13) | public enum DbgVerbCondition { DVWake, DVDepsIncomplete, DVDepsStale, ...
    method dbgDisplayCounts (line 16) | public void dbgDisplayCounts()
    method consider (line 26) | public void consider(IVerb verb, DbgVerbCondition cond)
    method consider_inner (line 32) | private void consider_inner(Tuple<IVerb, DbgVerbCondition> key)

FILE: ironclad-apps/tools/NuBuild/NuBuild/DependencyCache.cs
  class DependencyCache (line 12) | internal class DependencyCache
    method DependencyCache (line 18) | public DependencyCache()
    method getDependencies (line 23) | public IEnumerable<BuildObject> getDependencies(IVerb verb, out Depend...
    method dbgPrintStats (line 45) | public void dbgPrintStats()
    class DependencyResult (line 51) | private class DependencyResult

FILE: ironclad-apps/tools/NuBuild/NuBuild/DependencyDisposition.cs
  type DependencyDisposition (line 11) | public enum DependencyDisposition
  class DependencyDispositionExtensions (line 18) | public static class DependencyDispositionExtensions
    method combine (line 20) | public static DependencyDisposition combine(this DependencyDisposition...

FILE: ironclad-apps/tools/NuBuild/NuBuild/Disposition.cs
  class Disposition (line 13) | internal class Disposition
    method readXml (line 18) | public static Disposition readXml(XmlReader xr)
    method getMessages (line 36) | public virtual IEnumerable<string> getMessages()
    method writeXml (line 41) | public virtual void writeXml(XmlWriter xw)
    method writeXmlExtend (line 49) | protected virtual void writeXmlExtend(XmlWriter xw)
  class Stale (line 54) | internal class Stale : Disposition
    method ToString (line 58) | public override string ToString()
  class Fresh (line 64) | internal class Fresh : Disposition
    method ToString (line 68) | public override string ToString()
  class Failed (line 80) | internal class Failed : Disposition
    method Failed (line 87) | public Failed(string msg = null)
    method Failed (line 96) | public Failed(IEnumerable<string> messages)
    method readXml (line 101) | public static new Disposition readXml(XmlReader xr)
    method AddError (line 132) | public void AddError(string msg)
    method ToString (line 137) | public override string ToString()
    method getMessages (line 142) | public override IEnumerable<string> getMessages()
    method writeXmlExtend (line 147) | protected override void writeXmlExtend(XmlWriter xw)

FILE: ironclad-apps/tools/NuBuild/NuBuild/EntryStitcherVerb.cs
  class EntryStitcherVerb (line 14) | internal class EntryStitcherVerb
    method EntryStitcherVerb (line 30) | public EntryStitcherVerb(IContextGeneratingVerb context, string appLabel)
    method getAbstractIdentifier (line 41) | public override AbstractId getAbstractIdentifier()
    method getDependencies (line 46) | public override IEnumerable<BuildObject> getDependencies(out Dependenc...
    method getVerbs (line 74) | public override IEnumerable<IVerb> getVerbs()
    method getOutputs (line 79) | public override IEnumerable<BuildObject> getOutputs()
    method getWorker (line 84) | public override IVerbWorker getWorker(WorkingDirectory workingDirectory)
    method getEntryImpOutput (line 124) | internal BuildObject getEntryImpOutput()
    method extractImportStatements (line 129) | private static IEnumerable<string> extractImportStatements(WorkingDire...
    method getIfcOutput (line 146) | private BuildObject getIfcOutput()

FILE: ironclad-apps/tools/NuBuild/NuBuild/Hasher.cs
  class Hasher (line 21) | internal class Hasher : IHasher
    method Hasher (line 27) | public Hasher()
    method search (line 42) | public BuildObject search(IIncludePathContext context, string modName,...
    method getParsedIncludes (line 47) | public List<BeatIncludes.LabeledInclude> getParsedIncludes(IIncludePat...

FILE: ironclad-apps/tools/NuBuild/NuBuild/IAsmProducer.cs
  type IAsmProducer (line 11) | internal interface IAsmProducer : IVerb
    method getAsmFile (line 13) | BuildObject getAsmFile();

FILE: ironclad-apps/tools/NuBuild/NuBuild/IContextGeneratingVerb.cs
  type IContextGeneratingVerb (line 11) | internal interface IContextGeneratingVerb
    method getContextIdentifier (line 14) | string getContextIdentifier();
    method getPoundDefines (line 16) | PoundDefines getPoundDefines();
    method getContextOutput (line 18) | BuildObject getContextOutput();

FILE: ironclad-apps/tools/NuBuild/NuBuild/IHasher.cs
  type IHasher (line 15) | internal interface IHasher
    method search (line 17) | BuildObject search(IIncludePathContext context, string modName, ModPar...
    method getParsedIncludes (line 19) | List<BeatIncludes.LabeledInclude> getParsedIncludes(IIncludePathContex...

FILE: ironclad-apps/tools/NuBuild/NuBuild/IIncludeFactory.cs
  type IIncludeFactory (line 12) | internal interface IIncludeFactory
    method getIncludes (line 14) | IEnumerable<BuildObject> getIncludes(BuildObject path);

FILE: ironclad-apps/tools/NuBuild/NuBuild/IIncludePathContext.cs
  type IIncludePathContext (line 11) | internal interface IIncludePathContext
    method search (line 13) | BuildObject search(string basename, ModPart modPart = ModPart.Ifc);

FILE: ironclad-apps/tools/NuBuild/NuBuild/IItemCache.cs
  type ItemCacheContainer (line 21) | public enum ItemCacheContainer
  type IItemCache (line 47) | public interface IItemCache
    method FetchItem (line 67) | byte[] FetchItem(
    method FetchItemToFile (line 84) | void FetchItemToFile(
    method StoreItem (line 99) | void StoreItem(
    method StoreItemFromFile (line 116) | void StoreItemFromFile(
    method DeleteItem (line 130) | void DeleteItem(
    method GetItemsInContainer (line 140) | HashSet<string> GetItemsInContainer(
    method GetItemSize (line 154) | long GetItemSize(
    method GetItemLastModifiedTime (line 168) | DateTimeOffset? GetItemLastModifiedTime(

FILE: ironclad-apps/tools/NuBuild/NuBuild/IObligationsProducer.cs
  type IObligationsProducer (line 11) | internal interface IObligationsProducer : IVerb
    method getObligationSet (line 13) | BuildObject getObligationSet();

FILE: ironclad-apps/tools/NuBuild/NuBuild/IProcessInvokeAsyncVerb.cs
  type IProcessInvokeAsyncVerb (line 15) | internal interface IProcessInvokeAsyncVerb : IVerb
    method RecordProcessInvokeCpuTime (line 21) | void RecordProcessInvokeCpuTime(double cpuTimeSeconds);
    method Complete (line 45) | Disposition Complete(WorkingDirectory workingDirectory, double cpuTime...

FILE: ironclad-apps/tools/NuBuild/NuBuild/IProcessInvoker.cs
  type IProcessInvoker (line 12) | internal interface IProcessInvoker
    method GetStdout (line 29) | string GetStdout();
    method GetStderr (line 35) | string GetStderr();

FILE: ironclad-apps/tools/NuBuild/NuBuild/IRejectable.cs
  type IRejectable (line 11) | internal interface IRejectable
    method resultWasRejectableFailure (line 13) | bool resultWasRejectableFailure();

FILE: ironclad-apps/tools/NuBuild/NuBuild/IVerb.cs
  type IVerb (line 16) | internal interface IVerb
    method getDependencies (line 41) | IEnumerable<BuildObject> getDependencies(out DependencyDisposition ddi...
    method getVerbs (line 51) | IEnumerable<IVerb> getVerbs();
    method getOutputs (line 62) | IEnumerable<BuildObject> getOutputs();
    method getFailureOutputs (line 71) | IEnumerable<BuildObject> getFailureOutputs();
    method getAbstractIdentifier (line 83) | AbstractId getAbstractIdentifier();
    method getWorker (line 92) | IVerbWorker getWorker(WorkingDirectory workingDirectory);
    method getPresentation (line 99) | Presentation getPresentation();
    method getRealtimePresentation (line 109) | Presentation getRealtimePresentation(Disposition disposition);
    method writeTimingXml (line 118) | void writeTimingXml(XmlWriter xmlWriter);
    method writeDebugXml (line 127) | void writeDebugXml(XmlWriter xmlWriter);

FILE: ironclad-apps/tools/NuBuild/NuBuild/IVerbWorker.cs
  type VerbWorkerType (line 15) | internal enum VerbWorkerType
  type ProcessExitCodeHandling (line 34) | internal enum ProcessExitCodeHandling
  type IVerbWorker (line 54) | internal interface IVerbWorker
    method IsSync (line 61) | VerbWorkerType IsSync();
    method GetWorkingDirectory (line 67) | WorkingDirectory GetWorkingDirectory();
    method RunAsync (line 76) | void RunAsync();
    method Complete (line 92) | Disposition Complete();

FILE: ironclad-apps/tools/NuBuild/NuBuild/IVerificationResultParser.cs
  type IVerificationResultParser (line 11) | internal interface IVerificationResultParser
    method parseOutput (line 13) | void parseOutput(

FILE: ironclad-apps/tools/NuBuild/NuBuild/IncludePathContext.cs
  class IncludePathContext (line 11) | internal abstract class IncludePathContext
    method search (line 14) | public abstract BuildObject search(string basename, ModPart modPart = ...
    method GetHashCode (line 16) | public override int GetHashCode()
    method Equals (line 21) | public override bool Equals(object obj)

FILE: ironclad-apps/tools/NuBuild/NuBuild/IronRootDirectory.cs
  class IronRootDirectory (line 16) | internal static class IronRootDirectory
    method PathTo (line 23) | public static string PathTo(BuildObject obj)
    method PathTo (line 33) | public static string PathTo(string relativePath)

FILE: ironclad-apps/tools/NuBuild/NuBuild/IroncladAppVerb.cs
  class IroncladAppVerb (line 14) | internal class IroncladAppVerb
    method IroncladAppVerb (line 39) | public IroncladAppVerb(SourcePath dfyroot, TARGET target, DafnyCCVerb....
    type TARGET (line 116) | public enum TARGET
    method getDependencies (line 122) | public override IEnumerable<BuildObject> getDependencies(out Dependenc...
    method getWorker (line 134) | public override IVerbWorker getWorker(WorkingDirectory workingDirectory)
    method getVerbs (line 157) | public override IEnumerable<IVerb> getVerbs()
    method getOutputs (line 168) | public override IEnumerable<BuildObject> getOutputs()
    method getObligationSet (line 173) | public BuildObject getObligationSet()
    method getAbstractIdentifier (line 178) | public override AbstractId getAbstractIdentifier()
    method getExe (line 183) | public BuildObject getExe()
    method getPresentation (line 188) | public override Presentation getPresentation()
    method getAppLabel (line 193) | public string getAppLabel()

FILE: ironclad-apps/tools/NuBuild/NuBuild/IronfleetAppVerb.cs
  class IronfleetAppVerb (line 19) | internal class IronfleetAppVerb : Verb, IObligationsProducer
    method IronfleetAppVerb (line 37) | public IronfleetAppVerb(SourcePath input, VerificationRequest verifica...
    method RelocateBuildObjectToExeDirectory (line 70) | private BuildObject RelocateBuildObjectToExeDirectory(BuildObject sour...
    method getDependencies (line 75) | public override IEnumerable<BuildObject> getDependencies(out Dependenc...
    method getVerbs (line 92) | public override IEnumerable<IVerb> getVerbs()
    method getOutputs (line 97) | public override IEnumerable<BuildObject> getOutputs()
    method getWorker (line 104) | public override IVerbWorker getWorker(WorkingDirectory workingDirectory)
    method getAbstractIdentifier (line 139) | public override AbstractId getAbstractIdentifier()
    method Complete (line 144) | public Disposition Complete(WorkingDirectory workingDirectory, double ...
    method getObligationSet (line 149) | public BuildObject getObligationSet()

FILE: ironclad-apps/tools/NuBuild/NuBuild/ItemCacheCloud.cs
  class ItemCacheCloud (line 21) | public class ItemCacheCloud : IItemCache
    method ItemCacheCloud (line 41) | public ItemCacheCloud()
    method FetchItem (line 97) | public byte[] FetchItem(
    method FetchItemToFile (line 127) | public void FetchItemToFile(
    method StoreItem (line 155) | public void StoreItem(
    method StoreItemFromFile (line 176) | public void StoreItemFromFile(
    method DeleteItem (line 194) | public void DeleteItem(
    method GetItemsInContainer (line 208) | public HashSet<string> GetItemsInContainer(ItemCacheContainer container)
    method GetItemSize (line 231) | public long GetItemSize(
    method GetItemLastModifiedTime (line 254) | public DateTimeOffset? GetItemLastModifiedTime(
    method ItemExists (line 279) | public bool ItemExists(

FILE: ironclad-apps/tools/NuBuild/NuBuild/ItemCacheLocal.cs
  class ItemCacheLocal (line 18) | public class ItemCacheLocal : IItemCache
    method ItemCacheLocal (line 40) | public ItemCacheLocal(string localCacheDirectory)
    method FetchItem (line 78) | public byte[] FetchItem(
    method FetchItemToFile (line 112) | public void FetchItemToFile(
    method StoreItem (line 143) | public void StoreItem(
    method StoreItemFromFile (line 168) | public void StoreItemFromFile(
    method GetItemsInContainer (line 187) | public HashSet<string> GetItemsInContainer(ItemCacheContainer container)
    method DeleteItem (line 208) | public void DeleteItem(
    method GetItemSize (line 229) | public long GetItemSize(
    method GetItemLastModifiedTime (line 255) | public DateTimeOffset? GetItemLastModifiedTime(
    method ItemPath (line 281) | private string ItemPath(ItemCacheContainer container, string itemHash)

FILE: ironclad-apps/tools/NuBuild/NuBuild/ItemCacheMultiplexer.cs
  class ItemCacheMultiplexer (line 17) | public class ItemCacheMultiplexer : IItemCache
    method ItemCacheMultiplexer (line 51) | public ItemCacheMultiplexer(
    method FetchItem (line 79) | public byte[] FetchItem(
    method FetchItemToFile (line 125) | public void FetchItemToFile(
    method StoreItem (line 168) | public void StoreItem(
    method StoreItemFromFile (line 189) | public void StoreItemFromFile(
    method DeleteItem (line 215) | public void DeleteItem(
    method GetItemsInContainer (line 229) | public HashSet<string> GetItemsInContainer(ItemCacheContainer container)
    method GetItemSize (line 248) | public long GetItemSize(
    method GetItemLastModifiedTime (line 271) | public DateTimeOffset? GetItemLastModifiedTime(
    method SyncItemToCloud (line 291) | public void SyncItemToCloud(
    method QueueItemForCloudSync (line 305) | private void QueueItemForCloudSync(
    method CheckForAndOrUploadMissingItem (line 323) | private void CheckForAndOrUploadMissingItem(
    class MultiplexerWrappedStream (line 369) | private class MultiplexerWrappedStream : Stream
      method MultiplexerWrappedStream (line 410) | public MultiplexerWrappedStream(
      method Read (line 496) | public override int Read(byte[] buffer, int offset, int count)
      method Write (line 516) | public override void Write(byte[] buffer, int offset, int count)
      method Flush (line 525) | public override void Flush()
      method Seek (line 541) | public override long Seek(long offset, SeekOrigin origin)
      method SetLength (line 552) | public override void SetLength(long value)
      method Dispose (line 563) | protected override void Dispose(bool disposing)

FILE: ironclad-apps/tools/NuBuild/NuBuild/Job.cs
  class Job (line 23) | [SuppressMessage("StyleCop.CSharp.ReadabilityRules", "SA1121:UseBuiltInT...
    method Job (line 39) | public Job()
    method AddProcess (line 92) | public bool AddProcess(Process process)
    method GetCpuTime (line 101) | public TimeSpan GetCpuTime()
    method Terminate (line 117) | public bool Terminate(UInt32 exitCode)
    method Close (line 125) | public void Close()
    method Dispose (line 133) | public void Dispose()
    method Dispose (line 143) | private void Dispose(bool disposing)
    method GetBasicAccountingInformation (line 162) | private NativeMethods.JOBOBJECT_BASIC_ACCOUNTING_INFORMATION GetBasicA...
    class NativeMethods (line 194) | [SuppressMessage("StyleCop.CSharp.NamingRules", "SA1310:FieldNamesMust...
      type JOBOBJECTINFOCLASS (line 201) | public enum JOBOBJECTINFOCLASS
      method CreateJobObject (line 208) | [DllImport("kernel32.dll", CharSet = CharSet.Unicode)]
      method AssignProcessToJobObject (line 211) | [DllImport("kernel32.dll")]
      method SetInformationJobObject (line 215) | [DllImport("kernel32.dll")]
      method QueryInformationJobObject (line 219) | [DllImport("kernel32.dll")]
      method TerminateJobObject (line 223) | [DllImport("kernel32.dll")]
      type JOBOBJECT_BASIC_LIMIT_INFORMATION (line 227) | [StructLayout(LayoutKind.Sequential, Pack = 8)]
      type IO_COUNTERS (line 241) | [StructLayout(LayoutKind.Sequential)]
      type JOBOBJECT_EXTENDED_LIMIT_INFORMATION (line 252) | [StructLayout(LayoutKind.Sequential)]
      type JOBOBJECT_BASIC_ACCOUNTING_INFORMATION (line 263) | [StructLayout(LayoutKind.Sequential)]

FILE: ironclad-apps/tools/NuBuild/NuBuild/LinkerVerb.cs
  class LinkerVerb (line 14) | internal class LinkerVerb : Verb, IProcessInvokeAsyncVerb
    method LinkerVerb (line 30) | public LinkerVerb(MasmVerb masmVerb, bool isLoader)
    method getAbstractIdentifier (line 53) | public override AbstractId getAbstractIdentifier()
    method getUntrustedExe (line 58) | public BuildObject getUntrustedExe()
    method getDependencies (line 63) | public override IEnumerable<BuildObject> getDependencies(out Dependenc...
    method getVerbs (line 71) | public override IEnumerable<IVerb> getVerbs()
    method getOutputs (line 76) | public override IEnumerable<BuildObject> getOutputs()
    method getWorker (line 81) | public override IVerbWorker getWorker(WorkingDirectory workingDirectory)
    method Complete (line 98) | public virtual Disposition Complete(WorkingDirectory workingDirectory,...
    method getVersion (line 114) | protected virtual int getVersion()
    method outputExtension (line 120) | protected virtual string outputExtension()
    method getLinkerExe (line 125) | protected virtual BuildObject getLinkerExe()
    method getExtraDependencies (line 130) | protected virtual IEnumerable<BuildObject> getExtraDependencies()
    method getExtraOutputs (line 139) | protected virtual IEnumerable<BuildObject> getExtraOutputs()
    method runLinker (line 144) | protected virtual bool runLinker(BuildObject asmFile, string linkerExe...

FILE: ironclad-apps/tools/NuBuild/NuBuild/Logger.cs
  class Logger (line 16) | internal class Logger
    method Write (line 27) | public static void Write(string msg)
    method WriteLine (line 40) | public static void WriteLine(string msg)
    method OpenLog (line 48) | private static void OpenLog()

FILE: ironclad-apps/tools/NuBuild/NuBuild/MasmVerb.cs
  class MasmVerb (line 12) | internal class MasmVerb : Verb, IProcessInvokeAsyncVerb
    method MasmVerb (line 23) | public MasmVerb(IAsmProducer asmVerb)
    method getAbstractIdentifier (line 32) | public override AbstractId getAbstractIdentifier()
    method getObj (line 37) | public BuildObject getObj()
    method getLis (line 42) | public BuildObject getLis()
    method getDependencies (line 49) | public override IEnumerable<BuildObject> getDependencies(out Dependenc...
    method getVerbs (line 55) | public override IEnumerable<IVerb> getVerbs()
    method getOutputs (line 60) | public override IEnumerable<BuildObject> getOutputs()
    method getWorker (line 69) | public override IVerbWorker getWorker(WorkingDirectory workingDirectory)
    method Complete (line 87) | public Disposition Complete(WorkingDirectory workingDirectory, double ...
    method getMasmExe (line 92) | private BuildObject getMasmExe()

FILE: ironclad-apps/tools/NuBuild/NuBuild/NMakeVerb.cs
  class NmakeVerb (line 16) | internal class NmakeVerb
    method NmakeVerb (line 28) | public NmakeVerb(SourcePath makefile)
    method getDependencies (line 46) | public override IEnumerable<BuildObject> getDependencies(out Dependenc...
    method getVerbs (line 52) | public override IEnumerable<IVerb> getVerbs()
    method getOutputs (line 57) | public override IEnumerable<BuildObject> getOutputs()
    method getOutputPath (line 62) | public BuildObject getOutputPath()
    method getWorker (line 67) | public override IVerbWorker getWorker(WorkingDirectory workingDirectory)
    method Complete (line 95) | public Disposition Complete(WorkingDirectory workingDirectory, double ...
    method getAbstractIdentifier (line 100) | public override AbstractId getAbstractIdentifier()
    method getNmakeExecutable (line 105) | private static SourcePath getNmakeExecutable()

FILE: ironclad-apps/tools/NuBuild/NuBuild/ObjectFailedException.cs
  class ObjectFailedException (line 11) | internal class ObjectFailedException : Exception
    method ObjectFailedException (line 13) | public ObjectFailedException(BuildObject obj, Failed failed)

FILE: ironclad-apps/tools/NuBuild/NuBuild/ObjectMissingFromCacheException.cs
  class ObjectMissingFromCacheException (line 11) | internal class ObjectMissingFromCacheException : Exception
    method ObjectMissingFromCacheException (line 15) | public ObjectMissingFromCacheException(string itemHash, string msg)

FILE: ironclad-apps/tools/NuBuild/NuBuild/ObjectNotReadyException.cs
  class ObjectNotReadyException (line 11) | internal class ObjectNotReadyException : Exception
    method ObjectNotReadyException (line 13) | public ObjectNotReadyException(BuildObject obj)

FILE: ironclad-apps/tools/NuBuild/NuBuild/OrderPreservingSet.cs
  class OrderPreservingSet (line 21) | internal class OrderPreservingSet<T>
    method OrderPreservingSet (line 27) | public OrderPreservingSet()
    method OrderPreservingSet (line 32) | public OrderPreservingSet(IEqualityComparer<T> comparer)
    method OrderPreservingSet (line 38) | public OrderPreservingSet(IEnumerable<T> initialContents)
    method Add (line 60) | public void Add(T item)
    method Add (line 69) | void ICollection<T>.Add(T item)
    method AddRange (line 74) | public void AddRange(IEnumerable<T> range)
    method Clear (line 82) | void ICollection<T>.Clear()
    method Contains (line 88) | bool ICollection<T>.Contains(T item)
    method CopyTo (line 93) | void ICollection<T>.CopyTo(T[] array, int arrayIndex)
    method GetEnumerator (line 98) | IEnumerator<T> IEnumerable<T>.GetEnumerator()
    method GetEnumerator (line 103) | System.Collections.IEnumerator System.Collections.IEnumerable.GetEnume...
    method Remove (line 108) | bool ICollection<T>.Remove(T item)

FILE: ironclad-apps/tools/NuBuild/NuBuild/PathNormalizer.cs
  class PathNormalizer (line 16) | internal class PathNormalizer
    method PathNormalizer (line 21) | public PathNormalizer()
    method dbg_normalizePath_nocache (line 27) | public static string dbg_normalizePath_nocache(string requestPath, boo...
    method normalizeAbsolutePath (line 33) | public string normalizeAbsolutePath(string absPath)
    method normalizePath_nocache (line 44) | private static string normalizePath_nocache(string requestPath, bool p...
    method normalizePath (line 121) | private string normalizePath(string requestPath, bool presumedDirectory)
    method cleanDotDots (line 134) | private string cleanDotDots(string path)

FILE: ironclad-apps/tools/NuBuild/NuBuild/PoundDefines.cs
  class PoundDefines (line 12) | internal class PoundDefines
    method PoundDefines (line 17) | public PoundDefines(IEnumerable<string> definedSymbols)
    method ToString (line 26) | public override string ToString()
    method getAbstractIdString (line 31) | public string getAbstractIdString()
    method GetHashCode (line 36) | public override int GetHashCode()
    method Equals (line 41) | public override bool Equals(object obj)
    method toAppLabel (line 55) | internal static string toAppLabel(PoundDefines poundDefines)
    method empty (line 60) | internal static PoundDefines empty()
    method ToDefArgs (line 65) | internal IEnumerable<string> ToDefArgs()

FILE: ironclad-apps/tools/NuBuild/NuBuild/Presentater.cs
  type Presentater (line 16) | internal interface Presentater
    method startHeader (line 18) | void startHeader();
    method endHeader (line 20) | void endHeader();
    method startLine (line 22) | void startLine();
    method endLine (line 24) | void endLine();
    method startSpacer (line 26) | void startSpacer();
    method endSpacer (line 28) | void endSpacer();
    method startColor (line 30) | void startColor(string colorName);
    method endColor (line 32) | void endColor();
    method startBullet (line 34) | void startBullet();
    method endBullet (line 36) | void endBullet();
    method startPre (line 38) | void startPre();
    method endPre (line 40) | void endPre();
    method doText (line 42) | void doText(string text);
  class HTMLPresentater (line 45) | public class HTMLPresentater : Presentater
    method HTMLPresentater (line 49) | public HTMLPresentater()
    method ToString (line 55) | public override string ToString()
    method startHeader (line 61) | public void startHeader()
    method endHeader (line 66) | public void endHeader()
    method startLine (line 71) | public void startLine()
    method endLine (line 76) | public void endLine()
    method startSpacer (line 81) | public void startSpacer()
    method endSpacer (line 86) | public void endSpacer()
    method startColor (line 91) | public void startColor(string colorName)
    method endColor (line 109) | public void endColor()
    method startBullet (line 114) | public void startBullet()
    method endBullet (line 119) | public void endBullet()
    method startPre (line 124) | public void startPre()
    method endPre (line 129) | public void endPre()
    method doText (line 134) | public void doText(string text)
  class ASCIIPresentater (line 156) | public class ASCIIPresentater : Presentater
    method ASCIIPresentater (line 186) | public ASCIIPresentater()
    method ToString (line 191) | public override string ToString()
    method startHeader (line 196) | public void startHeader()
    method endHeader (line 201) | public void endHeader()
    method startLine (line 206) | public void startLine()
    method endLine (line 210) | public void endLine()
    method startSpacer (line 215) | public void startSpacer()
    method endSpacer (line 219) | public void endSpacer()
    method startColor (line 224) | public void startColor(string colorName)
    method endColor (line 243) | public void endColor()
    method startBullet (line 249) | public void startBullet()
    method endBullet (line 254) | public void endBullet()
    method startPre (line 259) | public void startPre()
    method endPre (line 263) | public void endPre()
    method doText (line 271) | public void doText(string text)
    class ColorEnum (line 282) | private class ColorEnum
      method ColorEnum (line 287) | public ColorEnum(string start, string stop)
      method join (line 293) | public static ColorEnum join(ColorEnum a, ColorEnum b)

FILE: ironclad-apps/tools/NuBuild/NuBuild/Presentation.cs
  class Presentation (line 14) | internal class Presentation : XmlFiller
    method Presentation (line 32) | public Presentation(string xmls)
    method fromXml (line 37) | public static Presentation fromXml(XmlReader xr)
    method fillXml (line 51) | public void fillXml(XmlWriter xw)
    method format (line 60) | public void format(Presentater p)
    method abbreviateLines (line 131) | internal static string abbreviateLines(string m)

FILE: ironclad-apps/tools/NuBuild/NuBuild/PresentationBuilder.cs
  class PresentationBuilder (line 13) | internal class PresentationBuilder
    method PresentationBuilder (line 19) | public PresentationBuilder()
    method fix (line 29) | public Presentation fix()
    method text (line 37) | public void text(string s)
    method color (line 42) | public void color(string color, string s)
    method header (line 50) | public void header(string s)
    method line (line 55) | public void line(string s)
    method spacer (line 60) | public void spacer()
    method bullet (line 65) | public void bullet(string s)
    method pre (line 70) | public void pre(string s)
    method startHeader (line 75) | public void startHeader()
    method endHeader (line 80) | public void endHeader()
    method startLine (line 85) | public void startLine()
    method endLine (line 90) | public void endLine()
    method startBullet (line 95) | public void startBullet()
    method endBullet (line 100) | public void endBullet()
    method simpleTag (line 105) | private void simpleTag(string tag, string s)

FILE: ironclad-apps/tools/NuBuild/NuBuild/ProcessInvokeAsyncWorker.cs
  class ProcessInvokeAsyncWorker (line 16) | internal class ProcessInvokeAsyncWorker : IVerbWorker
    method ProcessInvokeAsyncWorker (line 123) | public ProcessInvokeAsyncWorker(
    method IsSync (line 178) | public VerbWorkerType IsSync()
    method GetWorkingDirectory (line 187) | public WorkingDirectory GetWorkingDirectory()
    method RunAsync (line 200) | public void RunAsync()
    method Complete (line 243) | public Disposition Complete()
    method GetInputFiles (line 280) | private List<BuildObject> GetInputFiles()

FILE: ironclad-apps/tools/NuBuild/NuBuild/ProcessInvoker.cs
  class ProcessInvoker (line 17) | public class ProcessInvoker : IProcessInvoker
    method ProcessInvoker (line 71) | public ProcessInvoker(
    method GetStdout (line 196) | public string GetStdout()
    method GetStderr (line 205) | public string GetStderr()
    method GetStdoutString (line 214) | private string GetStdoutString()
    method StdoutRedirectHandler (line 232) | private void StdoutRedirectHandler(object sendingProcess, DataReceived...
    method StdoutHandler (line 243) | private void StdoutHandler(object sendingProcess, DataReceivedEventArg...
    method StderrHandler (line 255) | private void StderrHandler(object sendingProcess, DataReceivedEventArg...

FILE: ironclad-apps/tools/NuBuild/NuBuild/Program.cs
  class Program (line 17) | internal class Program
    method Program (line 25) | public Program()
    method Main (line 32) | static void Main(string[] args)
    method usage (line 39) | void usage(string msg)
    method takeArg (line 59) | string takeArg(string expectedThing)
    method conditionSourcePath (line 71) | SourcePath conditionSourcePath(string path)
    method fixIronRoot (line 76) | void fixIronRoot()
    method parseArgs (line 90) | void parseArgs(string[] args)
    method GetItemCache (line 236) | private IItemCache GetItemCache()
    method getAssemblyPath (line 268) | string getAssemblyPath()
    method getDefaultIronRoot (line 275) | string getDefaultIronRoot()
    method logNubuildInvocation (line 292) | void logNubuildInvocation(string[] args)
    method fetchConfigArgs (line 303) | private IEnumerable<string> fetchConfigArgs()
    method main (line 324) | void main(string[] cmdline_args)

FILE: ironclad-apps/tools/NuBuild/NuBuild/Repository.cs
  class Repository (line 33) | internal class Repository
    method Repository (line 61) | public Repository(IItemCache itemCache)
    method Store (line 81) | public BuildObjectValuePointer Store(WorkingDirectory workingDirectory...
    method Fetch (line 97) | public void Fetch(WorkingDirectory workingDirectory, BuildObject obj)
    method OpenRead (line 120) | public TextReader OpenRead(BuildObject obj)
    method StoreResult (line 147) | public void StoreResult(string inputHash, ResultSummaryRecord result)
    method FetchResult (line 183) | public ResultSummaryRecord FetchResult(string inputHash, bool includeF...
    method StoreVirtual (line 226) | public void StoreVirtual(BuildObject obj, Disposition disposition, Vir...
    method FetchVirtual (line 237) | public VirtualContents FetchVirtual(BuildObject obj)
    method GetDisposition (line 247) | public Disposition GetDisposition(BuildObject obj)
    method GetHash (line 265) | public string GetHash(BuildObject obj)
    method AddVerbResults (line 305) | public void AddVerbResults(IVerb verb, ResultSummaryRecord resultRecord)
    method AddObject (line 380) | public void AddObject(BuildObject obj, Disposition disposition, string...
    method DbgCacheSize (line 390) | internal int DbgCacheSize()
    method FetchFresh (line 400) | private RepositoryEntry FetchFresh(BuildObject obj)
    method GetValue (line 427) | private RepositoryEntry GetValue(BuildObject obj)
    method Add (line 480) | private void Add(BuildObject obj, Disposition disposition, string hash...
    class RepositoryEntry (line 507) | private class RepositoryEntry
      method RepositoryEntry (line 535) | public RepositoryEntry(Disposition disposition, string hash, Virtual...

FILE: ironclad-apps/tools/NuBuild/NuBuild/ResultSummaryRecord.cs
  class ResultSummaryRecord (line 18) | public class ResultSummaryRecord
    method ResultSummaryRecord (line 62) | internal ResultSummaryRecord(
    method ResultSummaryRecord (line 82) | internal ResultSummaryRecord(
    method ResultSummaryRecord (line 105) | internal ResultSummaryRecord(
    method FromXml (line 166) | public static ResultSummaryRecord FromXml(string xs)
    method ReadXml (line 192) | public static ResultSummaryRecord ReadXml(XmlReader xr)
    method ToXml (line 233) | public string ToXml()
    method WriteXml (line 250) | public void WriteXml(XmlWriter xw)

FILE: ironclad-apps/tools/NuBuild/NuBuild/Scheduler.cs
  class Scheduler (line 21) | internal class Scheduler
    method Scheduler (line 148) | public Scheduler(int jobParallelism)
    method addTargets (line 171) | public void addTargets(IEnumerable<BuildObject> newTargets)
    method parallelSchedule (line 180) | public void parallelSchedule()
    method dbgDisplayCounts (line 237) | public void dbgDisplayCounts()
    method dbgDumpWaitIndex (line 246) | internal void dbgDumpWaitIndex()
    method dbgGetVerbStatus (line 256) | internal string dbgGetVerbStatus(IVerb verb)
    method addVerb (line 279) | internal void addVerb(IVerb verb)
    method addTargetVerbs (line 314) | internal void addTargetVerbs(List<IVerb> verbs)
    method getTargets (line 327) | internal IEnumerable<BuildObject> getTargets()
    method getParent (line 343) | internal IVerb getParent(BuildObject obj)
    method getObjectDisposition (line 355) | internal Disposition getObjectDisposition(BuildObject obj)
    method dbgUpdateProgress (line 369) | internal void dbgUpdateProgress(int runnableVerbsCount, int runningVer...
    method computeInputHash (line 391) | private string computeInputHash(IVerb verb, bool assertHashAvailable)
    method robustDiscoverReadyDeps (line 430) | private List<IVerb> robustDiscoverReadyDeps(IEnumerable<BuildObject> s...
    method disposeCurrentVerbs (line 457) | p
Copy disabled (too large) Download .json
Condensed preview — 1364 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (18,750K chars).
[
  {
    "path": ".gitignore",
    "chars": 322,
    "preview": "#\r\n# This file needs to exist to work-around a bug in Visual Studio 2013's Git.\r\n#\r\n# Without this file, VS doesn't read"
  },
  {
    "path": "LICENSE",
    "chars": 1127,
    "preview": "Ironclad 1.0\r\n\r\nCopyright (c) Microsoft Corporation\r\nAll rights reserved. \r\n\r\nMIT License\r\n\r\nPermission is hereby grante"
  },
  {
    "path": "README.md",
    "chars": 233,
    "preview": "# About\r\n\r\nTo learn more about the Ironclad Apps project, please see the related [README](./ironclad-apps/README.md) fil"
  },
  {
    "path": "SECURITY.md",
    "chars": 2757,
    "preview": "<!-- BEGIN MICROSOFT SECURITY.MD V0.0.8 BLOCK -->\n\n## Security\n\nMicrosoft takes the security of our software products an"
  },
  {
    "path": "ironclad-apps/.gitignore",
    "chars": 246,
    "preview": "codeplex\r\nobj/\r\nobj-*/\r\nbin-*/\r\nbin/\r\nbin_tools/\r\nobj_tools/\r\nsrc/Clients/*/bin/\r\n*-disabled\r\nnucache/\r\nnuobj/\r\nnutemp/\r"
  },
  {
    "path": "ironclad-apps/IRONROOT.sentinel",
    "chars": 169,
    "preview": "This file marks the top of the Ironclad source repository.\r\nIts presence is used by the NuBuild system to orient itself\r"
  },
  {
    "path": "ironclad-apps/README.md",
    "chars": 6022,
    "preview": "# About\r\n\r\nThis directory contains experimental verified Ironclad Apps code,\r\nas described in:\r\n\r\n>  [_Ironclad Apps: En"
  },
  {
    "path": "ironclad-apps/boot/boot-cp.cmd",
    "chars": 1438,
    "preview": "@rem //////////////////////////////////////////////////////////////////////\r\n@rem \r\n@rem   Microsoft Research Singularit"
  },
  {
    "path": "ironclad-apps/boot/boothosts.txt",
    "chars": 38,
    "preview": "90-e2-ba-4f-0c-5b\r\nd4-85-64-c3-19-f6\r\n"
  },
  {
    "path": "ironclad-apps/build-tools.ps1",
    "chars": 762,
    "preview": ". .\\env.ps1\r\n\r\n$ROOT=\".\"\r\n\r\n. $ROOT\\def.ps1 $args\r\n\r\n$NMAKE = \"$(ls $BUILD\\nmake.exe)\"\r\n$MSBUILD=\"C:/Windows/Microsoft.N"
  },
  {
    "path": "ironclad-apps/def.ps1",
    "chars": 14110,
    "preview": "$build_args = $args[0]\r\n$BUILD_SUFFIX = \"$($build_args | %{\"-$_\"})\".Replace(\" \", \"\")\r\n$BUILD_DEFS = $($build_args | %{\"-"
  },
  {
    "path": "ironclad-apps/env.ps1",
    "chars": 129,
    "preview": "if ($env:SAFEOS_ROOT -eq $null)\r\n{\r\n    $env:SAFEOS_ROOT = $PWD\r\n    $env:PATH = $env:PATH + \";$env:SAFEOS_ROOT\\tools\\bu"
  },
  {
    "path": "ironclad-apps/makefile",
    "chars": 515,
    "preview": "NUBUILD=bin_tools/NuBuild/NuBuild.exe -j $(j)\r\n\r\nall: $(NUBUILD)\r\n\t$(NUBUILD) DafnyVerifyTree src/Dafny/apps/apps.batch\r"
  },
  {
    "path": "ironclad-apps/src/Checked/BootLoader/SingLdrPc/.gitignore",
    "chars": 5,
    "preview": "tags\n"
  },
  {
    "path": "ironclad-apps/src/Checked/BootLoader/SingLdrPc/bl.h",
    "chars": 27161,
    "preview": "//++\n//\n//  Copyright (c) Microsoft Corporation\n//\n//  Module Name:\n//\n//    bl.h\n//\n//  Abstract:\n//\n//    This module "
  },
  {
    "path": "ironclad-apps/src/Checked/BootLoader/SingLdrPc/bl.inc",
    "chars": 10684,
    "preview": ";++\n;\n; Copyright (c) Microsoft Corporation\n;\n; Module Name:\n;\n;     bl.inc\n;\n; Abstract:\n;\n;     This module contains d"
  },
  {
    "path": "ironclad-apps/src/Checked/BootLoader/SingLdrPc/blacpi.cpp",
    "chars": 16318,
    "preview": "//++\n//\n//  Copyright (c) Microsoft Corporation\n//\n//  Module Name:\n//\n//    blacpi.cpp\n//\n//  Abstract:\n//\n//    This m"
  },
  {
    "path": "ironclad-apps/src/Checked/BootLoader/SingLdrPc/blcdrom.cpp",
    "chars": 15237,
    "preview": "//++\n//\n//  Copyright (c) Microsoft Corporation\n//\n//  Module Name:\n//\n//    blcdrom.cpp\n//\n//  Abstract:\n//\n//    This "
  },
  {
    "path": "ironclad-apps/src/Checked/BootLoader/SingLdrPc/blcom.cpp",
    "chars": 8207,
    "preview": "//++\n//\n//  Copyright (c) Microsoft Corporation\n//\n//  Module Name:\n//\n//    blcom.cpp\n//\n//  Abstract:\n//\n//    This mo"
  },
  {
    "path": "ironclad-apps/src/Checked/BootLoader/SingLdrPc/blentry.cpp",
    "chars": 4622,
    "preview": "//++\n//\n//  Copyright (c) Microsoft Corporation\n//\n//  Module Name:\n//\n//    blentry.cpp\n//\n//  Abstract:\n//\n//    This "
  },
  {
    "path": "ironclad-apps/src/Checked/BootLoader/SingLdrPc/blentry16.asm",
    "chars": 33980,
    "preview": ";++\n;\n; Copyright (c) Microsoft Corporation\n;\n; Module Name:\n;\n;     blentry16.asm (x64)\n;\n; Abstract:\n;\n;     This modu"
  },
  {
    "path": "ironclad-apps/src/Checked/BootLoader/SingLdrPc/blfat.cpp",
    "chars": 33764,
    "preview": "//++\n//\n//  Copyright (c) Microsoft Corporation\n//\n//  Module Name:\n//\n//    blfat.cpp\n//\n//  Abstract:\n//\n//    This mo"
  },
  {
    "path": "ironclad-apps/src/Checked/BootLoader/SingLdrPc/blflash.cpp",
    "chars": 4248,
    "preview": "//++\n//\n//  Copyright (c) Microsoft Corporation\n//\n//  Module Name:\n//\n//    blflash.cpp\n//\n//  Abstract:\n//\n//    This "
  },
  {
    "path": "ironclad-apps/src/Checked/BootLoader/SingLdrPc/blkd.cpp",
    "chars": 3621,
    "preview": "//++\n//\n//  Copyright (c) Microsoft Corporation\n//\n//  Module Name:\n//\n//    blkd.cpp\n//\n//  Abstract:\n//\n//    This mod"
  },
  {
    "path": "ironclad-apps/src/Checked/BootLoader/SingLdrPc/blkd1394.cpp",
    "chars": 19118,
    "preview": "//++\n//\n//  Copyright (c) Microsoft Corporation\n//\n//  Module Name:\n//\n//    blkd1394.cpp\n//\n//  Abstract:\n//\n//    This"
  },
  {
    "path": "ironclad-apps/src/Checked/BootLoader/SingLdrPc/blkd1394.h",
    "chars": 18580,
    "preview": "//++\n//\n//Copyright (c) Microsoft Corporation\n//\n//Module Name:\n//\n//  blkd1394.h\n//\n//Abstract:\n//\n//  This module defi"
  },
  {
    "path": "ironclad-apps/src/Checked/BootLoader/SingLdrPc/blkdcom.cpp",
    "chars": 8711,
    "preview": "//++\n//\n//  Copyright (c) Microsoft Corporation\n//\n//  Module Name:\n//\n//    blkdcom.cpp\n//\n//  Abstract:\n//\n//    This "
  },
  {
    "path": "ironclad-apps/src/Checked/BootLoader/SingLdrPc/blmm.cpp",
    "chars": 26527,
    "preview": "//++\n//\n//  Copyright (c) Microsoft Corporation\n//\n//  Module Name:\n//\n//    blmm.cpp\n//\n//  Abstract:\n//\n//    This mod"
  },
  {
    "path": "ironclad-apps/src/Checked/BootLoader/SingLdrPc/blmps.cpp",
    "chars": 2781,
    "preview": "//++\n//\n//  Copyright (c) Microsoft Corporation\n//\n//  Module Name:\n//\n//    blmps.cpp\n//\n//  Abstract:\n//\n//    This mo"
  },
  {
    "path": "ironclad-apps/src/Checked/BootLoader/SingLdrPc/blpci.cpp",
    "chars": 19482,
    "preview": "//++\n//\n//  Copyright (c) Microsoft Corporation\n//\n//  Module Name:\n//\n//    blpci.cpp\n//\n//  Abstract:\n//\n//    This mo"
  },
  {
    "path": "ironclad-apps/src/Checked/BootLoader/SingLdrPc/blpecoff.cpp",
    "chars": 14347,
    "preview": "//++\n//\n//  Copyright (c) Microsoft Corporation\n//\n//  Module Name:\n//\n//    blpecoff.cpp\n//\n//  Abstract:\n//\n//    This"
  },
  {
    "path": "ironclad-apps/src/Checked/BootLoader/SingLdrPc/blpnp.cpp",
    "chars": 10401,
    "preview": "//++\n//\n//  Copyright (c) Microsoft Corporation\n//\n//  Module Name:\n//\n//    blpnp.cpp\n//\n//  Abstract:\n//\n//    This mo"
  },
  {
    "path": "ironclad-apps/src/Checked/BootLoader/SingLdrPc/blpool.cpp",
    "chars": 10027,
    "preview": "//++\n//\n//  Copyright (c) Microsoft Corporation\n//\n//  Module Name:\n//\n//    blpool.cpp\n//\n//  Abstract:\n//\n//    This m"
  },
  {
    "path": "ironclad-apps/src/Checked/BootLoader/SingLdrPc/blpxe.cpp",
    "chars": 15984,
    "preview": "//++\n//\n//  Copyright (c) Microsoft Corporation\n//\n//  Module Name:\n//\n//    blpxe.cpp\n//\n//  Abstract:\n//\n//    This mo"
  },
  {
    "path": "ironclad-apps/src/Checked/BootLoader/SingLdrPc/blsingularity.cpp",
    "chars": 34657,
    "preview": "//-++\n//-\n//-  Copyright (c) Microsoft Corporation\n//-\n//-  Module Name:\n//-\n//-    blsingularity.cpp\n//-\n//-  Abstract:"
  },
  {
    "path": "ironclad-apps/src/Checked/BootLoader/SingLdrPc/blsmap.cpp",
    "chars": 3503,
    "preview": "//++\n//\n//  Copyright (c) Microsoft Corporation\n//\n//  Module Name:\n//\n//    blsmap.cpp\n//\n//  Abstract:\n//\n//    This m"
  },
  {
    "path": "ironclad-apps/src/Checked/BootLoader/SingLdrPc/blstring.cpp",
    "chars": 28887,
    "preview": "//++\n//\n//  Copyright (c) Microsoft Corporation\n//\n//  Module Name:\n//\n//    blstring.cpp\n//\n//  Abstract:\n//\n//    This"
  },
  {
    "path": "ironclad-apps/src/Checked/BootLoader/SingLdrPc/bltrap.cpp",
    "chars": 5224,
    "preview": "//++\n//\n//  Copyright (c) Microsoft Corporation\n//\n//  Module Name:\n//\n//    bltrap.cpp\n//\n//  Abstract:\n//\n//    This m"
  },
  {
    "path": "ironclad-apps/src/Checked/BootLoader/SingLdrPc/blutil.cpp",
    "chars": 23019,
    "preview": "//++\n//\n//  Copyright (c) Microsoft Corporation\n//\n//  Module Name:\n//\n//    blutil.cpp\n//\n//  Abstract:\n//\n//    This m"
  },
  {
    "path": "ironclad-apps/src/Checked/BootLoader/SingLdrPc/blvesa.cpp",
    "chars": 5457,
    "preview": "//++\n//\n//  Copyright (c) Microsoft Corporation\n//\n//  Module Name:\n//\n//    blvesa.cpp\n//\n//  Abstract:\n//\n//    This m"
  },
  {
    "path": "ironclad-apps/src/Checked/BootLoader/SingLdrPc/blvideo.cpp",
    "chars": 5477,
    "preview": "//++\n//\n//  Copyright (c) Microsoft Corporation\n//\n//  Module Name:\n//\n//    blvideo.cpp\n//\n//  Abstract:\n//\n//    This "
  },
  {
    "path": "ironclad-apps/src/Checked/BootLoader/SingLdrPc/makefile",
    "chars": 2602,
    "preview": "BUILD = ..\\..\\..\\..\\tools\\build\n\nAS = $(BUILD)\\x86_x86\\ml.exe\nCC = $(BUILD)\\x86_x86\\cl.exe\nLINK = $(BUILD)\\x86_x86\\link."
  },
  {
    "path": "ironclad-apps/src/Checked/BootLoader/SingLdrPc/platform.h",
    "chars": 6323,
    "preview": "typedef __int64 Gdte;\ntypedef unsigned char byte;\ntypedef unsigned short ushort;\ntypedef unsigned uint;\ntypedef unsigned"
  },
  {
    "path": "ironclad-apps/src/Checked/BootLoader/SingLdrPc/tpm/aik.cpp",
    "chars": 3934,
    "preview": "char aik[559] = {\n0x00, \n0x28, \n0x00, \n0x00, \n0x00, \n0x12, \n0x00, \n0x00, \n0x00, \n0x04, \n0x01, \n0x00, \n0x00, \n0x00, \n0x01"
  },
  {
    "path": "ironclad-apps/src/Checked/BootLoader/SingLdrPc/tpm/aik.h",
    "chars": 36,
    "preview": "#pragma once\n extern char aik[559];\n"
  },
  {
    "path": "ironclad-apps/src/Checked/BootLoader/SingLdrPc/x86/blcrtasm.asm",
    "chars": 48086,
    "preview": ";++\n;\n; Copyright (c) Microsoft Corporation\n;\n; Module Name:\n;\n;     blcrt.asm\n;\n; Abstract:\n;\n;     This module impleme"
  },
  {
    "path": "ironclad-apps/src/Checked/BootLoader/SingLdrPc/x86/blidt.asm",
    "chars": 3596,
    "preview": ";++\n;\n; Copyright (c) Microsoft Corporation\n;\n; Module Name:\n;\n;     blidt.asm\n;\n; Abstract:\n;\n;     This module impleme"
  },
  {
    "path": "ironclad-apps/src/Checked/BootLoader/SingLdrPc/x86/blioport.asm",
    "chars": 1997,
    "preview": ";++\n;\n; Copyright (c) Microsoft Corporation\n;\n; Module Name:\n;\n;     blioport.asm\n;\n; Abstract:\n;\n;     This module impl"
  },
  {
    "path": "ironclad-apps/src/Checked/BootLoader/SingLdrPc/x86/bllegacy.asm",
    "chars": 2537,
    "preview": ";++\n;\n; Copyright (c) Microsoft Corporation\n;\n; Module Name:\n;\n;     bllegacy.asm\n;\n; Abstract:\n;\n;     This module impl"
  },
  {
    "path": "ironclad-apps/src/Checked/BootLoader/SingLdrPc/x86/blutilasm.asm",
    "chars": 6605,
    "preview": ";++\n;\n; Copyright (c) Microsoft Corporation\n;\n; Module Name:\n;\n;     blutilasm.asm\n;\n; Abstract:\n;\n;     This module imp"
  },
  {
    "path": "ironclad-apps/src/Checked/Libraries/DafnyCC/Base.dfy",
    "chars": 686,
    "preview": "include \"../../../Dafny/Libraries/base.s.dfy\"\r\nstatic function{:imported} unroll_all(i:int):bool { true }\r\nstatic functi"
  },
  {
    "path": "ironclad-apps/src/Checked/Libraries/DafnyCC/Seq.dfy",
    "chars": 35834,
    "preview": "include \"Base.dfy\"\r\ninclude \"../../../Trusted/DafnySpec/Seq.s.dfy\"\r\n\r\n//- Untrusted sequence definitions\r\n\r\nghost method"
  },
  {
    "path": "ironclad-apps/src/Checked/Nucleus/Base/BitVectorLemmasBase.ifc.beat",
    "chars": 10689,
    "preview": "//--private-import BaseSpec;\r\n//--private-import MemorySpec;\r\n//--<NuBuild AddBoogieAxiom BitVector_axioms />\r\n//--<NuBu"
  },
  {
    "path": "ironclad-apps/src/Checked/Nucleus/Base/BitVectorLemmasBase.imp.beat",
    "chars": 1557,
    "preview": "//-private-import BaseSpec;\r\n//-private-import MemorySpec;\r\n//-<NuBuild AddBoogieAxiom BitVector_axioms />\r\n//-<NuBuild "
  },
  {
    "path": "ironclad-apps/src/Checked/Nucleus/Base/Core.ifc.beat",
    "chars": 3260,
    "preview": "//-private-import BaseSpec;\r\n//-private-import MemorySpec;\r\n//-private-import IoTypesSpec;\r\n//-private-import MachineSta"
  },
  {
    "path": "ironclad-apps/src/Checked/Nucleus/Base/Core.imp.beat",
    "chars": 1639,
    "preview": "//-private-import BaseSpec;\r\n//-private-import MemorySpec;\r\n//-private-import IoTypesSpec;\r\n//-private-import MachineSta"
  },
  {
    "path": "ironclad-apps/src/Checked/Nucleus/Base/Instructions.ifc.beat",
    "chars": 8696,
    "preview": "\r\nmodule interface Instructions\r\n{\r\n\r\ninstruction Mov(y:opn) returns(x:reg) { call r := instr_Mov(r, x, y); }\r\ninstructi"
  },
  {
    "path": "ironclad-apps/src/Checked/Nucleus/Base/Instructions.imp.beat",
    "chars": 44,
    "preview": "\r\nmodule implementation Instructions\r\n{\r\n}\r\n"
  },
  {
    "path": "ironclad-apps/src/Checked/Nucleus/Base/IntLemmasBase.ifc.beat",
    "chars": 7688,
    "preview": "//-private-import BaseSpec;\r\n//-private-import MemorySpec;\r\n//-private-import IoTypesSpec;\r\n//-private-import MachineSta"
  },
  {
    "path": "ironclad-apps/src/Checked/Nucleus/Base/IntLemmasBase.imp.beat",
    "chars": 10955,
    "preview": "//-private-import BaseSpec;\r\n//-private-import MemorySpec;\r\n//-private-import IoTypesSpec;\r\n//-private-import MachineSta"
  },
  {
    "path": "ironclad-apps/src/Checked/Nucleus/Base/LogicalAddressing.ifc.beat",
    "chars": 33170,
    "preview": "//-private-import BaseSpec;\r\n//-private-import MemorySpec;\r\n//-private-import IoTypesSpec;\r\n//-private-import MachineSta"
  },
  {
    "path": "ironclad-apps/src/Checked/Nucleus/Base/LogicalAddressing.imp.beat",
    "chars": 44614,
    "preview": "//-private-import BaseSpec;\r\n//-private-import MemorySpec;\r\n//-private-import IoTypesSpec;\r\n//-private-import MachineSta"
  },
  {
    "path": "ironclad-apps/src/Checked/Nucleus/Base/Overflow.imp.beat",
    "chars": 2597,
    "preview": "//-private-import BaseSpec;\r\n//-private-import MemorySpec;\r\n//-private-import IoTypesSpec;\r\n//-private-import MachineSta"
  },
  {
    "path": "ironclad-apps/src/Checked/Nucleus/Base/Partition.ifc.beat",
    "chars": 469,
    "preview": "//-private-import BaseSpec;\r\n//-private-import MemorySpec;\r\n//-private-import IoTypesSpec;\r\n//-private-import MachineSta"
  },
  {
    "path": "ironclad-apps/src/Checked/Nucleus/Base/Partition.imp.beat",
    "chars": 474,
    "preview": "//-private-import BaseSpec;\r\n//-private-import MemorySpec;\r\n//-private-import IoTypesSpec;\r\n//-private-import MachineSta"
  },
  {
    "path": "ironclad-apps/src/Checked/Nucleus/Base/Separation.ifc.beat",
    "chars": 11774,
    "preview": "//-private-import BaseSpec;\r\n//-private-import MemorySpec;\r\n//-private-import IoTypesSpec;\r\n//-private-import MachineSta"
  },
  {
    "path": "ironclad-apps/src/Checked/Nucleus/Base/Separation.imp.beat",
    "chars": 3830,
    "preview": "//-private-import BaseSpec;\r\n//-private-import MemorySpec;\r\n//-private-import IoTypesSpec;\r\n//-private-import MachineSta"
  },
  {
    "path": "ironclad-apps/src/Checked/Nucleus/Base/Stacks.ifc.beat",
    "chars": 5935,
    "preview": "//-private-import BaseSpec;\r\n//-private-import MemorySpec;\r\n//-private-import IoTypesSpec;\r\n//-private-import MachineSta"
  },
  {
    "path": "ironclad-apps/src/Checked/Nucleus/Base/Stacks.imp.beat",
    "chars": 783,
    "preview": "//-private-import BaseSpec;\r\n//-private-import MemorySpec;\r\n//-private-import IoTypesSpec;\r\n//-private-import MachineSta"
  },
  {
    "path": "ironclad-apps/src/Checked/Nucleus/Base/Util.ifc.beat",
    "chars": 3486,
    "preview": "//-private-import BaseSpec;\r\n//-private-import MemorySpec;\r\n//-private-import IoTypesSpec;\r\n//-private-import MachineSta"
  },
  {
    "path": "ironclad-apps/src/Checked/Nucleus/Base/Util.imp.beat",
    "chars": 6481,
    "preview": "//-private-import BaseSpec;\r\n//-private-import MemorySpec;\r\n//-private-import IoTypesSpec;\r\n//-private-import MachineSta"
  },
  {
    "path": "ironclad-apps/src/Checked/Nucleus/Devices/BitVectorLemmasDevices.ifc.beat",
    "chars": 985,
    "preview": "//-private-import BaseSpec;\r\n//-private-import MemorySpec;\r\n//-<NuBuild AddBoogieAxiom BitVector_axioms />\r\n//-<NuBuild "
  },
  {
    "path": "ironclad-apps/src/Checked/Nucleus/Devices/BitVectorLemmasDevices.imp.beat",
    "chars": 590,
    "preview": "//-\r\n//- Copyright (c) Microsoft Corporation.  All rights reserved.\r\n//-\r\n//-private-import BaseSpec;\r\n//-private-import"
  },
  {
    "path": "ironclad-apps/src/Checked/Nucleus/Devices/IntLemmasDevices.ifc.beat",
    "chars": 605,
    "preview": "//-private-import BaseSpec;\r\n//-private-import MemorySpec;\r\n//-private-import IntSpec;\r\n//-private-import IoTypesSpec;\r\n"
  },
  {
    "path": "ironclad-apps/src/Checked/Nucleus/Devices/IntLemmasDevices.imp.beat",
    "chars": 1285,
    "preview": "//-private-import BaseSpec;\r\n//-private-import MemorySpec;\r\n//-private-import IntSpec;\r\n//-private-import BitVectorLemma"
  },
  {
    "path": "ironclad-apps/src/Checked/Nucleus/Devices/IntelNIC.ifc.beat",
    "chars": 2192,
    "preview": "//- Untrusted spec for interacting with the network card\r\n//- Implementation of the verified network driver\r\n\r\n//-<NuBui"
  },
  {
    "path": "ironclad-apps/src/Checked/Nucleus/Devices/IntelNIC.imp.beat",
    "chars": 2035,
    "preview": "//- Implementation of the verified network driver\r\n//-<NuBuild BasmEnableSymdiff true />\r\n//-private-import BaseSpec;\r\n/"
  },
  {
    "path": "ironclad-apps/src/Checked/Nucleus/Devices/IoMain.ifc.beat",
    "chars": 13955,
    "preview": "//-private-import BaseSpec;\r\n//-private-import MemorySpec;\r\n//-private-import IoTypesSpec;\r\n//-private-import MachineSta"
  },
  {
    "path": "ironclad-apps/src/Checked/Nucleus/Devices/IoMain.imp.beat",
    "chars": 50327,
    "preview": "//-private-import BaseSpec;\r\n//-private-import MemorySpec;\r\n//-private-import IoTypesSpec;\r\n//-private-import MachineSta"
  },
  {
    "path": "ironclad-apps/src/Checked/Nucleus/Devices/PCI.ifc.beat",
    "chars": 9254,
    "preview": "//-private-import BaseSpec;\r\n//-private-import MemorySpec;\r\n//-private-import IoTypesSpec;\r\n//-private-import MachineSta"
  },
  {
    "path": "ironclad-apps/src/Checked/Nucleus/Devices/PCI.imp.beat",
    "chars": 28248,
    "preview": "//-private-import BaseSpec;\r\n//-private-import MemorySpec;\r\n//-private-import IoTypesSpec;\r\n//-private-import MachineSta"
  },
  {
    "path": "ironclad-apps/src/Checked/Nucleus/GC/BitVectorLemmasGc.ifc.beat",
    "chars": 8156,
    "preview": "//-private-import BaseSpec;\r\n//-private-import MemorySpec;\r\n//-<NuBuild AddBoogieAxiom BitVector_axioms />\r\n//-<NuBuild "
  },
  {
    "path": "ironclad-apps/src/Checked/Nucleus/GC/BitVectorLemmasGc.imp.beat",
    "chars": 2933,
    "preview": "//-private-import BaseSpec;\r\n//-private-import MemorySpec;\r\n//-<NuBuild AddBoogieAxiom BitVector_axioms />\r\n//-<NuBuild "
  },
  {
    "path": "ironclad-apps/src/Checked/Nucleus/GC/IntLemmasGc.ifc.beat",
    "chars": 7067,
    "preview": "//-private-import BaseSpec;\r\n//-private-import MemorySpec;\r\n//-private-import IntSpec;\r\n//-\r\n//- Copyright (c) Microsoft"
  },
  {
    "path": "ironclad-apps/src/Checked/Nucleus/GC/IntLemmasGc.imp.beat",
    "chars": 6496,
    "preview": "//-private-import BaseSpec;\r\n//-private-import MemorySpec;\r\n//-private-import IntSpec;\r\n//-private-import BitVectorLemma"
  },
  {
    "path": "ironclad-apps/src/Checked/Nucleus/GC/SimpleCollector.ifc.beat",
    "chars": 16910,
    "preview": "//-private-import BaseSpec;\r\n//-private-import MemorySpec;\r\n//-private-import IoTypesSpec;\r\n//-private-import MachineSta"
  },
  {
    "path": "ironclad-apps/src/Checked/Nucleus/GC/SimpleCollector.imp.beat",
    "chars": 41317,
    "preview": "//-private-import BaseSpec;\r\n//-private-import MemorySpec;\r\n//-private-import IoTypesSpec;\r\n//-private-import MachineSta"
  },
  {
    "path": "ironclad-apps/src/Checked/Nucleus/GC/SimpleCommon.ifc.beat",
    "chars": 10560,
    "preview": "//-private-import BaseSpec;\r\n//-private-import MemorySpec;\r\n//-private-import IoTypesSpec;\r\n//-private-import MachineSta"
  },
  {
    "path": "ironclad-apps/src/Checked/Nucleus/GC/SimpleCommon.imp.beat",
    "chars": 995,
    "preview": "//-private-import BaseSpec;\r\n//-private-import MemorySpec;\r\n//-private-import IoTypesSpec;\r\n//-private-import MachineSta"
  },
  {
    "path": "ironclad-apps/src/Checked/Nucleus/GC/SimpleGc.ifc.beat",
    "chars": 74,
    "preview": "//-\r\n//- Copyright (c) Microsoft Corporation.  All rights reserved.\r\n//-\r\n"
  },
  {
    "path": "ironclad-apps/src/Checked/Nucleus/GC/SimpleGcMemory.ifc.beat",
    "chars": 9310,
    "preview": "//-private-import BaseSpec;\r\n//-private-import MemorySpec;\r\n//-private-import IoTypesSpec;\r\n//-private-import MachineSta"
  },
  {
    "path": "ironclad-apps/src/Checked/Nucleus/GC/SimpleGcMemory.imp.beat",
    "chars": 960,
    "preview": "//-private-import BaseSpec;\r\n//-private-import MemorySpec;\r\n//-private-import IoTypesSpec;\r\n//-private-import MachineSta"
  },
  {
    "path": "ironclad-apps/src/Checked/Nucleus/Main/BitVectorLemmasMain.ifc.beat",
    "chars": 2049,
    "preview": "//-private-import BaseSpec;\r\n//-private-import MemorySpec;\r\n//-<NuBuild AddBoogieAxiom BitVector_axioms />\r\n//-<NuBuild "
  },
  {
    "path": "ironclad-apps/src/Checked/Nucleus/Main/BitVectorLemmasMain.imp.beat",
    "chars": 694,
    "preview": "//-private-import BaseSpec;\r\n//-private-import MemorySpec;\r\n//-<NuBuild AddBoogieAxiom BitVector_axioms />\r\n//-<NuBuild "
  },
  {
    "path": "ironclad-apps/src/Checked/Nucleus/Main/Cube.ifc.beat",
    "chars": 3971,
    "preview": "//-\r\n//- Copyright (c) Microsoft Corporation.  All rights reserved.\r\n//-\r\n\r\nmodule interface Cube\r\n{\r\n\r\ntype Tri = Tripl"
  },
  {
    "path": "ironclad-apps/src/Checked/Nucleus/Main/DafnyAssembly.ifc.beat",
    "chars": 31515,
    "preview": "//-private-import BaseSpec;\r\n//-private-import MemorySpec;\r\n//-private-import IoTypesSpec;\r\n//-private-import MachineSta"
  },
  {
    "path": "ironclad-apps/src/Checked/Nucleus/Main/DafnyAssembly.imp.beat",
    "chars": 17253,
    "preview": "//-private-import BaseSpec;\r\n//-private-import MemorySpec;\r\n//-private-import IoTypesSpec;\r\n//-private-import MachineSta"
  },
  {
    "path": "ironclad-apps/src/Checked/Nucleus/Main/Entry.imp.beat",
    "chars": 41750,
    "preview": "// Uh-oh: it looks like whether we need Symdiff in Main depends\r\n// on what app we're compiling! DafnyCCTest (nee Cube) "
  },
  {
    "path": "ironclad-apps/src/Checked/Nucleus/Main/IntLemmasMain.ifc.beat",
    "chars": 1266,
    "preview": "//-private-import BaseSpec;\r\n//-private-import MemorySpec;\r\n//-private-import IntSpec;\r\n//-private-import BitVectorLemma"
  },
  {
    "path": "ironclad-apps/src/Checked/Nucleus/Main/IntLemmasMain.imp.beat",
    "chars": 2899,
    "preview": "//-private-import BaseSpec;\r\n//-private-import MemorySpec;\r\n//-private-import IntSpec;\r\n//-private-import BitVectorLemma"
  },
  {
    "path": "ironclad-apps/src/Checked/Nucleus/Main/Main.ifc.beat",
    "chars": 10574,
    "preview": "//-\r\n//- Copyright (c) Microsoft Corporation.  All rights reserved.\r\n//-\r\n//-private-import BaseSpec;\r\n//-private-import"
  },
  {
    "path": "ironclad-apps/src/Checked/Nucleus/Main/axiom.whitelist",
    "chars": 10249,
    "preview": "axiom (forall f: int, x: int, y: int :: { v2_u.Je(v2_u.Efl_Cmp(f, x, y)) } v2_u.Je(v2_u.Efl_Cmp(f, x, y)) <==> x == y);\r"
  },
  {
    "path": "ironclad-apps/src/Checked/Nucleus/Main/dafny_FatNatX86_i.imp.beat",
    "chars": 101737,
    "preview": "    //-private-import BaseSpec;\r\n    //-private-import MemorySpec;\r\n    //-private-import IoTypesSpec;\r\n    //-private-i"
  },
  {
    "path": "ironclad-apps/src/Checked/Nucleus/Main/dafny_FatNatX86big_i.imp.beat",
    "chars": 83477,
    "preview": "    //-private-import BaseSpec;\r\n    //-private-import MemorySpec;\r\n    //-private-import IoTypesSpec;\r\n    //-private-i"
  },
  {
    "path": "ironclad-apps/src/Checked/Nucleus/Main/dafny_FleetNatMulLoopOpt_i.imp.beat",
    "chars": 26763,
    "preview": "//-private-import BaseSpec;\r\n//-private-import MemorySpec;\r\n//-private-import IoTypesSpec;\r\n//-private-import MachineSta"
  },
  {
    "path": "ironclad-apps/src/Checked/Nucleus/Main/dafny_FleetNatMulOpt_i.imp.beat",
    "chars": 54211,
    "preview": "    //-private-import BaseSpec;\r\n    //-private-import MemorySpec;\r\n    //-private-import IoTypesSpec;\r\n    //-private-i"
  },
  {
    "path": "ironclad-apps/src/Checked/Nucleus/Main/dafny_assembly_i.imp.beat",
    "chars": 6977,
    "preview": "//-<NuBuild BasmEnableSymdiff true />\r\n//-private-import BaseSpec;\r\n//-private-import MemorySpec;\r\n//-private-import IoT"
  },
  {
    "path": "ironclad-apps/src/Checked/Nucleus/Main/dafny_bit_vector_lemmas_i.imp.beat",
    "chars": 1801,
    "preview": "//-private-import BaseSpec;\r\n//-private-import MemorySpec;\r\n//-private-import IoTypesSpec;\r\n//-private-import MachineSta"
  },
  {
    "path": "ironclad-apps/src/Checked/Nucleus/Main/dafny_io_mem_i.imp.beat",
    "chars": 4489,
    "preview": "//-<Disabled-uBuild BasmEnableSymdiff true />\r\n//-private-import BaseSpec;\r\n//-private-import MemorySpec;\r\n//-private-im"
  },
  {
    "path": "ironclad-apps/src/Checked/Nucleus/Main/dafny_pci_i.imp.beat",
    "chars": 21731,
    "preview": "//-<NuBuild BasmEnableSymdiff true />\r\n//-private-import BaseSpec;\r\n//-private-import MemorySpec;\r\n//-private-import IoT"
  },
  {
    "path": "ironclad-apps/src/Checked/Nucleus/Main/dafny_sha256opt2_i.imp.beat",
    "chars": 191194,
    "preview": "    //-private-import BaseSpec;\r\n    //-private-import MemorySpec;\r\n    //-private-import IoTypesSpec;\r\n    //-private-i"
  },
  {
    "path": "ironclad-apps/src/Checked/Nucleus/Main/dafny_sha256opt_i.imp.basm",
    "chars": 70970,
    "preview": "//-private-import BaseSpec;\r\n//-private-import MemorySpec;\r\n//-private-import IoTypesSpec;\r\n//-private-import MachineSta"
  },
  {
    "path": "ironclad-apps/src/Checked/Nucleus/Main/mul_plan.txt",
    "chars": 1832,
    "preview": "\n\nMulOpt:\n  mhi, mlo := Mul64(aj, bv)\n  edx, eax\n\n  add1 := Add(mlo, lastcarry)\n  mhi := AddCarry(mhi,0)\n  newcj := AddC"
  },
  {
    "path": "ironclad-apps/src/Checked/Nucleus/Main/sha256opt2.plan",
    "chars": 4000,
    "preview": "\r\neax, ebx, ecx, edx, edi, esi, ebp\r\n\r\nNOTES/TODO:\r\n- For each variable that needs to be propagated, \r\n  I should write "
  },
  {
    "path": "ironclad-apps/src/Checked/Nucleus/Main/sha256opt2.plan2",
    "chars": 3268,
    "preview": "\r\nWe need to use 5 registers out of the following 7:\r\n  eax, ebx, ecx, edx, edi, esi, ebp\r\n  r1,  r2,  r3,  r4,  r5\r\n\r\nI"
  },
  {
    "path": "ironclad-apps/src/Clients/Benchmark/BenchSpec.py",
    "chars": 1324,
    "preview": "\r\nSUT_IP=\"157.54.148.142\"\r\n\r\n\r\n# Converted (manually) from BenchmarkList.i.dfy\r\nBenchmarkList = {\r\n\"Nothing\" : 0,\r\n\"Sha1"
  },
  {
    "path": "ironclad-apps/src/Clients/Benchmark/BenchmarkAnalyzer.py",
    "chars": 15337,
    "preview": "#!/usr/bin/python\r\n\r\nimport re\r\nfrom numpy import *\r\nfrom BenchSpec import BenchSpec\r\n\r\ndata = [\r\n#BenchSpec('RsaKeyGen'"
  },
  {
    "path": "ironclad-apps/src/Clients/Benchmark/BenchmarkDriver.py",
    "chars": 2454,
    "preview": "#!/usr/bin/python\r\n\r\nimport subprocess\r\nimport re\r\nfrom BenchSpec import *\r\n\r\nclass HelpfulRE:\r\n\tdef __init__(self, patt"
  },
  {
    "path": "ironclad-apps/src/Clients/Benchmark/BenchmarkRequestCmd/App.config",
    "chars": 178,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n    <startup> \n        <supportedRuntime version=\"v4.0\" sku=\".NET"
  },
  {
    "path": "ironclad-apps/src/Clients/Benchmark/BenchmarkRequestCmd/BenchmarkRequestCmd.csproj",
    "chars": 2884,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.micros"
  },
  {
    "path": "ironclad-apps/src/Clients/Benchmark/BenchmarkRequestCmd/Program.cs",
    "chars": 3636,
    "preview": "//--\r\n\r\n\r\n\r\n//--\r\nnamespace Ironclad.Benchmark\r\n{\r\n    using System;\r\n    using Ironclad.Benchmark.Communication;\r\n\r\n  "
  },
  {
    "path": "ironclad-apps/src/Clients/Benchmark/BenchmarkRequestCmd/Properties/AssemblyInfo.cs",
    "chars": 681,
    "preview": "//--\r\n\r\n\r\n\r\n//--\r\n\r\nusing System.Reflection;\r\nusing System.Runtime.CompilerServices;\r\nusing System.Runtime.InteropServi"
  },
  {
    "path": "ironclad-apps/src/Clients/Benchmark/BenchmarkRequestGui/App.config",
    "chars": 178,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n    <startup> \n        <supportedRuntime version=\"v4.0\" sku=\".NET"
  },
  {
    "path": "ironclad-apps/src/Clients/Benchmark/BenchmarkRequestGui/App.xaml",
    "chars": 320,
    "preview": "<Application x:Class=\"BenchmarkRequestGui.App\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/present"
  },
  {
    "path": "ironclad-apps/src/Clients/Benchmark/BenchmarkRequestGui/App.xaml.cs",
    "chars": 320,
    "preview": "namespace BenchmarkRequestGui\r\n{\r\n    using System;\r\n    using System.Collections.Generic;\r\n    using System.Configurat"
  },
  {
    "path": "ironclad-apps/src/Clients/Benchmark/BenchmarkRequestGui/BenchmarkRequestGui.csproj",
    "chars": 4473,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.micros"
  },
  {
    "path": "ironclad-apps/src/Clients/Benchmark/BenchmarkRequestGui/MainWindow.xaml",
    "chars": 282,
    "preview": "<Window x:Class=\"BenchmarkRequestGui.MainWindow\"\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentati"
  },
  {
    "path": "ironclad-apps/src/Clients/Benchmark/BenchmarkRequestGui/MainWindow.xaml.cs",
    "chars": 665,
    "preview": "namespace BenchmarkRequestGui\r\n{\r\n    using System;\r\n    using System.Collections.Generic;\r\n    using System.Linq;\r\n   "
  },
  {
    "path": "ironclad-apps/src/Clients/Benchmark/BenchmarkRequestGui/Properties/AssemblyInfo.cs",
    "chars": 816,
    "preview": "//--\r\n\r\n\r\n\r\n//--\r\n\r\nusing System.Reflection;\r\nusing System.Resources;\r\nusing System.Runtime.CompilerServices;\r\nusing Sy"
  },
  {
    "path": "ironclad-apps/src/Clients/Benchmark/BenchmarkRequestGui/Properties/Resources.Designer.cs",
    "chars": 2049,
    "preview": "//------------------------------------------------------------------------------\r\n\r\n\r\n\r\n//\r\n\r\n\r\n\r\n//-------------------"
  },
  {
    "path": "ironclad-apps/src/Clients/Benchmark/BenchmarkRequestGui/Properties/Resources.resx",
    "chars": 5494,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "ironclad-apps/src/Clients/Benchmark/BenchmarkRequestGui/Properties/Settings.Designer.cs",
    "chars": 874,
    "preview": "//------------------------------------------------------------------------------\r\n\r\n\r\n\r\n//\r\n\r\n\r\n\r\n//-------------------"
  },
  {
    "path": "ironclad-apps/src/Clients/Benchmark/BenchmarkRequestGui/Properties/Settings.settings",
    "chars": 193,
    "preview": "<?xml version='1.0' encoding='utf-8'?>\n<SettingsFile xmlns=\"uri:settings\" CurrentProfile=\"(Default)\">\n  <Profiles>\n    "
  },
  {
    "path": "ironclad-apps/src/Clients/Benchmark/Communication/BenchmarkList.cs",
    "chars": 948,
    "preview": "//--\r\n\r\n\r\n\r\n//--\r\nnamespace Ironclad.Benchmark.Communication\r\n{\r\n    using System;\r\n\r\n    /\r\n    /\r\n    /\r\n    /\r\n    /"
  },
  {
    "path": "ironclad-apps/src/Clients/Benchmark/Communication/Communication.csproj",
    "chars": 2645,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.micros"
  },
  {
    "path": "ironclad-apps/src/Clients/Benchmark/Communication/Connection.cs",
    "chars": 1353,
    "preview": "//--\r\n\r\n\r\n\r\n//--\r\nnamespace Ironclad.Benchmark.Communication\r\n{\r\n    using System;\r\n    using System.Net;\r\n    using Sy"
  },
  {
    "path": "ironclad-apps/src/Clients/Benchmark/Communication/Properties/AssemblyInfo.cs",
    "chars": 669,
    "preview": "//--\r\n\r\n\r\n\r\n//--\r\n\r\nusing System.Reflection;\r\nusing System.Runtime.CompilerServices;\r\nusing System.Runtime.InteropServi"
  },
  {
    "path": "ironclad-apps/src/Clients/Benchmark/Communication/Request.cs",
    "chars": 2269,
    "preview": "//--\r\n\r\n\r\n\r\n//--\r\nnamespace Ironclad.Benchmark.Communication\r\n{\r\n    using System;\r\n    using System.Net;\r\n    using Sy"
  },
  {
    "path": "ironclad-apps/src/Clients/Benchmark/Communication/Response.cs",
    "chars": 4673,
    "preview": "using System.Linq;\r\n\r\n//--\r\n\r\n\r\n\r\n//--\r\nnamespace Ironclad.Benchmark.Communication\r\n{\r\n    using System;\r\n    using Sys"
  },
  {
    "path": "ironclad-apps/src/Clients/Benchmark/TestEcho.py",
    "chars": 233,
    "preview": "#!/usr/bin/python\r\n\r\nimport socket\r\n\r\nfrom BenchSpec import *\r\n\r\nUDP_PORT = 7\r\nMESSAGE = \"Hello, ironclad!\"\r\n\r\nsock = so"
  },
  {
    "path": "ironclad-apps/src/Clients/Benchmark/notes",
    "chars": 559,
    "preview": "2014.04.25 values:\r\n\r\nSha256\r\n[  2.68974487e-05  -7.74454427e-03]\r\nSha1\r\n[  2.66306843e-05  -7.70144164e-03]\r\nByteSeqToW"
  },
  {
    "path": "ironclad-apps/src/Clients/Benchmark.sln",
    "chars": 2328,
    "preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 2013\nVisualStudioVersion = 12.0.30110.0\nMi"
  },
  {
    "path": "ironclad-apps/src/Clients/Clients.sln",
    "chars": 5232,
    "preview": "\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio 2012\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-"
  },
  {
    "path": "ironclad-apps/src/Clients/Common/Common.cs",
    "chars": 13507,
    "preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.IO;\r\nusing System.Linq;\r\nusin"
  },
  {
    "path": "ironclad-apps/src/Clients/Common/Common.csproj",
    "chars": 2662,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.micros"
  },
  {
    "path": "ironclad-apps/src/Clients/Common/CommonParams.cs",
    "chars": 4093,
    "preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;"
  },
  {
    "path": "ironclad-apps/src/Clients/Common/GetQuote.cs",
    "chars": 7705,
    "preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Security.Cryptography;\r\nusing System"
  },
  {
    "path": "ironclad-apps/src/Clients/Common/Profiler.cs",
    "chars": 3708,
    "preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Linq;\r\nusing System.Text;\r\nus"
  },
  {
    "path": "ironclad-apps/src/Clients/Common/Properties/AssemblyInfo.cs",
    "chars": 635,
    "preview": "using System.Reflection;\r\nusing System.Runtime.CompilerServices;\r\nusing System.Runtime.InteropServices;\r\n\r\n \r\n\r\n\r\n[asse"
  },
  {
    "path": "ironclad-apps/src/Clients/DiffPriv/App.config",
    "chars": 185,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\r\n<configuration>\r\n    <startup> \r\n        <supportedRuntime version=\"v4.0\" sku="
  },
  {
    "path": "ironclad-apps/src/Clients/DiffPriv/DiffPriv.csproj",
    "chars": 2936,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.micros"
  },
  {
    "path": "ironclad-apps/src/Clients/DiffPriv/DiffPrivRequests.cs",
    "chars": 4979,
    "preview": "using Common;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Security.Cryptography"
  },
  {
    "path": "ironclad-apps/src/Clients/DiffPriv/DiffPrivResponses.cs",
    "chars": 2644,
    "preview": "using Common;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Security.Cryptography"
  },
  {
    "path": "ironclad-apps/src/Clients/DiffPriv/Parameters.cs",
    "chars": 4545,
    "preview": "using Common;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing System.Tex"
  },
  {
    "path": "ironclad-apps/src/Clients/DiffPriv/Program.cs",
    "chars": 5002,
    "preview": "using Common;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Linq;\r\nusing S"
  },
  {
    "path": "ironclad-apps/src/Clients/DiffPriv/Properties/AssemblyInfo.cs",
    "chars": 639,
    "preview": "using System.Reflection;\r\nusing System.Runtime.CompilerServices;\r\nusing System.Runtime.InteropServices;\r\n\r\n \r\n\r\n\r\n[asse"
  },
  {
    "path": "ironclad-apps/src/Clients/DiffPriv/Rational.cs",
    "chars": 554,
    "preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;"
  },
  {
    "path": "ironclad-apps/src/Clients/DiffPrivSrv/App.config",
    "chars": 185,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\r\n<configuration>\r\n    <startup> \r\n        <supportedRuntime version=\"v4.0\" sku="
  },
  {
    "path": "ironclad-apps/src/Clients/DiffPrivSrv/BigRational.cs",
    "chars": 3595,
    "preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Numerics;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing"
  },
  {
    "path": "ironclad-apps/src/Clients/DiffPrivSrv/DiffPrivRequest.cs",
    "chars": 5533,
    "preview": "using Common;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Linq;\r\nusing Sy"
  },
  {
    "path": "ironclad-apps/src/Clients/DiffPrivSrv/DiffPrivResponse.cs",
    "chars": 1200,
    "preview": "using Common;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Th"
  },
  {
    "path": "ironclad-apps/src/Clients/DiffPrivSrv/DiffPrivSrv.csproj",
    "chars": 3031,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.micros"
  },
  {
    "path": "ironclad-apps/src/Clients/DiffPrivSrv/Parameters.cs",
    "chars": 2342,
    "preview": "using Common;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing System.Text"
  },
  {
    "path": "ironclad-apps/src/Clients/DiffPrivSrv/Program.cs",
    "chars": 911,
    "preview": "using Common;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Net;\r\nusing System.Ne"
  },
  {
    "path": "ironclad-apps/src/Clients/DiffPrivSrv/Properties/AssemblyInfo.cs",
    "chars": 645,
    "preview": "using System.Reflection;\r\nusing System.Runtime.CompilerServices;\r\nusing System.Runtime.InteropServices;\r\n\r\n \r\n\r\n\r\n[asse"
  },
  {
    "path": "ironclad-apps/src/Clients/DiffPrivSrv/StateMachine.cs",
    "chars": 22145,
    "preview": "using Common;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Numerics;\r\nusing Syst"
  },
  {
    "path": "ironclad-apps/src/Clients/DotNetSHABench/App.config",
    "chars": 185,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\r\n<configuration>\r\n    <startup> \r\n        <supportedRuntime version=\"v4.0\" sku="
  },
  {
    "path": "ironclad-apps/src/Clients/DotNetSHABench/DotNetSHABench.csproj",
    "chars": 2814,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.micros"
  },
  {
    "path": "ironclad-apps/src/Clients/DotNetSHABench/Parameters.cs",
    "chars": 3063,
    "preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Syste"
  },
  {
    "path": "ironclad-apps/src/Clients/DotNetSHABench/Program.cs",
    "chars": 5487,
    "preview": "using Common;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Linq;\r\nusing S"
  },
  {
    "path": "ironclad-apps/src/Clients/DotNetSHABench/Properties/AssemblyInfo.cs",
    "chars": 651,
    "preview": "using System.Reflection;\r\nusing System.Runtime.CompilerServices;\r\nusing System.Runtime.InteropServices;\r\n\r\n \r\n\r\n\r\n[asse"
  },
  {
    "path": "ironclad-apps/src/Clients/Notary/App.config",
    "chars": 185,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\r\n<configuration>\r\n    <startup> \r\n        <supportedRuntime version=\"v4.0\" sku="
  },
  {
    "path": "ironclad-apps/src/Clients/Notary/Notary.csproj",
    "chars": 2934,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.micros"
  },
  {
    "path": "ironclad-apps/src/Clients/Notary/NotaryRequests.cs",
    "chars": 723,
    "preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Linq;\r\nusing System.Security."
  },
  {
    "path": "ironclad-apps/src/Clients/Notary/NotaryResponses.cs",
    "chars": 2589,
    "preview": "using Common;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Linq;\r\nusing S"
  },
  {
    "path": "ironclad-apps/src/Clients/Notary/Parameters.cs",
    "chars": 2784,
    "preview": "using Common;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing System.Tex"
  },
  {
    "path": "ironclad-apps/src/Clients/Notary/Program.cs",
    "chars": 5118,
    "preview": "using Common;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Linq;\r\nusing S"
  },
  {
    "path": "ironclad-apps/src/Clients/Notary/Properties/AssemblyInfo.cs",
    "chars": 635,
    "preview": "using System.Reflection;\r\nusing System.Runtime.CompilerServices;\r\nusing System.Runtime.InteropServices;\r\n\r\n \r\n\r\n\r\n[asse"
  },
  {
    "path": "ironclad-apps/src/Clients/NotarySrv/App.config",
    "chars": 185,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\r\n<configuration>\r\n    <startup> \r\n        <supportedRuntime version=\"v4.0\" sku="
  },
  {
    "path": "ironclad-apps/src/Clients/NotarySrv/NotaryRequest.cs",
    "chars": 1859,
    "preview": "using Common;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Linq;\r\nusing Sy"
  },
  {
    "path": "ironclad-apps/src/Clients/NotarySrv/NotaryResponse.cs",
    "chars": 905,
    "preview": "using Common;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Th"
  },
  {
    "path": "ironclad-apps/src/Clients/NotarySrv/NotarySrv.csproj",
    "chars": 3063,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.micros"
  },
  {
    "path": "ironclad-apps/src/Clients/NotarySrv/Parameters.cs",
    "chars": 2338,
    "preview": "using Common;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing System.Text"
  },
  {
    "path": "ironclad-apps/src/Clients/NotarySrv/Program.cs",
    "chars": 909,
    "preview": "using Common;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Net;\r\nusing System.Ne"
  },
  {
    "path": "ironclad-apps/src/Clients/NotarySrv/Properties/AssemblyInfo.cs",
    "chars": 641,
    "preview": "using System.Reflection;\r\nusing System.Runtime.CompilerServices;\r\nusing System.Runtime.InteropServices;\r\n\r\n \r\n\r\n\r\n[asse"
  },
  {
    "path": "ironclad-apps/src/Clients/NotarySrv/StateMachine.cs",
    "chars": 1651,
    "preview": "using Common;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Numerics;\r\nusing Syst"
  },
  {
    "path": "ironclad-apps/src/Clients/PassHash/App.config",
    "chars": 185,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\r\n<configuration>\r\n    <startup> \r\n        <supportedRuntime version=\"v4.0\" sku="
  },
  {
    "path": "ironclad-apps/src/Clients/PassHash/Parameters.cs",
    "chars": 3246,
    "preview": "using Common;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing System.Tex"
  },
  {
    "path": "ironclad-apps/src/Clients/PassHash/PassHash.csproj",
    "chars": 2897,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.micros"
  },
  {
    "path": "ironclad-apps/src/Clients/PassHash/PassHashRequests.cs",
    "chars": 861,
    "preview": "using Common;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.T"
  },
  {
    "path": "ironclad-apps/src/Clients/PassHash/PassHashResponses.cs",
    "chars": 1118,
    "preview": "using Common;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.T"
  },
  {
    "path": "ironclad-apps/src/Clients/PassHash/Program.cs",
    "chars": 1434,
    "preview": "using Common;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Net;\r\nusing System.Ne"
  },
  {
    "path": "ironclad-apps/src/Clients/PassHash/Properties/AssemblyInfo.cs",
    "chars": 639,
    "preview": "using System.Reflection;\r\nusing System.Runtime.CompilerServices;\r\nusing System.Runtime.InteropServices;\r\n\r\n \r\n\r\n\r\n[asse"
  },
  {
    "path": "ironclad-apps/src/Clients/PassHashSrv/App.config",
    "chars": 185,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\r\n<configuration>\r\n    <startup> \r\n        <supportedRuntime version=\"v4.0\" sku="
  },
  {
    "path": "ironclad-apps/src/Clients/PassHashSrv/Parameters.cs",
    "chars": 2782,
    "preview": "using Common;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing System.Text"
  },
  {
    "path": "ironclad-apps/src/Clients/PassHashSrv/PassHashRequest.cs",
    "chars": 2135,
    "preview": "using Common;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Linq;\r\nusing Sy"
  },
  {
    "path": "ironclad-apps/src/Clients/PassHashSrv/PassHashResponse.cs",
    "chars": 769,
    "preview": "using Common;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Th"
  },
  {
    "path": "ironclad-apps/src/Clients/PassHashSrv/PassHashSrv.csproj",
    "chars": 2944,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.micros"
  },
  {
    "path": "ironclad-apps/src/Clients/PassHashSrv/Program.cs",
    "chars": 911,
    "preview": "using Common;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Net;\r\nusing System.Ne"
  },
  {
    "path": "ironclad-apps/src/Clients/PassHashSrv/Properties/AssemblyInfo.cs",
    "chars": 645,
    "preview": "using System.Reflection;\r\nusing System.Runtime.CompilerServices;\r\nusing System.Runtime.InteropServices;\r\n\r\n \r\n\r\n\r\n[asse"
  }
]

// ... and 1164 more files (download for full content)

About this extraction

This page contains the full source code of the Microsoft/Ironclad GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1364 files (33.5 MB), approximately 4.6M tokens, and a symbol index with 4280 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!