// File: /workspace/github_cpp_makefile_star2_O3/ArashPartow[P]exprtk/./exprtk.hpp
// Function: exprtk::parser<double>::expression_generator<double>::synthesize_binary_ext_expression::process(exprtk::parser<double>::expression_generator<double>&, exprtk::details::operator_type const&, exprtk::details::expression_node<double>* (&) [2])
static inline expression_node_ptr process(expression_generator<Type>& expr_gen,
                                                      const details::operator_type& operation,
                                                      expression_node_ptr (&branch)[2])
            {
               const bool left_neg  = is_neg_unary_node(branch[0]);
               const bool right_neg = is_neg_unary_node(branch[1]);

               if (left_neg && right_neg)
               {
                  if (
                       (details::e_add == operation) ||
                       (details::e_sub == operation) ||
                       (details::e_mul == operation) ||
                       (details::e_div == operation)
                     )
                  {
                     if (
                          !expr_gen.parser_->simplify_unary_negation_branch(branch[0]) ||
                          !expr_gen.parser_->simplify_unary_negation_branch(branch[1])
                        )
                     {
                        details::free_all_nodes(*expr_gen.node_allocator_,branch);

                        return error_node();
                     }
                  }

                  switch (operation)
                  {
                                           // -f(x + 1) + -g(y + 1) --> -(f(x + 1) + g(y + 1))
                     case details::e_add : return expr_gen(details::e_neg,
                                              expr_gen.node_allocator_->
                                                 template allocate<typename details::binary_ext_node<Type,details::add_op<Type> > >
                                                    (branch[0],branch[1]));

                                           // -f(x + 1) - -g(y + 1) --> g(y + 1) - f(x + 1)
                     case details::e_sub : return expr_gen.node_allocator_->
                                              template allocate<typename details::binary_ext_node<Type,details::sub_op<Type> > >
                                                 (branch[1],branch[0]);

                     default             : break;
                  }
               }
               else if (left_neg && !right_neg)
               {
                  if (
                       (details::e_add == operation) ||
                       (details::e_sub == operation) ||
                       (details::e_mul == operation) ||
                       (details::e_div == operation)
                     )
                  {
                     if (!expr_gen.parser_->simplify_unary_negation_branch(branch[0]))
                     {
                        details::free_all_nodes(*expr_gen.node_allocator_,branch);

                        return error_node();
                     }

                     switch (operation)
                     {
                                              // -f(x + 1) + g(y + 1) --> g(y + 1) - f(x + 1)
                        case details::e_add : return expr_gen.node_allocator_->
                                                 template allocate<typename details::binary_ext_node<Type,details::sub_op<Type> > >
                                                   (branch[1], branch[0]);

                                              // -f(x + 1) - g(y + 1) --> -(f(x + 1) + g(y + 1))
                        case details::e_sub : return expr_gen(details::e_neg,
                                                 expr_gen.node_allocator_->
                                                    template allocate<typename details::binary_ext_node<Type,details::add_op<Type> > >
                                                       (branch[0], branch[1]));

                                              // -f(x + 1) * g(y + 1) --> -(f(x + 1) * g(y + 1))
                        case details::e_mul : return expr_gen(details::e_neg,
                                                 expr_gen.node_allocator_->
                                                    template allocate<typename details::binary_ext_node<Type,details::mul_op<Type> > >
                                                       (branch[0], branch[1]));

                                              // -f(x + 1) / g(y + 1) --> -(f(x + 1) / g(y + 1))
                        case details::e_div : return expr_gen(details::e_neg,
                                                 expr_gen.node_allocator_->
                                                    template allocate<typename details::binary_ext_node<Type,details::div_op<Type> > >
                                                       (branch[0], branch[1]));

                        default             : return error_node();
                     }
                  }
               }
               else if (!left_neg && right_neg)
               {
                  if (
                       (details::e_add == operation) ||
                       (details::e_sub == operation) ||
                       (details::e_mul == operation) ||
                       (details::e_div == operation)
                     )
                  {
                     if (!expr_gen.parser_->simplify_unary_negation_branch(branch[1]))
                     {
                        details::free_all_nodes(*expr_gen.node_allocator_,branch);

                        return error_node();
                     }

                     switch (operation)
                     {
                                              // f(x + 1) + -g(y + 1) --> f(x + 1) - g(y + 1)
                        case details::e_add : return expr_gen.node_allocator_->
                                                 template allocate<typename details::binary_ext_node<Type,details::sub_op<Type> > >
                                                   (branch[0], branch[1]);

                                              // f(x + 1) - - g(y + 1) --> f(x + 1) + g(y + 1)
                        case details::e_sub : return expr_gen.node_allocator_->
                                                 template allocate<typename details::binary_ext_node<Type,details::add_op<Type> > >
                                                   (branch[0], branch[1]);

                                              // f(x + 1) * -g(y + 1) --> -(f(x + 1) * g(y + 1))
                        case details::e_mul : return expr_gen(details::e_neg,
                                                 expr_gen.node_allocator_->
                                                    template allocate<typename details::binary_ext_node<Type,details::mul_op<Type> > >
                                                       (branch[0], branch[1]));

                                              // f(x + 1) / -g(y + 1) --> -(f(x + 1) / g(y + 1))
                        case details::e_div : return expr_gen(details::e_neg,
                                                 expr_gen.node_allocator_->
                                                    template allocate<typename details::binary_ext_node<Type,details::div_op<Type> > >
                                                       (branch[0], branch[1]));

                        default             : return error_node();
                     }
                  }
               }

               switch (operation)
               {
                  #define case_stmt(op0, op1)                                                          \
                  case op0 : return expr_gen.node_allocator_->                                         \
                                template allocate<typename details::binary_ext_node<Type,op1<Type> > > \
                                   (branch[0], branch[1]);                                             \

                  basic_opr_switch_statements
                  extended_opr_switch_statements
                  #undef case_stmt
                  default : return error_node();
               }
            }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x10, %rsp
