// File: /workspace/github_cpp_makefile_star2_O1/wichtounet[P]articles/src/graphs.cpp
// Function: graphs::output(graphs::Output)
void graphs::output(Output output){
    if(output == Output::GOOGLE){
        std::ofstream file("graph.html");

        file << "<html>" << std::endl;
        file << "<head>" << std::endl;
        file << "<script type=\"text/javascript\" src=\"https://www.google.com/jsapi\"></script>" << std::endl;
        file << "<script type=\"text/javascript\">google.load('visualization', '1.0', {'packages':['corechart']});</script>" << std::endl;
        file << "</head>" << std::endl;
        file << "<body>" << std::endl;

        file << "<script type=\"text/javascript\">" << std::endl;

        //One function to rule them all
        for(auto& graph : all_graphs){
            file << "function draw_" << graph->name << "(){" << std::endl;

            file << "var data = google.visualization.arrayToDataTable([" << std::endl;

            //['x', 'Cats', 'Blanket 1', 'Blanket 2'],
            auto results = compute_values(graph);

            file << "['x'";

            auto first = results.begin()->second;
            for(auto& pair : first){
                file << ", '" << pair.first << "'";
            }

            file << "]," << std::endl;

            std::vector<std::string> groups;
            for(auto& group : results){
                groups.push_back(group.first);
            }
            std::sort(groups.begin(), groups.end(), numeric_cmp);

            std::size_t max = 0;
            for(auto& group_title : groups){
                file << "['" << group_title << "'";

                for(auto& serie : results[group_title]){
                    file << ", " << serie.second;
                    max = std::max(max, serie.second);
                }

                file << "]," << std::endl;
            }

            file << "]);" << std::endl;

            file << "var graph = new google.visualization.LineChart(document.getElementById('graph_" << graph->name <<"'));" << std::endl
                 << "var options = {curveType: \"function\","
                 << "title: \"" << graph->title << "\","
                 << "animation: {duration:1200, easing:\"in\"},"
                 << "width: 700, height: 400,"
                 << "hAxis: {title:\"Number of elements\", slantedText:true},"
                 << "vAxis: {viewWindow: {min:0}, title:\"" << graph->unit << "\"}};" << std::endl
                 << "graph.draw(data, options);" << std::endl;

            file << "var button = document.getElementById('graph_button_" << graph->name << "');" << std::endl
                 << "button.onclick = function(){" << std::endl
                 << "if(options.vAxis.logScale){" << std::endl
                 << "button.value=\"Logarithmic Scale\";" << std::endl
                 << "} else {" << std::endl
                 << "button.value=\"Normal scale\";" << std::endl
                 << "}" << std::endl
                 << "options.vAxis.logScale=!options.vAxis.logScale;" << std::endl
                 << "graph.draw(data, options);" << std::endl
                 << "};" << std::endl;

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

        //One function to find them
        file << "function draw_all(){" << std::endl;
        for(auto& graph : all_graphs){
            file << "draw_" << graph->name << "();" << std::endl;
        }
        file << "}" << std::endl;

        //One callback to bring them all
        file << "google.setOnLoadCallback(draw_all);" << std::endl;
        file << "</script>" << std::endl;
        file << std::endl;

        //And in the web page bind them
        for(auto& graph : all_graphs){
            file << "<div id=\"graph_" << graph->name << "\" style=\"width: 700px; height: 400px;\"></div>" << std::endl;
            file << "<input id=\"graph_button_" << graph->name << "\" type=\"button\" value=\"Logarithmic scale\">" << std::endl;
        }

        file << "</body>" << std::endl;
        file << "</html>" << std::endl;

        //...In the land of Google where shadow lies
    } else if (output == Output::PLUGIN) {
        std::ofstream file("graph.html");

        //One function to rule them all
        for(auto& graph : all_graphs){
            file << "[line_chart width=\"700px\" height=\"400px\" scale_button=\"true\" title=\"" << graph->title
                << "\" h_title=\"Number of elements\" v_title=\"" << graph->unit << "\"]" << std::endl;

            //['x', 'Cats', 'Blanket 1', 'Blanket 2'],
            auto results = compute_values(graph);

            file << "['x'";

            auto first = results.begin()->second;
            for(auto& pair : first){
                file << ", '" << pair.first << "'";
            }

            file << "]," << std::endl;

            std::vector<std::string> groups;
            for(auto& group : results){
                groups.push_back(group.first);
            }
            std::sort(groups.begin(), groups.end(), numeric_cmp);

            std::size_t max = 0;
            for(auto& group_title : groups){
                file << "['" << group_title << "'";

                for(auto& serie : results[group_title]){
                    file << ", " << serie.second;
                    max = std::max(max, serie.second);
                }

                file << "]," << std::endl;
            }

            file << "[/line_chart]" << std::endl;
        }
    }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x2c8, %rsp            # imm = 0x2C8
cmpl $0x1, %edi
je 0xb3517
testl %edi, %edi
jne 0xb392e
leaq 0xd1ef(%rip), %rsi      # 0xbf8e1
leaq 0xc8(%rsp), %rbx
movq %rbx, %rdi
movl $0x10, %edx
callq 0x41f0
leaq 0xd1de(%rip), %rsi      # 0xbf8ec
movl $0x6, %edx
movq %rbx, %rdi
callq 0x4210
movq 0xc8(%rsp), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x41b0
movsbl %al, %esi
leaq 0xc8(%rsp), %rdi
callq 0x4030
movq %rax, %rdi
callq 0x4120
leaq 0xd1a0(%rip), %rsi      # 0xbf8f3
leaq 0xc8(%rsp), %rbx
movl $0x6, %edx
movq %rbx, %rdi
callq 0x4210
movq 0xc8(%rsp), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x41b0
movsbl %al, %esi
leaq 0xc8(%rsp), %rdi
callq 0x4030
movq %rax, %rdi
callq 0x4120
leaq 0xd15a(%rip), %rsi      # 0xbf8fa
leaq 0xc8(%rsp), %rbx
movl $0x4b, %edx
movq %rbx, %rdi
callq 0x4210
movq 0xc8(%rsp), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x41b0
movsbl %al, %esi
leaq 0xc8(%rsp), %rdi
callq 0x4030
movq %rax, %rdi
callq 0x4120
leaq 0xd159(%rip), %rsi      # 0xbf946
leaq 0xc8(%rsp), %rbx
movl $0x68, %edx
movq %rbx, %rdi
callq 0x4210
movq 0xc8(%rsp), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x41b0
movsbl %al, %esi
leaq 0xc8(%rsp), %rdi
callq 0x4030
movq %rax, %rdi
callq 0x4120
leaq 0xd175(%rip), %rsi      # 0xbf9af
leaq 0xc8(%rsp), %rbx
movl $0x7, %edx
movq %rbx, %rdi
callq 0x4210
movq 0xc8(%rsp), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x41b0
movsbl %al, %esi
leaq 0xc8(%rsp), %rdi
callq 0x4030
movq %rax, %rdi
callq 0x4120
leaq 0xd130(%rip), %rsi      # 0xbf9b7
leaq 0xc8(%rsp), %rbx
movl $0x6, %edx
movq %rbx, %rdi
callq 0x4210
movq 0xc8(%rsp), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x41b0
movsbl %al, %esi
leaq 0xc8(%rsp), %rdi
callq 0x4030
movq %rax, %rdi
callq 0x4120
leaq 0xd0ea(%rip), %rsi      # 0xbf9be
leaq 0xc8(%rsp), %rbx
movl $0x1f, %edx
movq %rbx, %rdi
callq 0x4210
movq 0xc8(%rsp), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x41b0
movsbl %al, %esi
leaq 0xc8(%rsp), %rbx
movq %rbx, %rdi
callq 0x4030
movq %rax, %rdi
callq 0x4120
movq 0x1055d5c(%rip), %rax   # 0x1108680
movq 0x1055d5d(%rip), %rcx   # 0x1108688
movq %rax, 0x8(%rsp)
movq %rcx, 0x30(%rsp)
cmpq %rcx, %rax
je 0xb3184
leaq 0xd0e2(%rip), %r15      # 0xbfa27
leaq 0xd0e3(%rip), %r14      # 0xbfa2f
movl $0xe, %edx
movq %rbx, %rdi
leaq 0xd083(%rip), %rsi      # 0xbf9de
callq 0x4210
movq 0x8(%rsp), %rax
movq (%rax), %rax
movq (%rax), %rsi
movq 0x8(%rax), %rdx
movq %rbx, %rdi
callq 0x4210
movq %rax, %rbp
movl $0x3, %edx
movq %rax, %rdi
leaq 0xd2ea(%rip), %rsi      # 0xbfc73
callq 0x4210
movq (%rbp), %rax
movq -0x18(%rax), %rdi
addq %rbp, %rdi
movl $0xa, %esi
callq 0x41b0
movsbl %al, %esi
movq %rbp, %rdi
callq 0x4030
movq %rax, %rdi
callq 0x4120
movl $0x32, %edx
movq %rbx, %rdi
leaq 0xd028(%rip), %rsi      # 0xbf9ed
callq 0x4210
movq 0xc8(%rsp), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x41b0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x4030
movq %rax, %rdi
callq 0x4120
movq 0x8(%rsp), %rcx
movq 0x8(%rcx), %rax
vmovups (%rcx), %xmm0
vmovaps %xmm0, 0x80(%rsp)
testq %rax, %rax
je 0xb2a26
movq 0x3d5b8(%rip), %rcx     # 0xeffd0
cmpb $0x0, (%rcx)
je 0xb2a22
incl 0x8(%rax)
jmp 0xb2a26
lock
incl 0x8(%rax)
leaq 0x90(%rsp), %rdi
leaq 0x80(%rsp), %rsi
callq 0xb2612
movq 0x88(%rsp), %rdi
testq %rdi, %rdi
je 0xb2a4d
callq 0xb3b28
movl $0x4, %edx
movq %rbx, %rdi
leaq 0xcfc4(%rip), %rsi      # 0xbfa20
callq 0x4210
movq 0xa0(%rsp), %rax
leaq 0x28(%rax), %rsi
xorl %edx, %edx
movq %rdx, 0x38(%rsp)
movq 0x30(%rax), %rcx
movq %rcx, 0x40(%rsp)
movq %rdx, 0x48(%rsp)
movq 0x40(%rax), %rcx
movq %rcx, 0x50(%rsp)
vmovups 0x48(%rax), %xmm0
leaq 0x58(%rsp), %rax
vmovups %xmm0, (%rax)
movq %rdx, 0x68(%rsp)
leaq 0x38(%rsp), %rdi
movq %rdi, 0x10(%rsp)
leaq 0x10(%rsp), %rdx
callq 0xb3c2e
movq 0x48(%rsp), %r13
testq %r13, %r13
je 0xb2af6
movl $0x3, %edx
movq %rbx, %rdi
leaq 0xcf5a(%rip), %rsi      # 0xbfa25
callq 0x4210
movq 0x8(%r13), %rsi
movq 0x10(%r13), %rdx
movq %rbx, %rdi
callq 0x4210
movl $0x1, %edx
movq %rax, %rdi
movq %r15, %rsi
callq 0x4210
movq (%r13), %r13
jmp 0xb2ab7
movl $0x2, %edx
movq %rbx, %rdi
leaq 0xcf24(%rip), %rsi      # 0xbfa29
callq 0x4210
movq 0xc8(%rsp), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x41b0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x4030
movq %rax, %rdi
callq 0x4120
vxorps %xmm0, %xmm0, %xmm0
vmovaps %xmm0, 0x10(%rsp)
movq $0x0, 0x20(%rsp)
movq 0xa0(%rsp), %r12
testq %r12, %r12
je 0xb2b6b
leaq 0x8(%r12), %rsi
leaq 0x10(%rsp), %rdi
callq 0xb3aa6
movq (%r12), %r12
jmp 0xb2b51
movq 0x10(%rsp), %rbp
movq 0x18(%rsp), %r13
cmpq %r13, %rbp
je 0xb2bb3
movq %r13, %rax
subq %rbp, %rax
sarq $0x5, %rax
lzcntq %rax, %rdx
addl %edx, %edx
xorq $0x7e, %rdx
movq %rbp, %rdi
movq %r13, %rsi
leaq -0x4f7(%rip), %rcx      # 0xb26a5
callq 0xb4f73
movq %rbp, %rdi
movq %r13, %rsi
leaq -0x509(%rip), %rdx      # 0xb26a5
callq 0xb50cb
movq 0x10(%rsp), %rbp
movq 0x18(%rsp), %r13
cmpq %r13, %rbp
je 0xb2c7f
movl $0x2, %edx
movq %rbx, %rdi
leaq 0xce57(%rip), %rsi      # 0xbfa2c
callq 0x4210
movq (%rbp), %rsi
movq 0x8(%rbp), %rdx
movq %rbx, %rdi
callq 0x4210
movl $0x1, %edx
movq %rax, %rdi
movq %r15, %rsi
callq 0x4210
leaq 0x90(%rsp), %rdi
movq %rbp, %rsi
callq 0xb44f0
movq 0x10(%rax), %r12
testq %r12, %r12
je 0xb2c36
movl $0x2, %edx
movq %rbx, %rdi
movq %r14, %rsi
callq 0x4210
movq 0x28(%r12), %rsi
movq %rbx, %rdi
callq 0x4110
movq (%r12), %r12
jmp 0xb2c0e
movl $0x2, %edx
movq %rbx, %rdi
leaq 0xcde4(%rip), %rsi      # 0xbfa29
callq 0x4210
movq 0xc8(%rsp), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x41b0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x4030
movq %rax, %rdi
callq 0x4120
addq $0x20, %rbp
jmp 0xb2bbd
movl $0x3, %edx
movq %rbx, %rdi
leaq 0xcda4(%rip), %rsi      # 0xbfa32
callq 0x4210
movq 0xc8(%rsp), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x41b0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x4030
movq %rax, %rdi
callq 0x4120
movl $0x4e, %edx
movq %rbx, %rdi
leaq 0xcd68(%rip), %rsi      # 0xbfa36
callq 0x4210
movq 0x8(%rsp), %rax
movq (%rax), %rax
movq (%rax), %rsi
movq 0x8(%rax), %rdx
movq %rbx, %rdi
callq 0x4210
movq %rax, %rbp
movl $0x4, %edx
movq %rax, %rdi
leaq 0xcd89(%rip), %rsi      # 0xbfa85
callq 0x4210
movq (%rbp), %rax
movq -0x18(%rax), %rdi
addq %rbp, %rdi
movl $0xa, %esi
callq 0x41b0
movsbl %al, %esi
movq %rbp, %rdi
callq 0x4030
movq %rax, %rdi
callq 0x4120
movq %rax, %rbp
movl $0x25, %edx
movq %rax, %rdi
leaq 0xcd4f(%rip), %rsi      # 0xbfa8a
callq 0x4210
movl $0x8, %edx
movq %rbp, %rdi
leaq 0xcd61(%rip), %rsi      # 0xbfab0
callq 0x4210
movq 0x8(%rsp), %rax
movq (%rax), %rax
movq 0x20(%rax), %rsi
movq 0x28(%rax), %rdx
movq %rbp, %rdi
callq 0x4210
movq %rax, %rbp
movl $0x2, %edx
movq %rax, %rdi
leaq 0xcd2f(%rip), %rsi      # 0xbfaad
callq 0x4210
movl $0x28, %edx
movq %rbp, %rdi
leaq 0xcd27(%rip), %rsi      # 0xbfab9
callq 0x4210
movl $0x18, %edx
movq %rbp, %rdi
leaq 0xcd3c(%rip), %rsi      # 0xbfae2
callq 0x4210
movl $0x36, %edx
movq %rbp, %rdi
leaq 0xcd41(%rip), %rsi      # 0xbfafb
callq 0x4210
movl $0x24, %edx
movq %rbp, %rdi
leaq 0xcd64(%rip), %rsi      # 0xbfb32
callq 0x4210
movq 0x8(%rsp), %rax
movq (%rax), %rax
movq 0x40(%rax), %rsi
movq 0x48(%rax), %rdx
movq %rbp, %rdi
callq 0x4210
movq %rax, %rbp
movl $0x4, %edx
movq %rax, %rdi
leaq 0xcd5a(%rip), %rsi      # 0xbfb57
callq 0x4210
movq (%rbp), %rax
movq -0x18(%rax), %rdi
addq %rbp, %rdi
movl $0xa, %esi
callq 0x41b0
movsbl %al, %esi
movq %rbp, %rdi
callq 0x4030
movq %rax, %rdi
callq 0x4120
movq %rax, %rbp
movl $0x1a, %edx
movq %rax, %rdi
leaq 0xcd20(%rip), %rsi      # 0xbfb5c
callq 0x4210
movq (%rbp), %rax
movq -0x18(%rax), %rdi
addq %rbp, %rdi
movl $0xa, %esi
callq 0x41b0
movsbl %al, %esi
movq %rbp, %rdi
callq 0x4030
movq %rax, %rdi
callq 0x4120
movl $0x33, %edx
movq %rbx, %rdi
leaq 0xccff(%rip), %rsi      # 0xbfb77
callq 0x4210
movq 0x8(%rsp), %rax
movq (%rax), %rax
movq (%rax), %rsi
movq 0x8(%rax), %rdx
movq %rbx, %rdi
callq 0x4210
movq %rax, %rbp
movl $0x3, %edx
movq %rax, %rdi
leaq 0xcd05(%rip), %rsi      # 0xbfbab
callq 0x4210
movq (%rbp), %rax
movq -0x18(%rax), %rdi
addq %rbp, %rdi
movl $0xa, %esi
callq 0x41b0
movsbl %al, %esi
movq %rbp, %rdi
callq 0x4030
movq %rax, %rdi
callq 0x4120
movq %rax, %rbp
movl $0x1c, %edx
movq %rax, %rdi
leaq 0xccca(%rip), %rsi      # 0xbfbaf
callq 0x4210
movq (%rbp), %rax
movq -0x18(%rax), %rdi
addq %rbp, %rdi
movl $0xa, %esi
callq 0x41b0
movsbl %al, %esi
movq %rbp, %rdi
callq 0x4030
movq %rax, %rdi
callq 0x4120
movq %rax, %rbp
movl $0x1b, %edx
movq %rax, %rdi
leaq 0xcca8(%rip), %rsi      # 0xbfbcc
callq 0x4210
movq (%rbp), %rax
movq -0x18(%rax), %rdi
addq %rbp, %rdi
movl $0xa, %esi
callq 0x41b0
movsbl %al, %esi
movq %rbp, %rdi
callq 0x4030
movq %rax, %rdi
callq 0x4120
movq %rax, %rbp
movl $0x21, %edx
movq %rax, %rdi
leaq 0xcc85(%rip), %rsi      # 0xbfbe8
callq 0x4210
movq (%rbp), %rax
movq -0x18(%rax), %rdi
addq %rbp, %rdi
movl $0xa, %esi
callq 0x41b0
movsbl %al, %esi
movq %rbp, %rdi
callq 0x4030
movq %rax, %rdi
callq 0x4120
movq %rax, %rbp
movl $0x8, %edx
movq %rax, %rdi
leaq 0xcc68(%rip), %rsi      # 0xbfc0a
callq 0x4210
movq (%rbp), %rax
movq -0x18(%rax), %rdi
addq %rbp, %rdi
movl $0xa, %esi
callq 0x41b0
movsbl %al, %esi
movq %rbp, %rdi
callq 0x4030
movq %rax, %rdi
callq 0x4120
movq %rax, %rbp
movl $0x1c, %edx
movq %rax, %rdi
leaq 0xcc32(%rip), %rsi      # 0xbfc13
callq 0x4210
movq (%rbp), %rax
movq -0x18(%rax), %rdi
addq %rbp, %rdi
movl $0xa, %esi
callq 0x41b0
movsbl %al, %esi
movq %rbp, %rdi
callq 0x4030
movq %rax, %rdi
callq 0x4120
movq %rax, %rbp
movl $0x1, %edx
movq %rax, %rdi
leaq 0xcc10(%rip), %rsi      # 0xbfc30
callq 0x4210
movq (%rbp), %rax
movq -0x18(%rax), %rdi
addq %rbp, %rdi
movl $0xa, %esi
callq 0x41b0
movsbl %al, %esi
movq %rbp, %rdi
callq 0x4030
movq %rax, %rdi
callq 0x4120
movq %rax, %rbp
movl $0x2f, %edx
movq %rax, %rdi
leaq 0xcbd3(%rip), %rsi      # 0xbfc32
callq 0x4210
movq (%rbp), %rax
movq -0x18(%rax), %rdi
addq %rbp, %rdi
movl $0xa, %esi
callq 0x41b0
movsbl %al, %esi
movq %rbp, %rdi
callq 0x4030
movq %rax, %rdi
callq 0x4120
movq %rax, %rbp
movl $0x1a, %edx
movq %rax, %rdi
leaq 0xcabe(%rip), %rsi      # 0xbfb5c
callq 0x4210
movq (%rbp), %rax
movq -0x18(%rax), %rdi
addq %rbp, %rdi
movl $0xa, %esi
callq 0x41b0
movsbl %al, %esi
movq %rbp, %rdi
callq 0x4030
movq %rax, %rdi
callq 0x4120
movq %rax, %rbp
movl $0x2, %edx
movq %rax, %rdi
leaq 0xca7c(%rip), %rsi      # 0xbfb59
callq 0x4210
movq (%rbp), %rax
movq -0x18(%rax), %rdi
addq %rbp, %rdi
movl $0xa, %esi
callq 0x41b0
movsbl %al, %esi
movq %rbp, %rdi
callq 0x4030
movq %rax, %rdi
callq 0x4120
movl $0x1, %edx
movq %rbx, %rdi
leaq 0xcb17(%rip), %rsi      # 0xbfc30
callq 0x4210
movq 0xc8(%rsp), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x41b0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x4030
movq %rax, %rdi
callq 0x4120
leaq 0x10(%rsp), %rdi
callq 0xb3ae4
leaq 0x38(%rsp), %rdi
callq 0xb3e76
leaq 0x90(%rsp), %rdi
callq 0xb3b98
movq 0x8(%rsp), %rax
addq $0x10, %rax
movq %rax, 0x8(%rsp)
cmpq 0x30(%rsp), %rax
jne 0xb294c
leaq 0xcad7(%rip), %rsi      # 0xbfc62
leaq 0xc8(%rsp), %rbx
movl $0x14, %edx
movq %rbx, %rdi
callq 0x4210
movq 0xc8(%rsp), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x41b0
movsbl %al, %esi
leaq 0xc8(%rsp), %rdi
callq 0x4030
movq %rax, %rdi
callq 0x4120
movq 0x10554a8(%rip), %r13   # 0x1108680
movq 0x10554a9(%rip), %rbp   # 0x1108688
cmpq %rbp, %r13
je 0xb3261
leaq 0xc7fc(%rip), %rbx      # 0xbf9e7
leaq 0xc8(%rsp), %r14
leaq 0xca7d(%rip), %r15      # 0xbfc77
movl $0x5, %edx
movq %r14, %rdi
movq %rbx, %rsi
callq 0x4210
movq (%r13), %rax
movq (%rax), %rsi
movq 0x8(%rax), %rdx
movq %r14, %rdi
callq 0x4210
movq %rax, %r12
movl $0x3, %edx
movq %rax, %rdi
movq %r15, %rsi
callq 0x4210
movq (%r12), %rax
movq -0x18(%rax), %rdi
addq %r12, %rdi
movl $0xa, %esi
callq 0x41b0
movsbl %al, %esi
movq %r12, %rdi
callq 0x4030
movq %rax, %rdi
callq 0x4120
addq $0x10, %r13
cmpq %rbp, %r13
jne 0xb31fa
leaq 0xc9c8(%rip), %rsi      # 0xbfc30
leaq 0xc8(%rsp), %rbx
movl $0x1, %edx
movq %rbx, %rdi
callq 0x4210
movq 0xc8(%rsp), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x41b0
movsbl %al, %esi
leaq 0xc8(%rsp), %rdi
callq 0x4030
movq %rax, %rdi
callq 0x4120
leaq 0xc9c6(%rip), %rsi      # 0xbfc7b
leaq 0xc8(%rsp), %rbx
movl $0x23, %edx
movq %rbx, %rdi
callq 0x4210
movq 0xc8(%rsp), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x41b0
movsbl %al, %esi
leaq 0xc8(%rsp), %rdi
callq 0x4030
movq %rax, %rdi
callq 0x4120
leaq 0xc6a3(%rip), %rsi      # 0xbf9a5
leaq 0xc8(%rsp), %rbx
movl $0x9, %edx
movq %rbx, %rdi
callq 0x4210
movq 0xc8(%rsp), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x41b0
movsbl %al, %esi
leaq 0xc8(%rsp), %rbx
movq %rbx, %rdi
callq 0x4030
movq %rax, %rdi
callq 0x4120
movq 0xc8(%rsp), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x41b0
movsbl %al, %esi
leaq 0xc8(%rsp), %rdi
callq 0x4030
movq %rax, %rdi
callq 0x4120
movq 0x10552fd(%rip), %rbx   # 0x1108680
movq 0x10552fe(%rip), %r15   # 0x1108688
cmpq %r15, %rbx
je 0xb3478
leaq 0xc8(%rsp), %r14
leaq 0xc93b(%rip), %r12      # 0xbfcdd
leaq 0xc94d(%rip), %r13      # 0xbfcf6
movl $0xf, %edx
movq %r14, %rdi
leaq 0xc8e7(%rip), %rsi      # 0xbfc9f
callq 0x4210
movq (%rbx), %rax
movq (%rax), %rsi
movq 0x8(%rax), %rdx
movq %r14, %rdi
callq 0x4210
movq %rax, %rbp
movl $0x2d, %edx
movq %rax, %rdi
leaq 0xc8ce(%rip), %rsi      # 0xbfcaf
callq 0x4210
movq (%rbp), %rax
movq -0x18(%rax), %rdi
addq %rbp, %rdi
movl $0xa, %esi
callq 0x41b0
movsbl %al, %esi
movq %rbp, %rdi
callq 0x4030
movq %rax, %rdi
callq 0x4120
movl $0x18, %edx
movq %r14, %rdi
movq %r12, %rsi
callq 0x4210
movq (%rbx), %rax
movq (%rax), %rsi
movq 0x8(%rax), %rdx
movq %r14, %rdi
callq 0x4210
movq %rax, %rbp
movl $0x2a, %edx
movq %rax, %rdi
movq %r13, %rsi
callq 0x4210
movq (%rbp), %rax
movq -0x18(%rax), %rdi
addq %rbp, %rdi
movl $0xa, %esi
callq 0x41b0
movsbl %al, %esi
movq %rbp, %rdi
callq 0x4030
movq %rax, %rdi
callq 0x4120
addq $0x10, %rbx
cmpq %r15, %rbx
jne 0xb33a9
leaq 0xc8a2(%rip), %rsi      # 0xbfd21
leaq 0xc8(%rsp), %rbx
movl $0x7, %edx
movq %rbx, %rdi
callq 0x4210
movq 0xc8(%rsp), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x41b0
movsbl %al, %esi
leaq 0xc8(%rsp), %rdi
callq 0x4030
movq %rax, %rdi
callq 0x4120
leaq 0xc85d(%rip), %rsi      # 0xbfd29
leaq 0xc8(%rsp), %rbx
movl $0x7, %edx
movq %rbx, %rdi
callq 0x4210
movq 0xc8(%rsp), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x41b0
movsbl %al, %esi
leaq 0xc8(%rsp), %rdi
callq 0x4030
movq %rax, %rdi
callq 0x4120
jmp 0xb38f6
leaq 0xc3c3(%rip), %rsi      # 0xbf8e1
leaq 0xc8(%rsp), %rbx
movq %rbx, %rdi
movl $0x10, %edx
callq 0x41f0
movq 0x1055146(%rip), %rax   # 0x1108680
movq 0x1055147(%rip), %rcx   # 0x1108688
movq %rax, 0x8(%rsp)
movq %rcx, 0x30(%rsp)
cmpq %rcx, %rax
je 0xb38f6
leaq 0xc4cc(%rip), %r15      # 0xbfa27
leaq 0xc4cd(%rip), %r14      # 0xbfa2f
movl $0x44, %edx
movq %rbx, %rdi
leaq 0xc7c0(%rip), %rsi      # 0xbfd31
callq 0x4210
movq 0x8(%rsp), %rax
movq (%rax), %rax
movq 0x20(%rax), %rsi
movq 0x28(%rax), %rdx
movq %rbx, %rdi
callq 0x4210
movq %rax, %r13
movl $0x28, %edx
movq %rax, %rdi
leaq 0xc7d6(%rip), %rsi      # 0xbfd76
callq 0x4210
movq 0x8(%rsp), %rax
movq (%rax), %rax
movq 0x40(%rax), %rsi
movq 0x48(%rax), %rdx
movq %r13, %rdi
callq 0x4210
movq %rax, %rbp
movl $0x2, %edx
movq %rax, %rdi
leaq 0xc7d0(%rip), %rsi      # 0xbfd9f
callq 0x4210
movq (%rbp), %rax
movq -0x18(%rax), %rdi
addq %rbp, %rdi
movl $0xa, %esi
callq 0x41b0
movsbl %al, %esi
movq %rbp, %rdi
callq 0x4030
movq %rax, %rdi
callq 0x4120
movq 0x8(%rsp), %rcx
movq 0x8(%rcx), %rax
vmovups (%rcx), %xmm0
vmovaps %xmm0, 0x70(%rsp)
testq %rax, %rax
je 0xb3629
movq 0x3c9b5(%rip), %rcx     # 0xeffd0
cmpb $0x0, (%rcx)
je 0xb3625
incl 0x8(%rax)
jmp 0xb3629
lock
incl 0x8(%rax)
leaq 0x90(%rsp), %rdi
leaq 0x70(%rsp), %rsi
callq 0xb2612
movq 0x78(%rsp), %rdi
testq %rdi, %rdi
je 0xb364a
callq 0xb3b28
movl $0x4, %edx
movq %rbx, %rdi
leaq 0xc3c7(%rip), %rsi      # 0xbfa20
callq 0x4210
movq 0xa0(%rsp), %rax
leaq 0x28(%rax), %rsi
xorl %edx, %edx
movq %rdx, 0x38(%rsp)
movq 0x30(%rax), %rcx
movq %rcx, 0x40(%rsp)
movq %rdx, 0x48(%rsp)
movq 0x40(%rax), %rcx
movq %rcx, 0x50(%rsp)
vmovups 0x48(%rax), %xmm0
leaq 0x58(%rsp), %rax
vmovups %xmm0, (%rax)
movq %rdx, 0x68(%rsp)
leaq 0x38(%rsp), %rdi
movq %rdi, 0x10(%rsp)
leaq 0x10(%rsp), %rdx
callq 0xb3c2e
movq 0x48(%rsp), %r13
testq %r13, %r13
je 0xb36f3
movl $0x3, %edx
movq %rbx, %rdi
leaq 0xc35d(%rip), %rsi      # 0xbfa25
callq 0x4210
movq 0x8(%r13), %rsi
movq 0x10(%r13), %rdx
movq %rbx, %rdi
callq 0x4210
movl $0x1, %edx
movq %rax, %rdi
movq %r15, %rsi
callq 0x4210
movq (%r13), %r13
jmp 0xb36b4
movl $0x2, %edx
movq %rbx, %rdi
leaq 0xc327(%rip), %rsi      # 0xbfa29
callq 0x4210
movq 0xc8(%rsp), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x41b0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x4030
movq %rax, %rdi
callq 0x4120
vxorps %xmm0, %xmm0, %xmm0
vmovaps %xmm0, 0x10(%rsp)
movq $0x0, 0x20(%rsp)
movq 0xa0(%rsp), %r12
testq %r12, %r12
je 0xb3768
leaq 0x8(%r12), %rsi
leaq 0x10(%rsp), %rdi
callq 0xb3aa6
movq (%r12), %r12
jmp 0xb374e
movq 0x10(%rsp), %rbp
movq 0x18(%rsp), %r13
cmpq %r13, %rbp
je 0xb37b0
movq %r13, %rax
subq %rbp, %rax
sarq $0x5, %rax
lzcntq %rax, %rdx
addl %edx, %edx
xorq $0x7e, %rdx
movq %rbp, %rdi
movq %r13, %rsi
leaq -0x10f4(%rip), %rcx     # 0xb26a5
callq 0xb4f73
movq %rbp, %rdi
movq %r13, %rsi
leaq -0x1106(%rip), %rdx     # 0xb26a5
callq 0xb50cb
movq 0x10(%rsp), %rbp
movq 0x18(%rsp), %r13
cmpq %r13, %rbp
je 0xb387c
movl $0x2, %edx
movq %rbx, %rdi
leaq 0xc25a(%rip), %rsi      # 0xbfa2c
callq 0x4210
movq (%rbp), %rsi
movq 0x8(%rbp), %rdx
movq %rbx, %rdi
callq 0x4210
movl $0x1, %edx
movq %rax, %rdi
movq %r15, %rsi
callq 0x4210
leaq 0x90(%rsp), %rdi
movq %rbp, %rsi
callq 0xb44f0
movq 0x10(%rax), %r12
testq %r12, %r12
je 0xb3833
movl $0x2, %edx
movq %rbx, %rdi
movq %r14, %rsi
callq 0x4210
movq 0x28(%r12), %rsi
movq %rbx, %rdi
callq 0x4110
movq (%r12), %r12
jmp 0xb380b
movl $0x2, %edx
movq %rbx, %rdi
leaq 0xc1e7(%rip), %rsi      # 0xbfa29
callq 0x4210
movq 0xc8(%rsp), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x41b0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x4030
movq %rax, %rdi
callq 0x4120
addq $0x20, %rbp
jmp 0xb37ba
movl $0xd, %edx
movq %rbx, %rdi
leaq 0xc517(%rip), %rsi      # 0xbfda2
callq 0x4210
movq 0xc8(%rsp), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x41b0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x4030
movq %rax, %rdi
callq 0x4120
leaq 0x10(%rsp), %rdi
callq 0xb3ae4
leaq 0x38(%rsp), %rdi
callq 0xb3e76
leaq 0x90(%rsp), %rdi
callq 0xb3b98
movq 0x8(%rsp), %rax
addq $0x10, %rax
movq %rax, 0x8(%rsp)
cmpq 0x30(%rsp), %rax
jne 0xb3562
movq 0x3c6cb(%rip), %rax     # 0xeffc8
movq (%rax), %rcx
movq 0x18(%rax), %rax
leaq 0xd0(%rsp), %rdi
movq %rcx, -0x8(%rdi)
movq -0x18(%rcx), %rcx
movq %rax, 0xc8(%rsp,%rcx)
callq 0x4170
leaq 0x1c0(%rsp), %rdi
callq 0x4090
addq $0x2c8, %rsp            # imm = 0x2C8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0xb3967
movq %rax, %rbx
movq 0x88(%rsp), %rdi
jmp 0xb3959
jmp 0xb3967
movq %rax, %rbx
movq 0x78(%rsp), %rdi
testq %rdi, %rdi
je 0xb39be
callq 0xb3b28
jmp 0xb39be
jmp 0xb3967
movq %rax, %rbx
jmp 0xb39b1
jmp 0xb399a
jmp 0xb399a
jmp 0xb397e
jmp 0xb398d
jmp 0xb399a
jmp 0xb398d
jmp 0xb397e
jmp 0xb397e
jmp 0xb397e
movq %rax, %rbx
jmp 0xb39be
jmp 0xb399a
jmp 0xb399a
jmp 0xb399a
jmp 0xb399a
jmp 0xb398d
movq %rax, %rbx
jmp 0xb39a7
jmp 0xb399a
jmp 0xb399a
jmp 0xb399a
jmp 0xb399a
movq %rax, %rbx
leaq 0x10(%rsp), %rdi
callq 0xb3ae4
leaq 0x38(%rsp), %rdi
callq 0xb3e76
leaq 0x90(%rsp), %rdi
callq 0xb3b98
movq 0x3c603(%rip), %rax     # 0xeffc8
movq (%rax), %rcx
movq 0x18(%rax), %rax
leaq 0xd0(%rsp), %rdi
movq %rcx, -0x8(%rdi)
movq -0x18(%rcx), %rcx
movq %rax, 0xc8(%rsp,%rcx)
callq 0x4170
leaq 0x1c0(%rsp), %rdi
callq 0x4090
movq %rbx, %rdi
callq 0x42d0