void ff_build_rac_states(RangeCoder *c, int factor, int max_p){

    const int64_t one= 1LL<<32;

    int64_t p;

    int last_p8, p8, i;



    memset(c->zero_state, 0, sizeof(c->zero_state));

    memset(c-> one_state, 0, sizeof(c-> one_state));



#if 0

    for(i=1; i<256; i++){

        if(c->one_state[i])

            continue;



        p= (i*one + 128) >> 8;

        last_p8= i;

        for(;;){

            p+= ((one-p)*factor + one/2) >> 32;

            p8= (256*p + one/2) >> 32; //FIXME try without the one

            if(p8 <= last_p8) p8= last_p8+1;

            if(p8 > max_p) p8= max_p;

            if(p8 < last_p8)

                break;

            c->one_state[last_p8]=     p8;

            if(p8 == last_p8)

                break;

            last_p8= p8;

        }

    }

#endif

#if 1

    last_p8= 0;

    p= one/2;

    for(i=0; i<128; i++){

        p8= (256*p + one/2) >> 32; //FIXME try without the one

        if(p8 <= last_p8) p8= last_p8+1;

        if(last_p8 && last_p8<256 && p8<=max_p)

            c->one_state[last_p8]= p8;



        p+= ((one-p)*factor + one/2) >> 32;

        last_p8= p8;

    }

#endif

    for(i=256-max_p; i<=max_p; i++){

        if(c->one_state[i])

            continue;



        p= (i*one + 128) >> 8;

        p+= ((one-p)*factor + one/2) >> 32;

        p8= (256*p + one/2) >> 32; //FIXME try without the one

        if(p8 <= i) p8= i+1;

        if(p8 > max_p) p8= max_p;

        c->one_state[    i]=     p8;

    }



    for(i=0; i<256; i++)

        c->zero_state[i]= 256-c->one_state[256-i];

#if 0

    for(i=0; i<256; i++)

        av_log(NULL, AV_LOG_DEBUG, "%3d %3d\n", i, c->one_state[i]);

#endif

}

void ff_build_rac_states(RangeCoder *c, int factor, int max_p){

    const int64_t one= 1LL<<32;

    int64_t p;

    int last_p8, p8, i;



    memset(c->zero_state, 0, sizeof(c->zero_state));

    memset(c-> one_state, 0, sizeof(c-> one_state));



#if 0

    for(i=1; i<256; i++){

        if(c->one_state[i])

            continue;



        p= (i*one + 128) >> 8;

        last_p8= i;

        for(;;){

            p+= ((one-p)*factor + one/2) >> 32;

            p8= (256*p + one/2) >> 32; 

            if(p8 <= last_p8) p8= last_p8+1;

            if(p8 > max_p) p8= max_p;

            if(p8 < last_p8)

                break;

            c->one_state[last_p8]=     p8;

            if(p8 == last_p8)

                break;

            last_p8= p8;

        }

    }

#endif

#if 1

    last_p8= 0;

    p= one/2;

    for(i=0; i<128; i++){

        p8= (256*p + one/2) >> 32; 

        if(p8 <= last_p8) p8= last_p8+1;

        if(last_p8 && last_p8<256 && p8<=max_p)

            c->one_state[last_p8]= p8;



        p+= ((one-p)*factor + one/2) >> 32;

        last_p8= p8;

    }

#endif

    for(i=256-max_p; i<=max_p; i++){

        if(c->one_state[i])

            continue;



        p= (i*one + 128) >> 8;

        p+= ((one-p)*factor + one/2) >> 32;

        p8= (256*p + one/2) >> 32; 

        if(p8 <= i) p8= i+1;

        if(p8 > max_p) p8= max_p;

        c->one_state[    i]=     p8;

    }



    for(i=0; i<256; i++)

        c->zero_state[i]= 256-c->one_state[256-i];

#if 0

    for(i=0; i<256; i++)

        av_log(NULL, AV_LOG_DEBUG, "%3d %3d\n", i, c->one_state[i]);

#endif

}

