// File: /workspace/github_cpp_makefile_star2_O3/Kei18[P]pibt/./src/solver/ecbs.cpp
// Function: ECBS::AstarSearch(Agent*, CTNode*)
Nodes ECBS::AstarSearch(Agent* a, CTNode* node) {
  Constraint constraints = getConstraintsForAgent(node, a);

  Node* _s = a->getNode();
  Node* _g = a->getGoal();

  Nodes path, tmpPath, C;  // return

  // ==== fast implementation ====
  // constraint free
  if (constraints.empty()) {
    path = G->getPath(_s, _g);
    table_fmin.at(a->getId()) = path.size() - 1;
    return path;
  }

  // goal condition
  bool existGoalConstraint = false;
  int timeGoalConstraint = 0;
  for (auto c: constraints) {
    if (c->onNode && c->v == _g && c->t > timeGoalConstraint) {
      existGoalConstraint = true;
      timeGoalConstraint = c->t;
    }
  }
  // =============================

  auto paths = node->paths;

  int f, g;
  float ub;
  int ubori;
  std::string key, keyM, keyF;
  bool invalid = true;

  boost::heap::fibonacci_heap<Fib_AN> OPEN;
  std::unordered_map<std::string, boost::heap::fibonacci_heap<Fib_AN>::handle_type> SEARCHED;
  std::unordered_set<std::string> CLOSE;  // key
  AN* n = new AN { _s, 0, pathDist(_s, _g), nullptr };
  auto handle = OPEN.push(Fib_AN(n));
  key = getKey(n);
  SEARCHED.emplace(key, handle);

  bool updateMin = true;
  std::unordered_map<std::string, int> table_conflict;
  table_conflict.emplace(key, 0);
  // FOCUL
  boost::heap::fibonacci_heap<Fib_FN> FOCUL;
  std::unordered_map<std::string,
                     boost::heap::fibonacci_heap<Fib_FN>::handle_type> SEARCHED_F;

  while (!OPEN.empty()) {
    if (updateMin || FOCUL.empty()) {
      // argmin
      while (!OPEN.empty()
             && CLOSE.find(getKey(OPEN.top().node)) != CLOSE.end()) OPEN.pop();
      if (OPEN.empty()) break;
      n = OPEN.top().node;
      ubori = n->f;
      keyM = getKey(n);
      ub = n->f * w;
      // update focul
      FOCUL.clear();
      SEARCHED_F.clear();
      for (auto itr = OPEN.ordered_begin(); itr != OPEN.ordered_end(); ++itr) {
        AN* l = (*itr).node;
        if ((float)l->f <= ub) {
          if (CLOSE.find(getKey(l)) == CLOSE.end()) {
            key = getKey(l);
            auto handle_f = FOCUL.push(Fib_FN(l, table_conflict.at(key)));
            SEARCHED_F.emplace(key, handle_f);
          }
        } else {
          break;
        }
      }
    }

    // argmin in FOCUL
    n = FOCUL.top().node;
    key = getKey(n);
    FOCUL.pop();

    // already explored
    if (CLOSE.find(key) != CLOSE.end()) continue;

    // check goal
    if (n->v == _g) {
      if (!existGoalConstraint || timeGoalConstraint < n->g) {
        invalid = false;
        break;
      }
    }

    // update list
    updateMin = (key == keyM);
    CLOSE.emplace(key);

    // search neighbor
    C = G->neighbor(n->v);
    C.push_back(n->v);

    for (auto m : C) {
      g = n->g + 1;
      key = getKey(g, m);
      if (CLOSE.find(key) != CLOSE.end()) continue;

      // check constraints
      auto constraint = std::find_if(constraints.begin(), constraints.end(),
                                     [a, g, m, n] (Conflict* c) {
                                       if (c->a != a) return false;
                                       if (c->t != g) return false;
                                       if (c->onNode) return c->v == m;
                                       return c->v == m && c->u == n->v;
                                     });
      if (constraint != constraints.end()) continue;
      f = g + pathDist(m, _g);

      // ==== fast implementation ====
      // when field is huge, this works well
      // if (existGoalConstraint) {
      //   f = pathDist(m, _g) + timeGoalConstraint;
      // }
      // =============================

      auto itrS = SEARCHED.find(key);
      AN* l;
      bool updateH = false;
      if (itrS == SEARCHED.end()) {  // new node
        l = new AN { m, g, f, n };
        auto handle = OPEN.push(Fib_AN(l));
        SEARCHED.emplace(key, handle);
        getPartialPath(l, tmpPath);
        table_conflict.emplace(key, h3(a, tmpPath, paths));
      } else {
        auto handle = itrS->second;
        l = (*handle).node;
        if (l->f > f) {
          l->g = g;
          l->f = f;
          l->p = n;
          getPartialPath(l, tmpPath);
          table_conflict.at(key) = h3(a, tmpPath, paths);
          OPEN.increase(handle);
          updateH = true;
        }
      }

      tmpPath.clear();
      if (f <= ub) {
        auto itrSF = SEARCHED_F.find(key);
        if (itrSF == SEARCHED_F.end()) {
          auto handle_f = FOCUL.push(Fib_FN(l, table_conflict.at(key)));
          SEARCHED_F.emplace(key, handle_f);
        } else {
          if (updateH) {
            auto handle_f = itrSF->second;
            (*handle_f).h = table_conflict.at(key);
            FOCUL.increase(handle_f);
          }
        }
      }
    }
  }

  // back tracking
  int fmin = 0;
  if (!invalid) {  // check failed or not
    getPartialPath(n, path);
    fmin = ubori;
  } else {
    node->valid = false;
  }
  table_fmin.at(a->getId()) = fmin;

  return path;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x2d8, %rsp            # imm = 0x2D8
movq %rdx, %r15
movq %rsi, %r13
movq %rdi, %r12
leaq 0x188(%rsp), %r14
movq %r14, %rdi
movq %rcx, 0x160(%rsp)
movq %rcx, %rdx
movq %r15, %rcx
callq 0x29326
movq 0x8(%r15), %rbx
movq 0x10(%r15), %rbp
xorl %eax, %eax
movq %rax, 0x10(%r12)
xorps %xmm0, %xmm0
movups %xmm0, (%r12)
movq %rax, 0xd0(%rsp)
movaps %xmm0, 0xc0(%rsp)
movq $0x0, 0xe8(%rsp)
movq %rax, 0x80(%rsp)
movaps %xmm0, 0x70(%rsp)
movq (%r14), %rax
movq 0x8(%r14), %rcx
cmpq %rcx, %rax
je 0x2f0f9
movq $0x0, 0xe0(%rsp)
movq (%rax), %rdx
cmpb $0x1, 0x20(%rdx)
jne 0x2e3b6
cmpq %rbp, 0x10(%rdx)
jne 0x2e3b6
movl 0x8(%rdx), %edx
movq 0xe8(%rsp), %rdi
cmpl %edi, %edx
setg %sil
cmovgl %edx, %edi
movq %rdi, 0xe8(%rsp)
movq 0xe0(%rsp), %rdx
orb %sil, %dl
movq %rdx, 0xe0(%rsp)
addq $0x8, %rax
cmpq %rcx, %rax
jne 0x2e378
movq 0x160(%rsp), %rax
leaq 0x18(%rax), %rsi
leaq 0x250(%rsp), %rdi
movq %r12, 0x60(%rsp)
callq 0x2ab02
leaq 0x20(%rsp), %rcx
movq %rcx, -0x10(%rcx)
xorl %eax, %eax
movq %rax, -0x8(%rcx)
movb %al, (%rcx)
leaq 0x178(%rsp), %rcx
movq %rcx, -0x10(%rcx)
movq %rax, -0x8(%rcx)
movb %al, (%rcx)
leaq 0x240(%rsp), %rcx
movq %rcx, -0x10(%rcx)
movq %rax, -0x8(%rcx)
movb %al, (%rcx)
leaq 0x148(%rsp), %rcx
movq %rax, -0x8(%rcx)
xorps %xmm0, %xmm0
movaps %xmm0, -0x18(%rcx)
movq %rcx, (%rcx)
movq %rcx, 0x8(%rcx)
leaq 0x1d0(%rsp), %rax
movq %rax, -0x30(%rax)
movl $0x1, %ecx
movq %rcx, -0x28(%rax)
movups %xmm0, -0x20(%rax)
movl $0x3f800000, %edx       # imm = 0x3F800000
movl %edx, -0x10(%rax)
movups %xmm0, -0x8(%rax)
leaq 0x2d0(%rsp), %rax
movq %rax, -0x30(%rax)
movq %rcx, -0x28(%rax)
movups %xmm0, -0x20(%rax)
movl %edx, -0x10(%rax)
movups %xmm0, -0x8(%rax)
movl $0x18, %edi
callq 0x6370
movq %rax, %r14
movq %rbx, (%rax)
movl $0x0, 0x8(%rax)
movq %r13, %rdi
movq %rbx, %rsi
movq %rbp, %rdx
callq 0x3efbe
movl %eax, 0xc(%r14)
movq $0x0, 0x10(%r14)
leaq 0x1f0(%rsp), %rsi
movq %r14, (%rsi)
leaq 0x130(%rsp), %rdi
callq 0x1b3c4
movq %rax, 0x228(%rsp)
leaq 0x1f0(%rsp), %rdi
movq %r14, %rsi
callq 0x3f4d4
leaq 0x10(%rsp), %rdi
leaq 0x1f0(%rsp), %rbx
movq %rbx, %rsi
callq 0x6460
movq (%rbx), %rdi
leaq 0x200(%rsp), %rax
cmpq %rax, %rdi
je 0x2e502
movq 0x200(%rsp), %rsi
incq %rsi
callq 0x6380
leaq 0x1a0(%rsp), %rdi
leaq 0x10(%rsp), %rsi
leaq 0x228(%rsp), %rdx
callq 0x2c168
movq %rbp, 0x158(%rsp)
movq %r13, 0xb8(%rsp)
leaq 0x220(%rsp), %rax
movq %rax, -0x30(%rax)
movq $0x1, -0x28(%rax)
xorps %xmm0, %xmm0
movups %xmm0, -0x20(%rax)
movl $0x3f800000, -0x10(%rax) # imm = 0x3F800000
movups %xmm0, -0x8(%rax)
leaq 0x268(%rsp), %rdx
movl $0x0, (%rdx)
leaq 0x1f0(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0x30296
leaq 0x118(%rsp), %rax
xorps %xmm0, %xmm0
movaps %xmm0, -0x18(%rax)
movq $0x0, -0x8(%rax)
movq %rax, (%rax)
movq %rax, 0x8(%rax)
leaq 0x298(%rsp), %rax
movq %rax, -0x30(%rax)
movq $0x1, -0x28(%rax)
movups %xmm0, -0x20(%rax)
movl $0x3f800000, -0x10(%rax) # imm = 0x3F800000
movups %xmm0, -0x8(%rax)
movb $0x1, %al
movl %eax, 0xc(%rsp)
leaq 0x30(%rsp), %r12
leaq 0x2a0(%rsp), %rbx
movq 0xb8(%rsp), %rbp
cmpq $0x0, 0x130(%rsp)
je 0x2effb
cmpq $0x0, 0x100(%rsp)
sete %al
orb 0xc(%rsp), %al
testb $0x1, %al
je 0x2e91c
cmpq $0x0, 0x130(%rsp)
je 0x2effb
movq 0x138(%rsp), %rax
movq 0x10(%rax), %rsi
movq %r12, %rdi
callq 0x3f4d4
movq %rbx, %rdi
movq %r12, %rsi
callq 0x2c91a
movq %rax, %r14
movq 0x30(%rsp), %rdi
leaq 0x40(%rsp), %rax
cmpq %rax, %rdi
je 0x2e642
movq 0x40(%rsp), %rsi
incq %rsi
callq 0x6380
testq %r14, %r14
je 0x2e656
leaq 0x130(%rsp), %rdi
callq 0x1b446
jmp 0x2e5f5
cmpq $0x0, 0x130(%rsp)
je 0x2effb
movq 0x138(%rsp), %rax
movq 0x10(%rax), %r14
movl 0xc(%r14), %eax
movl %eax, 0xfc(%rsp)
movq %r12, %rdi
movq %r14, %rsi
callq 0x3f4d4
leaq 0x168(%rsp), %rdi
movq %r12, %rsi
callq 0x6460
movq 0x30(%rsp), %rdi
leaq 0x40(%rsp), %rax
cmpq %rax, %rdi
leaq 0x90(%rsp), %r13
je 0x2e6bb
movq 0x40(%rsp), %rsi
incq %rsi
callq 0x6380
xorps %xmm0, %xmm0
cvtsi2ssl 0xc(%r14), %xmm0
mulss 0xa8(%rbp), %xmm0
movss %xmm0, 0x6c(%rsp)
leaq 0x100(%rsp), %rax
movq %rax, 0x30(%rsp)
movq 0x118(%rsp), %r14
leaq 0x118(%rsp), %rax
cmpq %rax, %r14
je 0x2e70a
movq %r14, %rsi
movq (%r14), %r14
xorps %xmm0, %xmm0
movups %xmm0, (%rsi)
movq %r12, %rdi
callq 0x306d6
jmp 0x2e6e7
movq %rax, 0x118(%rsp)
movq %rax, 0x120(%rsp)
movq $0x0, 0x110(%rsp)
xorps %xmm0, %xmm0
movaps %xmm0, 0x100(%rsp)
leaq 0x268(%rsp), %rdi
callq 0x2fd1c
movq 0x138(%rsp), %rcx
movq 0x148(%rsp), %rax
movq %rax, 0x90(%rsp)
leaq 0x148(%rsp), %rax
movq %rax, 0xf0(%rsp)
movq %r12, %rdi
movq %r13, %rsi
leaq 0xf0(%rsp), %rdx
leaq 0x130(%rsp), %r8
callq 0x3083e
movq $0x0, 0x90(%rsp)
leaq 0x98(%rsp), %rdi
leaq 0x130(%rsp), %rsi
callq 0x30908
movq 0x30(%rsp), %r14
movq 0x90(%rsp), %r13
movq 0x98(%rsp), %rdi
testq %rdi, %rdi
je 0x2e7cc
movq 0xa8(%rsp), %rsi
subq %rdi, %rsi
callq 0x6380
cmpq %r13, %r14
je 0x2e8f6
movq 0x30(%rsp), %rax
movq 0x10(%rax), %r14
xorps %xmm0, %xmm0
cvtsi2ssl 0xc(%r14), %xmm0
movss 0x6c(%rsp), %xmm1
ucomiss %xmm0, %xmm1
jb 0x2e8f6
leaq 0x90(%rsp), %r13
movq %r13, %rdi
movq %r14, %rsi
callq 0x3f4d4
movq %rbx, %rdi
movq %r13, %rsi
callq 0x2c91a
movq %rax, %r13
movq 0x90(%rsp), %rdi
leaq 0xa0(%rsp), %rax
cmpq %rax, %rdi
je 0x2e83c
movq 0xa0(%rsp), %rsi
incq %rsi
callq 0x6380
testq %r13, %r13
leaq 0x90(%rsp), %r13
jne 0x2e8e9
movq %r13, %rdi
movq %r14, %rsi
callq 0x3f4d4
leaq 0x10(%rsp), %rdi
movq %r13, %rsi
callq 0x6460
movq 0x90(%rsp), %rdi
leaq 0xa0(%rsp), %rax
cmpq %rax, %rdi
je 0x2e88a
movq 0xa0(%rsp), %rsi
incq %rsi
callq 0x6380
leaq 0x1f0(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0x30d78
testq %rax, %rax
je 0x2f232
movl 0x28(%rax), %eax
movq %r14, 0x90(%rsp)
movl %eax, 0x98(%rsp)
leaq 0x100(%rsp), %rdi
movq %r13, %rsi
callq 0x2fa86
movq %rax, 0xf0(%rsp)
leaq 0x268(%rsp), %rdi
leaq 0x10(%rsp), %rsi
leaq 0xf0(%rsp), %rdx
callq 0x30db2
movq %r12, %rdi
callq 0x30cfe
jmp 0x2e781
movq 0x38(%rsp), %rdi
testq %rdi, %rdi
je 0x2e90d
movq 0x48(%rsp), %rsi
subq %rdi, %rsi
callq 0x6380
cmpq $0x0, 0x100(%rsp)
je 0x2f24a
movq 0x108(%rsp), %rax
movq 0x10(%rax), %rsi
movq %r12, %rdi
movq %rsi, (%rsp)
callq 0x3f4d4
leaq 0x10(%rsp), %rdi
movq %r12, %rsi
callq 0x6460
movq 0x30(%rsp), %rdi
leaq 0x40(%rsp), %rax
cmpq %rax, %rdi
je 0x2e95d
movq 0x40(%rsp), %rsi
incq %rsi
callq 0x6380
leaq 0x100(%rsp), %rdi
callq 0x2fb1a
movq %rbx, %rdi
leaq 0x10(%rsp), %rsi
callq 0x2c91a
testq %rax, %rax
jne 0x2e5ce
movq 0x158(%rsp), %rax
movq (%rsp), %rcx
cmpq %rax, (%rcx)
jne 0x2e9b4
testb $0x1, 0xe0(%rsp)
je 0x2f215
movq 0xe8(%rsp), %rax
movq (%rsp), %rcx
cmpl 0x8(%rcx), %eax
jl 0x2f215
movq 0x18(%rsp), %rdx
cmpq 0x170(%rsp), %rdx
jne 0x2e9e1
testq %rdx, %rdx
je 0x2e9eb
movq 0x168(%rsp), %rsi
movq 0x10(%rsp), %rdi
callq 0x63a0
testl %eax, %eax
sete %al
jmp 0x2e9ed
movl $0x0, 0xc(%rsp)
jmp 0x2e9f1
movb $0x1, %al
movl %eax, 0xc(%rsp)
movq %rbx, %rdi
leaq 0x10(%rsp), %rsi
callq 0x31496
movq 0x38(%rbp), %rsi
movq (%rsp), %rax
movq (%rax), %rdx
movq %r12, %rdi
callq 0x1a38a
movq 0x70(%rsp), %rdi
movq 0x80(%rsp), %rsi
movaps 0x30(%rsp), %xmm0
movaps %xmm0, 0x70(%rsp)
movq 0x40(%rsp), %rax
movq %rax, 0x80(%rsp)
xorps %xmm0, %xmm0
movaps %xmm0, 0x30(%rsp)
movq $0x0, 0x40(%rsp)
testq %rdi, %rdi
je 0x2ea6a
subq %rdi, %rsi
callq 0x6380
movq 0x30(%rsp), %rdi
testq %rdi, %rdi
je 0x2ea6a
movq 0x40(%rsp), %rsi
subq %rdi, %rsi
callq 0x6380
movq 0x78(%rsp), %rsi
cmpq 0x80(%rsp), %rsi
je 0x2ea93
movq (%rsp), %rax
movq (%rax), %rax
movq %rax, (%rsi)
movq 0x78(%rsp), %rax
addq $0x8, %rax
movq %rax, 0x78(%rsp)
jmp 0x2eaa6
leaq 0x70(%rsp), %rdi
movq (%rsp), %rdx
callq 0x1c5cc
movq 0x78(%rsp), %rax
movq 0x70(%rsp), %rcx
movq %rax, 0x1e0(%rsp)
cmpq %rax, %rcx
je 0x2e5c6
movq %rcx, 0x1e8(%rsp)
movq (%rcx), %r14
movq (%rsp), %rax
movl 0x8(%rax), %ebp
incl %ebp
movq %r12, %rdi
movl %ebp, %esi
movq %r14, %rdx
callq 0x3f2d8
leaq 0x10(%rsp), %rdi
movq %r12, %rsi
callq 0x6460
movq 0x30(%rsp), %rdi
leaq 0x40(%rsp), %rax
cmpq %rax, %rdi
je 0x2eb06
movq 0x40(%rsp), %rsi
incq %rsi
callq 0x6380
movq %rbx, %rdi
leaq 0x10(%rsp), %rsi
callq 0x2c91a
testq %rax, %rax
je 0x2eb33
movq 0x1e8(%rsp), %rcx
addq $0x8, %rcx
cmpq 0x1e0(%rsp), %rcx
jne 0x2eabc
jmp 0x2e5c6
movq 0x188(%rsp), %rdx
movq 0x190(%rsp), %rax
movq %rax, %rdi
subq %rdx, %rdi
movq %rdi, %rsi
sarq $0x5, %rsi
testq %rsi, %rsi
jle 0x2ec86
andq $-0x20, %rdi
movq %rdi, %rcx
addq %rdx, %rcx
incq %rsi
addq $0x10, %rdx
movq -0x10(%rdx), %rdi
cmpq %r15, (%rdi)
jne 0x2ebac
cmpl %ebp, 0x8(%rdi)
jne 0x2ebac
movb 0x20(%rdi), %r8b
movq 0x10(%rdi), %r9
testb %r8b, %r8b
jne 0x2eb9c
cmpq %r14, %r9
jne 0x2eb9c
movq 0x18(%rdi), %rdi
movq (%rsp), %r8
cmpq (%r8), %rdi
jne 0x2ebac
jmp 0x2ecd5
cmpq %r14, %r9
sete %dil
testb %dil, %r8b
jne 0x2ecd5
movq -0x8(%rdx), %rdi
cmpq %r15, (%rdi)
jne 0x2ebee
cmpl %ebp, 0x8(%rdi)
jne 0x2ebee
movb 0x20(%rdi), %r8b
movq 0x10(%rdi), %r9
testb %r8b, %r8b
jne 0x2ebde
cmpq %r14, %r9
jne 0x2ebde
movq 0x18(%rdi), %rdi
movq (%rsp), %r8
cmpq (%r8), %rdi
jne 0x2ebee
jmp 0x2ecdb
cmpq %r14, %r9
sete %dil
testb %dil, %r8b
jne 0x2ecdb
movq (%rdx), %rdi
cmpq %r15, (%rdi)
jne 0x2ec2f
cmpl %ebp, 0x8(%rdi)
jne 0x2ec2f
movb 0x20(%rdi), %r8b
movq 0x10(%rdi), %r9
testb %r8b, %r8b
jne 0x2ec1f
cmpq %r14, %r9
jne 0x2ec1f
movq 0x18(%rdi), %rdi
movq (%rsp), %r8
cmpq (%r8), %rdi
jne 0x2ec2f
jmp 0x2ece5
cmpq %r14, %r9
sete %dil
testb %dil, %r8b
jne 0x2ece5
movq 0x8(%rdx), %rdi
cmpq %r15, (%rdi)
jne 0x2ec6d
cmpl %ebp, 0x8(%rdi)
jne 0x2ec6d
movb 0x20(%rdi), %r8b
movq 0x10(%rdi), %r9
testb %r8b, %r8b
jne 0x2ec61
cmpq %r14, %r9
jne 0x2ec61
movq 0x18(%rdi), %rdi
movq (%rsp), %r8
cmpq (%r8), %rdi
jne 0x2ec6d
jmp 0x2ece1
cmpq %r14, %r9
sete %dil
testb %dil, %r8b
jne 0x2ece1
decq %rsi
addq $0x20, %rdx
cmpq $0x1, %rsi
jg 0x2eb6a
movq %rax, %rdi
subq %rcx, %rdi
jmp 0x2ec89
movq %rdx, %rcx
sarq $0x3, %rdi
cmpq $0x1, %rdi
je 0x2ed42
cmpq $0x2, %rdi
je 0x2ed05
cmpq $0x3, %rdi
jne 0x2ed83
movq (%rcx), %rdx
cmpq %r15, (%rdx)
jne 0x2ed01
cmpl %ebp, 0x8(%rdx)
jne 0x2ed01
movb 0x20(%rdx), %sil
movq 0x10(%rdx), %rdi
testb %sil, %sil
jne 0x2ecf6
cmpq %r14, %rdi
jne 0x2ecf6
movq 0x18(%rdx), %rdx
movq (%rsp), %rsi
cmpq (%rsi), %rdx
jne 0x2ed01
jmp 0x2ece8
addq $-0x10, %rdx
jmp 0x2ece5
addq $-0x8, %rdx
jmp 0x2ece5
addq $0x8, %rdx
movq %rdx, %rcx
cmpq %rax, %rcx
jne 0x2eb18
jmp 0x2ed83
cmpq %r14, %rdi
sete %dl
testb %dl, %sil
jne 0x2ece8
addq $0x8, %rcx
movq (%rcx), %rdx
cmpq %r15, (%rdx)
jne 0x2ed3e
cmpl %ebp, 0x8(%rdx)
jne 0x2ed3e
movb 0x20(%rdx), %sil
movq 0x10(%rdx), %rdi
testb %sil, %sil
jne 0x2ed33
cmpq %r14, %rdi
jne 0x2ed33
movq 0x18(%rdx), %rdx
movq (%rsp), %rsi
cmpq (%rsi), %rdx
jne 0x2ed3e
jmp 0x2ece8
cmpq %r14, %rdi
sete %dl
testb %dl, %sil
jne 0x2ece8
addq $0x8, %rcx
movq (%rcx), %rdx
cmpq %r15, (%rdx)
jne 0x2ed83
cmpl %ebp, 0x8(%rdx)
jne 0x2ed83
movb 0x20(%rdx), %sil
movq 0x10(%rdx), %rdi
testb %sil, %sil
jne 0x2ed74
cmpq %r14, %rdi
jne 0x2ed74
movq 0x18(%rdx), %rdx
movq (%rsp), %rsi
cmpq (%rsi), %rdx
je 0x2ece8
jmp 0x2ed83
cmpq %r14, %rdi
sete %dl
testb %dl, %sil
jne 0x2ece8
movq 0xb8(%rsp), %rdi
movq %r14, %rsi
movq 0x158(%rsp), %rdx
callq 0x3efbe
movl %eax, %r13d
leaq 0x1a0(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0x2c954
movl %r13d, %ecx
addl %ebp, %ecx
testq %rax, %rax
je 0x2ee4d
movq 0x28(%rax), %r14
movq 0x10(%r14), %rsi
cmpl %ecx, 0xc(%rsi)
movq %rsi, 0xd8(%rsp)
jle 0x2ef07
movl %ebp, 0x8(%rsi)
movl %ecx, %r13d
movl %ecx, 0xc(%rsi)
movq (%rsp), %rax
movq %rax, 0x10(%rsi)
leaq 0xc0(%rsp), %rdx
callq 0x2f4ec
movq 0xb8(%rsp), %rdi
movq %r15, %rsi
leaq 0xc0(%rsp), %rdx
leaq 0x250(%rsp), %rcx
callq 0x2e12a
movl %eax, %ebp
leaq 0x1f0(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0x30d78
testq %rax, %rax
je 0x2f275
movl %ebp, 0x28(%rax)
movb $0x1, %bpl
leaq 0x130(%rsp), %rdi
movq %r14, %rsi
callq 0x1b4b2
jmp 0x2ef0c
movl %ecx, %r13d
movl $0x18, %edi
callq 0x6370
movq %r14, (%rax)
movl %ebp, 0x8(%rax)
movl %r13d, 0xc(%rax)
movq %rax, %rcx
movq (%rsp), %rax
movq %rax, 0x10(%rcx)
movq %rcx, 0xd8(%rsp)
movq %rcx, 0x90(%rsp)
leaq 0x130(%rsp), %rdi
leaq 0x90(%rsp), %rsi
callq 0x1b3c4
movq %rax, 0x30(%rsp)
leaq 0x1a0(%rsp), %rdi
leaq 0x10(%rsp), %rsi
movq %r12, %rdx
callq 0x2c168
movq 0xb8(%rsp), %r14
leaq 0xc0(%rsp), %rbp
movq 0xd8(%rsp), %rsi
movq %rbp, %rdx
callq 0x2f4ec
movq %r14, %rdi
movq %r15, %rsi
movq %rbp, %rdx
leaq 0x250(%rsp), %rcx
callq 0x2e12a
movl %eax, 0x90(%rsp)
leaq 0x1f0(%rsp), %rdi
leaq 0x10(%rsp), %rsi
leaq 0x90(%rsp), %rdx
callq 0x30296
jmp 0x2ef0a
movl %ecx, %r13d
xorl %ebp, %ebp
movq 0xc0(%rsp), %rax
cmpq %rax, 0xc8(%rsp)
je 0x2ef26
movq %rax, 0xc8(%rsp)
cvtsi2ss %r13d, %xmm0
movss 0x6c(%rsp), %xmm1
ucomiss %xmm0, %xmm1
jb 0x2eb18
leaq 0x268(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0x315be
testq %rax, %rax
je 0x2ef95
testb %bpl, %bpl
je 0x2eb18
movq 0x28(%rax), %r14
leaq 0x1f0(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0x30d78
testq %rax, %rax
je 0x2f28d
movl 0x28(%rax), %eax
movl %eax, 0x18(%r14)
leaq 0x100(%rsp), %rdi
movq %r14, %rsi
callq 0x2fb86
jmp 0x2eb18
leaq 0x1f0(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0x30d78
testq %rax, %rax
je 0x2f281
movl 0x28(%rax), %eax
movq 0xd8(%rsp), %rcx
movq %rcx, 0x30(%rsp)
movl %eax, 0x38(%rsp)
leaq 0x100(%rsp), %rdi
movq %r12, %rsi
callq 0x2fa86
movq %rax, 0x90(%rsp)
leaq 0x268(%rsp), %rdi
leaq 0x10(%rsp), %rsi
leaq 0x90(%rsp), %rdx
callq 0x30db2
jmp 0x2eb18
movq 0x160(%rsp), %rax
movb $0x0, 0x40(%rax)
xorl %ebx, %ebx
movq 0x60(%rsp), %r12
addq $0xb0, %rbp
movl (%r15), %eax
leaq 0x30(%rsp), %rsi
movl %eax, (%rsi)
movq %rbp, %rdi
callq 0x3023a
testq %rax, %rax
je 0x2f23e
movl %ebx, 0xc(%rax)
leaq 0x268(%rsp), %rdi
callq 0x2fcf6
leaq 0x100(%rsp), %rdi
callq 0x2fc32
leaq 0x1f0(%rsp), %rdi
callq 0x2fd94
leaq 0x2a0(%rsp), %rdi
callq 0x2ae7e
leaq 0x1a0(%rsp), %rdi
callq 0x2af1c
leaq 0x130(%rsp), %rdi
callq 0x1b54e
movq 0x230(%rsp), %rdi
leaq 0x240(%rsp), %rax
cmpq %rax, %rdi
je 0x2f0a6
movq 0x240(%rsp), %rsi
incq %rsi
callq 0x6380
movq 0x168(%rsp), %rdi
leaq 0x178(%rsp), %rax
cmpq %rax, %rdi
je 0x2f0cb
movq 0x178(%rsp), %rsi
incq %rsi
callq 0x6380
movq 0x10(%rsp), %rdi
leaq 0x20(%rsp), %rax
cmpq %rax, %rdi
je 0x2f0e7
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x6380
leaq 0x250(%rsp), %rdi
callq 0xb508
jmp 0x2f1ac
movq 0x38(%r13), %rsi
movq (%rsi), %rax
leaq 0x1a0(%rsp), %rdi
movq %rbx, %rdx
movq %rbp, %rcx
callq *0x18(%rax)
movq (%r12), %rdi
movq 0x10(%r12), %rsi
movaps 0x1a0(%rsp), %xmm0
movups %xmm0, (%r12)
movq 0x1b0(%rsp), %rax
movq %rax, 0x10(%r12)
xorps %xmm0, %xmm0
movaps %xmm0, 0x1a0(%rsp)
movq $0x0, 0x1b0(%rsp)
testq %rdi, %rdi
je 0x2f175
subq %rdi, %rsi
callq 0x6380
movq 0x1a0(%rsp), %rdi
testq %rdi, %rdi
je 0x2f175
movq 0x1b0(%rsp), %rsi
subq %rdi, %rsi
callq 0x6380
movq 0x8(%r12), %rbx
subq (%r12), %rbx
addq $0xb0, %r13
movl (%r15), %eax
leaq 0x1a0(%rsp), %rsi
movl %eax, (%rsi)
movq %r13, %rdi
callq 0x3023a
testq %rax, %rax
je 0x2f269
shrq $0x3, %rbx
decl %ebx
movl %ebx, 0xc(%rax)
movq 0x70(%rsp), %rdi
testq %rdi, %rdi
je 0x2f1c6
movq 0x80(%rsp), %rsi
subq %rdi, %rsi
callq 0x6380
movq 0xc0(%rsp), %rdi
testq %rdi, %rdi
je 0x2f1e3
movq 0xd0(%rsp), %rsi
subq %rdi, %rsi
callq 0x6380
movq 0x188(%rsp), %rdi
testq %rdi, %rdi
je 0x2f200
movq 0x198(%rsp), %rsi
subq %rdi, %rsi
callq 0x6380
movq %r12, %rax
addq $0x2d8, %rsp            # imm = 0x2D8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq (%rsp), %rsi
movq 0x60(%rsp), %r12
movq %r12, %rdx
callq 0x2f4ec
movl 0xfc(%rsp), %ebx
jmp 0x2f00e
leaq 0x1b2e2(%rip), %rdi     # 0x4a51b
callq 0x6520
leaq 0x1b2d6(%rip), %rdi     # 0x4a51b
callq 0x6520
leaq 0x1a872(%rip), %rdi     # 0x49ac3
leaq 0x1a874(%rip), %rsi     # 0x49acc
leaq 0x1b2ca(%rip), %rcx     # 0x4a529
movl $0x14f, %edx            # imm = 0x14F
callq 0x6260
leaq 0x1b2ab(%rip), %rdi     # 0x4a51b
callq 0x6520
leaq 0x1b29f(%rip), %rdi     # 0x4a51b
callq 0x6520
leaq 0x1b293(%rip), %rdi     # 0x4a51b
callq 0x6520
leaq 0x1b287(%rip), %rdi     # 0x4a51b
callq 0x6520
jmp 0x2f391
jmp 0x2f391
jmp 0x2f391
jmp 0x2f391
jmp 0x2f391
jmp 0x2f391
jmp 0x2f391
jmp 0x2f391
jmp 0x2f391
jmp 0x2f391
jmp 0x2f391
jmp 0x2f391
jmp 0x2f391
jmp 0x2f391
jmp 0x2f391
jmp 0x2f391
jmp 0x2f391
jmp 0x2f327
jmp 0x2f391
jmp 0x2f391
movq %rax, %rbx
jmp 0x2f3cf
jmp 0x2f31d
jmp 0x2f31d
jmp 0x2f31d
movq %rax, %rbx
movl $0x18, %esi
movq %r14, %rdi
callq 0x6380
jmp 0x2f3dc
movq %rax, %rbx
jmp 0x2f3dc
jmp 0x2f32c
movq %r12, 0x60(%rsp)
movq %rax, %rbx
jmp 0x2f476
jmp 0x2f391
jmp 0x2f391
jmp 0x2f391
jmp 0x2f391
jmp 0x2f391
jmp 0x2f391
jmp 0x2f376
jmp 0x2f376
jmp 0x2f376
jmp 0x2f376
movq %rax, %rbx
movq 0x90(%rsp), %rdi
leaq 0xa0(%rsp), %rax
cmpq %rax, %rdi
je 0x2f379
movq 0xa0(%rsp), %rsi
incq %rsi
callq 0x6380
jmp 0x2f379
jmp 0x2f376
jmp 0x2f376
movq %rax, %rbx
movq 0x38(%rsp), %rdi
testq %rdi, %rdi
je 0x2f3b5
movq 0x48(%rsp), %rsi
subq %rdi, %rsi
jmp 0x2f3b0
jmp 0x2f391
jmp 0x2f391
movq %rax, %rbx
jmp 0x2f3b5
movq %rax, %rbx
movq 0x30(%rsp), %rdi
leaq 0x40(%rsp), %rax
cmpq %rax, %rdi
je 0x2f3b5
movq 0x40(%rsp), %rsi
incq %rsi
callq 0x6380
leaq 0x268(%rsp), %rdi
callq 0x2fcf6
leaq 0x100(%rsp), %rdi
callq 0x2fc32
leaq 0x1f0(%rsp), %rdi
callq 0x2fd94
leaq 0x2a0(%rsp), %rdi
callq 0x2ae7e
leaq 0x1a0(%rsp), %rdi
callq 0x2af1c
leaq 0x130(%rsp), %rdi
callq 0x1b54e
movq 0x230(%rsp), %rdi
leaq 0x240(%rsp), %rax
cmpq %rax, %rdi
je 0x2f428
movq 0x240(%rsp), %rsi
incq %rsi
callq 0x6380
movq 0x168(%rsp), %rdi
leaq 0x178(%rsp), %rax
cmpq %rax, %rdi
je 0x2f44d
movq 0x178(%rsp), %rsi
incq %rsi
callq 0x6380
movq 0x10(%rsp), %rdi
leaq 0x20(%rsp), %rax
cmpq %rax, %rdi
je 0x2f469
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x6380
leaq 0x250(%rsp), %rdi
callq 0xb508
movq 0x70(%rsp), %rdi
testq %rdi, %rdi
je 0x2f490
movq 0x80(%rsp), %rsi
subq %rdi, %rsi
callq 0x6380
movq 0xc0(%rsp), %rdi
testq %rdi, %rdi
je 0x2f4ad
movq 0xd0(%rsp), %rsi
subq %rdi, %rsi
callq 0x6380
movq 0x60(%rsp), %rax
movq (%rax), %rdi
testq %rdi, %rdi
je 0x2f4c6
movq 0x10(%rax), %rsi
subq %rdi, %rsi
callq 0x6380
movq 0x188(%rsp), %rdi
testq %rdi, %rdi
je 0x2f4e3
movq 0x198(%rsp), %rsi
subq %rdi, %rsi
callq 0x6380
movq %rbx, %rdi
callq 0x6620
nop