int av_expr_parse(AVExpr **expr, const char *s,

                  const char * const *const_names,

                  const char * const *func1_names, double (* const *funcs1)(void *, double),

                  const char * const *func2_names, double (* const *funcs2)(void *, double, double),

                  int log_offset, void *log_ctx)

{

    Parser p;

    AVExpr *e = NULL;

    char *w = av_malloc(strlen(s) + 1);

    char *wp = w;

    const char *s0 = s;

    int ret = 0;



    if (!w)

        return AVERROR(ENOMEM);



    while (*s)

        if (!isspace(*s++)) *wp++ = s[-1];

    *wp++ = 0;



    p.class      = &class;

    p.stack_index=100;

    p.s= w;

    p.const_names = const_names;

    p.funcs1      = funcs1;

    p.func1_names = func1_names;

    p.funcs2      = funcs2;

    p.func2_names = func2_names;

    p.log_offset = log_offset;

    p.log_ctx    = log_ctx;



    if ((ret = parse_expr(&e, &p)) < 0)

        goto end;

    if (*p.s) {

        av_log(&p, AV_LOG_ERROR, "Invalid chars '%s' at the end of expression '%s'\n", p.s, s0);

        ret = AVERROR(EINVAL);

        goto end;

    }

    if (!verify_expr(e)) {

        av_expr_free(e);

        ret = AVERROR(EINVAL);

        goto end;

    }

    *expr = e;

end:

    av_free(w);

    return ret;

}

int av_expr_parse(AVExpr **expr, const char *s,

                  const char * const *const_names,

                  const char * const *func1_names, double (* const *funcs1)(void *, double),

                  const char * const *func2_names, double (* const *funcs2)(void *, double, double),

                  int log_offset, void *log_ctx)

{

    Parser p;

    AVExpr *e = NULL;

    char *w = av_malloc(strlen(s) + 1);

    char *wp = w;

    const char *s0 = s;

    int ret = 0;



    if (!w)

        return AVERROR(ENOMEM);



    while (*s)

        if (!isspace(*s++)) *wp++ = s[-1];

    *wp++ = 0;



    p.class      = &class;

    p.stack_index=100;

    p.s= w;

    p.const_names = const_names;

    p.funcs1      = funcs1;

    p.func1_names = func1_names;

    p.funcs2      = funcs2;

    p.func2_names = func2_names;

    p.log_offset = log_offset;

    p.log_ctx    = log_ctx;



    if ((ret = parse_expr(&e, &p)) < 0)

        goto end;

    if (*p.s) {

        av_log(&p, AV_LOG_ERROR, "Invalid chars '%s' at the end of expression '%s'\n", p.s, s0);

        ret = AVERROR(EINVAL);

        goto end;

    }

    if (!verify_expr(e)) {

        av_expr_free(e);

        ret = AVERROR(EINVAL);

        goto end;

    }

    *expr = e;

end:

    av_free(w);

    return ret;

}

VAR_8intVAR_8 VAR_8av_expr_parseVAR_8(VAR_8AVExprVAR_8 **VAR_8VAR_0VAR_8, VAR_8constVAR_8 VAR_8charVAR_8 *VAR_8VAR_1VAR_8,

                  VAR_8constVAR_8 VAR_8charVAR_8 * VAR_8constVAR_8 *VAR_8VAR_2VAR_8,

                  VAR_8constVAR_8 VAR_8charVAR_8 * VAR_8constVAR_8 *VAR_8VAR_3VAR_8, VAR_8doubleVAR_8 (* VAR_8constVAR_8 *VAR_8VAR_4VAR_8)(VAR_8voidVAR_8 *, VAR_8doubleVAR_8),

                  VAR_8constVAR_8 VAR_8charVAR_8 * VAR_8constVAR_8 *VAR_8func2_namesVAR_8, VAR_8doubleVAR_8 (* VAR_8constVAR_8 *VAR_8funcs2VAR_8)(VAR_8voidVAR_8 *, VAR_8doubleVAR_8, VAR_8doubleVAR_8),

                  VAR_8intVAR_8 VAR_8log_offsetVAR_8, VAR_8voidVAR_8 *VAR_8log_ctxVAR_8)