void FUNC_0(RangeCoder *VAR_0, int VAR_1, int VAR_2){

    const int64_t VAR_3= 1LL<<32;

    int64_t p;

    int VAR_4, VAR_5, VAR_6;



    memset(VAR_0->zero_state, 0, sizeof(VAR_0->zero_state));

    memset(VAR_0-> one_state, 0, sizeof(VAR_0-> one_state));



#if 0

    for(VAR_6=1; VAR_6<256; VAR_6++){

        if(VAR_0->one_state[VAR_6])

            continue;



        p= (VAR_6*VAR_3 + 128) >> 8;

        VAR_4= VAR_6;

        for(;;){

            p+= ((VAR_3-p)*VAR_1 + VAR_3/2) >> 32;

            VAR_5= (256*p + VAR_3/2) >> 32; 

            if(VAR_5 <= VAR_4) VAR_5= VAR_4+1;

            if(VAR_5 > VAR_2) VAR_5= VAR_2;

            if(VAR_5 < VAR_4)

                break;

            VAR_0->one_state[VAR_4]=     VAR_5;

            if(VAR_5 == VAR_4)

                break;

            VAR_4= VAR_5;

        }

    }

#endif

#if 1

    VAR_4= 0;

    p= VAR_3/2;

    for(VAR_6=0; VAR_6<128; VAR_6++){

        VAR_5= (256*p + VAR_3/2) >> 32; 

        if(VAR_5 <= VAR_4) VAR_5= VAR_4+1;

        if(VAR_4 && VAR_4<256 && VAR_5<=VAR_2)

            VAR_0->one_state[VAR_4]= VAR_5;



        p+= ((VAR_3-p)*VAR_1 + VAR_3/2) >> 32;

        VAR_4= VAR_5;

    }

#endif

    for(VAR_6=256-VAR_2; VAR_6<=VAR_2; VAR_6++){

        if(VAR_0->one_state[VAR_6])

            continue;



        p= (VAR_6*VAR_3 + 128) >> 8;

        p+= ((VAR_3-p)*VAR_1 + VAR_3/2) >> 32;

        VAR_5= (256*p + VAR_3/2) >> 32; 

        if(VAR_5 <= VAR_6) VAR_5= VAR_6+1;

        if(VAR_5 > VAR_2) VAR_5= VAR_2;

        VAR_0->one_state[    VAR_6]=     VAR_5;

    }



    for(VAR_6=0; VAR_6<256; VAR_6++)

        VAR_0->zero_state[VAR_6]= 256-VAR_0->one_state[256-VAR_6];

#if 0

    for(VAR_6=0; VAR_6<256; VAR_6++)

        av_log(NULL, AV_LOG_DEBUG, "%3d %3d\n", VAR_6, VAR_0->one_state[VAR_6]);

#endif

}

void FUNC_0(RangeCoder *VAR_0, int VAR_1, int VAR_2){ const int64_t VAR_3= 1LL<<32; int64_t p; int VAR_4, VAR_5, VAR_6; memset(VAR_0->zero_state, 0, sizeof(VAR_0->zero_state)); memset(VAR_0-> one_state, 0, sizeof(VAR_0-> one_state)); #if 0
for(VAR_6=1; VAR_6<256; VAR_6++){ if(VAR_0->one_state[VAR_6])
continue; p= (VAR_6*VAR_3 + 128) >> 8; VAR_4= VAR_6; for(;;){ p+= ((VAR_3-p)*VAR_1 + VAR_3/2) >> 32; VAR_5= (256*p + VAR_3/2) >> 32; if(VAR_5 <= VAR_4) VAR_5= VAR_4+1; if(VAR_5 > VAR_2) VAR_5= VAR_2; if(VAR_5 < VAR_4)
break; VAR_0->one_state[VAR_4]=     VAR_5; if(VAR_5 == VAR_4)
break; VAR_4= VAR_5; } } #endif
#if 1
VAR_4= 0; p= VAR_3/2; for(VAR_6=0; VAR_6<128; VAR_6++){ VAR_5= (256*p + VAR_3/2) >> 32; if(VAR_5 <= VAR_4) VAR_5= VAR_4+1; if(VAR_4 && VAR_4<256 && VAR_5<=VAR_2)
VAR_0->one_state[VAR_4]= VAR_5; p+= ((VAR_3-p)*VAR_1 + VAR_3/2) >> 32; VAR_4= VAR_5; } #endif
for(VAR_6=256-VAR_2; VAR_6<=VAR_2; VAR_6++){ if(VAR_0->one_state[VAR_6])
continue; p= (VAR_6*VAR_3 + 128) >> 8; p+= ((VAR_3-p)*VAR_1 + VAR_3/2) >> 32; VAR_5= (256*p + VAR_3/2) >> 32; if(VAR_5 <= VAR_6) VAR_5= VAR_6+1; if(VAR_5 > VAR_2) VAR_5= VAR_2; VAR_0->one_state[    VAR_6]=     VAR_5; } for(VAR_6=0; VAR_6<256; VAR_6++) VAR_0->zero_state[VAR_6]= 256-VAR_0->one_state[256-VAR_6]; #if 0
for(VAR_6=0; VAR_6<256; VAR_6++) av_log(NULL, AV_LOG_DEBUG, "%3d %3d\n", VAR_6, VAR_0->one_state[VAR_6]); #endif
}