// File: ArashPartow[P]exprtk/exprtk_benchmark.cpp
// Function: perform_file_based_benchmark(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, unsigned long const&)
void perform_file_based_benchmark(const std::string& file_name, const std::size_t& rounds)
{
   std::deque<std::string> expr_str_list;

   if (0 == load_expression_file(file_name,expr_str_list))
   {
      printf("Failed to load any expressions from: %s\n", file_name.c_str());
      return;
   }

   typedef exprtk::symbol_table<double> symbol_table_t;
   typedef exprtk::expression<double>   expression_t;
   typedef exprtk::parser<double>       parser_t;

   std::deque<expression_t> expression_list;

   symbol_table_t symbol_table;

   double a = 1.1;
   double b = 2.2;
   double c = 3.3;
   double x = 2.123456;
   double y = 3.123456;
   double z = 4.123456;
   double w = 5.123456;

   exprtk::rtl::vecops::package<double> vector_package;

   symbol_table.add_variable("a", a);
   symbol_table.add_variable("b", b);
   symbol_table.add_variable("c", c);

   symbol_table.add_variable("x", x);
   symbol_table.add_variable("y", y);
   symbol_table.add_variable("z", z);
   symbol_table.add_variable("w", w);

   exprtk::polynomial<double, 1> poly01;
   exprtk::polynomial<double, 2> poly02;
   exprtk::polynomial<double, 3> poly03;
   exprtk::polynomial<double, 4> poly04;
   exprtk::polynomial<double, 5> poly05;
   exprtk::polynomial<double, 6> poly06;
   exprtk::polynomial<double, 7> poly07;
   exprtk::polynomial<double, 8> poly08;
   exprtk::polynomial<double, 9> poly09;
   exprtk::polynomial<double,10> poly10;
   exprtk::polynomial<double,11> poly11;
   exprtk::polynomial<double,12> poly12;

   symbol_table.add_function("poly01", poly01);
   symbol_table.add_function("poly02", poly02);
   symbol_table.add_function("poly03", poly03);
   symbol_table.add_function("poly04", poly04);
   symbol_table.add_function("poly05", poly05);
   symbol_table.add_function("poly06", poly06);
   symbol_table.add_function("poly07", poly07);
   symbol_table.add_function("poly08", poly08);
   symbol_table.add_function("poly09", poly09);
   symbol_table.add_function("poly10", poly10);
   symbol_table.add_function("poly11", poly11);
   symbol_table.add_function("poly12", poly12);

   symbol_table.add_package(vector_package);


   static double e = exprtk::details::numeric::constant::e;
   symbol_table.add_variable("e", e, true);

   symbol_table.add_constants();

   {
      parser_t parser;

      for (std::size_t i = 0; i < expr_str_list.size(); ++i)
      {
         expression_t expression;
         expression.register_symbol_table(symbol_table);

         if (!parser.compile(expr_str_list[i],expression))
         {
            printf("[perform_file_based_benchmark] - Parser Error: %s\tExpression: %s\n",
                   parser.error().c_str(),
                   expr_str_list[i].c_str());

            return;
         }

         expression_list.push_back(expression);
      }
   }

   exprtk::timer total_timer;
   exprtk::timer timer;

   double single_eval_total_time = 0.0;

   total_timer.start();

   for (std::size_t i = 0; i < expression_list.size(); ++i)
   {
      expression_t& expression = expression_list[i];

      a = 1.1;
      b = 2.2;
      c = 3.3;
      x = 2.123456;
      y = 3.123456;
      z = 4.123456;
      w = 5.123456;

      timer.start();
      double sum = 0.0;

      for (std::size_t r = 0; r < rounds; ++r)
      {
         sum += expression.value();
         std::swap(a,b);
         std::swap(x,y);
      }

      timer.stop();

      printf("Expression %3d of %3d %9.3f ns\t%10d ns\t(%30.10f)  '%s'\n",
             static_cast<int>(i + 1),
             static_cast<int>(expression_list.size()),
             (timer.time() * 1000000000.0) / (1.0 * rounds),
             static_cast<int>(timer.time() * 1000000000.0),
             sum,
             expr_str_list[i].c_str());

      fflush(stdout);

      single_eval_total_time += (timer.time() * 1000000000.0) / (1.0 * rounds);
   }

   total_timer.stop();

   printf("[*] Number Of Evals:        %15.0f\n",
          rounds * (expression_list.size() * 1.0));

   printf("[*] Total Time:             %9.3fsec\n",
          total_timer.time());

   printf("[*] Total Single Eval Time: %9.3fms\n",
          single_eval_total_time / 1000000.0);
}

