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

Disassembly:
mov qword [rsp + 8], rbx
mov qword [rsp + 0x10], rbp
mov qword [rsp + 0x20], rsi
push rdi
push r12
push r13
push r14
push r15
sub rsp, 0x30
lea r13d, [r8 + 8]
mov r14, r9
mov esi, r8d
mov rbx, rdx
mov rdi, rcx
cmp r8d, r13d
jae 0x1800089ff
mov r12, qword [rsp + 0x28]
lea rdx, [0x180000000]
movzx r15d, byte [rsp + 0x70]
movzx ebp, byte [rsp + 0x70]
nop dword [rax]
lea eax, [rsi - 0xbb]
cmp eax, 0x1a
ja case.0x180008861.195
movzx eax, byte [rdx + rax + 0x8a64]
mov ecx, dword [rdx + rax*4 + 0x8a40]
add rcx, rdx
jmp rcx
call qword [sym.imp.api_ms_win_crt_utility_l1_1_0.dll_rand]
mov ecx, eax
mov eax, 0x66666667
imul ecx
sar edx, 2
mov eax, edx
shr eax, 0x1f
add edx, eax
lea eax, [rdx + rdx*4]
add eax, eax
sub ecx, eax
inc ecx
mov dword [rbx], ecx
xor ecx, ecx
call qword [sym.imp.api_ms_win_crt_stdio_l1_1_0.dll___acrt_iob_func]
mov rcx, rax
call qword [sym.imp.api_ms_win_crt_stdio_l1_1_0.dll_fflush]
call qword [sym.imp.api_ms_win_crt_utility_l1_1_0.dll_rand]
mov ecx, eax
mov eax, 0x66666667
imul ecx
sar edx, 2
mov eax, edx
shr eax, 0x1f
add edx, eax
lea eax, [rdx + rdx*4]
add eax, eax
sub ecx, eax
inc ecx
mov dword [rdi], ecx
xor ecx, ecx
call qword [sym.imp.api_ms_win_crt_stdio_l1_1_0.dll___acrt_iob_func]
mov rcx, rax
call qword [sym.imp.api_ms_win_crt_stdio_l1_1_0.dll_fflush]
movsxd rdx, dword [rbx]
lea eax, [rdx - 1]
cmp eax, 9
ja case.0x180008861.188
movsxd rax, dword [rdi]
lea ecx, [rax - 1]
cmp ecx, 9
ja case.0x180008861.188
imul rdx, rdx, 0xb
mov rcx, rax
lea rax, [r14 + rdx]
movzx edx, byte [rcx + rax]
cmp dl, 0x58
je case.0x180008861.188
cmp dl, 0x4f
je case.0x180008861.188
jmp 0x1800089ed
movzx eax, byte [rdi]
lea rdx, [rsp + 0x70]
mov r8, rbx
mov byte [rsp + 0x70], al
mov ecx, 0x95
call fcn.18002bee0
xor r8d, r8d
mov edx, SHSetFolderPathA
mov rcx, rbx
call fcn.18003b4c0
cmp al, 0xfa
jne case.0x180008861.189
jmp 0x1800089ed
movzx r12d, byte [rdi + 1]
mov eax, dword [rbx + 4]
add r12, rdi
add rax, rbx
mov qword [rsp + 0x28], rax
jmp case.0x180008861.195
mov ecx, dword [rbx]
sub ecx, 8
je 0x1800089a2
sub ecx, 1
je 0x18000898d
cmp ecx, 1
jne 0x180008a21
mov rax, qword [0x1800592b8]
mov ebp, dword [rax + 0x28]
mov r15d, ebp
shr r15d, 8
and r15b, 0x3f
shr ebp, 0x14
and bpl, 0x3f
jmp case.0x180008861.193
mov rax, qword [0x1800592b8]
mov r15d, dword [rax + 0x24]
shr r15d, 0x14
and r15b, 0x3f
jmp 0x1800089b1
mov rax, qword [0x1800592b8]
mov r15d, dword [rax + 0x24]
shr r15d, 0x1a
mov bpl, 1
mov r9, qword [rbx + 0x20]
xor edx, edx
xor r8d, r8d
mov esi, 0xd4
lea ecx, [rdx + 0x3b]
call fcn.1800405c0
movzx r8d, bpl
xor edx, edx
movzx ecx, r15b
imul r8d, ecx
div r8d
mov dword [rsp + 0x20], eax
jmp 0x1800089ed
lea rcx, str.HRESULT_ID3DXBaseEffect::SetString__
call fcn.180045800
lea rdx, [0x180000000]
inc esi
cmp esi, r13d
jb 0x180008840
mov rax, qword [rsp + 0x28]
mov rbx, qword [rsp + 0x60]
mov rbp, qword [rsp + 0x68]
mov rsi, qword [rsp + 0x78]
add rsp, 0x30
pop r15
pop r14
pop r13
pop r12
pop rdi
ret
mov rax, 0xffffffffffffffff
jmp 0x180008a04
cmp r12, qword [rsp + 0x28]
jae 0x180008a36
mov rax, r12
jmp 0x180008a04
xor eax, eax
jmp 0x180008a04
mov eax, dword [rsp + 0x20]
jmp 0x180008a04