static int decode_hextile(VmncContext *c, uint8_t* dst, GetByteContext *gb,

                          int w, int h, int stride)

{

    int i, j, k;

    int bg = 0, fg = 0, rects, color, flags, xy, wh;

    const int bpp = c->bpp2;

    uint8_t *dst2;

    int bw = 16, bh = 16;



    for (j = 0; j < h; j += 16) {

        dst2 = dst;

        bw   = 16;

        if (j + 16 > h)

            bh = h - j;

        for (i = 0; i < w; i += 16, dst2 += 16 * bpp) {

            if (bytestream2_get_bytes_left(gb) <= 0) {

                av_log(c->avctx, AV_LOG_ERROR, "Premature end of data!\n");

                return AVERROR_INVALIDDATA;

            }

            if (i + 16 > w)

                bw = w - i;

            flags = bytestream2_get_byte(gb);

            if (flags & HT_RAW) {

                if (bytestream2_get_bytes_left(gb) < bw * bh * bpp) {

                    av_log(c->avctx, AV_LOG_ERROR, "Premature end of data!\n");

                    return AVERROR_INVALIDDATA;

                }

                paint_raw(dst2, bw, bh, gb, bpp, c->bigendian, stride);

            } else {

                if (flags & HT_BKG)

                    bg = vmnc_get_pixel(gb, bpp, c->bigendian);

                if (flags & HT_FG)

                    fg = vmnc_get_pixel(gb, bpp, c->bigendian);

                rects = 0;

                if (flags & HT_SUB)

                    rects = bytestream2_get_byte(gb);

                color = !!(flags & HT_CLR);



                paint_rect(dst2, 0, 0, bw, bh, bg, bpp, stride);



                if (bytestream2_get_bytes_left(gb) < rects * (color * bpp + 2)) {

                    av_log(c->avctx, AV_LOG_ERROR, "Premature end of data!\n");

                    return AVERROR_INVALIDDATA;

                }

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

                    if (color)

                        fg = vmnc_get_pixel(gb, bpp, c->bigendian);

                    xy = bytestream2_get_byte(gb);

                    wh = bytestream2_get_byte(gb);

                    paint_rect(dst2, xy >> 4, xy & 0xF,

                               (wh>>4)+1, (wh & 0xF)+1, fg, bpp, stride);

                }

            }

        }

        dst += stride * 16;

    }

    return 0;

}

static int decode_hextile(VmncContext *c, uint8_t* dst, GetByteContext *gb,

                          int w, int h, int stride)

{

    int i, j, k;

    int bg = 0, fg = 0, rects, color, flags, xy, wh;

    const int bpp = c->bpp2;

    uint8_t *dst2;

    int bw = 16, bh = 16;



    for (j = 0; j < h; j += 16) {

        dst2 = dst;

        bw   = 16;

        if (j + 16 > h)

            bh = h - j;

        for (i = 0; i < w; i += 16, dst2 += 16 * bpp) {

            if (bytestream2_get_bytes_left(gb) <= 0) {

                av_log(c->avctx, AV_LOG_ERROR, "Premature end of data!\n");

                return AVERROR_INVALIDDATA;

            }

            if (i + 16 > w)

                bw = w - i;

            flags = bytestream2_get_byte(gb);

            if (flags & HT_RAW) {

                if (bytestream2_get_bytes_left(gb) < bw * bh * bpp) {

                    av_log(c->avctx, AV_LOG_ERROR, "Premature end of data!\n");

                    return AVERROR_INVALIDDATA;

                }

                paint_raw(dst2, bw, bh, gb, bpp, c->bigendian, stride);

            } else {

                if (flags & HT_BKG)

                    bg = vmnc_get_pixel(gb, bpp, c->bigendian);

                if (flags & HT_FG)

                    fg = vmnc_get_pixel(gb, bpp, c->bigendian);

                rects = 0;

                if (flags & HT_SUB)

                    rects = bytestream2_get_byte(gb);

                color = !!(flags & HT_CLR);



                paint_rect(dst2, 0, 0, bw, bh, bg, bpp, stride);



                if (bytestream2_get_bytes_left(gb) < rects * (color * bpp + 2)) {

                    av_log(c->avctx, AV_LOG_ERROR, "Premature end of data!\n");

                    return AVERROR_INVALIDDATA;

                }

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

                    if (color)

                        fg = vmnc_get_pixel(gb, bpp, c->bigendian);

                    xy = bytestream2_get_byte(gb);

                    wh = bytestream2_get_byte(gb);

                    paint_rect(dst2, xy >> 4, xy & 0xF,

                               (wh>>4)+1, (wh & 0xF)+1, fg, bpp, stride);

                }

            }

        }

        dst += stride * 16;

    }

    return 0;

}

                    paint_rect(dst2, xy >> 4, xy & 0xF,                                (wh>>4)+1, (wh & 0xF)+1, fg, bpp, stride);
static int FUNC_0(VmncContext *VAR_0, uint8_t* VAR_1, GetByteContext *VAR_2,

                          int VAR_3, int VAR_4, int VAR_5)

