// Annotated Flatbuffer Binary
//
// Schema file: annotated_binary.fbs
// Binary file: annotated_binary.bin

header:
  +0x0000 | 44 00 00 00             | UOffset32  | 0x00000044 (68) Loc: 0x0044   | offset to root table `AnnotatedBinary.Foo`
  +0x0004 | 41 4E 4E 4F             | char[4]    | ANNO                          | File Identifier

padding:
  +0x0008 | 00 00                   | uint8_t[2] | ..                            | padding

vtable (AnnotatedBinary.Foo):
  +0x000A | 3A 00                   | uint16_t   | 0x003A (58)                   | size of this vtable
  +0x000C | 68 00                   | uint16_t   | 0x0068 (104)                  | size of referring table
  +0x000E | 0C 00                   | VOffset16  | 0x000C (12)                   | offset to field `counter` (id: 0)
  +0x0010 | 07 00                   | VOffset16  | 0x0007 (7)                    | offset to field `healthy` (id: 1)
  +0x0012 | 00 00                   | VOffset16  | 0x0000 (0)                    | offset to field `level` (id: 2) <defaults to 99> (Long)
  +0x0014 | 08 00                   | VOffset16  | 0x0008 (8)                    | offset to field `meal` (id: 3)
  +0x0016 | 10 00                   | VOffset16  | 0x0010 (16)                   | offset to field `bar` (id: 4)
  +0x0018 | 14 00                   | VOffset16  | 0x0014 (20)                   | offset to field `home` (id: 5)
  +0x001A | 30 00                   | VOffset16  | 0x0030 (48)                   | offset to field `name` (id: 6)
  +0x001C | 34 00                   | VOffset16  | 0x0034 (52)                   | offset to field `bars` (id: 7)
  +0x001E | 09 00                   | VOffset16  | 0x0009 (9)                    | offset to field `bar_baz_type` (id: 8)
  +0x0020 | 38 00                   | VOffset16  | 0x0038 (56)                   | offset to field `bar_baz` (id: 9)
  +0x0022 | 3C 00                   | VOffset16  | 0x003C (60)                   | offset to field `accounts` (id: 10)
  +0x0024 | 40 00                   | VOffset16  | 0x0040 (64)                   | offset to field `bob` (id: 11)
  +0x0026 | 44 00                   | VOffset16  | 0x0044 (68)                   | offset to field `alice` (id: 12)
  +0x0028 | 00 00                   | VOffset16  | 0x0000 (0)                    | offset to field `maybe_i32` (id: 13) <defaults to 0> (Int)
  +0x002A | 00 00                   | VOffset16  | 0x0000 (0)                    | offset to field `default_i32` (id: 14) <defaults to 42> (Int)
  +0x002C | 48 00                   | VOffset16  | 0x0048 (72)                   | offset to field `just_i32` (id: 15)
  +0x002E | 4C 00                   | VOffset16  | 0x004C (76)                   | offset to field `names` (id: 16)
  +0x0030 | 50 00                   | VOffset16  | 0x0050 (80)                   | offset to field `points_of_interest` (id: 17)
  +0x0032 | 54 00                   | VOffset16  | 0x0054 (84)                   | offset to field `foobars_type` (id: 18)
  +0x0034 | 58 00                   | VOffset16  | 0x0058 (88)                   | offset to field `foobars` (id: 19)
  +0x0036 | 0A 00                   | VOffset16  | 0x000A (10)                   | offset to field `measurement_type` (id: 20)
  +0x0038 | 5C 00                   | VOffset16  | 0x005C (92)                   | offset to field `measurement` (id: 21)
  +0x003A | 0B 00                   | VOffset16  | 0x000B (11)                   | offset to field `anything_type` (id: 22)
  +0x003C | 60 00                   | VOffset16  | 0x0060 (96)                   | offset to field `anything` (id: 23)
  +0x003E | 00 00                   | VOffset16  | 0x0000 (0)                    | offset to field `temperature` (id: 24) <defaults to 98.600000> (Float)
  +0x0040 | 00 00                   | VOffset16  | 0x0000 (0)                    | offset to field `teetotaler` (id: 25) <null> (Obj)
  +0x0042 | 64 00                   | VOffset16  | 0x0064 (100)                  | offset to field `charlie` (id: 26)

