// File: ArashPartow[P]exprtk/./exprtk.hpp
// Function: exprtk::parser<double>::expression_generator<double>::conditional_vector(exprtk::details::expression_node<double>*, exprtk::details::expression_node<double>*, exprtk::details::expression_node<double>*) const
inline expression_node_ptr conditional_vector(expression_node_ptr condition,
                                                       expression_node_ptr consequent,
                                                       expression_node_ptr alternative) const
         {
            if ((0 == condition) || (0 == consequent))
            {
               details::free_node(*node_allocator_, condition  );
               details::free_node(*node_allocator_, consequent );
               details::free_node(*node_allocator_, alternative);

               const std::string invalid_branches =
                                 ((0 == condition ) ? std::string("condition ") : "") +
                                 ((0 == consequent) ? std::string("consequent") : "") ;

               parser_->set_error(parser_error::make_error(
                  parser_error::e_parser,
                  parser_->current_state().token,
                  "ERR259 - Invalid " + invalid_branches + " for vector conditional statement",
                  exprtk_error_location));

               return error_node();
            }
            // Can the condition be immediately evaluated? if so optimise.
            else if (details::is_constant_node(condition))
            {
               // True branch
               if (details::is_true(condition))
               {
                  details::free_node(*node_allocator_, condition  );
                  details::free_node(*node_allocator_, alternative);

                  return consequent;
               }
               // False branch
               else
               {
                  details::free_node(*node_allocator_, condition );
                  details::free_node(*node_allocator_, consequent);

                  if (alternative)
                     return alternative;
                  else
                     return node_allocator_->allocate<details::null_node<T> >();

               }
            }
            else if ((0 != consequent) && (0 != alternative))
            {
               return node_allocator_->
                        allocate<conditional_vector_node_t>(condition, consequent, alternative);
            }
            else
               return error_node();
         }

