// File: lukasz-wiecaszek[P]h264iframedecoder/h264_parser.cpp
// Function: ymn::h264_parser::parse_sps(ymn::istream<0>&)
h264_parser_status_e h264_parser::parse_sps(istream_be& s)
{
    h264_parser_status_e retval = h264_parser_status_e::NAL_UNIT_CORRUPTED;

    do {
        bool status;
        uint8_t  profile_idc;
        uint8_t  constraint_flags;
        uint8_t  level_idc;
        uint32_t seq_parameter_set_id;

        s.read_u8(profile_idc);
        s.read_u8(constraint_flags);
        s.read_u8(level_idc);

        if (!CHK_EXPR(s.read_exp_golomb_u(seq_parameter_set_id), std::cout) ||
            !CHK_RANGE(seq_parameter_set_id, 0U, static_cast<unsigned>(H264_PARSER_MAX_NUMBER_OF_SPS - 1), std::cout)) {
            s.mark_corrupted();
            break;
        }

        h264::sps& sps = m_sps_table[seq_parameter_set_id];

        sps.profile_idc = profile_idc;
        sps.constraint_flags = constraint_flags;
        sps.level_idc = level_idc;
        sps.seq_parameter_set_id = seq_parameter_set_id;

        if (sps.profile_idc == 100 || sps.profile_idc == 110 ||
            sps.profile_idc == 122 || sps.profile_idc == 244 ||
            sps.profile_idc ==  44 || sps.profile_idc ==  83 ||
            sps.profile_idc ==  86 || sps.profile_idc == 118 ||
            sps.profile_idc == 128 || sps.profile_idc == 144) {

            s.read_exp_golomb_u(sps.chroma_format_idc);
            if (!CHK_STRUCT_RANGE(sps, chroma_format_idc, 0U, 3U, std::cout)) {
                s.mark_corrupted();
                break;
            }

            if (sps.chroma_format_idc == 3)
                s.read_bits(1, sps.separate_colour_plane_flag);
            else
                sps.separate_colour_plane_flag = 0;

            s.read_exp_golomb_u(sps.bit_depth_luma_minus8);
            if (!CHK_STRUCT_RANGE(sps, bit_depth_luma_minus8, 0U, 6U, std::cout)) {
                s.mark_corrupted();
                break;
            }

            s.read_exp_golomb_u(sps.bit_depth_chroma_minus8);
            if (!CHK_STRUCT_RANGE(sps, bit_depth_chroma_minus8, 0U, 6U, std::cout)) {
                s.mark_corrupted();
                break;
            }

            s.read_bits(1, sps.qpprime_y_zero_transform_bypass_flag);

            s.read_bits(1, sps.seq_scaling_matrix_present_flag);
            if (sps.seq_scaling_matrix_present_flag) {
                status = parse_scaling_matrices(s, sps.sm, true, sps.chroma_format_idc);
                if (!status)
                    break;
                /* for each list which is not transmited, use the fall-back scaling list
                   as defined in Table 7-2 � Assignment of mnemonic names to scaling list
                   indices and specification of fall-back rule */
                if (!sps.sm.scaling_matrices_4x4[SL_4x4_INTRA_Y].scaling_list_present_flag)
                    sps.sm.scaling_matrices_4x4[SL_4x4_INTRA_Y].copy(h264::scaling_list_default_4x4[0]);
                if (!sps.sm.scaling_matrices_4x4[SL_4x4_INTRA_Cb].scaling_list_present_flag)
                    sps.sm.scaling_matrices_4x4[SL_4x4_INTRA_Cb].copy(sps.sm.scaling_matrices_4x4[SL_4x4_INTRA_Y].scaling_list);
                if (!sps.sm.scaling_matrices_4x4[SL_4x4_INTRA_Cr].scaling_list_present_flag)
                    sps.sm.scaling_matrices_4x4[SL_4x4_INTRA_Cr].copy(sps.sm.scaling_matrices_4x4[SL_4x4_INTRA_Cb].scaling_list);
                if (!sps.sm.scaling_matrices_4x4[SL_4x4_INTER_Y].scaling_list_present_flag)
                    sps.sm.scaling_matrices_4x4[SL_4x4_INTER_Y].copy(h264::scaling_list_default_4x4[1]);
                if (!sps.sm.scaling_matrices_4x4[SL_4x4_INTER_Cb].scaling_list_present_flag)
                    sps.sm.scaling_matrices_4x4[SL_4x4_INTER_Cb].copy(sps.sm.scaling_matrices_4x4[SL_4x4_INTER_Y].scaling_list);
                if (!sps.sm.scaling_matrices_4x4[SL_4x4_INTER_Cr].scaling_list_present_flag)
                    sps.sm.scaling_matrices_4x4[SL_4x4_INTER_Cr].copy(sps.sm.scaling_matrices_4x4[SL_4x4_INTER_Cb].scaling_list);

                if (!sps.sm.scaling_matrices_8x8[SL_8x8_INTRA_Y].scaling_list_present_flag)
                    sps.sm.scaling_matrices_8x8[SL_8x8_INTRA_Y].copy(h264::scaling_list_default_8x8[0]);
                if (!sps.sm.scaling_matrices_8x8[SL_8x8_INTER_Y].scaling_list_present_flag)
                    sps.sm.scaling_matrices_8x8[SL_8x8_INTER_Y].copy(h264::scaling_list_default_8x8[1]);

                if (sps.chroma_format_idc == 3) {
                    if (!sps.sm.scaling_matrices_8x8[SL_8x8_INTRA_Cb].scaling_list_present_flag)
                        sps.sm.scaling_matrices_8x8[SL_8x8_INTRA_Cb].copy(sps.sm.scaling_matrices_8x8[SL_8x8_INTRA_Y].scaling_list);
                    if (!sps.sm.scaling_matrices_8x8[SL_8x8_INTER_Cb].scaling_list_present_flag)
                        sps.sm.scaling_matrices_8x8[SL_8x8_INTER_Cb].copy(sps.sm.scaling_matrices_8x8[SL_8x8_INTER_Y].scaling_list);
                    if (!sps.sm.scaling_matrices_8x8[SL_8x8_INTRA_Cr].scaling_list_present_flag)
                        sps.sm.scaling_matrices_8x8[SL_8x8_INTRA_Cr].copy(sps.sm.scaling_matrices_8x8[SL_8x8_INTRA_Cb].scaling_list);
                    if (!sps.sm.scaling_matrices_8x8[SL_8x8_INTER_Cr].scaling_list_present_flag)
                        sps.sm.scaling_matrices_8x8[SL_8x8_INTER_Cr].copy(sps.sm.scaling_matrices_8x8[SL_8x8_INTER_Cb].scaling_list);
                }
            }
            else
                sps.sm.set_defaults();
        }
        else {
            sps.chroma_format_idc = 1;
            sps.separate_colour_plane_flag = 0;
            sps.bit_depth_luma_minus8 = 0;
            sps.bit_depth_chroma_minus8 = 0;
            sps.qpprime_y_zero_transform_bypass_flag = 0;
            sps.seq_scaling_matrix_present_flag = 0;
            sps.sm.set_defaults();
        }

        s.read_exp_golomb_u(sps.log2_max_frame_num_minus4);
        if (!CHK_STRUCT_RANGE(sps, log2_max_frame_num_minus4, 0U, 12U, std::cout)) {
            s.mark_corrupted();
            break;
        }

        s.read_exp_golomb_u(sps.pic_order_cnt_type);
        if (!CHK_STRUCT_RANGE(sps, pic_order_cnt_type, 0U, 2U, std::cout)) {
            s.mark_corrupted();
            break;
        }

        if (0 == sps.pic_order_cnt_type)
            s.read_exp_golomb_u(sps.t0.log2_max_pic_order_cnt_lsb_minus4);
        else
        if (1 == sps.pic_order_cnt_type) {
            s.read_bits(1, sps.t1.delta_pic_order_always_zero_flag);
            s.read_exp_golomb_s(sps.t1.offset_for_non_ref_pic);
            s.read_exp_golomb_s(sps.t1.offset_for_top_to_bottom_field);
            s.read_exp_golomb_u(sps.t1.num_ref_frames_in_pic_order_cnt_cycle);
            if (!CHK_STRUCT_RANGE(sps, t1.num_ref_frames_in_pic_order_cnt_cycle, 0U, 255U, std::cout)) {
                s.mark_corrupted();
                break;
            }
            for (uint32_t i = 0; i < sps.t1.num_ref_frames_in_pic_order_cnt_cycle; ++i)
                if (!s.read_exp_golomb_s(sps.t1.offset_for_ref_frame[i]))
                    break;
        }
        else {
            /* do nothing */
        }

        if (s.status() != ISTREAM_STATUS_OK)
            break;

        s.read_exp_golomb_u(sps.max_num_ref_frames);
        s.read_bits(1, sps.gaps_in_frame_num_value_allowed_flag);
        s.read_exp_golomb_u(sps.pic_width_in_mbs_minus1);
        s.read_exp_golomb_u(sps.pic_height_in_map_units_minus1);

        s.read_bits(1, sps.frame_mbs_only_flag);
        if (!sps.frame_mbs_only_flag)
            s.read_bits(1, sps.mb_adaptive_frame_field_flag);
        else
            sps.mb_adaptive_frame_field_flag = 0;

        s.read_bits(1, sps.direct_8x8_inference_flag);

        s.read_bits(1, sps.frame_cropping_flag);
        if (sps.frame_cropping_flag) {
            s.read_exp_golomb_u(sps.frame_crop_left_offset);
            s.read_exp_golomb_u(sps.frame_crop_right_offset);
            s.read_exp_golomb_u(sps.frame_crop_top_offset);
            s.read_exp_golomb_u(sps.frame_crop_bottom_offset);
        }
        else {
            sps.frame_crop_left_offset = 0;
            sps.frame_crop_right_offset = 0;
            sps.frame_crop_top_offset = 0;
            sps.frame_crop_bottom_offset = 0;
        }

        s.read_bits(1, sps.vui_parameters_present_flag);
        if (sps.vui_parameters_present_flag)
            parse_vui_parameters(s, sps.vui);

        if (s.status() != ISTREAM_STATUS_OK)
            break;

        m_recent_sps = seq_parameter_set_id;

        sps.set_valid(true);
        retval = h264_parser_status_e::SPS_PARSED;
    } while (0);

    return retval;
}

