// File: grame-cncm[P]digraph/./dglib/digraphop.hh
// Function: std::ostream& dotfile<char, std::pair<std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, int, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const, int>>>, int>>(std::ostream&, digraph<char, std::pair<std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, int, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const, int>>>, int>> const&, bool)
inline std::ostream& dotfile(std::ostream& file, const digraph<N, A>& g, bool clusters = false)
{
    file << "digraph mygraph {" << std::endl;
    for (const N& n : g.nodes()) {
        std::stringstream sn;
        sn << '"' << n << '"';
        bool hascnx = false;
        for (const auto& c : g.connections(n)) {
            std::stringstream sm;
            sm << '"' << c.first << '"';
            hascnx = true;
            file << "\t" << sn.str() << "->" << sm.str() << " [label=\"" << arrow_traits<A>::label(c.second) << "\"];"
                 << std::endl;
        }
        if (!hascnx) {
            file << "\t" << sn.str() << ";" << std::endl;
        }
    }

    if (clusters) {
        Tarjan<N, A> T(g);
        int          ccount = 0;  // cluster count
        for (const auto& s : T.partition()) {
            file << "\t"
                 << "subgraph cluster" << ccount++ << " { " << std::endl;
            for (const N& n : s) {
                file << "\t\t" << '"' << n << '"' << ";" << std::endl;
            }
            file << "\t"
                 << "}" << std::endl;
        }
    }

    return file << "}" << std::endl;
}

