static void find_best_state(uint8_t best_state[256][256],

                            const uint8_t one_state[256])

{

    int i, j, k, m;

    double l2tab[256];



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

        l2tab[i] = log2(i / 256.0);



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

        double best_len[256];

        double p = i / 256.0;



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

            best_len[j] = 1 << 30;



        for (j = FFMAX(i - 10, 1); j < FFMIN(i + 11, 256); j++) {

            double occ[256] = { 0 };

            double len      = 0;

            occ[j] = 1.0;

            for (k = 0; k < 256; k++) {

                double newocc[256] = { 0 };

                for (m = 1; m < 256; m++)

                    if (occ[m]) {

                        len -= occ[m] *     (p  * l2tab[m] +

                                        (1 - p) * l2tab[256 - m]);

                    }

                if (len < best_len[k]) {

                    best_len[k]      = len;

                    best_state[i][k] = j;

                }

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

                    if (occ[m]) {

                        newocc[one_state[m]]             += occ[m] * p;

                        newocc[256 - one_state[256 - m]] += occ[m] * (1 - p);

                    }

                memcpy(occ, newocc, sizeof(occ));

            }

        }

    }

}

static void find_best_state(uint8_t best_state[256][256],

                            const uint8_t one_state[256])

{

    int i, j, k, m;

    double l2tab[256];



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

        l2tab[i] = log2(i / 256.0);



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

        double best_len[256];

        double p = i / 256.0;



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

            best_len[j] = 1 << 30;



        for (j = FFMAX(i - 10, 1); j < FFMIN(i + 11, 256); j++) {

            double occ[256] = { 0 };

            double len      = 0;

            occ[j] = 1.0;

            for (k = 0; k < 256; k++) {

                double newocc[256] = { 0 };

                for (m = 1; m < 256; m++)

                    if (occ[m]) {

                        len -= occ[m] *     (p  * l2tab[m] +

                                        (1 - p) * l2tab[256 - m]);

                    }

                if (len < best_len[k]) {

                    best_len[k]      = len;

                    best_state[i][k] = j;

                }

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

                    if (occ[m]) {

                        newocc[one_state[m]]             += occ[m] * p;

                        newocc[256 - one_state[256 - m]] += occ[m] * (1 - p);

                    }

                memcpy(occ, newocc, sizeof(occ));

            }

        }

    }

}

                for (m = 0; m < 256; m++)
static void FUNC_0(uint8_t VAR_0[256][256],

                            const uint8_t VAR_1[256])

{

    int VAR_2, VAR_3, VAR_4, VAR_5;

    double VAR_6[256];



    for (VAR_2 = 1; VAR_2 < 256; VAR_2++)

        VAR_6[VAR_2] = log2(VAR_2 / 256.0);



    for (VAR_2 = 0; VAR_2 < 256; VAR_2++) {

        double VAR_7[256];

        double VAR_8 = VAR_2 / 256.0;



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

            VAR_7[VAR_3] = 1 << 30;



        for (VAR_3 = FFMAX(VAR_2 - 10, 1); VAR_3 < FFMIN(VAR_2 + 11, 256); VAR_3++) {

            double VAR_9[256] = { 0 };

            double VAR_10      = 0;

            VAR_9[VAR_3] = 1.0;

            for (VAR_4 = 0; VAR_4 < 256; VAR_4++) {

                double VAR_11[256] = { 0 };

                for (VAR_5 = 1; VAR_5 < 256; VAR_5++)

                    if (VAR_9[VAR_5]) {

                        VAR_10 -= VAR_9[VAR_5] *     (VAR_8  * VAR_6[VAR_5] +

                                        (1 - VAR_8) * VAR_6[256 - VAR_5]);

                    }

                if (VAR_10 < VAR_7[VAR_4]) {

                    VAR_7[VAR_4]      = VAR_10;

                    VAR_0[VAR_2][VAR_4] = VAR_3;

                }

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

                    if (VAR_9[VAR_5]) {

                        VAR_11[VAR_1[VAR_5]]             += VAR_9[VAR_5] * VAR_8;

                        VAR_11[256 - VAR_1[256 - VAR_5]] += VAR_9[VAR_5] * (1 - VAR_8);

                    }

                memcpy(VAR_9, VAR_11, sizeof(VAR_9));

            }

        }

    }

}

static void FUNC_0(uint8_t VAR_0[256][256],
const uint8_t VAR_1[256])
{ int VAR_2, VAR_3, VAR_4, VAR_5; double VAR_6[256]; for (VAR_2 = 1; VAR_2 < 256; VAR_2++) VAR_6[VAR_2] = log2(VAR_2 / 256.0); for (VAR_2 = 0; VAR_2 < 256; VAR_2++) { double VAR_7[256]; double VAR_8 = VAR_2 / 256.0; for (VAR_3 = 0; VAR_3 < 256; VAR_3++) VAR_7[VAR_3] = 1 << 30; for (VAR_3 = FFMAX(VAR_2 - 10, 1); VAR_3 < FFMIN(VAR_2 + 11, 256); VAR_3++) { double VAR_9[256] = { 0 }; double VAR_10      = 0; VAR_9[VAR_3] = 1.0; for (VAR_4 = 0; VAR_4 < 256; VAR_4++) { double VAR_11[256] = { 0 }; for (VAR_5 = 1; VAR_5 < 256; VAR_5++) if (VAR_9[VAR_5]) { VAR_10 -= VAR_9[VAR_5] *     (VAR_8  * VAR_6[VAR_5] +
(1 - VAR_8) * VAR_6[256 - VAR_5]); } if (VAR_10 < VAR_7[VAR_4]) { VAR_7[VAR_4]      = VAR_10; VAR_0[VAR_2][VAR_4] = VAR_3; } for (VAR_5 = 0; VAR_5 < 256; VAR_5++) if (VAR_9[VAR_5]) { VAR_11[VAR_1[VAR_5]]             += VAR_9[VAR_5] * VAR_8; VAR_11[256 - VAR_1[256 - VAR_5]] += VAR_9[VAR_5] * (1 - VAR_8); } memcpy(VAR_9, VAR_11, sizeof(VAR_9)); } } } }