movq %rdx, %r14
movq %rsi, %r12
movq %rdi, %r15
movq (%rdx), %rdi
testq %rdi, %rdi
je 0x29e210
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x4b, %eax
sete %bpl
jmp 0x29e212
xorl %ebp, %ebp
leaq 0x8(%r14), %rbx
movq 0x8(%r14), %rdi
testq %rdi, %rdi
je 0x29e2d6
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x4b, %eax
sete %cl
setne %al
movl %ebp, %edx
xorb $0x1, %dl
jne 0x29e2df
testb %al, %al
jne 0x29e2df
movl (%r12), %eax
leal -0x2(%rax), %ecx
cmpl $0x3, %ecx
ja 0x29e27d
movq 0x68(%r15), %rdi
movq %r14, %rsi
callq 0x258b22
testb %al, %al
je 0x29e3db
movq 0x68(%r15), %rdi
movq %rbx, %rsi
callq 0x258b22
testb %al, %al
je 0x29e3db
movl (%r12), %eax
cmpl $0x3, %eax
je 0x29e4ce
cmpl $0x2, %eax
jne 0x29e34d
movl $0x34, 0x4(%rsp)
movl $0x40, %edi
callq 0x11e0f0
movq %rax, %rbx
movq (%r14), %rsi
movq 0x8(%r14), %rdx
movq %rax, %rdi
callq 0x31171e
movq %rbx, %rdi
addq $0x8, %rdi
movq 0x8(%rbx), %rax
callq *0x10(%rax)
leaq 0x8(%rsp), %rdx
movq %rbx, (%rdx)
leaq 0x4(%rsp), %rsi
movq %r15, %rdi
jmp 0x29e7ad
movl %ebp, %edx
xorb $0x1, %dl
movb $0x1, %al
xorl %ecx, %ecx
testb %dl, %dl
jne 0x29e336
testb %cl, %cl
jne 0x29e336
movl (%r12), %eax
leal -0x2(%rax), %ecx
cmpl $0x3, %ecx
ja 0x29e34d
movq 0x68(%r15), %rdi
movq %r14, %rsi
callq 0x258b22
testb %al, %al
je 0x29e47d
movl (%r12), %eax
addl $-0x2, %eax
cmpl $0x3, %eax
ja 0x29e531
leaq 0xed696(%rip), %rcx     # 0x38b9b4
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq 0x8(%r15), %rdi
movq %rbx, %rsi
movq %r14, %rdx
jmp 0x29e3ca
orb %al, %bpl
movl (%r12), %eax
movl %eax, %ecx
addl $-0x6, %ecx
cmpl $-0x4, %ecx
setb %cl
orb %bpl, %cl
je 0x29e38c
xorl %ebx, %ebx
addl $-0x2, %eax
cmpl $0x19, %eax
ja 0x29e7b5
leaq 0xed672(%rip), %rcx     # 0x38b9d4
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl $0x40, %edi
callq 0x11e0f0
movq %rax, %rbx
movq (%r14), %rsi
movq 0x8(%r14), %rdx
movq %rax, %rdi
callq 0x31171e
jmp 0x29e758
movq 0x68(%r15), %rdi
movq %rbx, %rsi
callq 0x258b22
testb %al, %al
je 0x29e42c
movl (%r12), %eax
addl $-0x2, %eax
cmpl $0x3, %eax
ja 0x29e531
leaq 0xed60d(%rip), %rcx     # 0x38b9c4
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq 0x8(%r15), %rdi
movq %r14, %rsi
movq %rbx, %rdx
addq $0x10, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
jmp 0x31161c
movb $0x1, %bpl
xorl %r15d, %r15d
movq (%r14,%r15,8), %rdi
testq %rdi, %rdi
je 0x29e414
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x11, %eax
je 0x29e414
leaq (%r14,%r15,8), %rbx
movq (%rbx), %rdi
testq %rdi, %rdi
je 0x29e40c
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x12, %eax
je 0x29e414
movq %rbx, %rdi
callq 0x1ea63e
movl $0x1, %r15d
xorl %ebx, %ebx
testb $0x1, %bpl
movl $0x0, %ebp
jne 0x29e3e1
jmp 0x29e7b5
movb $0x1, %bpl
xorl %r15d, %r15d
movq (%r14,%r15,8), %rdi
testq %rdi, %rdi
je 0x29e465
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x11, %eax
je 0x29e465
leaq (%r14,%r15,8), %rbx
movq (%rbx), %rdi
testq %rdi, %rdi
je 0x29e45d
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x12, %eax
je 0x29e465
movq %rbx, %rdi
callq 0x1ea63e
movl $0x1, %r15d
xorl %ebx, %ebx
testb $0x1, %bpl
movl $0x0, %ebp
jne 0x29e432
jmp 0x29e7b5
movb $0x1, %bpl
xorl %r15d, %r15d
movq (%r14,%r15,8), %rdi
testq %rdi, %rdi
je 0x29e4b6
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x11, %eax
je 0x29e4b6
leaq (%r14,%r15,8), %rbx
movq (%rbx), %rdi
testq %rdi, %rdi
je 0x29e4ae
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x12, %eax
je 0x29e4b6
movq %rbx, %rdi
callq 0x1ea63e
movl $0x1, %r15d
xorl %ebx, %ebx
testb $0x1, %bpl
movl $0x0, %ebp
jne 0x29e483
jmp 0x29e7b5
movl $0x40, %edi
callq 0x11e0f0
movq %rax, %rbx
movq (%r14), %rdx
movq 0x8(%r14), %rsi
movq %rax, %rdi
callq 0x3118ba
jmp 0x29e758
leaq 0x4(%rsp), %r12
movl $0x34, (%r12)
movq 0x8(%r15), %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x311672
jmp 0x29e79f
leaq 0x4(%rsp), %r12
movl $0x34, (%r12)
movq 0x8(%r15), %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x3116c8
jmp 0x29e79f
xorl %ebx, %ebx
jmp 0x29e7b5
movl $0x40, %edi
callq 0x11e0f0
movq %rax, %rbx
movq (%r14), %rsi
movq 0x8(%r14), %rdx
movq %rax, %rdi
callq 0x312c9e
jmp 0x29e758
movl $0x40, %edi
callq 0x11e0f0
movq %rax, %rbx
movq (%r14), %rsi
movq 0x8(%r14), %rdx
movq %rax, %rdi
callq 0x3125e8
jmp 0x29e758
movl $0x40, %edi
callq 0x11e0f0
movq %rax, %rbx
movq (%r14), %rsi
movq 0x8(%r14), %rdx
movq %rax, %rdi
callq 0x311d9e
jmp 0x29e758
movl $0x40, %edi
callq 0x11e0f0
movq %rax, %rbx
movq (%r14), %rsi
movq 0x8(%r14), %rdx
movq %rax, %rdi
callq 0x312ae6
jmp 0x29e758
movl $0x40, %edi
callq 0x11e0f0
movq %rax, %rbx
movq (%r14), %rsi
movq 0x8(%r14), %rdx
movq %rax, %rdi
callq 0x3118ba
jmp 0x29e758
movl $0x40, %edi
callq 0x11e0f0
movq %rax, %rbx
movq (%r14), %rsi
movq 0x8(%r14), %rdx
movq %rax, %rdi
callq 0x311f42
jmp 0x29e758
movl $0x40, %edi
callq 0x11e0f0
movq %rax, %rbx
movq (%r14), %rsi
movq 0x8(%r14), %rdx
movq %rax, %rdi
callq 0x31243e
jmp 0x29e758
movl $0x40, %edi
callq 0x11e0f0
movq %rax, %rbx
movq (%r14), %rsi
movq 0x8(%r14), %rdx
movq %rax, %rdi
callq 0x311bfa
jmp 0x29e758
movl $0x40, %edi
callq 0x11e0f0
movq %rax, %rbx
movq (%r14), %rsi
movq 0x8(%r14), %rdx
movq %rax, %rdi
callq 0x311a5e
jmp 0x29e758
movl $0x40, %edi
callq 0x11e0f0
movq %rax, %rbx
movq (%r14), %rsi
movq 0x8(%r14), %rdx
movq %rax, %rdi
callq 0x3120e6
jmp 0x29e758
movl $0x40, %edi
callq 0x11e0f0
movq %rax, %rbx
movq (%r14), %rsi
movq 0x8(%r14), %rdx
movq %rax, %rdi
callq 0x312292
jmp 0x29e758
movl $0x40, %edi
callq 0x11e0f0
movq %rax, %rbx
movq (%r14), %rsi
movq 0x8(%r14), %rdx
movq %rax, %rdi
callq 0x312e5e
jmp 0x29e758
movl $0x40, %edi
callq 0x11e0f0
movq %rax, %rbx
movq (%r14), %rsi
movq 0x8(%r14), %rdx
movq %rax, %rdi
callq 0x313026
jmp 0x29e758
movl $0x40, %edi
callq 0x11e0f0
movq %rax, %rbx
movq (%r14), %rsi
movq 0x8(%r14), %rdx
movq %rax, %rdi
callq 0x31293c
jmp 0x29e758
movl $0x40, %edi
callq 0x11e0f0
movq %rax, %rbx
movq (%r14), %rsi
movq 0x8(%r14), %rdx
movq %rax, %rdi
callq 0x312792
jmp 0x29e758
movl $0x40, %edi
callq 0x11e0f0
movq %rax, %rbx
movq (%r14), %rsi
movq 0x8(%r14), %rdx
movq %rax, %rdi
callq 0x3133a2
jmp 0x29e758
movl $0x40, %edi
callq 0x11e0f0
movq %rax, %rbx
movq (%r14), %rsi
movq 0x8(%r14), %rdx
movq %rax, %rdi
callq 0x3131e2
movq %rbx, %rdi
addq $0x8, %rdi
movq 0x8(%rbx), %rax
callq *0x10(%rax)
jmp 0x29e7b5
movq 0x8(%r15), %rdi
movq %r14, %rsi
movq %rbx, %rdx
addq $0x10, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
jmp 0x3115c6
leaq 0x4(%rsp), %r12
movl $0x34, (%r12)
movq 0x8(%r15), %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x3115c6
leaq 0x8(%rsp), %rdx
movq %rax, (%rdx)
movq %r15, %rdi
movq %r12, %rsi
callq 0x27b7ae
movq %rax, %rbx
movq %rbx, %rax
addq $0x10, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
jmp 0x29e7eb
jmp 0x29e7eb
jmp 0x29e7eb
jmp 0x29e7eb
jmp 0x29e7eb
jmp 0x29e7eb
jmp 0x29e7eb
jmp 0x29e7eb
jmp 0x29e7eb
jmp 0x29e7eb
jmp 0x29e7eb
jmp 0x29e7eb
jmp 0x29e7eb
jmp 0x29e7eb
jmp 0x29e7eb
jmp 0x29e7eb
jmp 0x29e7eb
jmp 0x29e7eb
jmp 0x29e7eb
movq %rax, %r14
movl $0x40, %esi
movq %rbx, %rdi
callq 0x11e0c0
movq %r14, %rdi
callq 0x11e330
nop