static int rle_unpack(unsigned char *src, unsigned char *dest, int len)

{

    unsigned char *ps;

    unsigned char *pd;

    int i, l;



    ps = src;

    pd = dest;

    if (len & 1)

        *pd++ = *ps++;



    len >>= 1;

    i = 0;

    do {

        l = *ps++;

        if (l & 0x80) {

            l = (l & 0x7F) * 2;

            memcpy(pd, ps, l);

            ps += l;

            pd += l;

        } else {

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

                *pd++ = ps[0];

                *pd++ = ps[1];

            }

            ps += 2;

        }

        i += l;

    } while (i < len);



    return (ps - src);

}

static int rle_unpack(unsigned char *src, unsigned char *dest, int len)

{

    unsigned char *ps;

    unsigned char *pd;

    int i, l;



    ps = src;

    pd = dest;

    if (len & 1)

        *pd++ = *ps++;



    len >>= 1;

    i = 0;

    do {

        l = *ps++;

        if (l & 0x80) {

            l = (l & 0x7F) * 2;

            memcpy(pd, ps, l);

            ps += l;

            pd += l;

        } else {

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

                *pd++ = ps[0];

                *pd++ = ps[1];

            }

            ps += 2;

        }

        i += l;

    } while (i < len);



    return (ps - src);

}

static int FUNC_0(unsigned char *VAR_0, unsigned char *VAR_1, int VAR_2)

{

    unsigned char *VAR_3;

    unsigned char *VAR_4;

    int VAR_5, VAR_6;



    VAR_3 = VAR_0;

    VAR_4 = VAR_1;

    if (VAR_2 & 1)

        *VAR_4++ = *VAR_3++;



    VAR_2 >>= 1;

    VAR_5 = 0;

    do {

        VAR_6 = *VAR_3++;

        if (VAR_6 & 0x80) {

            VAR_6 = (VAR_6 & 0x7F) * 2;

            memcpy(VAR_4, VAR_3, VAR_6);

            VAR_3 += VAR_6;

            VAR_4 += VAR_6;

        } else {

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

                *VAR_4++ = VAR_3[0];

                *VAR_4++ = VAR_3[1];

            }

            VAR_3 += 2;

        }

        VAR_5 += VAR_6;

    } while (VAR_5 < VAR_2);



    return (VAR_3 - VAR_0);

}

static int FUNC_0(unsigned char *VAR_0, unsigned char *VAR_1, int VAR_2)
{ unsigned char *VAR_3; unsigned char *VAR_4; int VAR_5, VAR_6; VAR_3 = VAR_0; VAR_4 = VAR_1; if (VAR_2 & 1)
*VAR_4++ = *VAR_3++; VAR_2 >>= 1; VAR_5 = 0; do { VAR_6 = *VAR_3++; if (VAR_6 & 0x80) { VAR_6 = (VAR_6 & 0x7F) * 2; memcpy(VAR_4, VAR_3, VAR_6); VAR_3 += VAR_6; VAR_4 += VAR_6; } else { for (VAR_5 = 0; VAR_5 < VAR_6; VAR_5++) { *VAR_4++ = VAR_3[0]; *VAR_4++ = VAR_3[1]; } VAR_3 += 2; } VAR_5 += VAR_6; } while (VAR_5 < VAR_2); return (VAR_3 - VAR_0); }