// File: /workspace/github_cpp_makefile_star2_O3/philpoore[P]Math/main.cpp
// Function: run(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>)
void run(string input) {
    Lexer lexer(input);
    auto tokens = lexer.tokenize();

#ifdef DEBUG
    // Debug tokens
    for (auto token : tokens) cerr << to_string(token) << endl;
#endif

    Parser parser(tokens);

    AstStmts* ast = parser.parse();

#ifdef DEBUG
    // Debug AST
    cerr << to_string(ast) << endl;
    cerr << to_expr_string(ast) << endl;
#endif

    interp.exec(ast);
    // cout << setprecision(16) << value << endl;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x108, %rsp            # imm = 0x108
leaq -0x100(%rbp), %r14
movq %r14, -0x10(%r14)
movq (%rdi), %rsi
movq 0x8(%rdi), %rdx
addq %rsi, %rdx
leaq -0x110(%rbp), %rbx
movq %rbx, %rdi
callq 0xb26a
leaq -0x98(%rbp), %rax
movq %rax, -0x10(%rax)
movq (%rbx), %rsi
movq 0x8(%rbx), %rdx
addq %rsi, %rdx
leaq -0xa8(%rbp), %rdi
callq 0xb26a
movl $0x0, -0x88(%rbp)
movl -0x108(%rbp), %eax
movl %eax, -0x84(%rbp)
movq $0x0, -0x80(%rbp)
movq -0x110(%rbp), %rdi
cmpq %r14, %rdi
je 0xa09d
movq -0x100(%rbp), %rsi
incq %rsi
callq 0x3240
leaq -0xc0(%rbp), %rdi
leaq -0xa8(%rbp), %rsi
callq 0x7966
movq -0xc0(%rbp), %r12
movq -0xb8(%rbp), %r13
cmpq %r13, %r12
je 0xa1d2
leaq -0x60(%rbp), %r14
leaq -0xd8(%rbp), %r15
movl (%r12), %eax
movl %eax, -0x78(%rbp)
movq %r14, -0x70(%rbp)
movq 0x8(%r12), %rsi
movq 0x10(%r12), %rdx
addq %rsi, %rdx
leaq -0x70(%rbp), %rdi
callq 0xb26a
movq 0x28(%r12), %rax
movq %rax, -0x50(%rbp)
movl -0x78(%rbp), %eax
movl %eax, -0xf0(%rbp)
movq %r15, -0xe8(%rbp)
movq -0x70(%rbp), %rsi
movq -0x68(%rbp), %rdx
addq %rsi, %rdx
leaq -0xe8(%rbp), %rdi
callq 0xb26a
movq -0x50(%rbp), %rax
movq %rax, -0xc8(%rbp)
leaq -0x48(%rbp), %rdi
leaq -0xf0(%rbp), %rsi
callq 0x43de
movq -0x48(%rbp), %rsi
movq -0x40(%rbp), %rdx
movq 0x7ea3(%rip), %rdi      # 0x11ff0
callq 0x3270
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x3210
movsbl %al, %esi
movq %rbx, %rdi
callq 0x3030
movq %rax, %rdi
callq 0x3180
movq -0x48(%rbp), %rdi
leaq -0x38(%rbp), %rax
cmpq %rax, %rdi
je 0xa195
movq -0x38(%rbp), %rsi
incq %rsi
callq 0x3240
movq -0xe8(%rbp), %rdi
cmpq %r15, %rdi
je 0xa1b0
movq -0xd8(%rbp), %rsi
incq %rsi
callq 0x3240
movq -0x70(%rbp), %rdi
cmpq %r14, %rdi
je 0xa1c5
movq -0x60(%rbp), %rsi
incq %rsi
callq 0x3240
addq $0x30, %r12
cmpq %r13, %r12
jne 0xa0d2
leaq -0x128(%rbp), %rdi
leaq -0xc0(%rbp), %rsi
callq 0xafa6
leaq -0x78(%rbp), %rdi
leaq -0x128(%rbp), %rsi
callq 0xafa6
leaq -0x128(%rbp), %rdi
movq 0x8(%rdi), %rax
subq (%rdi), %rax
shrq $0x4, %rax
imull $0xaaaaaaab, %eax, %eax # imm = 0xAAAAAAAB
leaq -0x78(%rbp), %rbx
movl %eax, 0x18(%rbx)
movl $0x0, 0x1c(%rbx)
callq 0xaf2e
movq %rbx, %rdi
callq 0x8a60
movq %rax, %rbx
leaq -0x48(%rbp), %rdi
movq %rax, %rsi
callq 0x557e
movq -0x48(%rbp), %rsi
movq -0x40(%rbp), %rdx
movq 0x7daa(%rip), %rdi      # 0x11ff0
callq 0x3270
movq %rax, %r14
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x3210
movsbl %al, %esi
movq %r14, %rdi
callq 0x3030
movq %rax, %rdi
callq 0x3180
leaq -0x38(%rbp), %r15
movq -0x10(%r15), %rdi
cmpq %r15, %rdi
je 0xa28e
movq -0x38(%rbp), %rsi
incq %rsi
callq 0x3240
leaq -0x48(%rbp), %rdi
movq %rbx, %rsi
callq 0x60b2
movq -0x48(%rbp), %rsi
movq -0x40(%rbp), %rdx
movq 0x7d47(%rip), %rdi      # 0x11ff0
callq 0x3270
movq %rax, %r14
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x3210
movsbl %al, %esi
movq %r14, %rdi
callq 0x3030
movq %rax, %rdi
callq 0x3180
movq -0x48(%rbp), %rdi
cmpq %r15, %rdi
je 0xa2ed
movq -0x38(%rbp), %rsi
incq %rsi
callq 0x3240
movq 0x8(%rbx), %r14
movq 0x10(%rbx), %r15
cmpq %r15, %r14
je 0xa315
leaq 0x7fbf(%rip), %rbx      # 0x122c0
movq (%r14), %rsi
movq %rbx, %rdi
callq 0x753a
addq $0x8, %r14
cmpq %r15, %r14
jne 0xa301
leaq -0x78(%rbp), %rdi
callq 0xaf2e
leaq -0xc0(%rbp), %rdi
callq 0xaf2e
movq -0xa8(%rbp), %rdi
leaq -0x98(%rbp), %rax
cmpq %rax, %rdi
je 0xa34c
movq -0x98(%rbp), %rsi
incq %rsi
callq 0x3240
addq $0x108, %rsp            # imm = 0x108
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0xa3d7
jmp 0xa3d7
jmp 0xa3d7
movq %rax, %rbx
leaq -0x128(%rbp), %rdi
jmp 0xa3de
jmp 0xa3c8
movq %rax, %rbx
leaq -0x98(%rbp), %r15
jmp 0xa444
movq %rax, %rbx
movq -0x110(%rbp), %rdi
movq %r14, %r15
cmpq %r14, %rdi
jne 0xa450
jmp 0xa45b
movq %rax, %rbx
movq -0x48(%rbp), %rdi
cmpq %r15, %rdi
jne 0xa3ba
jmp 0xa3da
movq %rax, %rbx
leaq -0x38(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0xa3da
movq -0x38(%rbp), %rsi
incq %rsi
callq 0x3240
jmp 0xa3da
movq %rax, %rbx
jmp 0xa431
movq %rax, %rbx
jmp 0xa41c
movq %rax, %rbx
jmp 0xa401
movq %rax, %rbx
leaq -0x78(%rbp), %rdi
callq 0xaf2e
jmp 0xa431
movq %rax, %rbx
movq -0x48(%rbp), %rdi
leaq -0x38(%rbp), %rax
cmpq %rax, %rdi
je 0xa401
movq -0x38(%rbp), %rsi
incq %rsi
callq 0x3240
movq -0xe8(%rbp), %rdi
cmpq %r15, %rdi
je 0xa41c
movq -0xd8(%rbp), %rsi
incq %rsi
callq 0x3240
movq -0x70(%rbp), %rdi
cmpq %r14, %rdi
je 0xa431
movq -0x60(%rbp), %rsi
incq %rsi
callq 0x3240
leaq -0x98(%rbp), %r15
leaq -0xc0(%rbp), %rdi
callq 0xaf2e
movq -0xa8(%rbp), %rdi
cmpq %r15, %rdi
je 0xa45b
movq (%r15), %rsi
incq %rsi
callq 0x3240
movq %rbx, %rdi
callq 0x3370