// Assembly:
subq $0x248, %rsp            # imm = 0x248
movq %rdi, 0x238(%rsp)
movq %rsi, 0x230(%rsp)
movq %rdx, 0x228(%rsp)
movq %rcx, 0x220(%rsp)
movq 0x238(%rsp), %rax
movq %rax, 0x30(%rsp)
xorl %eax, %eax
cmpq 0x230(%rsp), %rax
je 0x4e25a0
xorl %eax, %eax
cmpq 0x228(%rsp), %rax
jne 0x4e2aaf
movq 0x30(%rsp), %rax
movq 0x8(%rax), %rdi
leaq 0x230(%rsp), %rsi
callq 0x284bd0
movq 0x30(%rsp), %rax
movq 0x8(%rax), %rdi
leaq 0x228(%rsp), %rsi
callq 0x284bd0
movq 0x30(%rsp), %rax
movq 0x8(%rax), %rdi
leaq 0x220(%rsp), %rsi
callq 0x284bd0
movq 0x230(%rsp), %rcx
movb $0x0, 0x1de(%rsp)
movb $0x0, 0x1ca(%rsp)
xorl %eax, %eax
cmpq %rcx, %rax
jne 0x4e2638
leaq 0x1df(%rsp), %rdi
movq %rdi, 0x28(%rsp)
callq 0x11b6f0
movq 0x28(%rsp), %rdx
movb $0x1, 0x1de(%rsp)
leaq 0xc5c46(%rip), %rsi     # 0x5a826d
leaq 0x1e0(%rsp), %rdi
callq 0x134520
jmp 0x4e2636
jmp 0x4e266f
leaq 0x1cb(%rsp), %rdi
movq %rdi, 0x20(%rsp)
callq 0x11b6f0
movq 0x20(%rsp), %rdx
movb $0x1, 0x1ca(%rsp)
leaq 0xd35ea(%rip), %rsi     # 0x5b5c48
leaq 0x1e0(%rsp), %rdi
callq 0x134520
jmp 0x4e266d
jmp 0x4e266f
movq 0x228(%rsp), %rcx
movb $0x0, 0x1a6(%rsp)
movb $0x0, 0x1a4(%rsp)
xorl %eax, %eax
cmpq %rcx, %rax
jne 0x4e26c5
leaq 0x1a7(%rsp), %rdi
movq %rdi, 0x18(%rsp)
callq 0x11b6f0
movq 0x18(%rsp), %rdx
movb $0x1, 0x1a6(%rsp)
leaq 0xc5a15(%rip), %rsi     # 0x5a80c9
leaq 0x1a8(%rsp), %rdi
callq 0x134520
jmp 0x4e26c3
jmp 0x4e26fc
leaq 0x1a5(%rsp), %rdi
movq %rdi, 0x10(%rsp)
callq 0x11b6f0
movq 0x10(%rsp), %rdx
movb $0x1, 0x1a4(%rsp)
leaq 0xd355d(%rip), %rsi     # 0x5b5c48
leaq 0x1a8(%rsp), %rdi
callq 0x134520
jmp 0x4e26fa
jmp 0x4e26fc
leaq 0x200(%rsp), %rdi
leaq 0x1e0(%rsp), %rsi
leaq 0x1a8(%rsp), %rdx
callq 0x29dc80
jmp 0x4e271b
leaq 0x1a8(%rsp), %rdi
callq 0x11b838
testb $0x1, 0x1a4(%rsp)
jne 0x4e2734
jmp 0x4e2741
leaq 0x1a5(%rsp), %rdi
callq 0x11b820
testb $0x1, 0x1a6(%rsp)
jne 0x4e274d
jmp 0x4e275a
leaq 0x1a7(%rsp), %rdi
callq 0x11b820
leaq 0x1e0(%rsp), %rdi
callq 0x11b838
testb $0x1, 0x1ca(%rsp)
jne 0x4e2773
jmp 0x4e2780
leaq 0x1cb(%rsp), %rdi
callq 0x11b820
testb $0x1, 0x1de(%rsp)
jne 0x4e278c
jmp 0x4e2799
leaq 0x1df(%rsp), %rdi
callq 0x11b820
movq 0x30(%rsp), %rax
movq 0x68(%rax), %rsi
movq %rsi, 0x8(%rsp)
leaq 0xb8(%rsp), %rdi
callq 0x3dc450
jmp 0x4e27b6
leaq 0xc8(%rsp), %rax
movq %rax, (%rsp)
leaq 0xc5b21(%rip), %rsi     # 0x5a82ea
leaq 0x78(%rsp), %rdi
leaq 0x200(%rsp), %rdx
callq 0x3784f0
jmp 0x4e27dd
leaq 0xc5b18(%rip), %rdx     # 0x5a82fc
leaq 0x98(%rsp), %rdi
leaq 0x78(%rsp), %rsi
callq 0x29dc30
jmp 0x4e27f8
leaq 0x38(%rsp), %rdi
movl $0x7fc8, %esi           # imm = 0x7FC8
callq 0x371f20
jmp 0x4e2809
leaq 0xc4703(%rip), %rsi     # 0x5a6f13
leaq 0x58(%rsp), %rdi
leaq 0x38(%rsp), %rdx
callq 0x29dd70
jmp 0x4e2821
movq (%rsp), %rdx
leaq 0xf8(%rsp), %rdi
movl $0x9, %esi
leaq 0x98(%rsp), %rcx
leaq 0x58(%rsp), %r8
callq 0x3741e0
jmp 0x4e2846
movq 0x8(%rsp), %rdi
leaq 0xf8(%rsp), %rsi
callq 0x371e40
jmp 0x4e285a
leaq 0xf8(%rsp), %rdi
callq 0x371330
leaq 0x58(%rsp), %rdi
callq 0x11b838
leaq 0x38(%rsp), %rdi
callq 0x11b838
leaq 0x98(%rsp), %rdi
callq 0x11b838
leaq 0x78(%rsp), %rdi
callq 0x11b838
leaq 0xb8(%rsp), %rdi
callq 0x3706b0
callq 0x2821f0
movq %rax, 0x240(%rsp)
leaq 0x200(%rsp), %rdi
callq 0x11b838
jmp 0x4e2bcf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1d0(%rsp)
movl %eax, 0x1cc(%rsp)
jmp 0x4e2999
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1d0(%rsp)
movl %eax, 0x1cc(%rsp)
jmp 0x4e297e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1d0(%rsp)
movl %eax, 0x1cc(%rsp)
jmp 0x4e2958
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1d0(%rsp)
movl %eax, 0x1cc(%rsp)
jmp 0x4e293d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1d0(%rsp)
movl %eax, 0x1cc(%rsp)
leaq 0x1a8(%rsp), %rdi
callq 0x11b838
testb $0x1, 0x1a4(%rsp)
jne 0x4e2949
jmp 0x4e2956
leaq 0x1a5(%rsp), %rdi
callq 0x11b820
jmp 0x4e2958
testb $0x1, 0x1a6(%rsp)
jne 0x4e2964
jmp 0x4e2971
leaq 0x1a7(%rsp), %rdi
callq 0x11b820
leaq 0x1e0(%rsp), %rdi
callq 0x11b838
testb $0x1, 0x1ca(%rsp)
jne 0x4e298a
jmp 0x4e2997
leaq 0x1cb(%rsp), %rdi
callq 0x11b820
jmp 0x4e2999
testb $0x1, 0x1de(%rsp)
jne 0x4e29a5
jmp 0x4e29b2
leaq 0x1df(%rsp), %rdi
callq 0x11b820
jmp 0x4e2bdf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1d0(%rsp)
movl %eax, 0x1cc(%rsp)
jmp 0x4e2a9d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1d0(%rsp)
movl %eax, 0x1cc(%rsp)
jmp 0x4e2a90
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1d0(%rsp)
movl %eax, 0x1cc(%rsp)
jmp 0x4e2a86
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1d0(%rsp)
movl %eax, 0x1cc(%rsp)
jmp 0x4e2a79
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1d0(%rsp)
movl %eax, 0x1cc(%rsp)
jmp 0x4e2a6f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1d0(%rsp)
movl %eax, 0x1cc(%rsp)
jmp 0x4e2a65
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1d0(%rsp)
movl %eax, 0x1cc(%rsp)
leaq 0xf8(%rsp), %rdi
callq 0x371330
leaq 0x58(%rsp), %rdi
callq 0x11b838
leaq 0x38(%rsp), %rdi
callq 0x11b838
leaq 0x98(%rsp), %rdi
callq 0x11b838
leaq 0x78(%rsp), %rdi
callq 0x11b838
leaq 0xb8(%rsp), %rdi
callq 0x3706b0
leaq 0x200(%rsp), %rdi
callq 0x11b838
jmp 0x4e2bdf
movq 0x230(%rsp), %rdi
callq 0x39cbf0
testb $0x1, %al
jne 0x4e2ac5
jmp 0x4e2b7a
movq 0x230(%rsp), %rdi
callq 0x39d260
testb $0x1, %al
jne 0x4e2ad8
jmp 0x4e2b19
movq 0x30(%rsp), %rax
movq 0x8(%rax), %rdi
leaq 0x230(%rsp), %rsi
callq 0x284bd0
movq 0x30(%rsp), %rax
movq 0x8(%rax), %rdi
leaq 0x220(%rsp), %rsi
callq 0x284bd0
movq 0x228(%rsp), %rax
movq %rax, 0x240(%rsp)
jmp 0x4e2bcf
movq 0x30(%rsp), %rax
movq 0x8(%rax), %rdi
leaq 0x230(%rsp), %rsi
callq 0x284bd0
movq 0x30(%rsp), %rax
movq 0x8(%rax), %rdi
leaq 0x228(%rsp), %rsi
callq 0x284bd0
cmpq $0x0, 0x220(%rsp)
je 0x4e2b62
movq 0x220(%rsp), %rax
movq %rax, 0x240(%rsp)
jmp 0x4e2bcf
movq 0x30(%rsp), %rax
movq 0x8(%rax), %rdi
callq 0x39c7b0
movq %rax, 0x240(%rsp)
jmp 0x4e2bcf
xorl %eax, %eax
cmpq 0x228(%rsp), %rax
je 0x4e2bc2
xorl %eax, %eax
cmpq 0x220(%rsp), %rax
je 0x4e2bc2
movq 0x30(%rsp), %rax
movq 0x8(%rax), %rdi
leaq 0x230(%rsp), %rsi
leaq 0x228(%rsp), %rdx
leaq 0x220(%rsp), %rcx
callq 0x4e4230
movq %rax, 0x240(%rsp)
jmp 0x4e2bcf
callq 0x2821f0
movq %rax, 0x240(%rsp)
movq 0x240(%rsp), %rax
addq $0x248, %rsp            # imm = 0x248
retq
movq 0x1d0(%rsp), %rdi
callq 0x11b4e0
nopl (%rax)