// File: /workspace/github_cpp_makefile_star2_O2/WShabti-Team[P]WShabtiPict/wshabtilib/java-source-code-parser/java-source-code-parser.cpp
// Function: get_prototypes(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>)
vector<string> get_prototypes(string source_code_path)
{
    std::ifstream source_input_file;
    source_input_file.open(source_code_path, std::ios_base::in);

    string search_string = "";
    string source_code = "";
    vector<string> prototype;

    smatch sm ;

    //PROTOTYPE REGEX
    regex prototype_regex(R"rgx(((public|private|protected|static|final|native|synchronized|abstract|transient)+\s)+[\w\<\>\[\]]+\s+(\w+) *\([^\)]*\))rgx");
    
    while(!source_input_file.eof())
	{
        getline(source_input_file, search_string);
        source_code.append(search_string);        
    }

    while(regex_search(source_code, sm, prototype_regex))
    {
        prototype.push_back(sm[0]);
        source_code = sm.suffix();
    }

    return prototype;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x2a8, %rsp            # imm = 0x2A8
movq %rsi, %r14
movq %rdi, %rbx
leaq 0xa0(%rsp), %r15
movq %r15, %rdi
callq 0x64e0
pushq $0x8
popq %rdx
movq %r15, %rdi
movq %r14, %rsi
callq 0x63a0
leaq 0x11699(%rip), %rsi     # 0x23b9a
leaq 0x60(%rsp), %rdi
leaq 0x20(%rsp), %rdx
callq 0x7f56
leaq 0x11683(%rip), %rsi     # 0x23b9a
leaq 0x20(%rsp), %rdi
movq %rsp, %rdx
callq 0x7f56
andq $0x0, 0x10(%rbx)
xorps %xmm0, %xmm0
movups %xmm0, (%rbx)
movaps %xmm0, 0x10(%rsp)
movaps %xmm0, (%rsp)
leaq 0x107bc(%rip), %rsi     # 0x22cfb
leaq 0x40(%rsp), %rdi
pushq $0x10
popq %rdx
callq 0x12880
leaq 0xa0(%rsp), %r14
leaq 0x60(%rsp), %r15
leaq 0x20(%rsp), %r12
movq 0xa0(%rsp), %rax
movq -0x18(%rax), %rax
testb $0x2, 0xc0(%rsp,%rax)
jne 0x1258c
movq %r14, %rdi
movq %r15, %rsi
callq 0x60b0
movq %r12, %rdi
movq %r15, %rsi
callq 0x6770
jmp 0x1255e
leaq 0x20(%rsp), %r14
movq %rsp, %r15
leaq 0x40(%rsp), %r12
leaq 0x80(%rsp), %r13
pushq $0x18
popq %rbp
movq %r14, %rdi
movq %r15, %rsi
movq %r12, %rdx
xorl %ecx, %ecx
callq 0x128e6
testb %al, %al
je 0x1263d
movq (%rsp), %rax
movq 0x8(%rsp), %rcx
movq %rcx, %rdx
subq %rax, %rdx
leaq -0x48(%rcx), %rdi
cmpq $0x48, %rdx
movq %rax, %rsi
cmoveq %rdi, %rsi
cmpq %rax, %rcx
cmoveq %rdi, %rsi
movq %r13, %rdi
callq 0x1de50
movq %rbx, %rdi
movq %r13, %rsi
callq 0x114aa
movq %r13, %rdi
callq 0x61e0
movq 0x8(%rsp), %rsi
movq %rsi, %rax
subq (%rsp), %rax
cqto
idivq %rbp
cmpq $0x4, %rax
jb 0x12619
addq $-0x18, %rsi
jmp 0x1261d
addq $-0x48, %rsi
movq %r13, %rdi
callq 0x1de50
movq %r14, %rdi
movq %r13, %rsi
callq 0x6530
movq %r13, %rdi
callq 0x61e0
jmp 0x125a4
leaq 0x40(%rsp), %rdi
callq 0x12902
movq %rsp, %rdi
callq 0x1291c
leaq 0x20(%rsp), %rdi
callq 0x61e0
leaq 0x60(%rsp), %rdi
callq 0x61e0
leaq 0xa0(%rsp), %rdi
callq 0x60f0
movq %rbx, %rax
addq $0x2a8, %rsp            # imm = 0x2A8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %r14
jmp 0x126bb
movq %rax, %r14
jmp 0x126d5
jmp 0x12691
movq %rax, %r14
jmp 0x126df
jmp 0x126ae
movq %rax, %r14
leaq 0x80(%rsp), %rdi
callq 0x61e0
jmp 0x126b1
jmp 0x126ae
jmp 0x126ae
movq %rax, %r14
leaq 0x40(%rsp), %rdi
callq 0x12902
movq %rsp, %rdi
callq 0x1291c
movq %rbx, %rdi
callq 0x11254
leaq 0x20(%rsp), %rdi
callq 0x61e0
leaq 0x60(%rsp), %rdi
callq 0x61e0
leaq 0xa0(%rsp), %rdi
callq 0x60f0
movq %r14, %rdi
callq 0x66e0