{

    VAR_8ParserVAR_8 VAR_8pVAR_8;

    VAR_8AVExprVAR_8 *VAR_8eVAR_8 = VAR_8NULLVAR_8;

    VAR_8charVAR_8 *VAR_8wVAR_8 = VAR_8av_mallocVAR_8(VAR_8strlenVAR_8(VAR_8VAR_1VAR_8) + VAR_81VAR_8);

    VAR_8charVAR_8 *VAR_8wpVAR_8 = VAR_8wVAR_8;

    VAR_8constVAR_8 VAR_8charVAR_8 *VAR_8s0VAR_8 = VAR_8VAR_1VAR_8;

    VAR_8intVAR_8 VAR_8retVAR_8 = VAR_80VAR_8;



    VAR_8ifVAR_8 (!VAR_8wVAR_8)

        VAR_8returnVAR_8 VAR_8AVERRORVAR_8(VAR_8ENOMEMVAR_8);



    VAR_8whileVAR_8 (*VAR_8VAR_1VAR_8)

        VAR_8ifVAR_8 (!VAR_8isspaceVAR_8(*VAR_8VAR_1VAR_8++)) *VAR_8wpVAR_8++ = VAR_8VAR_1VAR_8[-VAR_81VAR_8];

    *VAR_8wpVAR_8++ = VAR_80VAR_8;



    VAR_8pVAR_8.VAR_8classVAR_8      = &VAR_8classVAR_8;

    VAR_8pVAR_8.VAR_8stack_indexVAR_8=VAR_8100VAR_8;

    VAR_8pVAR_8.VAR_8VAR_1VAR_8= VAR_8wVAR_8;

    VAR_8pVAR_8.VAR_8VAR_2VAR_8 = VAR_8VAR_2VAR_8;

    VAR_8pVAR_8.VAR_8VAR_4VAR_8      = VAR_8VAR_4VAR_8;

    VAR_8pVAR_8.VAR_8VAR_3VAR_8 = VAR_8VAR_3VAR_8;

    VAR_8pVAR_8.VAR_8funcs2VAR_8      = VAR_8funcs2VAR_8;

    VAR_8pVAR_8.VAR_8func2_namesVAR_8 = VAR_8func2_namesVAR_8;

    VAR_8pVAR_8.VAR_8log_offsetVAR_8 = VAR_8log_offsetVAR_8;

    VAR_8pVAR_8.VAR_8log_ctxVAR_8    = VAR_8log_ctxVAR_8;



    VAR_8ifVAR_8 ((VAR_8retVAR_8 = VAR_8parse_exprVAR_8(&VAR_8eVAR_8, &VAR_8pVAR_8)) < VAR_80VAR_8)

        VAR_8gotoVAR_8 VAR_8endVAR_8;

    VAR_8ifVAR_8 (*VAR_8pVAR_8.VAR_8VAR_1VAR_8) {

        VAR_8av_logVAR_8(&VAR_8pVAR_8, VAR_8AV_LOG_ERRORVAR_8, "VAR_8InvalidVAR_8 VAR_8charsVAR_8 '%VAR_8VAR_1VAR_8' VAR_8atVAR_8 VAR_8theVAR_8 VAR_8endVAR_8 VAR_8ofVAR_8 VAR_8expressionVAR_8 '%VAR_8VAR_1VAR_8'\VAR_8nVAR_8", VAR_8pVAR_8.VAR_8VAR_1VAR_8, VAR_8s0VAR_8);

        VAR_8retVAR_8 = VAR_8AVERRORVAR_8(VAR_8EINVALVAR_8);

        VAR_8gotoVAR_8 VAR_8endVAR_8;

    }

    VAR_8ifVAR_8 (!VAR_8verify_exprVAR_8(VAR_8eVAR_8)) {

        VAR_8av_expr_freeVAR_8(VAR_8eVAR_8);

        VAR_8retVAR_8 = VAR_8AVERRORVAR_8(VAR_8EINVALVAR_8);

        VAR_8gotoVAR_8 VAR_8endVAR_8;

    }

    *VAR_8VAR_0VAR_8 = VAR_8eVAR_8;

VAR_8endVAR_8:

    VAR_8av_freeVAR_8(VAR_8wVAR_8);

    VAR_8returnVAR_8 VAR_8retVAR_8;

}

