// File: bonetblai[P]mdp-engine/ctp3/../engine/dispatcher.h
// Function: Dispatcher::dispatcher_t<state_t>::print_stats(std::ostream&, Dispatcher::dispatcher_t<state_t>::solve_result_t const&) const
void dispatcher_t<T>::print_stats(std::ostream &os, const solve_result_t &result) const {
    const Algorithm::algorithm_t<T> &algorithm = *result.algorithm_;
    const Problem::problem_t<T> &problem = algorithm.problem();

    // general stats
    os << Utils::green() << "stats:" << Utils::normal()
       << " type=solve"
       << " name=" << result.name_
       << " seed=" << result.seed_
       << " problem.expansions=" << result.problem_expansions_;

    // stats from hash
    const Problem::hash_t<T> &hash = *result.hash_;
    os << Utils::green() << " hash.value=" << hash.value(result.state_) << Utils::normal()
       << " hash.updates=" << hash.updates();
    if( (result.name_.substr(0, 12) != "simple_astar") && (result.name_.substr(0, 9) != "simple_a*") )
        os << " hash.policy-size=" << problem.policy_size(hash, result.state_);

    // stats fron heuristic
    const Heuristic::heuristic_t<T> *heuristic = algorithm.heuristic();
    os << " heuristic.eval-time=" << (heuristic == 0 ? std::string("na") : std::to_string(heuristic->eval_time()))
       << " heuristic.setup-time=" << (heuristic == 0 ? std::string("na") : std::to_string(heuristic->setup_time()))
       << " heuristic.evaluations=" << (heuristic == 0 ? std::string("na") : std::to_string(heuristic->evaluations()))
       << " heuristic.evaluations=" << (heuristic == 0 ? std::string("na") : std::to_string(heuristic->evaluations()))
       << " heuristic.size=" << (heuristic == 0 ? std::string("na") : std::to_string(heuristic->size()));

    // time stats
    float time_heuristic = heuristic == 0 ? 0 : heuristic->eval_time();
    os << " time.raw=" << result.time_raw_
       << " time.heuristic=" << (heuristic == 0 ? std::string("na") : std::to_string(time_heuristic))
       << " time.algorithm=" << result.time_raw_ - time_heuristic
       << std::endl;
}

