// File: /workspace/github_c_makefile_star2_O2/johsteffens[P]beth/xoico/src/xoico.xo.c
// Function: xoico_group_s_parse
er_t xoico_group_s_parse( xoico_group_s* o, const xoico_host* host, bl_t parse_block, x_source* source )
{
    // xoico_group.x:454:1
    BLM_INIT_LEVEL(0);
    xoico_compiler_s* compiler = o->compiler;
    xoico_group_source_stack_s* stack = ((xoico_group_source_stack_s*)BLM_LEVEL_T_PUSH(0,xoico_group_source_stack_s,xoico_group_source_stack_s_create()));
    x_array_push_d(((x_array*)(stack)),((x_inst*)(((x_source*)bcore_fork(source)) )));
    
    sc_t group_termination = NULL;
    
    if( !o->source_point )
    {
        x_source_point_s_setup_from_source(BCORE_PASS_CREATE(x_source_point_s,o->source_point),source );
        o->pre_hash = bcore_tp_init();
        if( !o->tp_name ) o->tp_name = xoico_compiler_s_entypeof(compiler,o->st_name.sc );
    }
    
    if( parse_block ) // this group is nested in another group, the group body is enclosed in { ... }
    {
        BLM_TRY(x_source_parse_fa(source," {" ))
        group_termination = " #?'}'";
    }
    else if( x_source_parse_bl(source," #?'#ifdef XOILA_SECTION'" ) ) // this group is root
    {
        group_termination = " #?'#endif'";
    }
    
    bl_t extend_stump = false;
    
    while
    (
        stack->size >= 2 ||
        ( group_termination ? !x_source_parse_bl(source,group_termination ) : !x_source_eos(source) )
    )
    {
        if( x_source_eos(source) )
        {
            if( stack->size >= 2 )
            {
                x_source_a_attach( &(stack->data[ stack->size - 1 ] ), (x_source*)( NULL));
                source = stack->data[ stack->size - 2 ];
                x_array_set_size(((x_array*)(stack)),stack->size - 1 );
            }
            else if( group_termination )
            {
                BLM_RETURNV(er_t, x_source_parse_error_fa(source,"Unexpected end of file." ))
            }
            else
            {
                break;
            }
        }
        else if( x_source_parse_bl(source," #?w'stamp' " ) )
        {BLM_INIT_LEVEL(3);
            xoico_stamp_s* stamp = ((xoico_stamp_s*)BLM_LEVEL_T_PUSH(3,xoico_stamp_s,xoico_stamp_s_create()));
            stamp->group = o;
            BLM_TRY(xoico_stamp_s_parse(stamp,((const xoico_host*)(o)), source ))
            BLM_TRY(xoico_stamp_s_push_inexpandable_funcs(stamp))
            BLM_TRY(xoico_compiler_s_register_item(compiler,xoico_group_s_push_item_d(o,((xoico*)(((xoico_stamp_s*)bcore_fork(stamp)) ))) ))
        BLM_DOWN();}
    
        /// stumps are inexpandable stamps. They can be used as template.
        else if( x_source_parse_bl(source," #?w'stump' " ) )
        {BLM_INIT_LEVEL(3);
            xoico_stamp_s* stump = ((xoico_stamp_s*)BLM_LEVEL_T_PUSH(3,xoico_stamp_s,xoico_stamp_s_create()));
            stump->group = o;
            BLM_TRY(xoico_stamp_s_parse(stump,((const xoico_host*)(o)), source ))
            //stump.make_funcs_overloadable();
            BLM_TRY(xoico_compiler_s_register_item(compiler,((const xoico*)(stump ))))
            BLM_TRY(xoico_compiler_s_life_a_push(compiler,((bcore_inst*)(((xoico_stamp_s*)bcore_fork(stump)) ))))
            if( extend_stump )
            {
                o->extending_stamp = stump;
                extend_stump = false;
            }
        BLM_DOWN();}
        else if( x_source_parse_bl(source," #?w'signature' " ) )
        {BLM_INIT_LEVEL(3);
            xoico_signature_s* signature = ((xoico_signature_s*)BLM_LEVEL_T_PUSH(3,xoico_signature_s,xoico_signature_s_create()));
            BLM_TRY(xoico_signature_s_parse(signature,((const xoico_host*)(o)), source ))
            BLM_TRY(x_source_parse_fa(source," ; " ))
            BLM_TRY(xoico_compiler_s_register_item(compiler,xoico_group_s_push_item_d(o,((xoico*)(((xoico_signature_s*)bcore_fork(signature)) ))) ))
        BLM_DOWN();}
        else if( x_source_parse_bl(source," #?w'body' " ) )
        {BLM_INIT_LEVEL(3);
            xoico_body_s* body = ((xoico_body_s*)BLM_LEVEL_T_PUSH(3,xoico_body_s,xoico_body_s_create()));
            st_s body_name;BLM_T_INIT_SPUSH(st_s, &body_name);;
            BLM_TRY(xoico_group_s_parse_name_st(o,source,&( body_name )))
            if( body_name.size == 0 ) BLM_RETURNV(er_t, x_source_parse_error_fa(source,"Body name expected." ))
            body->name = xoico_host_a_entypeof(host,body_name.sc );
    
            BLM_TRY(xoico_body_s_parse(body,((const xoico_host*)(o)), source ))
    
            BLM_TRY(x_source_parse_fa(source," #-?';' " )) // closing semicolon is optional
            BLM_TRY(xoico_compiler_s_register_item(compiler,xoico_group_s_push_item_d(o,((xoico*)(((xoico_body_s*)bcore_fork(body)) ))) ))
        BLM_DOWN();}
        else if( x_source_parse_bl(source," #?w'feature' " ) )
        {BLM_INIT_LEVEL(3);
            xoico_feature_s* feature = ((xoico_feature_s*)BLM_LEVEL_T_PUSH(3,xoico_feature_s,xoico_feature_s_create()));
            feature->group = o;
            BLM_TRY(xoico_feature_s_parse(feature,((const xoico_host*)(o)), source ))
            BLM_TRY(xoico_compiler_s_register_item(compiler,xoico_group_s_push_item_d(o,((xoico*)(((xoico_feature_s*)bcore_fork(feature)) ))) ))
            bcore_hmap_tpvd_s_set(&(o->hmap_feature),feature->signature.name, ( vd_t )feature );
            {const xoico_funcs_s* __a=&(feature->funcs_return_to_group );if(__a)for(sz_t __i=0;__i<__a->size;__i++){xoico_func_s* func=__a->data[__i]; x_array_push_d(((x_array*)(&(o->funcs))),((x_inst*)(((xoico_func_s*)bcore_fork(func)) )));}}
            x_array_clear(((x_array*)(&(feature->funcs_return_to_group))));
        BLM_DOWN();}
        else if( x_source_parse_bl(source," #?w'func' " ) )
        {
            bl_t is_group_function = true;
            if( x_source_parse_bl(source," #=?'('" ) )
            {BLM_INIT_LEVEL(4);
                sz_t index = x_source_get_index(source);
                BLM_TRY(x_source_parse_fa(source,"(" ))
                st_s* stamp_name = ((st_s*)BLM_LEVEL_T_PUSH(4,st_s,st_s_create()));
                BLM_TRY(xoico_group_s_parse_name_st(o,source, stamp_name ))
                if( x_source_parse_bl(source," #?')'" ) )
                {
                    if( !st_s_ends_in_sc(stamp_name,"_s" ) ) BLM_RETURNV(er_t, x_source_parse_error_fa(source,"Stamp name '#<sc_t>' must end in '_s'.", stamp_name->sc ))
                    tp_t tp_stamp_name = btypeof( stamp_name->sc );
                    if( !xoico_compiler_s_is_stamp(compiler,tp_stamp_name ) )
                    {
                        BLM_RETURNV(er_t, x_source_parse_error_fa(source,"Cannot associate type name '#<sc_t>' with a stamp.", stamp_name->sc ))
                    }
    
                    xoico_stamp_s* stamp = xoico_compiler_s_get_stamp(compiler,tp_stamp_name );
    
                    if( stamp->finalized )
                    {
                        BLM_RETURNV(er_t, x_source_parse_error_fa(source,"Stamp '#<sc_t>' has already been finalized. Attempting to extend stamp outside its declarative scope.",
                            stamp_name->sc
                        ))
                    }
    
                    BLM_TRY(xoico_stamp_s_parse_func(stamp,source ))
                    o->pre_hash = bcore_tp_fold_tp( o->pre_hash, xoico_stamp_s_get_hash(stamp) );
                    is_group_function = false;
                }
                else
                {
                    x_source_set_index(source,index );
                    is_group_function = true;
                }
            BLM_DOWN();}
    
            if( is_group_function )
            {
                BLM_TRY(xoico_group_s_parse_func(o,source, true )) // group functions are registered
            }
        }
        else if( x_source_parse_bl(source," #?w'name' " ) )
        {
            while( !x_source_eos(source) )
            {BLM_INIT_LEVEL(4);
                xoico_name_s* name = ((xoico_name_s*)BLM_LEVEL_T_PUSH(4,xoico_name_s,xoico_name_s_create()));
                BLM_TRY(xoico_name_s_parse(name,((const xoico_host*)(o)), source ))
                xoico_group_s_push_item_d(o,((xoico*)(((xoico_name_s*)bcore_fork(name)) )));
                bcore_hmap_tp_s_set(&(o->compiler->hmap_declared_name),name->name );
                if( x_source_parse_bl(source," #?';'" ) ) BLM_BREAK_LEVEL(4);
                BLM_TRY(x_source_parse_fa(source," ," ))
            BLM_DOWN();}
        }
        else if( x_source_parse_bl(source," #?w'type' " ) )
        {
            while( !x_source_eos(source) )
            {BLM_INIT_LEVEL(4);
                xoico_name_s name;BLM_T_INIT_SPUSH(xoico_name_s, &name);xoico_name_s_parse(&(name),((const xoico_host*)(o)), source );
                BLM_TRY(xoico_compiler_s_register_external_type(compiler,name.name ))
                o->pre_hash = bcore_tp_fold_tp( o->pre_hash, xoico_name_s_get_hash(&(name)) );
                if( x_source_parse_bl(source," #?';'" ) ) BLM_BREAK_LEVEL(4);
                BLM_TRY(x_source_parse_fa(source," ," ))
            BLM_DOWN();}
        }
        else if( x_source_parse_bl(source," #?w'identifier' " ) )
        {
            while( !x_source_eos(source) )
            {BLM_INIT_LEVEL(4);
                xoico_name_s name;BLM_T_INIT_SPUSH(xoico_name_s, &name);xoico_name_s_parse(&(name),((const xoico_host*)(o)), source );
                BLM_TRY(xoico_compiler_s_register_external_identifier(compiler,name.name ))
                o->pre_hash = bcore_tp_fold_tp( o->pre_hash, xoico_name_s_get_hash(&(name)) );
                if( x_source_parse_bl(source," #?';'" ) ) BLM_BREAK_LEVEL(4);
                BLM_TRY(x_source_parse_fa(source," ," ))
            BLM_DOWN();}
        }
        else if( x_source_parse_bl(source," #?w'forward' " ) )
        {
            while( !x_source_eos(source) )
            {BLM_INIT_LEVEL(4);
                xoico_forward_s* forward = ((xoico_forward_s*)BLM_LEVEL_T_PUSH(4,xoico_forward_s,xoico_forward_s_create()));
                forward->group = o;
                BLM_TRY(xoico_forward_s_parse(forward,((const xoico_host*)(o)), source ))
                xoico_group_s_push_item_d(o,((xoico*)(((xoico_forward_s*)bcore_fork(forward)) )));
                if( x_source_parse_bl(source," #?';'" ) ) BLM_BREAK_LEVEL(4);
                BLM_TRY(x_source_parse_fa(source," ," ))
            BLM_DOWN();}
        }
        else if( x_source_parse_bl(source," #?w'extending'" ) )
        {
            o->extending_stamp = NULL;
            if( x_source_parse_bl(source," #=?';'" ) )
            {
                // just reset o->extending - nothing else
            }
            else if( x_source_parse_bl(source," #=?w'stump'" ) )
            {
                extend_stump = true;
            }
            else
            {BLM_INIT_LEVEL(4);
                st_s* templ_name = ((st_s*)BLM_LEVEL_T_PUSH(4,st_s,st_s_create()));
                BLM_TRY(xoico_group_s_parse_name_st(o,source, templ_name ))
                if( !st_s_ends_in_sc(templ_name,"_s" ) ) BLM_RETURNV(er_t, x_source_parse_error_fa(source,"Stamp name '#<sc_t>' must end in '_s'.", templ_name->sc ))
                const xoico* item = xoico_compiler_s_get_const_item(compiler,btypeof( templ_name->sc ) );
                if( !item ) BLM_RETURNV(er_t, x_source_parse_error_fa(source,"Template #<sc_t> not found.", templ_name->sc ))
                if( item->_ != ((tp_t)(TYPEOF_xoico_stamp_s)) ) BLM_RETURNV(er_t, x_source_parse_error_fa(source,"Template #<sc_t> is no stamp.", templ_name->sc ))
                o->extending_stamp = ((xoico_stamp_s*)(item));
                BLM_TRY(x_source_parse_fa(source," ;" ))
            BLM_DOWN();}
        }
        else if( x_source_parse_bl(source," #?w'group' " ) )
        {BLM_INIT_LEVEL(3);
            st_s st_group_name;BLM_T_INIT_SPUSH(st_s, &st_group_name);;
            BLM_TRY(xoico_group_s_parse_name_st(o,source,&( st_group_name )))
            bl_t retrievable = false;
    
            // using assignment symbol is optional
            if( x_source_parse_bl(source," #?'=' " ) )
            {
                // nothing (error in case use of assignment becomes illegal)
            }
    
            // flags
            if( x_source_parse_bl(source," #?w'retrievable' " ) ) retrievable = true;
    
            xoico_transient_map_s* transient_map = ((xoico_transient_map_s*)BLM_LEVEL_T_PUSH(3,xoico_transient_map_s,xoico_transient_map_s_clone(&(o->transient_map))));
            tp_t tp_trait_name = o->tp_name;
            st_s* st_trait_name = ((st_s*)BLM_LEVEL_T_PUSH(3,st_s,st_s_create()));
    
            // first test for 'trans' used instead of trait_name
            if( x_source_parse_bl(source," #?w'trans' " ) )
            {
                BLM_TRY(xoico_transient_map_s_parse_update(transient_map,((const xoico_host*)(o)), source ))
            }
            else
            {
                BLM_TRY(xoico_group_s_parse_name_st(o,source, st_trait_name ))
                if( st_trait_name->size > 0 )
                {
                    tp_trait_name = xoico_compiler_s_entypeof(compiler,st_trait_name->sc );
                }
                else
                {
                    st_s_copy_sc(st_trait_name,xoico_compiler_s_nameof(compiler,tp_trait_name ) );
                }
    
                // second test for trans in case it occurs after trait_name
                if( x_source_parse_bl(source," #?w'trans' " ) ) BLM_TRY(xoico_transient_map_s_parse_update(transient_map,((const xoico_host*)(o)), source ))
            }
    
            xoico_group_s* group = NULL;
            BLM_TRY(xoico_source_s_get_group_if_preexsting(o->xoico_source,host, source, st_group_name.sc, st_trait_name->sc, (&(group)) ))
    
            if( !group )
            {BLM_INIT_LEVEL(4);
                group = xoico_source_s_push_d(o->xoico_source,xoico_group_s_create() );
                group->lexical_parent = o;
                group->xoico_source = o->xoico_source;
                group->compiler = o->compiler;
                group->extending_stamp = o->extending_stamp;
                group->expandable = o->expandable;
                xoico_group_s_set_name_sc(group,host, st_group_name.sc );
                group->is_retrievable = retrievable;
                group->trait_name = tp_trait_name;
                xoico_transient_map_s_copy(&(group->transient_map),transient_map );
                BLM_TRY(xoico_group_s_parse(group,((const xoico_host*)(o)), true, source ))
                BLM_TRY(xoico_compiler_s_register_group(compiler,group ))
                xoico_nested_group_s* nested_group = ((xoico_nested_group_s*)BLM_LEVEL_T_PUSH(4,xoico_nested_group_s,xoico_nested_group_s_create()));
                nested_group->group = group;
                xoico_group_s_push_item_d(o,((xoico*)(((xoico_nested_group_s*)bcore_fork(nested_group)) )));
            BLM_DOWN();}
            else
            {
                xoico_transient_map_s_update(&(group->transient_map),transient_map );
                BLM_TRY(xoico_group_s_parse(group,((const xoico_host*)(o)), true, source ))
            }
    
            BLM_TRY(x_source_parse_fa(source," #-?';' " )) // closing semicolon is optional
        BLM_DOWN();}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x158, %rsp            # imm = 0x158
movq %rcx, %rbx
movl %edx, %ebp
movq %rsi, 0xc8(%rsp)
movq %rdi, %r15
leaq 0x103a56(%rip), %rax    # 0x117dd0
movq (%rax), %rsi
leaq 0x90(%rsp), %r14
movq %r14, %rdi
callq 0x717f5
andq $0x0, 0x10(%r14)
movq 0x140(%r15), %r12
callq 0x1379a
movabsq $0x753cecc8ce8a05b2, %rdx # imm = 0x753CECC8CE8A05B2
movq %r14, %rdi
xorl %esi, %esi
movq %rax, %rcx
callq 0x71967
movq %rax, %r13
movq %rbx, %rdi
callq 0x6026d
movq %r13, %rdi
movq %rax, %rsi
callq 0xf6dd
cmpq $0x0, 0x148(%r15)
jne 0x14422
callq 0x2dde5
movq %rax, 0x148(%r15)
movq %rax, %rdi
movq %rbx, %rsi
callq 0xdc7d
movabsq $-0x340d631b7bdddcdb, %rax # imm = 0xCBF29CE484222325
movq %rax, 0xb8(%r15)
cmpq $0x0, 0xa8(%r15)
jne 0x14422
movq 0x90(%r15), %rsi
leaq 0x140(%r12), %rdi
callq 0x6f48c
movq %rax, 0xa8(%r15)
testb %bpl, %bpl
je 0x14454
leaq 0x9676c(%rip), %rsi     # 0xaab9a
xorl %ebp, %ebp
movq %rbx, %rdi
xorl %eax, %eax
callq 0xd600
testq %rax, %rax
jne 0x15885
leaq 0x96b8f(%rip), %rax     # 0xaafd9
movq %rax, 0xe0(%rsp)
jmp 0x14480
leaq 0x96b85(%rip), %rsi     # 0xaafe0
movq %rbx, %rdi
callq 0xe5ff
movl %eax, %ebp
xorb $0x1, %bpl
leaq 0x96b8a(%rip), %rcx     # 0xaaffa
xorl %edx, %edx
testb %al, %al
cmovneq %rcx, %rdx
movq %rdx, 0xe0(%rsp)
leaq 0xe0(%r15), %rax
movq %rax, 0xd8(%rsp)
leaq 0x68(%r15), %rax
movq %rax, 0x120(%rsp)
leaq 0xc0(%r15), %rax
movq %rax, 0x118(%rsp)
leaq 0x140(%r12), %rax
movq %rax, 0x128(%rsp)
leaq 0xf0(%r12), %rax
movq %rax, 0x130(%rsp)
leaq 0xc8(%r12), %rax
movq %rax, 0x140(%rsp)
leaq 0x150(%r15), %rax
movq %rax, 0x138(%rsp)
leaq 0x118(%r15), %rax
movq %rax, 0x150(%rsp)
leaq 0x20(%r12), %rax
movq %rax, 0x148(%rsp)
movl $0x0, 0x5c(%rsp)
movl %ebp, 0xc(%rsp)
cmpq $0x1, 0x10(%r13)
ja 0x1453c
movq %rbx, %rdi
testb %bpl, %bpl
je 0x14527
callq 0xe626
jmp 0x14534
movq 0xe0(%rsp), %rsi
callq 0xe5ff
testb %al, %al
jne 0x1584d
movq %rbx, %rdi
callq 0xe626
testb %al, %al
je 0x14586
movq 0x10(%r13), %rax
cmpq $0x2, %rax
jb 0x1585d
movq 0x8(%r13), %rcx
leaq (%rcx,%rax,8), %rdi
addq $-0x8, %rdi
xorl %esi, %esi
callq 0x1597d
movq 0x8(%r13), %rax
movq 0x10(%r13), %rsi
movq -0x10(%rax,%rsi,8), %rbx
decq %rsi
movq %r13, %rdi
callq 0x159b0
jmp 0x14715
movq %rbx, %rdi
leaq 0x96a8e(%rip), %rsi     # 0xab01e
callq 0xe5ff
testb %al, %al
je 0x14649
leaq 0xe8(%rsp), %rdi
movq %rdi, 0x20(%rsp)
leaq 0x90(%rsp), %rsi
callq 0x717f5
movq 0x20(%rsp), %r14
movq $0x3, 0x10(%r14)
callq 0x1789b
movq %r14, %rdi
pushq $0x3
popq %rsi
movabsq $0x12d01d78049fae7, %rdx # imm = 0x12D01D78049FAE7
movq %rax, %rcx
callq 0x71967
movq %rax, %rbp
movq %r15, 0xc8(%rax)
movq %rax, %rdi
movq %r15, %rsi
movq %rbx, %rdx
callq 0x159db
testq %rax, %rax
jne 0x158dd
movq %rbp, %rdi
callq 0x15fc5
testq %rax, %rax
jne 0x158dd
movq %rbp, %rdi
callq 0x6026d
movq %r15, %rdi
movq %rax, %rsi
callq 0xf6dd
movq %r12, %rdi
movq %rax, %rsi
callq 0x114d0
testq %rax, %rax
jne 0x158dd
leaq 0x20(%rsp), %rdi
callq 0x71b48
jmp 0x14711
movq %rbx, %rdi
leaq 0x969d8(%rip), %rsi     # 0xab02b
callq 0xe5ff
testb %al, %al
je 0x14734
leaq 0xe8(%rsp), %rdi
movq %rdi, 0x20(%rsp)
leaq 0x90(%rsp), %rsi
callq 0x717f5
movq 0x20(%rsp), %r14
movq $0x3, 0x10(%r14)
callq 0x1789b
movq %r14, %rdi
pushq $0x3
popq %rsi
movabsq $0x12d01d78049fae7, %rdx # imm = 0x12D01D78049FAE7
movq %rax, %rcx
callq 0x71967
movq %rax, %rbp
movq %r15, 0xc8(%rax)
movq %rax, %rdi
movq %r15, %rsi
movq %rbx, %rdx
callq 0x159db
testq %rax, %rax
jne 0x158dd
movq %r12, %rdi
movq %rbp, %rsi
callq 0x114d0
testq %rax, %rax
jne 0x158dd
movq %rbp, %rdi
callq 0x6026d
movq 0x148(%rsp), %rdi
movq %rax, %rsi
callq 0x71a4d
testb $0x1, 0x5c(%rsp)
je 0x146ff
movq %rbp, 0x110(%r15)
leaq 0x20(%rsp), %rdi
callq 0x71b48
movl $0x0, 0x5c(%rsp)
movl 0xc(%rsp), %ebp
movq %rbx, %rdi
leaq 0xad05e(%rip), %rsi     # 0xc177d
xorl %eax, %eax
callq 0xd600
testq %rax, %rax
je 0x14511
jmp 0x15885
movq %rbx, %rdi
leaq 0x968fa(%rip), %rsi     # 0xab038
callq 0xe5ff
testb %al, %al
je 0x147bb
leaq 0xe8(%rsp), %rdi
movq %rdi, 0x20(%rsp)
leaq 0x90(%rsp), %rsi
callq 0x717f5
movq 0x20(%rsp), %r14
movq $0x3, 0x10(%r14)
callq 0xf958
movq %r14, %rdi
pushq $0x3
popq %rsi
movabsq $-0x231a5c50432e84f2, %rdx # imm = 0xDCE5A3AFBCD17B0E
movq %rax, %rcx
callq 0x71967
movq %rax, %rbp
movq %rax, %rdi
movq %r15, %rsi
movq %rbx, %rdx
callq 0xfc0a
testq %rax, %rax
jne 0x158dd
movq %rbx, %rdi
leaq 0x9689a(%rip), %rsi     # 0xab049
xorl %eax, %eax
callq 0xd600
jmp 0x1460a
movq %rbx, %rdi
leaq 0x96888(%rip), %rsi     # 0xab04d
callq 0xe5ff
testb %al, %al
je 0x148ef
movq %r13, 0x10(%rsp)
movq %r12, %r13
leaq 0xe8(%rsp), %rdi
movq %rdi, 0x68(%rsp)
leaq 0x90(%rsp), %rsi
callq 0x717f5
movq 0x68(%rsp), %r14
movq $0x3, 0x10(%r14)
callq 0x10839
movq %r14, %rdi
pushq $0x3
popq %rsi
movabsq $0x12dc29d312ad56e4, %rdx # imm = 0x12DC29D312AD56E4
movq %rax, %rcx
callq 0x71967
movq %rax, %rbp
leaq 0x20(%rsp), %r12
movq %r12, %rdi
callq 0x8e048
movq %r14, %rdi
movabsq $-0x503db0e6e1c2e704, %rsi # imm = 0xAFC24F191E3D18FC
movq %r12, %rdx
callq 0x71998
movq %r15, %rdi
movq %rbx, %rsi
movq %r12, %rdx
callq 0x13d35
testq %rax, %rax
jne 0x158a3
cmpq $0x0, 0x30(%rsp)
je 0x15892
movq %r13, %r12
movq 0x28(%rsp), %rsi
movq 0xc8(%rsp), %rdi
callq 0xfbe8
movq %rax, 0x8(%rbp)
movq %rbp, %rdi
movq %r15, %rsi
movq %rbx, %rdx
callq 0x10b30
testq %rax, %rax
jne 0x158a3
movq %rbx, %rdi
leaq 0x95e78(%rip), %rsi     # 0xaa718
xorl %eax, %eax
callq 0xd600
testq %rax, %rax
jne 0x158a3
movq %rbp, %rdi
callq 0x6026d
movq %r15, %rdi
movq %rax, %rsi
callq 0xf6dd
movq %r12, %rdi
movq %rax, %rsi
callq 0x114d0
testq %rax, %rax
jne 0x158a3
leaq 0x68(%rsp), %rdi
callq 0x71b48
movl 0xc(%rsp), %ebp
movq 0x10(%rsp), %r13
jmp 0x14715
movq %rbx, %rdi
leaq 0x96774(%rip), %rsi     # 0xab06d
callq 0xe5ff
testb %al, %al
je 0x149db
leaq 0xe8(%rsp), %rdi
movq %rdi, 0x20(%rsp)
leaq 0x90(%rsp), %rsi
callq 0x717f5
movq 0x20(%rsp), %r14
movq $0x3, 0x10(%r14)
callq 0x11d4d
movq %r14, %rdi
pushq $0x3
popq %rsi
movabsq $0x320f5368e957d0a2, %rdx # imm = 0x320F5368E957D0A2
movq %rax, %rcx
callq 0x71967
movq %rax, %rbp
movq %r15, 0x118(%rax)
movq %rax, %rdi
movq %r15, %rsi
movq %rbx, %rdx
callq 0x11e4a
testq %rax, %rax
jne 0x158dd
movq %rbp, %rdi
callq 0x6026d
movq %r15, %rdi
movq %rax, %rsi
callq 0xf6dd
movq %r12, %rdi
movq %rax, %rsi
callq 0x114d0
testq %rax, %rax
jne 0x158dd
movq 0x10(%rbp), %rsi
movq 0x138(%rsp), %rdi
movq %rbp, %rdx
callq 0x68dba
xorl %r14d, %r14d
cmpq 0xd0(%rbp), %r14
jae 0x14b48
movq 0xc8(%rbp), %rax
movq (%rax,%r14,8), %rdi
callq 0x6026d
movq 0x150(%rsp), %rdi
movq %rax, %rsi
callq 0xf6dd
incq %r14
jmp 0x149a9
movq %rbx, %rdi
leaq 0x96697(%rip), %rsi     # 0xab07c
callq 0xe5ff
movq %rbx, %rdi
testb %al, %al
je 0x14b5c
leaq 0x9668c(%rip), %rsi     # 0xab088
callq 0xe5ff
testb %al, %al
je 0x14e59
leaq 0xe8(%rsp), %rdi
movq %rdi, 0x20(%rsp)
leaq 0x90(%rsp), %rsi
callq 0x717f5
movq 0x20(%rsp), %rbp
movq $0x4, 0x10(%rbp)
movq %rbx, %rdi
callq 0x10a95
movq %rax, 0x10(%rsp)
movq %rbx, %rdi
leaq 0x95aa7(%rip), %rsi     # 0xaa4ee
xorl %eax, %eax
callq 0xd600
testq %rax, %rax
jne 0x158dd
xorl %eax, %eax
callq 0x8eb65
movq %rbp, %rdi
pushq $0x4
popq %rsi
movabsq $-0x503db0e6e1c2e704, %rdx # imm = 0xAFC24F191E3D18FC
movq %rax, %rcx
callq 0x71967
movq %rax, %rbp
movq %r15, %rdi
movq %rbx, %rsi
movq %rax, %rdx
callq 0x13d35
testq %rax, %rax
jne 0x158dd
movq %rbx, %rdi
leaq 0x965f6(%rip), %rsi     # 0xab090
callq 0xe5ff
movl %eax, %r14d
testb %al, %al
je 0x14e35
movq %rbp, %rdi
leaq 0xa47b4(%rip), %rsi     # 0xb9268
callq 0x8f5ac
movq 0x8(%rbp), %rdx
testb %al, %al
je 0x158ad
movb %r14b, 0x10(%rsp)
movq %rdx, %rdi
callq 0x10aad
movq %rax, %r14
movq %r12, %rdi
movq %rax, %rsi
callq 0x16062
testb %al, %al
je 0x158b6
movq %rbp, 0x60(%rsp)
movq %r12, %rdi
movq %r14, %rsi
callq 0x16085
cmpb $0x1, 0x3a(%rax)
je 0x158c3
movq %rax, %rbp
movq %rax, %rdi
movq %rbx, %rsi
callq 0x160ac
testq %rax, %rax
jne 0x158dd
movq 0xb8(%r15), %r14
movq %rbp, %rdi
callq 0x16257
movq %r14, %rdi
movq %rax, %rsi
callq 0xe705
movq %rax, 0xb8(%r15)
movl 0xc(%rsp), %ebp
movb 0x10(%rsp), %r14b
jmp 0x14e46
addq $0xc0, %rbp
movq %rbp, %rdi
callq 0x13fdc
jmp 0x1463a
leaq 0x965cd(%rip), %rsi     # 0xab130
callq 0xe5ff
testb %al, %al
je 0x14c49
movq %rbx, %rdi
callq 0xe626
testb %al, %al
jne 0x14711
leaq 0xe8(%rsp), %rdi
movq %rdi, 0x20(%rsp)
leaq 0x90(%rsp), %rsi
callq 0x717f5
movq 0x20(%rsp), %r14
movq $0x4, 0x10(%r14)
callq 0xdbae
movq %r14, %rdi
pushq $0x4
popq %rsi
movabsq $0x72c1e17e15481547, %rdx # imm = 0x72C1E17E15481547
movq %rax, %rcx
callq 0x71967
movq %rax, %rbp
movq %rax, %rdi
movq %r15, %rsi
movq %rbx, %rdx
callq 0xdc31
testq %rax, %rax
jne 0x158dd
movq %rbp, %rdi
callq 0x6026d
movq %r15, %rdi
movq %rax, %rsi
callq 0xf6dd
movq 0x140(%r15), %rdi
movl $0x118, %eax            # imm = 0x118
addq %rax, %rdi
movq 0x8(%rbp), %rsi
callq 0x6a411
movq %rbx, %rdi
leaq 0x96529(%rip), %rsi     # 0xab13c
callq 0xe5ff
testb %al, %al
jne 0x14f4d
movq %rbx, %rdi
leaq 0x96519(%rip), %rsi     # 0xab143
xorl %eax, %eax
callq 0xd600
testq %rax, %rax
jne 0x158dd
leaq 0x20(%rsp), %rdi
callq 0x71b48
jmp 0x14b70
movq %rbx, %rdi
leaq 0x964f3(%rip), %rsi     # 0xab146
callq 0xe5ff
testb %al, %al
je 0x14d3f
movq %r12, 0x10(%rsp)
movq %rbx, %rdi
callq 0xe626
testb %al, %al
jne 0x14f6c
leaq 0xe8(%rsp), %rdi
movq %rdi, 0x68(%rsp)
leaq 0x90(%rsp), %rsi
callq 0x717f5
movq 0x68(%rsp), %r14
movq $0x4, 0x10(%r14)
leaq 0x20(%rsp), %r12
movq %r12, %rdi
callq 0xdb11
movq %r14, %rdi
movabsq $0x72c1e17e15481547, %rsi # imm = 0x72C1E17E15481547
movq %r12, %rdx
callq 0x71998
movq %r12, %rdi
movq %r15, %rsi
movq %rbx, %rdx
callq 0xdc31
movq 0x28(%rsp), %rsi
movq 0x140(%rsp), %rdi
callq 0x6a411
movq 0xb8(%r15), %r14
movq %r12, %rdi
callq 0xdcdb
movq %r14, %rdi
movq %rax, %rsi
callq 0xe705
movq %rax, 0xb8(%r15)
movq %rbx, %rdi
leaq 0x96433(%rip), %rsi     # 0xab13c
callq 0xe5ff
testb %al, %al
jne 0x14f5f
movq %rbx, %rdi
leaq 0x96423(%rip), %rsi     # 0xab143
xorl %eax, %eax
callq 0xd600
testq %rax, %rax
jne 0x158a3
leaq 0x68(%rsp), %rdi
callq 0x71b48
jmp 0x14c65
movq %rbx, %rdi
leaq 0x96409(%rip), %rsi     # 0xab152
callq 0xe5ff
testb %al, %al
je 0x14e75
movq %r12, 0x10(%rsp)
movq %rbx, %rdi
callq 0xe626
testb %al, %al
jne 0x14f6c
leaq 0xe8(%rsp), %rdi
movq %rdi, 0x68(%rsp)
leaq 0x90(%rsp), %rsi
callq 0x717f5
movq 0x68(%rsp), %r14
movq $0x4, 0x10(%r14)
leaq 0x20(%rsp), %r12
movq %r12, %rdi
callq 0xdb11
movq %r14, %rdi
movabsq $0x72c1e17e15481547, %rsi # imm = 0x72C1E17E15481547
movq %r12, %rdx
callq 0x71998
movq %r12, %rdi
movq %r15, %rsi
movq %rbx, %rdx
callq 0xdc31
movq 0x28(%rsp), %rsi
movq 0x130(%rsp), %rdi
callq 0x6a411
movq 0xb8(%r15), %r14
movq %r12, %rdi
callq 0xdcdb
movq %r14, %rdi
movq %rax, %rsi
callq 0xe705
movq %rax, 0xb8(%r15)
movq %rbx, %rdi
leaq 0x9633d(%rip), %rsi     # 0xab13c
callq 0xe5ff
testb %al, %al
jne 0x14f5f
movq %rbx, %rdi
leaq 0x9632d(%rip), %rsi     # 0xab143
xorl %eax, %eax
callq 0xd600
testq %rax, %rax
jne 0x158a3
leaq 0x68(%rsp), %rdi
callq 0x71b48
jmp 0x14d5b
movq %rbx, %rdi
movq 0x10(%rsp), %rsi
callq 0x10b09
movl 0xc(%rsp), %ebp
leaq 0x20(%rsp), %rdi
callq 0x71b48
testb %r14b, %r14b
jne 0x14715
movq %r15, %rdi
movq %rbx, %rsi
pushq $0x1
popq %rdx
callq 0x1420e
testq %rax, %rax
je 0x14715
jmp 0x15885
movq %rbx, %rdi
leaq 0x962e5(%rip), %rsi     # 0xab164
callq 0xe5ff
testb %al, %al
je 0x14f76
movq %rbx, %rdi
callq 0xe626
testb %al, %al
jne 0x14711
leaq 0xe8(%rsp), %rdi
movq %rdi, 0x20(%rsp)
leaq 0x90(%rsp), %rsi
callq 0x717f5
movq 0x20(%rsp), %r14
movq $0x4, 0x10(%r14)
callq 0xde6e
movq %r14, %rdi
pushq $0x4
popq %rsi
movabsq $0x67ce6dd302fec85d, %rdx # imm = 0x67CE6DD302FEC85D
movq %rax, %rcx
callq 0x71967
movq %rax, %rbp
movq %r15, 0x10(%rax)
movq %rax, %rdi
movq %r15, %rsi
movq %rbx, %rdx
callq 0xdea9
testq %rax, %rax
jne 0x158dd
movq %rbp, %rdi
callq 0x6026d
movq %r15, %rdi
movq %rax, %rsi
callq 0xf6dd
movq %rbx, %rdi
leaq 0x96221(%rip), %rsi     # 0xab13c
callq 0xe5ff
testb %al, %al
jne 0x14f4d
movq %rbx, %rdi
leaq 0x96215(%rip), %rsi     # 0xab143
xorl %eax, %eax
callq 0xd600
testq %rax, %rax
jne 0x158dd
leaq 0x20(%rsp), %rdi
callq 0x71b48
jmp 0x14e8c
movq 0x20(%rsp), %rdi
pushq $0x4
popq %rsi
callq 0x71b7a
jmp 0x14711
movq 0x68(%rsp), %rdi
pushq $0x4
popq %rsi
callq 0x71b7a
movq 0x10(%rsp), %r12
jmp 0x14715
movq %rbx, %rdi
leaq 0x961f3(%rip), %rsi     # 0xab173
callq 0xe5ff
testb %al, %al
je 0x14fca
andq $0x0, 0x110(%r15)
movq %rbx, %rdi
leaq 0x95775(%rip), %rsi     # 0xaa710
callq 0xe5ff
testb %al, %al
jne 0x14715
movq %rbx, %rdi
leaq 0x961d1(%rip), %rsi     # 0xab183
callq 0xe5ff
testb %al, %al
je 0x15138
movb $0x1, %al
movl %eax, 0x5c(%rsp)
jmp 0x14715
movq %rbx, %rdi
leaq 0x961f6(%rip), %rsi     # 0xab1ca
callq 0xe5ff
testb %al, %al
je 0x150fd
leaq 0xe8(%rsp), %rdi
movq %rdi, 0x50(%rsp)
leaq 0x90(%rsp), %rsi
callq 0x717f5
movq 0x50(%rsp), %rbp
movq $0x3, 0x10(%rbp)
leaq 0x68(%rsp), %r14
movq %r14, %rdi
callq 0x8e048
movq %rbp, %rdi
movabsq $-0x503db0e6e1c2e704, %rsi # imm = 0xAFC24F191E3D18FC
movq %r14, %rdx
callq 0x71998
movq %r15, %rdi
movq %rbx, %rsi
movq %r14, %rdx
callq 0x13d35
testq %rax, %rax
jne 0x158ff
movq %rbx, %rdi
leaq 0x9618c(%rip), %rsi     # 0xab1d7
callq 0xe5ff
movq %rbx, %rdi
leaq 0x96185(%rip), %rsi     # 0xab1df
callq 0xe5ff
movb %al, 0x1f(%rsp)
movq 0xd8(%rsp), %rdi
callq 0xee05
movq %rbp, %rdi
pushq $0x3
popq %rsi
movabsq $0x2d2648b9bef99573, %rdx # imm = 0x2D2648B9BEF99573
movq %rax, %rcx
callq 0x71967
movq %rax, %r14
movq 0xa8(%r15), %rax
movq %rax, 0xc0(%rsp)
xorl %eax, %eax
callq 0x8eb65
movq %rbp, %rdi
pushq $0x3
popq %rsi
movabsq $-0x503db0e6e1c2e704, %rdx # imm = 0xAFC24F191E3D18FC
movq %rax, %rcx
callq 0x71967
movq %rax, %rbp
movq %rbx, %rdi
leaq 0x9612c(%rip), %rsi     # 0xab1f2
callq 0xe5ff
testb %al, %al
movq %r14, 0x10(%rsp)
movq %rbp, 0x60(%rsp)
je 0x15348
movq %r14, %rdi
movq %r15, %rsi
movq %rbx, %rdx
callq 0xeef1
testq %rax, %rax
movl 0xc(%rsp), %ebp
je 0x154aa
jmp 0x158ff
movq %rbx, %rdi
leaq 0x960f8(%rip), %rsi     # 0xab1ff
callq 0xe5ff
movq %rbx, %rdi
testb %al, %al
je 0x151ff
leaq 0x960c1(%rip), %rsi     # 0xab1df
callq 0xe5ff
testb %al, %al
je 0x15392
movb $0x1, 0xca(%r15)
jmp 0x157b6
leaq 0xe8(%rsp), %rdi
movq %rdi, 0x20(%rsp)
leaq 0x90(%rsp), %rsi
callq 0x717f5
movq 0x20(%rsp), %r14
movq $0x4, 0x10(%r14)
xorl %eax, %eax
callq 0x8eb65
movq %r14, %rdi
pushq $0x4
popq %rsi
movabsq $-0x503db0e6e1c2e704, %rdx # imm = 0xAFC24F191E3D18FC
movq %rax, %rcx
callq 0x71967
movq %rax, %rbp
movq %r15, %rdi
movq %rbx, %rsi
movq %rax, %rdx
callq 0x13d35
testq %rax, %rax
jne 0x158dd
movq %rbp, %rdi
leaq 0xa40c6(%rip), %rsi     # 0xb9268
callq 0x8f5ac
movq 0x8(%rbp), %rdx
testb %al, %al
je 0x158ad
movq %rdx, %rdi
callq 0x10aad
movq %r12, %rdi
movq %rax, %rsi
callq 0x162bb
testq %rax, %rax
je 0x1591c
movabsq $0x12d01d78049fae7, %rcx # imm = 0x12D01D78049FAE7
cmpq %rcx, (%rax)
jne 0x15929
movq %rax, 0x110(%r15)
movq %rbx, %rdi
leaq 0x996d4(%rip), %rsi     # 0xae8c7
xorl %eax, %eax
callq 0xd600
jmp 0x14631
leaq 0x96048(%rip), %rsi     # 0xab24e
callq 0xe5ff
testb %al, %al
je 0x153b6
leaq 0xe8(%rsp), %rdi
movq %rdi, 0x20(%rsp)
leaq 0x90(%rsp), %rsi
callq 0x717f5
movq 0x20(%rsp), %r14
movq $0x3, 0x10(%r14)
movq %rbx, %rdi
callq 0x270e4
movq %rax, %rdi
callq 0x60c15
movq %r14, %rdi
pushq $0x3
popq %rsi
movabsq $-0x503db0e6e1c2e704, %rbp # imm = 0xAFC24F191E3D18FC
movq %rbp, %rdx
movq %rax, %rcx
callq 0x71967
cmpq $0x0, 0x10(%rax)
jne 0x15277
movq %rax, %rdi
pushq $0x2e
popq %rsi
callq 0x8f0ee
xorl %eax, %eax
callq 0x8eb65
movq %r14, %rdi
pushq $0x3
popq %rsi
movq %rbp, %rdx
movq %rax, %rcx
callq 0x71967
movq %rax, %rbp
movq %rbx, %rdi
leaq 0x95fbf(%rip), %rsi     # 0xab25b
movq %rax, %rdx
xorl %eax, %eax
callq 0xd600
testq %rax, %rax
jne 0x158dd
movq %rbx, %rdi
leaq 0x9960e(%rip), %rsi     # 0xae8c7
xorl %eax, %eax
callq 0xd600
testq %rax, %rax
jne 0x158dd
movq 0x120(%rsp), %rdi
movq %rbp, %rsi
callq 0x5c504
andq $0x0, 0x68(%rsp)
movq 0x8(%rbp), %rsi
movq %rbx, %rdi
leaq 0x68(%rsp), %rdx
callq 0xd6c1
testq %rax, %rax
jne 0x158dd
movq 0x68(%rsp), %rax
movq %rax, 0x60(%rsp)
xorl %r14d, %r14d
cmpq 0x10(%r13), %r14
jae 0x156f3
movq 0x8(%r13), %rax
movq (%rax,%r14,8), %rbp
movq 0x60(%rsp), %rdi
callq 0x270e4
movq %rax, 0x10(%rsp)
movq %rbp, %rdi
callq 0x270e4
movq 0x10(%rsp), %rdi
movq %rax, %rsi
callq 0x16421
incq %r14
testb %al, %al
je 0x15306
jmp 0x15909
movq %r15, %rdi
movq %rbx, %rsi
movq %rbp, %rdx
callq 0x13d35
movq %rax, %r14
testq %rax, %rax
movq %rbp, %rax
movl 0xc(%rsp), %ebp
jne 0x15902
cmpq $0x0, 0x10(%rax)
je 0x1545d
movq 0x8(%rax), %rsi
movq 0x128(%rsp), %rdi
callq 0x6f48c
movq %rax, 0xc0(%rsp)
jmp 0x1547b
movq %rbx, %rdi
leaq 0x95e6e(%rip), %rsi     # 0xab20a
callq 0xe5ff
testb %al, %al
je 0x15679
movb $0x0, 0xc8(%r15)
jmp 0x157b6
movq %rbx, %rdi
leaq 0x95ebd(%rip), %rsi     # 0xab27d
callq 0xe5ff
testb %al, %al
je 0x1569d
movq %r13, 0x10(%rsp)
leaq 0xe8(%rsp), %rdi
movq %rdi, 0x20(%rsp)
leaq 0x90(%rsp), %rsi
callq 0x717f5
movq 0x20(%rsp), %rbp
movq $0x3, 0x10(%rbp)
movq %rbx, %rdi
leaq 0x95e89(%rip), %rsi     # 0xab28c
callq 0xe5ff
testb %al, %al
je 0x15708
movb $0x0, 0x68(%rsp)
movq %rbx, %rdi
leaq 0x95e7b(%rip), %rsi     # 0xab29a
leaq 0x68(%rsp), %rdx
xorl %eax, %eax
callq 0xd600
testq %rax, %rax
jne 0x158dd
movzbl 0x68(%rsp), %eax
cmpl $0x63, %eax
je 0x15447
cmpl $0x68, %eax
jne 0x15974
xorl %r13d, %r13d
cmpb $0x63, %al
sete %r13b
shll $0x5, %r13d
addq $0x28, %r13
jmp 0x15723
movq %rax, %r14
movq %r12, %rdi
movq 0xc0(%rsp), %rsi
callq 0xdad8
movq %r14, %rdi
movq %rax, %rsi
callq 0x8e611
movq 0x10(%rsp), %r14
movq %rbx, %rdi
leaq 0x95d68(%rip), %rsi     # 0xab1f2
callq 0xe5ff
testb %al, %al
je 0x154aa
movq %r14, %rdi
movq %r15, %rsi
movq %rbx, %rdx
callq 0xeef1
testq %rax, %rax
jne 0x158ff
andq $0x0, 0x88(%rsp)
movq 0x138(%r15), %rdi
movq 0x70(%rsp), %rcx
movq 0x60(%rsp), %rax
movq 0x8(%rax), %r8
movq 0xc8(%rsp), %rsi
movq %rbx, %rdx
leaq 0x88(%rsp), %r9
callq 0x162d3
testq %rax, %rax
jne 0x158ff
movq 0x88(%rsp), %r14
testq %r14, %r14
je 0x15526
leaq 0xe0(%r14), %rdi
movq 0x10(%rsp), %rsi
callq 0xee8c
movq %r14, %rdi
movq %r15, %rsi
pushq $0x1
popq %rdx
movq %rbx, %rcx
callq 0x14352
testq %rax, %rax
je 0x15650
jmp 0x158ff
movq 0x50(%rsp), %rsi
leaq 0x20(%rsp), %rdi
movq %rdi, 0xd0(%rsp)
callq 0x717f5
movq 0xd0(%rsp), %rbp
movq $0x4, 0x10(%rbp)
movq 0x138(%r15), %r14
callq 0x13814
movq %r14, %rdi
movq %rax, %rsi
callq 0xf6dd
movq %rax, %r14
movq %rax, 0x88(%rsp)
movq %r15, 0x20(%rax)
movups 0x138(%r15), %xmm0
movups %xmm0, 0x138(%rax)
movq 0x110(%r15), %rax
movq %rax, 0x110(%r14)
movb 0xc8(%r15), %al
movb %al, 0xc8(%r14)
movq 0x70(%rsp), %rdx
movq %r14, %rdi
movq 0xc8(%rsp), %rsi
callq 0x1384f
movb 0x1f(%rsp), %al
movb %al, 0xca(%r14)
movq 0xc0(%rsp), %rax
movq %rax, 0xb0(%r14)
leaq 0xe0(%r14), %rdi
movq 0x10(%rsp), %rsi
callq 0xedc9
movq %r14, %rdi
movq %r15, %rsi
pushq $0x1
popq %rdx
movq %rbx, %rcx
callq 0x14352
testq %rax, %rax
jne 0x15936
movq 0x88(%rsp), %r14
movq %r12, %rdi
movq %r14, %rsi
callq 0x163e4
callq 0x17319
movq %rbp, %rdi
pushq $0x4
popq %rsi
movabsq $-0x4b14f1d5a904cf79, %rdx # imm = 0xB4EB0E2A56FB3087
movq %rax, %rcx
callq 0x71967
movq %r14, 0x8(%rax)
movq %rax, %rdi
callq 0x6026d
movq %r15, %rdi
movq %rax, %rsi
callq 0xf6dd
leaq 0xd0(%rsp), %rdi
callq 0x71b48
movl 0xc(%rsp), %ebp
movq %rbx, %rdi
leaq 0x950be(%rip), %rsi     # 0xaa718
xorl %eax, %eax
callq 0xd600
testq %rax, %rax
jne 0x158ff
leaq 0x50(%rsp), %rdi
callq 0x71b48
jmp 0x14715
movq %rbx, %rdi
leaq 0x95b9b(%rip), %rsi     # 0xab21e
callq 0xe5ff
testb %al, %al
je 0x15781
movb $0x1, 0xd8(%r15)
jmp 0x157b6
movq %rbx, %rdi
leaq 0x95b4b(%rip), %rsi     # 0xab1f2
callq 0xe5ff
testb %al, %al
je 0x15943
movq 0xd8(%rsp), %rdi
movq %r15, %rsi
movq %rbx, %rdx
callq 0xeef1
testq %rax, %rax
jne 0x15885
movq %rbx, %rdi
leaq 0x991ed(%rip), %rsi     # 0xae8c7
xorl %eax, %eax
callq 0xd600
testq %rax, %rax
movl 0xc(%rsp), %ebp
je 0x14715
jmp 0x15885
movq %r13, %rdi
movq 0x60(%rsp), %rbx
movq %rbx, %rsi
callq 0xf6dd
jmp 0x1463a
movq %rbx, %rdi
leaq 0x95bb1(%rip), %rsi     # 0xab2c3
callq 0xe5ff
pushq $0x28
popq %r13
testb %al, %al
jne 0x15962
xorl %eax, %eax
callq 0x8eb65
movq %rbp, %rdi
pushq $0x3
popq %rsi
movabsq $-0x503db0e6e1c2e704, %rdx # imm = 0xAFC24F191E3D18FC
movq %rax, %rcx
callq 0x71967
movq %rax, %rbp
movq %rbx, %rdi
leaq 0x95bc8(%rip), %rsi     # 0xab317
callq 0xe5ff
testb %al, %al
je 0x157cc
movq %rbp, %rdi
pushq $0x22
popq %rsi
callq 0x8f0ee
movq %rbx, %rdi
leaq 0x95bb1(%rip), %rsi     # 0xab31e
movq %rbp, %rdx
xorl %eax, %eax
callq 0xd600
movq %rax, %r14
movb $0x22, %al
jmp 0x15807
movq %rbx, %rdi
leaq 0x95aab(%rip), %rsi     # 0xab236
callq 0xe5ff
testb %al, %al
je 0x157b6
movq %rbx, %rdi
leaq 0x95aa4(%rip), %rsi     # 0xab242
movq 0x118(%rsp), %rdx
xorl %eax, %eax
callq 0xd600
testq %rax, %rax
jne 0x15885
movq %rbx, %rdi
leaq 0x99107(%rip), %rsi     # 0xae8c7
xorl %eax, %eax
callq 0xd600
jmp 0x14e67
movq %rbx, %rdi
leaq 0x95b54(%rip), %rsi     # 0xab32a
callq 0xe5ff
testb %al, %al
je 0x1596b
movq %rbp, %rdi
pushq $0x3c
popq %rsi
callq 0x8f0ee
movq %rbx, %rdi
leaq 0x95b39(%rip), %rsi     # 0xab331
movq %rbp, %rdx
xorl %eax, %eax
callq 0xd600
movq %rax, %r14
movb $0x3e, %al
testq %r14, %r14
jne 0x158e0
movzbl %al, %esi
movq %rbp, %rdi
callq 0x8f0ee
movq %rbx, %rdi
leaq 0x990a2(%rip), %rsi     # 0xae8c7
xorl %eax, %eax
callq 0xd600
testq %rax, %rax
jne 0x158dd
addq %r15, %r13
movq %r13, %rdi
movq %rbp, %rsi
callq 0x5c504
leaq 0x20(%rsp), %rdi
jmp 0x148dc
cmpq $0x2, 0x10(%r13)
jb 0x15862
leaq 0x95b41(%rip), %rsi     # 0xab39c
jmp 0x1587b
testb %bpl, %bpl
je 0x15874
leaq 0x90(%rsp), %rdi
callq 0x71b64
xorl %r14d, %r14d
jmp 0x158ea
leaq 0x9578b(%rip), %rsi     # 0xab006
movq %rbx, %rdi
xorl %eax, %eax
callq 0xd7c4
movq %rax, %r14
leaq 0x90(%rsp), %rdi
jmp 0x158e5
leaq 0x957c0(%rip), %rsi     # 0xab059
movq %rbx, %rdi
xorl %eax, %eax
callq 0xd7c4
movq %rax, %r14
movq 0x68(%rsp), %rdi
jmp 0x158e5
leaq 0x96484(%rip), %rsi     # 0xabd38
jmp 0x158d3
movq 0x8(%rbp), %rdx
leaq 0x957d6(%rip), %rsi     # 0xab097
jmp 0x158d3
movq 0x60(%rsp), %rax
movq 0x8(%rax), %rdx
leaq 0x957f7(%rip), %rsi     # 0xab0ca
movq %rbx, %rdi
xorl %eax, %eax
callq 0xd7c4
movq %rax, %r14
movq 0x20(%rsp), %rdi
callq 0x71b64
movq %r14, %rax
addq $0x158, %rsp            # imm = 0x158
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %r14
movq 0x50(%rsp), %rdi
jmp 0x158e5
leaq 0x95954(%rip), %rsi     # 0xab264
movq %rbx, %rdi
xorl %eax, %eax
callq 0xd7c4
jmp 0x158dd
movq 0x8(%rbp), %rdx
leaq 0x95869(%rip), %rsi     # 0xab190
jmp 0x158d3
movq 0x8(%rbp), %rdx
leaq 0x95878(%rip), %rsi     # 0xab1ac
jmp 0x158d3
movq %rax, %r14
movq 0xd0(%rsp), %rdi
jmp 0x158e5
movq %rbx, %rdi
callq 0x10a95
movq %rbx, %rdi
movq %rax, %rsi
callq 0x10b09
leaq 0x95a17(%rip), %rsi     # 0xab374
jmp 0x1587b
leaq 0x9596a(%rip), %rsi     # 0xab2d3
jmp 0x15910
leaq 0x959cb(%rip), %rsi     # 0xab33d
jmp 0x15910
leaq 0x9592a(%rip), %rsi     # 0xab2a5
jmp 0x15910