VAR_8intVAR_8 VAR_8av_expr_parseVAR_8(VAR_8AVExprVAR_8 **VAR_8VAR_0VAR_8, VAR_8constVAR_8 VAR_8charVAR_8 *VAR_8VAR_1VAR_8,
VAR_8constVAR_8 VAR_8charVAR_8 * VAR_8constVAR_8 *VAR_8VAR_2VAR_8,
VAR_8constVAR_8 VAR_8charVAR_8 * VAR_8constVAR_8 *VAR_8VAR_3VAR_8, VAR_8doubleVAR_8 (* VAR_8constVAR_8 *VAR_8VAR_4VAR_8)(VAR_8voidVAR_8 *, VAR_8doubleVAR_8),
VAR_8constVAR_8 VAR_8charVAR_8 * VAR_8constVAR_8 *VAR_8func2_namesVAR_8, VAR_8doubleVAR_8 (* VAR_8constVAR_8 *VAR_8funcs2VAR_8)(VAR_8voidVAR_8 *, VAR_8doubleVAR_8, VAR_8doubleVAR_8),
VAR_8intVAR_8 VAR_8log_offsetVAR_8, VAR_8voidVAR_8 *VAR_8log_ctxVAR_8)
{ VAR_8ParserVAR_8 VAR_8pVAR_8; VAR_8AVExprVAR_8 *VAR_8eVAR_8 = VAR_8NULLVAR_8; VAR_8charVAR_8 *VAR_8wVAR_8 = VAR_8av_mallocVAR_8(VAR_8strlenVAR_8(VAR_8VAR_1VAR_8) + VAR_81VAR_8); VAR_8charVAR_8 *VAR_8wpVAR_8 = VAR_8wVAR_8; VAR_8constVAR_8 VAR_8charVAR_8 *VAR_8s0VAR_8 = VAR_8VAR_1VAR_8; VAR_8intVAR_8 VAR_8retVAR_8 = VAR_80VAR_8; VAR_8ifVAR_8 (!VAR_8wVAR_8)
VAR_8returnVAR_8 VAR_8AVERRORVAR_8(VAR_8ENOMEMVAR_8); VAR_8whileVAR_8 (*VAR_8VAR_1VAR_8)
VAR_8ifVAR_8 (!VAR_8isspaceVAR_8(*VAR_8VAR_1VAR_8++)) *VAR_8wpVAR_8++ = VAR_8VAR_1VAR_8[-VAR_81VAR_8]; *VAR_8wpVAR_8++ = VAR_80VAR_8; VAR_8pVAR_8.VAR_8classVAR_8      = &VAR_8classVAR_8; VAR_8pVAR_8.VAR_8stack_indexVAR_8=VAR_8100VAR_8; VAR_8pVAR_8.VAR_8VAR_1VAR_8= VAR_8wVAR_8; VAR_8pVAR_8.VAR_8VAR_2VAR_8 = VAR_8VAR_2VAR_8; VAR_8pVAR_8.VAR_8VAR_4VAR_8      = VAR_8VAR_4VAR_8; VAR_8pVAR_8.VAR_8VAR_3VAR_8 = VAR_8VAR_3VAR_8; VAR_8pVAR_8.VAR_8funcs2VAR_8      = VAR_8funcs2VAR_8; VAR_8pVAR_8.VAR_8func2_namesVAR_8 = VAR_8func2_namesVAR_8; VAR_8pVAR_8.VAR_8log_offsetVAR_8 = VAR_8log_offsetVAR_8; VAR_8pVAR_8.VAR_8log_ctxVAR_8    = VAR_8log_ctxVAR_8; VAR_8ifVAR_8 ((VAR_8retVAR_8 = VAR_8parse_exprVAR_8(&VAR_8eVAR_8, &VAR_8pVAR_8)) < VAR_80VAR_8)
VAR_8gotoVAR_8 VAR_8endVAR_8; VAR_8ifVAR_8 (*VAR_8pVAR_8.VAR_8VAR_1VAR_8) { VAR_8av_logVAR_8(&VAR_8pVAR_8, VAR_8AV_LOG_ERRORVAR_8, "VAR_8InvalidVAR_8 VAR_8charsVAR_8 '%VAR_8VAR_1VAR_8' VAR_8atVAR_8 VAR_8theVAR_8 VAR_8endVAR_8 VAR_8ofVAR_8 VAR_8expressionVAR_8 '%VAR_8VAR_1VAR_8'\VAR_8nVAR_8", VAR_8pVAR_8.VAR_8VAR_1VAR_8, VAR_8s0VAR_8); VAR_8retVAR_8 = VAR_8AVERRORVAR_8(VAR_8EINVALVAR_8); VAR_8gotoVAR_8 VAR_8endVAR_8; } VAR_8ifVAR_8 (!VAR_8verify_exprVAR_8(VAR_8eVAR_8)) { VAR_8av_expr_freeVAR_8(VAR_8eVAR_8); VAR_8retVAR_8 = VAR_8AVERRORVAR_8(VAR_8EINVALVAR_8); VAR_8gotoVAR_8 VAR_8endVAR_8; } *VAR_8VAR_0VAR_8 = VAR_8eVAR_8; VAR_8endVAR_8:
VAR_8av_freeVAR_8(VAR_8wVAR_8); VAR_8returnVAR_8 VAR_8retVAR_8; }