private void Read(FileReader reader)
        {
            if (reader.ReadString(4) != "SAHT")
            {
                throw new Exception("Wrong magic");
            }
            uint FileSize = reader.ReadUInt32();
            uint Offset   = reader.ReadUInt32();

            if (Offset != 0x10)  //EFE uses big endian. WT uses little.
            {
                Offset = 0x10;
                reader.SetByteOrder(true);
            }


            uint EntryCount = reader.ReadUInt32();

            Console.WriteLine($"FileSize {FileSize} Offset {Offset} EntryCount {EntryCount}");

            reader.SeekBegin(Offset);
            for (int i = 0; i < EntryCount; i++)
            {
                HashEntry entry = new HashEntry();
                entry.Read(reader);
                reader.Align(16);
                if (EntryCount == 4)
                {
                    Console.WriteLine($"{entry.Name} {entry.Hash} {EntryCount}");
                }

                HashEntries.Add(entry.Hash, entry.Name);
            }
        }
        private void Read(FileReader reader)
        {
            reader.ReadSignature(4, "SAHT");
            uint FileSize   = reader.ReadUInt32();
            uint Offset     = reader.ReadUInt32();
            uint EntryCount = reader.ReadUInt32();

            reader.Seek(Offset, System.IO.SeekOrigin.Begin);
            for (int i = 0; i < EntryCount; i++)
            {
                HashEntry entry = new HashEntry();
                entry.Read(reader);
                reader.Align(16);
                HashEntries.Add(entry);
            }

            ToTextFile();
        }