root_table (AnnotatedBinary.Foo):
  +0x0044 | 3A 00 00 00             | SOffset32  | 0x0000003A (58) Loc: 0x000A   | offset to vtable
  +0x0048 | 00 00 00                | uint8_t[3] | ...                           | padding
  +0x004B | 01                      | uint8_t    | 0x01 (1)                      | table field `healthy` (Bool)
  +0x004C | 02                      | uint8_t    | 0x02 (2)                      | table field `meal` (Byte)
  +0x004D | 02                      | UType8     | 0x02 (2)                      | table field `bar_baz_type` (UType)
  +0x004E | 01                      | UType8     | 0x01 (1)                      | table field `measurement_type` (UType)
  +0x004F | 01                      | UType8     | 0x01 (1)                      | table field `anything_type` (UType)
  +0x0050 | D2 04 00 00             | uint32_t   | 0x000004D2 (1234)             | table field `counter` (Int)
  +0x0054 | 28 02 00 00             | UOffset32  | 0x00000228 (552) Loc: 0x027C  | offset to field `bar` (table)
  +0x0058 | 01 00 00 00             | uint32_t   | 0x00000001 (1)                | struct field `home.floors` of 'AnnotatedBinary.Building' (Int)
  +0x005C | 02 00 00 00             | uint32_t   | 0x00000002 (2)                | struct field `home.doors` of 'AnnotatedBinary.Building' (Int)
  +0x0060 | 0C 00 00 00             | uint32_t   | 0x0000000C (12)               | struct field `home.windows` of 'AnnotatedBinary.Building' (Int)
  +0x0064 | 0A 00 00 00             | uint32_t   | 0x0000000A (10)               | array field `home.dimensions.values`[0] of 'AnnotatedBinary.Dimension' (Int)
  +0x0068 | 0C 00 00 00             | uint32_t   | 0x0000000C (12)               | array field `home.dimensions.values`[1] of 'AnnotatedBinary.Dimension' (Int)
  +0x006C | 14 00 00 00             | uint32_t   | 0x00000014 (20)               | array field `home.dimensions.values`[2] of 'AnnotatedBinary.Dimension' (Int)
  +0x0070 | 01                      | uint8_t    | 0x01 (1)                      | struct field `home.dimensions.tolerances.width` of 'AnnotatedBinary.Tolerance' (UByte)
  +0x0071 | 02                      | uint8_t    | 0x02 (2)                      | struct field `home.dimensions.tolerances.width` of 'AnnotatedBinary.Tolerance' (UByte)
  +0x0072 | 03                      | uint8_t    | 0x03 (3)                      | struct field `home.dimensions.tolerances.width` of 'AnnotatedBinary.Tolerance' (UByte)
  +0x0073 | 00                      | uint8_t[1] | .                             | padding
  +0x0074 | C8 01 00 00             | UOffset32  | 0x000001C8 (456) Loc: 0x023C  | offset to field `name` (string)
  +0x0078 | 5C 01 00 00             | UOffset32  | 0x0000015C (348) Loc: 0x01D4  | offset to field `bars` (vector)
  +0x007C | 50 01 00 00             | UOffset32  | 0x00000150 (336) Loc: 0x01CC  | offset to field `bar_baz` (union of type `Baz`)
  +0x0080 | 34 01 00 00             | UOffset32  | 0x00000134 (308) Loc: 0x01B4  | offset to field `accounts` (vector)
  +0x0084 | 24 01 00 00             | UOffset32  | 0x00000124 (292) Loc: 0x01A8  | offset to field `bob` (string)
  +0x0088 | 14 01 00 00             | UOffset32  | 0x00000114 (276) Loc: 0x019C  | offset to field `alice` (string)
  +0x008C | 0D 00 00 00             | uint32_t   | 0x0000000D (13)               | table field `just_i32` (Int)
  +0x0090 | DC 00 00 00             | UOffset32  | 0x000000DC (220) Loc: 0x016C  | offset to field `names` (vector)
  +0x0094 | A0 00 00 00             | UOffset32  | 0x000000A0 (160) Loc: 0x0134  | offset to field `points_of_interest` (vector)
  +0x0098 | 94 00 00 00             | UOffset32  | 0x00000094 (148) Loc: 0x012C  | offset to field `foobars_type` (vector)
  +0x009C | 38 00 00 00             | UOffset32  | 0x00000038 (56) Loc: 0x00D4   | offset to field `foobars` (vector)
  +0x00A0 | 33 00 00 00             | UOffset32  | 0x00000033 (51) Loc: 0x00D3   | offset to field `measurement` (union of type `Tolerance`)
  +0x00A4 | 1C 00 00 00             | UOffset32  | 0x0000001C (28) Loc: 0x00C0   | offset to field `anything` (union of type `Bar`)
  +0x00A8 | 04 00 00 00             | UOffset32  | 0x00000004 (4) Loc: 0x00AC    | offset to field `charlie` (string)

