// File: chhylp123[P]hifiasm/hic.cpp
// Function: graph_cut(unsigned long, unsigned long, min_cut_t*)
void graph_cut(uint64_t src, uint64_t dest, min_cut_t* x)
{
    /*******************************for debug************************************/
    ///if(src == 45179) print_debug_rGraph(x);
    /*******************************for debug************************************/
    if(maxFlow(src, dest, x))
    {
        ///in the last time bfs of maxFlow, rGraphVis has already been set
        uint64_t i, j, v, u;
        hc_edge *p;
        /*******************************for debug************************************/
        if(src == 45179)
        ///if(src == 26818)
        {
            ///print_debug_rGraph(x);
            print_src_dest(src, x, "src utg:");
            print_src_dest(dest, x, "dest utg:");
        }
        /*******************************for debug************************************/
        for (i = 0; i < x->rGraphVis.n; i++)
        {
            if(x->rGraphVis.a[i] == 0) continue;
            if(!x->bmerVis.a[i]) continue;
            v = i;
            for (j = 0; j < x->rGraph.a[i].n; j++)
            {
                if(x->rGraph.a[i].a[j].del) continue;
                u = x->rGraph.a[i].a[j].uID;
                if(x->rGraphVis.a[u]) continue;
                if(!x->bmerVis.a[u]) continue;
                /*******************************for debug************************************/
                if(src == 45179) fprintf(stderr, "utg%.6lul\tutg%.6lul\t%f\n", v+1, u+1, x->rGraph.a[i].a[j].weight);    
                /*******************************for debug************************************/
                ///delete <v, u>
                x->rGraph.a[i].a[j].del = 1;
                ///delete <u, v>
                p = get_rGraph_edge(x, u, v);
                p->del = 1;
                x->c_e += 2;
            }
            
        }

        /*******************************for debug************************************/
        ///if(src == 45179 || src == 31635)
        // if(src == 26818)
        // {
        //     fprintf(stderr, "hahahaha\n");
        //     print_path(26818, 1143, x);
        // }
        /*******************************for debug************************************/
    }
    /*******************************for debug************************************/
    ///if(src == 45179 || src == 31635)
    // {
    //     print_src_dest(src, x, "++++++src utg:");
    //     uint64_t m;
    //     for (m = 0; m < x->rGraph.a[src].n; m++)
    //     {
    //         if(x->rGraph.a[src].a[m].del) continue;
    //         fprintf(stderr, "src(utg%.6dl, enz:%lu)\tdes(utg%.6dl, enz:%lu)\t%f\n", 
    //         (int)(src+1), x->enzymes[src], 
    //         (int)(x->rGraph.a[src].a[m].uID+1), x->enzymes[x->rGraph.a[src].a[m].uID], 
    //         x->rGraph.a[src].a[m].weight);   
    //     }
    // }
    /*******************************for debug************************************/
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x40, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rdx
callq 0x1d7e30
cmpq $0x0, %rax
je 0x1d86bf
cmpq $0xb07b, -0x8(%rbp)     # imm = 0xB07B
jne 0x1d84e1
movq -0x8(%rbp), %rdi
movq -0x18(%rbp), %rsi
leaq 0x1b41dc(%rip), %rdx    # 0x38c6a4
callq 0x1d81f0
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
leaq 0x1b41d1(%rip), %rdx    # 0x38c6ad
callq 0x1d81f0
movq $0x0, -0x20(%rbp)
movq -0x20(%rbp), %rax
movq -0x18(%rbp), %rcx
cmpq 0xb0(%rcx), %rax
jae 0x1d86bd
movq -0x18(%rbp), %rax
movq 0xc0(%rax), %rax
movq -0x20(%rbp), %rcx
movzbl (%rax,%rcx), %eax
cmpl $0x0, %eax
jne 0x1d851b
jmp 0x1d86ac
movq -0x18(%rbp), %rax
movq 0xf0(%rax), %rax
movq -0x20(%rbp), %rcx
cmpb $0x0, (%rax,%rcx)
jne 0x1d8535
jmp 0x1d86ac
movq -0x20(%rbp), %rax
movq %rax, -0x30(%rbp)
movq $0x0, -0x28(%rbp)
movq -0x28(%rbp), %rax
movq -0x18(%rbp), %rcx
movq 0x10(%rcx), %rcx
imulq $0x18, -0x20(%rbp), %rdx
addq %rdx, %rcx
cmpq (%rcx), %rax
jae 0x1d86aa
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rax
imulq $0x18, -0x20(%rbp), %rcx
addq %rcx, %rax
movq 0x10(%rax), %rax
imulq $0x28, -0x28(%rbp), %rcx
addq %rcx, %rax
movb 0x18(%rax), %al
shrb $0x7, %al
cmpb $0x0, %al
je 0x1d858d
jmp 0x1d8699
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rax
imulq $0x18, -0x20(%rbp), %rcx
addq %rcx, %rax
movq 0x10(%rax), %rax
imulq $0x28, -0x28(%rbp), %rcx
addq %rcx, %rax
movl 0x8(%rax), %eax
movq %rax, -0x38(%rbp)
movq -0x18(%rbp), %rax
movq 0xc0(%rax), %rax
movq -0x38(%rbp), %rcx
cmpb $0x0, (%rax,%rcx)
je 0x1d85ca
jmp 0x1d8699
movq -0x18(%rbp), %rax
movq 0xf0(%rax), %rax
movq -0x38(%rbp), %rcx
cmpb $0x0, (%rax,%rcx)
jne 0x1d85e4
jmp 0x1d8699
cmpq $0xb07b, -0x8(%rbp)     # imm = 0xB07B
jne 0x1d8636
movq 0x1eb9eb(%rip), %rax    # 0x3c3fe0
movq (%rax), %rdi
movq -0x30(%rbp), %rdx
addq $0x1, %rdx
movq -0x38(%rbp), %rcx
addq $0x1, %rcx
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rax
imulq $0x18, -0x20(%rbp), %rsi
addq %rsi, %rax
movq 0x10(%rax), %rax
imulq $0x28, -0x28(%rbp), %rsi
addq %rsi, %rax
movsd (%rax), %xmm0
leaq 0x1b405d(%rip), %rsi    # 0x38c68c
movb $0x1, %al
callq 0x22a0
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rax
imulq $0x18, -0x20(%rbp), %rcx
addq %rcx, %rax
movq 0x10(%rax), %rax
imulq $0x28, -0x28(%rbp), %rcx
addq %rcx, %rax
movb 0x18(%rax), %cl
andb $0x7f, %cl
orb $-0x80, %cl
movb %cl, 0x18(%rax)
movq -0x18(%rbp), %rdi
movq -0x38(%rbp), %rsi
movq -0x30(%rbp), %rdx
callq 0x1d61d0
movq %rax, -0x40(%rbp)
movq -0x40(%rbp), %rax
movb 0x18(%rax), %cl
andb $0x7f, %cl
orb $-0x80, %cl
movb %cl, 0x18(%rax)
movq -0x18(%rbp), %rax
movq 0x168(%rax), %rcx
addq $0x2, %rcx
movq %rcx, 0x168(%rax)
movq -0x28(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x28(%rbp)
jmp 0x1d8545
jmp 0x1d86ac
movq -0x20(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x20(%rbp)
jmp 0x1d84e9
jmp 0x1d86bf
addq $0x40, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)