Function at 0x14015c1f0
Capabilities:
Parse pe header

Disassembly:
mov r11, rsp
push rdi
push r12
push r13
push r14
push r15
sub rsp, 0x380
mov qword [r11 - 0x230], 0xfffffffffffffffe
mov qword [r11 + 0x10], rbx
mov qword [r11 + 0x20], rsi
mov rax, qword [0x140735840]
xor rax, rsp
mov qword [rsp + 0x370], rax
mov r12, r8
mov ebx, edx
mov qword [rsp + 0x80], rcx
xor edi, edi
mov dword [rsp + 0x60], edi
xor r8d, r8d
lea rdx, [r11 - 0x98]
mov rcx, r12
call fcn.140159d10
nop
mov qword [rsp + 0x20], rdi
lea r9, [rsp + 0x58]
mov edx, 0x101f
lea r8d, [rdi + 8]
mov rcx, qword [r12]
call fcn.14021e020
mov ecx, eax
test eax, eax
je 0x14015c2bc
xor eax, eax
mov qword [rsp + 0xb8], rax
mov qword [rsp + 0xc0], rax
lea rax, [0x1403e47d8]
mov qword [rsp + 0xb0], rax
mov dword [rsp + 0xc8], ecx
lea rax, str.clGetDeviceInfo
mov qword [rsp + 0xd0], rax
lea rdx, [0x1406ea7e8]
lea rcx, [rsp + 0xb0]
call fcn.14036def8
int3
mov qword [rsp + 0x20], rdi
lea r9, [rsp + 0x68]
mov edx, 0x1010
mov r8d, 8
mov rcx, qword [r12]
call fcn.14021e020
mov ecx, eax
test eax, eax
je 0x14015c32c
xor eax, eax
mov qword [rsp + 0xe0], rax
mov qword [rsp + 0xe8], rax
lea rax, [0x1403e47d8]
mov qword [rsp + 0xd8], rax
mov dword [rsp + 0xf0], ecx
lea rax, str.clGetDeviceInfo
mov qword [rsp + 0xf8], rax
lea rdx, [0x1406ea7e8]
lea rcx, [rsp + 0xd8]
call fcn.14036def8
int3
mov rax, qword [rsp + 0x68]
cmp ebx, 2
cmove rax, qword [rsp + 0x58]
mov qword [rsp + 0x78], rax
mov ecx, ebx
sub ecx, 1
je 0x14015c35f
cmp ecx, 1
je 0x14015c355
mov dword [rsp + 0x30], 3
jmp 0x14015c367
mov dword [rsp + 0x30], 2
jmp 0x14015c367
mov dword [rsp + 0x30], 1
or rsi, 0xffffffffffffffff
mov r14, rsi
mov qword [rsp + 0x200], 0xf
mov qword [rsp + 0x1f8], rdi
mov byte [rsp + 0x1e8], 0
cmp ebx, 1
jne 0x14015c4d9
xor r8d, r8d
lea rdx, [rsp + 0x208]
mov rcx, r12
call fcn.140159ed0
mov rdx, rax
lea rcx, [rsp + 0x1e8]
call fcn.14002e050
mov rax, qword [rsp + 0x220]
cmp rax, 0x10
jb 0x14015c414
inc rax
mov rcx, qword [rsp + 0x208]
cmp rax, 0x1000
jb 0x14015c40f
test cl, 0x1f
je 0x14015c3e2
call fcn.140376968
int3
mov rax, qword [rcx - 8]
cmp rax, rcx
jb 0x14015c3f1
call fcn.140376968
int3
sub rcx, rax
cmp rcx, 8
jae 0x14015c400
call fcn.140376968
int3
cmp rcx, 0x27
jbe 0x14015c40c
call fcn.140376968
int3
mov rcx, rax
call fcn.14034da94
mov qword [rsp + 0x220], 0xf
mov qword [rsp + 0x218], rdi
mov byte [rsp + 0x208], 0
mov qword [rsp + 0x20], rdi
lea r9, [rsp + 0x248]
mov edx, 0x4037
mov r8d, 0x18
mov rcx, qword [r12]
call fcn.14021e020
mov ecx, eax
test eax, eax
je 0x14015c4a3
xor eax, eax
mov qword [rsp + 0x108], rax
mov qword [rsp + 0x110], rax
lea rax, [0x1403e47d8]
mov qword [rsp + 0x100], rax
mov dword [rsp + 0x118], ecx
lea rax, str.clGetDeviceInfo
mov qword [rsp + 0x120], rax
lea rdx, [0x1406ea7e8]
lea rcx, [rsp + 0x100]
call fcn.14036def8
int3
movsx rcx, byte [rsp + 0x25d]
mov r14, rcx
shl r14, 8
movsx rdx, byte [rsp + 0x25e]
add r14, rdx
shl r14, 8
movsx rax, byte [rsp + 0x25f]
add r14, rax
test cl, cl
jne 0x14015c4d9
test dl, dl
cmove r14, rsi
xor r8d, r8d
lea rdx, [rsp + 0x1c8]
mov rcx, r12
call fcn.140159df0
nop
mov dword [rsp + 0x1b8], 0x28
mov dword [rsp + 0x1bc], 0x1f
mov eax, dword [rsp + 0x1bc]
xor eax, 0x67
mov byte [rsp + 0x1c0], al
movsx ecx, byte [rsp + 0x1c0]
xor ecx, 0x58
mov byte [rsp + 0x1c1], cl
movsx ecx, byte [rsp + 0x1c1]
xor ecx, 0x4d
mov byte [rsp + 0x1c2], cl
movsx ecx, byte [rsp + 0x1c2]
xor ecx, 0x46
mov byte [rsp + 0x1c3], cl
movsx ecx, byte [rsp + 0x1c3]
xor ecx, 0x6b
mov byte [rsp + 0x1c4], cl
movsx ecx, byte [rsp + 0x1c4]
xor ecx, 0x64
mov byte [rsp + 0x1c5], cl
movsx ecx, byte [rsp + 0x1c5]
xor ecx, 8
mov byte [rsp + 0x1c6], cl
xor eax, eax
mov byte [rsp + 0x1c7], al
movzx eax, byte [rsp + 0x1c0]
lea rdx, [rsp + 0x228]
lea rcx, [rsp + 0x1b8]
call fcn.14016bd20
mov r15, rax
mov r13, qword [rax + 0x10]
cmp qword [rax + 0x18], 0x10
jb 0x14015c5b7
mov r15, qword [rax]
mov rbx, qword [rsp + 0x1d8]
test r13, r13
je 0x14015c673
test rbx, rbx
je 0x14015c670
cmp r13, rbx
ja 0x14015c670
sub rbx, r13
inc rbx
lea rsi, [rsp + 0x1c8]
cmp qword [rsp + 0x1e0], 0x10
cmovae rsi, qword [rsp + 0x1c8]
nop word [rax + rax]
test rbx, rbx
je 0x14015c664
movsx edx, byte [r15]
mov r8, rbx
mov rcx, rsi
call fcn.14036eb10
mov rdi, rax
test rax, rax
je 0x14015c664
mov r8, r13
mov rdx, r15
mov rcx, rax
call fcn.14036e890
test eax, eax
je 0x14015c63d
sub rsi, rdi
dec rsi
add rbx, rsi
lea rsi, [rdi + 1]
jmp 0x14015c600
lea rax, [rsp + 0x1c8]
cmp qword [rsp + 0x1e0], 0x10
cmovae rax, qword [rsp + 0x1c8]
sub rdi, rax
mov rbx, qword [rsp + 0x1d8]
jmp 0x14015c673
mov rbx, qword [rsp + 0x1d8]
or rsi, 0xffffffffffffffff
mov rdi, rsi
mov rax, qword [rsp + 0x240]
cmp rax, 0x10
jb 0x14015c6d9
inc rax
mov rcx, qword [rsp + 0x228]
cmp rax, 0x1000
jb 0x14015c6cc
test cl, 0x1f
je 0x14015c69f
call fcn.140376968
int3
mov rax, qword [rcx - 8]
cmp rax, rcx
jb 0x14015c6ae
call fcn.140376968
int3
sub rcx, rax
cmp rcx, 8
jae 0x14015c6bd
call fcn.140376968
int3
cmp rcx, 0x27
jbe 0x14015c6c9
call fcn.140376968
int3
mov rcx, rax
call fcn.14034da94
mov rbx, qword [rsp + 0x1d8]
mov qword [rsp + 0x240], 0xf
xor esi, esi
mov qword [rsp + 0x238], rsi
mov byte [rsp + 0x228], sil
test rdi, rdi
jne 0x14015cb92
cmp rbx, 7
ja 0x14015c72d
mov qword [rsp + 0x1d8], rsi
lea rax, [rsp + 0x1c8]
cmp qword [rsp + 0x1e0], 0x10
cmovae rax, qword [rsp + 0x1c8]
mov byte [rax], sil
jmp 0x14015c77f
lea rcx, [rsp + 0x1c8]
cmp qword [rsp + 0x1e0], 0x10
cmovae rcx, qword [rsp + 0x1c8]
add rbx, 0xfffffffffffffff9
je 0x14015c759
lea rdx, [rcx + 7]
mov r8, rbx
call fcn.14036d8b0
mov qword [rsp + 0x1d8], rbx
lea rax, [rsp + 0x1c8]
cmp qword [rsp + 0x1e0], 0x10
cmovae rax, qword [rsp + 0x1c8]
mov byte [rbx + rax], sil
mov qword [rsp + 0x50], rsi
lea rbx, [rsp + 0x1c8]
cmp qword [rsp + 0x1e0], 0x10
cmovae rbx, qword [rsp + 0x1c8]
call fcn.14037b0d4
mov dword [rax], esi
mov r8d, 0xa
lea rdx, [rsp + 0x40]
mov rcx, rbx
call fcn.14037bee8
mov edi, eax
cmp rbx, qword [rsp + 0x40]
jne 0x14015c7cd
lea rcx, str.invalid_stoul_argument
call fcn.14032c404
call fcn.14037b0d4
cmp dword [rax], 0x22
jne 0x14015c7e3
lea rcx, str.stoul_argument_out_of_range
call fcn.14032c44c
mov r8, qword [rsp + 0x40]
sub r8, rbx
mov qword [rsp + 0x50], r8
je 0x14015c88b
lea rax, [r8 + 2]
cmp qword [rsp + 0x1d8], rax
jb 0x14015c88b
inc r8
xor edx, edx
lea rcx, [rsp + 0x1c8]
call fcn.14001fa80
lea rbx, [rsp + 0x1c8]
cmp qword [rsp + 0x1e0], 0x10
cmovae rbx, qword [rsp + 0x1c8]
call fcn.14037b0d4
mov dword [rax], esi
mov r8d, 0xa
lea rdx, [rsp + 0x48]
mov rcx, rbx
call fcn.14037bee8
mov r13d, eax
cmp rbx, qword [rsp + 0x48]
jne 0x14015c864
lea rcx, str.invalid_stoul_argument
call fcn.14032c404
call fcn.14037b0d4
cmp dword [rax], 0x22
jne 0x14015c87a
lea rcx, str.stoul_argument_out_of_range
call fcn.14032c44c
mov rax, qword [rsp + 0x48]
sub rax, rbx
mov qword [rsp + 0x50], rax
jne 0x14015c890
jmp 0x14015c88e
mov r13d, esi
mov edi, esi
test edi, edi
jle 0x14015cb92
lea rcx, [rsp + 0x310]
call fcn.14015b400
mov ebx, eax
add eax, 0xfffffffb
cmp eax, 4
jbe 0x14015c8bf
lea eax, [rbx - 1]
cmp eax, 1
jbe 0x14015c8bf
mov r15, rsi
cmp ebx, 4
jne 0x14015c8c5
mov r15d, 1
mov qword [rsp + 0x20], rsi
lea r9, [rsp + 0x38]
mov edx, 0x1002
mov r8d, 4
mov rcx, qword [r12]
call fcn.14021e020
mov ecx, eax
test eax, eax
je 0x14015c935
xor eax, eax
mov qword [rsp + 0x130], rax
mov qword [rsp + 0x138], rax
lea rax, [0x1403e47d8]
mov qword [rsp + 0x128], rax
mov dword [rsp + 0x140], ecx
lea rax, str.clGetDeviceInfo
mov qword [rsp + 0x148], rax
lea rdx, [0x1406ea7e8]
lea rcx, [rsp + 0x128]
call fcn.14036def8
int3
mov esi, dword [rsp + 0x38]
lea eax, [rbx - 0xb]
cmp eax, 1
ja 0x14015c943
add esi, esi
mov dword [rsp + 0x260], 1
mov dword [rsp + 0x264], edi
mov dword [rsp + 0x268], r13d
mov eax, dword [rsp + 0x30]
mov dword [rsp + 0x26c], eax
mov rcx, qword [r12]
mov qword [rsp + 0x270], rcx
xor edi, edi
mov qword [rsp + 0x20], rdi
lea r9, [rsp + 0x70]
mov edx, 0x1031
lea r8d, [rdi + 8]
call fcn.14021e020
mov ecx, eax
test eax, eax
je 0x14015c9e0
xor eax, eax
mov qword [rsp + 0x158], rax
mov qword [rsp + 0x160], rax
lea rax, [0x1403e47d8]
mov qword [rsp + 0x150], rax
mov dword [rsp + 0x168], ecx
lea rax, str.clGetDeviceInfo
mov qword [rsp + 0x170], rax
lea rdx, [0x1406ea7e8]
lea rcx, [rsp + 0x150]
call fcn.14036def8
int3
mov rax, qword [rsp + 0x70]
mov qword [rsp + 0x278], rax
mov qword [rsp + 0x298], 0xf
mov qword [rsp + 0x290], rdi
mov byte [rsp + 0x280], dil
or r9, 0xffffffffffffffff
xor r8d, r8d
lea rdx, [rsp + 0x310]
lea rcx, [rsp + 0x280]
call fcn.14001ef10
nop
mov qword [rsp + 0x2b8], 0xf
mov qword [rsp + 0x2b0], rdi
mov byte [rsp + 0x2a0], 0
or r9, 0xffffffffffffffff
xor r8d, r8d
lea rdx, [rsp + 0x1e8]
lea rcx, [rsp + 0x2a0]
call fcn.14001ef10
mov qword [rsp + 0x2d8], 0xf
mov qword [rsp + 0x2d0], rdi
mov byte [rsp + 0x2c0], 0
mov qword [rsp + 0x2e0], r14
mov rax, qword [rsp + 0x58]
mov qword [rsp + 0x2e8], rax
mov rax, qword [rsp + 0x78]
mov qword [rsp + 0x2f0], rax
mov dword [rsp + 0x2f8], esi
lea rax, [r15 + r15]
mov byte [rsp + 0x2fc], al
mov dword [rsp + 0x300], edi
lea rdx, [rsp + 0x260]
mov rbx, qword [rsp + 0x80]
mov rcx, rbx
call fcn.14007b870
lea rcx, [rsp + 0x2c0]
call fcn.14001c970
lea rcx, [rsp + 0x2a0]
call fcn.14001c970
lea rcx, [rsp + 0x280]
call fcn.14001c970
nop
mov rax, qword [rsp + 0x1e0]
cmp rax, 0x10
jb 0x14015cb53
inc rax
mov rcx, qword [rsp + 0x1c8]
cmp rax, 0x1000
jb 0x14015cb4e
test cl, 0x1f
je 0x14015cb21
call fcn.140376968
int3
mov rax, qword [rcx - 8]
cmp rax, rcx
jb 0x14015cb30
call fcn.140376968
int3
sub rcx, rax
cmp rcx, 8
jae 0x14015cb3f
call fcn.140376968
int3
cmp rcx, 0x27
jbe 0x14015cb4b
call fcn.140376968
int3
mov rcx, rax
call fcn.14034da94
mov qword [rsp + 0x1e0], 0xf
mov qword [rsp + 0x1d8], rdi
mov byte [rsp + 0x1c8], 0
lea rcx, [rsp + 0x1e8]
call fcn.14001c970
nop
lea rcx, [rsp + 0x310]
call fcn.14001c970
mov rax, rbx
jmp 0x14015cf67
lea rbx, [rsp + 0x310]
lea rax, [rsp + 0x1e8]
cmp qword [rsp + 0x1f8], 0
cmovne rbx, rax
mov dword [rsp + 0x180], 0x33
mov dword [rsp + 0x184], 0x61
mov eax, dword [rsp + 0x184]
xor eax, 0x7a
mov byte [rsp + 0x188], al
movsx ecx, byte [rsp + 0x188]
xor ecx, 0x5d
mov byte [rsp + 0x189], cl
movsx ecx, byte [rsp + 0x189]
xor ecx, 0x45
mov byte [rsp + 0x18a], cl
movsx ecx, byte [rsp + 0x18a]
xor ecx, 0x52
mov byte [rsp + 0x18b], cl
movsx ecx, byte [rsp + 0x18b]
xor ecx, 0x5f
mov byte [rsp + 0x18c], cl
movsx ecx, byte [rsp + 0x18c]
xor ecx, 0x5a
mov byte [rsp + 0x18d], cl
movsx ecx, byte [rsp + 0x18d]
xor ecx, 0x57
mov byte [rsp + 0x18e], cl
movsx ecx, byte [rsp + 0x18e]
xor ecx, 0x13
mov byte [rsp + 0x18f], cl
movsx ecx, byte [rsp + 0x18f]
xor ecx, 0x7c
mov byte [rsp + 0x190], cl
movsx ecx, byte [rsp + 0x190]
xor ecx, 0x43
mov byte [rsp + 0x191], cl
movsx ecx, byte [rsp + 0x191]
xor ecx, 0x56
mov byte [rsp + 0x192], cl
movsx ecx, byte [rsp + 0x192]
xor ecx, 0x5d
mov byte [rsp + 0x193], cl
movsx ecx, byte [rsp + 0x193]
xor ecx, 0x70
mov byte [rsp + 0x194], cl
movsx ecx, byte [rsp + 0x194]
xor ecx, 0x7f
mov byte [rsp + 0x195], cl
movsx ecx, byte [rsp + 0x195]
xor ecx, 0x13
mov byte [rsp + 0x196], cl
movsx ecx, byte [rsp + 0x196]
xor ecx, 0x45
mov byte [rsp + 0x197], cl
movsx ecx, byte [rsp + 0x197]
xor ecx, 0x56
mov byte [rsp + 0x198], cl
movsx ecx, byte [rsp + 0x198]
xor ecx, 0x41
mov byte [rsp + 0x199], cl
movsx ecx, byte [rsp + 0x199]
xor ecx, 0x40
mov byte [rsp + 0x19a], cl
movsx ecx, byte [rsp + 0x19a]
xor ecx, 0x5a
mov byte [rsp + 0x19b], cl
movsx ecx, byte [rsp + 0x19b]
xor ecx, 0x5c
mov byte [rsp + 0x19c], cl
movsx ecx, byte [rsp + 0x19c]
xor ecx, 0x5d
mov byte [rsp + 0x19d], cl
movsx ecx, byte [rsp + 0x19d]
xor ecx, 0x13
mov byte [rsp + 0x19e], cl
movsx ecx, byte [rsp + 0x19e]
xor ecx, 0x5c
mov byte [rsp + 0x19f], cl
movsx ecx, byte [rsp + 0x19f]
xor ecx, 0x55
mov byte [rsp + 0x1a0], cl
movsx ecx, byte [rsp + 0x1a0]
xor ecx, 0x13
mov byte [rsp + 0x1a1], cl
movsx ecx, byte [rsp + 0x1a1]
xor ecx, 0x57
mov byte [rsp + 0x1a2], cl
movsx ecx, byte [rsp + 0x1a2]
xor ecx, 0x56
mov byte [rsp + 0x1a3], cl
movsx ecx, byte [rsp + 0x1a3]
xor ecx, 0x45
mov byte [rsp + 0x1a4], cl
movsx ecx, byte [rsp + 0x1a4]
xor ecx, 0x5a
mov byte [rsp + 0x1a5], cl
movsx ecx, byte [rsp + 0x1a5]
xor ecx, 0x50
mov byte [rsp + 0x1a6], cl
movsx ecx, byte [rsp + 0x1a6]
xor ecx, 0x56
mov byte [rsp + 0x1a7], cl
movsx ecx, byte [rsp + 0x1a7]
xor ecx, 0x13
mov byte [rsp + 0x1a8], cl
movsx ecx, byte [rsp + 0x1a8]
xor ecx, 0x48
mov byte [rsp + 0x1a9], cl
movsx ecx, byte [rsp + 0x1a9]
xor ecx, 0x4e
mov byte [rsp + 0x1aa], cl
movsx ecx, byte [rsp + 0x1aa]
xor ecx, 9
mov byte [rsp + 0x1ab], cl
movsx ecx, byte [rsp + 0x1ab]
xor ecx, 0x13
mov byte [rsp + 0x1ac], cl
movsx ecx, byte [rsp + 0x1ac]
xor ecx, 0x14
mov byte [rsp + 0x1ad], cl
movsx ecx, byte [rsp + 0x1ad]
xor ecx, 0x48
mov byte [rsp + 0x1ae], cl
movsx ecx, byte [rsp + 0x1ae]
xor ecx, 0x4e
mov byte [rsp + 0x1af], cl
movsx ecx, byte [rsp + 0x1af]
xor ecx, 0x14
mov byte [rsp + 0x1b0], cl
xor eax, eax
mov byte [rsp + 0x1b1], al
movzx eax, byte [rsp + 0x188]
lea rdx, [rsp + 0x330]
lea rcx, [rsp + 0x180]
call fcn.140067c20
nop
cmp qword [rax + 0x18], 0x10
jb 0x14015ced7
mov rax, qword [rax]
lea r9, [rsp + 0x1c8]
mov r8, rbx
mov rdx, rax
lea rcx, [rsp + 0x350]
call fcn.140159c70
nop
cmp qword [rax + 0x18], 0x10
jb 0x14015cefd
mov rax, qword [rax]
lea rcx, [0x1403ce6a8]
mov qword [rsp + 0x88], rcx
xor ecx, ecx
mov qword [rsp + 0x90], rcx
mov qword [rsp + 0x98], rcx
mov qword [rsp + 0xa0], rax
mov byte [rsp + 0xa8], 1
lea rdx, [rsp + 0x90]
lea rcx, [rsp + 0xa0]
call fcn.14036dce8
lea rax, [0x1403ce6c0]
mov qword [rsp + 0x88], rax
lea rdx, [0x1406e9d70]
lea rcx, [rsp + 0x88]
call fcn.14036def8
nop
mov rcx, qword [rsp + 0x370]
xor rcx, rsp
call fcn.14034de80
lea r11, [rsp + 0x380]
mov rbx, qword [r11 + 0x38]
mov rsi, qword [r11 + 0x48]
mov rsp, r11
pop r15
pop r14
pop r13
pop r12
pop rdi
ret