Function at 0x18005e2b0
Capabilities:
Validate payment card number using luhn algorithm

Disassembly:
mov qword [rsp + 8], rbx
mov qword [rsp + 0x18], rsi
mov qword [rsp + 0x20], rdi
push rbp
push r12
push r13
push r14
push r15
lea rbp, [rsp - 0x90]
sub rsp, 0x190
mov rax, qword [0x1800a6040]
xor rax, rsp
mov qword [rbp + 0x80], rax
mov rbx, rdx
xor r12d, r12d
mov dword [rsp + 0x20], r12d
call fcn.18005edb0
xor edx, edx
mov r8d, pe_nt_image_headers64
lea rcx, [rsp + 0x70]
call sub.VCRUNTIME140.dll_memset
cmp qword [rbx + 0x18], 0xf
jbe 0x18005e314
mov rbx, qword [rbx]
lea rax, [0x180098bd0]
mov qword [rsp + 0x70], rax
lea rcx, [rbp + 0x18]
call qword [sym.imp.MSVCP140.dll_protected:_void___cdecl_std::basic_ios_char__struct_std::char_traits_char__::constructor_void____ptr64]
nop
mov r15d, 2
mov dword [rsp + 0x20], r15d
xor r9d, r9d
xor r8d, r8d
lea rdx, [rsp + 0x78]
lea rcx, [rsp + 0x70]
call qword [sym.imp.MSVCP140.dll_public:_void___cdecl_std::basic_ostream_char__struct_std::char_traits_char__::constructor_class_std::basic_streambuf_char__struct_std::char_traits_char______ptr64__bool____ptr64]
nop
mov rax, qword [rsp + 0x70]
movsxd rcx, dword [rax + 4]
lea r13, vtable.std::basic_ofstream_char__struct_std::char_traits_char__.0
mov qword [rsp + rcx + 0x70], r13
mov rax, qword [rsp + 0x70]
movsxd rcx, dword [rax + 4]
lea edx, [rcx - 0xa8]
mov dword [rsp + rcx + 0x6c], edx
lea rcx, [rsp + 0x78]
call qword [sym.imp.MSVCP140.dll_protected:_void___cdecl_std::basic_streambuf_char__struct_std::char_traits_char__::constructor_void____ptr64]
lea rax, vtable.std::basic_filebuf_char__struct_std::char_traits_char__.0
mov qword [rsp + 0x78], rax
mov byte [rbp - 0xc], 0
mov byte [rbp - 0x17], 0
lea rcx, [rsp + 0x78]
call qword [sym.imp.MSVCP140.dll_protected:_void___cdecl_std::basic_streambuf_char__struct_std::char_traits_char__::_Init_void____ptr64]
mov qword [rbp - 8], r12
mov rax, qword [0x1800d2a60]
mov qword [rbp - 0x14], rax
mov qword [rbp - 0x20], r12
mov r8d, r15d
mov rdx, rbx
lea rcx, [rsp + 0x78]
call fcn.180063240
test rax, rax
jne 0x18005e3e5
mov rax, qword [rsp + 0x70]
movsxd rcx, dword [rax + 4]
lea rax, [rsp + 0x70]
add rcx, rax
xor r8d, r8d
mov edx, r15d
call qword [sym.imp.MSVCP140.dll_public:_void___cdecl_std::basic_ios_char__struct_std::char_traits_char__::setstate_int__bool____ptr64]
nop
mov rax, qword [rsp + 0x70]
movsxd rcx, dword [rax + 4]
mov qword [rsp + rcx + 0x70], r13
mov rax, qword [rsp + 0x70]
movsxd rcx, dword [rax + 4]
lea edx, [rcx - 0xa8]
mov dword [rsp + rcx + 0x6c], edx
cmp qword [rbp - 8], 0
je 0x18005e64c
mov rdi, qword [0x1800a7328]
mov rbx, qword [rdi]
cmp rbx, rdi
je 0x18005e60c
nop dword [rax]
nop dword [rax + rax]
lea rdx, [rbx + 0x10]
lea rcx, [rsp + 0x28]
call fcn.1800470c0
or r15d, 1
lea rcx, [rsp + 0x28]
mov r8, qword [rsp + 0x28]
mov r9, qword [rsp + 0x40]
cmp r9, 0xf
cmova rcx, r8
lea r10, [rsp + 0x28]
cmova r10, r8
mov r11, qword [rsp + 0x38]
add r10, r11
cmp rcx, r10
je 0x18005e50f
movsx edx, byte [rcx]
lea eax, [rdx - 0x41]
cmp al, 0x19
ja 0x18005e49f
lea r8d, [rdx - 0x2c]
mov eax, 0x4ec4ec4f
imul r8d
sar edx, 3
mov eax, edx
shr eax, 0x1f
add edx, eax
imul eax, edx, 0x1a
sub r8d, eax
add r8b, 0x41
jmp 0x18005e4f1
lea eax, [rdx - 0x61]
cmp al, 0x19
ja 0x18005e4c8
lea r8d, [rdx - 0x4c]
mov eax, 0x4ec4ec4f
imul r8d
sar edx, 3
mov eax, edx
shr eax, 0x1f
add edx, eax
imul eax, edx, 0x1a
sub r8d, eax
add r8b, 0x61
jmp 0x18005e4f1
lea eax, [rdx - 0x30]
cmp al, 9
ja 0x18005e4f4
lea r8d, [rdx - 0x2b]
mov eax, 0x66666667
imul r8d
sar edx, 2
mov eax, edx
shr eax, 0x1f
add edx, eax
lea eax, [rdx + rdx*4]
add eax, eax
sub r8d, eax
add r8b, 0x30
mov byte [rcx], r8b
inc rcx
cmp rcx, r10
jne 0x18005e473
mov r9, qword [rsp + 0x40]
mov r11, qword [rsp + 0x38]
mov r8, qword [rsp + 0x28]
lea rdx, [rsp + 0x28]
cmp r9, 0xf
cmova rdx, r8
mov r8, r11
lea rcx, [rsp + 0x70]
call fcn.180064150
lea rdx, [0x1800905c8]
mov rcx, rax
call fcn.180001cc0
mov rsi, rax
mov rcx, qword [rbx + 0x30]
mov rdx, qword [rcx]
mov r8, qword [rdx]
lea rdx, [rsp + 0x48]
call r8
nop
mov r8, qword [rax + 0x10]
cmp qword [rax + 0x18], 0xf
jbe 0x18005e55c
mov rax, qword [rax]
mov rdx, rax
mov rcx, rsi
call fcn.180064150
lea rdx, [0x18008b350]
mov rcx, rax
call fcn.180001cc0
nop
mov rdx, qword [rsp + 0x60]
cmp rdx, 0xf
jbe 0x18005e5b4
inc rdx
mov rcx, qword [rsp + 0x48]
mov rax, rcx
cmp rdx, 0x1000
jb 0x18005e5af
add rdx, 0x27
mov rcx, qword [rcx - 8]
sub rax, rcx
add rax, 0xfffffffffffffff8
cmp rax, 0x1f
ja 0x18005e63e
call fcn.180064e44
mov qword [rsp + 0x58], r12
mov qword [rsp + 0x60], 0xf
mov byte [rsp + 0x48], 0
mov rdx, qword [rsp + 0x40]
cmp rdx, 0xf
jbe 0x18005e600
inc rdx
mov rcx, qword [rsp + 0x28]
mov rax, rcx
cmp rdx, 0x1000
jb 0x18005e5fb
add rdx, 0x27
mov rcx, qword [rcx - 8]
sub rax, rcx
add rax, 0xfffffffffffffff8
cmp rax, 0x1f
ja 0x18005e645
call fcn.180064e44
mov rbx, qword [rbx]
cmp rbx, rdi
jne 0x18005e430
lea rcx, [rsp + 0x78]
call fcn.180063180
test rax, rax
jne 0x18005e63a
mov rax, qword [rsp + 0x70]
movsxd rcx, dword [rax + 4]
lea rax, [rsp + 0x70]
add rcx, rax
xor r8d, r8d
mov edx, 2
call qword [sym.imp.MSVCP140.dll_public:_void___cdecl_std::basic_ios_char__struct_std::char_traits_char__::setstate_int__bool____ptr64]
mov bl, 1
jmp 0x18005e64e
call qword [sym.imp.api_ms_win_crt_runtime_l1_1_0.dll__invalid_parameter_noinfo_noreturn]
nop
call qword [sym.imp.api_ms_win_crt_runtime_l1_1_0.dll__invalid_parameter_noinfo_noreturn]
int3
xor bl, bl
mov rcx, qword [rsp + 0x70]
movsxd rdx, dword [rcx + 4]
mov qword [rsp + rdx + 0x70], r13
mov rcx, qword [rsp + 0x70]
movsxd rdx, dword [rcx + 4]
lea r8d, [rdx - 0xa8]
mov dword [rsp + rdx + 0x6c], r8d
lea rcx, [rsp + 0x78]
call fcn.180062dd0
lea rcx, [rbp - 0x80]
call qword [sym.imp.MSVCP140.dll_public_virtual:_void___cdecl_std::basic_ostream_char__struct_std::char_traits_char__::destructor_void____ptr64]
lea rcx, [rbp + 0x18]
call qword [sym.imp.MSVCP140.dll_public_virtual:_void___cdecl_std::basic_ios_char__struct_std::char_traits_char__::destructor_void____ptr64]
movzx eax, bl
mov rcx, qword [rbp + 0x80]
xor rcx, rsp
call fcn.180064a70
lea r11, [rsp + 0x190]
mov rbx, qword [r11 + 0x30]
mov rsi, qword [r11 + 0x40]
mov rdi, qword [r11 + 0x48]
mov rsp, r11
pop r15
pop r14
pop r13
pop r12
pop rbp
ret