string (AnnotatedBinary.Foo.charlie):
  +0x00AC | 05 00 00 00             | uint32_t   | 0x00000005 (5)                | length of string
  +0x00B0 | 61 6C 69 63 65          | char[5]    | alice                         | string literal
  +0x00B5 | 00                      | char       | 0x00 (0)                      | string terminator

padding:
  +0x00B6 | 00 00                   | uint8_t[2] | ..                            | padding

vtable (AnnotatedBinary.Bar):
  +0x00B8 | 08 00                   | uint16_t   | 0x0008 (8)                    | size of this vtable
  +0x00BA | 13 00                   | uint16_t   | 0x0013 (19)                   | size of referring table
  +0x00BC | 08 00                   | VOffset16  | 0x0008 (8)                    | offset to field `a` (id: 0)
  +0x00BE | 04 00                   | VOffset16  | 0x0004 (4)                    | offset to field `b` (id: 1)

table (AnnotatedBinary.Bar):
  +0x00C0 | 08 00 00 00             | SOffset32  | 0x00000008 (8) Loc: 0x00B8    | offset to vtable
  +0x00C4 | 00 80 23 44             | float      | 0x44238000 (654)              | table field `b` (Float)
  +0x00C8 | 00 00 00 00 00 10 74 40 | double     | 0x4074100000000000 (321)      | table field `a` (Double)
  +0x00D0 | 00 00 00                | uint8_t[3] | ...                           | padding

union (AnnotatedBinary.Tolerance.measurement):
  +0x00D3 | 05                      | uint8_t    | 0x05 (5)                      | struct field `measurement.width` of 'AnnotatedBinary.Tolerance' (UByte)

