// File: chhylp123[P]hifiasm/hic.cpp
// Function: get_trans_weight_advance(ha_ug_index const*, unsigned long, trans_idx*)
inline double get_trans_weight_advance(const ha_ug_index* idx, uint64_t x, trans_idx* dis)
{
    long double rate = 0;

    ///if(x == (uint64_t)-1) x = dis->med;
    if(x != (uint64_t)-1)
    {
        if(x < dis->max)
        {
            uint64_t i;
            for (i = 0; i < dis->n; i++)
            {
                if(x < dis->a[i].end && x >= dis->a[i].beg) break;
            }
            if(i < dis->n)
            {
                rate = ((double)(dis->a[i].cnt_1))/((double)(dis->a[i].cnt_0 + dis->a[i].cnt_1));
            }
            else
            {
                rate = get_trans(idx, x);
            } 
        }
        else
        {
            rate = get_trans(idx, x);
        }
    }
    else
    {
        // rate = 0.2;
        rate = 0.4;
    }

    
    if(rate < 0) rate = 0;
    rate += OFFSET_RATE;
    if(rate > 0.5) rate = 0.5;
    rate -= OFFSET_SECOND_RATE; //[OFFSET_RATE - OFFSET_SECOND_RATE, 0.5 - OFFSET_SECOND_RATE]

    long double w = logl((1/rate)-1)*SCALL;
    if(w < OFFSET_RATE_MIN_W) w = OFFSET_RATE_MIN_W;
    if(w > OFFSET_RATE_MAX_W) w = OFFSET_RATE_MAX_W;
    return w;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x80, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
fldz
fstpt -0x30(%rbp)
cmpq $-0x1, -0x10(%rbp)
je 0x2149e0
movq -0x10(%rbp), %rax
movq -0x18(%rbp), %rcx
cmpq 0x18(%rcx), %rax
jae 0x2149c6
movq $0x0, -0x38(%rbp)
movq -0x38(%rbp), %rax
movq -0x18(%rbp), %rcx
cmpq 0x8(%rcx), %rax
jae 0x214932
movq -0x10(%rbp), %rax
movq -0x18(%rbp), %rcx
movq (%rcx), %rcx
imulq $0x28, -0x38(%rbp), %rdx
addq %rdx, %rcx
cmpq 0x8(%rcx), %rax
jae 0x214922
movq -0x10(%rbp), %rax
movq -0x18(%rbp), %rcx
movq (%rcx), %rcx
imulq $0x28, -0x38(%rbp), %rdx
addq %rdx, %rcx
cmpq (%rcx), %rax
jb 0x214922
jmp 0x214932
jmp 0x214924
movq -0x38(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x38(%rbp)
jmp 0x2148e1
movq -0x38(%rbp), %rax
movq -0x18(%rbp), %rcx
cmpq 0x8(%rcx), %rax
jae 0x2149ac
movq -0x18(%rbp), %rax
movq (%rax), %rcx
movq -0x38(%rbp), %rax
leaq (%rax,%rax,4), %rdx
movq 0x18(%rcx,%rdx,8), %rax
movq 0x20(%rcx,%rdx,8), %rcx
movq %rcx, %xmm0
movaps 0x16d6ab(%rip), %xmm3   # 0x382010
punpckldq %xmm3, %xmm0    # xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1]
movapd 0x16d6af(%rip), %xmm2   # 0x382020
subpd %xmm2, %xmm0
movaps %xmm0, %xmm1
unpckhpd %xmm0, %xmm0            # xmm0 = xmm0[1,1]
addsd %xmm1, %xmm0
addq %rcx, %rax
movq %rax, %xmm1
punpckldq %xmm3, %xmm1    # xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1]
subpd %xmm2, %xmm1
movaps %xmm1, %xmm2
unpckhpd %xmm1, %xmm1            # xmm1 = xmm1[1,1]
addsd %xmm2, %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, -0x68(%rbp)
fldl -0x68(%rbp)
fstpt -0x30(%rbp)
jmp 0x2149c4
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
callq 0x214d00
movsd %xmm0, -0x60(%rbp)
fldl -0x60(%rbp)
fstpt -0x30(%rbp)
jmp 0x2149de
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
callq 0x214d00
movsd %xmm0, -0x58(%rbp)
fldl -0x58(%rbp)
fstpt -0x30(%rbp)
jmp 0x2149e9
fldl 0x16d852(%rip)          # 0x382238
fstpt -0x30(%rbp)
fldt -0x30(%rbp)
fldz
fucompi %st(1), %st
fstp %st(0)
jbe 0x2149fb
jmp 0x2149f6
fldz
fstpt -0x30(%rbp)
fldt -0x30(%rbp)
fldl 0x17745c(%rip)          # 0x38be60
faddp %st, %st(1)
fstpt -0x30(%rbp)
fldt -0x30(%rbp)
flds 0x16a666(%rip)          # 0x37f078
fxch %st(1)
fucompi %st(1), %st
fstp %st(0)
jbe 0x214a25
jmp 0x214a1c
flds 0x16a656(%rip)          # 0x37f078
fstpt -0x30(%rbp)
fldt -0x30(%rbp)
fldl 0x17745a(%rip)          # 0x38be88
faddp %st, %st(1)
fstpt -0x30(%rbp)
fldt -0x30(%rbp)
fld1
fdiv %st, %st(1)
fsubrp %st, %st(1)
movq %rsp, %rax
fstpt (%rax)
callq 0x20d0
flds 0x177470(%rip)          # 0x38bebc
fmulp %st, %st(1)
fstpt -0x50(%rbp)
fldt -0x50(%rbp)
fldl 0x177436(%rip)          # 0x38be90
fucompi %st(1), %st
fstp %st(0)
jbe 0x214a6b
jmp 0x214a62
fldl 0x177428(%rip)          # 0x38be90
fstpt -0x50(%rbp)
fldt -0x50(%rbp)
fldl 0x177424(%rip)          # 0x38be98
fxch %st(1)
fucompi %st(1), %st
fstp %st(0)
jbe 0x214a87
jmp 0x214a7e
fldl 0x177414(%rip)          # 0x38be98
fstpt -0x50(%rbp)
fldt -0x50(%rbp)
fstpl -0x70(%rbp)
movsd -0x70(%rbp), %xmm0
addq $0x80, %rsp
popq %rbp
retq
nopl (%rax,%rax)