// Assembly:
subq $0x5e8, %rsp            # imm = 0x5E8
movb %dl, %al
movq %rdi, 0x5e0(%rsp)
movq %rsi, 0x5d8(%rsp)
andb $0x1, %al
movb %al, 0x5d7(%rsp)
movq 0x5e0(%rsp), %rdi
leaq 0x3a0b9(%rip), %rsi     # 0x3d04a
callq 0x2180
movq %rax, %rdi
movq 0x53018(%rip), %rsi     # 0x55fb8
callq 0x21b0
movq 0x5d8(%rsp), %rdi
callq 0xa130
movq %rax, 0x5c8(%rsp)
movq 0x5c8(%rsp), %rdi
callq 0xa150
movq %rax, 0x5c0(%rsp)
movq 0x5c8(%rsp), %rdi
callq 0xa180
movq %rax, 0x5b8(%rsp)
leaq 0x5c0(%rsp), %rdi
leaq 0x5b8(%rsp), %rsi
callq 0xa1b0
testb $0x1, %al
jne 0x3002
jmp 0x347c
leaq 0x5c0(%rsp), %rdi
callq 0xa1d0
movq %rax, 0x5b0(%rsp)
leaq 0x428(%rsp), %rdi
callq 0x2110
leaq 0x438(%rsp), %rdi
movl $0x22, %esi
callq 0x21e0
movq %rax, 0xd8(%rsp)
jmp 0x3040
movq 0xd8(%rsp), %rdi
movq 0x5b0(%rsp), %rax
movsbl (%rax), %esi
callq 0x21e0
movq %rax, 0xd0(%rsp)
jmp 0x3062
movq 0xd0(%rsp), %rdi
movl $0x22, %esi
callq 0x21e0
jmp 0x3076
movb $0x0, 0x41b(%rsp)
movq 0x5d8(%rsp), %rdi
movq 0x5b0(%rsp), %rsi
callq 0xa1f0
movq %rax, 0xc8(%rsp)
jmp 0x309d
movq 0xc8(%rsp), %rax
movq %rax, 0x410(%rsp)
movq 0x410(%rsp), %rdi
callq 0xa220
movq %rax, 0x408(%rsp)
movq 0x410(%rsp), %rdi
callq 0xa250
movq %rax, 0x400(%rsp)
leaq 0x408(%rsp), %rdi
leaq 0x400(%rsp), %rsi
callq 0xa280
testb $0x1, %al
jne 0x30f5
jmp 0x3395
leaq 0x408(%rsp), %rdi
callq 0xa2a0
movq %rax, 0x3f8(%rsp)
leaq 0x270(%rsp), %rdi
callq 0x2110
jmp 0x3119
leaq 0x280(%rsp), %rdi
movl $0x22, %esi
callq 0x21e0
movq %rax, 0xc0(%rsp)
jmp 0x3135
movq 0xc0(%rsp), %rdi
movq 0x3f8(%rsp), %rax
movsbl (%rax), %esi
callq 0x21e0
movq %rax, 0xb8(%rsp)
jmp 0x3157
movq 0xb8(%rsp), %rdi
movl $0x22, %esi
callq 0x21e0
jmp 0x316b
movb $0x1, 0x41b(%rsp)
movq 0x5e0(%rsp), %rdi
leaq 0x39efe(%rip), %rsi     # 0x3d080
callq 0x2180
movq %rax, 0xb0(%rsp)
jmp 0x3191
leaq 0x250(%rsp), %rdi
leaq 0x428(%rsp), %rsi
callq 0x2170
jmp 0x31a8
movq 0xb0(%rsp), %rdi
leaq 0x250(%rsp), %rsi
callq 0x2150
movq %rax, 0xa8(%rsp)
jmp 0x31c7
movq 0xa8(%rsp), %rdi
leaq 0x39e51(%rip), %rsi     # 0x3d027
callq 0x2180
movq %rax, 0xa0(%rsp)
jmp 0x31e5
leaq 0x230(%rsp), %rdi
leaq 0x270(%rsp), %rsi
callq 0x2170
jmp 0x31fc
movq 0xa0(%rsp), %rdi
leaq 0x230(%rsp), %rsi
callq 0x2150
movq %rax, 0x98(%rsp)
jmp 0x321b
movq 0x98(%rsp), %rdi
leaq 0x39e32(%rip), %rsi     # 0x3d05c
callq 0x2180
movq %rax, 0x90(%rsp)
jmp 0x3239
movq 0x3f8(%rsp), %rsi
addq $0x8, %rsi
leaq 0x210(%rsp), %rdi
callq 0xa9a0
jmp 0x3254
movq 0x90(%rsp), %rdi
leaq 0x210(%rsp), %rsi
callq 0x2150
movq %rax, 0x88(%rsp)
jmp 0x3273
movq 0x88(%rsp), %rdi
leaq 0x39de4(%rip), %rsi     # 0x3d066
callq 0x2180
movq %rax, 0x80(%rsp)
jmp 0x3291
movq 0x80(%rsp), %rdi
movq 0x52d18(%rip), %rsi     # 0x55fb8
callq 0x21b0
jmp 0x32a7
leaq 0x210(%rsp), %rdi
callq 0x20e0
leaq 0x230(%rsp), %rdi
callq 0x20e0
leaq 0x250(%rsp), %rdi
callq 0x20e0
leaq 0x270(%rsp), %rdi
callq 0x2120
leaq 0x408(%rsp), %rdi
callq 0xa320
jmp 0x30d7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x420(%rsp)
movl %eax, 0x41c(%rsp)
jmp 0x346a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x420(%rsp)
movl %eax, 0x41c(%rsp)
jmp 0x3383
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x420(%rsp)
movl %eax, 0x41c(%rsp)
jmp 0x3376
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x420(%rsp)
movl %eax, 0x41c(%rsp)
jmp 0x3369
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x420(%rsp)
movl %eax, 0x41c(%rsp)
leaq 0x210(%rsp), %rdi
callq 0x20e0
leaq 0x230(%rsp), %rdi
callq 0x20e0
leaq 0x250(%rsp), %rdi
callq 0x20e0
leaq 0x270(%rsp), %rdi
callq 0x2120
jmp 0x346a
testb $0x1, 0x41b(%rsp)
jne 0x344b
movq 0x5e0(%rsp), %rdi
leaq 0x39cce(%rip), %rsi     # 0x3d080
callq 0x2180
movq %rax, 0x78(%rsp)
jmp 0x33be
leaq 0x1f0(%rsp), %rdi
leaq 0x428(%rsp), %rsi
callq 0x2170
jmp 0x33d5
movq 0x78(%rsp), %rdi
leaq 0x1f0(%rsp), %rsi
callq 0x2150
movq %rax, 0x70(%rsp)
jmp 0x33ee
movq 0x70(%rsp), %rdi
leaq 0x39c6e(%rip), %rsi     # 0x3d068
callq 0x2180
movq %rax, 0x68(%rsp)
jmp 0x3406
movq 0x68(%rsp), %rdi
movq 0x52ba6(%rip), %rsi     # 0x55fb8
callq 0x21b0
jmp 0x3419
leaq 0x1f0(%rsp), %rdi
callq 0x20e0
jmp 0x344b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x420(%rsp)
movl %eax, 0x41c(%rsp)
leaq 0x1f0(%rsp), %rdi
callq 0x20e0
jmp 0x346a
leaq 0x428(%rsp), %rdi
callq 0x2120
leaq 0x5c0(%rsp), %rdi
callq 0xa350
jmp 0x2fe4
leaq 0x428(%rsp), %rdi
callq 0x2120
jmp 0x3770
testb $0x1, 0x5d7(%rsp)
je 0x3745
movq 0x5d8(%rsp), %rsi
leaq 0x128(%rsp), %rdi
movq %rdi, 0x58(%rsp)
callq 0xab60
movq 0x58(%rsp), %rdi
movl $0x0, 0x124(%rsp)
callq 0xacf0
movq %rax, 0x60(%rsp)
jmp 0x34c0
movq 0x60(%rsp), %rax
movq %rax, 0x118(%rsp)
movq 0x118(%rsp), %rdi
callq 0xad10
movq %rax, 0x110(%rsp)
movq 0x118(%rsp), %rdi
callq 0xad40
movq %rax, 0x108(%rsp)
leaq 0x110(%rsp), %rdi
leaq 0x108(%rsp), %rsi
callq 0xad70
testb $0x1, %al
jne 0x3515
jmp 0x3738
leaq 0x110(%rsp), %rdi
callq 0xad90
movq %rax, 0x100(%rsp)
movq 0x5e0(%rsp), %rdi
leaq 0x39b47(%rip), %rsi     # 0x3d080
callq 0x2180
movq %rax, 0x50(%rsp)
jmp 0x3545
movq 0x50(%rsp), %rdi
leaq 0x39b19(%rip), %rsi     # 0x3d06a
callq 0x2180
movq %rax, 0x48(%rsp)
jmp 0x355d
movq 0x48(%rsp), %rdi
movl 0x124(%rsp), %esi
movl %esi, %eax
incl %eax
movl %eax, 0x124(%rsp)
callq 0x2280
movq %rax, 0x40(%rsp)
jmp 0x3580
movq 0x40(%rsp), %rdi
leaq 0x39aef(%rip), %rsi     # 0x3d07b
callq 0x2180
movq %rax, 0x38(%rsp)
jmp 0x3598
movq 0x38(%rsp), %rdi
movq 0x52a14(%rip), %rsi     # 0x55fb8
callq 0x21b0
jmp 0x35ab
movq 0x100(%rsp), %rax
movq %rax, 0xf8(%rsp)
movq 0xf8(%rsp), %rdi
callq 0xa150
movq %rax, 0xf0(%rsp)
movq 0xf8(%rsp), %rdi
callq 0xa180
movq %rax, 0xe8(%rsp)
leaq 0xf0(%rsp), %rdi
leaq 0xe8(%rsp), %rsi
callq 0xa1b0
testb $0x1, %al
jne 0x3603
jmp 0x36e0
leaq 0xf0(%rsp), %rdi
callq 0xa1d0
movq %rax, 0xe0(%rsp)
movq 0x5e0(%rsp), %rdi
leaq 0x39a58(%rip), %rsi     # 0x3d07f
callq 0x2180
movq %rax, 0x30(%rsp)
jmp 0x3633
movq 0x30(%rsp), %rdi
movl $0x22, %esi
callq 0x21e0
movq %rax, 0x28(%rsp)
jmp 0x3649
movq 0x28(%rsp), %rdi
movq 0xe0(%rsp), %rax
movsbl (%rax), %esi
callq 0x21e0
movq %rax, 0x20(%rsp)
jmp 0x3665
movq 0x20(%rsp), %rdi
movl $0x22, %esi
callq 0x21e0
movq %rax, 0x18(%rsp)
jmp 0x367b
movq 0x18(%rsp), %rdi
leaq 0x399e1(%rip), %rsi     # 0x3d068
callq 0x2180
movq %rax, 0x10(%rsp)
jmp 0x3693
movq 0x10(%rsp), %rdi
movq 0x52919(%rip), %rsi     # 0x55fb8
callq 0x21b0
jmp 0x36a6
jmp 0x36a8
leaq 0xf0(%rsp), %rdi
callq 0xa350
jmp 0x35e5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x420(%rsp)
movl %eax, 0x41c(%rsp)
leaq 0x128(%rsp), %rdi
callq 0xade0
jmp 0x3770
movq 0x5e0(%rsp), %rdi
leaq 0x39991(%rip), %rsi     # 0x3d080
callq 0x2180
movq %rax, 0x8(%rsp)
jmp 0x36fb
movq 0x8(%rsp), %rdi
leaq 0x3ab94(%rip), %rsi     # 0x3e29b
callq 0x2180
movq %rax, (%rsp)
jmp 0x3712
movq (%rsp), %rdi
movq 0x5289b(%rip), %rsi     # 0x55fb8
callq 0x21b0
jmp 0x3724
jmp 0x3726
leaq 0x110(%rsp), %rdi
callq 0xadb0
jmp 0x34f7
leaq 0x128(%rsp), %rdi
callq 0xade0
movq 0x5e0(%rsp), %rdi
leaq 0x3ab47(%rip), %rsi     # 0x3e29b
callq 0x2180
movq %rax, %rdi
movq 0x52855(%rip), %rsi     # 0x55fb8
callq 0x21b0
addq $0x5e8, %rsp            # imm = 0x5E8
retq
movq 0x420(%rsp), %rdi
callq 0x2290
nopl (%rax)