{

    int VAR_6, VAR_7, VAR_8;

    int VAR_9 = 0, VAR_10 = 0, VAR_11, VAR_12, VAR_13, VAR_14, VAR_15;

    const int VAR_16 = VAR_0->bpp2;

    uint8_t *dst2;

    int VAR_17 = 16, VAR_18 = 16;



    for (VAR_7 = 0; VAR_7 < VAR_4; VAR_7 += 16) {

        dst2 = VAR_1;

        VAR_17   = 16;

        if (VAR_7 + 16 > VAR_4)

            VAR_18 = VAR_4 - VAR_7;

        for (VAR_6 = 0; VAR_6 < VAR_3; VAR_6 += 16, dst2 += 16 * VAR_16) {

            if (bytestream2_get_bytes_left(VAR_2) <= 0) {

                av_log(VAR_0->avctx, AV_LOG_ERROR, "Premature end of data!\n");

                return AVERROR_INVALIDDATA;

            }

            if (VAR_6 + 16 > VAR_3)

                VAR_17 = VAR_3 - VAR_6;

            VAR_13 = bytestream2_get_byte(VAR_2);

            if (VAR_13 & HT_RAW) {

                if (bytestream2_get_bytes_left(VAR_2) < VAR_17 * VAR_18 * VAR_16) {

                    av_log(VAR_0->avctx, AV_LOG_ERROR, "Premature end of data!\n");

                    return AVERROR_INVALIDDATA;

                }

                paint_raw(dst2, VAR_17, VAR_18, VAR_2, VAR_16, VAR_0->bigendian, VAR_5);

            } else {

                if (VAR_13 & HT_BKG)

                    VAR_9 = vmnc_get_pixel(VAR_2, VAR_16, VAR_0->bigendian);

                if (VAR_13 & HT_FG)

                    VAR_10 = vmnc_get_pixel(VAR_2, VAR_16, VAR_0->bigendian);

                VAR_11 = 0;

                if (VAR_13 & HT_SUB)

                    VAR_11 = bytestream2_get_byte(VAR_2);

                VAR_12 = !!(VAR_13 & HT_CLR);



                paint_rect(dst2, 0, 0, VAR_17, VAR_18, VAR_9, VAR_16, VAR_5);



                if (bytestream2_get_bytes_left(VAR_2) < VAR_11 * (VAR_12 * VAR_16 + 2)) {

                    av_log(VAR_0->avctx, AV_LOG_ERROR, "Premature end of data!\n");

                    return AVERROR_INVALIDDATA;

                }

                for (VAR_8 = 0; VAR_8 < VAR_11; VAR_8++) {

                    if (VAR_12)

                        VAR_10 = vmnc_get_pixel(VAR_2, VAR_16, VAR_0->bigendian);

                    VAR_14 = bytestream2_get_byte(VAR_2);

                    VAR_15 = bytestream2_get_byte(VAR_2);

                    paint_rect(dst2, VAR_14 >> 4, VAR_14 & 0xF,

                               (VAR_15>>4)+1, (VAR_15 & 0xF)+1, VAR_10, VAR_16, VAR_5);

                }

            }

        }

        VAR_1 += VAR_5 * 16;

    }

    return 0;

}

static int FUNC_0(VmncContext *VAR_0, uint8_t* VAR_1, GetByteContext *VAR_2,
int VAR_3, int VAR_4, int VAR_5)
{ int VAR_6, VAR_7, VAR_8; int VAR_9 = 0, VAR_10 = 0, VAR_11, VAR_12, VAR_13, VAR_14, VAR_15; const int VAR_16 = VAR_0->bpp2; uint8_t *dst2; int VAR_17 = 16, VAR_18 = 16; for (VAR_7 = 0; VAR_7 < VAR_4; VAR_7 += 16) { dst2 = VAR_1; VAR_17   = 16; if (VAR_7 + 16 > VAR_4)
VAR_18 = VAR_4 - VAR_7; for (VAR_6 = 0; VAR_6 < VAR_3; VAR_6 += 16, dst2 += 16 * VAR_16) { if (bytestream2_get_bytes_left(VAR_2) <= 0) { av_log(VAR_0->avctx, AV_LOG_ERROR, "Premature end of data!\n"); return AVERROR_INVALIDDATA; } if (VAR_6 + 16 > VAR_3)
VAR_17 = VAR_3 - VAR_6; VAR_13 = bytestream2_get_byte(VAR_2); if (VAR_13 & HT_RAW) { if (bytestream2_get_bytes_left(VAR_2) < VAR_17 * VAR_18 * VAR_16) { av_log(VAR_0->avctx, AV_LOG_ERROR, "Premature end of data!\n"); return AVERROR_INVALIDDATA; } paint_raw(dst2, VAR_17, VAR_18, VAR_2, VAR_16, VAR_0->bigendian, VAR_5); } else { if (VAR_13 & HT_BKG)
VAR_9 = vmnc_get_pixel(VAR_2, VAR_16, VAR_0->bigendian); if (VAR_13 & HT_FG)
VAR_10 = vmnc_get_pixel(VAR_2, VAR_16, VAR_0->bigendian); VAR_11 = 0; if (VAR_13 & HT_SUB)
VAR_11 = bytestream2_get_byte(VAR_2); VAR_12 = !!(VAR_13 & HT_CLR); paint_rect(dst2, 0, 0, VAR_17, VAR_18, VAR_9, VAR_16, VAR_5); if (bytestream2_get_bytes_left(VAR_2) < VAR_11 * (VAR_12 * VAR_16 + 2)) { av_log(VAR_0->avctx, AV_LOG_ERROR, "Premature end of data!\n"); return AVERROR_INVALIDDATA; } for (VAR_8 = 0; VAR_8 < VAR_11; VAR_8++) { if (VAR_12)
VAR_10 = vmnc_get_pixel(VAR_2, VAR_16, VAR_0->bigendian); VAR_14 = bytestream2_get_byte(VAR_2); VAR_15 = bytestream2_get_byte(VAR_2); paint_rect(dst2, VAR_14 >> 4, VAR_14 & 0xF,
(VAR_15>>4)+1, (VAR_15 & 0xF)+1, VAR_10, VAR_16, VAR_5); } } } VAR_1 += VAR_5 * 16; } return 0; }