// Assembly:
subq $0x38, %rsp
movq %rdi, 0x30(%rsp)
movq %rsi, 0x28(%rsp)
movq 0x30(%rsp), %rax
movq %rax, (%rsp)
movl $0x2, 0x24(%rsp)
movq 0x28(%rsp), %rdi
leaq 0x22(%rsp), %rsi
callq 0x17540
movq 0x28(%rsp), %rdi
leaq 0x21(%rsp), %rsi
callq 0x17540
movq 0x28(%rsp), %rdi
leaq 0x20(%rsp), %rsi
callq 0x17540
movq 0x28(%rsp), %rdi
leaq 0x1c(%rsp), %rsi
callq 0x17200
movzbl %al, %esi
andl $0x1, %esi
leaq 0x11745(%rip), %rdi     # 0x252dd
movq 0x1a421(%rip), %rdx     # 0x2dfc0
callq 0x17180
testb $0x1, %al
jne 0x13baa
jmp 0x13bcc
movl 0x1c(%rsp), %esi
leaq 0xfc90(%rip), %rdi      # 0x23845
xorl %edx, %edx
movl $0x1f, %ecx
movq 0x1a3fd(%rip), %r8      # 0x2dfc0
callq 0x17330
testb $0x1, %al
jne 0x13bdb
movq 0x28(%rsp), %rdi
callq 0x17130
jmp 0x14548
movq (%rsp), %rax
addq $0x128, %rax            # imm = 0x128
movl 0x1c(%rsp), %ecx
imulq $0xb00, %rcx, %rcx      # imm = 0xB00
addq %rcx, %rax
movq %rax, 0x10(%rsp)
movb 0x22(%rsp), %cl
movq 0x10(%rsp), %rax
movb %cl, 0x9(%rax)
movb 0x21(%rsp), %cl
movq 0x10(%rsp), %rax
movb %cl, 0xa(%rax)
movb 0x20(%rsp), %cl
movq 0x10(%rsp), %rax
movb %cl, 0xb(%rax)
movl 0x1c(%rsp), %ecx
movq 0x10(%rsp), %rax
movl %ecx, 0xc(%rax)
movq 0x10(%rsp), %rax
movzbl 0x9(%rax), %eax
cmpl $0x64, %eax
je 0x13cc2
movq 0x10(%rsp), %rax
movzbl 0x9(%rax), %eax
cmpl $0x6e, %eax
je 0x13cc2
movq 0x10(%rsp), %rax
movzbl 0x9(%rax), %eax
cmpl $0x7a, %eax
je 0x13cc2
movq 0x10(%rsp), %rax
movzbl 0x9(%rax), %eax
cmpl $0xf4, %eax
je 0x13cc2
movq 0x10(%rsp), %rax
movzbl 0x9(%rax), %eax
cmpl $0x2c, %eax
je 0x13cc2
movq 0x10(%rsp), %rax
movzbl 0x9(%rax), %eax
cmpl $0x53, %eax
je 0x13cc2
movq 0x10(%rsp), %rax
movzbl 0x9(%rax), %eax
cmpl $0x56, %eax
je 0x13cc2
movq 0x10(%rsp), %rax
movzbl 0x9(%rax), %eax
cmpl $0x76, %eax
je 0x13cc2
movq 0x10(%rsp), %rax
movzbl 0x9(%rax), %eax
cmpl $0x80, %eax
je 0x13cc2
movq 0x10(%rsp), %rax
movzbl 0x9(%rax), %eax
cmpl $0x90, %eax
jne 0x14103
movq 0x28(%rsp), %rdi
movq 0x10(%rsp), %rsi
addq $0x10, %rsi
callq 0x17200
movq 0x10(%rsp), %rax
movl 0x10(%rax), %esi
leaq 0x11623(%rip), %rdi     # 0x25307
xorl %edx, %edx
movl $0x3, %ecx
movq 0x1a2ce(%rip), %r8      # 0x2dfc0
callq 0x17330
testb $0x1, %al
jne 0x13d0a
movq 0x28(%rsp), %rdi
callq 0x17130
jmp 0x14548
movq 0x10(%rsp), %rax
cmpl $0x3, 0x10(%rax)
jne 0x13d2f
movq 0x28(%rsp), %rdi
movq 0x10(%rsp), %rdx
addq $0x14, %rdx
movl $0x1, %esi
callq 0x16f30
jmp 0x13d3b
movq 0x10(%rsp), %rax
movl $0x0, 0x14(%rax)
movq 0x28(%rsp), %rdi
movq 0x10(%rsp), %rsi
addq $0x18, %rsi
callq 0x17200
movq 0x10(%rsp), %rax
movl 0x18(%rax), %esi
leaq 0x115c0(%rip), %rdi     # 0x2531d
xorl %edx, %edx
movl $0x6, %ecx
movq 0x1a255(%rip), %r8      # 0x2dfc0
callq 0x17330
testb $0x1, %al
jne 0x13d83
movq 0x28(%rsp), %rdi
callq 0x17130
jmp 0x14548
movq 0x28(%rsp), %rdi
movq 0x10(%rsp), %rsi
addq $0x1c, %rsi
callq 0x17200
movq 0x10(%rsp), %rax
movl 0x1c(%rax), %esi
leaq 0x11592(%rip), %rdi     # 0x25337
xorl %edx, %edx
movl $0x6, %ecx
movq 0x1a20d(%rip), %r8      # 0x2dfc0
callq 0x17330
testb $0x1, %al
jne 0x13dcb
movq 0x28(%rsp), %rdi
callq 0x17130
jmp 0x14548
movq 0x28(%rsp), %rdi
movq 0x10(%rsp), %rdx
addq $0x20, %rdx
movl $0x1, %esi
callq 0x16f30
movq 0x28(%rsp), %rdi
movq 0x10(%rsp), %rdx
addq $0x24, %rdx
movl $0x1, %esi
callq 0x16f30
movq 0x10(%rsp), %rax
cmpl $0x0, 0x24(%rax)
je 0x140f3
movq (%rsp), %rdi
movq 0x28(%rsp), %rsi
movq 0x10(%rsp), %rdx
addq $0x28, %rdx
movq 0x10(%rsp), %rax
movl 0x10(%rax), %r8d
movl $0x1, %ecx
callq 0x12d20
andb $0x1, %al
movb %al, 0x23(%rsp)
testb $0x1, 0x23(%rsp)
jne 0x13e41
jmp 0x14548
movq 0x10(%rsp), %rax
cmpl $0x0, 0x44(%rax)
jne 0x13e65
movq 0x10(%rsp), %rdi
addq $0x28, %rdi
addq $0x10, %rdi
leaq 0x11ab0(%rip), %rsi     # 0x25910
callq 0x17570
movq 0x10(%rsp), %rax
cmpl $0x0, 0x64(%rax)
jne 0x13e97
movq 0x10(%rsp), %rdi
addq $0x28, %rdi
addq $0x10, %rdi
addq $0x20, %rdi
movq 0x10(%rsp), %rsi
addq $0x28, %rsi
addq $0x10, %rsi
addq $0x10, %rsi
callq 0x17570
movq 0x10(%rsp), %rax
cmpl $0x0, 0x84(%rax)
jne 0x13ed0
movq 0x10(%rsp), %rdi
addq $0x28, %rdi
addq $0x10, %rdi
addq $0x40, %rdi
movq 0x10(%rsp), %rsi
addq $0x28, %rsi
addq $0x10, %rsi
addq $0x20, %rsi
addq $0x10, %rsi
callq 0x17570
movq 0x10(%rsp), %rax
cmpl $0x0, 0xa4(%rax)
jne 0x13eff
movq 0x10(%rsp), %rdi
addq $0x28, %rdi
addq $0x10, %rdi
addq $0x60, %rdi
leaq 0x11a1a(%rip), %rsi     # 0x25910
addq $0x10, %rsi
callq 0x17570
movq 0x10(%rsp), %rax
cmpl $0x0, 0xc4(%rax)
jne 0x13f3b
movq 0x10(%rsp), %rdi
addq $0x28, %rdi
addq $0x10, %rdi
addq $0x80, %rdi
movq 0x10(%rsp), %rsi
addq $0x28, %rsi
addq $0x10, %rsi
addq $0x60, %rsi
addq $0x10, %rsi
callq 0x17570
movq 0x10(%rsp), %rax
cmpl $0x0, 0xe4(%rax)
jne 0x13f7a
movq 0x10(%rsp), %rdi
addq $0x28, %rdi
addq $0x10, %rdi
addq $0xa0, %rdi
movq 0x10(%rsp), %rsi
addq $0x28, %rsi
addq $0x10, %rsi
addq $0x80, %rsi
addq $0x10, %rsi
callq 0x17570
movq 0x10(%rsp), %rax
cmpl $0x0, 0x104(%rax)
jne 0x13fa4
movq 0x10(%rsp), %rdi
addq $0x28, %rdi
addq $0xd0, %rdi
leaq 0x11991(%rip), %rsi     # 0x25930
callq 0x175b0
movq 0x10(%rsp), %rax
cmpl $0x0, 0x154(%rax)
jne 0x13fd6
movq 0x10(%rsp), %rdi
addq $0x28, %rdi
addq $0xd0, %rdi
addq $0x50, %rdi
leaq 0x11963(%rip), %rsi     # 0x25930
addq $0x40, %rsi
callq 0x175b0
movq 0x10(%rsp), %rax
cmpl $0x3, 0x10(%rax)
jne 0x140f1
movq 0x10(%rsp), %rax
cmpl $0x0, 0x1a4(%rax)
jne 0x14023
movq 0x10(%rsp), %rdi
addq $0x28, %rdi
addq $0xd0, %rdi
addq $0xa0, %rdi
movq 0x10(%rsp), %rsi
addq $0x28, %rsi
addq $0xd0, %rsi
addq $0x10, %rsi
callq 0x175b0
movq 0x10(%rsp), %rax
cmpl $0x0, 0x1f4(%rax)
jne 0x14065
movq 0x10(%rsp), %rdi
addq $0x28, %rdi
addq $0xd0, %rdi
addq $0xf0, %rdi
movq 0x10(%rsp), %rsi
addq $0x28, %rsi
addq $0xd0, %rsi
addq $0x50, %rsi
addq $0x10, %rsi
callq 0x175b0
movq 0x10(%rsp), %rax
cmpl $0x0, 0x244(%rax)
jne 0x140aa
movq 0x10(%rsp), %rdi
addq $0x28, %rdi
addq $0xd0, %rdi
addq $0x140, %rdi            # imm = 0x140
movq 0x10(%rsp), %rsi
addq $0x28, %rsi
addq $0xd0, %rsi
addq $0xa0, %rsi
addq $0x10, %rsi
callq 0x175b0
movq 0x10(%rsp), %rax
cmpl $0x0, 0x294(%rax)
jne 0x140ef
movq 0x10(%rsp), %rdi
addq $0x28, %rdi
addq $0xd0, %rdi
addq $0x190, %rdi            # imm = 0x190
movq 0x10(%rsp), %rsi
addq $0x28, %rsi
addq $0xd0, %rsi
addq $0xf0, %rsi
addq $0x10, %rsi
callq 0x175b0
jmp 0x140f1
jmp 0x14101
movq 0x10(%rsp), %rdi
addq $0x28, %rdi
callq 0x175f0
jmp 0x14159
movq 0x10(%rsp), %rax
movl $0x1, 0x10(%rax)
movq 0x10(%rsp), %rax
movl $0x0, 0x14(%rax)
movq 0x10(%rsp), %rax
movl $0x0, 0x18(%rax)
movq 0x10(%rsp), %rax
movl $0x0, 0x1c(%rax)
movq 0x10(%rsp), %rax
movl $0x0, 0x20(%rax)
movq 0x10(%rsp), %rax
movl $0x0, 0x24(%rax)
movq 0x10(%rsp), %rdi
addq $0x28, %rdi
callq 0x175f0
movq 0x28(%rsp), %rdi
movq 0x10(%rsp), %rsi
addq $0x2d8, %rsi            # imm = 0x2D8
callq 0x17200
movq 0x10(%rsp), %rax
movl 0x2d8(%rax), %esi
leaq 0x111d2(%rip), %rdi     # 0x25353
xorl %edx, %edx
movl $0xc, %ecx
movq 0x19e31(%rip), %r8      # 0x2dfc0
callq 0x17330
testb $0x1, %al
jne 0x141a7
movq 0x28(%rsp), %rdi
callq 0x17130
jmp 0x14548
movq 0x28(%rsp), %rdi
movq 0x10(%rsp), %rsi
addq $0x2dc, %rsi            # imm = 0x2DC
callq 0x17200
movq 0x10(%rsp), %rax
movl 0x2dc(%rax), %esi
leaq 0x111a2(%rip), %rdi     # 0x25371
xorl %edx, %edx
movl $0x2, %ecx
movq 0x19de3(%rip), %r8      # 0x2dfc0
callq 0x17330
testb $0x1, %al
jne 0x141f5
movq 0x28(%rsp), %rdi
callq 0x17130
jmp 0x14548
movq 0x10(%rsp), %rcx
xorl %eax, %eax
cmpl 0x2dc(%rcx), %eax
jne 0x1421f
movq 0x28(%rsp), %rdi
movq 0x10(%rsp), %rsi
addq $0x2e0, %rsi            # imm = 0x2E0
callq 0x17200
jmp 0x1432f
movq 0x10(%rsp), %rcx
movl $0x1, %eax
cmpl 0x2dc(%rcx), %eax
jne 0x1432b
movq 0x28(%rsp), %rdi
movq 0x10(%rsp), %rdx
addq $0x2e0, %rdx            # imm = 0x2E0
movl $0x1, %esi
callq 0x16f30
movq 0x28(%rsp), %rdi
movq 0x10(%rsp), %rsi
addq $0x2e0, %rsi            # imm = 0x2E0
addq $0x4, %rsi
callq 0x17690
movq 0x28(%rsp), %rdi
movq 0x10(%rsp), %rsi
addq $0x2e0, %rsi            # imm = 0x2E0
addq $0x8, %rsi
callq 0x17690
movq 0x28(%rsp), %rdi
movq 0x10(%rsp), %rsi
addq $0x2e0, %rsi            # imm = 0x2E0
addq $0xc, %rsi
callq 0x17200
movq 0x10(%rsp), %rax
movl 0x2ec(%rax), %esi
leaq 0x110d8(%rip), %rdi     # 0x25388
xorl %edx, %edx
movl $0xff, %ecx
movq 0x19d02(%rip), %r8      # 0x2dfc0
callq 0x17330
testb $0x1, %al
jne 0x142d6
movq 0x28(%rsp), %rdi
callq 0x17130
jmp 0x14548
movl $0x0, 0xc(%rsp)
movl 0xc(%rsp), %eax
movq 0x10(%rsp), %rcx
cmpl 0x2ec(%rcx), %eax
jae 0x14329
movq 0x28(%rsp), %rdi
movq 0x10(%rsp), %rsi
addq $0x2e0, %rsi            # imm = 0x2E0
addq $0x10, %rsi
movl 0xc(%rsp), %eax
shlq $0x2, %rax
addq %rax, %rsi
callq 0x17690
testb $0x1, %al
jne 0x1431a
jmp 0x14329
jmp 0x1431c
movl 0xc(%rsp), %eax
addl $0x1, %eax
movl %eax, 0xc(%rsp)
jmp 0x142de
jmp 0x1432d
jmp 0x1432d
jmp 0x1432f
movq 0x28(%rsp), %rdi
callq 0x17150
cmpl $0x0, %eax
je 0x14343
jmp 0x14548
movq 0x28(%rsp), %rdi
movq 0x10(%rsp), %rsi
addq $0x6ec, %rsi            # imm = 0x6EC
callq 0x17200
movq 0x28(%rsp), %rdi
movq 0x10(%rsp), %rdx
addq $0x6f0, %rdx            # imm = 0x6F0
movl $0x1, %esi
callq 0x16f30
movq 0x28(%rsp), %rdi
movq 0x10(%rsp), %rsi
addq $0x6f4, %rsi            # imm = 0x6F4
callq 0x17200
movq 0x28(%rsp), %rdi
movq 0x10(%rsp), %rsi
addq $0x6f8, %rsi            # imm = 0x6F8
callq 0x17200
movq 0x28(%rsp), %rdi
movq 0x10(%rsp), %rdx
addq $0x6fc, %rdx            # imm = 0x6FC
movl $0x1, %esi
callq 0x16f30
movq 0x10(%rsp), %rax
cmpl $0x0, 0x6fc(%rax)
jne 0x143e6
movq 0x28(%rsp), %rdi
movq 0x10(%rsp), %rdx
addq $0x700, %rdx            # imm = 0x700
movl $0x1, %esi
callq 0x16f30
jmp 0x143f5
movq 0x10(%rsp), %rax
movl $0x0, 0x700(%rax)
movq 0x28(%rsp), %rdi
movq 0x10(%rsp), %rdx
addq $0x704, %rdx            # imm = 0x704
movl $0x1, %esi
callq 0x16f30
movq 0x28(%rsp), %rdi
movq 0x10(%rsp), %rdx
addq $0x708, %rdx            # imm = 0x708
movl $0x1, %esi
callq 0x16f30
movq 0x10(%rsp), %rax
cmpl $0x0, 0x708(%rax)
je 0x14493
movq 0x28(%rsp), %rdi
movq 0x10(%rsp), %rsi
addq $0x70c, %rsi            # imm = 0x70C
callq 0x17200
movq 0x28(%rsp), %rdi
movq 0x10(%rsp), %rsi
addq $0x710, %rsi            # imm = 0x710
callq 0x17200
movq 0x28(%rsp), %rdi
movq 0x10(%rsp), %rsi
addq $0x714, %rsi            # imm = 0x714
callq 0x17200
movq 0x28(%rsp), %rdi
movq 0x10(%rsp), %rsi
addq $0x718, %rsi            # imm = 0x718
callq 0x17200
jmp 0x144cf
movq 0x10(%rsp), %rax
movl $0x0, 0x70c(%rax)
movq 0x10(%rsp), %rax
movl $0x0, 0x710(%rax)
movq 0x10(%rsp), %rax
movl $0x0, 0x714(%rax)
movq 0x10(%rsp), %rax
movl $0x0, 0x718(%rax)
movq 0x28(%rsp), %rdi
movq 0x10(%rsp), %rdx
addq $0x71c, %rdx            # imm = 0x71C
movl $0x1, %esi
callq 0x16f30
movq 0x10(%rsp), %rax
cmpl $0x0, 0x71c(%rax)
je 0x14512
movq (%rsp), %rdi
movq 0x28(%rsp), %rsi
movq 0x10(%rsp), %rdx
addq $0x720, %rdx            # imm = 0x720
callq 0x12fd0
movq 0x28(%rsp), %rdi
callq 0x17150
cmpl $0x0, %eax
je 0x14523
jmp 0x14548
movq (%rsp), %rax
movl 0x1c(%rsp), %ecx
movl %ecx, 0x16128(%rax)
movq 0x10(%rsp), %rdi
movl $0x1, %esi
callq 0x17160
movl $0x4, 0x24(%rsp)
movl 0x24(%rsp), %eax
addq $0x38, %rsp
retq
nopw %cs:(%rax,%rax)