Function at 0x14002ac80
Capabilities:
Parse credit card information

Disassembly:
push rsi
push r14
push r15
sub rsp, 0x30
mov r9d, dword [rcx + 0x20]
mov r15, r8
mov rsi, rdx
mov r14, rcx
lea eax, [r9 - 1]
mov dword [rcx + 0x20], eax
test r9d, r9d
je 0x14002b236
mov rdx, qword [rcx + 0x10]
mov qword [rsp + 0x50], rbx
mov qword [rsp + 0x58], rbp
mov qword [rsp + 0x60], rdi
mov qword [rsp + 0x28], r12
mov qword [rsp + 0x20], r13
cmp r8, rdx
je 0x14002b20c
lea rbp, [0x140000000]
xor r13d, r13d
movabs r9, 0x8000240000000000
movzx r10d, byte [r15]
movsx ecx, r10b
sub ecx, 0x24
je 0x14002aeda
sub ecx, 1
je 0x14002ad4c
sub ecx, 3
je 0x14002b052
cmp ecx, 1
jne case.0x14002ad75.51
movzx eax, byte [r14 + 0x24]
mov ecx, eax
sub rcx, 1
lea edx, [rax - 1]
js 0x14002b247
lea rax, [rcx + 3]
shl rax, 4
add rax, r14
nop dword [rax + rax]
cmp qword [rax], 0xffffffffffffffff
je 0x14002b011
dec edx
sub rax, 0x10
sub rcx, 1
js 0x14002b247
jmp 0x14002ad30
movzx r8d, byte [r15 + 1]
movsx eax, r8b
add eax, 0xffffffd0
cmp eax, 0x36
ja case.0x14002ad75.51
cdqe
movzx eax, byte [rax + rbp + 0x2b2f4]
mov ecx, dword [rbp + rax*4 + 0x2b2e4]
add rcx, rbp
jmp rcx
lea rcx, [r15 + 2]
lea rax, [rdx - 1]
cmp rcx, rax
jae 0x14002b27a
movzx r9d, byte [rcx]
cmp byte [rsi], r9b
jne 0x14002b209
mov r8, qword [r14 + 8]
lea rax, [rsi + 1]
movzx r10d, byte [rcx + 1]
mov ecx, 1
cmp rax, r8
jae 0x14002b209
movzx edx, byte [rax]
cmp dl, r10b
jne 0x14002add3
sub ecx, 1
jne 0x14002adda
lea rsi, [rax + 1]
test rsi, rsi
je 0x14002b20c
add r15, 4
jmp 0x14002aff5
cmp dl, r9b
jne 0x14002adda
inc ecx
inc rax
cmp rax, r8
jb 0x14002adb0
jmp 0x14002b209
cmp byte [r15 + 2], 0x5b
jne 0x14002b29c
cmp byte [r15 + 3], 0x5e
lea rcx, [r15 + 3]
jne 0x14002ae00
inc rcx
cmp rcx, rdx
je 0x14002b28b
movzx eax, byte [rcx]
inc rcx
cmp al, 0x25
jne 0x14002ae1b
cmp rcx, rdx
jae 0x14002ae1b
inc rcx
cmp byte [rcx], 0x5d
jne 0x14002ae00
lea rbx, [rcx + 1]
cmp rsi, qword [r14]
jne 0x14002ae2d
xor al, al
jmp 0x14002ae31
movzx eax, byte [rsi - 1]
movzx ecx, al
lea r8, [rbx - 1]
lea rdx, [r15 + 2]
call fcn.14002abd0
test eax, eax
jne 0x14002b209
movzx ecx, byte [rsi]
lea r8, [rbx - 1]
lea rdx, [r15 + 2]
call fcn.14002abd0
test eax, eax
je 0x14002b209
mov r15, rbx
jmp 0x14002aff5
mov rcx, r8
add r8d, 0xffffffcf
js 0x14002b2ad
movzx eax, byte [r14 + 0x24]
cmp r8d, eax
jge 0x14002b2ad
add rcx, 0xffffffffffffffcf
lea rax, [rcx + 3]
add rax, rax
mov rbx, qword [r14 + rax*8]
cmp rbx, 0xffffffffffffffff
je 0x14002b2ad
mov rax, qword [r14 + 8]
sub rax, rsi
cmp rax, rbx
jb 0x14002b209
add rcx, rcx
mov r8, rbx
mov rdx, rsi
mov rcx, qword [r14 + rcx*8 + 0x28]
call sub.VCRUNTIME140.dll_memcmp
test eax, eax
jne 0x14002b209
add rsi, rbx
je 0x14002b20c
add r15, 2
jmp 0x14002aff5
lea rax, [r15 + 1]
cmp rax, rdx
je 0x14002b201
lea rbx, [r15 + 1]
cmp r10b, 0x25
je 0x14002af23
cmp r10b, 0x5b
jne 0x14002af2f
cmp byte [r15 + 1], 0x5e
jne 0x14002af01
inc rbx
cmp rbx, rdx
je 0x14002b2c1
movzx eax, byte [rbx]
inc rbx
cmp al, 0x25
jne 0x14002af1c
cmp rbx, rdx
jae 0x14002af1c
inc rbx
cmp byte [rbx], 0x5d
jne 0x14002af01
jmp 0x14002af2c
cmp rbx, rdx
je 0x14002b2d2
inc rbx
cmp rsi, qword [r14 + 8]
jb 0x14002af3d
movzx eax, byte [rbx]
jmp 0x14002afbd
movzx r9d, byte [rsi]
movzx eax, r10b
cmp r10b, 0x25
je 0x14002af9d
cmp al, 0x2e
je 0x14002af6f
cmp al, 0x5b
je 0x14002af5e
cmp r10d, r9d
mov ecx, r13d
sete cl
jmp 0x14002afac
lea r8, [rbx - 1]
mov rdx, r15
mov ecx, r9d
call fcn.14002abd0
jmp 0x14002afaa
movzx eax, byte [rbx]
movsx ecx, al
sub ecx, 0x2a
je 0x14002b177
sub ecx, 1
je 0x14002b174
sub ecx, 2
je 0x14002b0db
cmp ecx, 0x12
je 0x14002afd9
inc rsi
mov r15, rbx
jmp 0x14002aff5
movzx edx, byte [r15 + 1]
mov ecx, r9d
call fcn.14002aa60
mov ecx, eax
movzx eax, byte [rbx]
test ecx, ecx
jne 0x14002af72
movabs r9, 0x8000240000000000
cmp al, 0x3f
ja 0x14002b209
movsx rax, al
bt r9, rax
jae 0x14002b209
lea r15, [rbx + 1]
jmp 0x14002afff
lea r15, [rbx + 1]
mov rcx, r14
mov r8, r15
lea rdx, [rsi + 1]
call fcn.14002ac80
test rax, rax
jne 0x14002b0d3
movabs r9, 0x8000240000000000
mov rdx, qword [r14 + 0x10]
cmp r15, rdx
jne 0x14002ace1
jmp 0x14002b20c
movsxd rcx, edx
lea r8, [r15 + 1]
mov rax, rsi
mov rdx, rsi
lea rbx, [rcx + 3]
add rcx, rcx
add rbx, rbx
sub rax, qword [r14 + rcx*8 + 0x28]
mov rcx, r14
mov qword [r14 + rbx*8], rax
call fcn.14002ac80
mov rsi, rax
test rax, rax
jne 0x14002b20c
mov qword [r14 + rbx*8], 0xffffffffffffffff
jmp 0x14002b20c
cmp byte [r15 + 1], 0x29
lea r8, [r15 + 1]
movzx edx, byte [r14 + 0x24]
jne 0x14002b08a
cmp dl, 0x20
jae 0x14002b258
mov eax, edx
lea r8, [r15 + 2]
add rax, rax
mov qword [r14 + rax*8 + 0x28], rsi
lea rax, [rdx + 3]
add rax, rax
mov qword [r14 + rax*8], 0xfffffffffffffffe
jmp 0x14002b0ad
cmp dl, 0x20
jae 0x14002b269
mov rax, rdx
add rax, rax
mov qword [r14 + rax*8 + 0x28], rsi
lea rax, [rdx + 3]
add rax, rax
mov qword [r14 + rax*8], 0xffffffffffffffff
inc dl
mov rcx, r14
mov byte [r14 + 0x24], dl
mov rdx, rsi
call fcn.14002ac80
mov rsi, rax
test rax, rax
jne 0x14002b20c
dec byte [r14 + 0x24]
jmp 0x14002b20c
mov rsi, rax
jmp 0x14002b20c
lea r8, [rbx + 1]
mov rdx, rsi
mov rcx, r14
mov rdi, rsi
call fcn.14002ac80
mov rsi, rax
test rax, rax
jne 0x14002b20c
nop dword [rax]
cmp rdi, qword [r14 + 8]
jae 0x14002b209
movzx ecx, byte [r15]
movzx r9d, byte [rdi]
movzx eax, cl
cmp cl, 0x25
je 0x14002b13e
cmp al, 0x2e
je 0x14002b155
cmp al, 0x5b
je 0x14002b12d
cmp ecx, r9d
mov ecx, r13d
sete cl
jmp 0x14002b14d
lea r8, [rbx - 1]
mov rdx, r15
mov ecx, r9d
call fcn.14002abd0
jmp 0x14002b14b
movzx edx, byte [r15 + 1]
mov ecx, r9d
call fcn.14002aa60
mov ecx, eax
test ecx, ecx
je 0x14002b209
inc rdi
lea r8, [rbx + 1]
mov rdx, rdi
mov rcx, r14
call fcn.14002ac80
mov rsi, rax
test rax, rax
je 0x14002b100
jmp 0x14002b20c
inc rsi
mov rdi, r13
mov rbp, rsi
nop dword [rax]
cmp rbp, qword [r14 + 8]
jae 0x14002b1d6
movzx ecx, byte [r15]
movzx r9d, byte [rbp]
movzx eax, cl
cmp cl, 0x25
je 0x14002b1bb
cmp al, 0x2e
je 0x14002b1ce
cmp al, 0x5b
je 0x14002b1aa
cmp ecx, r9d
mov ecx, r13d
sete cl
jmp 0x14002b1ca
lea r8, [rbx - 1]
mov rdx, r15
mov ecx, r9d
call fcn.14002abd0
jmp 0x14002b1c8
movzx edx, byte [r15 + 1]
mov ecx, r9d
call fcn.14002aa60
mov ecx, eax
test ecx, ecx
je 0x14002b1d6
inc rdi
inc rbp
jmp 0x14002b180
test rdi, rdi
js 0x14002b209
nop dword [rax + rax]
lea rdx, [rdi + rsi]
mov rcx, r14
lea r8, [rbx + 1]
call fcn.14002ac80
test rax, rax
jne 0x14002b0d3
sub rdi, 1
jns 0x14002b1e0
jmp 0x14002b209
cmp rsi, qword [r14 + 8]
cmove r13, rsi
mov rsi, r13
inc dword [r14 + 0x20]
mov rax, rsi
mov r12, qword [rsp + 0x28]
mov rdi, qword [rsp + 0x60]
mov rbp, qword [rsp + 0x58]
mov rbx, qword [rsp + 0x50]
mov r13, qword [rsp + 0x20]
add rsp, 0x30
pop r15
pop r14
pop rsi
ret
mov rcx, qword [rcx + 0x18]
lea rdx, str.pattern_too_complex
call fcn.140006120
int3
mov rcx, qword [r14 + 0x18]
lea rdx, str.invalid_pattern_capture
call fcn.140006120
int3
mov rcx, qword [r14 + 0x18]
lea rdx, str.too_many_captures
call fcn.140006120
int3
mov rcx, qword [r14 + 0x18]
lea rdx, str.too_many_captures
call fcn.140006120
int3
mov rcx, qword [r14 + 0x18]
lea rdx, str.malformed_pattern__missing_arguments_to___b_
call fcn.140006120
int3
mov rcx, qword [r14 + 0x18]
lea rdx, str.malformed_pattern__missing___
call fcn.140006120
int3
mov rcx, qword [r14 + 0x18]
lea rdx, str.missing___after___f_in_pattern
call fcn.140006120
int3
mov rcx, qword [r14 + 0x18]
lea rdx, str.invalid_capture_index____d
inc r8d
call fcn.140006120
int3
mov rcx, qword [r14 + 0x18]
lea rdx, str.malformed_pattern__missing___
call fcn.140006120
int3
mov rcx, qword [r14 + 0x18]
lea rdx, str.malformed_pattern__ends_with____
call fcn.140006120
int3