vector (AnnotatedBinary.Foo.foobars):
  +0x00D4 | 03 00 00 00             | uint32_t   | 0x00000003 (3)                | length of vector (# items)
  +0x00D8 | 34 00 00 00             | UOffset32  | 0x00000034 (52) Loc: 0x010C   | offset to union[0] (`Bar`)
  +0x00DC | 2C 00 00 00             | UOffset32  | 0x0000002C (44) Loc: 0x0108   | offset to union[1] (`Baz`)
  +0x00E0 | 04 00 00 00             | UOffset32  | 0x00000004 (4) Loc: 0x00E4    | offset to union[2] (`Bar`)

table (AnnotatedBinary.Bar):
  +0x00E4 | D2 FE FF FF             | SOffset32  | 0xFFFFFED2 (-302) Loc: 0x0212 | offset to vtable
  +0x00E8 | 00 80 23 44             | float      | 0x44238000 (654)              | table field `b` (Float)
  +0x00EC | 10 00 00 00             | UOffset32  | 0x00000010 (16) Loc: 0x00FC   | offset to field `c` (table)
  +0x00F0 | 00 00 00 00 00 D8 8E 40 | double     | 0x408ED80000000000 (987)      | table field `a` (Double)
  +0x00F8 | 00 00 00 00             | uint8_t[4] | ....                          | padding

table (AnnotatedBinary.Baz):
  +0x00FC | 6A FE FF FF             | SOffset32  | 0xFFFFFE6A (-406) Loc: 0x0292 | offset to vtable
  +0x0100 | 00 00 00                | uint8_t[3] | ...                           | padding
  +0x0103 | 03                      | uint8_t    | 0x03 (3)                      | table field `meal` (Byte)

vtable (AnnotatedBinary.Baz):
  +0x0104 | 04 00                   | uint16_t   | 0x0004 (4)                    | size of this vtable
  +0x0106 | 04 00                   | uint16_t   | 0x0004 (4)                    | size of referring table

table (AnnotatedBinary.Baz):
  +0x0108 | 04 00 00 00             | SOffset32  | 0x00000004 (4) Loc: 0x0104    | offset to vtable

table (AnnotatedBinary.Bar):
  +0x010C | FA FE FF FF             | SOffset32  | 0xFFFFFEFA (-262) Loc: 0x0212 | offset to vtable
  +0x0110 | 00 00 E4 43             | float      | 0x43E40000 (456)              | table field `b` (Float)
  +0x0114 | 10 00 00 00             | UOffset32  | 0x00000010 (16) Loc: 0x0124   | offset to field `c` (table)
  +0x0118 | 00 00 00 00 00 C0 5E 40 | double     | 0x405EC00000000000 (123)      | table field `a` (Double)
  +0x0120 | 00 00 00 00             | uint8_t[4] | ....                          | padding

table (AnnotatedBinary.Baz):
  +0x0124 | 92 FE FF FF             | SOffset32  | 0xFFFFFE92 (-366) Loc: 0x0292 | offset to vtable
  +0x0128 | 00 00 00                | uint8_t[3] | ...                           | padding
  +0x012B | 01                      | uint8_t    | 0x01 (1)                      | table field `meal` (Byte)

vector (AnnotatedBinary.Foo.foobars_type):
  +0x012C | 03 00 00 00             | uint32_t   | 0x00000003 (3)                | length of vector (# items)
  +0x0130 | 01                      | UType8     | 0x01 (1)                      | value[0]
  +0x0131 | 02                      | UType8     | 0x02 (2)                      | value[1]
  +0x0132 | 01                      | UType8     | 0x01 (1)                      | value[2]

vector (AnnotatedBinary.Foo.points_of_interest):
  +0x0134 | 03 00 00 00             | uint32_t   | 0x00000003 (3)                | length of vector (# items)
  +0x0138 | 33 33 33 33 33 A3 45 40 | double     | 0x4045A33333333333 (43.275)   | struct field `[0].latitude` of 'AnnotatedBinary.Location' (Double)
  +0x0140 | 7E 57 04 FF 5B 87 53 C0 | double     | 0xC053875BFF04577E (-78.115)  | struct field `[0].longitude` of 'AnnotatedBinary.Location' (Double)
  +0x0148 | 8D F0 F6 20 04 B6 42 40 | double     | 0x4042B60420F6F08D (37.422)   | struct field `[1].latitude` of 'AnnotatedBinary.Location' (Double)
  +0x0150 | 9F 77 63 41 61 85 5E C0 | double     | 0xC05E85614163779F (-122.084) | struct field `[1].longitude` of 'AnnotatedBinary.Location' (Double)
  +0x0158 | 8F 35 23 83 DC 35 4B C0 | double     | 0xC04B35DC8323358F (-54.4208) | struct field `[2].latitude` of 'AnnotatedBinary.Location' (Double)
  +0x0160 | F6 97 DD 93 87 C5 0A 40 | double     | 0x400AC58793DD97F6 (3.34645)  | struct field `[2].longitude` of 'AnnotatedBinary.Location' (Double)

padding:
  +0x0168 | 00 00 00 00             | uint8_t[4] | ....                          | padding

vector (AnnotatedBinary.Foo.names):
  +0x016C | 03 00 00 00             | uint32_t   | 0x00000003 (3)                | length of vector (# items)
  +0x0170 | 20 00 00 00             | UOffset32  | 0x00000020 (32) Loc: 0x0190   | offset to string[0]
  +0x0174 | 14 00 00 00             | UOffset32  | 0x00000014 (20) Loc: 0x0188   | offset to string[1]
  +0x0178 | 04 00 00 00             | UOffset32  | 0x00000004 (4) Loc: 0x017C    | offset to string[2]

string (AnnotatedBinary.Foo.names):
  +0x017C | 07 00 00 00             | uint32_t   | 0x00000007 (7)                | length of string
  +0x0180 | 63 68 61 72 6C 69 65    | char[7]    | charlie                       | string literal
  +0x0187 | 00                      | char       | 0x00 (0)                      | string terminator

string (AnnotatedBinary.Foo.names):
  +0x0188 | 03 00 00 00             | uint32_t   | 0x00000003 (3)                | length of string
  +0x018C | 62 6F 62                | char[3]    | bob                           | string literal
  +0x018F | 00                      | char       | 0x00 (0)                      | string terminator

string (AnnotatedBinary.Foo.names):
  +0x0190 | 05 00 00 00             | uint32_t   | 0x00000005 (5)                | length of string
  +0x0194 | 61 6C 69 63 65          | char[5]    | alice                         | string literal
  +0x0199 | 00                      | char       | 0x00 (0)                      | string terminator

padding:
  +0x019A | 00 00                   | uint8_t[2] | ..                            | padding

string (AnnotatedBinary.Foo.alice):
  +0x019C | 07 00 00 00             | uint32_t   | 0x00000007 (7)                | length of string
  +0x01A0 | 63 68 61 72 6C 69 65    | char[7]    | charlie                       | string literal
  +0x01A7 | 00                      | char       | 0x00 (0)                      | string terminator

string (AnnotatedBinary.Foo.bob):
  +0x01A8 | 07 00 00 00             | uint32_t   | 0x00000007 (7)                | length of string
  +0x01AC | 63 68 61 72 6C 69 65    | char[7]    | charlie                       | string literal
  +0x01B3 | 00                      | char       | 0x00 (0)                      | string terminator

vector (AnnotatedBinary.Foo.accounts):
  +0x01B4 | 09 00 00 00             | uint32_t   | 0x00000009 (9)                | length of vector (# items)
  +0x01B8 | 09 00                   | uint16_t   | 0x0009 (9)                    | value[0]
  +0x01BA | 08 00                   | uint16_t   | 0x0008 (8)                    | value[1]
  +0x01BC | 07 00                   | uint16_t   | 0x0007 (7)                    | value[2]
  +0x01BE | 01 00                   | uint16_t   | 0x0001 (1)                    | value[3]
  +0x01C0 | 02 00                   | uint16_t   | 0x0002 (2)                    | value[4]
  +0x01C2 | 03 00                   | uint16_t   | 0x0003 (3)                    | value[5]
  +0x01C4 | 06 00                   | uint16_t   | 0x0006 (6)                    | value[6]
  +0x01C6 | 05 00                   | uint16_t   | 0x0005 (5)                    | value[7]
  +0x01C8 | 04 00                   | uint16_t   | 0x0004 (4)                    | value[8]

padding:
  +0x01CA | 00 00                   | uint8_t[2] | ..                            | padding

table (AnnotatedBinary.Baz):
  +0x01CC | 3A FF FF FF             | SOffset32  | 0xFFFFFF3A (-198) Loc: 0x0292 | offset to vtable
  +0x01D0 | 00 00 00                | uint8_t[3] | ...                           | padding
  +0x01D3 | 03                      | uint8_t    | 0x03 (3)                      | table field `meal` (Byte)

vector (AnnotatedBinary.Foo.bars):
  +0x01D4 | 02 00 00 00             | uint32_t   | 0x00000002 (2)                | length of vector (# items)
  +0x01D8 | 44 00 00 00             | UOffset32  | 0x00000044 (68) Loc: 0x021C   | offset to table[0]
  +0x01DC | 10 00 00 00             | UOffset32  | 0x00000010 (16) Loc: 0x01EC   | offset to table[1]

padding:
  +0x01E0 | 00 00                   | uint8_t[2] | ..                            | padding

vtable (AnnotatedBinary.Bar):
  +0x01E2 | 0A 00                   | uint16_t   | 0x000A (10)                   | size of this vtable
  +0x01E4 | 1A 00                   | uint16_t   | 0x001A (26)                   | size of referring table
  +0x01E6 | 0C 00                   | VOffset16  | 0x000C (12)                   | offset to field `a` (id: 0)
  +0x01E8 | 04 00                   | VOffset16  | 0x0004 (4)                    | offset to field `b` (id: 1)
  +0x01EA | 08 00                   | VOffset16  | 0x0008 (8)                    | offset to field `c` (id: 2)

table (AnnotatedBinary.Bar):
  +0x01EC | 0A 00 00 00             | SOffset32  | 0x0000000A (10) Loc: 0x01E2   | offset to vtable
  +0x01F0 | 00 80 23 44             | float      | 0x44238000 (654)              | table field `b` (Float)
  +0x01F4 | 18 00 00 00             | UOffset32  | 0x00000018 (24) Loc: 0x020C   | offset to field `c` (table)
  +0x01F8 | 00 00 00 00 00 D8 8E 40 | double     | 0x408ED80000000000 (987)      | table field `a` (Double)
  +0x0200 | 00 00 00 00 00 00       | uint8_t[6] | ......                        | padding

vtable (AnnotatedBinary.Baz):
  +0x0206 | 06 00                   | uint16_t   | 0x0006 (6)                    | size of this vtable
  +0x0208 | 06 00                   | uint16_t   | 0x0006 (6)                    | size of referring table
  +0x020A | 05 00                   | VOffset16  | 0x0005 (5)                    | offset to field `meal` (id: 0)

table (AnnotatedBinary.Baz):
  +0x020C | 06 00 00 00             | SOffset32  | 0x00000006 (6) Loc: 0x0206    | offset to vtable
  +0x0210 | 00                      | uint8_t[1] | .                             | padding
  +0x0211 | 03                      | uint8_t    | 0x03 (3)                      | table field `meal` (Byte)

vtable (AnnotatedBinary.Bar):
  +0x0212 | 0A 00                   | uint16_t   | 0x000A (10)                   | size of this vtable
  +0x0214 | 18 00                   | uint16_t   | 0x0018 (24)                   | size of referring table
  +0x0216 | 0C 00                   | VOffset16  | 0x000C (12)                   | offset to field `a` (id: 0)
  +0x0218 | 04 00                   | VOffset16  | 0x0004 (4)                    | offset to field `b` (id: 1)
  +0x021A | 08 00                   | VOffset16  | 0x0008 (8)                    | offset to field `c` (id: 2)

table (AnnotatedBinary.Bar):
  +0x021C | 0A 00 00 00             | SOffset32  | 0x0000000A (10) Loc: 0x0212   | offset to vtable
  +0x0220 | 00 00 E4 43             | float      | 0x43E40000 (456)              | table field `b` (Float)
  +0x0224 | 10 00 00 00             | UOffset32  | 0x00000010 (16) Loc: 0x0234   | offset to field `c` (table)
  +0x0228 | 00 00 00 00 00 C0 5E 40 | double     | 0x405EC00000000000 (123)      | table field `a` (Double)
  +0x0230 | 00 00 00 00             | uint8_t[4] | ....                          | padding

table (AnnotatedBinary.Baz):
  +0x0234 | A2 FF FF FF             | SOffset32  | 0xFFFFFFA2 (-94) Loc: 0x0292  | offset to vtable
  +0x0238 | 00 00 00                | uint8_t[3] | ...                           | padding
  +0x023B | 01                      | uint8_t    | 0x01 (1)                      | table field `meal` (Byte)

string (AnnotatedBinary.Foo.name):
  +0x023C | 2F 00 00 00             | uint32_t   | 0x0000002F (47)               | length of string
  +0x0240 | 54 68 69 73 20 69 73 20 | char[47]   | This is                       | string literal
  +0x0248 | 61 20 6C 6F 6E 67 20 73 |            | a long s
  +0x0250 | 74 72 69 6E 67 20 74 6F |            | tring to
  +0x0258 | 20 73 68 6F 77 20 68 6F |            |  show ho
  +0x0260 | 77 20 69 74 20 62 72 65 |            | w it bre
  +0x0268 | 61 6B 73 20 75 70 2E    |            | aks up.
  +0x026F | 00                      | char       | 0x00 (0)                      | string terminator

padding:
  +0x0270 | 00 00                   | uint8_t[2] | ..                            | padding

vtable (AnnotatedBinary.Bar):
  +0x0272 | 0A 00                   | uint16_t   | 0x000A (10)                   | size of this vtable
  +0x0274 | 16 00                   | uint16_t   | 0x0016 (22)                   | size of referring table
  +0x0276 | 0C 00                   | VOffset16  | 0x000C (12)                   | offset to field `a` (id: 0)
  +0x0278 | 04 00                   | VOffset16  | 0x0004 (4)                    | offset to field `b` (id: 1)
  +0x027A | 08 00                   | VOffset16  | 0x0008 (8)                    | offset to field `c` (id: 2)

table (AnnotatedBinary.Bar):
  +0x027C | 0A 00 00 00             | SOffset32  | 0x0000000A (10) Loc: 0x0272   | offset to vtable
  +0x0280 | 65 20 71 49             | float      | 0x49712065 (987654)           | table field `b` (Float)
  +0x0284 | 14 00 00 00             | UOffset32  | 0x00000014 (20) Loc: 0x0298   | offset to field `c` (table)
  +0x0288 | C9 76 BE 9F 0C 24 FE 40 | double     | 0x40FE240C9FBE76C9 (123457)   | table field `a` (Double)
  +0x0290 | 00 00                   | uint8_t[2] | ..                            | padding

vtable (AnnotatedBinary.Baz):
  +0x0292 | 06 00                   | uint16_t   | 0x0006 (6)                    | size of this vtable
  +0x0294 | 08 00                   | uint16_t   | 0x0008 (8)                    | size of referring table
  +0x0296 | 07 00                   | VOffset16  | 0x0007 (7)                    | offset to field `meal` (id: 0)

table (AnnotatedBinary.Baz):
  +0x0298 | 06 00 00 00             | SOffset32  | 0x00000006 (6) Loc: 0x0292    | offset to vtable
  +0x029C | 00 00 00                | uint8_t[3] | ...                           | padding
  +0x029F | 01                      | uint8_t    | 0x01 (1)                      | table field `meal` (Byte)