// Assembly:
subq $0x1a68, %rsp           # imm = 0x1A68
movq %rdi, 0x1a60(%rsp)
movq %rsi, 0x1a58(%rsp)
leaq 0x1a08(%rsp), %rdi
movq %rdi, 0x140(%rsp)
callq 0x1207b0
movq 0x140(%rsp), %rsi
movq 0x1a60(%rsp), %rdi
callq 0x1207c0
movq %rax, 0x148(%rsp)
jmp 0x11d5db
movq 0x148(%rsp), %rcx
xorl %eax, %eax
cmpq %rcx, %rax
jne 0x11d633
movq 0x1a60(%rsp), %rdi
callq 0x115120
movq %rax, %rsi
leaq 0x34728b(%rip), %rdi    # 0x46488c
xorl %eax, %eax
callq 0x1150b0
jmp 0x11d60a
movl $0x1, 0x19f8(%rsp)
jmp 0x11ef11
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a00(%rsp)
movl %eax, 0x19fc(%rsp)
jmp 0x11efe9
leaq 0x19a8(%rsp), %rdi
callq 0x11f660
jmp 0x11d642
leaq 0x19a0(%rsp), %rdi
movl $0x1, %esi
callq 0x11f510
jmp 0x11d656
movabsq $0x3ff199999999999a, %rax # imm = 0x3FF199999999999A
movq %rax, 0x1998(%rsp)
movabsq $0x400199999999999a, %rax # imm = 0x400199999999999A
movq %rax, 0x1990(%rsp)
movabsq $0x400a666666666666, %rax # imm = 0x400A666666666666
movq %rax, 0x1988(%rsp)
movabsq $0x4000fcd67fd3f5b6, %rax # imm = 0x4000FCD67FD3F5B6
movq %rax, 0x1980(%rsp)
movabsq $0x4008fcd67fd3f5b6, %rax # imm = 0x4008FCD67FD3F5B6
movq %rax, 0x1978(%rsp)
movabsq $0x40107e6b3fe9fadb, %rax # imm = 0x40107E6B3FE9FADB
movq %rax, 0x1970(%rsp)
movabsq $0x40147e6b3fe9fadb, %rax # imm = 0x40147E6B3FE9FADB
movq %rax, 0x1968(%rsp)
leaq 0x1188(%rsp), %rdi
callq 0x120980
jmp 0x11d6e3
leaq 0x1167(%rsp), %rdi
movq %rdi, 0x138(%rsp)
callq 0x1156d0
movq 0x138(%rsp), %rdx
leaq 0x3488a8(%rip), %rsi    # 0x465faf
leaq 0x1168(%rsp), %rdi
callq 0x11f450
jmp 0x11d716
leaq 0x19a0(%rsp), %rdi
leaq 0x1168(%rsp), %rsi
leaq 0x1998(%rsp), %rdx
xorl %ecx, %ecx
callq 0x11f5b0
jmp 0x11d737
leaq 0x1168(%rsp), %rdi
callq 0x115818
leaq 0x1167(%rsp), %rdi
callq 0x115800
leaq 0x113f(%rsp), %rdi
movq %rdi, 0x130(%rsp)
callq 0x1156d0
movq 0x130(%rsp), %rdx
leaq 0x347140(%rip), %rsi    # 0x4648b5
leaq 0x1140(%rsp), %rdi
callq 0x11f450
jmp 0x11d784
leaq 0x19a0(%rsp), %rdi
leaq 0x1140(%rsp), %rsi
leaq 0x1990(%rsp), %rdx
xorl %ecx, %ecx
callq 0x11f5b0
jmp 0x11d7a5
leaq 0x1140(%rsp), %rdi
callq 0x115818
leaq 0x113f(%rsp), %rdi
callq 0x115800
leaq 0x1117(%rsp), %rdi
movq %rdi, 0x128(%rsp)
callq 0x1156d0
movq 0x128(%rsp), %rdx
leaq 0x346d5a(%rip), %rsi    # 0x46453d
leaq 0x1118(%rsp), %rdi
callq 0x11f450
jmp 0x11d7f2
leaq 0x19a0(%rsp), %rdi
leaq 0x1118(%rsp), %rsi
leaq 0x1988(%rsp), %rdx
xorl %ecx, %ecx
callq 0x11f5b0
jmp 0x11d813
leaq 0x1118(%rsp), %rdi
callq 0x115818
leaq 0x1117(%rsp), %rdi
callq 0x115800
leaq 0x10ef(%rsp), %rdi
movq %rdi, 0x120(%rsp)
callq 0x1156d0
movq 0x120(%rsp), %rdx
leaq 0x347009(%rip), %rsi    # 0x46485a
leaq 0x10f0(%rsp), %rdi
callq 0x11f450
jmp 0x11d860
leaq 0x19a0(%rsp), %rdi
leaq 0x10f0(%rsp), %rsi
leaq 0x1980(%rsp), %rdx
xorl %ecx, %ecx
callq 0x11f5b0
jmp 0x11d881
leaq 0x10f0(%rsp), %rdi
callq 0x115818
leaq 0x10ef(%rsp), %rdi
callq 0x115800
leaq 0x10c7(%rsp), %rdi
movq %rdi, 0x118(%rsp)
callq 0x1156d0
movq 0x118(%rsp), %rdx
leaq 0x346ee9(%rip), %rsi    # 0x4647a8
leaq 0x10c8(%rsp), %rdi
callq 0x11f450
jmp 0x11d8ce
leaq 0x19a0(%rsp), %rdi
leaq 0x10c8(%rsp), %rsi
leaq 0x1978(%rsp), %rdx
xorl %ecx, %ecx
callq 0x11f5b0
jmp 0x11d8ef
leaq 0x10c8(%rsp), %rdi
callq 0x115818
leaq 0x10c7(%rsp), %rdi
callq 0x115800
leaq 0x109f(%rsp), %rdi
movq %rdi, 0x110(%rsp)
callq 0x1156d0
movq 0x110(%rsp), %rdx
leaq 0x34747d(%rip), %rsi    # 0x464daa
leaq 0x10a0(%rsp), %rdi
callq 0x11f450
jmp 0x11d93c
leaq 0x19a0(%rsp), %rdi
leaq 0x10a0(%rsp), %rsi
leaq 0x1970(%rsp), %rdx
xorl %ecx, %ecx
callq 0x11f5b0
jmp 0x11d95d
leaq 0x10a0(%rsp), %rdi
callq 0x115818
leaq 0x109f(%rsp), %rdi
callq 0x115800
leaq 0x1077(%rsp), %rdi
movq %rdi, 0x108(%rsp)
callq 0x1156d0
movq 0x108(%rsp), %rdx
leaq 0x34743d(%rip), %rsi    # 0x464dd8
leaq 0x1078(%rsp), %rdi
callq 0x11f450
jmp 0x11d9aa
leaq 0x19a0(%rsp), %rdi
leaq 0x1078(%rsp), %rsi
leaq 0x1968(%rsp), %rdx
xorl %ecx, %ecx
callq 0x11f5b0
jmp 0x11d9cb
leaq 0x1078(%rsp), %rdi
callq 0x115818
leaq 0x1077(%rsp), %rdi
callq 0x115800
leaq 0x1048(%rsp), %rdi
callq 0x121080
jmp 0x11d9f4
leaq 0x1020(%rsp), %rdi
callq 0x1210e0
jmp 0x11da03
leaq 0xff8(%rsp), %rdi
callq 0x121140
jmp 0x11da12
leaq 0xfd0(%rsp), %rdi
callq 0x1211a0
jmp 0x11da21
leaq 0xfa8(%rsp), %rdi
callq 0x121200
jmp 0x11da30
leaq 0xf80(%rsp), %rdi
callq 0x121260
jmp 0x11da3f
leaq 0xf58(%rsp), %rdi
callq 0x1212c0
jmp 0x11da4e
leaq 0xf30(%rsp), %rdi
callq 0x121320
jmp 0x11da5d
leaq 0xf08(%rsp), %rdi
callq 0x121380
jmp 0x11da6c
leaq 0xee0(%rsp), %rdi
callq 0x1213e0
jmp 0x11da7b
leaq 0xeb8(%rsp), %rdi
callq 0x121440
jmp 0x11da8a
leaq 0xe90(%rsp), %rdi
callq 0x1214a0
jmp 0x11da99
leaq 0xe6f(%rsp), %rdi
movq %rdi, 0x100(%rsp)
callq 0x1156d0
movq 0x100(%rsp), %rdx
leaq 0x346dfa(%rip), %rsi    # 0x4648b7
leaq 0xe70(%rsp), %rdi
callq 0x11f450
jmp 0x11dacc
leaq 0x19a0(%rsp), %rdi
leaq 0xe70(%rsp), %rsi
leaq 0x1048(%rsp), %rdx
callq 0x121500
jmp 0x11daeb
leaq 0xe70(%rsp), %rdi
callq 0x115818
leaq 0xe6f(%rsp), %rdi
callq 0x115800
leaq 0xe47(%rsp), %rdi
movq %rdi, 0xf8(%rsp)
callq 0x1156d0
movq 0xf8(%rsp), %rdx
leaq 0x346d95(%rip), %rsi    # 0x4648be
leaq 0xe48(%rsp), %rdi
callq 0x11f450
jmp 0x11db38
leaq 0x19a0(%rsp), %rdi
leaq 0xe48(%rsp), %rsi
leaq 0x1020(%rsp), %rdx
callq 0x121500
jmp 0x11db57
leaq 0xe48(%rsp), %rdi
callq 0x115818
leaq 0xe47(%rsp), %rdi
callq 0x115800
leaq 0xe1f(%rsp), %rdi
movq %rdi, 0xf0(%rsp)
callq 0x1156d0
movq 0xf0(%rsp), %rdx
leaq 0x346d30(%rip), %rsi    # 0x4648c5
leaq 0xe20(%rsp), %rdi
callq 0x11f450
jmp 0x11dba4
leaq 0x19a0(%rsp), %rdi
leaq 0xe20(%rsp), %rsi
leaq 0xff8(%rsp), %rdx
callq 0x121500
jmp 0x11dbc3
leaq 0xe20(%rsp), %rdi
callq 0x115818
leaq 0xe1f(%rsp), %rdi
callq 0x115800
leaq 0xdf7(%rsp), %rdi
movq %rdi, 0xe8(%rsp)
callq 0x1156d0
movq 0xe8(%rsp), %rdx
leaq 0x346ccb(%rip), %rsi    # 0x4648cc
leaq 0xdf8(%rsp), %rdi
callq 0x11f450
jmp 0x11dc10
leaq 0x19a0(%rsp), %rdi
leaq 0xdf8(%rsp), %rsi
leaq 0xfd0(%rsp), %rdx
callq 0x121500
jmp 0x11dc2f
leaq 0xdf8(%rsp), %rdi
callq 0x115818
leaq 0xdf7(%rsp), %rdi
callq 0x115800
leaq 0xdcf(%rsp), %rdi
movq %rdi, 0xe0(%rsp)
callq 0x1156d0
movq 0xe0(%rsp), %rdx
leaq 0x346c66(%rip), %rsi    # 0x4648d3
leaq 0xdd0(%rsp), %rdi
callq 0x11f450
jmp 0x11dc7c
leaq 0x19a0(%rsp), %rdi
leaq 0xdd0(%rsp), %rsi
leaq 0xfa8(%rsp), %rdx
callq 0x121500
jmp 0x11dc9b
leaq 0xdd0(%rsp), %rdi
callq 0x115818
leaq 0xdcf(%rsp), %rdi
callq 0x115800
leaq 0xda7(%rsp), %rdi
movq %rdi, 0xd8(%rsp)
callq 0x1156d0
movq 0xd8(%rsp), %rdx
leaq 0x346c01(%rip), %rsi    # 0x4648da
leaq 0xda8(%rsp), %rdi
callq 0x11f450
jmp 0x11dce8
leaq 0x19a0(%rsp), %rdi
leaq 0xda8(%rsp), %rsi
leaq 0xf80(%rsp), %rdx
callq 0x121500
jmp 0x11dd07
leaq 0xda8(%rsp), %rdi
callq 0x115818
leaq 0xda7(%rsp), %rdi
callq 0x115800
leaq 0xd7f(%rsp), %rdi
movq %rdi, 0xd0(%rsp)
callq 0x1156d0
movq 0xd0(%rsp), %rdx
leaq 0x346b9c(%rip), %rsi    # 0x4648e1
leaq 0xd80(%rsp), %rdi
callq 0x11f450
jmp 0x11dd54
leaq 0x19a0(%rsp), %rdi
leaq 0xd80(%rsp), %rsi
leaq 0xf58(%rsp), %rdx
callq 0x121500
jmp 0x11dd73
leaq 0xd80(%rsp), %rdi
callq 0x115818
leaq 0xd7f(%rsp), %rdi
callq 0x115800
leaq 0xd57(%rsp), %rdi
movq %rdi, 0xc8(%rsp)
callq 0x1156d0
movq 0xc8(%rsp), %rdx
leaq 0x346b37(%rip), %rsi    # 0x4648e8
leaq 0xd58(%rsp), %rdi
callq 0x11f450
jmp 0x11ddc0
leaq 0x19a0(%rsp), %rdi
leaq 0xd58(%rsp), %rsi
leaq 0xf30(%rsp), %rdx
callq 0x121500
jmp 0x11dddf
leaq 0xd58(%rsp), %rdi
callq 0x115818
leaq 0xd57(%rsp), %rdi
callq 0x115800
leaq 0xd2f(%rsp), %rdi
movq %rdi, 0xc0(%rsp)
callq 0x1156d0
movq 0xc0(%rsp), %rdx
leaq 0x346ad2(%rip), %rsi    # 0x4648ef
leaq 0xd30(%rsp), %rdi
callq 0x11f450
jmp 0x11de2c
leaq 0x19a0(%rsp), %rdi
leaq 0xd30(%rsp), %rsi
leaq 0xf08(%rsp), %rdx
callq 0x121500
jmp 0x11de4b
leaq 0xd30(%rsp), %rdi
callq 0x115818
leaq 0xd2f(%rsp), %rdi
callq 0x115800
leaq 0xd07(%rsp), %rdi
movq %rdi, 0xb8(%rsp)
callq 0x1156d0
movq 0xb8(%rsp), %rdx
leaq 0x346a6d(%rip), %rsi    # 0x4648f6
leaq 0xd08(%rsp), %rdi
callq 0x11f450
jmp 0x11de98
leaq 0x19a0(%rsp), %rdi
leaq 0xd08(%rsp), %rsi
leaq 0xee0(%rsp), %rdx
callq 0x121500
jmp 0x11deb7
leaq 0xd08(%rsp), %rdi
callq 0x115818
leaq 0xd07(%rsp), %rdi
callq 0x115800
leaq 0xcdf(%rsp), %rdi
movq %rdi, 0xb0(%rsp)
callq 0x1156d0
movq 0xb0(%rsp), %rdx
leaq 0x346a08(%rip), %rsi    # 0x4648fd
leaq 0xce0(%rsp), %rdi
callq 0x11f450
jmp 0x11df04
leaq 0x19a0(%rsp), %rdi
leaq 0xce0(%rsp), %rsi
leaq 0xeb8(%rsp), %rdx
callq 0x121500
jmp 0x11df23
leaq 0xce0(%rsp), %rdi
callq 0x115818
leaq 0xcdf(%rsp), %rdi
callq 0x115800
leaq 0xcb7(%rsp), %rdi
movq %rdi, 0xa8(%rsp)
callq 0x1156d0
movq 0xa8(%rsp), %rdx
leaq 0x3469a3(%rip), %rsi    # 0x464904
leaq 0xcb8(%rsp), %rdi
callq 0x11f450
jmp 0x11df70
leaq 0x19a0(%rsp), %rdi
leaq 0xcb8(%rsp), %rsi
leaq 0xe90(%rsp), %rdx
callq 0x121500
jmp 0x11df8f
leaq 0xcb8(%rsp), %rdi
callq 0x115818
leaq 0xcb7(%rsp), %rdi
callq 0x115800
leaq 0x19a0(%rsp), %rdi
leaq 0x1188(%rsp), %rsi
callq 0x1215a0
jmp 0x11dfc0
leaq 0xc8f(%rsp), %rdi
movq %rdi, 0xa0(%rsp)
callq 0x1156d0
movq 0xa0(%rsp), %rdx
leaq 0x347b5a(%rip), %rsi    # 0x465b3e
leaq 0xc90(%rsp), %rdi
callq 0x11f450
jmp 0x11dff3
leaq 0x52041e(%rip), %rdx    # 0x63e418
leaq 0x19a0(%rsp), %rdi
leaq 0xc90(%rsp), %rsi
movl $0x1, %ecx
callq 0x11f5b0
jmp 0x11e016
leaq 0xc90(%rsp), %rdi
callq 0x115818
leaq 0xc8f(%rsp), %rdi
callq 0x115800
leaq 0x19a0(%rsp), %rdi
callq 0x11f550
jmp 0x11e03f
leaq 0x210(%rsp), %rdi
movl $0x7f, %esi
callq 0x1215d0
jmp 0x11e053
leaq 0x360(%rsp), %rdi
leaq 0x210(%rsp), %rsi
callq 0x121700
jmp 0x11e06a
leaq 0x210(%rsp), %rdi
callq 0x121f30
movq $0x0, 0x208(%rsp)
movq 0x208(%rsp), %rax
movq %rax, 0x98(%rsp)
leaq 0x1a08(%rsp), %rdi
callq 0x121fa0
movq %rax, %rcx
movq 0x98(%rsp), %rax
cmpq %rcx, %rax
jae 0x11e9ae
leaq 0x1e8(%rsp), %rdi
callq 0x121fc0
jmp 0x11e0c3
leaq 0x1e8(%rsp), %rdi
leaq 0x19a0(%rsp), %rsi
callq 0x122070
jmp 0x11e0da
movq 0x208(%rsp), %rsi
leaq 0x1a08(%rsp), %rdi
callq 0x1229b0
movq %rax, %rsi
leaq 0x360(%rsp), %rdi
leaq 0x1e8(%rsp), %rdx
callq 0x122120
movb %al, 0x97(%rsp)
jmp 0x11e110
movb 0x97(%rsp), %al
testb $0x1, %al
jne 0x11e945
jmp 0x11e121
leaq 0x1c8(%rsp), %rdi
leaq 0x360(%rsp), %rsi
callq 0x1229e0
jmp 0x11e138
leaq 0x1c8(%rsp), %rdi
callq 0x115120
movq %rax, 0x88(%rsp)
movq 0x208(%rsp), %rsi
leaq 0x1a08(%rsp), %rdi
callq 0x1229b0
movq %rax, %rdi
callq 0x115120
movq 0x88(%rsp), %rsi
movq %rax, %rdx
leaq 0x34678f(%rip), %rdi    # 0x46490b
xorl %eax, %eax
callq 0x1150b0
jmp 0x11e185
leaq 0x1c8(%rsp), %rdi
callq 0x115818
movl $0x1, 0x19f8(%rsp)
jmp 0x11e967
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a00(%rsp)
movl %eax, 0x19fc(%rsp)
jmp 0x11efdc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a00(%rsp)
movl %eax, 0x19fc(%rsp)
jmp 0x11efcf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a00(%rsp)
movl %eax, 0x19fc(%rsp)
jmp 0x11e20b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a00(%rsp)
movl %eax, 0x19fc(%rsp)
leaq 0x1168(%rsp), %rdi
callq 0x115818
leaq 0x1167(%rsp), %rdi
callq 0x115800
jmp 0x11efc2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a00(%rsp)
movl %eax, 0x19fc(%rsp)
jmp 0x11e254
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a00(%rsp)
movl %eax, 0x19fc(%rsp)
leaq 0x1140(%rsp), %rdi
callq 0x115818
leaq 0x113f(%rsp), %rdi
callq 0x115800
jmp 0x11efc2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a00(%rsp)
movl %eax, 0x19fc(%rsp)
jmp 0x11e29d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a00(%rsp)
movl %eax, 0x19fc(%rsp)
leaq 0x1118(%rsp), %rdi
callq 0x115818
leaq 0x1117(%rsp), %rdi
callq 0x115800
jmp 0x11efc2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a00(%rsp)
movl %eax, 0x19fc(%rsp)
jmp 0x11e2e6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a00(%rsp)
movl %eax, 0x19fc(%rsp)
leaq 0x10f0(%rsp), %rdi
callq 0x115818
leaq 0x10ef(%rsp), %rdi
callq 0x115800
jmp 0x11efc2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a00(%rsp)
movl %eax, 0x19fc(%rsp)
jmp 0x11e32f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a00(%rsp)
movl %eax, 0x19fc(%rsp)
leaq 0x10c8(%rsp), %rdi
callq 0x115818
leaq 0x10c7(%rsp), %rdi
callq 0x115800
jmp 0x11efc2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a00(%rsp)
movl %eax, 0x19fc(%rsp)
jmp 0x11e378
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a00(%rsp)
movl %eax, 0x19fc(%rsp)
leaq 0x10a0(%rsp), %rdi
callq 0x115818
leaq 0x109f(%rsp), %rdi
callq 0x115800
jmp 0x11efc2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a00(%rsp)
movl %eax, 0x19fc(%rsp)
jmp 0x11e3c1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a00(%rsp)
movl %eax, 0x19fc(%rsp)
leaq 0x1078(%rsp), %rdi
callq 0x115818
leaq 0x1077(%rsp), %rdi
callq 0x115800
jmp 0x11efc2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a00(%rsp)
movl %eax, 0x19fc(%rsp)
jmp 0x11efc2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a00(%rsp)
movl %eax, 0x19fc(%rsp)
jmp 0x11efb5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a00(%rsp)
movl %eax, 0x19fc(%rsp)
jmp 0x11efa8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a00(%rsp)
movl %eax, 0x19fc(%rsp)
jmp 0x11ef9b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a00(%rsp)
movl %eax, 0x19fc(%rsp)
jmp 0x11ef8e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a00(%rsp)
movl %eax, 0x19fc(%rsp)
jmp 0x11ef81
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a00(%rsp)
movl %eax, 0x19fc(%rsp)
jmp 0x11ef74
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a00(%rsp)
movl %eax, 0x19fc(%rsp)
jmp 0x11ef67
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a00(%rsp)
movl %eax, 0x19fc(%rsp)
jmp 0x11ef5a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a00(%rsp)
movl %eax, 0x19fc(%rsp)
jmp 0x11ef4d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a00(%rsp)
movl %eax, 0x19fc(%rsp)
jmp 0x11ef40
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a00(%rsp)
movl %eax, 0x19fc(%rsp)
jmp 0x11ef33
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a00(%rsp)
movl %eax, 0x19fc(%rsp)
jmp 0x11e536
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a00(%rsp)
movl %eax, 0x19fc(%rsp)
leaq 0xe70(%rsp), %rdi
callq 0x115818
leaq 0xe6f(%rsp), %rdi
callq 0x115800
jmp 0x11ef26
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a00(%rsp)
movl %eax, 0x19fc(%rsp)
jmp 0x11e57f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a00(%rsp)
movl %eax, 0x19fc(%rsp)
leaq 0xe48(%rsp), %rdi
callq 0x115818
leaq 0xe47(%rsp), %rdi
callq 0x115800
jmp 0x11ef26
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a00(%rsp)
movl %eax, 0x19fc(%rsp)
jmp 0x11e5c8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a00(%rsp)
movl %eax, 0x19fc(%rsp)
leaq 0xe20(%rsp), %rdi
callq 0x115818
leaq 0xe1f(%rsp), %rdi
callq 0x115800
jmp 0x11ef26
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a00(%rsp)
movl %eax, 0x19fc(%rsp)
jmp 0x11e611
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a00(%rsp)
movl %eax, 0x19fc(%rsp)
leaq 0xdf8(%rsp), %rdi
callq 0x115818
leaq 0xdf7(%rsp), %rdi
callq 0x115800
jmp 0x11ef26
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a00(%rsp)
movl %eax, 0x19fc(%rsp)
jmp 0x11e65a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a00(%rsp)
movl %eax, 0x19fc(%rsp)
leaq 0xdd0(%rsp), %rdi
callq 0x115818
leaq 0xdcf(%rsp), %rdi
callq 0x115800
jmp 0x11ef26
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a00(%rsp)
movl %eax, 0x19fc(%rsp)
jmp 0x11e6a3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a00(%rsp)
movl %eax, 0x19fc(%rsp)
leaq 0xda8(%rsp), %rdi
callq 0x115818
leaq 0xda7(%rsp), %rdi
callq 0x115800
jmp 0x11ef26
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a00(%rsp)
movl %eax, 0x19fc(%rsp)
jmp 0x11e6ec
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a00(%rsp)
movl %eax, 0x19fc(%rsp)
leaq 0xd80(%rsp), %rdi
callq 0x115818
leaq 0xd7f(%rsp), %rdi
callq 0x115800
jmp 0x11ef26
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a00(%rsp)
movl %eax, 0x19fc(%rsp)
jmp 0x11e735
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a00(%rsp)
movl %eax, 0x19fc(%rsp)
leaq 0xd58(%rsp), %rdi
callq 0x115818
leaq 0xd57(%rsp), %rdi
callq 0x115800
jmp 0x11ef26
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a00(%rsp)
movl %eax, 0x19fc(%rsp)
jmp 0x11e77e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a00(%rsp)
movl %eax, 0x19fc(%rsp)
leaq 0xd30(%rsp), %rdi
callq 0x115818
leaq 0xd2f(%rsp), %rdi
callq 0x115800
jmp 0x11ef26
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a00(%rsp)
movl %eax, 0x19fc(%rsp)
jmp 0x11e7c7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a00(%rsp)
movl %eax, 0x19fc(%rsp)
leaq 0xd08(%rsp), %rdi
callq 0x115818
leaq 0xd07(%rsp), %rdi
callq 0x115800
jmp 0x11ef26
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a00(%rsp)
movl %eax, 0x19fc(%rsp)
jmp 0x11e810
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a00(%rsp)
movl %eax, 0x19fc(%rsp)
leaq 0xce0(%rsp), %rdi
callq 0x115818
leaq 0xcdf(%rsp), %rdi
callq 0x115800
jmp 0x11ef26
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a00(%rsp)
movl %eax, 0x19fc(%rsp)
jmp 0x11e859
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a00(%rsp)
movl %eax, 0x19fc(%rsp)
leaq 0xcb8(%rsp), %rdi
callq 0x115818
leaq 0xcb7(%rsp), %rdi
callq 0x115800
jmp 0x11ef26
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a00(%rsp)
movl %eax, 0x19fc(%rsp)
jmp 0x11ef26
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a00(%rsp)
movl %eax, 0x19fc(%rsp)
jmp 0x11e8bb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a00(%rsp)
movl %eax, 0x19fc(%rsp)
leaq 0xc90(%rsp), %rdi
callq 0x115818
leaq 0xc8f(%rsp), %rdi
callq 0x115800
jmp 0x11ef26
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a00(%rsp)
movl %eax, 0x19fc(%rsp)
leaq 0x210(%rsp), %rdi
callq 0x121f30
jmp 0x11ef26
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a00(%rsp)
movl %eax, 0x19fc(%rsp)
jmp 0x11eb98
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a00(%rsp)
movl %eax, 0x19fc(%rsp)
jmp 0x11e99c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a00(%rsp)
movl %eax, 0x19fc(%rsp)
leaq 0x1c8(%rsp), %rdi
callq 0x115818
jmp 0x11e99c
leaq 0x19a8(%rsp), %rdi
leaq 0x1e8(%rsp), %rsi
callq 0x122aa0
jmp 0x11e95c
movl $0x0, 0x19f8(%rsp)
leaq 0x1e8(%rsp), %rdi
callq 0x122b00
movl 0x19f8(%rsp), %eax
testl %eax, %eax
jne 0x11e9b9
jmp 0x11e981
jmp 0x11e983
movq 0x208(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x208(%rsp)
jmp 0x11e083
leaq 0x1e8(%rsp), %rdi
callq 0x122b00
jmp 0x11eb98
movl $0x0, 0x19f8(%rsp)
leaq 0x360(%rsp), %rdi
callq 0x122b40
movl 0x19f8(%rsp), %eax
testl %eax, %eax
jne 0x11ee4e
jmp 0x11e9d7
leaq 0x1a0(%rsp), %rdi
callq 0x122d40
jmp 0x11e9e6
leaq 0x178(%rsp), %rdi
callq 0x122d40
jmp 0x11e9f5
movq $0x0, 0x170(%rsp)
leaq 0x1a0(%rsp), %rdi
callq 0x122d70
jmp 0x11ea10
movq $0x0, 0x168(%rsp)
movq 0x168(%rsp), %rax
movq %rax, 0x80(%rsp)
leaq 0x19a8(%rsp), %rdi
callq 0x11f890
movq %rax, %rcx
movq 0x80(%rsp), %rax
cmpq %rcx, %rax
jae 0x11ed5d
movq 0x168(%rsp), %rsi
leaq 0x19a8(%rsp), %rdi
callq 0x11fa30
movq %rax, 0x160(%rsp)
movabsq $0x3ff199999999999a, %rax # imm = 0x3FF199999999999A
movq %rax, 0x1998(%rsp)
movabsq $0x400199999999999a, %rax # imm = 0x400199999999999A
movq %rax, 0x1990(%rsp)
movabsq $0x400a666666666666, %rax # imm = 0x400A666666666666
movq %rax, 0x1988(%rsp)
movabsq $0x4000fcd67fd3f5b6, %rax # imm = 0x4000FCD67FD3F5B6
movq %rax, 0x1980(%rsp)
movabsq $0x4008fcd67fd3f5b6, %rax # imm = 0x4008FCD67FD3F5B6
movq %rax, 0x1978(%rsp)
movabsq $0x40107e6b3fe9fadb, %rax # imm = 0x40107E6B3FE9FADB
movq %rax, 0x1970(%rsp)
movabsq $0x40147e6b3fe9fadb, %rax # imm = 0x40147E6B3FE9FADB
movq %rax, 0x1968(%rsp)
leaq 0x178(%rsp), %rdi
callq 0x122d70
jmp 0x11eaf7
xorps %xmm0, %xmm0
movsd %xmm0, 0x158(%rsp)
movq $0x0, 0x150(%rsp)
movq 0x150(%rsp), %rax
movq 0x1a58(%rsp), %rcx
cmpq (%rcx), %rax
jae 0x11ebaa
movq 0x160(%rsp), %rdi
callq 0x122d90
movsd %xmm0, 0x78(%rsp)
jmp 0x11eb3d
movsd 0x78(%rsp), %xmm0
addsd 0x158(%rsp), %xmm0
movsd %xmm0, 0x158(%rsp)
leaq 0x1998(%rsp), %rdi
leaq 0x1990(%rsp), %rsi
callq 0x122db0
leaq 0x1980(%rsp), %rdi
leaq 0x1978(%rsp), %rsi
callq 0x122db0
movq 0x150(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x150(%rsp)
jmp 0x11eb0f
leaq 0x360(%rsp), %rdi
callq 0x122b40
jmp 0x11ef26
leaq 0x178(%rsp), %rdi
callq 0x122df0
jmp 0x11ebb9
movl 0x168(%rsp), %eax
incl %eax
movl %eax, 0x68(%rsp)
leaq 0x19a8(%rsp), %rdi
callq 0x11f890
movl %eax, 0x6c(%rsp)
leaq 0x178(%rsp), %rdi
callq 0x122e20
movsd %xmm0, 0x70(%rsp)
jmp 0x11ebec
movsd 0x70(%rsp), %xmm0
movsd 0x34044e(%rip), %xmm1   # 0x45f048
mulsd %xmm1, %xmm0
movq 0x1a58(%rsp), %rax
movq (%rax), %xmm1
movaps 0x3403ff(%rip), %xmm2   # 0x45f010
punpckldq %xmm2, %xmm1    # xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]
movapd 0x340403(%rip), %xmm2   # 0x45f020
subpd %xmm2, %xmm1
movaps %xmm1, %xmm2
unpckhpd %xmm1, %xmm1            # xmm1 = xmm1[1,1]
addsd %xmm2, %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, 0x58(%rsp)
leaq 0x178(%rsp), %rdi
callq 0x122e20
movsd %xmm0, 0x60(%rsp)
jmp 0x11ec4b
movsd 0x60(%rsp), %xmm0
movsd 0x3403ef(%rip), %xmm1   # 0x45f048
mulsd %xmm1, %xmm0
cvttsd2si %xmm0, %eax
movl %eax, 0x4c(%rsp)
movsd 0x158(%rsp), %xmm0
movsd %xmm0, 0x50(%rsp)
movq 0x168(%rsp), %rsi
leaq 0x1a08(%rsp), %rdi
callq 0x1229b0
movq %rax, %rdi
callq 0x115120
movl 0x68(%rsp), %esi
movl 0x6c(%rsp), %edx
movsd 0x58(%rsp), %xmm0
movl 0x4c(%rsp), %ecx
movsd 0x50(%rsp), %xmm1
movq %rax, %r8
leaq 0x345c9a(%rip), %rdi    # 0x46494d
movb $0x2, %al
callq 0x1150b0
jmp 0x11ecbc
movq 0x51f31d(%rip), %rax    # 0x63dfe0
movq (%rax), %rdi
callq 0x1153f0
jmp 0x11eccd
leaq 0x178(%rsp), %rdi
callq 0x122e20
movsd %xmm0, 0x40(%rsp)
jmp 0x11ece2
movsd 0x40(%rsp), %xmm0
movsd 0x340358(%rip), %xmm1   # 0x45f048
mulsd %xmm1, %xmm0
movq 0x1a58(%rsp), %rax
movq (%rax), %xmm2
movaps 0x340309(%rip), %xmm1   # 0x45f010
punpckldq %xmm1, %xmm2    # xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]
movapd 0x34030d(%rip), %xmm1   # 0x45f020
subpd %xmm1, %xmm2
movaps %xmm2, %xmm1
unpckhpd %xmm2, %xmm2            # xmm2 = xmm2[1,1]
addsd %xmm1, %xmm2
movsd 0x340326(%rip), %xmm1   # 0x45f050
mulsd %xmm2, %xmm1
divsd %xmm1, %xmm0
addsd 0x170(%rsp), %xmm0
movsd %xmm0, 0x170(%rsp)
movq 0x168(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x168(%rsp)
jmp 0x11ea1c
leaq 0x1a0(%rsp), %rdi
callq 0x122df0
jmp 0x11ed6c
movq 0x1a58(%rsp), %rax
movq (%rax), %xmm0
movaps 0x340291(%rip), %xmm1   # 0x45f010
movaps %xmm1, 0x10(%rsp)
punpckldq %xmm1, %xmm0    # xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
movapd 0x340290(%rip), %xmm1   # 0x45f020
movaps %xmm1, 0x20(%rsp)
subpd %xmm1, %xmm0
movaps %xmm0, %xmm1
unpckhpd %xmm0, %xmm0            # xmm0 = xmm0[1,1]
addsd %xmm1, %xmm0
movsd %xmm0, 0x38(%rsp)
leaq 0x19a8(%rsp), %rdi
callq 0x11f890
movaps 0x10(%rsp), %xmm3
movaps 0x20(%rsp), %xmm2
movsd 0x38(%rsp), %xmm0
movq %rax, %xmm1
punpckldq %xmm3, %xmm1    # xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1]
subpd %xmm2, %xmm1
movaps %xmm1, %xmm2
unpckhpd %xmm1, %xmm1            # xmm1 = xmm1[1,1]
addsd %xmm2, %xmm1
mulsd %xmm1, %xmm0
leaq 0x345b9b(%rip), %rdi    # 0x464985
movb $0x1, %al
callq 0x1150b0
jmp 0x11edf3
leaq 0x1a0(%rsp), %rdi
callq 0x122e20
movsd %xmm0, 0x8(%rsp)
jmp 0x11ee08
movsd 0x8(%rsp), %xmm0
leaq 0x345b94(%rip), %rdi    # 0x4649a9
movb $0x1, %al
callq 0x1150b0
jmp 0x11ee1e
movsd 0x170(%rsp), %xmm0
movsd 0x340211(%rip), %xmm1   # 0x45f040
divsd %xmm1, %xmm0
leaq 0x345b95(%rip), %rdi    # 0x4649cf
movb $0x1, %al
callq 0x1150b0
jmp 0x11ee43
movl $0x0, 0x19f8(%rsp)
leaq 0xe90(%rsp), %rdi
callq 0x122e70
leaq 0xeb8(%rsp), %rdi
callq 0x122e80
leaq 0xee0(%rsp), %rdi
callq 0x122e90
leaq 0xf08(%rsp), %rdi
callq 0x122ea0
leaq 0xf30(%rsp), %rdi
callq 0x122eb0
leaq 0xf58(%rsp), %rdi
callq 0x122ec0
leaq 0xf80(%rsp), %rdi
callq 0x122ed0
leaq 0xfa8(%rsp), %rdi
callq 0x122ee0
leaq 0xfd0(%rsp), %rdi
callq 0x122ef0
leaq 0xff8(%rsp), %rdi
callq 0x122f00
leaq 0x1020(%rsp), %rdi
callq 0x122f10
leaq 0x1048(%rsp), %rdi
callq 0x122f20
leaq 0x1188(%rsp), %rdi
callq 0x122f30
leaq 0x19a0(%rsp), %rdi
callq 0x120730
leaq 0x19a8(%rsp), %rdi
callq 0x1206c0
leaq 0x1a08(%rsp), %rdi
callq 0x123120
addq $0x1a68, %rsp           # imm = 0x1A68
retq
leaq 0xe90(%rsp), %rdi
callq 0x122e70
leaq 0xeb8(%rsp), %rdi
callq 0x122e80
leaq 0xee0(%rsp), %rdi
callq 0x122e90
leaq 0xf08(%rsp), %rdi
callq 0x122ea0
leaq 0xf30(%rsp), %rdi
callq 0x122eb0
leaq 0xf58(%rsp), %rdi
callq 0x122ec0
leaq 0xf80(%rsp), %rdi
callq 0x122ed0
leaq 0xfa8(%rsp), %rdi
callq 0x122ee0
leaq 0xfd0(%rsp), %rdi
callq 0x122ef0
leaq 0xff8(%rsp), %rdi
callq 0x122f00
leaq 0x1020(%rsp), %rdi
callq 0x122f10
leaq 0x1048(%rsp), %rdi
callq 0x122f20
leaq 0x1188(%rsp), %rdi
callq 0x122f30
leaq 0x19a0(%rsp), %rdi
callq 0x120730
leaq 0x19a8(%rsp), %rdi
callq 0x1206c0
leaq 0x1a08(%rsp), %rdi
callq 0x123120
movq 0x1a00(%rsp), %rdi
callq 0x1154d0
nopw %cs:(%rax,%rax)