// Assembly:
subq $0x368, %rsp            # imm = 0x368
movq %rdi, 0x360(%rsp)
movq %rsi, 0x358(%rsp)
movq %rdx, 0x350(%rsp)
movq 0x350(%rsp), %rax
movq 0x90(%rax), %rax
movq %rax, 0x348(%rsp)
movq 0x348(%rsp), %rdi
callq 0x58f30
movq %rax, 0x340(%rsp)
movq 0x358(%rsp), %rax
movq %rax, 0x150(%rsp)
leaq 0x320(%rsp), %rdi
movq %rdi, 0x158(%rsp)
callq 0x599e0
movq 0x150(%rsp), %rdi
movq 0x158(%rsp), %rsi
callq 0x62f0
movq %rax, 0x160(%rsp)
jmp 0xb7cf
movq 0x160(%rsp), %rdi
leaq 0x5497a(%rip), %rsi     # 0x60158
callq 0x6330
movq %rax, 0x148(%rsp)
jmp 0xb7ed
leaq 0x2f0(%rsp), %rdi
callq 0x59a80
jmp 0xb7fc
movq 0x148(%rsp), %rdi
leaq 0x2f0(%rsp), %rsi
callq 0x62f0
movq %rax, 0x140(%rsp)
jmp 0xb81b
movq 0x140(%rsp), %rdi
leaq 0x54935(%rip), %rsi     # 0x6015f
callq 0x6330
movq %rax, 0x138(%rsp)
jmp 0xb839
movq 0x138(%rsp), %rdi
leaq 0x51d55(%rip), %rsi     # 0x5d59d
callq 0x6330
movq %rax, 0x130(%rsp)
jmp 0xb857
movq 0x130(%rsp), %rdi
movq 0x350(%rsp), %rsi
addq $0x70, %rsi
callq 0x62f0
movq %rax, 0x128(%rsp)
jmp 0xb87a
movq 0x128(%rsp), %rdi
leaq 0x51920(%rip), %rsi     # 0x5d1a9
callq 0x6330
movq %rax, 0x120(%rsp)
jmp 0xb898
movq 0x120(%rsp), %rdi
movq 0x350(%rsp), %rax
movl 0x98(%rax), %esi
callq 0x6440
movq %rax, 0x118(%rsp)
jmp 0xb8bd
movq 0x118(%rsp), %rdi
leaq 0x5489f(%rip), %rsi     # 0x6016b
callq 0x6330
movq %rax, 0x110(%rsp)
jmp 0xb8db
movq 0x110(%rsp), %rdi
movq 0x350(%rsp), %rax
movl 0x9c(%rax), %esi
callq 0x6440
jmp 0xb8f8
leaq 0x2f0(%rsp), %rdi
callq 0x61f0
leaq 0x320(%rsp), %rdi
callq 0x61f0
movq 0x350(%rsp), %rax
movq 0xa0(%rax), %rax
movq %rax, 0x2e8(%rsp)
movq 0x358(%rsp), %rax
movq %rax, 0xf8(%rsp)
leaq 0x2c8(%rsp), %rdi
movq %rdi, 0x100(%rsp)
callq 0x599e0
movq 0xf8(%rsp), %rdi
movq 0x100(%rsp), %rsi
callq 0x62f0
movq %rax, 0x108(%rsp)
jmp 0xb96d
movq 0x108(%rsp), %rdi
leaq 0x54804(%rip), %rsi     # 0x60180
callq 0x6330
movq %rax, 0xf0(%rsp)
jmp 0xb98b
movq 0x2e8(%rsp), %rdi
movq 0x350(%rsp), %rsi
callq 0x288f0
movss %xmm0, 0xec(%rsp)
jmp 0xb9ab
movss 0xec(%rsp), %xmm0
movq 0xf0(%rsp), %rdi
callq 0x6270
movq %rax, 0xe0(%rsp)
jmp 0xb9cb
leaq 0x2a8(%rsp), %rdi
callq 0x59a80
jmp 0xb9da
movq 0xe0(%rsp), %rdi
leaq 0x2a8(%rsp), %rsi
callq 0x62f0
movq %rax, 0xd8(%rsp)
jmp 0xb9f9
movq 0xd8(%rsp), %rdi
leaq 0x54785(%rip), %rsi     # 0x6018d
callq 0x6330
movq %rax, 0xd0(%rsp)
jmp 0xba17
movq 0x2e8(%rsp), %rdi
callq 0x59b20
movl %eax, 0xcc(%rsp)
jmp 0xba2d
movl 0xcc(%rsp), %esi
movq 0xd0(%rsp), %rdi
callq 0x6440
jmp 0xba43
leaq 0x2a8(%rsp), %rdi
callq 0x61f0
leaq 0x2c8(%rsp), %rdi
callq 0x61f0
movq 0x350(%rsp), %rsi
addq $0x70, %rsi
leaq 0x288(%rsp), %rdi
xorl %eax, %eax
movl %eax, %edx
movl $0xc, %ecx
callq 0x6350
leaq 0x288(%rsp), %rdi
leaq 0x5470e(%rip), %rsi     # 0x6019c
callq 0x1e8b0
movb %al, %cl
movb $0x0, 0x267(%rsp)
xorl %eax, %eax
testb $0x1, %cl
movb %al, 0xcb(%rsp)
jne 0xbaad
jmp 0xbaf4
movq 0x350(%rsp), %rsi
addq $0x70, %rsi
xorl %eax, %eax
movl %eax, %edx
leaq 0x268(%rsp), %rdi
movl $0x9, %ecx
callq 0x6350
jmp 0xbad1
movb $0x1, 0x267(%rsp)
leaq 0x268(%rsp), %rdi
leaq 0x546c1(%rip), %rsi     # 0x601a9
callq 0x1e8b0
movb %al, 0xcb(%rsp)
movb 0xcb(%rsp), %al
movb %al, 0xca(%rsp)
testb $0x1, 0x267(%rsp)
jne 0xbb0e
jmp 0xbb1b
leaq 0x268(%rsp), %rdi
callq 0x61f0
leaq 0x288(%rsp), %rdi
callq 0x61f0
movb 0xca(%rsp), %al
testb $0x1, %al
jne 0xbb38
jmp 0xbc3e
movq 0x358(%rsp), %rdi
leaq 0x5466c(%rip), %rsi     # 0x601b3
callq 0x6330
movq %rax, 0xc0(%rsp)
movq 0x340(%rsp), %rdi
movq 0x2e8(%rsp), %rsi
movq 0x350(%rsp), %rdx
callq 0x59b30
movq 0xc0(%rsp), %rdi
movq %rax, %rsi
callq 0x60c0
jmp 0xbc3e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x318(%rsp)
movl %eax, 0x314(%rsp)
jmp 0xbbbd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x318(%rsp)
movl %eax, 0x314(%rsp)
leaq 0x2f0(%rsp), %rdi
callq 0x61f0
leaq 0x320(%rsp), %rdi
callq 0x61f0
jmp 0xc3f2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x318(%rsp)
movl %eax, 0x314(%rsp)
jmp 0xbc06
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x318(%rsp)
movl %eax, 0x314(%rsp)
leaq 0x2a8(%rsp), %rdi
callq 0x61f0
leaq 0x2c8(%rsp), %rdi
callq 0x61f0
jmp 0xc3f2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x318(%rsp)
movl %eax, 0x314(%rsp)
leaq 0x288(%rsp), %rdi
callq 0x61f0
jmp 0xc3f2
movq 0x348(%rsp), %rdi
callq 0x59be0
movq %rax, 0x258(%rsp)
movq 0x358(%rsp), %rdi
leaq 0x54564(%rip), %rsi     # 0x601c6
callq 0x6330
movq %rax, 0xb8(%rsp)
movq 0x258(%rsp), %rax
movb $0x0, 0x236(%rsp)
cmpq $0x0, %rax
jne 0xbcc2
leaq 0x237(%rsp), %rdi
movq %rdi, 0xb0(%rsp)
callq 0x6530
movq 0xb0(%rsp), %rdx
movb $0x1, 0x236(%rsp)
leaq 0x5452b(%rip), %rsi     # 0x601dc
leaq 0x238(%rsp), %rdi
callq 0x6460
jmp 0xbcc0
jmp 0xbce0
movq 0x258(%rsp), %rdi
callq 0x35c40
leaq 0x238(%rsp), %rdi
callq 0x202e0
jmp 0xbcde
jmp 0xbce0
movq 0xb8(%rsp), %rdi
leaq 0x238(%rsp), %rsi
callq 0x62f0
movq %rax, 0xa8(%rsp)
jmp 0xbcff
movq 0xa8(%rsp), %rdi
leaq 0x544d1(%rip), %rsi     # 0x601df
callq 0x6330
movq %rax, 0xa0(%rsp)
jmp 0xbd1d
movq 0x258(%rsp), %rax
movb $0x0, 0x20e(%rsp)
cmpq $0x0, %rax
jne 0xbd70
leaq 0x20f(%rsp), %rdi
movq %rdi, 0x98(%rsp)
callq 0x6530
movq 0x98(%rsp), %rdx
movb $0x1, 0x20e(%rsp)
leaq 0x5447d(%rip), %rsi     # 0x601dc
leaq 0x210(%rsp), %rdi
callq 0x6460
jmp 0xbd6e
jmp 0xbd8e
movq 0x258(%rsp), %rdi
callq 0x394d0
leaq 0x210(%rsp), %rdi
callq 0x202e0
jmp 0xbd8c
jmp 0xbd8e
movq 0xa0(%rsp), %rdi
leaq 0x210(%rsp), %rsi
callq 0x62f0
movq %rax, 0x90(%rsp)
jmp 0xbdad
movq 0x90(%rsp), %rdi
leaq 0x5443a(%rip), %rsi     # 0x601f6
callq 0x6330
movq %rax, 0x88(%rsp)
jmp 0xbdcb
movq 0x258(%rsp), %rax
movb $0x0, 0x1e6(%rsp)
cmpq $0x0, %rax
jne 0xbe1e
leaq 0x1e7(%rsp), %rdi
movq %rdi, 0x80(%rsp)
callq 0x6530
movq 0x80(%rsp), %rdx
movb $0x1, 0x1e6(%rsp)
leaq 0x543cf(%rip), %rsi     # 0x601dc
leaq 0x1e8(%rsp), %rdi
callq 0x6460
jmp 0xbe1c
jmp 0xbe46
movq 0x258(%rsp), %rdi
callq 0x59bf0
movl %eax, 0x7c(%rsp)
jmp 0xbe31
movl 0x7c(%rsp), %esi
leaq 0x1e8(%rsp), %rdi
callq 0x20330
jmp 0xbe44
jmp 0xbe46
movq 0x88(%rsp), %rdi
leaq 0x1e8(%rsp), %rsi
callq 0x62f0
movq %rax, 0x70(%rsp)
jmp 0xbe62
movq 0x70(%rsp), %rdi
leaq 0x54388(%rip), %rsi     # 0x601f6
callq 0x6330
movq %rax, 0x68(%rsp)
jmp 0xbe7a
movq 0x258(%rsp), %rax
movb $0x0, 0x1be(%rsp)
cmpq $0x0, %rax
jne 0xbec7
leaq 0x1bf(%rsp), %rdi
movq %rdi, 0x60(%rsp)
callq 0x6530
movq 0x60(%rsp), %rdx
movb $0x1, 0x1be(%rsp)
leaq 0x54326(%rip), %rsi     # 0x601dc
leaq 0x1c0(%rsp), %rdi
callq 0x6460
jmp 0xbec5
jmp 0xbeef
movq 0x258(%rsp), %rdi
callq 0x59bf0
movl %eax, 0x5c(%rsp)
jmp 0xbeda
movl 0x5c(%rsp), %esi
leaq 0x1c0(%rsp), %rdi
callq 0x20330
jmp 0xbeed
jmp 0xbeef
movq 0x68(%rsp), %rdi
leaq 0x1c0(%rsp), %rsi
callq 0x62f0
movq %rax, 0x50(%rsp)
jmp 0xbf08
movq 0x50(%rsp), %rdi
leaq 0x542fa(%rip), %rsi     # 0x6020e
callq 0x6330
movq %rax, 0x48(%rsp)
jmp 0xbf20
movq 0x258(%rsp), %rax
movb $0x0, 0x196(%rsp)
cmpq $0x0, %rax
jne 0xbf6d
leaq 0x197(%rsp), %rdi
movq %rdi, 0x40(%rsp)
callq 0x6530
movq 0x40(%rsp), %rdx
movb $0x1, 0x196(%rsp)
leaq 0x54280(%rip), %rsi     # 0x601dc
leaq 0x198(%rsp), %rdi
callq 0x6460
jmp 0xbf6b
jmp 0xbf9b
movq 0x258(%rsp), %rdi
movq (%rdi), %rax
movq 0x28(%rax), %rax
callq *%rax
movq %rax, 0x38(%rsp)
jmp 0xbf85
movq 0x38(%rsp), %rsi
leaq 0x198(%rsp), %rdi
callq 0x34e80
jmp 0xbf99
jmp 0xbf9b
movq 0x48(%rsp), %rdi
leaq 0x198(%rsp), %rsi
callq 0x62f0
jmp 0xbfaf
leaq 0x198(%rsp), %rdi
callq 0x61f0
testb $0x1, 0x196(%rsp)
jne 0xbfc8
jmp 0xbfd5
leaq 0x197(%rsp), %rdi
callq 0x6390
leaq 0x1c0(%rsp), %rdi
callq 0x61f0
testb $0x1, 0x1be(%rsp)
jne 0xbfee
jmp 0xbffb
leaq 0x1bf(%rsp), %rdi
callq 0x6390
leaq 0x1e8(%rsp), %rdi
callq 0x61f0
testb $0x1, 0x1e6(%rsp)
jne 0xc014
jmp 0xc021
leaq 0x1e7(%rsp), %rdi
callq 0x6390
leaq 0x210(%rsp), %rdi
callq 0x61f0
testb $0x1, 0x20e(%rsp)
jne 0xc03a
jmp 0xc047
leaq 0x20f(%rsp), %rdi
callq 0x6390
leaq 0x238(%rsp), %rdi
callq 0x61f0
testb $0x1, 0x236(%rsp)
jne 0xc060
jmp 0xc06d
leaq 0x237(%rsp), %rdi
callq 0x6390
cmpq $0x0, 0x258(%rsp)
jne 0xc083
xorps %xmm0, %xmm0
movss %xmm0, 0x34(%rsp)
jmp 0xc096
movq 0x258(%rsp), %rdi
callq 0x35c40
movss %xmm0, 0x34(%rsp)
movss 0x34(%rsp), %xmm0
movss %xmm0, 0x190(%rsp)
movq 0x358(%rsp), %rdi
leaq 0x5416b(%rip), %rsi     # 0x6021f
callq 0x6330
movq %rax, %rdi
movq 0x350(%rsp), %rax
movss 0xb0(%rax), %xmm0
callq 0x6270
movq %rax, %rdi
leaq 0x5414f(%rip), %rsi     # 0x6022a
callq 0x6330
movq %rax, 0x28(%rsp)
movq 0x258(%rsp), %rax
movb $0x0, 0x16e(%rsp)
cmpq $0x0, %rax
jne 0xc132
leaq 0x16f(%rsp), %rdi
movq %rdi, 0x20(%rsp)
callq 0x6530
movq 0x20(%rsp), %rdx
movb $0x1, 0x16e(%rsp)
leaq 0x540bb(%rip), %rsi     # 0x601dc
leaq 0x170(%rsp), %rdi
callq 0x6460
jmp 0xc130
jmp 0xc14c
movss 0x190(%rsp), %xmm0
leaq 0x170(%rsp), %rdi
callq 0x202e0
jmp 0xc14a
jmp 0xc14c
movq 0x28(%rsp), %rdi
leaq 0x170(%rsp), %rsi
callq 0x62f0
movq %rax, 0x18(%rsp)
jmp 0xc165
movq 0x18(%rsp), %rdi
leaq 0x540ca(%rip), %rsi     # 0x6023b
callq 0x6330
movq %rax, 0x10(%rsp)
jmp 0xc17d
movq 0x10(%rsp), %rdi
movq 0x350(%rsp), %rax
movss 0xb0(%rax), %xmm0
movss 0x190(%rsp), %xmm1
subss %xmm1, %xmm0
callq 0x6270
movq %rax, 0x8(%rsp)
jmp 0xc1ab
movq 0x8(%rsp), %rdi
movq 0x76e01(%rip), %rsi     # 0x82fb8
callq 0x6370
jmp 0xc1be
leaq 0x170(%rsp), %rdi
callq 0x61f0
testb $0x1, 0x16e(%rsp)
jne 0xc1d7
jmp 0xc1e4
leaq 0x16f(%rsp), %rdi
callq 0x6390
addq $0x368, %rsp            # imm = 0x368
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x318(%rsp)
movl %eax, 0x314(%rsp)
jmp 0xc385
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x318(%rsp)
movl %eax, 0x314(%rsp)
jmp 0xc378
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x318(%rsp)
movl %eax, 0x314(%rsp)
jmp 0xc35d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x318(%rsp)
movl %eax, 0x314(%rsp)
jmp 0xc350
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x318(%rsp)
movl %eax, 0x314(%rsp)
jmp 0xc335
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x318(%rsp)
movl %eax, 0x314(%rsp)
jmp 0xc328
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x318(%rsp)
movl %eax, 0x314(%rsp)
jmp 0xc30d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x318(%rsp)
movl %eax, 0x314(%rsp)
jmp 0xc300
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x318(%rsp)
movl %eax, 0x314(%rsp)
jmp 0xc2e5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x318(%rsp)
movl %eax, 0x314(%rsp)
leaq 0x198(%rsp), %rdi
callq 0x61f0
testb $0x1, 0x196(%rsp)
jne 0xc2f1
jmp 0xc2fe
leaq 0x197(%rsp), %rdi
callq 0x6390
jmp 0xc300
leaq 0x1c0(%rsp), %rdi
callq 0x61f0
testb $0x1, 0x1be(%rsp)
jne 0xc319
jmp 0xc326
leaq 0x1bf(%rsp), %rdi
callq 0x6390
jmp 0xc328
leaq 0x1e8(%rsp), %rdi
callq 0x61f0
testb $0x1, 0x1e6(%rsp)
jne 0xc341
jmp 0xc34e
leaq 0x1e7(%rsp), %rdi
callq 0x6390
jmp 0xc350
leaq 0x210(%rsp), %rdi
callq 0x61f0
testb $0x1, 0x20e(%rsp)
jne 0xc369
jmp 0xc376
leaq 0x20f(%rsp), %rdi
callq 0x6390
jmp 0xc378
leaq 0x238(%rsp), %rdi
callq 0x61f0
testb $0x1, 0x236(%rsp)
jne 0xc391
jmp 0xc39e
leaq 0x237(%rsp), %rdi
callq 0x6390
jmp 0xc3f2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x318(%rsp)
movl %eax, 0x314(%rsp)
jmp 0xc3d7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x318(%rsp)
movl %eax, 0x314(%rsp)
leaq 0x170(%rsp), %rdi
callq 0x61f0
testb $0x1, 0x16e(%rsp)
jne 0xc3e3
jmp 0xc3f0
leaq 0x16f(%rsp), %rdi
callq 0x6390
jmp 0xc3f2
movq 0x318(%rsp), %rdi
callq 0x6520
nop