[llvm] [readtapi] Setup simple stubify support (PR #76075)
Cyndy Ishida via llvm-commits
llvm-commits at lists.llvm.org
Wed Dec 20 12:56:03 PST 2023
https://github.com/cyndyishida updated https://github.com/llvm/llvm-project/pull/76075
>From 76ea1d0ab1ebd4e54fe43c270df79ec1a1c93c29 Mon Sep 17 00:00:00 2001
From: Cyndy Ishida <cyndy_ishida at apple.com>
Date: Tue, 19 Dec 2023 09:21:07 -0800
Subject: [PATCH 1/3] [readtapi] Setup simple stubify support
Stubify broadly takes either tbd files or binary dylibs and turns them into tbd files. In future patches, stubify will also allow additional information to be embedded into the final tbd output too.
---
.../llvm-readtapi/Inputs/flat_namespace.yaml | 328 ++
.../Inputs/mixed-swift-objc.yaml | 4011 +++++++++++++++++
.../test/tools/llvm-readtapi/Inputs/objc.yaml | 692 +++
.../llvm-readtapi/Inputs/thread_local.yaml | 228 +
.../tools/llvm-readtapi/Inputs/universal.yaml | 372 ++
.../compare-incorrect-format.test | 7 -
.../llvm-readtapi/compare-tbd-dylib.test | 41 +
.../tools/llvm-readtapi/stubify-invalid.test | 7 +
llvm/test/tools/llvm-readtapi/stubify.test | 158 +
llvm/test/tools/llvm-readtapi/write.test | 103 +-
llvm/tools/llvm-readtapi/TapiOpts.td | 6 +
llvm/tools/llvm-readtapi/llvm-readtapi.cpp | 100 +-
12 files changed, 5968 insertions(+), 85 deletions(-)
create mode 100644 llvm/test/tools/llvm-readtapi/Inputs/flat_namespace.yaml
create mode 100644 llvm/test/tools/llvm-readtapi/Inputs/mixed-swift-objc.yaml
create mode 100644 llvm/test/tools/llvm-readtapi/Inputs/objc.yaml
create mode 100644 llvm/test/tools/llvm-readtapi/Inputs/thread_local.yaml
create mode 100644 llvm/test/tools/llvm-readtapi/Inputs/universal.yaml
delete mode 100644 llvm/test/tools/llvm-readtapi/compare-incorrect-format.test
create mode 100644 llvm/test/tools/llvm-readtapi/compare-tbd-dylib.test
create mode 100644 llvm/test/tools/llvm-readtapi/stubify-invalid.test
create mode 100644 llvm/test/tools/llvm-readtapi/stubify.test
diff --git a/llvm/test/tools/llvm-readtapi/Inputs/flat_namespace.yaml b/llvm/test/tools/llvm-readtapi/Inputs/flat_namespace.yaml
new file mode 100644
index 00000000000000..1cd97f09bac706
--- /dev/null
+++ b/llvm/test/tools/llvm-readtapi/Inputs/flat_namespace.yaml
@@ -0,0 +1,328 @@
+--- !mach-o
+FileHeader:
+ magic: 0xFEEDFACF
+ cputype: 0x01000007
+ cpusubtype: 0x00000003
+ filetype: 0x00000006
+ ncmds: 13
+ sizeofcmds: 1128
+ flags: 0x00100004
+ reserved: 0x00000000
+LoadCommands:
+ - cmd: LC_SEGMENT_64
+ cmdsize: 392
+ segname: __TEXT
+ vmaddr: 0
+ vmsize: 4096
+ fileoff: 0
+ filesize: 4096
+ maxprot: 7
+ initprot: 5
+ nsects: 4
+ flags: 0
+ Sections:
+ - sectname: __text
+ segname: __TEXT
+ addr: 0x0000000000000F60
+ size: 44
+ offset: 0x00000F60
+ align: 4
+ reloff: 0x00000000
+ nreloc: 0
+ flags: 0x80000400
+ reserved1: 0x00000000
+ reserved2: 0x00000000
+ reserved3: 0x00000000
+ content: 554889E54883EC10897DFCBF7A000000E817000000488B0D940000008B39037DFC8945F889F84883C4105DC3
+ - sectname: __stubs
+ segname: __TEXT
+ addr: 0x0000000000000F8C
+ size: 6
+ offset: 0x00000F8C
+ align: 1
+ reloff: 0x00000000
+ nreloc: 0
+ flags: 0x80000408
+ reserved1: 0x00000000
+ reserved2: 0x00000006
+ reserved3: 0x00000000
+ content: FF2586000000
+ - sectname: __stub_helper
+ segname: __TEXT
+ addr: 0x0000000000000F94
+ size: 26
+ offset: 0x00000F94
+ align: 2
+ reloff: 0x00000000
+ nreloc: 0
+ flags: 0x80000400
+ reserved1: 0x00000000
+ reserved2: 0x00000000
+ reserved3: 0x00000000
+ content: 4C8D1D6D0000004153FF255D000000906800000000E9E6FFFFFF
+ - sectname: __unwind_info
+ segname: __TEXT
+ addr: 0x0000000000000FB0
+ size: 72
+ offset: 0x00000FB0
+ align: 2
+ reloff: 0x00000000
+ nreloc: 0
+ flags: 0x00000000
+ reserved1: 0x00000000
+ reserved2: 0x00000000
+ reserved3: 0x00000000
+ content: 010000001C000000000000001C000000000000001C00000002000000600F000034000000340000008D0F00000000000034000000030000000C000100100001000000000000000001
+ - cmd: LC_SEGMENT_64
+ cmdsize: 312
+ segname: __DATA
+ vmaddr: 4096
+ vmsize: 4096
+ fileoff: 4096
+ filesize: 4096
+ maxprot: 7
+ initprot: 3
+ nsects: 3
+ flags: 0
+ Sections:
+ - sectname: __nl_symbol_ptr
+ segname: __DATA
+ addr: 0x0000000000001000
+ size: 16
+ offset: 0x00001000
+ align: 3
+ reloff: 0x00000000
+ nreloc: 0
+ flags: 0x00000006
+ reserved1: 0x00000001
+ reserved2: 0x00000000
+ reserved3: 0x00000000
+ content: '00000000000000000000000000000000'
+ - sectname: __got
+ segname: __DATA
+ addr: 0x0000000000001010
+ size: 8
+ offset: 0x00001010
+ align: 3
+ reloff: 0x00000000
+ nreloc: 0
+ flags: 0x00000006
+ reserved1: 0x00000003
+ reserved2: 0x00000000
+ reserved3: 0x00000000
+ content: '0000000000000000'
+ - sectname: __la_symbol_ptr
+ segname: __DATA
+ addr: 0x0000000000001018
+ size: 8
+ offset: 0x00001018
+ align: 3
+ reloff: 0x00000000
+ nreloc: 0
+ flags: 0x00000007
+ reserved1: 0x00000004
+ reserved2: 0x00000000
+ reserved3: 0x00000000
+ content: A40F000000000000
+ - cmd: LC_SEGMENT_64
+ cmdsize: 72
+ segname: __LINKEDIT
+ vmaddr: 8192
+ vmsize: 4096
+ fileoff: 8192
+ filesize: 220
+ maxprot: 7
+ initprot: 1
+ nsects: 0
+ flags: 0
+ - cmd: LC_ID_DYLIB
+ cmdsize: 40
+ dylib:
+ name: 24
+ timestamp: 1
+ current_version: 0
+ compatibility_version: 0
+ Content: foo.dylib
+ ZeroPadBytes: 7
+ - cmd: LC_DYLD_INFO_ONLY
+ cmdsize: 48
+ rebase_off: 8192
+ rebase_size: 8
+ bind_off: 8200
+ bind_size: 48
+ weak_bind_off: 0
+ weak_bind_size: 0
+ lazy_bind_off: 8248
+ lazy_bind_size: 16
+ export_off: 8264
+ export_size: 16
+ - cmd: LC_SYMTAB
+ cmdsize: 24
+ symoff: 8288
+ nsyms: 4
+ stroff: 8372
+ strsize: 40
+ - cmd: LC_DYSYMTAB
+ cmdsize: 80
+ ilocalsym: 0
+ nlocalsym: 0
+ iextdefsym: 0
+ nextdefsym: 1
+ iundefsym: 1
+ nundefsym: 3
+ tocoff: 0
+ ntoc: 0
+ modtaboff: 0
+ nmodtab: 0
+ extrefsymoff: 0
+ nextrefsyms: 0
+ indirectsymoff: 8352
+ nindirectsyms: 5
+ extreloff: 0
+ nextrel: 0
+ locreloff: 0
+ nlocrel: 0
+ - cmd: LC_UUID
+ cmdsize: 24
+ uuid: 24AE602E-6B89-37A8-9E38-39A436D25110
+ - cmd: LC_BUILD_VERSION
+ cmdsize: 32
+ platform: 1
+ minos: 658944
+ sdk: 658944
+ ntools: 1
+ Tools:
+ - tool: 3
+ version: 29491968
+ - cmd: LC_SOURCE_VERSION
+ cmdsize: 16
+ version: 0
+ - cmd: LC_LOAD_DYLIB
+ cmdsize: 56
+ dylib:
+ name: 24
+ timestamp: 2
+ current_version: 82115073
+ compatibility_version: 65536
+ Content: '/usr/lib/libSystem.B.dylib'
+ ZeroPadBytes: 6
+ - cmd: LC_FUNCTION_STARTS
+ cmdsize: 16
+ dataoff: 8280
+ datasize: 8
+ - cmd: LC_DATA_IN_CODE
+ cmdsize: 16
+ dataoff: 8288
+ datasize: 0
+LinkEditData:
+ RebaseOpcodes:
+ - Opcode: REBASE_OPCODE_SET_TYPE_IMM
+ Imm: 1
+ - Opcode: REBASE_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB
+ Imm: 1
+ ExtraData:
+ - 0x0000000000000018
+ - Opcode: REBASE_OPCODE_DO_REBASE_IMM_TIMES
+ Imm: 1
+ - Opcode: REBASE_OPCODE_DONE
+ Imm: 0
+ BindOpcodes:
+ - Opcode: BIND_OPCODE_SET_DYLIB_SPECIAL_IMM
+ Imm: 14
+ Symbol: ''
+ - Opcode: BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM
+ Imm: 0
+ Symbol: _bar
+ - Opcode: BIND_OPCODE_SET_TYPE_IMM
+ Imm: 1
+ Symbol: ''
+ - Opcode: BIND_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB
+ Imm: 1
+ ULEBExtraData:
+ - 0x0000000000000010
+ Symbol: ''
+ - Opcode: BIND_OPCODE_DO_BIND
+ Imm: 0
+ Symbol: ''
+ - Opcode: BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM
+ Imm: 0
+ Symbol: dyld_stub_binder
+ - Opcode: BIND_OPCODE_ADD_ADDR_ULEB
+ Imm: 0
+ ULEBExtraData:
+ - 0xFFFFFFFFFFFFFFE8
+ Symbol: ''
+ - Opcode: BIND_OPCODE_DO_BIND
+ Imm: 0
+ Symbol: ''
+ - Opcode: BIND_OPCODE_DONE
+ Imm: 0
+ Symbol: ''
+ LazyBindOpcodes:
+ - Opcode: BIND_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB
+ Imm: 1
+ ULEBExtraData:
+ - 0x0000000000000018
+ Symbol: ''
+ - Opcode: BIND_OPCODE_SET_DYLIB_SPECIAL_IMM
+ Imm: 14
+ Symbol: ''
+ - Opcode: BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM
+ Imm: 0
+ Symbol: _putchar
+ - Opcode: BIND_OPCODE_DO_BIND
+ Imm: 0
+ Symbol: ''
+ - Opcode: BIND_OPCODE_DONE
+ Imm: 0
+ Symbol: ''
+ - Opcode: BIND_OPCODE_DONE
+ Imm: 0
+ Symbol: ''
+ ExportTrie:
+ TerminalSize: 0
+ NodeOffset: 0
+ Name: ''
+ Flags: 0x0000000000000000
+ Address: 0x0000000000000000
+ Other: 0x0000000000000000
+ ImportName: ''
+ Children:
+ - TerminalSize: 3
+ NodeOffset: 8
+ Name: _foo
+ Flags: 0x0000000000000000
+ Address: 0x0000000000000F60
+ Other: 0x0000000000000000
+ ImportName: ''
+ NameList:
+ - n_strx: 2
+ n_type: 0x0F
+ n_sect: 1
+ n_desc: 0
+ n_value: 3936
+ - n_strx: 7
+ n_type: 0x01
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 12
+ n_type: 0x01
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 21
+ n_type: 0x01
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ StringTable:
+ - ' '
+ - _foo
+ - _bar
+ - _putchar
+ - dyld_stub_binder
+ - ''
+ - ''
+...
+
diff --git a/llvm/test/tools/llvm-readtapi/Inputs/mixed-swift-objc.yaml b/llvm/test/tools/llvm-readtapi/Inputs/mixed-swift-objc.yaml
new file mode 100644
index 00000000000000..48ceea1ed80136
--- /dev/null
+++ b/llvm/test/tools/llvm-readtapi/Inputs/mixed-swift-objc.yaml
@@ -0,0 +1,4011 @@
+--- !mach-o
+FileHeader:
+ magic: 0xFEEDFACF
+ cputype: 0x1000007
+ cpusubtype: 0x3
+ filetype: 0x6
+ ncmds: 27
+ sizeofcmds: 3200
+ flags: 0x110085
+ reserved: 0x0
+LoadCommands:
+ - cmd: LC_SEGMENT_64
+ cmdsize: 1032
+ segname: __TEXT
+ vmaddr: 0
+ vmsize: 16384
+ fileoff: 0
+ filesize: 16384
+ maxprot: 5
+ initprot: 5
+ nsects: 12
+ flags: 0
+ Sections:
+ - sectname: __text
+ segname: __TEXT
+ addr: 0x1B30
+ size: 6790
+ offset: 0x1B30
+ align: 4
+ reloff: 0x0
+ nreloc: 0
+ flags: 0x80000400
+ reserved1: 0x0
+ reserved2: 0x0
+ reserved3: 0x0
+ content: 554889E531C05DC30F1F840000000000554889E5B8010000005DC30F1F440000554889E531C024010FB6C05DC3909090554889E541555031C089C7E8600500004989C5E8E80200004883C408415D5DC3554889E541554883EC28488945E8488B3F48897DD8E80C1B0000488B45D8488945F04C8B6DF04C896DE0498B4500488B4058FFD0488B7DE04889C1488B45E8488908E8D91A00004883C428415D5DC390554889E541554883EC38488975C0488B3F48897DC8E8BC1A0000488B75C0488B45C8488945F0488B45F0488945D0488B3E48897DD8E89C1A0000488B7DD0488B45D8488945E84C8B6DE84C896DE0498B4500488B4060FFD0488B7DE0E86F1A00004883C438415D5DC30F1F8000000000554889E54883EC304C89EF4883C71031C089C1488D75E8488975D8BA20000000E81D1A0000498B7D1048897DE0E8341A0000488B7DD8E8131A0000488B45E04883C4305DC366662E0F1F840000000000554889E54883EC3048897DE0E8051A00004C89EF4883C71031C089C1488D75E8488975D8BA21000000E8C4190000488B45E0498B7D1049894510E8D1190000488B7DD8E8B6190000488B7DE0E8BF1900004883C4305DC3660F1F840000000000554889E54883EC104C896DF04889FE488B7DF04883C71048897DF831C089C1BA21000000E869190000488B55F8488D050C0000004883C4105DC3660F1F440000554889E54883EC1048897DF84088F0A801750B488B7DF8E842190000EB09488B7DF8E8371900004883C4105DC30F1F00554889E54883EC104C896DF048C745F8000000004C896DF8498B7D10E81F190000488B45F04883C4105DC30F1F440000554889E54883EC1048C745F8000000004C896DF8E8B7FFFFFF4889C7BE18000000BA07000000E8CD1800004883C4105DC36666666666662E0F1F840000000000554889E54155504C89EFBE18000000BA07000000E8931800004989C5E80F0000004883C408415D5DC30F1F8000000000554889E541554883EC184C896DE848C745F0000000004C896DF031C089C7E8AD0200004989C5E8350000004889C1488B45E8488948104883C418415D5DC36690554889E5488D3D95320000E88A17000031C989CA5DC390909090909090909090554889E54155504C89EFBE10000000BA07000000E8031800004989C5E80F0000004883C408415D5DC30F1F8000000000554889E54C89E848C745F800000000488945F85DC366662E0F1F840000000000554889E548C745F8000000004C896DF85DC366666666662E0F1F840000000000554889E54C89E848C745F800000000488945F85DC366662E0F1F840000000000554889E54883EC1048C745F8000000004C896DF8E8C7FFFFFF4889C7BE10000000BA07000000E86D1700004883C4105DC36666666666662E0F1F840000000000554889E54155504C89EFBE10000000BA07000000E8331700004989C5E80F0000004883C408415D5DC30F1F8000000000554889E54C89E848C745F800000000488945F85DC366662E0F1F840000000000554889E548C745F8000000004C896DF85DC366666666662E0F1F840000000000554889E54C89E848C745F800000000488945F85DC366662E0F1F840000000000554889E54883EC1048C745F8000000004C896DF8E8C7FFFFFF4889C7BE10000000BA07000000E89D1600004883C4105DC36666666666662E0F1F840000000000554889E54155504C89EFBE10000000BA07000000E8631600004989C5E80F0000004883C408415D5DC30F1F8000000000554889E54C89E848C745F800000000488945F85DC366662E0F1F840000000000554889E548C745F8000000004C896DF85DC366666666662E0F1F840000000000554889E54C89E848C745F800000000488945F85DC366662E0F1F840000000000554889E54883EC1048C745F8000000004C896DF8E8C7FFFFFF4889C7BE10000000BA07000000E8CD1500004883C4105DC36666666666662E0F1F840000000000554889E5488D3DBD300000E8FA14000031C989CA5DC3662E0F1F840000000000554889E5488D3D3D310000E8DA14000031C989CA5DC3662E0F1F840000000000554889E5488D3DBD310000E8BA14000031C989CA5DC390909090909090909090554889E54157415641554154534883EC484C894DA04C8945A848894DB0488955B84989F68B4F2089C8C1E81883E00148C1E004488D14074881C2C00000004889559848897DC84801F8C1E91783E1084889CA48894D904C8BBC01C0000000488D8680000000488945D031C0488945C04531ED66666666662E0F1F8400000000004D89FC4983E4037427498D4424FF4883F8010F861101000041F6C5017424E9B9000000666666662E0F1F8400000000004C89F7E8A80B000041F6C5010F859A000000488B4DB848C7411800000000488B45A048894120488B45B048894108488B45A848890131C031D231C931DBF0490FC74E50EB2166662E0F1F8400000000004881E1FFF3FFFF418856214889C3F0490FC74E507432F7C20002000075224889D1F7C20004000075D74881E1FFF7FFFFEBD966666666662E0F1F8400000000004C89F7E808050000488B7DD0E88F1200004C89F7E8B708000041B50131C031D231C931DBF0490FC74E500FB6DA483B5DC07610488B7DC84889DEE87106000048895DC04C89F84883E0FC498946104C89F8488B4D90488B5598F04C0FB1340A74614989C7E9D7FEFFFF488B7DC8E85E0A000041F6C501746D31C031D231C931DBF0490FC74E50EB130F1F8400000000004889C3F0490FC74E507439F7C20002000075294889D14881C900080000F7C20004000074DB4881E1FFFBFFFF41885621EBCEE8A90700004531E4EB194C89F7E8AC0200004C89F7E8C4070000488B7DD0E86B1100004C89E04883C4485B415C415D415E415F5DC3660F1F840000000000480FBAED3C554156488D6C24084883EC0841574154534883EC184989CF4989D44889F34989FDE835070000488D0DBE000000488948384C8978404889DF4889C64C89FA4D89E74C89E14D89F04D89E9E86CFDFFFF4883F801741C4883F80274714883C4185B415C415F4883C4105D480FBAF53CC208008B432089C1C1E91883E10148C1E1044801D9C1E81783E008488D3C01488B9408C8000000488B42F80FB67050488D0C3E4881C1D800000048F7D64821CE4C89EFFF50104C89F84883C4185B415C415F4883C4105D480FBAF53CFFE0488D35FE13000031FF31C0E86F0600006666666666662E0F1F840000000000480FBAED3C554156488D6C2408504C89F04D8B364883C4105D480FBAF53CFF60086666666666662E0F1F840000000000480FBAED3C554156488D6C24084883EC0841574154534883EC184989CF4989D44889F34989FDE815060000488D0DDE000000488948384C8978404889DF4889C64C89FA4D89E74C89E14D89F04D89E9E84CFCFFFF4883F80274524883F8010F85880000008B432089C1C1E91883E10148C1E1044801D9C1E81783E008488D3C01488B9408C8000000488B42F80FB67050488D0C3E4881C1D800000048F7D64821CE4C89EFFF50104531EDEB288B432089C1C1E91883E10148C1E1044801D9C1E81783E0084C8BAC08D00000004C89EFE8301100004C89F84883C4185B415C415F4883C4105D480FBAF53CFFE04883C4185B415C415F4883C4105D480FBAF53CC2080066666666662E0F1F840000000000480FBAED3C554156488D6C240850498B06498B4E084D8B6E184989C64883C4105D480FBAF53CFFE10F1F840000000000554889E54983F921B8200000004C0F42C85DFF64240890909090909090909090554889E54157415641554154534883EC284989FF31C031D231C931DBF0480FC74F504989C54989D631F6488945C0488955C84C8D65C041F7C6000200007430904889F3666666662E0F1F8400000000004C89FF4C89E6E8550300004C8B75C841F7C60002000075E84C8B6DC04889DE4885F6740C4C896E18EB41660F1F440000BF20000000E8420F00004889C348C70001000000488D780848897DB831F6E8BD0B000048C74310C00000004C896B18488B7DB8E8C80B00004889DE488D5E104981CE00020000488B45C0488B55C84C89F1F0490FC74F5074204989C54989D6488945C0488955C841F7C6000200000F854CFFFFFFE976FFFFFF488B45C84889C14881C90008000048894DC8A900040000740F4881E1FFFBFFFF48894DC8418847214989F6488B5DC0498B4750498B5758F0490FC74F5075F8488D3D692E0000E83C0B0000498D5E084889DFE8400B0000498B064883F80175124889DFE80F0B00004C89F7E85D0E0000EB0648FFC8498906488D3D302E00004883C4285B415C415D415E415F5DE9050B00000F1F440000554889E54157415641554154534883EC284989FF31C031D231C931DBF0480FC74F504989C54989D631F6488945C0488955C84C8D65C041F7C6000200007430904889F3666666662E0F1F8400000000004C89FF4C89E6E8C50100004C8B75C841F7C60002000075E84C8B6DC04889DE4885F6740C4C896E18EB41660F1F440000BF20000000E8B20D00004889C348C70001000000488D780848897DB831F6E82D0A000048C74310C00000004C896B18488B7DB8E8380A00004889DE488D5E104981CE00020000488B45C0488B55C84C89F1F0490FC74F5074204989C54989D6488945C0488955C841F7C6000200000F854CFFFFFFE976FFFFFF488B45C84889C14881E1FFF7FFFF48894DC8A90004000074124889C14881E1FFF3FFFF48894DC8418847214989F6488B5DC0498B4750498B5758666666662E0F1F840000000000F0490FC74F5075F8488D3DC92C0000E89C090000498D5E084889DFE8A0090000498B064883F80175124889DFE86F0900004C89F7E8BD0C0000EB0648FFC8498906488D3D902C00004883C4285B415C415D415E415F5DE9650900000F1F440000554889E54156534889F34989FE48833D5B2C0000FF7518488B054A2C00004885C074284C89F74889DE5B415E5DFFE0488D3D3A2C0000488D352B2C0000488D150C000000E8650C0000EBCCE8580C0000554889E553504889FB488D35F60E000048C7C7FEFFFFFFE8480C00004889034883C4085B5DC3662E0F1F840000000000554889E54157415641554154534883EC184989F64989FF4C8D25DA2B000048897DD0EB466666662E0F1F84000000000048FFC8488B4DC84889014D89EC4C8B7DD04C89EFE89708000031C031D231C931DBF0490FC74F5049890649895608F7C2000200000F84A10000004C89E7E85E08000031C031D231C931DBF0490FC74F5049890649895608F7C20002000074624889C34885C0745A4989DF488D43F0488945C848FF43F04C89E7E8320800004883C3F84889DFE8160800004889DFE81E0800004D89E54C89E7E803080000498B47F04883F8010F8555FFFFFF4889DFE8DD070000488B7DC8E82A0B0000E949FFFFFF488D3D002B00004883C4185B415C415D415E415F5DE9D50700004883C4185B415C415D415E415F5DC3909090909090554889E5E8FF0A000090909090909090554889E5BF670000005DE9370B000090554889E55350BF67000000E8260B00004889C3BF6700000031F6E8770B00004889D84883C4085B5DC30F1F8000000000554889E553504889FBBF68000000E8F30A0000488D78184889DE4883C4085B5DE91B01000066662E0F1F840000000000554889E54157415653504889FBBF68000000E8BF0A00004989C6488D3D3F2A0000488D35A800000031D2E82B0B0000803D322A00000075404D8B7E1848833D342A0000FF753D488B05232A00004885C074094C89FFFFD084C0740B498B7E18E8080B0000EB04498B46184889432841C646180041C64620004883C4085B415E415F5DC3488D3DEE290000488D35DF290000488D1538010000E8F1090000EBA790554889E5488D3DB5290000488D351E00000031D2E8A10A00000FB605A82900005DC366666666662E0F1F840000000000554889E54883EC20488D7DE8E8A109000048837DE80C0F94C048837DF0000F99C10F9EC220C120D1880D6A2900004883C4205DC36666662E0F1F840000000000554889E54157415653504989F64889FB488D3D39290000488D35A2FFFFFF31D2E8250A0000803D2C29000000740B4883C4085B415E415F5DC34D8B7E2848833D23290000FF7557488B05122900004885C074094C89FFFFD084C0740B498B7E28E8F7090000EB04498B462849C74628FFFFFFFF807B0800741C488D48014883F90272AB4889C74883C4085B415E415F5DE9FB080000C6430801488903EB90488D3DC3280000488D35B4280000488D150D000000E8C6080000EB8D660F1F440000554889E553504889FB488D356A0B000048C7C7FEFFFFFFE8A80800004889034883C4085B5DC390909090909090909090554889E553504889FB48833D77280000FF751E488B05662800004885C0740B4889DF4883C4085B5DFFE04883C4085B5DC3488D3D50280000488D3541280000488D155A000000E843080000EBC60F1F00554889E553504889FB48833D37280000FF751E488B05262800004885C0740B4889DF4883C4085B5DFFE04883C4085B5DC3488D3D10280000488D3501280000488D153A000000E8F3070000EBC60F1F00554889E553504889FB488D35BD0A000048C7C7FEFFFFFFE8D80700004889034883C4085B5DC3662E0F1F840000000000554889E553504889FB488D359C0A000048C7C7FEFFFFFFE8A80700004889034883C4085B5DC390909090909090909090554889E5535031F6E8B707000085C075074883C4085B5DC389C389C7E81F000000488D35630A0000488D157D0A000031FF4889C14189D831C0E842FCFFFF6690FFCF83FF22771D554889E5488D054200000048630CB84801C15DFFE1488D05E40C0000C3488D05FE0C0000C3488D05DA0C0000C3488D05DA0C0000C3488D05E00C0000C3488D05B50C0000C3488D05C90C0000C3C8FFFFFFD0FFFFFFD0FFFFFFD0FFFFFFD0FFFFFFD0FFFFFFD0FFFFFFD0FFFFFFD0FFFFFFD0FFFFFFD8FFFFFFE0FFFFFFD0FFFFFFD0FFFFFFD0FFFFFFE8FFFFFFD0FFFFFFD0FFFFFFD0FFFFFFD0FFFFFFD0FFFFFFF0FFFFFFD0FFFFFFD0FFFFFFD0FFFFFFD0FFFFFFD0FFFFFFD0FFFFFFD0FFFFFFD0FFFFFFD0FFFFFFD0FFFFFFD0FFFFFFD0FFFFFFF8FFFFFF554889E55350E89306000085C075074883C4085B5DC389C389C7E801FFFFFF488D3545090000488D158609000031FF4889C14189D831C0E824FBFFFF0F1F4000554889E55350E85F06000085C075074883C4085B5DC389C389C7E8C1FEFFFF488D3505090000488D156709000031FF4889C14189D831C0E8E4FAFFFF0F1F4000554889E55350E80D06000085C075074883C4085B5DC389C389C7E881FEFFFF488D35C5080000488D154709000031FF4889C14189D831C0E8A4FAFFFF0F1F4000554889E55350E8E505000085C075074883C4085B5DC389C389C7E841FEFFFF488D3585080000488D152A09000031FF4889C14189D831C0E864FAFFFF0F1F4000554889E541574156534883EC184189F74889FB488D7DD8E8C405000085C07539410FB6F7488D7DD8E8B905000085C07542488D75D84889DFE88505000085C07559488D7DD8E89005000085C075654883C4185B415E415F5DC34189C689C7E8BDFDFFFF488D3501080000488D15CC080000EB184189C689C7E8A3FDFFFF488D35E7070000488D15D008000031FF4889C14589F031C0E8C6F9FFFF89C389C7E87DFDFFFF488D35C1070000488D15D1080000EB1789C389C7E864FDFFFF488D35A8070000488D15DA08000031FF4889C14189D831C0E887F9FFFF0F1F8000000000554889E55350E8D104000085C075074883C4085B5DC389C389C7E821FDFFFF488D3565070000488D15B808000031FF4889C14189D831C0E844F9FFFF0F1F4000554889E55350E89D04000085C075074883C4085B5DC389C389C7E8E1FCFFFF488D3525070000488D159608000031FF4889C14189D831C0E804F9FFFF0F1F4000554889E55350E86904000085C075074883C4085B5DC389C389C7E8A1FCFFFF488D35E5060000488D157108000031FF4889C14189D831C0E8C4F8FFFF0F1F4000554889E55350E82304000089C3A9EFFFFFFF750C85DB0F94C04883C4085B5DC389DFE859FCFFFF488D359D060000488D154608000031FF4889C14189D831C0E87CF8FFFF6666662E0F1F840000000000554889E5C707000000005DC30F1F4000554889E55DC3662E0F1F840000000000554889E55DE96C030000660F1F440000554889E55DE968030000660F1F440000554889E55DE952030000660F1F440000554889E5535031F6E8A503000085C075074883C4085B5DC389C389C7E8BFFBFFFF488D3503060000488D15CA07000031FF4889C14189D831C0E8E2F7FFFF6690554889E55350E86103000085C075074883C4085B5DC389C389C7E881FBFFFF488D35C5050000488D15B207000031FF4889C14189D831C0E8A4F7FFFF0F1F4000554889E55350E82D03000085C075074883C4085B5DC389C389C7E841FBFFFF488D3585050000488D159207000031FF4889C14189D831C0E864F7FFFF0F1F4000554889E55350E8F302000089C3A9EFFFFFFF750C85DB0F94C04883C4085B5DC389DFE8F9FAFFFF488D353D050000488D156907000031FF4889C14189D831C0E81CF7FFFF6666662E0F1F840000000000554889E55350E8B502000085C075074883C4085B5DC389C389C7E8B1FAFFFF488D35F5040000488D154307000031FF4889C14189D831C0E8D4F6FFFF0F1F4000554889E55350E86902000089C3A9EFFFFFFF750C85DB0F94C04883C4085B5DC389DFE869FAFFFF488D35AD040000488D151A07000031FF4889C14189D831C0E88CF6FFFF6666662E0F1F840000000000554889E55350E81F02000085C075074883C4085B5DC389C389C7E821FAFFFF488D3565040000488D15F406000031FF4889C14189D831C0E844F6FFFF0F1F4000554889E55350E8DF01000085C075074883C4085B5DC389C389C7E8E1F9FFFF488D3525040000488D15B406000031FF4889C14189D831C0E804F6FFFF90909090554889E553504889FB48833D17210000FF751E488B05062100004885C0740B4889DF4883C4085B5DFFE04883C4085B5DC3488D3DF0200000488D35E1200000488D155A000000E8C3000000EBC60F1F00554889E553504889FB48833DD7200000FF751E488B05C62000004885C0740B4889DF4883C4085B5DFFE04883C4085B5DC3488D3DB0200000488D35A1200000488D153A000000E873000000EBC60F1F00554889E553504889FB488D354306000048C7C7FEFFFFFFE8580000004889034883C4085B5DC3662E0F1F840000000000554889E553504889FB488D353606000048C7C7FEFFFFFFE8280000004889034883C4085B5DC3
+ - sectname: __stubs
+ segname: __TEXT
+ addr: 0x35B6
+ size: 252
+ offset: 0x35B6
+ align: 1
+ reloff: 0x0
+ nreloc: 0
+ flags: 0x80000408
+ reserved1: 0x0
+ reserved2: 0x6
+ reserved3: 0x0
+ content: FF254C0A0000FF254E0A0000FF25500A0000FF25520A0000FF25540A0000FF25560A0000FF25580A0000FF255A0A0000FF255C0A0000FF255E0A0000FF25600A0000FF25620A0000FF25640A0000FF25660A0000FF25680A0000FF256A0A0000FF256C0A0000FF256E0A0000FF25700A0000FF25720A0000FF25740A0000FF25760A0000FF25780A0000FF257A0A0000FF257C0A0000FF257E0A0000FF25800A0000FF25820A0000FF25840A0000FF25860A0000FF25880A0000FF258A0A0000FF258C0A0000FF258E0A0000FF25900A0000FF25920A0000FF25940A0000FF25960A0000FF25980A0000FF259A0A0000FF259C0A0000FF259E0A0000
+ - sectname: __const
+ segname: __TEXT
+ addr: 0x36C0
+ size: 190
+ offset: 0x36C0
+ align: 4
+ reloff: 0x0
+ nreloc: 0
+ flags: 0x0
+ reserved1: 0x0
+ reserved2: 0x0
+ reserved3: 0x0
+ content: 4028232950524F4752414D3A53756767657374696F6E734B6974202050524F4A4543543A53756767657374696F6E734B69742D310A000000000000000000F03F100000000000000053756767657374696F6E734B697400000000000000000000547261696C53756767657374696F6E7300000300000000000000000000000000417661696C61626C655365727669636573000000000000000000000000000000536572766963655265717565737465720053657276696365526174657200
+ - sectname: __cstring
+ segname: __TEXT
+ addr: 0x3780
+ size: 1144
+ offset: 0x3780
+ align: 4
+ reloff: 0x0
+ nreloc: 0
+ flags: 0x2
+ reserved1: 0x0
+ reserved2: 0x0
+ reserved3: 0x0
+ content: 5F547443313453756767657374696F6E734B69743136547261696C53756767657374696F6E7300616374697665536572766963657300000000000000000000005F5474433137417661696C61626C6553657276696365733137417661696C61626C6553657276696365730000000000005F5474433137417661696C61626C655365727669636573313653657276696365526571756573746572000000000000005F5474433137417661696C61626C655365727669636573313253657276696365526174657200667574757265207265706F7274656420616E206572726F722C2062757420776169742063616E6E6F74207468726F770073776966745F7461736B5F657363616C617465005F5A3139766F75636865725F6E656564735F61646F70745039766F75636865725F73005F5F7473616E5F61637175697265005F5F7473616E5F72656C656173650027257327206661696C65642077697468206572726F722027257327282564290A00707468726561645F636F6E645F696E69742826636F6E646974696F6E2C206E756C6C7074722900707468726561645F636F6E645F64657374726F792826636F6E646974696F6E2900707468726561645F636F6E645F7369676E616C2826636F6E646974696F6E2900707468726561645F636F6E645F62726F6164636173742826636F6E646974696F6E2900707468726561645F636F6E645F776169742826636F6E646974696F6E2C20266D757465782900707468726561645F6D75746578617474725F696E69742826617474722900707468726561645F6D75746578617474725F736574747970652826617474722C206B696E642900707468726561645F6D757465785F696E697428266D757465782C2026617474722900707468726561645F6D75746578617474725F64657374726F792826617474722900707468726561645F6D757465785F64657374726F7928266D757465782900707468726561645F6D757465785F6C6F636B28266D757465782900707468726561645F6D757465785F756E6C6F636B28266D757465782900707468726561645F6D757465785F7472796C6F636B28266D757465782900707468726561645F72776C6F636B5F696E6974282672776C6F636B2C206E756C6C7074722900707468726561645F72776C6F636B5F64657374726F79282672776C6F636B2900707468726561645F72776C6F636B5F72646C6F636B282672776C6F636B2900707468726561645F72776C6F636B5F74727972646C6F636B282672776C6F636B2900707468726561645F72776C6F636B5F77726C6F636B282672776C6F636B2900707468726561645F72776C6F636B5F74727977726C6F636B282672776C6F636B2900707468726561645F72776C6F636B5F756E6C6F636B282672776C6F636B290045494E56414C00455045524D0045444541444C4B00454E4F4D454D0045414741494E004542555359003C756E6B6E6F776E3E0073776966745F7461736B5F656E7465725468726561644C6F63616C436F6E746578740073776966745F7461736B5F657869745468726561644C6F63616C436F6E7465787400
+ - sectname: __constg_swiftt
+ segname: __TEXT
+ addr: 0x3BF8
+ size: 312
+ offset: 0x3BF8
+ align: 2
+ reloff: 0x0
+ nreloc: 0
+ flags: 0x0
+ reserved1: 0x0
+ reserved2: 0x0
+ reserved3: 0x0
+ content: 000000000000000008FBFFFF50000080F0FFFFFF14FBFFFF30E2FFFF4401000000000000030000000F00000005000000010000000A0000000B000000040000001200000004E0FFFF130000004CE0FFFF14000000A4E0FFFF010000007CE1FFFF0000000000000000E0FAFFFF50000080F0FFFFFFD4FAFFFF60E4FFFF0001000000000000030000000C00000002000000000000000A0000000A0000000200000001000000C4E1FFFF100000000CE2FFFF50000080ACFFFFFFB0FAFFFF3CE4FFFFCC00000000000000030000000C00000002000000000000000A0000000A000000020000000100000050E2FFFF1000000098E2FFFF5000008068FFFFFF7DFAFFFF18E4FFFF9800000000000000030000000C00000002000000000000000A0000000A0000000200000001000000DCE2FFFF1000000024E3FFFF
+ - sectname: __swift5_typeref
+ segname: __TEXT
+ addr: 0x3D30
+ size: 24
+ offset: 0x3D30
+ align: 1
+ reloff: 0x0
+ nreloc: 0
+ flags: 0x0
+ reserved1: 0x0
+ reserved2: 0x0
+ reserved3: 0x0
+ content: 01D3FEFFFF0002C902000000016BFFFFFF0001A9FFFFFF00
+ - sectname: __swift5_reflstr
+ segname: __TEXT
+ addr: 0x3D48
+ size: 15
+ offset: 0x3D48
+ align: 0
+ reloff: 0x0
+ nreloc: 0
+ flags: 0x0
+ reserved1: 0x0
+ reserved2: 0x0
+ reserved3: 0x0
+ content: '616374697665536572766963657300'
+ - sectname: __swift5_fieldmd
+ segname: __TEXT
+ addr: 0x3D58
+ size: 76
+ offset: 0x3D58
+ align: 2
+ reloff: 0x0
+ nreloc: 0
+ flags: 0x0
+ reserved1: 0x0
+ reserved2: 0x0
+ reserved3: 0x0
+ content: D8FFFFFF0000000001000C000100000002000000CAFFFFFFD8FFFFFFC2FFFFFF0000000001000C0000000000B8FFFFFF0000000001000C0000000000AEFFFFFF0000000001000C0000000000
+ - sectname: __swift5_types
+ segname: __TEXT
+ addr: 0x3DA4
+ size: 16
+ offset: 0x3DA4
+ align: 2
+ reloff: 0x0
+ nreloc: 0
+ flags: 0x0
+ reserved1: 0x0
+ reserved2: 0x0
+ reserved3: 0x0
+ content: 60FEFFFFBCFEFFFFFCFEFFFF3CFFFFFF
+ - sectname: __unwind_info
+ segname: __TEXT
+ addr: 0x3DB4
+ size: 224
+ offset: 0x3DB4
+ align: 2
+ reloff: 0x0
+ nreloc: 0
+ flags: 0x0
+ reserved1: 0x0
+ reserved2: 0x0
+ reserved3: 0x0
+ content: 010000001C000000050000003000000000000000300000000200000000000001010001010300010161010301D1580501301B00004800000048000000B73500000000000048000000030000000C0020008C000300000000003000000210010000A00200021003000030030002600300000004000230040000D00400020005000000060004400800073009000060090006700A0000C00A0004F00D0005400E0001700E0004900F0000B00F000110100003B010000020110003E0110001501300003014000130150003101600012017000070170001210002018800000460000004
+ - sectname: __eh_frame
+ segname: __TEXT
+ addr: 0x3E98
+ size: 320
+ offset: 0x3E98
+ align: 3
+ reloff: 0x0
+ nreloc: 0
+ flags: 0x0
+ reserved1: 0x0
+ reserved2: 0x0
+ reserved3: 0x0
+ content: 1400000000000000017A520001781001100C0708900100001400000000000000017A520001781001100C0708900100001400000000000000017A520001781001100C0708900100001400000000000000017A520001781001100C070890010000240000001C00000070E4FFFFFFFFFFFFE10000000000000000460E1086024B0D064983078C068F05240000004400000068E5FFFFFFFFFFFF020100000000000000460E1086024B0D064983078C068F051400000000000000017A520001781001100C0708900100001400000000000000017A520001781001100C0708900100001400000000000000017A520001781001100C0708900100001400000000000000017A520001781001100C0708900100001400000000000000017A520001781001100C0708900100001400000000000000017A520001781001100C070890010000
+ - sectname: __objc_classname
+ segname: __TEXT
+ addr: 0x3FD8
+ size: 29
+ offset: 0x3FD8
+ align: 0
+ reloff: 0x0
+ nreloc: 0
+ flags: 0x2
+ reserved1: 0x0
+ reserved2: 0x0
+ reserved3: 0x0
+ content: 506F646361737453756767657374696F6E0053756767657374696F6E00
+ - cmd: LC_SEGMENT_64
+ cmdsize: 472
+ segname: __DATA_CONST
+ vmaddr: 16384
+ vmsize: 4096
+ fileoff: 16384
+ filesize: 4096
+ maxprot: 3
+ initprot: 3
+ nsects: 5
+ flags: 0
+ Sections:
+ - sectname: __got
+ segname: __DATA_CONST
+ addr: 0x4000
+ size: 344
+ offset: 0x4000
+ align: 3
+ reloff: 0x0
+ nreloc: 0
+ flags: 0x6
+ reserved1: 0x2A
+ reserved2: 0x0
+ reserved3: 0x0
+ content: 643C00000000100000000000000010800100000000001080020000000000108003000000000010800400000000001080050000000000108006000000000010800700000000001080080000000000108009000000000010800A000000000010800B000000000010800C000000000010800D000000000010800E000000000010800F0000000000108010000000000010801100000000001080120000000000108013000000000010801400000000001080150000000000108016000000000010801700000000001080180000000000108019000000000010801A000000000010801B000000000010801C000000000010801D000000000010801E000000000010801F00000000001080200000000000108021000000000010802200000000001080230000000000108024000000000010802500000000001080260000000000108027000000000010802800000000001080290000000000A080
+ - sectname: __const
+ segname: __DATA_CONST
+ addr: 0x4158
+ size: 144
+ offset: 0x4158
+ align: 3
+ reloff: 0x0
+ nreloc: 0
+ flags: 0x0
+ reserved1: 0x0
+ reserved2: 0x0
+ reserved3: 0x0
+ content: 00004002DCFAFFFF20DAFFFF6CDAFFFF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000385300000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003853000000001000
+ - sectname: __objc_classlist
+ segname: __DATA_CONST
+ addr: 0x41E8
+ size: 48
+ offset: 0x41E8
+ align: 3
+ reloff: 0x0
+ nreloc: 0
+ flags: 0x10000000
+ reserved1: 0x0
+ reserved2: 0x0
+ reserved3: 0x0
+ content: 28500000000010007850000000001000E05000000000100098510000000010003852000000001000D852000000005000
+ - sectname: __objc_imageinfo
+ segname: __DATA_CONST
+ addr: 0x4218
+ size: 8
+ offset: 0x4218
+ align: 2
+ reloff: 0x0
+ nreloc: 0
+ flags: 0x0
+ reserved1: 0x0
+ reserved2: 0x0
+ reserved3: 0x0
+ content: 0000000040070B05
+ - sectname: __objc_const
+ segname: __DATA_CONST
+ addr: 0x4220
+ size: 904
+ offset: 0x4220
+ align: 3
+ reloff: 0x0
+ nreloc: 0
+ flags: 0x0
+ reserved1: 0x0
+ reserved2: 0x0
+ reserved3: 0x0
+ content: 810000002800000028000000000000000000000000000000D83F00000000900000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000800000008000000000000000000000000000000D83F00000000900000000000000000000000000000000000000000000000000000000000000000000000000000000000810000002800000028000000000000000000000000000000EA3F00000000900000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000800000008000000000000000000000000000000EA3F0000000090000000000000000000000000000000000000000000000000000000000000000000000000000000000081000000280000002800000000000000000000000000000080370000000070000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000010000000037000000001000A737000000001000EC370000000050000300000008000000800000001000000018000000000000000000000000000000803700000000300000000000000000000000000000000000884300000000600000000000000000000000000000000000810000002800000028000000000000000000000000000000C03700000000900000000000000000000000000000000000000000000000000000000000000000000000000000000000800000001000000010000000000000000000000000000000C03700000000900000000000000000000000000000000000000000000000000000000000000000000000000000000000810000002800000028000000000000000000000000000000F03700000000900000000000000000000000000000000000000000000000000000000000000000000000000000000000800000001000000010000000000000000000000000000000F03700000000900000000000000000000000000000000000000000000000000000000000000000000000000000000000810000002800000028000000000000000000000000000000203800000000900000000000000000000000000000000000000000000000000000000000000000000000000000000000800000001000000010000000000000000000000000000000203800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+ - cmd: LC_SEGMENT_64
+ cmdsize: 552
+ segname: __DATA
+ vmaddr: 20480
+ vmsize: 4096
+ fileoff: 20480
+ filesize: 4096
+ maxprot: 3
+ initprot: 3
+ nsects: 6
+ flags: 0
+ Sections:
+ - sectname: __objc_data
+ segname: __DATA
+ addr: 0x5000
+ size: 160
+ offset: 0x5000
+ align: 3
+ reloff: 0x0
+ nreloc: 0
+ flags: 0x0
+ reserved1: 0x0
+ reserved2: 0x0
+ reserved3: 0x0
+ content: 2B0000000000108050500000000010002A0000000000208000000000000000002042000000001000005000000000100078500000000010002A00000000002080000000000000000068420000000010002B000000000010802B000000000010802A000000000020800000000000000000B04200000000100050500000000010002C000000000010802A000000000020800000000000000000F842000000001000
+ - sectname: __data
+ segname: __DATA
+ addr: 0x50A0
+ size: 665
+ offset: 0x50A0
+ align: 3
+ reloff: 0x0
+ nreloc: 0
+ flags: 0x0
+ reserved1: 0x0
+ reserved2: 0x0
+ reserved3: 0x0
+ content: 2D000000000010802D000000000010802A00000000002080000000000000000040430000000020000000000000000000901D0000000010002E00000000001080A0500000000010002F000000000010802A000000000020800000000000000000B243000000004000020000000000000018000000070000009000000018000000043C00000000300000000000000000001000000000000000401C000000001000901C000000001000F01C000000001000D01D0000000010002D000000000010802D000000000010802A000000000020800000000000000000F8430000000020000000000000000000F01E0000000010002E0000000000108058510000000010002F000000000010802A0000000000208000000000000000004244000000004000020000000000000010000000070000007800000018000000643C0000000020000000000000000000601E000000001000B01E0000000010002D000000000010802D000000000010802A00000000002080000000000000000088440000000020000000000000000000C01F0000000010002E00000000001080F8510000000010002F000000000010802A000000000020800000000000000000D244000000004000020000000000000010000000070000007800000018000000A83C0000000020000000000000000000301F000000001000801F0000000010002D000000000010802D000000000010802A0000000000208000000000000000001845000000002000000000000000000090200000000010002E0000000000108098520000000010002F000000000010802A0000000000208000000000000000006245000000004000020000000000000010000000070000007800000018000000EC3C00000000200000000000000000000020000000001000502000000000800000
+ - sectname: __s_async_hook
+ segname: __DATA
+ addr: 0x5340
+ size: 400
+ offset: 0x5340
+ align: 3
+ reloff: 0x0
+ nreloc: 0
+ flags: 0x0
+ reserved1: 0x0
+ reserved2: 0x0
+ reserved3: 0x0
+ content: 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000D0250000000010007023000000001000902400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+ - sectname: __swift56_hooks
+ segname: __DATA
+ addr: 0x54D0
+ size: 176
+ offset: 0x54D0
+ align: 3
+ reloff: 0x0
+ nreloc: 0
+ flags: 0x0
+ reserved1: 0x0
+ reserved2: 0x0
+ reserved3: 0x0
+ content: '0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
+ - sectname: __common
+ segname: __DATA
+ addr: 0x5580
+ size: 8
+ offset: 0x0
+ align: 3
+ reloff: 0x0
+ nreloc: 0
+ flags: 0x1
+ reserved1: 0x0
+ reserved2: 0x0
+ reserved3: 0x0
+ - sectname: __bss
+ segname: __DATA
+ addr: 0x5588
+ size: 120
+ offset: 0x0
+ align: 3
+ reloff: 0x0
+ nreloc: 0
+ flags: 0x1
+ reserved1: 0x0
+ reserved2: 0x0
+ reserved3: 0x0
+ - cmd: LC_SEGMENT_64
+ cmdsize: 72
+ segname: __LINKEDIT
+ vmaddr: 24576
+ vmsize: 32768
+ fileoff: 24576
+ filesize: 29912
+ maxprot: 1
+ initprot: 1
+ nsects: 0
+ flags: 0
+ - cmd: LC_ID_DYLIB
+ cmdsize: 104
+ dylib:
+ name: 24
+ timestamp: 1
+ current_version: 65536
+ compatibility_version: 65536
+ Content: '/System/Library/Frameworks/SuggestionsKit.framework/Versions/A/SuggestionsKit'
+ ZeroPadBytes: 3
+ - cmd: LC_DYLD_CHAINED_FIXUPS
+ cmdsize: 16
+ dataoff: 24576
+ datasize: 1288
+ - cmd: LC_DYLD_EXPORTS_TRIE
+ cmdsize: 16
+ dataoff: 25864
+ datasize: 1176
+ - cmd: LC_SYMTAB
+ cmdsize: 24
+ symoff: 28832
+ nsyms: 460
+ stroff: 36536
+ strsize: 17952
+ - cmd: LC_DYSYMTAB
+ cmdsize: 80
+ ilocalsym: 0
+ nlocalsym: 345
+ iextdefsym: 345
+ nextdefsym: 60
+ iundefsym: 405
+ nundefsym: 55
+ tocoff: 0
+ ntoc: 0
+ modtaboff: 0
+ nmodtab: 0
+ extrefsymoff: 0
+ nextrefsyms: 0
+ indirectsymoff: 36192
+ nindirectsyms: 85
+ extreloff: 0
+ nextrel: 0
+ locreloff: 0
+ nlocrel: 0
+ - cmd: LC_UUID
+ cmdsize: 24
+ uuid: 12258037-7DB8-3F3E-B24D-0CF79DC22D90
+ - cmd: LC_BUILD_VERSION
+ cmdsize: 32
+ platform: 1
+ minos: 787200
+ sdk: 983040
+ ntools: 1
+ Tools:
+ - tool: 3
+ version: 62456064
+ - cmd: LC_BUILD_VERSION
+ cmdsize: 32
+ platform: 6
+ minos: 1179648
+ sdk: 1179648
+ ntools: 1
+ Tools:
+ - tool: 3
+ version: 62456064
+ - cmd: LC_SOURCE_VERSION
+ cmdsize: 16
+ version: 0
+ - cmd: LC_SEGMENT_SPLIT_INFO
+ cmdsize: 16
+ dataoff: 27040
+ datasize: 1680
+ - cmd: LC_LOAD_DYLIB
+ cmdsize: 56
+ dylib:
+ name: 24
+ timestamp: 2
+ current_version: 14942208
+ compatibility_version: 65536
+ Content: '/usr/lib/libobjc.A.dylib'
+ ZeroPadBytes: 8
+ - cmd: LC_LOAD_DYLIB
+ cmdsize: 56
+ dylib:
+ name: 24
+ timestamp: 2
+ current_version: 88342528
+ compatibility_version: 65536
+ Content: '/usr/lib/libSystem.B.dylib'
+ ZeroPadBytes: 6
+ - cmd: LC_LOAD_DYLIB
+ cmdsize: 48
+ dylib:
+ name: 24
+ timestamp: 2
+ current_version: 104897792
+ compatibility_version: 65536
+ Content: '/usr/lib/libc++.1.dylib'
+ ZeroPadBytes: 1
+ - cmd: LC_LOAD_DYLIB
+ cmdsize: 64
+ dylib:
+ name: 24
+ timestamp: 2
+ current_version: 330496
+ compatibility_version: 65536
+ Content: '/usr/lib/swift/libswiftCore.dylib'
+ ZeroPadBytes: 7
+ - cmd: LC_LOAD_WEAK_DYLIB
+ cmdsize: 72
+ dylib:
+ name: 24
+ timestamp: 2
+ current_version: 7889920
+ compatibility_version: 65536
+ Content: '/usr/lib/swift/libswiftCoreFoundation.dylib'
+ ZeroPadBytes: 5
+ - cmd: LC_LOAD_WEAK_DYLIB
+ cmdsize: 64
+ dylib:
+ name: 24
+ timestamp: 2
+ current_version: 0
+ compatibility_version: 65536
+ Content: '/usr/lib/swift/libswiftDarwin.dylib'
+ ZeroPadBytes: 5
+ - cmd: LC_LOAD_WEAK_DYLIB
+ cmdsize: 64
+ dylib:
+ name: 24
+ timestamp: 2
+ current_version: 2686976
+ compatibility_version: 65536
+ Content: '/usr/lib/swift/libswiftDispatch.dylib'
+ ZeroPadBytes: 3
+ - cmd: LC_LOAD_WEAK_DYLIB
+ cmdsize: 64
+ dylib:
+ name: 24
+ timestamp: 2
+ current_version: 65536
+ compatibility_version: 65536
+ Content: '/usr/lib/swift/libswiftIOKit.dylib'
+ ZeroPadBytes: 6
+ - cmd: LC_LOAD_WEAK_DYLIB
+ cmdsize: 64
+ dylib:
+ name: 24
+ timestamp: 2
+ current_version: 524288
+ compatibility_version: 65536
+ Content: '/usr/lib/swift/libswiftObjectiveC.dylib'
+ ZeroPadBytes: 1
+ - cmd: LC_LOAD_WEAK_DYLIB
+ cmdsize: 64
+ dylib:
+ name: 24
+ timestamp: 2
+ current_version: 2752512
+ compatibility_version: 65536
+ Content: '/usr/lib/swift/libswiftXPC.dylib'
+ ZeroPadBytes: 8
+ - cmd: LC_LOAD_WEAK_DYLIB
+ cmdsize: 64
+ dylib:
+ name: 24
+ timestamp: 2
+ current_version: 65536
+ compatibility_version: 65536
+ Content: '/usr/lib/swift/libswiftFoundation.dylib'
+ ZeroPadBytes: 1
+ - cmd: LC_FUNCTION_STARTS
+ cmdsize: 16
+ dataoff: 28720
+ datasize: 104
+ - cmd: LC_DATA_IN_CODE
+ cmdsize: 16
+ dataoff: 28824
+ datasize: 8
+LinkEditData:
+ ExportTrie:
+ TerminalSize: 0
+ NodeOffset: 0
+ Name: ''
+ Flags: 0x0
+ Address: 0x0
+ Other: 0x0
+ ImportName: ''
+ Children:
+ - TerminalSize: 0
+ NodeOffset: 764
+ Name: _
+ Flags: 0x0
+ Address: 0x0
+ Other: 0x0
+ ImportName: ''
+ Children:
+ - TerminalSize: 0
+ NodeOffset: 236
+ Name: '$s1'
+ Flags: 0x0
+ Address: 0x0
+ Other: 0x0
+ ImportName: ''
+ Children:
+ - TerminalSize: 0
+ NodeOffset: 93
+ Name: 4SuggestionsKit05TrailA0C
+ Flags: 0x0
+ Address: 0x0
+ Other: 0x0
+ ImportName: ''
+ Children:
+ - TerminalSize: 0
+ NodeOffset: 20
+ Name: 14activeServices09AvailableE0AECv
+ Flags: 0x0
+ Address: 0x0
+ Other: 0x0
+ ImportName: ''
+ Children:
+ - TerminalSize: 3
+ NodeOffset: 6
+ Name: M
+ Flags: 0x0
+ Address: 0x1CF0
+ Other: 0x0
+ ImportName: ''
+ Children:
+ - TerminalSize: 3
+ NodeOffset: 15
+ Name: Tq
+ Flags: 0x0
+ Address: 0x3C48
+ Other: 0x0
+ ImportName: ''
+ - TerminalSize: 3
+ NodeOffset: 34
+ Name: g
+ Flags: 0x0
+ Address: 0x1C40
+ Other: 0x0
+ ImportName: ''
+ Children:
+ - TerminalSize: 3
+ NodeOffset: 43
+ Name: Tq
+ Flags: 0x0
+ Address: 0x3C38
+ Other: 0x0
+ ImportName: ''
+ - TerminalSize: 0
+ NodeOffset: 54
+ Name: p
+ Flags: 0x0
+ Address: 0x0
+ Other: 0x0
+ ImportName: ''
+ Children:
+ - TerminalSize: 4
+ NodeOffset: 48
+ Name: MV
+ Flags: 0x0
+ Address: 0x4158
+ Other: 0x0
+ ImportName: ''
+ - TerminalSize: 3
+ NodeOffset: 69
+ Name: Wvd
+ Flags: 0x0
+ Address: 0x3700
+ Other: 0x0
+ ImportName: ''
+ - TerminalSize: 3
+ NodeOffset: 74
+ Name: fi
+ Flags: 0x0
+ Address: 0x1B60
+ Other: 0x0
+ ImportName: ''
+ - TerminalSize: 3
+ NodeOffset: 79
+ Name: s
+ Flags: 0x0
+ Address: 0x1C90
+ Other: 0x0
+ ImportName: ''
+ Children:
+ - TerminalSize: 3
+ NodeOffset: 88
+ Name: Tq
+ Flags: 0x0
+ Address: 0x3C40
+ Other: 0x0
+ ImportName: ''
+ - TerminalSize: 0
+ NodeOffset: 165
+ Name: ACycf
+ Flags: 0x0
+ Address: 0x0
+ Other: 0x0
+ ImportName: ''
+ Children:
+ - TerminalSize: 3
+ NodeOffset: 150
+ Name: C
+ Flags: 0x0
+ Address: 0x1DD0
+ Other: 0x0
+ ImportName: ''
+ Children:
+ - TerminalSize: 3
+ NodeOffset: 160
+ Name: Tq
+ Flags: 0x0
+ Address: 0x3C50
+ Other: 0x0
+ ImportName: ''
+ - TerminalSize: 3
+ NodeOffset: 175
+ Name: c
+ Flags: 0x0
+ Address: 0x1E00
+ Other: 0x0
+ ImportName: ''
+ - TerminalSize: 0
+ NodeOffset: 185
+ Name: M
+ Flags: 0x0
+ Address: 0x0
+ Other: 0x0
+ ImportName: ''
+ Children:
+ - TerminalSize: 3
+ NodeOffset: 180
+ Name: a
+ Flags: 0x0
+ Address: 0x1E40
+ Other: 0x0
+ ImportName: ''
+ - TerminalSize: 4
+ NodeOffset: 199
+ Name: m
+ Flags: 0x0
+ Address: 0x50A0
+ Other: 0x0
+ ImportName: ''
+ - TerminalSize: 3
+ NodeOffset: 205
+ Name: n
+ Flags: 0x0
+ Address: 0x3C04
+ Other: 0x0
+ ImportName: ''
+ - TerminalSize: 4
+ NodeOffset: 210
+ Name: N
+ Flags: 0x0
+ Address: 0x50E0
+ Other: 0x0
+ ImportName: ''
+ - TerminalSize: 0
+ NodeOffset: 221
+ Name: f
+ Flags: 0x0
+ Address: 0x0
+ Other: 0x0
+ ImportName: ''
+ Children:
+ - TerminalSize: 3
+ NodeOffset: 216
+ Name: D
+ Flags: 0x0
+ Address: 0x1D90
+ Other: 0x0
+ ImportName: ''
+ - TerminalSize: 3
+ NodeOffset: 231
+ Name: d
+ Flags: 0x0
+ Address: 0x1D60
+ Other: 0x0
+ ImportName: ''
+ - TerminalSize: 0
+ NodeOffset: 611
+ Name: 7AvailableServices
+ Flags: 0x0
+ Address: 0x0
+ Other: 0x0
+ ImportName: ''
+ Children:
+ - TerminalSize: 0
+ NodeOffset: 430
+ Name: '1'
+ Flags: 0x0
+ Address: 0x0
+ Other: 0x0
+ ImportName: ''
+ Children:
+ - TerminalSize: 0
+ NodeOffset: 301
+ Name: 2ServiceRaterC
+ Flags: 0x0
+ Address: 0x0
+ Other: 0x0
+ ImportName: ''
+ Children:
+ - TerminalSize: 3
+ NodeOffset: 286
+ Name: 13publishRatingyyF
+ Flags: 0x0
+ Address: 0x2050
+ Other: 0x0
+ ImportName: ''
+ Children:
+ - TerminalSize: 3
+ NodeOffset: 296
+ Name: Tq
+ Flags: 0x0
+ Address: 0x3D28
+ Other: 0x0
+ ImportName: ''
+ - TerminalSize: 0
+ NodeOffset: 359
+ Name: ACycf
+ Flags: 0x0
+ Address: 0x0
+ Other: 0x0
+ ImportName: ''
+ Children:
+ - TerminalSize: 3
+ NodeOffset: 344
+ Name: C
+ Flags: 0x0
+ Address: 0x2000
+ Other: 0x0
+ ImportName: ''
+ Children:
+ - TerminalSize: 3
+ NodeOffset: 354
+ Name: Tq
+ Flags: 0x0
+ Address: 0x3D20
+ Other: 0x0
+ ImportName: ''
+ - TerminalSize: 3
+ NodeOffset: 369
+ Name: c
+ Flags: 0x0
+ Address: 0x2030
+ Other: 0x0
+ ImportName: ''
+ - TerminalSize: 0
+ NodeOffset: 379
+ Name: M
+ Flags: 0x0
+ Address: 0x0
+ Other: 0x0
+ ImportName: ''
+ Children:
+ - TerminalSize: 3
+ NodeOffset: 374
+ Name: a
+ Flags: 0x0
+ Address: 0x2110
+ Other: 0x0
+ ImportName: ''
+ - TerminalSize: 4
+ NodeOffset: 393
+ Name: m
+ Flags: 0x0
+ Address: 0x5298
+ Other: 0x0
+ ImportName: ''
+ - TerminalSize: 3
+ NodeOffset: 399
+ Name: n
+ Flags: 0x0
+ Address: 0x3CEC
+ Other: 0x0
+ ImportName: ''
+ - TerminalSize: 4
+ NodeOffset: 404
+ Name: N
+ Flags: 0x0
+ Address: 0x52D8
+ Other: 0x0
+ ImportName: ''
+ - TerminalSize: 0
+ NodeOffset: 415
+ Name: f
+ Flags: 0x0
+ Address: 0x0
+ Other: 0x0
+ ImportName: ''
+ Children:
+ - TerminalSize: 3
+ NodeOffset: 410
+ Name: D
+ Flags: 0x0
+ Address: 0x2090
+ Other: 0x0
+ ImportName: ''
+ - TerminalSize: 3
+ NodeOffset: 425
+ Name: d
+ Flags: 0x0
+ Address: 0x2070
+ Other: 0x0
+ ImportName: ''
+ - TerminalSize: 0
+ NodeOffset: 485
+ Name: 6ServiceRequesterC
+ Flags: 0x0
+ Address: 0x0
+ Other: 0x0
+ ImportName: ''
+ Children:
+ - TerminalSize: 3
+ NodeOffset: 470
+ Name: 10enterQueueyyF
+ Flags: 0x0
+ Address: 0x1F80
+ Other: 0x0
+ ImportName: ''
+ Children:
+ - TerminalSize: 3
+ NodeOffset: 480
+ Name: Tq
+ Flags: 0x0
+ Address: 0x3CE4
+ Other: 0x0
+ ImportName: ''
+ - TerminalSize: 0
+ NodeOffset: 540
+ Name: ACycf
+ Flags: 0x0
+ Address: 0x0
+ Other: 0x0
+ ImportName: ''
+ Children:
+ - TerminalSize: 3
+ NodeOffset: 525
+ Name: C
+ Flags: 0x0
+ Address: 0x1F30
+ Other: 0x0
+ ImportName: ''
+ Children:
+ - TerminalSize: 3
+ NodeOffset: 535
+ Name: Tq
+ Flags: 0x0
+ Address: 0x3CDC
+ Other: 0x0
+ ImportName: ''
+ - TerminalSize: 3
+ NodeOffset: 550
+ Name: c
+ Flags: 0x0
+ Address: 0x1F60
+ Other: 0x0
+ ImportName: ''
+ - TerminalSize: 0
+ NodeOffset: 560
+ Name: M
+ Flags: 0x0
+ Address: 0x0
+ Other: 0x0
+ ImportName: ''
+ Children:
+ - TerminalSize: 3
+ NodeOffset: 555
+ Name: a
+ Flags: 0x0
+ Address: 0x20F0
+ Other: 0x0
+ ImportName: ''
+ - TerminalSize: 4
+ NodeOffset: 574
+ Name: m
+ Flags: 0x0
+ Address: 0x51F8
+ Other: 0x0
+ ImportName: ''
+ - TerminalSize: 3
+ NodeOffset: 580
+ Name: n
+ Flags: 0x0
+ Address: 0x3CA8
+ Other: 0x0
+ ImportName: ''
+ - TerminalSize: 4
+ NodeOffset: 585
+ Name: N
+ Flags: 0x0
+ Address: 0x5238
+ Other: 0x0
+ ImportName: ''
+ - TerminalSize: 0
+ NodeOffset: 596
+ Name: f
+ Flags: 0x0
+ Address: 0x0
+ Other: 0x0
+ ImportName: ''
+ Children:
+ - TerminalSize: 3
+ NodeOffset: 591
+ Name: D
+ Flags: 0x0
+ Address: 0x1FC0
+ Other: 0x0
+ ImportName: ''
+ - TerminalSize: 3
+ NodeOffset: 606
+ Name: d
+ Flags: 0x0
+ Address: 0x1FA0
+ Other: 0x0
+ ImportName: ''
+ - TerminalSize: 0
+ NodeOffset: 638
+ Name: AAC
+ Flags: 0x0
+ Address: 0x0
+ Other: 0x0
+ ImportName: ''
+ Children:
+ - TerminalSize: 3
+ NodeOffset: 623
+ Name: 10getServiceyyF
+ Flags: 0x0
+ Address: 0x1EB0
+ Other: 0x0
+ ImportName: ''
+ Children:
+ - TerminalSize: 3
+ NodeOffset: 633
+ Name: Tq
+ Flags: 0x0
+ Address: 0x3CA0
+ Other: 0x0
+ ImportName: ''
+ - TerminalSize: 0
+ NodeOffset: 693
+ Name: ABycf
+ Flags: 0x0
+ Address: 0x0
+ Other: 0x0
+ ImportName: ''
+ Children:
+ - TerminalSize: 3
+ NodeOffset: 678
+ Name: C
+ Flags: 0x0
+ Address: 0x1E60
+ Other: 0x0
+ ImportName: ''
+ Children:
+ - TerminalSize: 3
+ NodeOffset: 688
+ Name: Tq
+ Flags: 0x0
+ Address: 0x3C98
+ Other: 0x0
+ ImportName: ''
+ - TerminalSize: 3
+ NodeOffset: 703
+ Name: c
+ Flags: 0x0
+ Address: 0x1E90
+ Other: 0x0
+ ImportName: ''
+ - TerminalSize: 0
+ NodeOffset: 713
+ Name: M
+ Flags: 0x0
+ Address: 0x0
+ Other: 0x0
+ ImportName: ''
+ Children:
+ - TerminalSize: 3
+ NodeOffset: 708
+ Name: a
+ Flags: 0x0
+ Address: 0x20D0
+ Other: 0x0
+ ImportName: ''
+ - TerminalSize: 4
+ NodeOffset: 727
+ Name: m
+ Flags: 0x0
+ Address: 0x5158
+ Other: 0x0
+ ImportName: ''
+ - TerminalSize: 3
+ NodeOffset: 733
+ Name: n
+ Flags: 0x0
+ Address: 0x3C64
+ Other: 0x0
+ ImportName: ''
+ - TerminalSize: 4
+ NodeOffset: 738
+ Name: N
+ Flags: 0x0
+ Address: 0x5198
+ Other: 0x0
+ ImportName: ''
+ - TerminalSize: 0
+ NodeOffset: 749
+ Name: f
+ Flags: 0x0
+ Address: 0x0
+ Other: 0x0
+ ImportName: ''
+ Children:
+ - TerminalSize: 3
+ NodeOffset: 744
+ Name: D
+ Flags: 0x0
+ Address: 0x1EF0
+ Other: 0x0
+ ImportName: ''
+ - TerminalSize: 3
+ NodeOffset: 759
+ Name: d
+ Flags: 0x0
+ Address: 0x1ED0
+ Other: 0x0
+ ImportName: ''
+ - TerminalSize: 0
+ NodeOffset: 931
+ Name: OBJC_
+ Flags: 0x0
+ Address: 0x0
+ Other: 0x0
+ ImportName: ''
+ Children:
+ - TerminalSize: 0
+ NodeOffset: 890
+ Name: 'CLASS_$_'
+ Flags: 0x0
+ Address: 0x0
+ Other: 0x0
+ ImportName: ''
+ Children:
+ - TerminalSize: 4
+ NodeOffset: 884
+ Name: PodcastSuggestion
+ Flags: 0x0
+ Address: 0x5028
+ Other: 0x0
+ ImportName: ''
+ - TerminalSize: 4
+ NodeOffset: 925
+ Name: Suggestion
+ Flags: 0x0
+ Address: 0x5078
+ Other: 0x0
+ ImportName: ''
+ - TerminalSize: 0
+ NodeOffset: 965
+ Name: 'METACLASS_$_'
+ Flags: 0x0
+ Address: 0x0
+ Other: 0x0
+ ImportName: ''
+ Children:
+ - TerminalSize: 4
+ NodeOffset: 959
+ Name: PodcastSuggestion
+ Flags: 0x0
+ Address: 0x5000
+ Other: 0x0
+ ImportName: ''
+ - TerminalSize: 4
+ NodeOffset: 1000
+ Name: Suggestion
+ Flags: 0x0
+ Address: 0x5050
+ Other: 0x0
+ ImportName: ''
+ - TerminalSize: 0
+ NodeOffset: 1011
+ Name: SuggestionsKitVersion
+ Flags: 0x0
+ Address: 0x0
+ Other: 0x0
+ ImportName: ''
+ Children:
+ - TerminalSize: 3
+ NodeOffset: 1006
+ Name: Number
+ Flags: 0x0
+ Address: 0x36F8
+ Other: 0x0
+ ImportName: ''
+ - TerminalSize: 3
+ NodeOffset: 1031
+ Name: String
+ Flags: 0x0
+ Address: 0x36C0
+ Other: 0x0
+ ImportName: ''
+ - TerminalSize: 3
+ NodeOffset: 1036
+ Name: launchOnTestApps
+ Flags: 0x0
+ Address: 0x1B50
+ Other: 0x0
+ ImportName: ''
+ - TerminalSize: 3
+ NodeOffset: 1041
+ Name: setupTestSuggestionService
+ Flags: 0x0
+ Address: 0x1B30
+ Other: 0x0
+ ImportName: ''
+ - TerminalSize: 3
+ NodeOffset: 1046
+ Name: teardownTestSuggestionService
+ Flags: 0x0
+ Address: 0x1B40
+ Other: 0x0
+ ImportName: ''
+ NameList:
+ - n_strx: 3740
+ n_type: 0x1E
+ n_sect: 1
+ n_desc: 128
+ n_value: 7040
+ - n_strx: 3808
+ n_type: 0x1E
+ n_sect: 1
+ n_desc: 128
+ n_value: 7120
+ - n_strx: 3876
+ n_type: 0xE
+ n_sect: 1
+ n_desc: 0
+ n_value: 7472
+ - n_strx: 3949
+ n_type: 0x1E
+ n_sect: 1
+ n_desc: 0
+ n_value: 8496
+ - n_strx: 4073
+ n_type: 0x1E
+ n_sect: 1
+ n_desc: 128
+ n_value: 9072
+ - n_strx: 4284
+ n_type: 0xE
+ n_sect: 1
+ n_desc: 0
+ n_value: 9312
+ - n_strx: 4345
+ n_type: 0x1E
+ n_sect: 1
+ n_desc: 128
+ n_value: 9360
+ - n_strx: 4583
+ n_type: 0xE
+ n_sect: 1
+ n_desc: 0
+ n_value: 9632
+ - n_strx: 4646
+ n_type: 0x1E
+ n_sect: 1
+ n_desc: 128
+ n_value: 9680
+ - n_strx: 4880
+ n_type: 0x1E
+ n_sect: 1
+ n_desc: 0
+ n_value: 9712
+ - n_strx: 4923
+ n_type: 0x1E
+ n_sect: 1
+ n_desc: 0
+ n_value: 10112
+ - n_strx: 4968
+ n_type: 0x1E
+ n_sect: 1
+ n_desc: 0
+ n_value: 10528
+ - n_strx: 5045
+ n_type: 0xE
+ n_sect: 1
+ n_desc: 0
+ n_value: 10608
+ - n_strx: 5156
+ n_type: 0xE
+ n_sect: 1
+ n_desc: 0
+ n_value: 10656
+ - n_strx: 5234
+ n_type: 0x1E
+ n_sect: 1
+ n_desc: 0
+ n_value: 10944
+ - n_strx: 5281
+ n_type: 0x1E
+ n_sect: 1
+ n_desc: 0
+ n_value: 10960
+ - n_strx: 5317
+ n_type: 0x1E
+ n_sect: 1
+ n_desc: 0
+ n_value: 10976
+ - n_strx: 5356
+ n_type: 0x1E
+ n_sect: 1
+ n_desc: 0
+ n_value: 11024
+ - n_strx: 5401
+ n_type: 0x1E
+ n_sect: 1
+ n_desc: 0
+ n_value: 11072
+ - n_strx: 5448
+ n_type: 0x1E
+ n_sect: 1
+ n_desc: 0
+ n_value: 11232
+ - n_strx: 5498
+ n_type: 0xE
+ n_sect: 1
+ n_desc: 0
+ n_value: 11280
+ - n_strx: 5534
+ n_type: 0x1E
+ n_sect: 1
+ n_desc: 128
+ n_value: 11344
+ - n_strx: 5581
+ n_type: 0xE
+ n_sect: 1
+ n_desc: 0
+ n_value: 11536
+ - n_strx: 5659
+ n_type: 0x1E
+ n_sect: 1
+ n_desc: 0
+ n_value: 11584
+ - n_strx: 5694
+ n_type: 0x1E
+ n_sect: 1
+ n_desc: 0
+ n_value: 11664
+ - n_strx: 5729
+ n_type: 0xE
+ n_sect: 1
+ n_desc: 0
+ n_value: 11744
+ - n_strx: 5799
+ n_type: 0xE
+ n_sect: 1
+ n_desc: 0
+ n_value: 11792
+ - n_strx: 5869
+ n_type: 0x1E
+ n_sect: 1
+ n_desc: 0
+ n_value: 11840
+ - n_strx: 5936
+ n_type: 0xE
+ n_sect: 1
+ n_desc: 0
+ n_value: 11904
+ - n_strx: 5952
+ n_type: 0x1E
+ n_sect: 1
+ n_desc: 0
+ n_value: 12128
+ - n_strx: 6022
+ n_type: 0x1E
+ n_sect: 1
+ n_desc: 0
+ n_value: 12192
+ - n_strx: 6094
+ n_type: 0x1E
+ n_sect: 1
+ n_desc: 0
+ n_value: 12256
+ - n_strx: 6166
+ n_type: 0x1E
+ n_sect: 1
+ n_desc: 0
+ n_value: 12320
+ - n_strx: 6259
+ n_type: 0x1E
+ n_sect: 1
+ n_desc: 0
+ n_value: 12384
+ - n_strx: 6324
+ n_type: 0x1E
+ n_sect: 1
+ n_desc: 0
+ n_value: 12608
+ - n_strx: 6391
+ n_type: 0x1E
+ n_sect: 1
+ n_desc: 0
+ n_value: 12672
+ - n_strx: 6455
+ n_type: 0x1E
+ n_sect: 1
+ n_desc: 0
+ n_value: 12736
+ - n_strx: 6521
+ n_type: 0x1E
+ n_sect: 1
+ n_desc: 0
+ n_value: 12800
+ - n_strx: 6589
+ n_type: 0x1E
+ n_sect: 1
+ n_desc: 0
+ n_value: 12880
+ - n_strx: 6647
+ n_type: 0x1E
+ n_sect: 1
+ n_desc: 0
+ n_value: 12896
+ - n_strx: 6707
+ n_type: 0x1E
+ n_sect: 1
+ n_desc: 0
+ n_value: 12912
+ - n_strx: 6764
+ n_type: 0x1E
+ n_sect: 1
+ n_desc: 0
+ n_value: 12928
+ - n_strx: 6823
+ n_type: 0x1E
+ n_sect: 1
+ n_desc: 0
+ n_value: 12944
+ - n_strx: 6884
+ n_type: 0x1E
+ n_sect: 1
+ n_desc: 0
+ n_value: 12960
+ - n_strx: 6957
+ n_type: 0x1E
+ n_sect: 1
+ n_desc: 0
+ n_value: 13024
+ - n_strx: 7033
+ n_type: 0x1E
+ n_sect: 1
+ n_desc: 0
+ n_value: 13088
+ - n_strx: 7110
+ n_type: 0x1E
+ n_sect: 1
+ n_desc: 0
+ n_value: 13152
+ - n_strx: 7192
+ n_type: 0x1E
+ n_sect: 1
+ n_desc: 0
+ n_value: 13232
+ - n_strx: 7270
+ n_type: 0x1E
+ n_sect: 1
+ n_desc: 0
+ n_value: 13296
+ - n_strx: 7353
+ n_type: 0x1E
+ n_sect: 1
+ n_desc: 0
+ n_value: 13376
+ - n_strx: 7433
+ n_type: 0x1E
+ n_sect: 1
+ n_desc: 0
+ n_value: 13440
+ - n_strx: 7514
+ n_type: 0x1E
+ n_sect: 1
+ n_desc: 128
+ n_value: 13504
+ - n_strx: 7576
+ n_type: 0x1E
+ n_sect: 1
+ n_desc: 128
+ n_value: 13584
+ - n_strx: 7637
+ n_type: 0xE
+ n_sect: 1
+ n_desc: 0
+ n_value: 13664
+ - n_strx: 7733
+ n_type: 0xE
+ n_sect: 1
+ n_desc: 0
+ n_value: 13712
+ - n_strx: 7828
+ n_type: 0x1E
+ n_sect: 3
+ n_desc: 128
+ n_value: 14130
+ - n_strx: 7856
+ n_type: 0x1E
+ n_sect: 5
+ n_desc: 128
+ n_value: 15352
+ - n_strx: 7879
+ n_type: 0x1E
+ n_sect: 5
+ n_desc: 128
+ n_value: 15448
+ - n_strx: 7905
+ n_type: 0x1E
+ n_sect: 6
+ n_desc: 128
+ n_value: 15664
+ - n_strx: 7948
+ n_type: 0x1E
+ n_sect: 6
+ n_desc: 128
+ n_value: 15670
+ - n_strx: 7987
+ n_type: 0x1E
+ n_sect: 6
+ n_desc: 128
+ n_value: 15676
+ - n_strx: 8042
+ n_type: 0x1E
+ n_sect: 6
+ n_desc: 128
+ n_value: 15682
+ - n_strx: 8093
+ n_type: 0xE
+ n_sect: 8
+ n_desc: 0
+ n_value: 15704
+ - n_strx: 8125
+ n_type: 0xE
+ n_sect: 8
+ n_desc: 0
+ n_value: 15732
+ - n_strx: 8153
+ n_type: 0xE
+ n_sect: 8
+ n_desc: 0
+ n_value: 15748
+ - n_strx: 8197
+ n_type: 0xE
+ n_sect: 8
+ n_desc: 0
+ n_value: 15764
+ - n_strx: 8237
+ n_type: 0x1E
+ n_sect: 14
+ n_desc: 128
+ n_value: 16744
+ - n_strx: 8291
+ n_type: 0x1E
+ n_sect: 14
+ n_desc: 128
+ n_value: 16752
+ - n_strx: 8345
+ n_type: 0x1E
+ n_sect: 14
+ n_desc: 128
+ n_value: 16760
+ - n_strx: 8395
+ n_type: 0x1E
+ n_sect: 14
+ n_desc: 128
+ n_value: 16768
+ - n_strx: 8453
+ n_type: 0x1E
+ n_sect: 14
+ n_desc: 128
+ n_value: 16776
+ - n_strx: 8505
+ n_type: 0x1E
+ n_sect: 14
+ n_desc: 128
+ n_value: 16784
+ - n_strx: 8552
+ n_type: 0x1E
+ n_sect: 14
+ n_desc: 128
+ n_value: 16792
+ - n_strx: 8601
+ n_type: 0x1E
+ n_sect: 14
+ n_desc: 128
+ n_value: 16800
+ - n_strx: 8660
+ n_type: 0x1E
+ n_sect: 14
+ n_desc: 128
+ n_value: 16808
+ - n_strx: 8717
+ n_type: 0x1E
+ n_sect: 14
+ n_desc: 128
+ n_value: 16816
+ - n_strx: 8774
+ n_type: 0x1E
+ n_sect: 14
+ n_desc: 128
+ n_value: 16824
+ - n_strx: 8827
+ n_type: 0x1E
+ n_sect: 14
+ n_desc: 128
+ n_value: 16832
+ - n_strx: 8888
+ n_type: 0x1E
+ n_sect: 14
+ n_desc: 128
+ n_value: 16840
+ - n_strx: 8943
+ n_type: 0x1E
+ n_sect: 14
+ n_desc: 128
+ n_value: 16848
+ - n_strx: 8993
+ n_type: 0x1E
+ n_sect: 14
+ n_desc: 128
+ n_value: 16856
+ - n_strx: 9045
+ n_type: 0x1E
+ n_sect: 14
+ n_desc: 128
+ n_value: 16864
+ - n_strx: 9107
+ n_type: 0xE
+ n_sect: 17
+ n_desc: 0
+ n_value: 16928
+ - n_strx: 9147
+ n_type: 0xE
+ n_sect: 17
+ n_desc: 0
+ n_value: 17000
+ - n_strx: 9183
+ n_type: 0xE
+ n_sect: 17
+ n_desc: 0
+ n_value: 17072
+ - n_strx: 9216
+ n_type: 0xE
+ n_sect: 17
+ n_desc: 0
+ n_value: 17144
+ - n_strx: 9245
+ n_type: 0xE
+ n_sect: 17
+ n_desc: 0
+ n_value: 17216
+ - n_strx: 9301
+ n_type: 0xE
+ n_sect: 17
+ n_desc: 0
+ n_value: 17288
+ - n_strx: 9348
+ n_type: 0xE
+ n_sect: 17
+ n_desc: 0
+ n_value: 17328
+ - n_strx: 9394
+ n_type: 0xE
+ n_sect: 17
+ n_desc: 0
+ n_value: 17400
+ - n_strx: 9454
+ n_type: 0xE
+ n_sect: 17
+ n_desc: 0
+ n_value: 17472
+ - n_strx: 9504
+ n_type: 0xE
+ n_sect: 17
+ n_desc: 0
+ n_value: 17544
+ - n_strx: 9563
+ n_type: 0xE
+ n_sect: 17
+ n_desc: 0
+ n_value: 17616
+ - n_strx: 9612
+ n_type: 0xE
+ n_sect: 17
+ n_desc: 0
+ n_value: 17688
+ - n_strx: 9667
+ n_type: 0xE
+ n_sect: 17
+ n_desc: 0
+ n_value: 17760
+ - n_strx: 9712
+ n_type: 0xE
+ n_sect: 19
+ n_desc: 0
+ n_value: 20680
+ - n_strx: 9744
+ n_type: 0xE
+ n_sect: 19
+ n_desc: 0
+ n_value: 20864
+ - n_strx: 9772
+ n_type: 0xE
+ n_sect: 19
+ n_desc: 0
+ n_value: 21024
+ - n_strx: 9816
+ n_type: 0xE
+ n_sect: 19
+ n_desc: 0
+ n_value: 21184
+ - n_strx: 9856
+ n_type: 0x1E
+ n_sect: 19
+ n_desc: 128
+ n_value: 21304
+ - n_strx: 9898
+ n_type: 0x1E
+ n_sect: 20
+ n_desc: 0
+ n_value: 21312
+ - n_strx: 9927
+ n_type: 0x1E
+ n_sect: 21
+ n_desc: 0
+ n_value: 21712
+ - n_strx: 9952
+ n_type: 0x1E
+ n_sect: 22
+ n_desc: 0
+ n_value: 21888
+ - n_strx: 9991
+ n_type: 0xE
+ n_sect: 23
+ n_desc: 0
+ n_value: 21896
+ - n_strx: 10090
+ n_type: 0xE
+ n_sect: 23
+ n_desc: 0
+ n_value: 21912
+ - n_strx: 10125
+ n_type: 0xE
+ n_sect: 23
+ n_desc: 0
+ n_value: 21920
+ - n_strx: 10155
+ n_type: 0xE
+ n_sect: 23
+ n_desc: 0
+ n_value: 21928
+ - n_strx: 10178
+ n_type: 0xE
+ n_sect: 23
+ n_desc: 0
+ n_value: 21936
+ - n_strx: 10244
+ n_type: 0xE
+ n_sect: 23
+ n_desc: 0
+ n_value: 21952
+ - n_strx: 10301
+ n_type: 0xE
+ n_sect: 23
+ n_desc: 0
+ n_value: 21968
+ - n_strx: 10358
+ n_type: 0xE
+ n_sect: 23
+ n_desc: 0
+ n_value: 21984
+ - n_strx: 10442
+ n_type: 0xE
+ n_sect: 23
+ n_desc: 0
+ n_value: 22000
+ - n_strx: 10525
+ n_type: 0x32
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 10795
+ n_type: 0x32
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 1
+ n_type: 0x64
+ n_sect: 1
+ n_desc: 0
+ n_value: 0
+ - n_strx: 11071
+ n_type: 0x64
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 11308
+ n_type: 0x64
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 11330
+ n_type: 0x66
+ n_sect: 3
+ n_desc: 1
+ n_value: 0
+ - n_strx: 11595
+ n_type: 0x20
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 11624
+ n_type: 0x20
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 1
+ n_type: 0x64
+ n_sect: 1
+ n_desc: 0
+ n_value: 0
+ - n_strx: 11653
+ n_type: 0x64
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 11708
+ n_type: 0x64
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 11728
+ n_type: 0x66
+ n_sect: 3
+ n_desc: 1
+ n_value: 0
+ - n_strx: 11991
+ n_type: 0x26
+ n_sect: 17
+ n_desc: 0
+ n_value: 16928
+ - n_strx: 12031
+ n_type: 0x26
+ n_sect: 17
+ n_desc: 0
+ n_value: 17000
+ - n_strx: 12067
+ n_type: 0x20
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 12103
+ n_type: 0x20
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 1
+ n_type: 0x64
+ n_sect: 1
+ n_desc: 0
+ n_value: 0
+ - n_strx: 12135
+ n_type: 0x64
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 12190
+ n_type: 0x64
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 12207
+ n_type: 0x66
+ n_sect: 3
+ n_desc: 1
+ n_value: 0
+ - n_strx: 1
+ n_type: 0x2E
+ n_sect: 1
+ n_desc: 0
+ n_value: 6960
+ - n_strx: 12467
+ n_type: 0x24
+ n_sect: 1
+ n_desc: 0
+ n_value: 6960
+ - n_strx: 1
+ n_type: 0x24
+ n_sect: 0
+ n_desc: 0
+ n_value: 16
+ - n_strx: 1
+ n_type: 0x4E
+ n_sect: 1
+ n_desc: 0
+ n_value: 6960
+ - n_strx: 1
+ n_type: 0x2E
+ n_sect: 1
+ n_desc: 0
+ n_value: 6976
+ - n_strx: 12495
+ n_type: 0x24
+ n_sect: 1
+ n_desc: 0
+ n_value: 6976
+ - n_strx: 1
+ n_type: 0x24
+ n_sect: 0
+ n_desc: 0
+ n_value: 16
+ - n_strx: 1
+ n_type: 0x4E
+ n_sect: 1
+ n_desc: 0
+ n_value: 6976
+ - n_strx: 1
+ n_type: 0x2E
+ n_sect: 1
+ n_desc: 0
+ n_value: 6992
+ - n_strx: 12526
+ n_type: 0x24
+ n_sect: 1
+ n_desc: 0
+ n_value: 6992
+ - n_strx: 1
+ n_type: 0x24
+ n_sect: 0
+ n_desc: 0
+ n_value: 13
+ - n_strx: 1
+ n_type: 0x4E
+ n_sect: 1
+ n_desc: 0
+ n_value: 6992
+ - n_strx: 1
+ n_type: 0x64
+ n_sect: 1
+ n_desc: 0
+ n_value: 0
+ - n_strx: 12544
+ n_type: 0x64
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 12599
+ n_type: 0x64
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 12612
+ n_type: 0x66
+ n_sect: 3
+ n_desc: 1
+ n_value: 0
+ - n_strx: 12868
+ n_type: 0x26
+ n_sect: 17
+ n_desc: 0
+ n_value: 17072
+ - n_strx: 12901
+ n_type: 0x26
+ n_sect: 17
+ n_desc: 0
+ n_value: 17144
+ - n_strx: 12930
+ n_type: 0x20
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 12959
+ n_type: 0x20
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 1
+ n_type: 0x64
+ n_sect: 1
+ n_desc: 0
+ n_value: 0
+ - n_strx: 12984
+ n_type: 0x64
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 13039
+ n_type: 0x64
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 13062
+ n_type: 0x66
+ n_sect: 3
+ n_desc: 1
+ n_value: 0
+ - n_strx: 1
+ n_type: 0x2E
+ n_sect: 1
+ n_desc: 0
+ n_value: 7008
+ - n_strx: 13324
+ n_type: 0x24
+ n_sect: 1
+ n_desc: 0
+ n_value: 7008
+ - n_strx: 1
+ n_type: 0x24
+ n_sect: 0
+ n_desc: 0
+ n_value: 32
+ - n_strx: 1
+ n_type: 0x4E
+ n_sect: 1
+ n_desc: 0
+ n_value: 7008
+ - n_strx: 1
+ n_type: 0x2E
+ n_sect: 1
+ n_desc: 0
+ n_value: 7040
+ - n_strx: 13390
+ n_type: 0x24
+ n_sect: 1
+ n_desc: 0
+ n_value: 7040
+ - n_strx: 1
+ n_type: 0x24
+ n_sect: 0
+ n_desc: 0
+ n_value: 80
+ - n_strx: 1
+ n_type: 0x4E
+ n_sect: 1
+ n_desc: 0
+ n_value: 7040
+ - n_strx: 1
+ n_type: 0x2E
+ n_sect: 1
+ n_desc: 0
+ n_value: 7120
+ - n_strx: 13458
+ n_type: 0x24
+ n_sect: 1
+ n_desc: 0
+ n_value: 7120
+ - n_strx: 1
+ n_type: 0x24
+ n_sect: 0
+ n_desc: 0
+ n_value: 112
+ - n_strx: 1
+ n_type: 0x4E
+ n_sect: 1
+ n_desc: 0
+ n_value: 7120
+ - n_strx: 1
+ n_type: 0x2E
+ n_sect: 1
+ n_desc: 0
+ n_value: 7232
+ - n_strx: 13526
+ n_type: 0x24
+ n_sect: 1
+ n_desc: 0
+ n_value: 7232
+ - n_strx: 1
+ n_type: 0x24
+ n_sect: 0
+ n_desc: 0
+ n_value: 80
+ - n_strx: 1
+ n_type: 0x4E
+ n_sect: 1
+ n_desc: 0
+ n_value: 7232
+ - n_strx: 1
+ n_type: 0x2E
+ n_sect: 1
+ n_desc: 0
+ n_value: 7312
+ - n_strx: 13590
+ n_type: 0x24
+ n_sect: 1
+ n_desc: 0
+ n_value: 7312
+ - n_strx: 1
+ n_type: 0x24
+ n_sect: 0
+ n_desc: 0
+ n_value: 96
+ - n_strx: 1
+ n_type: 0x4E
+ n_sect: 1
+ n_desc: 0
+ n_value: 7312
+ - n_strx: 1
+ n_type: 0x2E
+ n_sect: 1
+ n_desc: 0
+ n_value: 7408
+ - n_strx: 13654
+ n_type: 0x24
+ n_sect: 1
+ n_desc: 0
+ n_value: 7408
+ - n_strx: 1
+ n_type: 0x24
+ n_sect: 0
+ n_desc: 0
+ n_value: 64
+ - n_strx: 1
+ n_type: 0x4E
+ n_sect: 1
+ n_desc: 0
+ n_value: 7408
+ - n_strx: 1
+ n_type: 0x2E
+ n_sect: 1
+ n_desc: 0
+ n_value: 7472
+ - n_strx: 13718
+ n_type: 0x24
+ n_sect: 1
+ n_desc: 0
+ n_value: 7472
+ - n_strx: 1
+ n_type: 0x24
+ n_sect: 0
+ n_desc: 0
+ n_value: 48
+ - n_strx: 1
+ n_type: 0x4E
+ n_sect: 1
+ n_desc: 0
+ n_value: 7472
+ - n_strx: 1
+ n_type: 0x2E
+ n_sect: 1
+ n_desc: 0
+ n_value: 7520
+ - n_strx: 13791
+ n_type: 0x24
+ n_sect: 1
+ n_desc: 0
+ n_value: 7520
+ - n_strx: 1
+ n_type: 0x24
+ n_sect: 0
+ n_desc: 0
+ n_value: 48
+ - n_strx: 1
+ n_type: 0x4E
+ n_sect: 1
+ n_desc: 0
+ n_value: 7520
+ - n_strx: 1
+ n_type: 0x2E
+ n_sect: 1
+ n_desc: 0
+ n_value: 7568
+ - n_strx: 13823
+ n_type: 0x24
+ n_sect: 1
+ n_desc: 0
+ n_value: 7568
+ - n_strx: 1
+ n_type: 0x24
+ n_sect: 0
+ n_desc: 0
+ n_value: 64
+ - n_strx: 1
+ n_type: 0x4E
+ n_sect: 1
+ n_desc: 0
+ n_value: 7568
+ - n_strx: 1
+ n_type: 0x2E
+ n_sect: 1
+ n_desc: 0
+ n_value: 7632
+ - n_strx: 13855
+ n_type: 0x24
+ n_sect: 1
+ n_desc: 0
+ n_value: 7632
+ - n_strx: 1
+ n_type: 0x24
+ n_sect: 0
+ n_desc: 0
+ n_value: 48
+ - n_strx: 1
+ n_type: 0x4E
+ n_sect: 1
+ n_desc: 0
+ n_value: 7632
+ - n_strx: 1
+ n_type: 0x2E
+ n_sect: 1
+ n_desc: 0
+ n_value: 7680
+ - n_strx: 13891
+ n_type: 0x24
+ n_sect: 1
+ n_desc: 0
+ n_value: 7680
+ - n_strx: 1
+ n_type: 0x24
+ n_sect: 0
+ n_desc: 0
+ n_value: 64
+ - n_strx: 1
+ n_type: 0x4E
+ n_sect: 1
+ n_desc: 0
+ n_value: 7680
+ - n_strx: 1
+ n_type: 0x2E
+ n_sect: 1
+ n_desc: 0
+ n_value: 7744
+ - n_strx: 13927
+ n_type: 0x24
+ n_sect: 1
+ n_desc: 0
+ n_value: 7744
+ - n_strx: 1
+ n_type: 0x24
+ n_sect: 0
+ n_desc: 0
+ n_value: 22
+ - n_strx: 1
+ n_type: 0x4E
+ n_sect: 1
+ n_desc: 0
+ n_value: 7744
+ - n_strx: 13959
+ n_type: 0x20
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 14026
+ n_type: 0x20
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 14054
+ n_type: 0x20
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 14077
+ n_type: 0x20
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 14109
+ n_type: 0x20
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 14175
+ n_type: 0x20
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 14241
+ n_type: 0x20
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 14307
+ n_type: 0x20
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 14345
+ n_type: 0x20
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 14388
+ n_type: 0x20
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 14427
+ n_type: 0x26
+ n_sect: 8
+ n_desc: 0
+ n_value: 15704
+ - n_strx: 14459
+ n_type: 0x20
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 14525
+ n_type: 0x20
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 14579
+ n_type: 0x20
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 14633
+ n_type: 0x20
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 14683
+ n_type: 0x20
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 14741
+ n_type: 0x20
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 14793
+ n_type: 0x20
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 14840
+ n_type: 0x20
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 14889
+ n_type: 0x20
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 14948
+ n_type: 0x26
+ n_sect: 17
+ n_desc: 0
+ n_value: 17216
+ - n_strx: 15004
+ n_type: 0x26
+ n_sect: 17
+ n_desc: 0
+ n_value: 17288
+ - n_strx: 15051
+ n_type: 0x26
+ n_sect: 17
+ n_desc: 0
+ n_value: 17328
+ - n_strx: 15097
+ n_type: 0x20
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 15129
+ n_type: 0x26
+ n_sect: 19
+ n_desc: 0
+ n_value: 20680
+ - n_strx: 15161
+ n_type: 0x20
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 1
+ n_type: 0x64
+ n_sect: 1
+ n_desc: 0
+ n_value: 0
+ - n_strx: 15192
+ n_type: 0x64
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 15250
+ n_type: 0x64
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 15265
+ n_type: 0x66
+ n_sect: 3
+ n_desc: 1
+ n_value: 0
+ - n_strx: 1
+ n_type: 0x2E
+ n_sect: 1
+ n_desc: 0
+ n_value: 7776
+ - n_strx: 15466
+ n_type: 0x24
+ n_sect: 1
+ n_desc: 0
+ n_value: 7776
+ - n_strx: 1
+ n_type: 0x24
+ n_sect: 0
+ n_desc: 0
+ n_value: 48
+ - n_strx: 1
+ n_type: 0x4E
+ n_sect: 1
+ n_desc: 0
+ n_value: 7776
+ - n_strx: 1
+ n_type: 0x2E
+ n_sect: 1
+ n_desc: 0
+ n_value: 7824
+ - n_strx: 15498
+ n_type: 0x24
+ n_sect: 1
+ n_desc: 0
+ n_value: 7824
+ - n_strx: 1
+ n_type: 0x24
+ n_sect: 0
+ n_desc: 0
+ n_value: 32
+ - n_strx: 1
+ n_type: 0x4E
+ n_sect: 1
+ n_desc: 0
+ n_value: 7824
+ - n_strx: 1
+ n_type: 0x2E
+ n_sect: 1
+ n_desc: 0
+ n_value: 7856
+ - n_strx: 15530
+ n_type: 0x24
+ n_sect: 1
+ n_desc: 0
+ n_value: 7856
+ - n_strx: 1
+ n_type: 0x24
+ n_sect: 0
+ n_desc: 0
+ n_value: 32
+ - n_strx: 1
+ n_type: 0x4E
+ n_sect: 1
+ n_desc: 0
+ n_value: 7856
+ - n_strx: 1
+ n_type: 0x2E
+ n_sect: 1
+ n_desc: 0
+ n_value: 7888
+ - n_strx: 15571
+ n_type: 0x24
+ n_sect: 1
+ n_desc: 0
+ n_value: 7888
+ - n_strx: 1
+ n_type: 0x24
+ n_sect: 0
+ n_desc: 0
+ n_value: 32
+ - n_strx: 1
+ n_type: 0x4E
+ n_sect: 1
+ n_desc: 0
+ n_value: 7888
+ - n_strx: 1
+ n_type: 0x2E
+ n_sect: 1
+ n_desc: 0
+ n_value: 7920
+ - n_strx: 15599
+ n_type: 0x24
+ n_sect: 1
+ n_desc: 0
+ n_value: 7920
+ - n_strx: 1
+ n_type: 0x24
+ n_sect: 0
+ n_desc: 0
+ n_value: 64
+ - n_strx: 1
+ n_type: 0x4E
+ n_sect: 1
+ n_desc: 0
+ n_value: 7920
+ - n_strx: 1
+ n_type: 0x2E
+ n_sect: 1
+ n_desc: 0
+ n_value: 7984
+ - n_strx: 15627
+ n_type: 0x24
+ n_sect: 1
+ n_desc: 0
+ n_value: 7984
+ - n_strx: 1
+ n_type: 0x24
+ n_sect: 0
+ n_desc: 0
+ n_value: 48
+ - n_strx: 1
+ n_type: 0x4E
+ n_sect: 1
+ n_desc: 0
+ n_value: 7984
+ - n_strx: 1
+ n_type: 0x2E
+ n_sect: 1
+ n_desc: 0
+ n_value: 8032
+ - n_strx: 15675
+ n_type: 0x24
+ n_sect: 1
+ n_desc: 0
+ n_value: 8032
+ - n_strx: 1
+ n_type: 0x24
+ n_sect: 0
+ n_desc: 0
+ n_value: 32
+ - n_strx: 1
+ n_type: 0x4E
+ n_sect: 1
+ n_desc: 0
+ n_value: 8032
+ - n_strx: 1
+ n_type: 0x2E
+ n_sect: 1
+ n_desc: 0
+ n_value: 8064
+ - n_strx: 15723
+ n_type: 0x24
+ n_sect: 1
+ n_desc: 0
+ n_value: 8064
+ - n_strx: 1
+ n_type: 0x24
+ n_sect: 0
+ n_desc: 0
+ n_value: 32
+ - n_strx: 1
+ n_type: 0x4E
+ n_sect: 1
+ n_desc: 0
+ n_value: 8064
+ - n_strx: 1
+ n_type: 0x2E
+ n_sect: 1
+ n_desc: 0
+ n_value: 8096
+ - n_strx: 15780
+ n_type: 0x24
+ n_sect: 1
+ n_desc: 0
+ n_value: 8096
+ - n_strx: 1
+ n_type: 0x24
+ n_sect: 0
+ n_desc: 0
+ n_value: 32
+ - n_strx: 1
+ n_type: 0x4E
+ n_sect: 1
+ n_desc: 0
+ n_value: 8096
+ - n_strx: 1
+ n_type: 0x2E
+ n_sect: 1
+ n_desc: 0
+ n_value: 8128
+ - n_strx: 15824
+ n_type: 0x24
+ n_sect: 1
+ n_desc: 0
+ n_value: 8128
+ - n_strx: 1
+ n_type: 0x24
+ n_sect: 0
+ n_desc: 0
+ n_value: 64
+ - n_strx: 1
+ n_type: 0x4E
+ n_sect: 1
+ n_desc: 0
+ n_value: 8128
+ - n_strx: 1
+ n_type: 0x2E
+ n_sect: 1
+ n_desc: 0
+ n_value: 8192
+ - n_strx: 15868
+ n_type: 0x24
+ n_sect: 1
+ n_desc: 0
+ n_value: 8192
+ - n_strx: 1
+ n_type: 0x24
+ n_sect: 0
+ n_desc: 0
+ n_value: 48
+ - n_strx: 1
+ n_type: 0x4E
+ n_sect: 1
+ n_desc: 0
+ n_value: 8192
+ - n_strx: 1
+ n_type: 0x2E
+ n_sect: 1
+ n_desc: 0
+ n_value: 8240
+ - n_strx: 15912
+ n_type: 0x24
+ n_sect: 1
+ n_desc: 0
+ n_value: 8240
+ - n_strx: 1
+ n_type: 0x24
+ n_sect: 0
+ n_desc: 0
+ n_value: 32
+ - n_strx: 1
+ n_type: 0x4E
+ n_sect: 1
+ n_desc: 0
+ n_value: 8240
+ - n_strx: 1
+ n_type: 0x2E
+ n_sect: 1
+ n_desc: 0
+ n_value: 8272
+ - n_strx: 15956
+ n_type: 0x24
+ n_sect: 1
+ n_desc: 0
+ n_value: 8272
+ - n_strx: 1
+ n_type: 0x24
+ n_sect: 0
+ n_desc: 0
+ n_value: 32
+ - n_strx: 1
+ n_type: 0x4E
+ n_sect: 1
+ n_desc: 0
+ n_value: 8272
+ - n_strx: 1
+ n_type: 0x2E
+ n_sect: 1
+ n_desc: 0
+ n_value: 8304
+ - n_strx: 16012
+ n_type: 0x24
+ n_sect: 1
+ n_desc: 0
+ n_value: 8304
+ - n_strx: 1
+ n_type: 0x24
+ n_sect: 0
+ n_desc: 0
+ n_value: 32
+ - n_strx: 1
+ n_type: 0x4E
+ n_sect: 1
+ n_desc: 0
+ n_value: 8304
+ - n_strx: 1
+ n_type: 0x2E
+ n_sect: 1
+ n_desc: 0
+ n_value: 8336
+ - n_strx: 16052
+ n_type: 0x24
+ n_sect: 1
+ n_desc: 0
+ n_value: 8336
+ - n_strx: 1
+ n_type: 0x24
+ n_sect: 0
+ n_desc: 0
+ n_value: 64
+ - n_strx: 1
+ n_type: 0x4E
+ n_sect: 1
+ n_desc: 0
+ n_value: 8336
+ - n_strx: 1
+ n_type: 0x2E
+ n_sect: 1
+ n_desc: 0
+ n_value: 8400
+ - n_strx: 16092
+ n_type: 0x24
+ n_sect: 1
+ n_desc: 0
+ n_value: 8400
+ - n_strx: 1
+ n_type: 0x24
+ n_sect: 0
+ n_desc: 0
+ n_value: 32
+ - n_strx: 1
+ n_type: 0x4E
+ n_sect: 1
+ n_desc: 0
+ n_value: 8400
+ - n_strx: 1
+ n_type: 0x2E
+ n_sect: 1
+ n_desc: 0
+ n_value: 8432
+ - n_strx: 16120
+ n_type: 0x24
+ n_sect: 1
+ n_desc: 0
+ n_value: 8432
+ - n_strx: 1
+ n_type: 0x24
+ n_sect: 0
+ n_desc: 0
+ n_value: 32
+ - n_strx: 1
+ n_type: 0x4E
+ n_sect: 1
+ n_desc: 0
+ n_value: 8432
+ - n_strx: 1
+ n_type: 0x2E
+ n_sect: 1
+ n_desc: 0
+ n_value: 8464
+ - n_strx: 16164
+ n_type: 0x24
+ n_sect: 1
+ n_desc: 0
+ n_value: 8464
+ - n_strx: 1
+ n_type: 0x24
+ n_sect: 0
+ n_desc: 0
+ n_value: 22
+ - n_strx: 1
+ n_type: 0x4E
+ n_sect: 1
+ n_desc: 0
+ n_value: 8464
+ - n_strx: 16204
+ n_type: 0x20
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 16230
+ n_type: 0x20
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 16258
+ n_type: 0x20
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 16292
+ n_type: 0x20
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 16335
+ n_type: 0x20
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 16379
+ n_type: 0x20
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 16429
+ n_type: 0x20
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 16488
+ n_type: 0x20
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 16528
+ n_type: 0x20
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 16574
+ n_type: 0x20
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 16632
+ n_type: 0x20
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 16687
+ n_type: 0x20
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 16738
+ n_type: 0x26
+ n_sect: 8
+ n_desc: 0
+ n_value: 15732
+ - n_strx: 16766
+ n_type: 0x26
+ n_sect: 8
+ n_desc: 0
+ n_value: 15748
+ - n_strx: 16810
+ n_type: 0x26
+ n_sect: 8
+ n_desc: 0
+ n_value: 15764
+ - n_strx: 16850
+ n_type: 0x20
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 16907
+ n_type: 0x20
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 16964
+ n_type: 0x20
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 17017
+ n_type: 0x20
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 17078
+ n_type: 0x20
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 17133
+ n_type: 0x20
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 17183
+ n_type: 0x20
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 17235
+ n_type: 0x20
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 17297
+ n_type: 0x26
+ n_sect: 17
+ n_desc: 0
+ n_value: 17400
+ - n_strx: 17357
+ n_type: 0x26
+ n_sect: 17
+ n_desc: 0
+ n_value: 17472
+ - n_strx: 17407
+ n_type: 0x26
+ n_sect: 17
+ n_desc: 0
+ n_value: 17544
+ - n_strx: 17466
+ n_type: 0x26
+ n_sect: 17
+ n_desc: 0
+ n_value: 17616
+ - n_strx: 17515
+ n_type: 0x26
+ n_sect: 17
+ n_desc: 0
+ n_value: 17688
+ - n_strx: 17570
+ n_type: 0x26
+ n_sect: 17
+ n_desc: 0
+ n_value: 17760
+ - n_strx: 17615
+ n_type: 0x20
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 17643
+ n_type: 0x26
+ n_sect: 19
+ n_desc: 0
+ n_value: 20864
+ - n_strx: 17671
+ n_type: 0x20
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 17698
+ n_type: 0x20
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 17742
+ n_type: 0x26
+ n_sect: 19
+ n_desc: 0
+ n_value: 21024
+ - n_strx: 17786
+ n_type: 0x20
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 17829
+ n_type: 0x20
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 17869
+ n_type: 0x26
+ n_sect: 19
+ n_desc: 0
+ n_value: 21184
+ - n_strx: 17909
+ n_type: 0x20
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 1
+ n_type: 0x64
+ n_sect: 1
+ n_desc: 0
+ n_value: 0
+ - n_strx: 2
+ n_type: 0xF
+ n_sect: 1
+ n_desc: 0
+ n_value: 7408
+ - n_strx: 66
+ n_type: 0xF
+ n_sect: 5
+ n_desc: 0
+ n_value: 15432
+ - n_strx: 132
+ n_type: 0xF
+ n_sect: 1
+ n_desc: 0
+ n_value: 7232
+ - n_strx: 196
+ n_type: 0xF
+ n_sect: 5
+ n_desc: 0
+ n_value: 15416
+ - n_strx: 262
+ n_type: 0xF
+ n_sect: 14
+ n_desc: 0
+ n_value: 16728
+ - n_strx: 328
+ n_type: 0xF
+ n_sect: 3
+ n_desc: 0
+ n_value: 14080
+ - n_strx: 395
+ n_type: 0xF
+ n_sect: 1
+ n_desc: 0
+ n_value: 7008
+ - n_strx: 461
+ n_type: 0xF
+ n_sect: 1
+ n_desc: 0
+ n_value: 7312
+ - n_strx: 525
+ n_type: 0xF
+ n_sect: 5
+ n_desc: 0
+ n_value: 15424
+ - n_strx: 591
+ n_type: 0xF
+ n_sect: 1
+ n_desc: 0
+ n_value: 7632
+ - n_strx: 627
+ n_type: 0xF
+ n_sect: 5
+ n_desc: 0
+ n_value: 15440
+ - n_strx: 665
+ n_type: 0xF
+ n_sect: 1
+ n_desc: 0
+ n_value: 7680
+ - n_strx: 701
+ n_type: 0xF
+ n_sect: 1
+ n_desc: 0
+ n_value: 7744
+ - n_strx: 733
+ n_type: 0xF
+ n_sect: 19
+ n_desc: 0
+ n_value: 20640
+ - n_strx: 765
+ n_type: 0xF
+ n_sect: 5
+ n_desc: 0
+ n_value: 15364
+ - n_strx: 797
+ n_type: 0xF
+ n_sect: 19
+ n_desc: 0
+ n_value: 20704
+ - n_strx: 828
+ n_type: 0xF
+ n_sect: 1
+ n_desc: 0
+ n_value: 7568
+ - n_strx: 860
+ n_type: 0xF
+ n_sect: 1
+ n_desc: 0
+ n_value: 7520
+ - n_strx: 892
+ n_type: 0xF
+ n_sect: 1
+ n_desc: 0
+ n_value: 8272
+ - n_strx: 948
+ n_type: 0xF
+ n_sect: 5
+ n_desc: 0
+ n_value: 15656
+ - n_strx: 1006
+ n_type: 0xF
+ n_sect: 1
+ n_desc: 0
+ n_value: 8192
+ - n_strx: 1050
+ n_type: 0xF
+ n_sect: 5
+ n_desc: 0
+ n_value: 15648
+ - n_strx: 1096
+ n_type: 0xF
+ n_sect: 1
+ n_desc: 0
+ n_value: 8240
+ - n_strx: 1140
+ n_type: 0xF
+ n_sect: 1
+ n_desc: 0
+ n_value: 8464
+ - n_strx: 1180
+ n_type: 0xF
+ n_sect: 19
+ n_desc: 0
+ n_value: 21144
+ - n_strx: 1220
+ n_type: 0xF
+ n_sect: 5
+ n_desc: 0
+ n_value: 15596
+ - n_strx: 1260
+ n_type: 0xF
+ n_sect: 19
+ n_desc: 0
+ n_value: 21208
+ - n_strx: 1299
+ n_type: 0xF
+ n_sect: 1
+ n_desc: 0
+ n_value: 8336
+ - n_strx: 1339
+ n_type: 0xF
+ n_sect: 1
+ n_desc: 0
+ n_value: 8304
+ - n_strx: 1379
+ n_type: 0xF
+ n_sect: 1
+ n_desc: 0
+ n_value: 8064
+ - n_strx: 1436
+ n_type: 0xF
+ n_sect: 5
+ n_desc: 0
+ n_value: 15588
+ - n_strx: 1495
+ n_type: 0xF
+ n_sect: 1
+ n_desc: 0
+ n_value: 7984
+ - n_strx: 1543
+ n_type: 0xF
+ n_sect: 5
+ n_desc: 0
+ n_value: 15580
+ - n_strx: 1593
+ n_type: 0xF
+ n_sect: 1
+ n_desc: 0
+ n_value: 8032
+ - n_strx: 1641
+ n_type: 0xF
+ n_sect: 1
+ n_desc: 0
+ n_value: 8432
+ - n_strx: 1685
+ n_type: 0xF
+ n_sect: 19
+ n_desc: 0
+ n_value: 20984
+ - n_strx: 1729
+ n_type: 0xF
+ n_sect: 5
+ n_desc: 0
+ n_value: 15528
+ - n_strx: 1773
+ n_type: 0xF
+ n_sect: 19
+ n_desc: 0
+ n_value: 21048
+ - n_strx: 1816
+ n_type: 0xF
+ n_sect: 1
+ n_desc: 0
+ n_value: 8128
+ - n_strx: 1860
+ n_type: 0xF
+ n_sect: 1
+ n_desc: 0
+ n_value: 8096
+ - n_strx: 1904
+ n_type: 0xF
+ n_sect: 1
+ n_desc: 0
+ n_value: 7856
+ - n_strx: 1945
+ n_type: 0xF
+ n_sect: 5
+ n_desc: 0
+ n_value: 15520
+ - n_strx: 1988
+ n_type: 0xF
+ n_sect: 1
+ n_desc: 0
+ n_value: 7776
+ - n_strx: 2020
+ n_type: 0xF
+ n_sect: 5
+ n_desc: 0
+ n_value: 15512
+ - n_strx: 2054
+ n_type: 0xF
+ n_sect: 1
+ n_desc: 0
+ n_value: 7824
+ - n_strx: 2086
+ n_type: 0xF
+ n_sect: 1
+ n_desc: 0
+ n_value: 8400
+ - n_strx: 2114
+ n_type: 0xF
+ n_sect: 19
+ n_desc: 0
+ n_value: 20824
+ - n_strx: 2142
+ n_type: 0xF
+ n_sect: 5
+ n_desc: 0
+ n_value: 15460
+ - n_strx: 2170
+ n_type: 0xF
+ n_sect: 19
+ n_desc: 0
+ n_value: 20888
+ - n_strx: 2197
+ n_type: 0xF
+ n_sect: 1
+ n_desc: 0
+ n_value: 7920
+ - n_strx: 2225
+ n_type: 0xF
+ n_sect: 1
+ n_desc: 0
+ n_value: 7888
+ - n_strx: 2253
+ n_type: 0xF
+ n_sect: 18
+ n_desc: 0
+ n_value: 20520
+ - n_strx: 2285
+ n_type: 0xF
+ n_sect: 18
+ n_desc: 0
+ n_value: 20600
+ - n_strx: 2310
+ n_type: 0xF
+ n_sect: 18
+ n_desc: 0
+ n_value: 20480
+ - n_strx: 2346
+ n_type: 0xF
+ n_sect: 18
+ n_desc: 0
+ n_value: 20560
+ - n_strx: 2375
+ n_type: 0xF
+ n_sect: 3
+ n_desc: 0
+ n_value: 14072
+ - n_strx: 2404
+ n_type: 0xF
+ n_sect: 3
+ n_desc: 0
+ n_value: 14016
+ - n_strx: 2433
+ n_type: 0xF
+ n_sect: 1
+ n_desc: 0
+ n_value: 6992
+ - n_strx: 2451
+ n_type: 0xF
+ n_sect: 1
+ n_desc: 0
+ n_value: 6960
+ - n_strx: 2479
+ n_type: 0xF
+ n_sect: 1
+ n_desc: 0
+ n_value: 6976
+ - n_strx: 2510
+ n_type: 0x1
+ n_sect: 0
+ n_desc: 1024
+ n_value: 0
+ - n_strx: 2518
+ n_type: 0x1
+ n_sect: 0
+ n_desc: 256
+ n_value: 0
+ - n_strx: 2541
+ n_type: 0x1
+ n_sect: 0
+ n_desc: 1024
+ n_value: 0
+ - n_strx: 2575
+ n_type: 0x1
+ n_sect: 0
+ n_desc: 256
+ n_value: 0
+ - n_strx: 2602
+ n_type: 0x1
+ n_sect: 0
+ n_desc: 1024
+ n_value: 0
+ - n_strx: 2640
+ n_type: 0x1
+ n_sect: 0
+ n_desc: 896
+ n_value: 0
+ - n_strx: 2648
+ n_type: 0x1
+ n_sect: 0
+ n_desc: 896
+ n_value: 0
+ - n_strx: 2655
+ n_type: 0x1
+ n_sect: 0
+ n_desc: 256
+ n_value: 0
+ - n_strx: 2674
+ n_type: 0x1
+ n_sect: 0
+ n_desc: 1344
+ n_value: 0
+ - n_strx: 2715
+ n_type: 0x1
+ n_sect: 0
+ n_desc: 1600
+ n_value: 0
+ - n_strx: 2748
+ n_type: 0x1
+ n_sect: 0
+ n_desc: 1856
+ n_value: 0
+ - n_strx: 2783
+ n_type: 0x1
+ n_sect: 0
+ n_desc: 2880
+ n_value: 0
+ - n_strx: 2820
+ n_type: 0x1
+ n_sect: 0
+ n_desc: 2112
+ n_value: 0
+ - n_strx: 2852
+ n_type: 0x1
+ n_sect: 0
+ n_desc: 2368
+ n_value: 0
+ - n_strx: 2889
+ n_type: 0x1
+ n_sect: 0
+ n_desc: 2624
+ n_value: 0
+ - n_strx: 2919
+ n_type: 0x1
+ n_sect: 0
+ n_desc: 1024
+ n_value: 0
+ - n_strx: 2957
+ n_type: 0x1
+ n_sect: 0
+ n_desc: 512
+ n_value: 0
+ - n_strx: 2964
+ n_type: 0x1
+ n_sect: 0
+ n_desc: 512
+ n_value: 0
+ - n_strx: 2981
+ n_type: 0x1
+ n_sect: 0
+ n_desc: 512
+ n_value: 0
+ - n_strx: 2988
+ n_type: 0x1
+ n_sect: 0
+ n_desc: 256
+ n_value: 0
+ - n_strx: 3003
+ n_type: 0x1
+ n_sect: 0
+ n_desc: 576
+ n_value: 0
+ - n_strx: 3015
+ n_type: 0x1
+ n_sect: 0
+ n_desc: 576
+ n_value: 0
+ - n_strx: 3036
+ n_type: 0x1
+ n_sect: 0
+ n_desc: 576
+ n_value: 0
+ - n_strx: 3060
+ n_type: 0x1
+ n_sect: 0
+ n_desc: 576
+ n_value: 0
+ - n_strx: 3083
+ n_type: 0x1
+ n_sect: 0
+ n_desc: 512
+ n_value: 0
+ - n_strx: 3107
+ n_type: 0x1
+ n_sect: 0
+ n_desc: 512
+ n_value: 0
+ - n_strx: 3129
+ n_type: 0x1
+ n_sect: 0
+ n_desc: 512
+ n_value: 0
+ - n_strx: 3148
+ n_type: 0x1
+ n_sect: 0
+ n_desc: 512
+ n_value: 0
+ - n_strx: 3169
+ n_type: 0x1
+ n_sect: 0
+ n_desc: 512
+ n_value: 0
+ - n_strx: 3188
+ n_type: 0x1
+ n_sect: 0
+ n_desc: 512
+ n_value: 0
+ - n_strx: 3209
+ n_type: 0x1
+ n_sect: 0
+ n_desc: 512
+ n_value: 0
+ - n_strx: 3232
+ n_type: 0x1
+ n_sect: 0
+ n_desc: 512
+ n_value: 0
+ - n_strx: 3252
+ n_type: 0x1
+ n_sect: 0
+ n_desc: 512
+ n_value: 0
+ - n_strx: 3272
+ n_type: 0x1
+ n_sect: 0
+ n_desc: 512
+ n_value: 0
+ - n_strx: 3295
+ n_type: 0x1
+ n_sect: 0
+ n_desc: 512
+ n_value: 0
+ - n_strx: 3317
+ n_type: 0x1
+ n_sect: 0
+ n_desc: 512
+ n_value: 0
+ - n_strx: 3344
+ n_type: 0x1
+ n_sect: 0
+ n_desc: 512
+ n_value: 0
+ - n_strx: 3368
+ n_type: 0x1
+ n_sect: 0
+ n_desc: 512
+ n_value: 0
+ - n_strx: 3395
+ n_type: 0x1
+ n_sect: 0
+ n_desc: 512
+ n_value: 0
+ - n_strx: 3419
+ n_type: 0x1
+ n_sect: 0
+ n_desc: 512
+ n_value: 0
+ - n_strx: 3440
+ n_type: 0x1
+ n_sect: 0
+ n_desc: 512
+ n_value: 0
+ - n_strx: 3463
+ n_type: 0x1
+ n_sect: 0
+ n_desc: 512
+ n_value: 0
+ - n_strx: 3489
+ n_type: 0x1
+ n_sect: 0
+ n_desc: 512
+ n_value: 0
+ - n_strx: 3515
+ n_type: 0x1
+ n_sect: 0
+ n_desc: 512
+ n_value: 0
+ - n_strx: 3538
+ n_type: 0x1
+ n_sect: 0
+ n_desc: 512
+ n_value: 0
+ - n_strx: 3561
+ n_type: 0x1
+ n_sect: 0
+ n_desc: 512
+ n_value: 0
+ - n_strx: 3582
+ n_type: 0x1
+ n_sect: 0
+ n_desc: 1024
+ n_value: 0
+ - n_strx: 3601
+ n_type: 0x1
+ n_sect: 0
+ n_desc: 1024
+ n_value: 0
+ - n_strx: 3620
+ n_type: 0x1
+ n_sect: 0
+ n_desc: 1024
+ n_value: 0
+ - n_strx: 3648
+ n_type: 0x1
+ n_sect: 0
+ n_desc: 1024
+ n_value: 0
+ - n_strx: 3665
+ n_type: 0x1
+ n_sect: 0
+ n_desc: 1024
+ n_value: 0
+ - n_strx: 3684
+ n_type: 0x1
+ n_sect: 0
+ n_desc: 1024
+ n_value: 0
+ - n_strx: 3696
+ n_type: 0x1
+ n_sect: 0
+ n_desc: 1024
+ n_value: 0
+ - n_strx: 3711
+ n_type: 0x1
+ n_sect: 0
+ n_desc: 1024
+ n_value: 0
+ - n_strx: 3725
+ n_type: 0x1
+ n_sect: 0
+ n_desc: 576
+ n_value: 0
+ StringTable:
+ - ' '
+ - '_$s14SuggestionsKit05TrailA0C14activeServices09AvailableE0AECvM'
+ - '_$s14SuggestionsKit05TrailA0C14activeServices09AvailableE0AECvMTq'
+ - '_$s14SuggestionsKit05TrailA0C14activeServices09AvailableE0AECvg'
+ - '_$s14SuggestionsKit05TrailA0C14activeServices09AvailableE0AECvgTq'
+ - '_$s14SuggestionsKit05TrailA0C14activeServices09AvailableE0AECvpMV'
+ - '_$s14SuggestionsKit05TrailA0C14activeServices09AvailableE0AECvpWvd'
+ - '_$s14SuggestionsKit05TrailA0C14activeServices09AvailableE0AECvpfi'
+ - '_$s14SuggestionsKit05TrailA0C14activeServices09AvailableE0AECvs'
+ - '_$s14SuggestionsKit05TrailA0C14activeServices09AvailableE0AECvsTq'
+ - '_$s14SuggestionsKit05TrailA0CACycfC'
+ - '_$s14SuggestionsKit05TrailA0CACycfCTq'
+ - '_$s14SuggestionsKit05TrailA0CACycfc'
+ - '_$s14SuggestionsKit05TrailA0CMa'
+ - '_$s14SuggestionsKit05TrailA0CMm'
+ - '_$s14SuggestionsKit05TrailA0CMn'
+ - '_$s14SuggestionsKit05TrailA0CN'
+ - '_$s14SuggestionsKit05TrailA0CfD'
+ - '_$s14SuggestionsKit05TrailA0Cfd'
+ - '_$s17AvailableServices12ServiceRaterC13publishRatingyyF'
+ - '_$s17AvailableServices12ServiceRaterC13publishRatingyyFTq'
+ - '_$s17AvailableServices12ServiceRaterCACycfC'
+ - '_$s17AvailableServices12ServiceRaterCACycfCTq'
+ - '_$s17AvailableServices12ServiceRaterCACycfc'
+ - '_$s17AvailableServices12ServiceRaterCMa'
+ - '_$s17AvailableServices12ServiceRaterCMm'
+ - '_$s17AvailableServices12ServiceRaterCMn'
+ - '_$s17AvailableServices12ServiceRaterCN'
+ - '_$s17AvailableServices12ServiceRaterCfD'
+ - '_$s17AvailableServices12ServiceRaterCfd'
+ - '_$s17AvailableServices16ServiceRequesterC10enterQueueyyF'
+ - '_$s17AvailableServices16ServiceRequesterC10enterQueueyyFTq'
+ - '_$s17AvailableServices16ServiceRequesterCACycfC'
+ - '_$s17AvailableServices16ServiceRequesterCACycfCTq'
+ - '_$s17AvailableServices16ServiceRequesterCACycfc'
+ - '_$s17AvailableServices16ServiceRequesterCMa'
+ - '_$s17AvailableServices16ServiceRequesterCMm'
+ - '_$s17AvailableServices16ServiceRequesterCMn'
+ - '_$s17AvailableServices16ServiceRequesterCN'
+ - '_$s17AvailableServices16ServiceRequesterCfD'
+ - '_$s17AvailableServices16ServiceRequesterCfd'
+ - '_$s17AvailableServicesAAC10getServiceyyF'
+ - '_$s17AvailableServicesAAC10getServiceyyFTq'
+ - '_$s17AvailableServicesAACABycfC'
+ - '_$s17AvailableServicesAACABycfCTq'
+ - '_$s17AvailableServicesAACABycfc'
+ - '_$s17AvailableServicesAACMa'
+ - '_$s17AvailableServicesAACMm'
+ - '_$s17AvailableServicesAACMn'
+ - '_$s17AvailableServicesAACN'
+ - '_$s17AvailableServicesAACfD'
+ - '_$s17AvailableServicesAACfd'
+ - '_OBJC_CLASS_$_PodcastSuggestion'
+ - '_OBJC_CLASS_$_Suggestion'
+ - '_OBJC_METACLASS_$_PodcastSuggestion'
+ - '_OBJC_METACLASS_$_Suggestion'
+ - _SuggestionsKitVersionNumber
+ - _SuggestionsKitVersionString
+ - _launchOnTestApps
+ - _setupTestSuggestionService
+ - _teardownTestSuggestionService
+ - '_$sBoWV'
+ - '_OBJC_CLASS_$_NSObject'
+ - '_OBJC_CLASS_$__TtCs12_SwiftObject'
+ - '_OBJC_METACLASS_$_NSObject'
+ - '_OBJC_METACLASS_$__TtCs12_SwiftObject'
+ - __ZdlPv
+ - __Znwm
+ - __objc_empty_cache
+ - '__swift_FORCE_LOAD_$_swiftCoreFoundation'
+ - '__swift_FORCE_LOAD_$_swiftDarwin'
+ - '__swift_FORCE_LOAD_$_swiftDispatch'
+ - '__swift_FORCE_LOAD_$_swiftFoundation'
+ - '__swift_FORCE_LOAD_$_swiftIOKit'
+ - '__swift_FORCE_LOAD_$_swiftObjectiveC'
+ - '__swift_FORCE_LOAD_$_swiftXPC'
+ - __swift_stdlib_operatingSystemVersion
+ - _abort
+ - _dispatch_once_f
+ - _dlsym
+ - _objc_opt_self
+ - _os_release
+ - _os_unfair_lock_lock
+ - _os_unfair_lock_trylock
+ - _os_unfair_lock_unlock
+ - _pthread_cond_broadcast
+ - _pthread_cond_destroy
+ - _pthread_cond_init
+ - _pthread_cond_signal
+ - _pthread_cond_wait
+ - _pthread_getspecific
+ - _pthread_mutex_destroy
+ - _pthread_mutex_init
+ - _pthread_mutex_lock
+ - _pthread_mutex_trylock
+ - _pthread_mutex_unlock
+ - _pthread_mutexattr_destroy
+ - _pthread_mutexattr_init
+ - _pthread_mutexattr_settype
+ - _pthread_rwlock_destroy
+ - _pthread_rwlock_init
+ - _pthread_rwlock_rdlock
+ - _pthread_rwlock_tryrdlock
+ - _pthread_rwlock_trywrlock
+ - _pthread_rwlock_unlock
+ - _pthread_rwlock_wrlock
+ - _pthread_setspecific
+ - _swift_allocObject
+ - _swift_beginAccess
+ - _swift_deallocClassInstance
+ - _swift_endAccess
+ - _swift_errorRetain
+ - _swift_once
+ - _swift_release
+ - _swift_retain
+ - _voucher_adopt
+ - '_$s14SuggestionsKit05TrailA0C14activeServices09AvailableE0AECvpACTK'
+ - '_$s14SuggestionsKit05TrailA0C14activeServices09AvailableE0AECvpACTk'
+ - '_$s14SuggestionsKit05TrailA0C14activeServices09AvailableE0AECvM.resume.0'
+ - __ZN5swift9AsyncTask10waitFutureEPS0_PNS_12AsyncContextEPU14swiftasynccallFvU19swift_async_contextS3_ES3_PNS_11OpaqueValueE
+ - __ZN5swift38swift56override_swift_task_future_waitEPNS_11OpaqueValueEPNS_12AsyncContextEPNS_9AsyncTaskEPU14swiftasynccallFvU19swift_async_contextS3_ES3_PU14swiftasynccallFvS1_U19swift_async_contextS3_S5_S7_S3_E
+ - __ZL31task_future_wait_resume_adapterPN5swift12AsyncContextE
+ - __ZN5swift47swift56override_swift_task_future_wait_throwingEPNS_11OpaqueValueEPNS_12AsyncContextEPNS_9AsyncTaskEPU14swiftasynccallFvU19swift_async_contextS3_U13swift_contextPvES3_PU14swiftasynccallFvS1_U19swift_async_contextS3_S5_S8_S3_E
+ - __ZL33task_wait_throwing_resume_adapterPN5swift12AsyncContextE
+ - __ZN5swift40swift56override_swift_task_create_commonEmPNS_16TaskOptionRecordEPKNS_14TargetMetadataINS_9InProcessEEEPU14swiftasynccallFvU19swift_async_contextPNS_12AsyncContextEEPvmPU9swiftcallFNS_19AsyncTaskAndContextEmS1_S6_SA_SB_mE
+ - __ZN5swift9AsyncTask18flagAsRunning_slowEv
+ - __ZN5swift9AsyncTask20flagAsSuspended_slowEv
+ - __ZN5swift31swift_task_escalateBackdeploy56EPNS_9AsyncTaskENS_11JobPriorityE
+ - '__ZZZN5swift31swift_task_escalateBackdeploy56EPNS_9AsyncTaskENS_11JobPriorityEENK3$_0clEvENUlPvE_8__invokeES4_'
+ - __ZN5swiftL25waitForStatusRecordUnlockEPNS_9AsyncTaskERNS_16ActiveTaskStatusE
+ - __ZN5swift28swift_Concurrency_fatalErrorEjPKcz
+ - __ZN5swift21swift_task_getCurrentEv
+ - __ZN5swift24_swift_task_clearCurrentEv
+ - __ZN5swift16adoptTaskVoucherEPNS_9AsyncTaskE
+ - __ZN5swift18restoreTaskVoucherEPNS_9AsyncTaskE
+ - __ZN5swift14VoucherManager19vouchersAreDisabledEv
+ - __ZL27_initializeVouchersDisabledPv
+ - __ZN5swift14VoucherManager9swapToJobEPNS_3JobE
+ - __ZZZL25swift_voucher_needs_adoptP9voucher_sENKUlvE_clEvENUlPvE_8__invokeES2_
+ - __ZN5swift19_swift_tsan_acquireEPv
+ - __ZN5swift19_swift_tsan_releaseEPv
+ - '__ZZZN5swift19_swift_tsan_acquireEPvENK3$_0clEvENUlS0_E_8__invokeES0_'
+ - '__ZZZN5swift19_swift_tsan_releaseEPvENK3$_0clEvENUlS0_E_8__invokeES0_'
+ - __ZN5swift23ConditionPlatformHelper4initER22_opaque_pthread_cond_t
+ - __ZL9errorNamei
+ - __ZN5swift23ConditionPlatformHelper7destroyER22_opaque_pthread_cond_t
+ - __ZN5swift23ConditionPlatformHelper9notifyOneER22_opaque_pthread_cond_t
+ - __ZN5swift23ConditionPlatformHelper9notifyAllER22_opaque_pthread_cond_t
+ - __ZN5swift23ConditionPlatformHelper4waitER22_opaque_pthread_cond_tR23_opaque_pthread_mutex_t
+ - __ZN5swift19MutexPlatformHelper4initER23_opaque_pthread_mutex_tb
+ - __ZN5swift19MutexPlatformHelper7destroyER23_opaque_pthread_mutex_t
+ - __ZN5swift19MutexPlatformHelper4lockER23_opaque_pthread_mutex_t
+ - __ZN5swift19MutexPlatformHelper6unlockER23_opaque_pthread_mutex_t
+ - __ZN5swift19MutexPlatformHelper8try_lockER23_opaque_pthread_mutex_t
+ - __ZN5swift19MutexPlatformHelper4initER16os_unfair_lock_sb
+ - __ZN5swift19MutexPlatformHelper7destroyER16os_unfair_lock_s
+ - __ZN5swift19MutexPlatformHelper4lockER16os_unfair_lock_s
+ - __ZN5swift19MutexPlatformHelper6unlockER16os_unfair_lock_s
+ - __ZN5swift19MutexPlatformHelper8try_lockER16os_unfair_lock_s
+ - __ZN5swift27ReadWriteLockPlatformHelper4initER24_opaque_pthread_rwlock_t
+ - __ZN5swift27ReadWriteLockPlatformHelper7destroyER24_opaque_pthread_rwlock_t
+ - __ZN5swift27ReadWriteLockPlatformHelper8readLockER24_opaque_pthread_rwlock_t
+ - __ZN5swift27ReadWriteLockPlatformHelper12try_readLockER24_opaque_pthread_rwlock_t
+ - __ZN5swift27ReadWriteLockPlatformHelper9writeLockER24_opaque_pthread_rwlock_t
+ - __ZN5swift27ReadWriteLockPlatformHelper13try_writeLockER24_opaque_pthread_rwlock_t
+ - __ZN5swift27ReadWriteLockPlatformHelper10readUnlockER24_opaque_pthread_rwlock_t
+ - __ZN5swift27ReadWriteLockPlatformHelper11writeUnlockER24_opaque_pthread_rwlock_t
+ - __ZN5swift46swift_task_enterThreadLocalContextBackdeploy56EPc
+ - __ZN5swift45swift_task_exitThreadLocalContextBackdeploy56EPc
+ - '__ZZZN5swift46swift_task_enterThreadLocalContextBackdeploy56EPcENK3$_0clEvENUlPvE_8__invokeES2_'
+ - '__ZZZN5swift45swift_task_exitThreadLocalContextBackdeploy56EPcENK3$_0clEvENUlPvE_8__invokeES2_'
+ - ___swift_reflection_version
+ - '_$s14SuggestionsKitMXM'
+ - '_$s17AvailableServicesMXM'
+ - _symbolic _____ 14SuggestionsKit05TrailA0C
+ - _symbolic _____ 17AvailableServicesAAC
+ - _symbolic _____ 17AvailableServices16ServiceRequesterC
+ - _symbolic _____ 17AvailableServices12ServiceRaterC
+ - '_$s14SuggestionsKit05TrailA0CMF'
+ - '_$s17AvailableServicesAACMF'
+ - '_$s17AvailableServices16ServiceRequesterCMF'
+ - '_$s17AvailableServices12ServiceRaterCMF'
+ - '__swift_FORCE_LOAD_$_swiftFoundation_$_SuggestionsKit'
+ - '__swift_FORCE_LOAD_$_swiftObjectiveC_$_SuggestionsKit'
+ - '__swift_FORCE_LOAD_$_swiftDarwin_$_SuggestionsKit'
+ - '__swift_FORCE_LOAD_$_swiftCoreFoundation_$_SuggestionsKit'
+ - '__swift_FORCE_LOAD_$_swiftDispatch_$_SuggestionsKit'
+ - '__swift_FORCE_LOAD_$_swiftXPC_$_SuggestionsKit'
+ - '__swift_FORCE_LOAD_$_swiftIOKit_$_SuggestionsKit'
+ - '__swift_FORCE_LOAD_$_swiftCompatibility56_$_SuggestionsKit'
+ - '__swift_FORCE_LOAD_$_swiftFoundation_$_AvailableServices'
+ - '__swift_FORCE_LOAD_$_swiftObjectiveC_$_AvailableServices'
+ - '__swift_FORCE_LOAD_$_swiftDarwin_$_AvailableServices'
+ - '__swift_FORCE_LOAD_$_swiftCoreFoundation_$_AvailableServices'
+ - '__swift_FORCE_LOAD_$_swiftDispatch_$_AvailableServices'
+ - '__swift_FORCE_LOAD_$_swiftXPC_$_AvailableServices'
+ - '__swift_FORCE_LOAD_$_swiftIOKit_$_AvailableServices'
+ - '__swift_FORCE_LOAD_$_swiftCompatibility56_$_AvailableServices'
+ - '__OBJC_METACLASS_RO_$_PodcastSuggestion'
+ - '__OBJC_CLASS_RO_$_PodcastSuggestion'
+ - '__OBJC_METACLASS_RO_$_Suggestion'
+ - '__OBJC_CLASS_RO_$_Suggestion'
+ - __METACLASS_DATA__TtC14SuggestionsKit16TrailSuggestions
+ - __IVARS__TtC14SuggestionsKit16TrailSuggestions
+ - __DATA__TtC14SuggestionsKit16TrailSuggestions
+ - __METACLASS_DATA__TtC17AvailableServices17AvailableServices
+ - __DATA__TtC17AvailableServices17AvailableServices
+ - __METACLASS_DATA__TtC17AvailableServices16ServiceRequester
+ - __DATA__TtC17AvailableServices16ServiceRequester
+ - __METACLASS_DATA__TtC17AvailableServices12ServiceRater
+ - __DATA__TtC17AvailableServices12ServiceRater
+ - '_$s14SuggestionsKit05TrailA0CMf'
+ - '_$s17AvailableServicesAACMf'
+ - '_$s17AvailableServices16ServiceRequesterCMf'
+ - '_$s17AvailableServices12ServiceRaterCMf'
+ - '__swift_FORCE_LOAD_$_swiftCompatibility56'
+ - _Swift56ConcurrencyOverrides
+ - _Swift56RuntimeOverrides
+ - __ZN5swift25TaskAllocatorSlabMetadataE
+ - '__ZZZN5swift31swift_task_escalateBackdeploy56EPNS_9AsyncTaskENS_11JobPriorityEENK3$_0clEvE7TheLazy'
+ - __ZN5swiftL20StatusRecordLockLockE
+ - __ZL23voucherDisableCheckOnce
+ - __ZL16vouchersDisabled
+ - __ZZZL25swift_voucher_needs_adoptP9voucher_sENKUlvE_clEvE7TheLazy
+ - '__ZZZN5swift19_swift_tsan_acquireEPvENK3$_0clEvE7TheLazy'
+ - '__ZZZN5swift19_swift_tsan_releaseEPvENK3$_0clEvE7TheLazy'
+ - '__ZZZN5swift46swift_task_enterThreadLocalContextBackdeploy56EPcENK3$_0clEvE7TheLazy'
+ - '__ZZZN5swift45swift_task_exitThreadLocalContextBackdeploy56EPcENK3$_0clEvE7TheLazy'
+ - '/Users/cishida/Library/Developer/Xcode/DerivedData/SuggestionsKit-cqcvpwifregfbkgcgfkoxwikfhff/Build/Intermediates.noindex/InstallIntermediates/macosx/Intermediates.noindex/SuggestionsKit.build/Debug/SuggestionsKit.build/Objects-normal/x86_64/SuggestionsKit.swiftmodule'
+ - '/Users/cishida/Library/Developer/Xcode/DerivedData/SuggestionsKit-cqcvpwifregfbkgcgfkoxwikfhff/Build/Intermediates.noindex/InstallIntermediates/macosx/Intermediates.noindex/SuggestionsKit.build/Debug/AvailableServices.build/Objects-normal/x86_64/AvailableServices.swiftmodule'
+ - '/Users/cishida/Library/Developer/Xcode/DerivedData/SuggestionsKit-cqcvpwifregfbkgcgfkoxwikfhff/Build/Intermediates.noindex/InstallIntermediates/macosx/Intermediates.noindex/SuggestionsKit.build/Debug/SuggestionsKit.build/DerivedSources/'
+ - SuggestionsKit_vers.c
+ - '/Users/cishida/Library/Developer/Xcode/DerivedData/SuggestionsKit-cqcvpwifregfbkgcgfkoxwikfhff/Build/Intermediates.noindex/InstallIntermediates/macosx/Intermediates.noindex/SuggestionsKit.build/Debug/SuggestionsKit.build/Objects-normal/x86_64/SuggestionsKit_vers.o'
+ - _SuggestionsKitVersionString
+ - _SuggestionsKitVersionNumber
+ - '/Users/cishida/Projects/suggestionskit/SuggestionsKit/'
+ - PodcastSuggestion.m
+ - '/Users/cishida/Library/Developer/Xcode/DerivedData/SuggestionsKit-cqcvpwifregfbkgcgfkoxwikfhff/Build/Intermediates.noindex/InstallIntermediates/macosx/Intermediates.noindex/SuggestionsKit.build/Debug/SuggestionsKit.build/Objects-normal/x86_64/PodcastSuggestion.o'
+ - '__OBJC_METACLASS_RO_$_PodcastSuggestion'
+ - '__OBJC_CLASS_RO_$_PodcastSuggestion'
+ - '_OBJC_METACLASS_$_PodcastSuggestion'
+ - '_OBJC_CLASS_$_PodcastSuggestion'
+ - '/Users/cishida/Projects/suggestionskit/SuggestionsKit/'
+ - PrivateHelpers.m
+ - '/Users/cishida/Library/Developer/Xcode/DerivedData/SuggestionsKit-cqcvpwifregfbkgcgfkoxwikfhff/Build/Intermediates.noindex/InstallIntermediates/macosx/Intermediates.noindex/SuggestionsKit.build/Debug/SuggestionsKit.build/Objects-normal/x86_64/PrivateHelpers.o'
+ - _setupTestSuggestionService
+ - _teardownTestSuggestionService
+ - _launchOnTestApps
+ - '/Users/cishida/Projects/suggestionskit/SuggestionsKit/'
+ - Suggestion.m
+ - '/Users/cishida/Library/Developer/Xcode/DerivedData/SuggestionsKit-cqcvpwifregfbkgcgfkoxwikfhff/Build/Intermediates.noindex/InstallIntermediates/macosx/Intermediates.noindex/SuggestionsKit.build/Debug/SuggestionsKit.build/Objects-normal/x86_64/Suggestion.o'
+ - '__OBJC_METACLASS_RO_$_Suggestion'
+ - '__OBJC_CLASS_RO_$_Suggestion'
+ - '_OBJC_METACLASS_$_Suggestion'
+ - '_OBJC_CLASS_$_Suggestion'
+ - '/Users/cishida/Projects/suggestionskit/SuggestionsKit/'
+ - TrailSuggestions.swift
+ - '/Users/cishida/Library/Developer/Xcode/DerivedData/SuggestionsKit-cqcvpwifregfbkgcgfkoxwikfhff/Build/Intermediates.noindex/InstallIntermediates/macosx/Intermediates.noindex/SuggestionsKit.build/Debug/SuggestionsKit.build/Objects-normal/x86_64/TrailSuggestions.o'
+ - '_$s14SuggestionsKit05TrailA0C14activeServices09AvailableE0AECvpfi'
+ - '_$s14SuggestionsKit05TrailA0C14activeServices09AvailableE0AECvpACTK'
+ - '_$s14SuggestionsKit05TrailA0C14activeServices09AvailableE0AECvpACTk'
+ - '_$s14SuggestionsKit05TrailA0C14activeServices09AvailableE0AECvg'
+ - '_$s14SuggestionsKit05TrailA0C14activeServices09AvailableE0AECvs'
+ - '_$s14SuggestionsKit05TrailA0C14activeServices09AvailableE0AECvM'
+ - '_$s14SuggestionsKit05TrailA0C14activeServices09AvailableE0AECvM.resume.0'
+ - '_$s14SuggestionsKit05TrailA0Cfd'
+ - '_$s14SuggestionsKit05TrailA0CfD'
+ - '_$s14SuggestionsKit05TrailA0CACycfC'
+ - '_$s14SuggestionsKit05TrailA0CACycfc'
+ - '_$s14SuggestionsKit05TrailA0CMa'
+ - '_$s14SuggestionsKit05TrailA0C14activeServices09AvailableE0AECvpWvd'
+ - ___swift_reflection_version
+ - '_$s14SuggestionsKitMXM'
+ - '_$s14SuggestionsKit05TrailA0CMn'
+ - '_$s14SuggestionsKit05TrailA0C14activeServices09AvailableE0AECvgTq'
+ - '_$s14SuggestionsKit05TrailA0C14activeServices09AvailableE0AECvsTq'
+ - '_$s14SuggestionsKit05TrailA0C14activeServices09AvailableE0AECvMTq'
+ - '_$s14SuggestionsKit05TrailA0CACycfCTq'
+ - _symbolic _____ 14SuggestionsKit05TrailA0C
+ - _symbolic _____ 17AvailableServicesAAC
+ - '_$s14SuggestionsKit05TrailA0CMF'
+ - '_$s14SuggestionsKit05TrailA0C14activeServices09AvailableE0AECvpMV'
+ - '__swift_FORCE_LOAD_$_swiftFoundation_$_SuggestionsKit'
+ - '__swift_FORCE_LOAD_$_swiftObjectiveC_$_SuggestionsKit'
+ - '__swift_FORCE_LOAD_$_swiftDarwin_$_SuggestionsKit'
+ - '__swift_FORCE_LOAD_$_swiftCoreFoundation_$_SuggestionsKit'
+ - '__swift_FORCE_LOAD_$_swiftDispatch_$_SuggestionsKit'
+ - '__swift_FORCE_LOAD_$_swiftXPC_$_SuggestionsKit'
+ - '__swift_FORCE_LOAD_$_swiftIOKit_$_SuggestionsKit'
+ - '__swift_FORCE_LOAD_$_swiftCompatibility56_$_SuggestionsKit'
+ - __METACLASS_DATA__TtC14SuggestionsKit16TrailSuggestions
+ - __IVARS__TtC14SuggestionsKit16TrailSuggestions
+ - __DATA__TtC14SuggestionsKit16TrailSuggestions
+ - '_$s14SuggestionsKit05TrailA0CMm'
+ - '_$s14SuggestionsKit05TrailA0CMf'
+ - '_$s14SuggestionsKit05TrailA0CN'
+ - '/Users/cishida/Projects/suggestionskit/AvailableServices/'
+ - Services.swift
+ - '/Users/cishida/Library/Developer/Xcode/DerivedData/SuggestionsKit-cqcvpwifregfbkgcgfkoxwikfhff/Build/Intermediates.noindex/InstallIntermediates/macosx/Products/Debug/libAvailableServices.a(Services.o)'
+ - '_$s17AvailableServicesAACABycfC'
+ - '_$s17AvailableServicesAACABycfc'
+ - '_$s17AvailableServicesAAC10getServiceyyF'
+ - '_$s17AvailableServicesAACfd'
+ - '_$s17AvailableServicesAACfD'
+ - '_$s17AvailableServices16ServiceRequesterCACycfC'
+ - '_$s17AvailableServices16ServiceRequesterCACycfc'
+ - '_$s17AvailableServices16ServiceRequesterC10enterQueueyyF'
+ - '_$s17AvailableServices16ServiceRequesterCfd'
+ - '_$s17AvailableServices16ServiceRequesterCfD'
+ - '_$s17AvailableServices12ServiceRaterCACycfC'
+ - '_$s17AvailableServices12ServiceRaterCACycfc'
+ - '_$s17AvailableServices12ServiceRaterC13publishRatingyyF'
+ - '_$s17AvailableServices12ServiceRaterCfd'
+ - '_$s17AvailableServices12ServiceRaterCfD'
+ - '_$s17AvailableServicesAACMa'
+ - '_$s17AvailableServices16ServiceRequesterCMa'
+ - '_$s17AvailableServices12ServiceRaterCMa'
+ - '_$s17AvailableServicesMXM'
+ - '_$s17AvailableServicesAACMn'
+ - '_$s17AvailableServicesAACABycfCTq'
+ - '_$s17AvailableServicesAAC10getServiceyyFTq'
+ - '_$s17AvailableServices16ServiceRequesterCMn'
+ - '_$s17AvailableServices16ServiceRequesterCACycfCTq'
+ - '_$s17AvailableServices16ServiceRequesterC10enterQueueyyFTq'
+ - '_$s17AvailableServices12ServiceRaterCMn'
+ - '_$s17AvailableServices12ServiceRaterCACycfCTq'
+ - '_$s17AvailableServices12ServiceRaterC13publishRatingyyFTq'
+ - _symbolic _____ 17AvailableServices16ServiceRequesterC
+ - _symbolic _____ 17AvailableServices12ServiceRaterC
+ - '_$s17AvailableServicesAACMF'
+ - '_$s17AvailableServices16ServiceRequesterCMF'
+ - '_$s17AvailableServices12ServiceRaterCMF'
+ - '__swift_FORCE_LOAD_$_swiftFoundation_$_AvailableServices'
+ - '__swift_FORCE_LOAD_$_swiftObjectiveC_$_AvailableServices'
+ - '__swift_FORCE_LOAD_$_swiftDarwin_$_AvailableServices'
+ - '__swift_FORCE_LOAD_$_swiftCoreFoundation_$_AvailableServices'
+ - '__swift_FORCE_LOAD_$_swiftDispatch_$_AvailableServices'
+ - '__swift_FORCE_LOAD_$_swiftXPC_$_AvailableServices'
+ - '__swift_FORCE_LOAD_$_swiftIOKit_$_AvailableServices'
+ - '__swift_FORCE_LOAD_$_swiftCompatibility56_$_AvailableServices'
+ - __METACLASS_DATA__TtC17AvailableServices17AvailableServices
+ - __DATA__TtC17AvailableServices17AvailableServices
+ - __METACLASS_DATA__TtC17AvailableServices16ServiceRequester
+ - __DATA__TtC17AvailableServices16ServiceRequester
+ - __METACLASS_DATA__TtC17AvailableServices12ServiceRater
+ - __DATA__TtC17AvailableServices12ServiceRater
+ - '_$s17AvailableServicesAACMm'
+ - '_$s17AvailableServicesAACMf'
+ - '_$s17AvailableServicesAACN'
+ - '_$s17AvailableServices16ServiceRequesterCMm'
+ - '_$s17AvailableServices16ServiceRequesterCMf'
+ - '_$s17AvailableServices16ServiceRequesterCN'
+ - '_$s17AvailableServices12ServiceRaterCMm'
+ - '_$s17AvailableServices12ServiceRaterCMf'
+ - '_$s17AvailableServices12ServiceRaterCN'
+ - ''
+ - ''
+ - ''
+ - ''
+ IndirectSymbols: [ 0x19A, 0x19B, 0x1A4, 0x1A5, 0x1A6, 0x1A7, 0x1A8, 0x1A9,
+ 0x1AA, 0x1AB, 0x1AC, 0x1AD, 0x1AE, 0x1AF, 0x1B0, 0x1B1,
+ 0x1B2, 0x1B3, 0x1B4, 0x1B5, 0x1B6, 0x1B7, 0x1B8, 0x1B9,
+ 0x1BA, 0x1BB, 0x1BC, 0x1BD, 0x1BE, 0x1BF, 0x1C0, 0x1C1,
+ 0x1C2, 0x1C3, 0x1C4, 0x1C5, 0x1C6, 0x1C7, 0x1C8, 0x1C9,
+ 0x1CA, 0x1CB, 0x80000000, 0x19A, 0x19B, 0x1A4, 0x1A5,
+ 0x1A6, 0x1A7, 0x1A8, 0x1A9, 0x1AA, 0x1AB, 0x1AC, 0x1AD,
+ 0x1AE, 0x1AF, 0x1B0, 0x1B1, 0x1B2, 0x1B3, 0x1B4, 0x1B5,
+ 0x1B6, 0x1B7, 0x1B8, 0x1B9, 0x1BA, 0x1BB, 0x1BC, 0x1BD,
+ 0x1BE, 0x1BF, 0x1C0, 0x1C1, 0x1C2, 0x1C3, 0x1C4, 0x1C5,
+ 0x1C6, 0x1C7, 0x1C8, 0x1C9, 0x1CA, 0x1CB ]
+ FunctionStarts: [ 0x1B30, 0x1B40, 0x1B50, 0x1B60, 0x1B80, 0x1BD0, 0x1C40,
+ 0x1C90, 0x1CF0, 0x1D30, 0x1D60, 0x1D90, 0x1DD0, 0x1E00,
+ 0x1E40, 0x1E60, 0x1E90, 0x1EB0, 0x1ED0, 0x1EF0, 0x1F30,
+ 0x1F60, 0x1F80, 0x1FA0, 0x1FC0, 0x2000, 0x2030, 0x2050,
+ 0x2070, 0x2090, 0x20D0, 0x20F0, 0x2110, 0x2130, 0x2370,
+ 0x2460, 0x2490, 0x25A0, 0x25D0, 0x25F0, 0x2780, 0x2920,
+ 0x2970, 0x29A0, 0x2AC0, 0x2AD0, 0x2AE0, 0x2B10, 0x2B40,
+ 0x2BE0, 0x2C10, 0x2C50, 0x2D10, 0x2D40, 0x2D90, 0x2DE0,
+ 0x2E10, 0x2E40, 0x2E80, 0x2F60, 0x2FA0, 0x2FE0, 0x3020,
+ 0x3060, 0x3140, 0x3180, 0x31C0, 0x3200, 0x3250, 0x3260,
+ 0x3270, 0x3280, 0x3290, 0x32A0, 0x32E0, 0x3320, 0x3360,
+ 0x33B0, 0x33F0, 0x3440, 0x3480, 0x34C0, 0x3510, 0x3560,
+ 0x3590 ]
+ ChainedFixups: [ 0x0, 0x0, 0x0, 0x0, 0x20, 0x0, 0x0, 0x0, 0x68, 0x0,
+ 0x0, 0x0, 0x28, 0x1, 0x0, 0x0, 0x30, 0x0, 0x0, 0x0,
+ 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x18, 0x0, 0x0, 0x0, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x18, 0x0, 0x0, 0x0,
+ 0x0, 0x10, 0x6, 0x0, 0x0, 0x40, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0,
+ 0x18, 0x0, 0x0, 0x0, 0x0, 0x10, 0x6, 0x0, 0x0, 0x50,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x1, 0x0, 0x0, 0x0, 0xFD, 0x2, 0x0, 0x0, 0xFD, 0x12,
+ 0x0, 0x0, 0x4, 0x20, 0x0, 0x0, 0x2, 0x6C, 0x0, 0x0,
+ 0x2, 0x7A, 0x0, 0x0, 0x2, 0x9C, 0x0, 0x0, 0x1, 0xAA,
+ 0x0, 0x0, 0x2, 0xC9, 0x0, 0x0, 0x2, 0xE1, 0x0, 0x0,
+ 0x2, 0xB, 0x1, 0x0, 0x2, 0x3B, 0x1, 0x0, 0x2, 0x68,
+ 0x1, 0x0, 0x2, 0x98, 0x1, 0x0, 0x2, 0xC4, 0x1, 0x0,
+ 0x2, 0xEA, 0x1, 0x0, 0x2, 0x14, 0x2, 0x0, 0x2, 0x3A,
+ 0x2, 0x0, 0x2, 0x64, 0x2, 0x0, 0x2, 0x92, 0x2, 0x0,
+ 0x2, 0xBA, 0x2, 0x0, 0x2, 0xE2, 0x2, 0x0, 0x2, 0x10,
+ 0x3, 0x0, 0x2, 0x3C, 0x3, 0x0, 0x2, 0x72, 0x3, 0x0,
+ 0x2, 0xA2, 0x3, 0x0, 0x2, 0xD8, 0x3, 0x0, 0x2, 0x8,
+ 0x4, 0x0, 0x2, 0x32, 0x4, 0x0, 0x2, 0x60, 0x4, 0x0,
+ 0x2, 0x94, 0x4, 0x0, 0x2, 0xC8, 0x4, 0x0, 0x2, 0xF6,
+ 0x4, 0x0, 0x2, 0x24, 0x5, 0x0, 0x4, 0x4E, 0x5, 0x0,
+ 0x4, 0x74, 0x5, 0x0, 0x4, 0x9A, 0x5, 0x0, 0x4, 0xD2,
+ 0x5, 0x0, 0x4, 0xF4, 0x5, 0x0, 0x4, 0x1A, 0x6, 0x0,
+ 0x4, 0x32, 0x6, 0x0, 0x4, 0x50, 0x6, 0x0, 0x2, 0x6D,
+ 0x6, 0x0, 0x1, 0x8A, 0x6, 0x0, 0x1, 0xB0, 0x6, 0x0,
+ 0x1, 0xE6, 0x6, 0x0, 0x4, 0x14, 0x7, 0x0, 0x4, 0x60,
+ 0x7, 0x0, 0x4, 0x70, 0x7, 0x0, 0x0, 0x5F, 0x5F, 0x5A,
+ 0x64, 0x6C, 0x50, 0x76, 0x0, 0x5F, 0x5F, 0x5A, 0x6E,
+ 0x77, 0x6D, 0x0, 0x5F, 0x5F, 0x73, 0x77, 0x69, 0x66,
+ 0x74, 0x5F, 0x73, 0x74, 0x64, 0x6C, 0x69, 0x62, 0x5F,
+ 0x6F, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6E, 0x67,
+ 0x53, 0x79, 0x73, 0x74, 0x65, 0x6D, 0x56, 0x65, 0x72,
+ 0x73, 0x69, 0x6F, 0x6E, 0x0, 0x5F, 0x61, 0x62, 0x6F,
+ 0x72, 0x74, 0x0, 0x5F, 0x64, 0x69, 0x73, 0x70, 0x61,
+ 0x74, 0x63, 0x68, 0x5F, 0x6F, 0x6E, 0x63, 0x65, 0x5F,
+ 0x66, 0x0, 0x5F, 0x64, 0x6C, 0x73, 0x79, 0x6D, 0x0,
+ 0x5F, 0x6F, 0x62, 0x6A, 0x63, 0x5F, 0x6F, 0x70, 0x74,
+ 0x5F, 0x73, 0x65, 0x6C, 0x66, 0x0, 0x5F, 0x6F, 0x73,
+ 0x5F, 0x72, 0x65, 0x6C, 0x65, 0x61, 0x73, 0x65, 0x0,
+ 0x5F, 0x6F, 0x73, 0x5F, 0x75, 0x6E, 0x66, 0x61, 0x69,
+ 0x72, 0x5F, 0x6C, 0x6F, 0x63, 0x6B, 0x5F, 0x6C, 0x6F,
+ 0x63, 0x6B, 0x0, 0x5F, 0x6F, 0x73, 0x5F, 0x75, 0x6E,
+ 0x66, 0x61, 0x69, 0x72, 0x5F, 0x6C, 0x6F, 0x63, 0x6B,
+ 0x5F, 0x74, 0x72, 0x79, 0x6C, 0x6F, 0x63, 0x6B, 0x0,
+ 0x5F, 0x6F, 0x73, 0x5F, 0x75, 0x6E, 0x66, 0x61, 0x69,
+ 0x72, 0x5F, 0x6C, 0x6F, 0x63, 0x6B, 0x5F, 0x75, 0x6E,
+ 0x6C, 0x6F, 0x63, 0x6B, 0x0, 0x5F, 0x70, 0x74, 0x68,
+ 0x72, 0x65, 0x61, 0x64, 0x5F, 0x63, 0x6F, 0x6E, 0x64,
+ 0x5F, 0x62, 0x72, 0x6F, 0x61, 0x64, 0x63, 0x61, 0x73,
+ 0x74, 0x0, 0x5F, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61,
+ 0x64, 0x5F, 0x63, 0x6F, 0x6E, 0x64, 0x5F, 0x64, 0x65,
+ 0x73, 0x74, 0x72, 0x6F, 0x79, 0x0, 0x5F, 0x70, 0x74,
+ 0x68, 0x72, 0x65, 0x61, 0x64, 0x5F, 0x63, 0x6F, 0x6E,
+ 0x64, 0x5F, 0x69, 0x6E, 0x69, 0x74, 0x0, 0x5F, 0x70,
+ 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x5F, 0x63, 0x6F,
+ 0x6E, 0x64, 0x5F, 0x73, 0x69, 0x67, 0x6E, 0x61, 0x6C,
+ 0x0, 0x5F, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64,
+ 0x5F, 0x63, 0x6F, 0x6E, 0x64, 0x5F, 0x77, 0x61, 0x69,
+ 0x74, 0x0, 0x5F, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61,
+ 0x64, 0x5F, 0x67, 0x65, 0x74, 0x73, 0x70, 0x65, 0x63,
+ 0x69, 0x66, 0x69, 0x63, 0x0, 0x5F, 0x70, 0x74, 0x68,
+ 0x72, 0x65, 0x61, 0x64, 0x5F, 0x6D, 0x75, 0x74, 0x65,
+ 0x78, 0x5F, 0x64, 0x65, 0x73, 0x74, 0x72, 0x6F, 0x79,
+ 0x0, 0x5F, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64,
+ 0x5F, 0x6D, 0x75, 0x74, 0x65, 0x78, 0x5F, 0x69, 0x6E,
+ 0x69, 0x74, 0x0, 0x5F, 0x70, 0x74, 0x68, 0x72, 0x65,
+ 0x61, 0x64, 0x5F, 0x6D, 0x75, 0x74, 0x65, 0x78, 0x5F,
+ 0x6C, 0x6F, 0x63, 0x6B, 0x0, 0x5F, 0x70, 0x74, 0x68,
+ 0x72, 0x65, 0x61, 0x64, 0x5F, 0x6D, 0x75, 0x74, 0x65,
+ 0x78, 0x5F, 0x74, 0x72, 0x79, 0x6C, 0x6F, 0x63, 0x6B,
+ 0x0, 0x5F, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64,
+ 0x5F, 0x6D, 0x75, 0x74, 0x65, 0x78, 0x5F, 0x75, 0x6E,
+ 0x6C, 0x6F, 0x63, 0x6B, 0x0, 0x5F, 0x70, 0x74, 0x68,
+ 0x72, 0x65, 0x61, 0x64, 0x5F, 0x6D, 0x75, 0x74, 0x65,
+ 0x78, 0x61, 0x74, 0x74, 0x72, 0x5F, 0x64, 0x65, 0x73,
+ 0x74, 0x72, 0x6F, 0x79, 0x0, 0x5F, 0x70, 0x74, 0x68,
+ 0x72, 0x65, 0x61, 0x64, 0x5F, 0x6D, 0x75, 0x74, 0x65,
+ 0x78, 0x61, 0x74, 0x74, 0x72, 0x5F, 0x69, 0x6E, 0x69,
+ 0x74, 0x0, 0x5F, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61,
+ 0x64, 0x5F, 0x6D, 0x75, 0x74, 0x65, 0x78, 0x61, 0x74,
+ 0x74, 0x72, 0x5F, 0x73, 0x65, 0x74, 0x74, 0x79, 0x70,
+ 0x65, 0x0, 0x5F, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61,
+ 0x64, 0x5F, 0x72, 0x77, 0x6C, 0x6F, 0x63, 0x6B, 0x5F,
+ 0x64, 0x65, 0x73, 0x74, 0x72, 0x6F, 0x79, 0x0, 0x5F,
+ 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x5F, 0x72,
+ 0x77, 0x6C, 0x6F, 0x63, 0x6B, 0x5F, 0x69, 0x6E, 0x69,
+ 0x74, 0x0, 0x5F, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61,
+ 0x64, 0x5F, 0x72, 0x77, 0x6C, 0x6F, 0x63, 0x6B, 0x5F,
+ 0x72, 0x64, 0x6C, 0x6F, 0x63, 0x6B, 0x0, 0x5F, 0x70,
+ 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x5F, 0x72, 0x77,
+ 0x6C, 0x6F, 0x63, 0x6B, 0x5F, 0x74, 0x72, 0x79, 0x72,
+ 0x64, 0x6C, 0x6F, 0x63, 0x6B, 0x0, 0x5F, 0x70, 0x74,
+ 0x68, 0x72, 0x65, 0x61, 0x64, 0x5F, 0x72, 0x77, 0x6C,
+ 0x6F, 0x63, 0x6B, 0x5F, 0x74, 0x72, 0x79, 0x77, 0x72,
+ 0x6C, 0x6F, 0x63, 0x6B, 0x0, 0x5F, 0x70, 0x74, 0x68,
+ 0x72, 0x65, 0x61, 0x64, 0x5F, 0x72, 0x77, 0x6C, 0x6F,
+ 0x63, 0x6B, 0x5F, 0x75, 0x6E, 0x6C, 0x6F, 0x63, 0x6B,
+ 0x0, 0x5F, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64,
+ 0x5F, 0x72, 0x77, 0x6C, 0x6F, 0x63, 0x6B, 0x5F, 0x77,
+ 0x72, 0x6C, 0x6F, 0x63, 0x6B, 0x0, 0x5F, 0x70, 0x74,
+ 0x68, 0x72, 0x65, 0x61, 0x64, 0x5F, 0x73, 0x65, 0x74,
+ 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x0,
+ 0x5F, 0x73, 0x77, 0x69, 0x66, 0x74, 0x5F, 0x61, 0x6C,
+ 0x6C, 0x6F, 0x63, 0x4F, 0x62, 0x6A, 0x65, 0x63, 0x74,
+ 0x0, 0x5F, 0x73, 0x77, 0x69, 0x66, 0x74, 0x5F, 0x62,
+ 0x65, 0x67, 0x69, 0x6E, 0x41, 0x63, 0x63, 0x65, 0x73,
+ 0x73, 0x0, 0x5F, 0x73, 0x77, 0x69, 0x66, 0x74, 0x5F,
+ 0x64, 0x65, 0x61, 0x6C, 0x6C, 0x6F, 0x63, 0x43, 0x6C,
+ 0x61, 0x73, 0x73, 0x49, 0x6E, 0x73, 0x74, 0x61, 0x6E,
+ 0x63, 0x65, 0x0, 0x5F, 0x73, 0x77, 0x69, 0x66, 0x74,
+ 0x5F, 0x65, 0x6E, 0x64, 0x41, 0x63, 0x63, 0x65, 0x73,
+ 0x73, 0x0, 0x5F, 0x73, 0x77, 0x69, 0x66, 0x74, 0x5F,
+ 0x65, 0x72, 0x72, 0x6F, 0x72, 0x52, 0x65, 0x74, 0x61,
+ 0x69, 0x6E, 0x0, 0x5F, 0x73, 0x77, 0x69, 0x66, 0x74,
+ 0x5F, 0x6F, 0x6E, 0x63, 0x65, 0x0, 0x5F, 0x73, 0x77,
+ 0x69, 0x66, 0x74, 0x5F, 0x72, 0x65, 0x6C, 0x65, 0x61,
+ 0x73, 0x65, 0x0, 0x5F, 0x73, 0x77, 0x69, 0x66, 0x74,
+ 0x5F, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6E, 0x0, 0x5F,
+ 0x76, 0x6F, 0x75, 0x63, 0x68, 0x65, 0x72, 0x5F, 0x61,
+ 0x64, 0x6F, 0x70, 0x74, 0x0, 0x5F, 0x5F, 0x6F, 0x62,
+ 0x6A, 0x63, 0x5F, 0x65, 0x6D, 0x70, 0x74, 0x79, 0x5F,
+ 0x63, 0x61, 0x63, 0x68, 0x65, 0x0, 0x5F, 0x4F, 0x42,
+ 0x4A, 0x43, 0x5F, 0x4D, 0x45, 0x54, 0x41, 0x43, 0x4C,
+ 0x41, 0x53, 0x53, 0x5F, 0x24, 0x5F, 0x4E, 0x53, 0x4F,
+ 0x62, 0x6A, 0x65, 0x63, 0x74, 0x0, 0x5F, 0x4F, 0x42,
+ 0x4A, 0x43, 0x5F, 0x43, 0x4C, 0x41, 0x53, 0x53, 0x5F,
+ 0x24, 0x5F, 0x4E, 0x53, 0x4F, 0x62, 0x6A, 0x65, 0x63,
+ 0x74, 0x0, 0x5F, 0x4F, 0x42, 0x4A, 0x43, 0x5F, 0x4D,
+ 0x45, 0x54, 0x41, 0x43, 0x4C, 0x41, 0x53, 0x53, 0x5F,
+ 0x24, 0x5F, 0x5F, 0x54, 0x74, 0x43, 0x73, 0x31, 0x32,
+ 0x5F, 0x53, 0x77, 0x69, 0x66, 0x74, 0x4F, 0x62, 0x6A,
+ 0x65, 0x63, 0x74, 0x0, 0x5F, 0x24, 0x73, 0x42, 0x6F,
+ 0x57, 0x56, 0x0, 0x5F, 0x4F, 0x42, 0x4A, 0x43, 0x5F,
+ 0x43, 0x4C, 0x41, 0x53, 0x53, 0x5F, 0x24, 0x5F, 0x5F,
+ 0x54, 0x74, 0x43, 0x73, 0x31, 0x32, 0x5F, 0x53, 0x77,
+ 0x69, 0x66, 0x74, 0x4F, 0x62, 0x6A, 0x65, 0x63, 0x74,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 ]
+ DataInCode:
+ - Offset: 0x2ED4
+ Length: 140
+ Kind: 0x4
+...
diff --git a/llvm/test/tools/llvm-readtapi/Inputs/objc.yaml b/llvm/test/tools/llvm-readtapi/Inputs/objc.yaml
new file mode 100644
index 00000000000000..50219ab1fefb39
--- /dev/null
+++ b/llvm/test/tools/llvm-readtapi/Inputs/objc.yaml
@@ -0,0 +1,692 @@
+--- !mach-o
+FileHeader:
+ magic: 0xFEEDFACF
+ cputype: 0x100000C
+ cpusubtype: 0x0
+ filetype: 0x6
+ ncmds: 16
+ sizeofcmds: 1912
+ flags: 0x100085
+ reserved: 0x0
+LoadCommands:
+ - cmd: LC_SEGMENT_64
+ cmdsize: 552
+ segname: __TEXT
+ vmaddr: 0
+ vmsize: 16384
+ fileoff: 0
+ filesize: 16384
+ maxprot: 5
+ initprot: 5
+ nsects: 6
+ flags: 0
+ Sections:
+ - sectname: __text
+ segname: __TEXT
+ addr: 0x7B8
+ size: 44
+ offset: 0x7B8
+ align: 2
+ reloff: 0x0
+ nreloc: 0
+ flags: 0x80000400
+ reserved1: 0x0
+ reserved2: 0x0
+ reserved3: 0x0
+ content: FF8300D1FD7B01A9FD430091E00700F9E10300F9E80740F90041009104000094FD7B41A9FF830091C0035FD6
+ - sectname: __stubs
+ segname: __TEXT
+ addr: 0x7E4
+ size: 12
+ offset: 0x7E4
+ align: 2
+ reloff: 0x0
+ nreloc: 0
+ flags: 0x80000408
+ reserved1: 0x1
+ reserved2: 0xC
+ reserved3: 0x0
+ content: 50000090100240F900021FD6
+ - sectname: __stub_helper
+ segname: __TEXT
+ addr: 0x7F0
+ size: 36
+ offset: 0x7F0
+ align: 2
+ reloff: 0x0
+ nreloc: 0
+ flags: 0x80000400
+ reserved1: 0x0
+ reserved2: 0x0
+ reserved3: 0x0
+ content: 5100009031220091F047BFA930000090100240F900021FD650000018F9FFFF1700000000
+ - sectname: __cstring
+ segname: __TEXT
+ addr: 0x814
+ size: 35
+ offset: 0x814
+ align: 0
+ reloff: 0x0
+ nreloc: 0
+ flags: 0x2
+ reserved1: 0x0
+ reserved2: 0x0
+ reserved3: 0x0
+ content: 53756767657374696F6E00110076313640303A3800420040224E53537472696E672200
+ - sectname: __objc_methname
+ segname: __TEXT
+ addr: 0x837
+ size: 32
+ offset: 0x837
+ align: 0
+ reloff: 0x0
+ nreloc: 0
+ flags: 0x2
+ reserved1: 0x0
+ reserved2: 0x0
+ reserved3: 0x0
+ content: 2E6378785F6465737472756374005F746F7043686F696365005F6F7468657200
+ - sectname: __unwind_info
+ segname: __TEXT
+ addr: 0x858
+ size: 4152
+ offset: 0x858
+ align: 2
+ reloff: 0x0
+ nreloc: 0
+ flags: 0x0
+ reserved1: 0x0
+ reserved2: 0x0
+ reserved3: 0x0
+ content: 010000001C000000010000002000000000000000200000000200000000000004B80700003800000038000000E40700000000000038000000030000000C0001001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+ - cmd: LC_SEGMENT_64
+ cmdsize: 312
+ segname: __DATA_CONST
+ vmaddr: 16384
+ vmsize: 16384
+ fileoff: 16384
+ filesize: 16384
+ maxprot: 3
+ initprot: 3
+ nsects: 3
+ flags: 16
+ Sections:
+ - sectname: __got
+ segname: __DATA_CONST
+ addr: 0x4000
+ size: 8
+ offset: 0x4000
+ align: 3
+ reloff: 0x0
+ nreloc: 0
+ flags: 0x6
+ reserved1: 0x0
+ reserved2: 0x0
+ reserved3: 0x0
+ content: '0000000000000000'
+ - sectname: __objc_classlist
+ segname: __DATA_CONST
+ addr: 0x4008
+ size: 8
+ offset: 0x4008
+ align: 3
+ reloff: 0x0
+ nreloc: 0
+ flags: 0x10000000
+ reserved1: 0x0
+ reserved2: 0x0
+ reserved3: 0x0
+ content: '3081000000000000'
+ - sectname: __objc_imageinfo
+ segname: __DATA_CONST
+ addr: 0x4010
+ size: 8
+ offset: 0x4010
+ align: 0
+ reloff: 0x0
+ nreloc: 0
+ flags: 0x0
+ reserved1: 0x0
+ reserved2: 0x0
+ reserved3: 0x0
+ content: '0000000040000000'
+ - cmd: LC_SEGMENT_64
+ cmdsize: 472
+ segname: __DATA
+ vmaddr: 32768
+ vmsize: 16384
+ fileoff: 32768
+ filesize: 16384
+ maxprot: 3
+ initprot: 3
+ nsects: 5
+ flags: 0
+ Sections:
+ - sectname: __la_symbol_ptr
+ segname: __DATA
+ addr: 0x8000
+ size: 8
+ offset: 0x8000
+ align: 3
+ reloff: 0x0
+ nreloc: 0
+ flags: 0x7
+ reserved1: 0x2
+ reserved2: 0x0
+ reserved3: 0x0
+ content: '0808000000000000'
+ - sectname: __data
+ segname: __DATA
+ addr: 0x8008
+ size: 8
+ offset: 0x8008
+ align: 3
+ reloff: 0x0
+ nreloc: 0
+ flags: 0x0
+ reserved1: 0x0
+ reserved2: 0x0
+ reserved3: 0x0
+ content: '0000000000000000'
+ - sectname: __objc_const
+ segname: __DATA
+ addr: 0x8010
+ size: 248
+ offset: 0x8010
+ align: 3
+ reloff: 0x0
+ nreloc: 0
+ flags: 0x0
+ reserved1: 0x0
+ reserved2: 0x0
+ reserved3: 0x0
+ content: 850100002800000028000000000000000000000000000000140800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000180000000100000037080000000000002108000000000000B807000000000000200000000200000058810000000000004508000000000000290800000000000000000000010000005C8100000000000050080000000000002B08000000000000030000000800000084010000080000001800000000000000000000000000000014080000000000005880000000000000000000000000000078800000000000001F080000000000000000000000000000
+ - sectname: __objc_data
+ segname: __DATA
+ addr: 0x8108
+ size: 80
+ offset: 0x8108
+ align: 3
+ reloff: 0x0
+ nreloc: 0
+ flags: 0x0
+ reserved1: 0x0
+ reserved2: 0x0
+ reserved3: 0x0
+ content: 000000000000000000000000000000000000000000000000000000000000000010800000000000000881000000000000000000000000000000000000000000000000000000000000C080000000000000
+ - sectname: __objc_ivar
+ segname: __DATA
+ addr: 0x8158
+ size: 8
+ offset: 0x8158
+ align: 2
+ reloff: 0x0
+ nreloc: 0
+ flags: 0x0
+ reserved1: 0x0
+ reserved2: 0x0
+ reserved3: 0x0
+ content: '0800000010000000'
+ - cmd: LC_SEGMENT_64
+ cmdsize: 72
+ segname: __LINKEDIT
+ vmaddr: 49152
+ vmsize: 2336
+ fileoff: 49152
+ filesize: 2336
+ maxprot: 1
+ initprot: 1
+ nsects: 0
+ flags: 0
+ - cmd: LC_DYLD_INFO_ONLY
+ cmdsize: 48
+ rebase_off: 49152
+ rebase_size: 24
+ bind_off: 49176
+ bind_size: 128
+ weak_bind_off: 0
+ weak_bind_size: 0
+ lazy_bind_off: 49304
+ lazy_bind_size: 24
+ export_off: 49328
+ export_size: 128
+ - cmd: LC_SYMTAB
+ cmdsize: 24
+ symoff: 49464
+ nsyms: 28
+ stroff: 49928
+ strsize: 1016
+ - cmd: LC_DYSYMTAB
+ cmdsize: 80
+ ilocalsym: 0
+ nlocalsym: 19
+ iextdefsym: 19
+ nextdefsym: 4
+ iundefsym: 23
+ nundefsym: 5
+ tocoff: 0
+ ntoc: 0
+ modtaboff: 0
+ nmodtab: 0
+ extrefsymoff: 0
+ nextrefsyms: 0
+ indirectsymoff: 49912
+ nindirectsyms: 3
+ extreloff: 0
+ nextrel: 0
+ locreloff: 0
+ nlocrel: 0
+ - cmd: LC_ID_DYLIB
+ cmdsize: 40
+ dylib:
+ name: 24
+ timestamp: 0
+ current_version: 0
+ compatibility_version: 0
+ Content: tmp.dylib
+ ZeroPadBytes: 7
+ - cmd: LC_UUID
+ cmdsize: 24
+ uuid: 4C4C44F3-5555-3144-A1E7-371E4713DEDE
+ - cmd: LC_BUILD_VERSION
+ cmdsize: 32
+ platform: 1
+ minos: 851968
+ sdk: 983040
+ ntools: 1
+ Tools:
+ - tool: 4
+ version: 1179648
+ - cmd: LC_LOAD_DYLIB
+ cmdsize: 96
+ dylib:
+ name: 24
+ timestamp: 0
+ current_version: 197001216
+ compatibility_version: 19660800
+ Content: '/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation'
+ ZeroPadBytes: 3
+ - cmd: LC_LOAD_DYLIB
+ cmdsize: 56
+ dylib:
+ name: 24
+ timestamp: 0
+ current_version: 14942208
+ compatibility_version: 65536
+ Content: '/usr/lib/libobjc.A.dylib'
+ ZeroPadBytes: 8
+ - cmd: LC_LOAD_DYLIB
+ cmdsize: 56
+ dylib:
+ name: 24
+ timestamp: 0
+ current_version: 88342528
+ compatibility_version: 65536
+ Content: '/usr/lib/libSystem.B.dylib'
+ ZeroPadBytes: 6
+ - cmd: LC_FUNCTION_STARTS
+ cmdsize: 16
+ dataoff: 49456
+ datasize: 8
+ - cmd: LC_DATA_IN_CODE
+ cmdsize: 16
+ dataoff: 49464
+ datasize: 0
+ - cmd: LC_CODE_SIGNATURE
+ cmdsize: 16
+ dataoff: 50944
+ datasize: 544
+LinkEditData:
+ RebaseOpcodes:
+ - Opcode: REBASE_OPCODE_SET_TYPE_IMM
+ Imm: 1
+ - Opcode: REBASE_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB
+ Imm: 1
+ ExtraData: [ 0x8 ]
+ - Opcode: REBASE_OPCODE_DO_REBASE_IMM_TIMES
+ Imm: 1
+ - Opcode: REBASE_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB
+ Imm: 2
+ ExtraData: [ 0x0 ]
+ - Opcode: REBASE_OPCODE_DO_REBASE_ULEB_TIMES_SKIPPING_ULEB
+ Imm: 0
+ ExtraData: [ 0x2, 0x20 ]
+ - Opcode: REBASE_OPCODE_ADD_ADDR_IMM_SCALED
+ Imm: 2
+ - Opcode: REBASE_OPCODE_DO_REBASE_IMM_TIMES
+ Imm: 3
+ - Opcode: REBASE_OPCODE_ADD_ADDR_IMM_SCALED
+ Imm: 1
+ - Opcode: REBASE_OPCODE_DO_REBASE_IMM_TIMES
+ Imm: 3
+ - Opcode: REBASE_OPCODE_ADD_ADDR_IMM_SCALED
+ Imm: 1
+ - Opcode: REBASE_OPCODE_DO_REBASE_IMM_TIMES
+ Imm: 3
+ - Opcode: REBASE_OPCODE_ADD_ADDR_IMM_SCALED
+ Imm: 4
+ - Opcode: REBASE_OPCODE_DO_REBASE_IMM_TIMES
+ Imm: 2
+ - Opcode: REBASE_OPCODE_ADD_ADDR_IMM_SCALED
+ Imm: 1
+ - Opcode: REBASE_OPCODE_DO_REBASE_IMM_TIMES
+ Imm: 2
+ - Opcode: REBASE_OPCODE_ADD_ADDR_IMM_SCALED
+ Imm: 5
+ - Opcode: REBASE_OPCODE_DO_REBASE_IMM_TIMES
+ Imm: 2
+ - Opcode: REBASE_OPCODE_ADD_ADDR_IMM_SCALED
+ Imm: 3
+ - Opcode: REBASE_OPCODE_DO_REBASE_IMM_TIMES
+ Imm: 1
+ - Opcode: REBASE_OPCODE_DONE
+ Imm: 0
+ BindOpcodes:
+ - Opcode: BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM
+ Imm: 0
+ Symbol: dyld_stub_binder
+ - Opcode: BIND_OPCODE_SET_TYPE_IMM
+ Imm: 1
+ Symbol: ''
+ - Opcode: BIND_OPCODE_SET_DYLIB_ORDINAL_IMM
+ Imm: 3
+ Symbol: ''
+ - Opcode: BIND_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB
+ Imm: 1
+ ULEBExtraData: [ 0x0 ]
+ Symbol: ''
+ - Opcode: BIND_OPCODE_DO_BIND
+ Imm: 0
+ Symbol: ''
+ - Opcode: BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM
+ Imm: 0
+ Symbol: '_OBJC_METACLASS_$_NSObject'
+ - Opcode: BIND_OPCODE_SET_TYPE_IMM
+ Imm: 1
+ Symbol: ''
+ - Opcode: BIND_OPCODE_SET_DYLIB_ORDINAL_IMM
+ Imm: 2
+ Symbol: ''
+ - Opcode: BIND_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB
+ Imm: 2
+ ULEBExtraData: [ 0x108 ]
+ Symbol: ''
+ - Opcode: BIND_OPCODE_DO_BIND
+ Imm: 0
+ Symbol: ''
+ - Opcode: BIND_OPCODE_DO_BIND
+ Imm: 0
+ Symbol: ''
+ - Opcode: BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM
+ Imm: 0
+ Symbol: __objc_empty_cache
+ - Opcode: BIND_OPCODE_SET_TYPE_IMM
+ Imm: 1
+ Symbol: ''
+ - Opcode: BIND_OPCODE_DO_BIND
+ Imm: 0
+ Symbol: ''
+ - Opcode: BIND_OPCODE_ADD_ADDR_ULEB
+ Imm: 0
+ ULEBExtraData: [ 0x20 ]
+ Symbol: ''
+ - Opcode: BIND_OPCODE_DO_BIND
+ Imm: 0
+ Symbol: ''
+ - Opcode: BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM
+ Imm: 0
+ Symbol: '_OBJC_CLASS_$_NSObject'
+ - Opcode: BIND_OPCODE_SET_TYPE_IMM
+ Imm: 1
+ Symbol: ''
+ - Opcode: BIND_OPCODE_ADD_ADDR_ULEB
+ Imm: 0
+ ULEBExtraData: [ 0xFFFFFFFFFFFFFFF0 ]
+ Symbol: ''
+ - Opcode: BIND_OPCODE_DO_BIND
+ Imm: 0
+ Symbol: ''
+ - Opcode: BIND_OPCODE_DONE
+ Imm: 0
+ Symbol: ''
+ LazyBindOpcodes:
+ - Opcode: BIND_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB
+ Imm: 2
+ ULEBExtraData: [ 0x0 ]
+ Symbol: ''
+ - Opcode: BIND_OPCODE_SET_DYLIB_ORDINAL_IMM
+ Imm: 2
+ Symbol: ''
+ - Opcode: BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM
+ Imm: 0
+ Symbol: _objc_destroyWeak
+ - Opcode: BIND_OPCODE_DO_BIND
+ Imm: 0
+ Symbol: ''
+ - Opcode: BIND_OPCODE_DONE
+ Imm: 0
+ Symbol: ''
+ ExportTrie:
+ TerminalSize: 0
+ NodeOffset: 0
+ Name: ''
+ Flags: 0x0
+ Address: 0x0
+ Other: 0x0
+ ImportName: ''
+ Children:
+ - TerminalSize: 0
+ NodeOffset: 10
+ Name: _OBJC_
+ Flags: 0x0
+ Address: 0x0
+ Other: 0x0
+ ImportName: ''
+ Children:
+ - TerminalSize: 4
+ NodeOffset: 77
+ Name: 'CLASS_$_Suggestion'
+ Flags: 0x0
+ Address: 0x8130
+ Other: 0x0
+ ImportName: ''
+ - TerminalSize: 4
+ NodeOffset: 83
+ Name: 'METACLASS_$_Suggestion'
+ Flags: 0x0
+ Address: 0x8108
+ Other: 0x0
+ ImportName: ''
+ - TerminalSize: 0
+ NodeOffset: 89
+ Name: 'IVAR_$_Suggestion._'
+ Flags: 0x0
+ Address: 0x0
+ Other: 0x0
+ ImportName: ''
+ Children:
+ - TerminalSize: 4
+ NodeOffset: 109
+ Name: other
+ Flags: 0x0
+ Address: 0x815C
+ Other: 0x0
+ ImportName: ''
+ - TerminalSize: 4
+ NodeOffset: 115
+ Name: topChoice
+ Flags: 0x0
+ Address: 0x8158
+ Other: 0x0
+ ImportName: ''
+ NameList:
+ - n_strx: 407
+ n_type: 0x64
+ n_sect: 0
+ n_desc: 0
+ n_value: 0
+ - n_strx: 474
+ n_type: 0x66
+ n_sect: 0
+ n_desc: 1
+ n_value: 0
+ - n_strx: 729
+ n_type: 0x24
+ n_sect: 1
+ n_desc: 0
+ n_value: 1976
+ - n_strx: 1
+ n_type: 0x24
+ n_sect: 0
+ n_desc: 0
+ n_value: 44
+ - n_strx: 757
+ n_type: 0x26
+ n_sect: 12
+ n_desc: 0
+ n_value: 32784
+ - n_strx: 790
+ n_type: 0x26
+ n_sect: 12
+ n_desc: 0
+ n_value: 32856
+ - n_strx: 827
+ n_type: 0x26
+ n_sect: 12
+ n_desc: 0
+ n_value: 32888
+ - n_strx: 866
+ n_type: 0x26
+ n_sect: 12
+ n_desc: 0
+ n_value: 32960
+ - n_strx: 895
+ n_type: 0x20
+ n_sect: 13
+ n_desc: 0
+ n_value: 33032
+ - n_strx: 924
+ n_type: 0x20
+ n_sect: 13
+ n_desc: 0
+ n_value: 33072
+ - n_strx: 949
+ n_type: 0x20
+ n_sect: 14
+ n_desc: 0
+ n_value: 33112
+ - n_strx: 984
+ n_type: 0x20
+ n_sect: 14
+ n_desc: 0
+ n_value: 33116
+ - n_strx: 1
+ n_type: 0x64
+ n_sect: 1
+ n_desc: 0
+ n_value: 0
+ - n_strx: 2
+ n_type: 0xE
+ n_sect: 1
+ n_desc: 0
+ n_value: 1976
+ - n_strx: 30
+ n_type: 0xE
+ n_sect: 12
+ n_desc: 0
+ n_value: 32784
+ - n_strx: 63
+ n_type: 0xE
+ n_sect: 12
+ n_desc: 0
+ n_value: 32856
+ - n_strx: 100
+ n_type: 0xE
+ n_sect: 12
+ n_desc: 0
+ n_value: 32888
+ - n_strx: 139
+ n_type: 0xE
+ n_sect: 12
+ n_desc: 0
+ n_value: 32960
+ - n_strx: 168
+ n_type: 0xE
+ n_sect: 11
+ n_desc: 0
+ n_value: 32776
+ - n_strx: 183
+ n_type: 0xF
+ n_sect: 13
+ n_desc: 0
+ n_value: 33032
+ - n_strx: 212
+ n_type: 0xF
+ n_sect: 13
+ n_desc: 0
+ n_value: 33072
+ - n_strx: 237
+ n_type: 0xF
+ n_sect: 14
+ n_desc: 0
+ n_value: 33112
+ - n_strx: 272
+ n_type: 0xF
+ n_sect: 14
+ n_desc: 0
+ n_value: 33116
+ - n_strx: 303
+ n_type: 0x1
+ n_sect: 0
+ n_desc: 512
+ n_value: 0
+ - n_strx: 326
+ n_type: 0x1
+ n_sect: 0
+ n_desc: 512
+ n_value: 0
+ - n_strx: 353
+ n_type: 0x1
+ n_sect: 0
+ n_desc: 512
+ n_value: 0
+ - n_strx: 372
+ n_type: 0x1
+ n_sect: 0
+ n_desc: 512
+ n_value: 0
+ - n_strx: 390
+ n_type: 0x1
+ n_sect: 0
+ n_desc: 768
+ n_value: 0
+ StringTable:
+ - ' '
+ - '-[Suggestion .cxx_destruct]'
+ - '__OBJC_METACLASS_RO_$_Suggestion'
+ - '__OBJC_$_INSTANCE_METHODS_Suggestion'
+ - '__OBJC_$_INSTANCE_VARIABLES_Suggestion'
+ - '__OBJC_CLASS_RO_$_Suggestion'
+ - __dyld_private
+ - '_OBJC_METACLASS_$_Suggestion'
+ - '_OBJC_CLASS_$_Suggestion'
+ - '_OBJC_IVAR_$_Suggestion._topChoice'
+ - '_OBJC_IVAR_$_Suggestion._other'
+ - '_OBJC_CLASS_$_NSObject'
+ - '_OBJC_METACLASS_$_NSObject'
+ - __objc_empty_cache
+ - _objc_destroyWeak
+ - dyld_stub_binder
+ - '-[Suggestion .cxx_destruct]'
+ - '__OBJC_METACLASS_RO_$_Suggestion'
+ - '__OBJC_$_INSTANCE_METHODS_Suggestion'
+ - '__OBJC_$_INSTANCE_VARIABLES_Suggestion'
+ - '__OBJC_CLASS_RO_$_Suggestion'
+ - '_OBJC_METACLASS_$_Suggestion'
+ - '_OBJC_CLASS_$_Suggestion'
+ - '_OBJC_IVAR_$_Suggestion._topChoice'
+ - '_OBJC_IVAR_$_Suggestion._other'
+ - ''
+ IndirectSymbols: [ 0x1B, 0x1A, 0x1A ]
+ FunctionStarts: [ 0x7B8 ]
+...
diff --git a/llvm/test/tools/llvm-readtapi/Inputs/thread_local.yaml b/llvm/test/tools/llvm-readtapi/Inputs/thread_local.yaml
new file mode 100644
index 00000000000000..bc247110e1ffd6
--- /dev/null
+++ b/llvm/test/tools/llvm-readtapi/Inputs/thread_local.yaml
@@ -0,0 +1,228 @@
+--- !mach-o
+FileHeader:
+ magic: 0xFEEDFACF
+ cputype: 0x01000007
+ cpusubtype: 0x00000003
+ filetype: 0x00000006
+ ncmds: 13
+ sizeofcmds: 872
+ flags: 0x00900085
+ reserved: 0x00000000
+LoadCommands:
+ - cmd: LC_SEGMENT_64
+ cmdsize: 152
+ segname: __TEXT
+ vmaddr: 0
+ vmsize: 16384
+ fileoff: 0
+ filesize: 16384
+ maxprot: 5
+ initprot: 5
+ nsects: 1
+ flags: 0
+ Sections:
+ - sectname: __text
+ segname: __TEXT
+ addr: 0x0000000000004000
+ size: 0
+ offset: 0x00004000
+ align: 0
+ reloff: 0x00000000
+ nreloc: 0
+ flags: 0x80000400
+ reserved1: 0x00000000
+ reserved2: 0x00000000
+ reserved3: 0x00000000
+ content: ''
+ - cmd: LC_SEGMENT_64
+ cmdsize: 232
+ segname: __DATA
+ vmaddr: 16384
+ vmsize: 16384
+ fileoff: 16384
+ filesize: 16384
+ maxprot: 3
+ initprot: 3
+ nsects: 2
+ flags: 0
+ Sections:
+ - sectname: __thread_vars
+ segname: __DATA
+ addr: 0x0000000000004000
+ size: 24
+ offset: 0x00004000
+ align: 3
+ reloff: 0x00000000
+ nreloc: 0
+ flags: 0x00000013
+ reserved1: 0x00000000
+ reserved2: 0x00000000
+ reserved3: 0x00000000
+ content: '000000000000000000000000000000000000000000000000'
+ - sectname: __thread_bss
+ segname: __DATA
+ addr: 0x0000000000004018
+ size: 1
+ offset: 0x00000000
+ align: 0
+ reloff: 0x00000000
+ nreloc: 0
+ flags: 0x00000012
+ reserved1: 0x00000000
+ reserved2: 0x00000000
+ reserved3: 0x00000000
+ - cmd: LC_SEGMENT_64
+ cmdsize: 72
+ segname: __LINKEDIT
+ vmaddr: 32768
+ vmsize: 16384
+ fileoff: 32768
+ filesize: 184
+ maxprot: 1
+ initprot: 1
+ nsects: 0
+ flags: 0
+ - cmd: LC_ID_DYLIB
+ cmdsize: 104
+ dylib:
+ name: 24
+ timestamp: 1
+ current_version: 0
+ compatibility_version: 0
+ Content: '/System/Library/Frameworks/ThreadLocal.framework/ThreadLocal'
+ ZeroPadBytes: 2
+ - cmd: LC_DYLD_INFO_ONLY
+ cmdsize: 48
+ rebase_off: 0
+ rebase_size: 0
+ bind_off: 32768
+ bind_size: 24
+ weak_bind_off: 0
+ weak_bind_size: 0
+ lazy_bind_off: 0
+ lazy_bind_size: 0
+ export_off: 32792
+ export_size: 24
+ - cmd: LC_SYMTAB
+ cmdsize: 24
+ symoff: 32824
+ nsyms: 4
+ stroff: 32888
+ strsize: 64
+ - cmd: LC_DYSYMTAB
+ cmdsize: 80
+ ilocalsym: 0
+ nlocalsym: 1
+ iextdefsym: 1
+ nextdefsym: 1
+ iundefsym: 2
+ nundefsym: 2
+ tocoff: 0
+ ntoc: 0
+ modtaboff: 0
+ nmodtab: 0
+ extrefsymoff: 0
+ nextrefsyms: 0
+ indirectsymoff: 0
+ nindirectsyms: 0
+ extreloff: 0
+ nextrel: 0
+ locreloff: 0
+ nlocrel: 0
+ - cmd: LC_UUID
+ cmdsize: 24
+ uuid: E4FA1DB7-CD39-3568-B80D-BFAF224E5ADC
+ - cmd: LC_BUILD_VERSION
+ cmdsize: 32
+ platform: 1
+ minos: 720896
+ sdk: 720896
+ ntools: 1
+ Tools:
+ - tool: 3
+ version: 39913216
+ - cmd: LC_SOURCE_VERSION
+ cmdsize: 16
+ version: 0
+ - cmd: LC_LOAD_DYLIB
+ cmdsize: 56
+ dylib:
+ name: 24
+ timestamp: 2
+ current_version: 84672512
+ compatibility_version: 65536
+ Content: '/usr/lib/libSystem.B.dylib'
+ ZeroPadBytes: 6
+ - cmd: LC_FUNCTION_STARTS
+ cmdsize: 16
+ dataoff: 32816
+ datasize: 8
+ - cmd: LC_DATA_IN_CODE
+ cmdsize: 16
+ dataoff: 32824
+ datasize: 0
+LinkEditData:
+ BindOpcodes:
+ - Opcode: BIND_OPCODE_SET_DYLIB_ORDINAL_IMM
+ Imm: 1
+ Symbol: ''
+ - Opcode: BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM
+ Imm: 0
+ Symbol: __tlv_bootstrap
+ - Opcode: BIND_OPCODE_SET_TYPE_IMM
+ Imm: 1
+ Symbol: ''
+ - Opcode: BIND_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB
+ Imm: 1
+ ULEBExtraData: [ 0x0000000000000000 ]
+ Symbol: ''
+ - Opcode: BIND_OPCODE_DO_BIND
+ Imm: 0
+ Symbol: ''
+ - Opcode: BIND_OPCODE_DONE
+ Imm: 0
+ Symbol: ''
+ ExportTrie:
+ TerminalSize: 0
+ NodeOffset: 0
+ Name: ''
+ Flags: 0x0000000000000000
+ Address: 0x0000000000000000
+ Other: 0x0000000000000000
+ ImportName: ''
+ Children:
+ - TerminalSize: 4
+ NodeOffset: 13
+ Name: _MySymbol
+ Flags: 0x0000000000000001
+ Address: 0x0000000000004000
+ Other: 0x0000000000000000
+ ImportName: ''
+ NameList:
+ - n_strx: 45
+ n_type: 0x0E
+ n_sect: 3
+ n_desc: 0
+ n_value: 16408
+ - n_strx: 2
+ n_type: 0x0F
+ n_sect: 2
+ n_desc: 0
+ n_value: 16384
+ - n_strx: 12
+ n_type: 0x01
+ n_sect: 0
+ n_desc: 256
+ n_value: 0
+ - n_strx: 28
+ n_type: 0x01
+ n_sect: 0
+ n_desc: 256
+ n_value: 0
+ StringTable:
+ - ' '
+ - _MySymbol
+ - __tlv_bootstrap
+ - dyld_stub_binder
+ - '_MySymbol$tlv$init'
+...
diff --git a/llvm/test/tools/llvm-readtapi/Inputs/universal.yaml b/llvm/test/tools/llvm-readtapi/Inputs/universal.yaml
new file mode 100644
index 00000000000000..abf17e645cc69b
--- /dev/null
+++ b/llvm/test/tools/llvm-readtapi/Inputs/universal.yaml
@@ -0,0 +1,372 @@
+--- !fat-mach-o
+FatHeader:
+ magic: 0xCAFEBABE
+ nfat_arch: 2
+FatArchs:
+ - cputype: 0x0000000C
+ cpusubtype: 0x00000009
+ offset: 0x0000000000004000
+ size: 16424
+ align: 14
+ - cputype: 0x0100000C
+ cpusubtype: 0x00000000
+ offset: 0x000000000000C000
+ size: 16464
+ align: 14
+Slices:
+ - !mach-o
+ FileHeader:
+ magic: 0xFEEDFACE
+ cputype: 0x0000000C
+ cpusubtype: 0x00000009
+ filetype: 0x00000006
+ ncmds: 13
+ sizeofcmds: 608
+ flags: 0x00100085
+ LoadCommands:
+ - cmd: LC_SEGMENT
+ cmdsize: 124
+ segname: __TEXT
+ vmaddr: 0
+ vmsize: 16384
+ fileoff: 0
+ filesize: 16384
+ maxprot: 5
+ initprot: 5
+ nsects: 1
+ flags: 0
+ Sections:
+ - sectname: __text
+ segname: __TEXT
+ addr: 0x0000000000004000
+ size: 0
+ offset: 0x00004000
+ align: 0
+ reloff: 0x00000000
+ nreloc: 0
+ flags: 0x80000400
+ reserved1: 0x00000000
+ reserved2: 0x00000000
+ reserved3: 0x00000000
+ content: ''
+ - cmd: LC_SEGMENT
+ cmdsize: 124
+ segname: __DATA
+ vmaddr: 16384
+ vmsize: 16384
+ fileoff: 0
+ filesize: 0
+ maxprot: 3
+ initprot: 3
+ nsects: 1
+ flags: 0
+ Sections:
+ - sectname: __common
+ segname: __DATA
+ addr: 0x0000000000004000
+ size: 4
+ offset: 0x00000000
+ align: 2
+ reloff: 0x00000000
+ nreloc: 0
+ flags: 0x00000001
+ reserved1: 0x00000000
+ reserved2: 0x00000000
+ reserved3: 0x00000000
+ - cmd: LC_SEGMENT
+ cmdsize: 56
+ segname: __LINKEDIT
+ vmaddr: 32768
+ vmsize: 16384
+ fileoff: 16384
+ filesize: 40
+ maxprot: 1
+ initprot: 1
+ nsects: 0
+ flags: 0
+ - cmd: LC_ID_DYLIB
+ cmdsize: 44
+ dylib:
+ name: 24
+ timestamp: 1
+ current_version: 0
+ compatibility_version: 0
+ Content: '@rpath/libfoo.dylib'
+ ZeroPadBytes: 1
+ - cmd: LC_DYLD_INFO_ONLY
+ cmdsize: 48
+ rebase_off: 0
+ rebase_size: 0
+ bind_off: 0
+ bind_size: 0
+ weak_bind_off: 0
+ weak_bind_size: 0
+ lazy_bind_off: 0
+ lazy_bind_size: 0
+ export_off: 16384
+ export_size: 16
+ - cmd: LC_SYMTAB
+ cmdsize: 24
+ symoff: 16404
+ nsyms: 1
+ stroff: 16416
+ strsize: 8
+ - cmd: LC_DYSYMTAB
+ cmdsize: 80
+ ilocalsym: 0
+ nlocalsym: 0
+ iextdefsym: 0
+ nextdefsym: 1
+ iundefsym: 1
+ nundefsym: 0
+ tocoff: 0
+ ntoc: 0
+ modtaboff: 0
+ nmodtab: 0
+ extrefsymoff: 0
+ nextrefsyms: 0
+ indirectsymoff: 0
+ nindirectsyms: 0
+ extreloff: 0
+ nextrel: 0
+ locreloff: 0
+ nlocrel: 0
+ - cmd: LC_UUID
+ cmdsize: 24
+ uuid: 55BB3EB2-88FF-39A2-BAFB-C8695DC33D4B
+ - cmd: LC_VERSION_MIN_IPHONEOS
+ cmdsize: 16
+ version: 680803
+ sdk: 917504
+ - cmd: LC_SOURCE_VERSION
+ cmdsize: 16
+ version: 0
+ - cmd: LC_ENCRYPTION_INFO
+ cmdsize: 20
+ cryptoff: 16384
+ cryptsize: 0
+ cryptid: 0
+ - cmd: LC_FUNCTION_STARTS
+ cmdsize: 16
+ dataoff: 16400
+ datasize: 4
+ - cmd: LC_DATA_IN_CODE
+ cmdsize: 16
+ dataoff: 16404
+ datasize: 0
+ LinkEditData:
+ ExportTrie:
+ TerminalSize: 0
+ NodeOffset: 0
+ Name: ''
+ Flags: 0x0000000000000000
+ Address: 0x0000000000000000
+ Other: 0x0000000000000000
+ ImportName: ''
+ Children:
+ - TerminalSize: 4
+ NodeOffset: 8
+ Name: _foo
+ Flags: 0x0000000000000000
+ Address: 0x0000000000004000
+ Other: 0x0000000000000000
+ ImportName: ''
+ NameList:
+ - n_strx: 2
+ n_type: 0x0F
+ n_sect: 2
+ n_desc: 0
+ n_value: 16384
+ StringTable:
+ - ' '
+ - _foo
+ - ''
+ - !mach-o
+ FileHeader:
+ magic: 0xFEEDFACF
+ cputype: 0x0100000C
+ cpusubtype: 0x00000000
+ filetype: 0x00000006
+ ncmds: 14
+ sizeofcmds: 760
+ flags: 0x00100085
+ reserved: 0x00000000
+ LoadCommands:
+ - cmd: LC_SEGMENT_64
+ cmdsize: 152
+ segname: __TEXT
+ vmaddr: 0
+ vmsize: 16384
+ fileoff: 0
+ filesize: 16384
+ maxprot: 5
+ initprot: 5
+ nsects: 1
+ flags: 0
+ Sections:
+ - sectname: __text
+ segname: __TEXT
+ addr: 0x0000000000004000
+ size: 0
+ offset: 0x00004000
+ align: 0
+ reloff: 0x00000000
+ nreloc: 0
+ flags: 0x80000400
+ reserved1: 0x00000000
+ reserved2: 0x00000000
+ reserved3: 0x00000000
+ content: ''
+ - cmd: LC_SEGMENT_64
+ cmdsize: 152
+ segname: __DATA
+ vmaddr: 16384
+ vmsize: 16384
+ fileoff: 0
+ filesize: 0
+ maxprot: 3
+ initprot: 3
+ nsects: 1
+ flags: 0
+ Sections:
+ - sectname: __common
+ segname: __DATA
+ addr: 0x0000000000004000
+ size: 4
+ offset: 0x00000000
+ align: 2
+ reloff: 0x00000000
+ nreloc: 0
+ flags: 0x00000001
+ reserved1: 0x00000000
+ reserved2: 0x00000000
+ reserved3: 0x00000000
+ - cmd: LC_SEGMENT_64
+ cmdsize: 72
+ segname: __LINKEDIT
+ vmaddr: 32768
+ vmsize: 16384
+ fileoff: 16384
+ filesize: 80
+ maxprot: 1
+ initprot: 1
+ nsects: 0
+ flags: 0
+ - cmd: LC_ID_DYLIB
+ cmdsize: 48
+ dylib:
+ name: 24
+ timestamp: 1
+ current_version: 0
+ compatibility_version: 0
+ Content: '@rpath/libfoo.dylib'
+ ZeroPadBytes: 5
+ - cmd: LC_DYLD_INFO_ONLY
+ cmdsize: 48
+ rebase_off: 0
+ rebase_size: 0
+ bind_off: 0
+ bind_size: 0
+ weak_bind_off: 0
+ weak_bind_size: 0
+ lazy_bind_off: 0
+ lazy_bind_size: 0
+ export_off: 16384
+ export_size: 16
+ - cmd: LC_SYMTAB
+ cmdsize: 24
+ symoff: 16408
+ nsyms: 2
+ stroff: 16440
+ strsize: 24
+ - cmd: LC_DYSYMTAB
+ cmdsize: 80
+ ilocalsym: 0
+ nlocalsym: 0
+ iextdefsym: 0
+ nextdefsym: 1
+ iundefsym: 1
+ nundefsym: 1
+ tocoff: 0
+ ntoc: 0
+ modtaboff: 0
+ nmodtab: 0
+ extrefsymoff: 0
+ nextrefsyms: 0
+ indirectsymoff: 0
+ nindirectsyms: 0
+ extreloff: 0
+ nextrel: 0
+ locreloff: 0
+ nlocrel: 0
+ - cmd: LC_UUID
+ cmdsize: 24
+ uuid: 57F7A4EB-2EDE-3150-80B6-8D587A135790
+ - cmd: LC_BUILD_VERSION
+ cmdsize: 32
+ platform: 2
+ minos: 917504
+ sdk: 917504
+ ntools: 1
+ Tools:
+ - tool: 3
+ version: 39322368
+ - cmd: LC_SOURCE_VERSION
+ cmdsize: 16
+ version: 0
+ - cmd: LC_ENCRYPTION_INFO_64
+ cmdsize: 24
+ cryptoff: 16384
+ cryptsize: 0
+ cryptid: 0
+ pad: 0
+ - cmd: LC_LOAD_DYLIB
+ cmdsize: 56
+ dylib:
+ name: 24
+ timestamp: 2
+ current_version: 84017152
+ compatibility_version: 65536
+ Content: '/usr/lib/libSystem.B.dylib'
+ ZeroPadBytes: 6
+ - cmd: LC_FUNCTION_STARTS
+ cmdsize: 16
+ dataoff: 16400
+ datasize: 8
+ - cmd: LC_DATA_IN_CODE
+ cmdsize: 16
+ dataoff: 16408
+ datasize: 0
+ LinkEditData:
+ ExportTrie:
+ TerminalSize: 0
+ NodeOffset: 0
+ Name: ''
+ Flags: 0x0000000000000000
+ Address: 0x0000000000000000
+ Other: 0x0000000000000000
+ ImportName: ''
+ Children:
+ - TerminalSize: 4
+ NodeOffset: 8
+ Name: _foo
+ Flags: 0x0000000000000000
+ Address: 0x0000000000004000
+ Other: 0x0000000000000000
+ ImportName: ''
+ NameList:
+ - n_strx: 2
+ n_type: 0x0F
+ n_sect: 2
+ n_desc: 0
+ n_value: 16384
+ - n_strx: 7
+ n_type: 0x01
+ n_sect: 0
+ n_desc: 256
+ n_value: 0
+ StringTable:
+ - ' '
+ - _foo
+ - dyld_stub_binder
+...
diff --git a/llvm/test/tools/llvm-readtapi/compare-incorrect-format.test b/llvm/test/tools/llvm-readtapi/compare-incorrect-format.test
deleted file mode 100644
index 09dc768518ebc7..00000000000000
--- a/llvm/test/tools/llvm-readtapi/compare-incorrect-format.test
+++ /dev/null
@@ -1,7 +0,0 @@
-; RUN: mkdir -p %t
-; RUN: yaml2obj %S/Inputs/macho.yaml -o %t/macho.dylib
-; RUN: not llvm-readtapi --compare %S/Inputs/v4A.tbd %t/macho.dylib 2>&1 | FileCheck %s
-
-; CHECK: error: {{.*}}macho.dylib' unsupported file type
-; CHECK-NOT: error:
-; CHECK-NOT: warning:
diff --git a/llvm/test/tools/llvm-readtapi/compare-tbd-dylib.test b/llvm/test/tools/llvm-readtapi/compare-tbd-dylib.test
new file mode 100644
index 00000000000000..d31097ff22898c
--- /dev/null
+++ b/llvm/test/tools/llvm-readtapi/compare-tbd-dylib.test
@@ -0,0 +1,41 @@
+; RUN: rm -rf %t
+; RUN: split-file %s %t
+; RUN: mkdir -p %t
+; RUN: yaml2obj %S/Inputs/macho.yaml -o %t/macho.dylib
+; RUN: not llvm-readtapi --compare %t/macho.tbd %t/macho.dylib 2>&1 | FileCheck %s
+
+; CHECK: macho.tbd
+; CHECK-NEXT: macho.dylib
+; CHECK: Current Version
+; CHECK-NEXT: < 1.2
+; CHECK-NEXT: > 1
+; CHECK-NEXT: Compatibility Version
+; CHECK-NEXT: < 3.1
+; CHECK-NEXT: > 1
+
+;--- macho.tbd
+{
+ "main_library": {
+ "flags": [
+ {
+ "attributes": [
+ "not_app_extension_safe"
+ ]
+ }
+ ],
+ "current_versions":[{"version": "1.2"}],
+ "compatibility_versions":[{ "version": "3.1"}],
+ "install_names": [
+ {
+ "name": "macho-no-exports.dylib"
+ }
+ ],
+ "target_info": [
+ {
+ "min_deployment": "10.10",
+ "target": "x86_64-macos"
+ }
+ ]
+ },
+ "tapi_tbd_version": 5
+}
diff --git a/llvm/test/tools/llvm-readtapi/stubify-invalid.test b/llvm/test/tools/llvm-readtapi/stubify-invalid.test
new file mode 100644
index 00000000000000..3ecc9ff1aeee3a
--- /dev/null
+++ b/llvm/test/tools/llvm-readtapi/stubify-invalid.test
@@ -0,0 +1,7 @@
+; RUN: rm -rf %t
+; RUN: not llvm-readtapi -stubify %t/objc.dylib %t/flat_namespace.dylib %t/thread_local.dylib %t/fat.dylib --o tmp.tbd 2>&1 | FileCheck %s --allow-empty --check-prefix OUT
+; RUN: not llvm-readtapi -stubify --o tmp.tbd 2>&1 | FileCheck %s --allow-empty --check-prefix IN
+
+; OUT: error: cannot write multiple inputs into single output file
+; IN: error: stubify requires at least one input file
+
diff --git a/llvm/test/tools/llvm-readtapi/stubify.test b/llvm/test/tools/llvm-readtapi/stubify.test
new file mode 100644
index 00000000000000..177301cff918cf
--- /dev/null
+++ b/llvm/test/tools/llvm-readtapi/stubify.test
@@ -0,0 +1,158 @@
+; RUN: rm -rf %t
+; RUN: split-file %s %t
+; RUN: yaml2obj %S/Inputs/flat_namespace.yaml -o %t/flat_namespace.dylib
+; RUN: yaml2obj %S/Inputs/thread_local.yaml -o %t/thread_local.dylib
+; RUN: yaml2obj %S/Inputs/universal.yaml -o %t/fat.dylib
+; RUN: yaml2obj %S/Inputs/objc.yaml -o %t/objc.dylib
+; RUN: llvm-readtapi -stubify %t/objc.dylib -o %t/new_objc.tbd 2>&1 | FileCheck %s --allow-empty
+; RUN: llvm-readtapi -stubify %t/objc.dylib %t/flat_namespace.dylib %t/thread_local.dylib %t/fat.dylib -delete-input 2>&1 | FileCheck %s --allow-empty
+; RUN: llvm-readtapi -compare %t/expected_flat.tbd %t/flat_namespace.tbd 2>&1 | FileCheck %s --allow-empty
+; RUN: llvm-readtapi -compare %t/expected_tl.tbd %t/thread_local.tbd 2>&1 | FileCheck %s --allow-empty
+; RUN: llvm-readtapi -compare %t/objc.tbd %t/expected_objc.tbd 2>&1 | FileCheck %s --allow-empty
+; RUN: llvm-readtapi -compare %t/new_objc.tbd %t/expected_objc.tbd 2>&1 | FileCheck %s --allow-empty
+
+; CHECK-NOT: error:
+; CHECK-NOT: warning:
+
+;--- expected_flat.tbd
+{
+ "main_library": {
+ "compatibility_versions": [
+ {
+ "version": "0"
+ }
+ ],
+ "current_versions": [
+ {
+ "version": "0"
+ }
+ ],
+ "exported_symbols": [
+ {
+ "text": {
+ "global": [ "_foo" ]
+ }
+ }
+ ],
+ "flags": [
+ {
+ "attributes": [
+ "flat_namespace",
+ "not_app_extension_safe"
+ ]
+ }
+ ],
+ "install_names": [
+ {
+ "name": "foo.dylib"
+ }
+ ],
+ "target_info": [
+ {
+ "min_deployment": "10.14",
+ "target": "x86_64-macos"
+ }
+ ],
+ "undefined_symbols": [
+ {
+ "data": {
+ "global": [ "dyld_stub_binder", "_bar", "_putchar" ]
+ }
+ }
+ ]
+ },
+ "tapi_tbd_version": 5
+}
+
+;--- expected_tl.tbd
+{
+ "main_library": {
+ "compatibility_versions": [
+ {
+ "version": "0"
+ }
+ ],
+ "current_versions": [
+ {
+ "version": "0"
+ }
+ ],
+ "exported_symbols": [
+ {
+ "data": {
+ "thread_local": [
+ "_MySymbol"
+ ]
+ }
+ }
+ ],
+ "flags": [
+ {
+ "attributes": [
+ "not_app_extension_safe"
+ ]
+ }
+ ],
+ "install_names": [
+ {
+ "name": "/System/Library/Frameworks/ThreadLocal.framework/ThreadLocal"
+ }
+ ],
+ "target_info": [
+ {
+ "min_deployment": "11",
+ "target": "x86_64-macos"
+ }
+ ]
+ },
+ "tapi_tbd_version": 5
+}
+
+;--- expected_objc.tbd
+{
+ "main_library": {
+ "compatibility_versions": [
+ {
+ "version": "0"
+ }
+ ],
+ "current_versions": [
+ {
+ "version": "0"
+ }
+ ],
+ "exported_symbols": [
+ {
+ "data": {
+ "objc_class": [
+ "Suggestion"
+ ],
+ "objc_ivar": [
+ "Suggestion._topChoice",
+ "Suggestion._other"
+ ]
+ }
+ }
+ ],
+ "flags": [
+ {
+ "attributes": [
+ "not_app_extension_safe"
+ ]
+ }
+ ],
+ "install_names": [
+ {
+ "name": "tmp.dylib"
+ }
+ ],
+ "target_info": [
+ {
+ "min_deployment": "13",
+ "target": "arm64-macos"
+ }
+ ]
+ },
+ "tapi_tbd_version": 5
+}
+
diff --git a/llvm/test/tools/llvm-readtapi/write.test b/llvm/test/tools/llvm-readtapi/write.test
index 1ec7a40a2e4058..90ba1c25ec12e4 100644
--- a/llvm/test/tools/llvm-readtapi/write.test
+++ b/llvm/test/tools/llvm-readtapi/write.test
@@ -1,77 +1,34 @@
; RUN: rm -rf %t
; RUN: split-file %s %t
-; RUN: llvm-readtapi %t/arm64.tbd 2>&1 | FileCheck %s
+; RUN: mkdir -p %t
+; RUN: yaml2obj %S/Inputs/macho.yaml -o %t/macho.dylib
+; RUN: llvm-readtapi %t/macho.dylib -o %t/out.tbd 2>&1 | FileCheck %s --allow-empty
+; RUN: llvm-readtapi -compare %t/out.tbd %t/expected.tbd 2>&1 | FileCheck %s --allow-empty
-; CHECK-NOT: error
-; CHECK-NOT: warning
-; CHECK: {
-; CHECK-NEXT: "main_library": {
-; CHECK-NEXT: "allowable_clients": [
-; CHECK-NEXT: {
-; CHECK-NEXT: "clients": [
-; CHECK-NEXT: "ClientAll"
-; CHECK-NEXT: ]
-; CHECK-NEXT: }
-; CHECK-NEXT: ],
-; CHECK-NEXT: "exported_symbols": [
-; CHECK-NEXT: {
-; CHECK-NEXT: "data": {
-; CHECK-NEXT: "global": [
-; CHECK-NEXT: "_sym1"
-; CHECK-NEXT: ],
-; CHECK-NEXT: "objc_class": [
-; CHECK-NEXT: "_A"
-; CHECK-NEXT: ],
-; CHECK-NEXT: "objc_ivar": [
-; CHECK-NEXT: "_A._ivar1"
-; CHECK-NEXT: ],
-; CHECK-NEXT: "thread_local": [
-; CHECK-NEXT: "_tlv1"
-; CHECK-NEXT: ],
-; CHECK-NEXT: "weak": [
-; CHECK-NEXT: "_weak1"
-; CHECK-NEXT: ]
-; CHECK-NEXT: }
-; CHECK-NEXT: }
-; CHECK-NEXT: ],
-; CHECK-NEXT: "install_names": [
-; CHECK-NEXT: {
-; CHECK-NEXT: "name": "/usr/lib/libfat.dylib"
-; CHECK-NEXT: }
-; CHECK-NEXT: ],
-; CHECK-NEXT: "reexported_libraries": [
-; CHECK-NEXT: {
-; CHECK-NEXT: "names": [
-; CHECK-NEXT: "/usr/lib/liball.dylib"
-; CHECK-NEXT: ]
-; CHECK-NEXT: }
-; CHECK-NEXT: ],
-; CHECK-NEXT: "target_info": [
-; CHECK-NEXT: {
-; CHECK-NEXT: "target": "arm64-macos"
-; CHECK-NEXT: }
-; CHECK-NEXT: ]
-; CHECK-NEXT: },
-; CHECK-NEXT: "tapi_tbd_version": 5
-; CHECK-NEXT: }
+; CHECK-NOT: error
+; CHECK-NOT: warning
-
-;--- arm64.tbd
---- !tapi-tbd
-tbd-version: 4
-targets: [ arm64-macos ]
-install-name: '/usr/lib/libfat.dylib'
-allowable-clients:
- - targets: [ arm64-macos ]
- clients: [ ClientAll ]
-reexported-libraries:
- - targets: [ arm64-macos ]
- libraries: [ '/usr/lib/liball.dylib' ]
-exports:
- - targets: [ arm64-macos ]
- symbols: [ _sym1 ]
- objc-classes: [ _A ]
- objc-ivars: [ _A._ivar1 ]
- weak-symbols: [ _weak1 ]
- thread-local-symbols: [ _tlv1 ]
-...
+;--- expected.tbd
+{
+ "main_library": {
+ "flags": [
+ {
+ "attributes": [
+ "not_app_extension_safe"
+ ]
+ }
+ ],
+ "install_names": [
+ {
+ "name": "macho-no-exports.dylib"
+ }
+ ],
+ "target_info": [
+ {
+ "min_deployment": "10.10",
+ "target": "x86_64-macos"
+ }
+ ]
+ },
+ "tapi_tbd_version": 5
+}
diff --git a/llvm/tools/llvm-readtapi/TapiOpts.td b/llvm/tools/llvm-readtapi/TapiOpts.td
index 552690ce1385db..34ec5616a42e27 100644
--- a/llvm/tools/llvm-readtapi/TapiOpts.td
+++ b/llvm/tools/llvm-readtapi/TapiOpts.td
@@ -15,6 +15,7 @@ def compare : FF<"compare", "compare tapi files for library differences">, Group
def merge : FF<"merge", "merge the input files that represent the same library">, Group<action_group>;
def extract: FF<"extract", "extract <architecture> from input file">, Group<action_group>;
def remove: FF<"remove", "remove <architecture> from input file">, Group<action_group>;
+def stubify: FF<"stubify", "create a tapi file from a dynamic library or framework">, Group<action_group>;
//
// General Driver options
@@ -26,3 +27,8 @@ defm output: JS<"o", "write output to <file>","<file>">;
def compact: FF<"compact", "write compact tapi output file">;
defm filetype: JS<"filetype", "specify the output file type (tbd-v3, tbd-v4 or tbd-v5)","<value>">;
defm arch: JS<"arch", "specify the <architecture>", "<architecture>">;
+
+//
+// Stub options
+//
+def delete_input : FF<"delete-input", "delete and replace input file on success">;
diff --git a/llvm/tools/llvm-readtapi/llvm-readtapi.cpp b/llvm/tools/llvm-readtapi/llvm-readtapi.cpp
index 5fa023d1252582..78f1809e9d6473 100644
--- a/llvm/tools/llvm-readtapi/llvm-readtapi.cpp
+++ b/llvm/tools/llvm-readtapi/llvm-readtapi.cpp
@@ -10,14 +10,18 @@
//
//===----------------------------------------------------------------------===//
#include "DiffEngine.h"
+#include "llvm/BinaryFormat/Magic.h"
#include "llvm/Option/Arg.h"
#include "llvm/Option/ArgList.h"
#include "llvm/Option/Option.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Error.h"
+#include "llvm/Support/FileSystem.h"
#include "llvm/Support/InitLLVM.h"
#include "llvm/Support/MemoryBuffer.h"
+#include "llvm/Support/Path.h"
#include "llvm/Support/raw_ostream.h"
+#include "llvm/TextAPI/DylibReader.h"
#include "llvm/TextAPI/TextAPIError.h"
#include "llvm/TextAPI/TextAPIReader.h"
#include "llvm/TextAPI/TextAPIWriter.h"
@@ -27,6 +31,10 @@ using namespace llvm;
using namespace MachO;
using namespace object;
+#if !defined(PATH_MAX)
+#define PATH_MAX 1024
+#endif
+
namespace {
using namespace llvm::opt;
enum ID {
@@ -56,10 +64,15 @@ class TAPIOptTable : public opt::GenericOptTable {
}
};
+struct StubOptions {
+ bool DeleteInput = false;
+};
+
struct Context {
std::vector<std::string> Inputs;
std::unique_ptr<llvm::raw_fd_stream> OutStream;
FileType WriteFT = FileType::TBD_V5;
+ StubOptions StubOpt;
bool Compact = false;
Architecture Arch = AK_unknown;
};
@@ -79,6 +92,29 @@ static void reportError(Twine Message, int ExitCode = EXIT_FAILURE) {
exit(ExitCode);
}
+/// Replace extension considering frameworks.
+static void replace_extension(SmallVectorImpl<char> &Path,
+ const Twine &Extension) {
+ StringRef P(Path.begin(), Path.size());
+ auto ParentPath = sys::path::parent_path(P);
+ auto Filename = sys::path::filename(P);
+
+ if (!ParentPath.ends_with(Filename.str() + ".framework")) {
+ sys::path::replace_extension(Path, Extension);
+ return;
+ }
+
+ SmallString<8> Storage;
+ StringRef Ext = Extension.toStringRef(Storage);
+
+ // Append '.' if needed.
+ if (!Ext.empty() && Ext[0] != '.')
+ Path.push_back('.');
+
+ // Append extension.
+ Path.append(Ext.begin(), Ext.end());
+}
+
static std::unique_ptr<InterfaceFile>
getInterfaceFile(const StringRef Filename, bool ResetBanner = true) {
ExitOnErr.setBanner(TOOLNAME + ": error: '" + Filename.str() + "' ");
@@ -86,13 +122,35 @@ getInterfaceFile(const StringRef Filename, bool ResetBanner = true) {
MemoryBuffer::getFile(Filename);
if (BufferOrErr.getError())
ExitOnErr(errorCodeToError(BufferOrErr.getError()));
- Expected<std::unique_ptr<InterfaceFile>> IF =
- TextAPIReader::get((*BufferOrErr)->getMemBufferRef());
- if (!IF)
- ExitOnErr(IF.takeError());
+ auto Buffer = std::move(*BufferOrErr);
+
+ std::unique_ptr<InterfaceFile> IF;
+ switch (identify_magic(Buffer->getBuffer())) {
+ case file_magic::macho_dynamically_linked_shared_lib:
+ LLVM_FALLTHROUGH;
+ case file_magic::macho_dynamically_linked_shared_lib_stub:
+ LLVM_FALLTHROUGH;
+ case file_magic::macho_universal_binary: {
+ auto IFOrErr = DylibReader::get(Buffer->getMemBufferRef());
+ if (!IFOrErr)
+ ExitOnErr(IFOrErr.takeError());
+ IF = std::move(*IFOrErr);
+ break;
+ }
+ case file_magic::tapi_file: {
+ auto IFOrErr = TextAPIReader::get(Buffer->getMemBufferRef());
+ if (!IFOrErr)
+ ExitOnErr(IFOrErr.takeError());
+ IF = std::move(*IFOrErr);
+ break;
+ }
+ default:
+ reportError(Filename + ": unsupported file type");
+ }
+
if (ResetBanner)
ExitOnErr.setBanner(TOOLNAME + ": error: ");
- return std::move(*IF);
+ return IF;
}
static bool handleCompareAction(const Context &Ctx) {
@@ -142,6 +200,30 @@ static bool handleMergeAction(const Context &Ctx) {
return handleWriteAction(Ctx, std::move(Out));
}
+static bool handleStubifyAction(Context &Ctx) {
+ if (Ctx.Inputs.empty())
+ reportError("stubify requires at least one input file");
+
+ if ((Ctx.Inputs.size() > 1) && (Ctx.OutStream != nullptr))
+ reportError("cannot write multiple inputs into single output file");
+
+ for (StringRef FileName : Ctx.Inputs) {
+ auto IF = getInterfaceFile(FileName);
+ if (Ctx.StubOpt.DeleteInput) {
+ std::error_code EC;
+ SmallString<PATH_MAX> OutputLoc = FileName;
+ replace_extension(OutputLoc, ".tbd");
+ Ctx.OutStream = std::make_unique<llvm::raw_fd_stream>(OutputLoc, EC);
+ if (EC)
+ reportError("opening file '" + OutputLoc + ": " + EC.message());
+ if (auto Err = sys::fs::remove(FileName))
+ reportError("deleting file '" + FileName + ": " + EC.message());
+ }
+ handleWriteAction(Ctx, std::move(IF));
+ }
+ return EXIT_SUCCESS;
+}
+
using IFOperation =
std::function<llvm::Expected<std::unique_ptr<InterfaceFile>>(
const llvm::MachO::InterfaceFile &, Architecture)>;
@@ -160,6 +242,10 @@ static bool handleSingleFileAction(const Context &Ctx, const StringRef Action,
return handleWriteAction(Ctx, std::move(*OutIF));
}
+static void setStubOptions(opt::InputArgList &Args, StubOptions &Opt) {
+ Opt.DeleteInput = Args.hasArg(OPT_delete_input);
+}
+
int main(int Argc, char **Argv) {
InitLLVM X(Argc, Argv);
BumpPtrAllocator A;
@@ -183,6 +269,7 @@ int main(int Argc, char **Argv) {
return EXIT_SUCCESS;
}
+ // TODO: Add support for picking up libraries from directory input.
for (opt::Arg *A : Args.filtered(OPT_INPUT))
Ctx.Inputs.push_back(A->getValue());
@@ -237,6 +324,9 @@ int main(int Argc, char **Argv) {
return handleSingleFileAction(Ctx, "extract", &InterfaceFile::extract);
case OPT_remove:
return handleSingleFileAction(Ctx, "remove", &InterfaceFile::remove);
+ case OPT_stubify:
+ setStubOptions(Args, Ctx.StubOpt);
+ return handleStubifyAction(Ctx);
}
return EXIT_SUCCESS;
>From def014bf6ae94106d0c1b1e8daadffa5580df5e5 Mon Sep 17 00:00:00 2001
From: Cyndy Ishida <cyndy_ishida at apple.com>
Date: Wed, 20 Dec 2023 11:28:39 -0800
Subject: [PATCH 2/3] f
---
llvm/include/llvm/TextAPI/Utils.h | 31 +++++++++++++++++++++++++
llvm/lib/TextAPI/Utils.cpp | 38 +++++++++++++++++++++++++++++++
2 files changed, 69 insertions(+)
create mode 100644 llvm/include/llvm/TextAPI/Utils.h
create mode 100644 llvm/lib/TextAPI/Utils.cpp
diff --git a/llvm/include/llvm/TextAPI/Utils.h b/llvm/include/llvm/TextAPI/Utils.h
new file mode 100644
index 00000000000000..77ed449c34f271
--- /dev/null
+++ b/llvm/include/llvm/TextAPI/Utils.h
@@ -0,0 +1,31 @@
+//===- llvm/TextAPI/Utils.h - TAPI Utils -----------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// Helper functionality used for Darwin specific operations.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_TEXTAPI_UTILS_H
+#define LLVM_TEXTAPI_UTILS_H
+
+#include "llvm/Support/FileSystem.h"
+#include "llvm/Support/Path.h"
+
+#if !defined(PATH_MAX)
+#define PATH_MAX 1024
+#endif
+
+namespace llvm::MachO {
+
+using PathSeq = std::vector<std::string>;
+
+/// Replace extension considering frameworks.
+static void replace_extension(SmallVectorImpl<char> &Path,
+ const Twine &Extension);
+} // namespace llvm::MachO
+#endif // LLVM_TEXTAPI_UTILS_H
diff --git a/llvm/lib/TextAPI/Utils.cpp b/llvm/lib/TextAPI/Utils.cpp
new file mode 100644
index 00000000000000..e17df0df578af0
--- /dev/null
+++ b/llvm/lib/TextAPI/Utils.cpp
@@ -0,0 +1,38 @@
+//===- Utils.cpp ----------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// Implements utility functions for TextAPI Darwin operations.
+//
+//===----------------------------------------------------------------------===//
+
+#include "llvm/TextAPI/Utils.h"
+
+using namespace llvm;
+using namespace llvm::MachO;
+
+static void llvm::MachO::replace_extension(SmallVectorImpl<char> &Path,
+ const Twine &Extension) {
+ StringRef P(Path.begin(), Path.size());
+ auto ParentPath = sys::path::parent_path(P);
+ auto Filename = sys::path::filename(P);
+
+ if (!ParentPath.ends_with(Filename.str() + ".framework")) {
+ sys::path::replace_extension(Path, Extension);
+ return;
+ }
+
+ SmallString<8> Storage;
+ StringRef Ext = Extension.toStringRef(Storage);
+
+ // Append '.' if needed.
+ if (!Ext.empty() && Ext[0] != '.')
+ Path.push_back('.');
+
+ // Append extension.
+ Path.append(Ext.begin(), Ext.end());
+}
>From 5ce769326d9aca8e5a9deb26baf8c5a9990cc14e Mon Sep 17 00:00:00 2001
From: Cyndy Ishida <cyndy_ishida at apple.com>
Date: Wed, 20 Dec 2023 12:54:33 -0800
Subject: [PATCH 3/3] Move Path helpers into TextAPI and add descriptive
comments
---
llvm/include/llvm/TextAPI/Utils.h | 7 ++++--
llvm/lib/TextAPI/CMakeLists.txt | 1 +
llvm/lib/TextAPI/Utils.cpp | 8 ++++---
llvm/tools/llvm-readtapi/CMakeLists.txt | 1 +
llvm/tools/llvm-readtapi/llvm-readtapi.cpp | 26 ++--------------------
5 files changed, 14 insertions(+), 29 deletions(-)
diff --git a/llvm/include/llvm/TextAPI/Utils.h b/llvm/include/llvm/TextAPI/Utils.h
index 77ed449c34f271..bb22ea5e9606b2 100644
--- a/llvm/include/llvm/TextAPI/Utils.h
+++ b/llvm/include/llvm/TextAPI/Utils.h
@@ -13,6 +13,7 @@
#ifndef LLVM_TEXTAPI_UTILS_H
#define LLVM_TEXTAPI_UTILS_H
+#include "llvm/ADT/Twine.h"
#include "llvm/Support/FileSystem.h"
#include "llvm/Support/Path.h"
@@ -25,7 +26,9 @@ namespace llvm::MachO {
using PathSeq = std::vector<std::string>;
/// Replace extension considering frameworks.
-static void replace_extension(SmallVectorImpl<char> &Path,
- const Twine &Extension);
+///
+/// \param Path Location of file.
+/// \param Extension File extension to update with.
+void replace_extension(SmallVectorImpl<char> &Path, const Twine &Extension);
} // namespace llvm::MachO
#endif // LLVM_TEXTAPI_UTILS_H
diff --git a/llvm/lib/TextAPI/CMakeLists.txt b/llvm/lib/TextAPI/CMakeLists.txt
index 2017a1ad6398b3..29533756e41aed 100644
--- a/llvm/lib/TextAPI/CMakeLists.txt
+++ b/llvm/lib/TextAPI/CMakeLists.txt
@@ -13,6 +13,7 @@ add_llvm_component_library(LLVMTextAPI
TextAPIError.cpp
TextStub.cpp
TextStubCommon.cpp
+ Utils.cpp
ADDITIONAL_HEADER_DIRS
"${LLVM_MAIN_INCLUDE_DIR}/llvm/TextAPI"
diff --git a/llvm/lib/TextAPI/Utils.cpp b/llvm/lib/TextAPI/Utils.cpp
index e17df0df578af0..6d85083e0b54c1 100644
--- a/llvm/lib/TextAPI/Utils.cpp
+++ b/llvm/lib/TextAPI/Utils.cpp
@@ -15,8 +15,8 @@
using namespace llvm;
using namespace llvm::MachO;
-static void llvm::MachO::replace_extension(SmallVectorImpl<char> &Path,
- const Twine &Extension) {
+void llvm::MachO::replace_extension(SmallVectorImpl<char> &Path,
+ const Twine &Extension) {
StringRef P(Path.begin(), Path.size());
auto ParentPath = sys::path::parent_path(P);
auto Filename = sys::path::filename(P);
@@ -25,7 +25,9 @@ static void llvm::MachO::replace_extension(SmallVectorImpl<char> &Path,
sys::path::replace_extension(Path, Extension);
return;
}
-
+ // Framework dylibs do not have a file extension, in those cases the new
+ // extension is appended. e.g. given Path: "Foo.framework/Foo" and Extension:
+ // "tbd", the result is "Foo.framework/Foo.tbd".
SmallString<8> Storage;
StringRef Ext = Extension.toStringRef(Storage);
diff --git a/llvm/tools/llvm-readtapi/CMakeLists.txt b/llvm/tools/llvm-readtapi/CMakeLists.txt
index ef88d786d832fc..855a1473888f53 100644
--- a/llvm/tools/llvm-readtapi/CMakeLists.txt
+++ b/llvm/tools/llvm-readtapi/CMakeLists.txt
@@ -1,4 +1,5 @@
set(LLVM_LINK_COMPONENTS
+ BinaryFormat
Object
Support
Option
diff --git a/llvm/tools/llvm-readtapi/llvm-readtapi.cpp b/llvm/tools/llvm-readtapi/llvm-readtapi.cpp
index 78f1809e9d6473..193a281d6341af 100644
--- a/llvm/tools/llvm-readtapi/llvm-readtapi.cpp
+++ b/llvm/tools/llvm-readtapi/llvm-readtapi.cpp
@@ -25,6 +25,7 @@
#include "llvm/TextAPI/TextAPIError.h"
#include "llvm/TextAPI/TextAPIReader.h"
#include "llvm/TextAPI/TextAPIWriter.h"
+#include "llvm/TextAPI/Utils.h"
#include <cstdlib>
using namespace llvm;
@@ -92,29 +93,6 @@ static void reportError(Twine Message, int ExitCode = EXIT_FAILURE) {
exit(ExitCode);
}
-/// Replace extension considering frameworks.
-static void replace_extension(SmallVectorImpl<char> &Path,
- const Twine &Extension) {
- StringRef P(Path.begin(), Path.size());
- auto ParentPath = sys::path::parent_path(P);
- auto Filename = sys::path::filename(P);
-
- if (!ParentPath.ends_with(Filename.str() + ".framework")) {
- sys::path::replace_extension(Path, Extension);
- return;
- }
-
- SmallString<8> Storage;
- StringRef Ext = Extension.toStringRef(Storage);
-
- // Append '.' if needed.
- if (!Ext.empty() && Ext[0] != '.')
- Path.push_back('.');
-
- // Append extension.
- Path.append(Ext.begin(), Ext.end());
-}
-
static std::unique_ptr<InterfaceFile>
getInterfaceFile(const StringRef Filename, bool ResetBanner = true) {
ExitOnErr.setBanner(TOOLNAME + ": error: '" + Filename.str() + "' ");
@@ -212,7 +190,7 @@ static bool handleStubifyAction(Context &Ctx) {
if (Ctx.StubOpt.DeleteInput) {
std::error_code EC;
SmallString<PATH_MAX> OutputLoc = FileName;
- replace_extension(OutputLoc, ".tbd");
+ MachO::replace_extension(OutputLoc, ".tbd");
Ctx.OutStream = std::make_unique<llvm::raw_fd_stream>(OutputLoc, EC);
if (EC)
reportError("opening file '" + OutputLoc + ": " + EC.message());
More information about the llvm-commits
mailing list