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

Disassembly:
push ebp
mov ebp, esp
sub esp, 0x134
mov eax, dword [0x57c870]
xor eax, ebp
mov dword [ebp - 0x20], eax
mov dword [ebp - 0x14], 0
mov dword [ebp - 0x130], 0
mov dword [ebp - 0x10], 0
mov dword [ebp - 0x124], 0
mov dword [ebp - 0x12c], 0
mov dword [ebp - 4], 0
mov dword [ebp - 0x1c], 0
mov dword [ebp - 0x134], 0
mov dword [ebp - 0x18], 0
mov dword [ebp - 8], 0
movsx eax, byte [0x573db5]
cmp eax, 0x45
jne 0x4c2f1d
mov dword [0x5fd954], 0
jmp 0x4c2f33
movsx ecx, byte [0x573db5]
cmp ecx, 0x4a
jne 0x4c2f33
mov dword [0x5fd954], 1
mov dword [0x5fd9ec], 0
cmp dword [0x5fd934], 1
jne 0x4c2f4f
cmp dword [0x5fd9fc], 1
je 0x4c2f75
cmp dword [0x5fd934], 1
jne 0x4c2f75
mov dword [0x5fd934], 0
cmp dword [0x5fdc14], 1
jne 0x4c2f75
push 0
call fcn.004cab50
add esp, 4
mov edx, dword [0x5fd9f0]
mov dword [ebp - 0x128], edx
mov eax, dword [0x5fdb48]
mov ecx, dword [eax*4 + 0x65bea0]
movsx edx, byte [ecx + 1]
sub edx, 0x30
mov dword [0x5fd9f0], edx
mov eax, dword [0x5fd9f0]
mov dword [0x5fd9f4], eax
cmp dword [0x5fd9f0], 9
jne 0x4c2fb7
mov dword [0x5fd9f0], 8
cmp dword [0x5fd9f0], 5
jne 0x4c2fcf
mov dword [0x5fd9f0], 0
call fcn.004e67c0
cmp dword [ebp - 0x128], 4
je 0x4c2ff0
cmp dword [0x5fd9f0], 4
jne 0x4c2ff0
mov ecx, dword [0x5fd9cc]
sub ecx, 1
mov dword [0x5fd92c], ecx
mov edx, dword [0x5fdb48]
mov dword [0x5fdc10], edx
mov eax, dword [0x5fd8a0]
mov dword [ebp - 0xc], eax
push 3
push 3
mov ecx, dword [0x5fdb48]
mov edx, dword [ecx*4 + 0x65bea0]
push edx
call fcn.004a7d70
add esp, 0xc
push eax
call fcn.00535089
add esp, 4
mov dword [0x5fd8a0], eax
cmp dword [0x5fd8a0], 0
je 0x4c3045
cmp dword [0x5fd8a0], 0x1f4
jl 0x4c30f1
cmp dword [0x5fd8ec], 0x3e7
jne 0x4c305b
mov eax, dword [0x5fd8a8]
mov dword [0x5fd8ec], eax
mov ecx, dword [0x5fd8ec]
mov dword [0x5fd8a0], ecx
mov dword [ebp - 0x134], 1
cmp dword [0x5fd8a0], 0
jne 0x4c3097
mov edx, dword [ebp - 0xc]
mov dword [0x5fd8a0], edx
mov eax, dword [0x5fd8a0]
mov dword [0x5fd8ec], eax
mov dword [0x5fd984], 1
mov ecx, dword [0x5fd8ec]
add ecx, 0x1f4
push ecx
push 0x573ca4
lea edx, [ebp - 0x120]
push edx
call fcn.00532706
add esp, 0xc
push 3
push 1
lea eax, [ebp - 0x120]
push eax
call fcn.004a7d70
add esp, 0xc
push eax
push 3
push 3
mov ecx, dword [0x5fdb48]
mov edx, dword [ecx*4 + 0x65bea0]
push edx
call fcn.004a8280
add esp, 0x10
mov eax, dword [ebp - 0x128]
mov dword [0x5fd9f0], eax
push 3
push 0x10
mov ecx, dword [0x5fdc10]
mov edx, dword [ecx*4 + 0x65bea0]
push edx
call fcn.004a7d70
add esp, 0xc
push eax
call fcn.00535089
add esp, 4
test eax, eax
jne 0x4c3135
cmp dword [0x5fdc18], 1
jne 0x4c3135
mov dword [0x5fdc2c], 0
push 2
call fcn.004e63d0
add esp, 4
mov eax, dword [0x5fdc10]
mov ecx, dword [eax*4 + 0x65bea0]
add ecx, 0xf
push ecx
lea edx, [ebp - 0x120]
push edx
call fcn.00532580
add esp, 8
mov eax, dword [0x5fd8fc]
mov ecx, dword [eax*4 + 0x65bea0]
add ecx, 0xf
push ecx
lea edx, [ebp - 0x120]
push edx
call fcn.005327a0
add esp, 8
test eax, eax
je 0x4c3186
call fcn.004e6120
mov eax, dword [0x5fdc10]
mov dword [0x5fd8fc], eax
mov ecx, dword [0x5fd8a0]
cmp ecx, dword [0x5fd8ec]
jne 0x4c31a1
cmp dword [0x5fd984], 0
je 0x4c3501
mov dword [0x5fd898], 0
mov dword [ebp - 0x14], 1
cmp dword [0x5fd984], 0
je 0x4c31c8
cmp dword [0x5fd984], 2
jne 0x4c34b4
cmp dword [0x5fd8a0], 0xc8
jge 0x4c34b4
cmp dword [0x5fd8ec], 0xc8
jge 0x4c34b4
push 1
push 0x573ca8
mov edx, dword [0x5fd8a0]
mov eax, dword [edx*4 + 0x663f60]
push eax
call fcn.004a7e20
add esp, 0xc
mov dword [ebp - 0x130], eax
push 1
push 0x573cac
mov ecx, dword [0x5fd8ec]
mov edx, dword [ecx*4 + 0x663f60]
push edx
call fcn.004a7e20
add esp, 0xc
mov dword [ebp - 0x10], eax
mov eax, dword [ebp - 0x130]
cmp eax, dword [ebp - 0x10]
jne 0x4c3375
cmp dword [ebp - 0x130], 0
je 0x4c3375
mov ecx, dword [ebp - 0x130]
push ecx
mov edx, dword [0x5fd8ec]
mov eax, dword [edx*4 + 0x663f60]
push eax
mov ecx, dword [0x5fd8a0]
mov edx, dword [ecx*4 + 0x663f60]
push edx
call fcn.00532db5
add esp, 0xc
test eax, eax
jne 0x4c3375
push 4
mov eax, dword [ebp - 0x130]
add eax, 1
push eax
mov ecx, dword [0x5fd8a0]
mov edx, dword [ecx*4 + 0x663f60]
push edx
call fcn.004a7d70
add esp, 0xc
push eax
call fcn.00535089
add esp, 4
mov dword [ebp - 0x124], eax
push 4
mov eax, dword [ebp - 0x130]
add eax, 1
push eax
mov ecx, dword [0x5fd8ec]
mov edx, dword [ecx*4 + 0x663f60]
push edx
call fcn.004a7d70
add esp, 0xc
push eax
call fcn.00535089
add esp, 4
mov dword [ebp - 0x12c], eax
mov dword [ebp - 4], 1
mov dword [ebp - 0x1c], 0
jmp 0x4c32f5
mov eax, dword [ebp - 0x1c]
add eax, 1
mov dword [ebp - 0x1c], eax
cmp dword [ebp - 0x1c], 0x1b59
ja 0x4c3375
cmp dword [ebp - 4], 1
jne 0x4c3375
mov ecx, dword [ebp - 0x12c]
add ecx, dword [ebp - 0x1c]
mov edx, dword [ecx*4 + 0x65bea0]
push edx
mov eax, dword [ebp - 0x124]
add eax, dword [ebp - 0x1c]
mov ecx, dword [eax*4 + 0x65bea0]
push ecx
call fcn.005327a0
add esp, 8
test eax, eax
je 0x4c3370
mov edx, dword [ebp - 0x124]
add edx, dword [ebp - 0x1c]
mov eax, dword [edx*4 + 0x65bea0]
movsx ecx, byte [eax]
cmp ecx, 0x46
je 0x4c3369
mov edx, dword [ebp - 0x12c]
add edx, dword [ebp - 0x1c]
mov eax, dword [edx*4 + 0x65bea0]
movsx ecx, byte [eax]
cmp ecx, 0x46
je 0x4c3369
mov dword [ebp - 0x14], 0
mov dword [ebp - 4], 0
jmp 0x4c32ec
cmp dword [0x5fd8ec], 0x3e7
je 0x4c3396
mov edx, dword [0x5fd8a0]
mov eax, dword [edx*4 + 0x663f60]
movsx ecx, byte [eax]
cmp ecx, 0x43
je 0x4c33b3
cmp dword [0x5fd984], 2
jne 0x4c34b4
cmp dword [0x5fd8ec], 0x3e7
je 0x4c34b4
mov dword [ebp - 0x18], 0
mov dword [ebp - 8], 0
mov edx, dword [0x5fd8a0]
mov eax, dword [edx*4 + 0x663f60]
mov ecx, dword [ebp - 0x18]
movsx edx, byte [eax + ecx + 1]
cmp edx, 0x3f
jge 0x4c3400
mov eax, dword [0x5fd8a0]
mov ecx, dword [eax*4 + 0x663f60]
push ecx
call fcn.00532e80
add esp, 4
cmp dword [ebp - 0x18], eax
jge 0x4c3400
mov edx, dword [ebp - 0x18]
add edx, 6
mov dword [ebp - 0x18], edx
jmp 0x4c33c1
mov eax, dword [0x5fd8ec]
mov ecx, dword [eax*4 + 0x663f60]
mov edx, dword [ebp - 8]
movsx eax, byte [ecx + edx + 1]
cmp eax, 0x3f
jge 0x4c343f
mov ecx, dword [0x5fd8ec]
mov edx, dword [ecx*4 + 0x663f60]
push edx
call fcn.00532e80
add esp, 4
cmp dword [ebp - 8], eax
jge 0x4c343f
mov eax, dword [ebp - 8]
add eax, 6
mov dword [ebp - 8], eax
jmp 0x4c3400
mov ecx, dword [0x5fd8ec]
mov edx, dword [ecx*4 + 0x663f60]
mov eax, dword [ebp - 8]
lea ecx, [edx + eax + 1]
push ecx
mov edx, dword [0x5fd8a0]
mov eax, dword [edx*4 + 0x663f60]
mov ecx, dword [ebp - 0x18]
lea edx, [eax + ecx + 1]
push edx
call fcn.005327a0
add esp, 8
test eax, eax
jne 0x4c34b4
mov eax, dword [0x5fd8a0]
mov ecx, dword [eax*4 + 0x663f60]
push ecx
call fcn.00532e80
add esp, 4
cmp dword [ebp - 0x18], eax
jge 0x4c34b4
mov edx, dword [0x5fd8ec]
mov eax, dword [edx*4 + 0x663f60]
push eax
call fcn.00532e80
add esp, 4
cmp dword [ebp - 8], eax
jge 0x4c34b4
mov dword [0x5fd898], 1
cmp dword [ebp - 0x14], 0
jne 0x4c34d4
cmp dword [0x5fd984], 2
jne 0x4c34d4
mov dword [0x5fd898], 1
mov dword [ebp - 0x14], 1
cmp dword [ebp - 0x14], 1
jne 0x4c34df
call fcn.004c1500
mov ecx, dword [0x5fd8a0]
mov dword [0x5fd8ec], ecx
mov dword [0x5fd984], 0
mov dword [0x5fd9ec], 1
jmp 0x4c3518
cmp dword [0x5fd7ac], 0
je 0x4c3518
cmp dword [0x5fd9f0], 4
je 0x4c3518
call fcn.004b5c60
cmp dword [0x56f5e0], 0
jge 0x4c3540
push 0
push 1
mov edx, dword [0x56f5e0]
imul edx, edx, 0xffffffff
push edx
mov eax, dword [0x56f5e0]
imul eax, eax, 0xffffffff
push eax
call fcn.0049e0e0
add esp, 0x10
push 5
push 7
mov ecx, dword [0x5fdb48]
mov edx, dword [ecx*4 + 0x65bea0]
push edx
call fcn.004a7d70
add esp, 0xc
push eax
call fcn.00535089
add esp, 4
mov dword [0x5fdac8], eax
call fcn.004c2a60
mov eax, dword [0x5fdaf0]
push eax
push 4
mov ecx, dword [0x5fd9cc]
push ecx
call fcn.004d05b0
add esp, 0xc
mov eax, dword [0x658f8c]
cdq
mov ecx, 0xa
idiv ecx
push eax
push 5
mov edx, dword [0x5fd9cc]
push edx
call fcn.004d05b0
add esp, 0xc
mov eax, dword [0x5fdc04]
push eax
push 2
mov ecx, dword [0x5fd9cc]
push ecx
call fcn.004d05b0
add esp, 0xc
mov edx, dword [0x5fd9dc]
push edx
push 6
mov eax, dword [0x5fd9cc]
push eax
call fcn.004d05b0
add esp, 0xc
mov ecx, dword [0x5f5660]
push ecx
push 7
mov edx, dword [0x5fd9cc]
push edx
call fcn.004d05b0
add esp, 0xc
mov eax, dword [0x5fd950]
imul eax, eax, 0x3e8
add eax, dword [0x5fd8f0]
push eax
push 3
mov ecx, dword [0x5fd9cc]
push ecx
call fcn.004d05b0
add esp, 0xc
mov edx, dword [0x5fd9f0]
imul edx, edx, 0x3e8
add edx, dword [0x5fd8a0]
push edx
push 1
mov eax, dword [0x5fd9cc]
push eax
call fcn.004d05b0
add esp, 0xc
cmp dword [0x5fdb54], 0
jle 0x4c364a
mov ecx, dword [0x5fdb54]
sub ecx, 1
imul ecx, ecx, 5
mov dword [0x5fdb6c], ecx
cmp dword [0x5fdb50], 1
je 0x4c3665
cmp dword [0x5fdb50], 2
je 0x4c3665
cmp dword [0x5fdb50], 4
jne 0x4c366f
mov dword [0x5fd7d0], 1
cmp dword [0x5fdb50], 2
jne 0x4c368b
cmp dword [0x5fd97c], 1
je 0x4c368b
mov dword [0x5fdb50], 0
lea edx, [ebp - 0x120]
push edx
mov eax, dword [0x5fdac8]
push eax
call fcn.004cb450
add esp, 8
mov eax, dword [0x5fdb6c]
cdq
mov ecx, 5
idiv ecx
add eax, 1
movsx edx, byte [ebp - 0x11a]
sub edx, 0x30
cmp eax, edx
jle 0x4c36c8
mov dword [0x5fdb6c], 0
cmp dword [0x5fd954], 3
jne 0x4c36fb
push 2
mov eax, dword [0x5fdb6c]
add eax, 8
push eax
lea ecx, [ebp - 0x120]
push ecx
call fcn.004a7d70
add esp, 0xc
push eax
call fcn.00535089
add esp, 4
mov dword [0x5fdacc], eax
jmp 0x4c372a
push 2
mov edx, dword [0x5fd954]
mov eax, dword [0x5fdb6c]
lea ecx, [eax + edx*2 + 8]
push ecx
lea edx, [ebp - 0x120]
push edx
call fcn.004a7d70
add esp, 0xc
push eax
call fcn.00535089
add esp, 4
mov dword [0x5fdacc], eax
push 2
mov eax, dword [0x5fdb6c]
add eax, 8
push eax
lea ecx, [ebp - 0x120]
push ecx
call fcn.004a7d70
add esp, 0xc
push eax
call fcn.00535089
add esp, 4
mov dword [0x5fd760], eax
mov ecx, dword [ebp - 0x20]
xor ecx, ebp
call fcn.00532783
mov esp, ebp
pop ebp
ret