LLM4Binary/decompile-bench-makefile huggingface dataset:
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_btnm.c
// Function: lv_btnm_set_btn_ctrl_all
void lv_btnm_set_btn_ctrl_all(lv_obj_t * btnm, lv_btnm_ctrl_t ctrl)
{
    LV_ASSERT_OBJ(btnm, LV_OBJX_NAME);

    lv_btnm_ext_t * ext = lv_obj_get_ext_attr(btnm);
    uint16_t i;
    for(i = 0; i < ext->btn_cnt; i++) {
        lv_btnm_set_btn_ctrl(btnm, i, ctrl);
    }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x2061e
movq %rbx, %rdi
callq 0x6747
movq %rax, %r14
xorl %r15d, %r15d
movzwl %bp, %ebp
cmpw 0x40(%r14), %r15w
jae 0x2062f
movzwl %r15w, %esi
movq %rbx, %rdi
movl %ebp, %edx
callq 0x204cc
incl %r15d
jmp 0x20604
leaq 0x1ab1f(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x2062d
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_btnm.c
// Function: lv_btnm_clear_btn_ctrl_all
void lv_btnm_clear_btn_ctrl_all(lv_obj_t * btnm, lv_btnm_ctrl_t ctrl)
{
    LV_ASSERT_OBJ(btnm, LV_OBJX_NAME);

    lv_btnm_ext_t * ext = lv_obj_get_ext_attr(btnm);
    uint16_t i;
    for(i = 0; i < ext->btn_cnt; i++) {
        lv_btnm_clear_btn_ctrl(btnm, i, ctrl);
    }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x2067a
movq %rbx, %rdi
callq 0x6747
movq %rax, %r14
xorl %r15d, %r15d
movzwl %bp, %ebp
cmpw 0x40(%r14), %r15w
jae 0x2068b
movzwl %r15w, %esi
movq %rbx, %rdi
movl %ebp, %edx
callq 0x2058a
incl %r15d
jmp 0x20660
leaq 0x1aac3(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x20689
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_btnm.c
// Function: lv_btnm_set_btn_width
void lv_btnm_set_btn_width(const lv_obj_t * btnm, uint16_t btn_id, uint8_t width)
{
    LV_ASSERT_OBJ(btnm, LV_OBJX_NAME);


    lv_btnm_ext_t * ext = lv_obj_get_ext_attr(btnm);
    if(btn_id >= ext->btn_cnt) return;
    ext->ctrl_bits[btn_id] &= (~LV_BTNM_WIDTH_MASK);
    ext->ctrl_bits[btn_id] |= (LV_BTNM_WIDTH_MASK & width);

    lv_btnm_set_map(btnm, ext->map_p);
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movl %edx, %ebp
movl %esi, %r14d
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x206e6
movq %rbx, %rdi
callq 0x6747
cmpw %r14w, 0x40(%rax)
jbe 0x206f7
movq 0x10(%rax), %rcx
movzwl %r14w, %edx
movzwl (%rcx,%rdx,2), %esi
andl $-0x8, %esi
andb $0x7, %bpl
movzbl %bpl, %edi
orl %esi, %edi
movw %di, (%rcx,%rdx,2)
movq (%rax), %rsi
movq %rbx, %rdi
popq %rbx
popq %r14
popq %rbp
jmp 0x1fe53
leaq 0x1aa57(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x206f5
popq %rbx
popq %r14
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_btnm.c
// Function: lv_btnm_set_one_toggle
void lv_btnm_set_one_toggle(lv_obj_t * btnm, bool one_toggle)
{
    LV_ASSERT_OBJ(btnm, LV_OBJX_NAME);

    lv_btnm_ext_t * ext = lv_obj_get_ext_attr(btnm);
    ext->one_toggle     = one_toggle;

    /*If more than one button is toggled only the first one should be*/
    make_one_button_toggled(btnm, 0);
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x20731
movq %rbx, %rdi
callq 0x6747
movb 0x46(%rax), %cl
addb %bpl, %bpl
andb $-0x3, %cl
orb %bpl, %cl
movb %cl, 0x46(%rax)
movq %rbx, %rdi
xorl %esi, %esi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x20742
leaq 0x1aa0c(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x20740
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_btnm.c
// Function: lv_btnm_get_active_btn_text
const char * lv_btnm_get_active_btn_text(const lv_obj_t * btnm)
{
    LV_ASSERT_OBJ(btnm, LV_OBJX_NAME);

    lv_btnm_ext_t * ext = lv_obj_get_ext_attr(btnm);
    if(ext->btn_id_act != LV_BTNM_BTN_NONE) {
        return lv_btnm_get_btn_text(btnm, ext->btn_id_act);
    } else {
        return NULL;
    }
}

// Assembly:
pushq %rbx
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x20807
movq %rbx, %rdi
callq 0x6747
movzwl 0x44(%rax), %eax
cmpw $-0x1, %ax
je 0x20818
movzwl %ax, %esi
movq %rbx, %rdi
popq %rbx
jmp 0x2081c
leaq 0x1a936(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x20816
xorl %eax, %eax
popq %rbx
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_btnm.c
// Function: lv_btnm_get_btn_text
const char * lv_btnm_get_btn_text(const lv_obj_t * btnm, uint16_t btn_id)
{
    LV_ASSERT_OBJ(btnm, LV_OBJX_NAME);

    lv_btnm_ext_t * ext = lv_obj_get_ext_attr(btnm);
    if(btn_id > ext->btn_cnt) return NULL;

    uint16_t txt_i = 0;
    uint16_t btn_i = 0;

    /* Search the text of ext->btn_pr the buttons text in the map
     * Skip "\n"-s*/
    while(btn_i != btn_id) {
        btn_i++;
        txt_i++;
        if(strcmp(ext->map_p[txt_i], "\n") == 0) txt_i++;
    }

    if(btn_i == ext->btn_cnt) return NULL;

    return ext->map_p[txt_i];
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movl %esi, %ebx
movq %rdi, %r14
callq 0x7994
testb %al, %al
je 0x2086d
movq %r14, %rdi
callq 0x6747
movzwl 0x40(%rax), %ecx
cmpw %bx, %cx
jb 0x20883
xorl %esi, %esi
movl %ebx, %edx
subw $0x1, %dx
jb 0x2087e
leal 0x1(%rsi), %edi
movq (%rax), %r8
movzwl %di, %r9d
movq (%r8,%r9,8), %r8
cmpb $0xa, (%r8)
jne 0x20869
cmpb $0x0, 0x1(%r8)
jne 0x20869
addl $0x2, %esi
movl %esi, %edi
movl %edi, %esi
jmp 0x20843
leaq 0x1a8d0(%rip), %rdi     # 0x3b144
movq %r14, %rsi
callq 0x7b01
jmp 0x2087c
cmpw %bx, %cx
jne 0x20887
xorl %eax, %eax
jmp 0x20891
movq (%rax), %rax
movzwl %si, %ecx
movq (%rax,%rcx,8), %rax
addq $0x8, %rsp
popq %rbx
popq %r14
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_btnm.c
// Function: lv_btnm_get_btn_ctrl
bool lv_btnm_get_btn_ctrl(lv_obj_t * btnm, uint16_t btn_id, lv_btnm_ctrl_t ctrl)
{
    LV_ASSERT_OBJ(btnm, LV_OBJX_NAME);

    lv_btnm_ext_t * ext = lv_obj_get_ext_attr(btnm);
    if(btn_id >= ext->btn_cnt) return false;

    return ext->ctrl_bits[btn_id] & ctrl ? true : false;
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movl %edx, %ebx
movl %esi, %ebp
movq %rdi, %r14
callq 0x7994
testb %al, %al
je 0x208f7
movq %r14, %rdi
callq 0x6747
cmpw %bp, 0x40(%rax)
jbe 0x20908
movq 0x10(%rax), %rax
movzwl %bp, %ecx
testw %bx, (%rax,%rcx,2)
setne %al
jmp 0x2090a
leaq 0x1a846(%rip), %rdi     # 0x3b144
movq %r14, %rsi
callq 0x7b01
jmp 0x20906
xorl %eax, %eax
popq %rbx
popq %r14
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_btnm.c
// Function: get_button_from_point
static uint16_t get_button_from_point(lv_obj_t * btnm, lv_point_t * p)
{
    lv_area_t btnm_cords;
    lv_area_t btn_area;
    lv_btnm_ext_t * ext = lv_obj_get_ext_attr(btnm);
    uint16_t i;
    lv_obj_get_coords(btnm, &btnm_cords);

    for(i = 0; i < ext->btn_cnt; i++) {
        lv_area_copy(&btn_area, &ext->button_areas[i]);
        btn_area.x1 += btnm_cords.x1;
        btn_area.y1 += btnm_cords.y1;
        btn_area.x2 += btnm_cords.x1;
        btn_area.y2 += btnm_cords.y1;
        if(lv_area_is_point_on(&btn_area, p) != false) {
            break;
        }
    }

    if(i == ext->btn_cnt) i = LV_BTNM_BTN_NONE;

    return i;
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x18, %rsp
movq %rsi, %rbx
movq %rdi, %r15
callq 0x6747
movq %rax, %r14
leaq 0x10(%rsp), %rsi
movq %r15, %rdi
callq 0x50e5
xorl %r12d, %r12d
leaq 0x8(%rsp), %r15
movzwl 0x40(%r14), %eax
cmpq %rax, %r12
jae 0x209ae
movq 0x8(%r14), %rax
movd 0x10(%rsp), %xmm0
pshufd $0x0, %xmm0, %xmm0      # xmm0 = xmm0[0,0,0,0]
movq (%rax,%r12,8), %xmm1
paddw %xmm0, %xmm1
movq %xmm1, 0x8(%rsp)
movq %r15, %rdi
movq %rbx, %rsi
callq 0x268e3
testb %al, %al
jne 0x209a9
incq %r12
jmp 0x2096c
movzwl 0x40(%r14), %eax
cmpw %r12w, %ax
movl $0xffff, %eax           # imm = 0xFFFF
cmovnel %r12d, %eax
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
nop
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_cont.c
// Function: lv_cont_signal
static lv_res_t lv_cont_signal(lv_obj_t * cont, lv_signal_t sign, void * param)
{
    lv_res_t res;

    /* Include the ancient signal function */
    res = ancestor_signal(cont, sign, param);
    if(res != LV_RES_OK) return res;
    if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);

    if(sign == LV_SIGNAL_STYLE_CHG) { /*Recalculate the padding if the style changed*/
        lv_cont_refr_layout(cont);
        lv_cont_refr_autofit(cont);
    } else if(sign == LV_SIGNAL_CHILD_CHG) {
        lv_cont_refr_layout(cont);
        lv_cont_refr_autofit(cont);
    } else if(sign == LV_SIGNAL_CORD_CHG) {
        if(lv_obj_get_width(cont) != lv_area_get_width(param) || lv_obj_get_height(cont) != lv_area_get_height(param)) {
            lv_cont_refr_layout(cont);
            lv_cont_refr_autofit(cont);
        }
    } else if(sign == LV_SIGNAL_PARENT_SIZE_CHG) {
        /*FLOOD and FILL fit needs to be refreshed if the parent size has changed*/
        lv_cont_refr_autofit(cont);

    }

    return res;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rdx, %r15
movl %esi, %ebp
movq %rdi, %r14
callq *0x3d8f2(%rip)          # 0x5e430
movl %eax, %ebx
cmpb $0x1, %al
jne 0x20b71
movzbl %bpl, %eax
movb $0x1, %bl
decl %eax
cmpl $0x6, %eax
ja 0x20b71
leaq 0x1aea8(%rip), %rcx     # 0x3ba00
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r14, %rdi
callq 0x20df3
movq %r14, %rdi
callq 0x21665
movl %ebx, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
movq %r14, %rdi
callq 0x5308
movzwl 0x4(%r15), %ecx
subw (%r15), %cx
incl %ecx
cmpw %cx, %ax
jne 0x20b61
movq %r14, %rdi
callq 0x5332
movzwl 0x6(%r15), %ecx
subw 0x2(%r15), %cx
incl %ecx
cmpw %cx, %ax
jne 0x20b61
jmp 0x20b71
leaq 0x1aea4(%rip), %rsi     # 0x3ba5c
movq %r15, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x684b
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_cont.c
// Function: lv_cont_set_layout
void lv_cont_set_layout(lv_obj_t * cont, lv_layout_t layout)
{
    LV_ASSERT_OBJ(cont, LV_OBJX_NAME);

    lv_cont_ext_t * ext = lv_obj_get_ext_attr(cont);
    if(ext->layout == layout) return;

    ext->layout = layout;

    /*Send a signal to refresh the layout*/
    cont->signal_cb(cont, LV_SIGNAL_CHILD_CHG, NULL);
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x20bfb
movq %rbx, %rdi
callq 0x6747
movzwl (%rax), %ecx
movl %ecx, %edx
andl $0xf, %edx
movzbl %bpl, %esi
cmpw %si, %dx
jne 0x20c0c
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
leaq 0x1a542(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x20c0a
andb $0xf, %bpl
movzbl %bpl, %edx
andl $-0x10, %ecx
orl %edx, %ecx
movw %cx, (%rax)
movq 0x30(%rbx), %rax
pushq $0x1
popq %rsi
movq %rbx, %rdi
xorl %edx, %edx
addq $0x8, %rsp
popq %rbx
popq %rbp
jmpq *%rax
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_cont.c
// Function: lv_cont_set_fit4
void lv_cont_set_fit4(lv_obj_t * cont, lv_fit_t left, lv_fit_t right, lv_fit_t top, lv_fit_t bottom)
{
    LV_ASSERT_OBJ(cont, LV_OBJX_NAME);

    lv_obj_invalidate(cont);
    lv_cont_ext_t * ext = lv_obj_get_ext_attr(cont);
    if(ext->fit_left == left && ext->fit_right == right && ext->fit_top == top && ext->fit_bottom == bottom) {
        return;
    }

    ext->fit_left   = left;
    ext->fit_right  = right;
    ext->fit_top    = top;
    ext->fit_bottom = bottom;

    /*Send a signal to refresh the layout*/
    cont->signal_cb(cont, LV_SIGNAL_CHILD_CHG, NULL);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
movl %r8d, %r14d
movl %ecx, %r15d
movl %edx, %r12d
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x20caf
movq %rbx, %rdi
callq 0x493a
movq %rbx, %rdi
callq 0x6747
movzwl (%rax), %ecx
movl %ecx, %edx
shrl $0x4, %edx
andl $0x3, %edx
movzbl %bpl, %esi
cmpw %si, %dx
jne 0x20cc0
movl %ecx, %edx
shrl $0x6, %edx
andl $0x3, %edx
movzbl %r12b, %esi
cmpw %si, %dx
jne 0x20cc0
movl %ecx, %edx
shrl $0x8, %edx
andl $0x3, %edx
movzbl %r15b, %esi
cmpw %si, %dx
jne 0x20cc0
movl %ecx, %edx
shrl $0xa, %edx
andl $0x3, %edx
movzbl %r14b, %esi
cmpw %si, %dx
jne 0x20cc0
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
leaq 0x1a48e(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x20cbe
shlb $0x4, %bpl
andl $0xfffff00f, %ecx       # imm = 0xFFFFF00F
shlb $0x6, %r12b
andb $0x30, %bpl
orb %r12b, %bpl
andb $0x3, %r15b
movzbl %r15b, %edx
shll $0x8, %edx
andb $0x3, %r14b
movzbl %r14b, %esi
shll $0xa, %esi
movzbl %bpl, %edi
orl %edx, %edi
orl %esi, %edi
orl %ecx, %edi
movw %di, (%rax)
movq 0x30(%rbx), %rax
pushq $0x1
popq %rsi
movq %rbx, %rdi
xorl %edx, %edx
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
jmpq *%rax
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_img.c
// Function: lv_img_signal
static lv_res_t lv_img_signal(lv_obj_t * img, lv_signal_t sign, void * param)
{
    lv_res_t res;

    /* Include the ancient signal function */
    res = ancestor_signal(img, sign, param);
    if(res != LV_RES_OK) return res;

    if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);

    lv_img_ext_t * ext = lv_obj_get_ext_attr(img);
    if(sign == LV_SIGNAL_CLEANUP) {
        if(ext->src_type == LV_IMG_SRC_FILE || ext->src_type == LV_IMG_SRC_SYMBOL) {
            lv_mem_free(ext->src);
            ext->src      = NULL;
            ext->src_type = LV_IMG_SRC_UNKNOWN;
        }
    } else if(sign == LV_SIGNAL_STYLE_CHG) {
        /*Refresh the file name to refresh the symbol text size*/
        if(ext->src_type == LV_IMG_SRC_SYMBOL) {
            lv_img_set_src(img, ext->src);
        }
    }

    return res;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rdx, %r15
movl %esi, %ebp
movq %rdi, %r14
callq *0x3c88f(%rip)          # 0x5e438
movl %eax, %ebx
cmpb $0x1, %al
jne 0x21c1d
cmpb $0x7, %bpl
jne 0x21bce
leaq 0x19c60(%rip), %rsi     # 0x3b81c
movq %r15, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x684b
movq %r14, %rdi
callq 0x6747
movq %rax, %r15
movb $0x1, %bl
cmpb $0x4, %bpl
je 0x21c08
movzbl %bpl, %eax
testl %eax, %eax
jne 0x21c1d
movb 0x10(%r15), %al
andb $0x3, %al
decb %al
cmpb $0x1, %al
ja 0x21c1d
movq (%r15), %rdi
callq 0x27a7a
andq $0x0, (%r15)
orb $0x3, 0x10(%r15)
jmp 0x21c1d
movb 0x10(%r15), %al
andb $0x3, %al
cmpb $0x2, %al
jne 0x21c1d
movq (%r15), %rsi
movq %r14, %rdi
callq 0x21e19
movl %ebx, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_img.c
// Function: lv_img_set_offset_x
void lv_img_set_offset_x(lv_obj_t * img, lv_coord_t x)
{
    LV_ASSERT_OBJ(img, LV_OBJX_NAME);

    lv_img_ext_t * ext = lv_obj_get_ext_attr(img);

    if(x < ext->w - 1) {
        ext->offset.x = x;
        lv_obj_invalidate(img);
    }
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x220a8
movq %rbx, %rdi
callq 0x6747
movswl %bp, %ecx
movswl 0xc(%rax), %edx
decl %edx
cmpl %ecx, %edx
jle 0x220b9
movw %bp, 0x8(%rax)
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x493a
leaq 0x19095(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x220b7
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_img.c
// Function: lv_img_set_offset_y
void lv_img_set_offset_y(lv_obj_t * img, lv_coord_t y)
{
    LV_ASSERT_OBJ(img, LV_OBJX_NAME);

    lv_img_ext_t * ext = lv_obj_get_ext_attr(img);

    if(y < ext->h - 1) {
        ext->offset.y = y;
        lv_obj_invalidate(img);
    }
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x220f8
movq %rbx, %rdi
callq 0x6747
movswl %bp, %ecx
movswl 0xe(%rax), %edx
decl %edx
cmpl %ecx, %edx
jle 0x22109
movw %bp, 0xa(%rax)
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x493a
leaq 0x19045(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x22107
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_img.c
// Function: lv_img_get_file_name
const char * lv_img_get_file_name(const lv_obj_t * img)
{
    LV_ASSERT_OBJ(img, LV_OBJX_NAME);

    lv_img_ext_t * ext = lv_obj_get_ext_attr(img);

    if(ext->src_type == LV_IMG_SRC_FILE)
        return ext->src;
    else
        return "";
}

// Assembly:
pushq %rbx
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x22160
movq %rbx, %rdi
callq 0x6747
movb 0x10(%rax), %cl
andb $0x3, %cl
cmpb $0x1, %cl
jne 0x22171
movq (%rax), %rax
jmp 0x22178
leaq 0x18fdd(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x2216f
leaq 0x1d2cd(%rip), %rax     # 0x3f445
popq %rbx
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_imgbtn.c
// Function: lv_imgbtn_signal
static lv_res_t lv_imgbtn_signal(lv_obj_t * imgbtn, lv_signal_t sign, void * param)
{
    lv_res_t res;

    /* Include the ancient signal function */
    res = ancestor_signal(imgbtn, sign, param);
    if(res != LV_RES_OK) return res;
    if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);

    if(sign == LV_SIGNAL_STYLE_CHG) {
        /* If the style changed then the button was clicked, released etc. so probably the state was
         * changed as well Set the new image for the new state.*/
        refr_img(imgbtn);
    } else if(sign == LV_SIGNAL_CLEANUP) {
        /*Nothing to cleanup. (No dynamically allocated memory in 'ext')*/
    }

    return res;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rdx, %rbx
movl %esi, %r15d
movq %rdi, %r14
callq *0x3c143(%rip)          # 0x5e440
movl %eax, %ebp
cmpb $0x1, %al
jne 0x22336
movb $0x1, %bpl
cmpb $0x4, %r15b
je 0x2232e
movzbl %r15b, %eax
cmpl $0x7, %eax
jne 0x22336
leaq 0x19748(%rip), %rsi     # 0x3ba64
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x684b
movq %r14, %rdi
callq 0x22487
movl %ebp, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_imgbtn.c
// Function: lv_imgbtn_set_src
void lv_imgbtn_set_src(lv_obj_t * imgbtn, lv_btn_state_t state, const void * src)
{
    LV_ASSERT_OBJ(imgbtn, LV_OBJX_NAME);

    lv_imgbtn_ext_t * ext = lv_obj_get_ext_attr(imgbtn);

    ext->img_src[state] = src;

    refr_img(imgbtn);
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movq %rdx, %r14
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x22476
movq %rbx, %rdi
callq 0x6747
movzbl %bpl, %ecx
movq %r14, 0x38(%rax,%rcx,8)
movq %rbx, %rdi
popq %rbx
popq %r14
popq %rbp
jmp 0x22487
leaq 0x18cc7(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x22485
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_imgbtn.c
// Function: refr_img
static void refr_img(lv_obj_t * imgbtn)
{
    lv_imgbtn_ext_t * ext = lv_obj_get_ext_attr(imgbtn);
    lv_btn_state_t state  = lv_imgbtn_get_state(imgbtn);
    lv_img_header_t header;

#if LV_IMGBTN_TILED == 0
    const void * src = ext->img_src[state];
#else
    const void * src = ext->img_src_mid[state];
#endif

    lv_res_t info_res = LV_RES_OK;
    if(lv_img_src_get_type(src) == LV_IMG_SRC_SYMBOL) {
        const lv_style_t * style = ext->btn.styles[state];
        header.h = lv_font_get_line_height(style->text.font);
        header.w = lv_txt_get_width(src, (uint16_t)strlen(src), style->text.font, style->text.letter_space, LV_TXT_FLAG_NONE);
        header.always_zero = 0;
        header.cf = LV_IMG_CF_ALPHA_1BIT;
    } else {
        info_res = lv_img_decoder_get_info(src, &header);
    }

    if(info_res == LV_RES_OK) {
        ext->act_cf = header.cf;
#if LV_IMGBTN_TILED == 0
        lv_obj_set_size(imgbtn, header.w, header.h);
#else
        lv_obj_set_height(imgbtn, header.h);
#endif
    } else {
        ext->act_cf = LV_IMG_CF_UNKNOWN;
    }

    lv_obj_invalidate(imgbtn);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rdi, %rbx
callq 0x6747
movq %rax, %r14
movq %rbx, %rdi
callq 0x1289a
movzbl %al, %r12d
movq 0x38(%r14,%r12,8), %r15
movq %r15, %rdi
callq 0x389cd
cmpb $0x2, %al
jne 0x224fe
movq 0x8(%r14,%r12,8), %r13
movq 0x28(%r13), %r12
movzbl 0x10(%r12), %ebp
shll $0x15, %ebp
movq %r15, %rdi
callq 0x2070
movswl 0x30(%r13), %ecx
movzwl %ax, %esi
movq %r15, %rdi
movq %r12, %rdx
xorl %r8d, %r8d
callq 0x28bb3
andl $0x7ff, %eax            # imm = 0x7FF
shll $0xa, %eax
leal (%rax,%rbp), %edx
addl $0xb, %edx
movl %edx, 0x4(%rsp)
jmp 0x22513
leaq 0x4(%rsp), %rsi
movq %r15, %rdi
callq 0x3a521
cmpb $0x1, %al
jne 0x22533
movl 0x4(%rsp), %edx
movl %edx, %eax
andb $0x1f, %al
movb %al, 0x60(%r14)
movl %edx, %esi
shrl $0xa, %esi
shrl $0x15, %edx
andl $0x7ff, %esi            # imm = 0x7FF
movq %rbx, %rdi
callq 0x520e
jmp 0x22538
movb $0x0, 0x60(%r14)
movq %rbx, %rdi
callq 0x493a
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_led.c
// Function: lv_led_create
lv_obj_t * lv_led_create(lv_obj_t * par, const lv_obj_t * copy)
{
    LV_LOG_TRACE("led create started");

    /*Create the ancestor basic object*/
    lv_obj_t * new_led = lv_obj_create(par, copy);
    LV_ASSERT_MEM(new_led);
    if(new_led == NULL) return NULL;

    if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_led);
    if(ancestor_design_f == NULL) ancestor_design_f = lv_obj_get_design_cb(new_led);

    /*Allocate the object type specific extended data*/
    lv_led_ext_t * ext = lv_obj_allocate_ext_attr(new_led, sizeof(lv_led_ext_t));
    LV_ASSERT_MEM(ext);
    if(ext == NULL) return NULL;

    ext->bright = LV_LED_BRIGHT_ON;

    lv_obj_set_signal_cb(new_led, lv_led_signal);
    lv_obj_set_design_cb(new_led, lv_led_design);

    /*Init the new led object*/
    if(copy == NULL) {
        lv_obj_set_size(new_led, LV_LED_WIDTH_DEF, LV_LED_HEIGHT_DEF);

        /*Set the default styles*/
        lv_theme_t * th = lv_theme_get_current();
        if(th) {
            lv_led_set_style(new_led, LV_LED_STYLE_MAIN, th->style.led);
        } else {
            lv_led_set_style(new_led, LV_LED_STYLE_MAIN, &lv_style_pretty_color);
        }
    }
    /*Copy an existing object*/
    else {
        lv_led_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
        ext->bright             = copy_ext->bright;

        /*Refresh the style with new signal function*/
        lv_obj_refresh_style(new_led);
    }

    LV_LOG_INFO("led created");

    return new_led;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rsi, %r14
callq 0x42c9
movq %rax, %rbx
movq %rax, %rdi
callq 0x7994
testb %al, %al
je 0x226b0
testq %rbx, %rbx
je 0x226c1
cmpq $0x0, 0x3be27(%rip)     # 0x5e450
jne 0x2263a
movq %rbx, %rdi
callq 0x66db
movq %rax, 0x3be16(%rip)     # 0x5e450
cmpq $0x0, 0x3be16(%rip)     # 0x5e458
jne 0x22653
movq %rbx, %rdi
callq 0x66ff
movq %rax, 0x3be05(%rip)     # 0x5e458
pushq $0x1
popq %rsi
movq %rbx, %rdi
callq 0x6146
movq %rax, %r15
movq %rax, %rdi
callq 0x7994
testb %al, %al
je 0x226cc
testq %r15, %r15
je 0x226c1
movb $-0x1, (%r15)
leaq 0x91(%rip), %rsi        # 0x2270e
movq %rbx, %rdi
callq 0x60e6
leaq 0xc4(%rip), %rsi        # 0x22750
movq %rbx, %rdi
callq 0x6116
testq %r14, %r14
je 0x226dd
movq %r14, %rdi
callq 0x6747
movb (%rax), %al
movb %al, (%r15)
movq %rbx, %rdi
callq 0x5ae7
jmp 0x226c3
leaq 0x18989(%rip), %rdi     # 0x3b040
movq %rbx, %rsi
callq 0x7b01
jmp 0x226bf
xorl %ebx, %ebx
movq %rbx, %rax
popq %rbx
popq %r14
popq %r15
retq
leaq 0x1896d(%rip), %rdi     # 0x3b040
movq %r15, %rsi
callq 0x7b01
jmp 0x226db
pushq $0x21
popq %rdx
movq %rbx, %rdi
movl %edx, %esi
callq 0x520e
callq 0x2be75
testq %rax, %rax
je 0x226fd
movq 0xa0(%rax), %rsi
jmp 0x22704
leaq 0x3b8ec(%rip), %rsi     # 0x5dff0
movq %rbx, %rdi
callq 0x5a3d
jmp 0x226c3
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_led.c
// Function: lv_led_signal
static lv_res_t lv_led_signal(lv_obj_t * led, lv_signal_t sign, void * param)
{
    lv_res_t res;

    /* Include the ancient signal function */
    res = ancestor_signal(led, sign, param);
    if(res != LV_RES_OK) return res;

    if(sign == LV_SIGNAL_GET_TYPE) {
        lv_obj_type_t * buf = param;
        uint8_t i;
        for(i = 0; i < LV_MAX_ANCESTOR_NUM - 1; i++) { /*Find the last set data*/
            if(buf->type[i] == NULL) break;
        }
        buf->type[i] = "lv_led";
    }

    return res;
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movq %rdx, %rbx
movl %esi, %ebp
callq *0x3bd34(%rip)          # 0x5e450
movl %eax, %ecx
xorb $0x1, %cl
xorb $0x7, %bpl
orb %cl, %bpl
jne 0x22749
xorl %ecx, %ecx
cmpq $0x7, %rcx
je 0x2273e
cmpq $0x0, (%rbx,%rcx,8)
je 0x2273e
incq %rcx
jmp 0x2272c
leaq 0x19329(%rip), %rdx     # 0x3ba6e
movq %rdx, (%rbx,%rcx,8)
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_led.c
// Function: lv_led_design
static bool lv_led_design(lv_obj_t * led, const lv_area_t * mask, lv_design_mode_t mode)
{
    if(mode == LV_DESIGN_COVER_CHK) {
        /*Return false if the object is not covers the mask area*/
        return ancestor_design_f(led, mask, mode);
    } else if(mode == LV_DESIGN_DRAW_MAIN) {
        /*Make darker colors in a temporary style according to the brightness*/
        lv_led_ext_t * ext       = lv_obj_get_ext_attr(led);
        const lv_style_t * style = lv_obj_get_style(led);

        /* Store the real pointer because of 'lv_group'
         * If the object is in focus 'lv_obj_get_style()' will give a pointer to tmp style
         * and to the real object style. It is important because of style change tricks below*/
        const lv_style_t * style_ori_p = led->style_p;

        /*Create a temporal style*/
        lv_style_t leds_tmp;
        memcpy(&leds_tmp, style, sizeof(leds_tmp));

        /*Mix. the color with black proportionally with brightness*/
        leds_tmp.body.main_color   = lv_color_mix(leds_tmp.body.main_color, LV_COLOR_BLACK, ext->bright);
        leds_tmp.body.grad_color   = lv_color_mix(leds_tmp.body.grad_color, LV_COLOR_BLACK, ext->bright);
        leds_tmp.body.border.color = lv_color_mix(leds_tmp.body.border.color, LV_COLOR_BLACK, ext->bright);

        /*Set the current swidth according to brightness proportionally between LV_LED_BRIGHT_OFF
         * and LV_LED_BRIGHT_ON*/
        uint16_t bright_tmp = ext->bright;
        leds_tmp.body.shadow.width =
            ((bright_tmp - LV_LED_BRIGHT_OFF) * style->body.shadow.width) / (LV_LED_BRIGHT_ON - LV_LED_BRIGHT_OFF);

        led->style_p = &leds_tmp;
        ancestor_design_f(led, mask, mode);
        led->style_p = style_ori_p; /*Restore the ORIGINAL style pointer*/
    }
    return true;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x58, %rsp
movq %rsi, %r14
movq %rdi, %rbx
testl %edx, %edx
je 0x22791
cmpl $0x2, %edx
jne 0x2282c
movq 0x3bce0(%rip), %rax     # 0x5e458
pushq $0x2
popq %rdx
movq %rbx, %rdi
movq %r14, %rsi
addq $0x58, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmpq *%rax
movq %rbx, %rdi
callq 0x6747
movq %rax, %r13
movq %rbx, %rdi
callq 0x6316
movq %rax, %r12
movq 0x48(%rbx), %rax
movq %rax, 0x8(%rsp)
pushq $0x9
popq %rcx
leaq 0x10(%rsp), %r15
movq %r15, %rdi
movq %r12, %rsi
rep  movsq (%rsi), %es:(%rdi)
movzbl (%r13), %ebp
movzwl 0x2(%r15), %edi
movl %ebp, %esi
callq 0x2293d
movw %ax, 0x2(%r15)
movl 0x4(%r15), %edi
movl %ebp, %esi
callq 0x2293d
movw %ax, 0x4(%r15)
movzwl 0xa(%r15), %edi
movl %ebp, %esi
callq 0x2293d
movw %ax, 0xa(%r15)
addl $-0x64, %ebp
movswl 0x12(%r12), %eax
imull %ebp, %eax
movl $0x9b, %ecx
cltd
idivl %ecx
movw %ax, 0x12(%r15)
movq %r15, 0x48(%rbx)
movq %rbx, %rdi
movq %r14, %rsi
xorl %edx, %edx
callq *0x3bc35(%rip)          # 0x5e458
movq 0x8(%rsp), %rax
movq %rax, 0x48(%rbx)
movb $0x1, %al
addq $0x58, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_led.c
// Function: lv_led_set_bright
void lv_led_set_bright(lv_obj_t * led, uint8_t bright)
{
    LV_ASSERT_OBJ(led, LV_OBJX_NAME);

    /*Set the brightness*/
    lv_led_ext_t * ext = lv_obj_get_ext_attr(led);
    if(ext->bright == bright) return;

    ext->bright = bright;

    /*Invalidate the object there fore it will be redrawn*/
    lv_obj_invalidate(led);
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x22862
movq %rbx, %rdi
callq 0x6747
cmpb %bpl, (%rax)
jne 0x22873
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
leaq 0x188db(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x22871
movb %bpl, (%rax)
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x493a
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_led.c
// Function: lv_led_toggle
void lv_led_toggle(lv_obj_t * led)
{
    LV_ASSERT_OBJ(led, LV_OBJX_NAME);

    uint8_t bright = lv_led_get_bright(led);
    if(bright > (LV_LED_BRIGHT_OFF + LV_LED_BRIGHT_ON) >> 1)
        lv_led_off(led);
    else
        lv_led_on(led);
}

// Assembly:
pushq %rbx
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x228fc
movq %rbx, %rdi
callq 0x22913
movq %rbx, %rdi
cmpb $-0x4e, %al
jb 0x2290d
popq %rbx
jmp 0x228b0
leaq 0x18841(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x2290b
popq %rbx
jmp 0x22884
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_lmeter.c
// Function: lv_lmeter_signal
static lv_res_t lv_lmeter_signal(lv_obj_t * lmeter, lv_signal_t sign, void * param)
{
    lv_res_t res;

    /* Include the ancient signal function */
    res = ancestor_signal(lmeter, sign, param);
    if(res != LV_RES_OK) return res;
    if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);

    if(sign == LV_SIGNAL_CLEANUP) {
        /*Nothing to cleanup. (No dynamically allocated memory in 'ext')*/
    } else if(sign == LV_SIGNAL_STYLE_CHG) {
        lv_obj_refresh_ext_draw_pad(lmeter);
    } else if(sign == LV_SIGNAL_REFR_EXT_DRAW_PAD) {
        const lv_style_t * style = lv_lmeter_get_style(lmeter, LV_LMETER_STYLE_MAIN);
        lmeter->ext_draw_pad     = LV_MATH_MAX(lmeter->ext_draw_pad, style->line.width);
    }

    return res;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rdx, %r15
movl %esi, %ebp
movq %rdi, %r14
callq *0x3b9bf(%rip)          # 0x5e460
movl %eax, %ebx
cmpb $0x1, %al
jne 0x22afb
movb $0x1, %bl
cmpb $0x4, %bpl
je 0x22af3
movzbl %bpl, %eax
cmpl $0x6, %eax
je 0x22ad6
cmpl $0x7, %eax
jne 0x22afb
leaq 0x18fb1(%rip), %rsi     # 0x3ba75
movq %r15, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x684b
movq %r14, %rdi
callq 0x6316
movl 0x5c(%r14), %ecx
movzwl 0x3e(%rax), %eax
cmpw %ax, %cx
cmovgl %ecx, %eax
movw %ax, 0x5c(%r14)
jmp 0x22afb
movq %r14, %rdi
callq 0x617f
movl %ebx, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_lmeter.c
// Function: lv_lmeter_set_value
void lv_lmeter_set_value(lv_obj_t * lmeter, int16_t value)
{
    LV_ASSERT_OBJ(lmeter, LV_OBJX_NAME);

    lv_lmeter_ext_t * ext = lv_obj_get_ext_attr(lmeter);
    if(ext->cur_value == value) return;

    ext->cur_value = value > ext->max_value ? ext->max_value : value;
    ext->cur_value = ext->cur_value < ext->min_value ? ext->min_value : ext->cur_value;
    lv_obj_invalidate(lmeter);
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x22e52
movq %rbx, %rdi
callq 0x6747
cmpw %bp, 0x6(%rax)
jne 0x22e63
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
leaq 0x182eb(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x22e61
movzwl 0xa(%rax), %ecx
cmpw %bp, %cx
cmovgel %ebp, %ecx
movzwl 0x8(%rax), %edx
cmpw %dx, %cx
cmovlel %edx, %ecx
movw %cx, 0x6(%rax)
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x493a
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_lmeter.c
// Function: lv_lmeter_set_range
void lv_lmeter_set_range(lv_obj_t * lmeter, int16_t min, int16_t max)
{
    LV_ASSERT_OBJ(lmeter, LV_OBJX_NAME);

    lv_lmeter_ext_t * ext = lv_obj_get_ext_attr(lmeter);
    if(ext->min_value == min && ext->max_value == max) return;

    ext->max_value = max;
    ext->min_value = min;
    if(ext->cur_value > max) {
        ext->cur_value = max;
        lv_lmeter_set_value(lmeter, ext->cur_value);
    }
    if(ext->cur_value < min) {
        ext->cur_value = min;
        lv_lmeter_set_value(lmeter, ext->cur_value);
    }
    lv_obj_invalidate(lmeter);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movl %edx, %r14d
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x22ec4
movq %rbx, %rdi
callq 0x6747
movq %rax, %r15
cmpw %bp, 0x8(%rax)
jne 0x22ed5
cmpw %r14w, 0xa(%r15)
jne 0x22ed5
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
leaq 0x18279(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x22ed3
movw %r14w, 0xa(%r15)
movw %bp, 0x8(%r15)
movzwl 0x6(%r15), %eax
cmpw %r14w, %ax
jle 0x22f00
movw %r14w, 0x6(%r15)
movswl %r14w, %esi
movq %rbx, %rdi
callq 0x22e2c
movzwl 0x6(%r15), %eax
cmpw %bp, %ax
jge 0x22f15
movw %bp, 0x6(%r15)
movswl %bp, %esi
movq %rbx, %rdi
callq 0x22e2c
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x493a
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_lmeter.c
// Function: lv_lmeter_set_scale
void lv_lmeter_set_scale(lv_obj_t * lmeter, uint16_t angle, uint16_t line_cnt)
{
    LV_ASSERT_OBJ(lmeter, LV_OBJX_NAME);

    lv_lmeter_ext_t * ext = lv_obj_get_ext_attr(lmeter);
    if(ext->scale_angle == angle && ext->line_cnt == line_cnt) return;

    ext->scale_angle = angle;
    ext->line_cnt    = line_cnt;

    lv_obj_invalidate(lmeter);
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movl %edx, %ebp
movl %esi, %r14d
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x22f55
movq %rbx, %rdi
callq 0x6747
cmpw %r14w, (%rax)
jne 0x22f66
cmpw %bp, 0x4(%rax)
jne 0x22f66
popq %rbx
popq %r14
popq %rbp
retq
leaq 0x181e8(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x22f64
movw %r14w, (%rax)
movw %bp, 0x4(%rax)
movq %rbx, %rdi
popq %rbx
popq %r14
popq %rbp
jmp 0x493a
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_lmeter.c
// Function: lv_lmeter_set_angle_offset
void lv_lmeter_set_angle_offset(lv_obj_t * lmeter, uint16_t angle)
{
    lv_lmeter_ext_t * ext = lv_obj_get_ext_attr(lmeter);
    if(ext->angle_ofs == angle) return;

    ext->angle_ofs = angle;

    lv_obj_invalidate(lmeter);
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x6747
cmpw %bp, 0x2(%rax)
jne 0x22f94
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
movw %bp, 0x2(%rax)
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x493a
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_page.c
// Function: lv_scrl_design
static bool lv_scrl_design(lv_obj_t * scrl, const lv_area_t * mask, lv_design_mode_t mode)
{
    if(mode == LV_DESIGN_COVER_CHK) {
        return ancestor_design(scrl, mask, mode);
    } else if(mode == LV_DESIGN_DRAW_MAIN) {
#if LV_USE_GROUP
        /* If the page is focused in a group and
         * the background object is not visible (transparent)
         * then "activate" the style of the scrollable*/
        const lv_style_t * style_scrl_ori = lv_obj_get_style(scrl);
        lv_obj_t * page                   = lv_obj_get_parent(scrl);
        const lv_style_t * style_page     = lv_obj_get_style(page);
        lv_group_t * g                    = lv_obj_get_group(page);
        if((style_page->body.opa == LV_OPA_TRANSP) &&
           style_page->body.border.width == 0) { /*Is the background visible?*/
            if(lv_group_get_focused(g) == page) {
                lv_style_t * style_mod;
                style_mod = lv_group_mod_style(g, style_scrl_ori);
                /*If still not visible modify the style a littel bit*/
                if((style_mod->body.opa == LV_OPA_TRANSP) && style_mod->body.border.width == 0) {
                    style_mod->body.opa          = LV_OPA_50;
                    style_mod->body.border.width = 1;
                    style_mod                    = lv_group_mod_style(g, style_mod);
                }

                scrl->style_p = style_mod; /*Temporally change the style to the activated */
            }
        }
#endif
        ancestor_design(scrl, mask, mode);

#if LV_USE_GROUP
        scrl->style_p = style_scrl_ori; /*Revert the style*/
#endif
    } else if(mode == LV_DESIGN_DRAW_POST) {
        ancestor_design(scrl, mask, mode);
    }

    return true;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rsi, %r14
movq %rdi, %rbx
testl %edx, %edx
je 0x23908
cmpl $0x1, %edx
je 0x238f4
cmpl $0x2, %edx
jne 0x23991
movq 0x3ab95(%rip), %rax     # 0x5e470
pushq $0x2
popq %rdx
movq %rbx, %rdi
movq %r14, %rsi
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmpq *%rax
pushq $0x1
popq %rdx
movq %rbx, %rdi
movq %r14, %rsi
callq *0x3ab6d(%rip)          # 0x5e470
jmp 0x23991
movq %rbx, %rdi
callq 0x6316
movq %rax, %r15
movq %rbx, %rdi
callq 0x47bc
movq %rax, %r13
movq %rax, %rdi
callq 0x6316
movq %rax, %rbp
movq %r13, %rdi
callq 0x4b8e
cmpb $0x0, 0x8(%rbp)
jne 0x2397f
cmpw $0x0, 0xc(%rbp)
jne 0x2397f
movq %rax, %r12
movq %rax, %rdi
callq 0x29b8
cmpq %r13, %rax
jne 0x2397f
movq %r12, %rdi
movq %r15, %rsi
callq 0x2a44
cmpb $0x0, 0x8(%rax)
jne 0x2397b
cmpw $0x0, 0xc(%rax)
jne 0x2397b
movb $0x7f, 0x8(%rax)
movw $0x1, 0xc(%rax)
movq %r12, %rdi
movq %rax, %rsi
callq 0x2a44
movq %rax, 0x48(%rbx)
movq %rbx, %rdi
movq %r14, %rsi
xorl %edx, %edx
callq *0x3aae3(%rip)          # 0x5e470
movq %r15, 0x48(%rbx)
movb $0x1, %al
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_page.c
// Function: lv_page_set_sb_mode
void lv_page_set_sb_mode(lv_obj_t * page, lv_sb_mode_t sb_mode)
{
    LV_ASSERT_OBJ(page, LV_OBJX_NAME);

    lv_page_ext_t * ext = lv_obj_get_ext_attr(page);
    if(ext->sb.mode == sb_mode) return;

    if(sb_mode == LV_SB_MODE_HIDE)
        ext->sb.mode |= LV_SB_MODE_HIDE; /*Set the hidden flag*/
    else if(sb_mode == LV_SB_MODE_UNHIDE)
        ext->sb.mode &= (~LV_SB_MODE_HIDE); /*Clear the hidden flag*/
    else {
        if(ext->sb.mode & LV_SB_MODE_HIDE) sb_mode |= LV_SB_MODE_HIDE;
        ext->sb.mode = sb_mode;
    }

    ext->sb.hor_draw = 0;
    ext->sb.ver_draw = 0;

    lv_page_sb_refresh(page);
    lv_obj_invalidate(page);
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x2401d
movq %rbx, %rdi
callq 0x6747
movb 0x28(%rax), %cl
movl %ecx, %edx
shrb $0x2, %dl
andb $0x7, %dl
cmpb %bpl, %dl
jne 0x2402e
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
leaq 0x17120(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x2402c
cmpb $0x5, %bpl
je 0x2404a
movzbl %bpl, %esi
cmpl $0x4, %esi
jne 0x2404f
shlb $0x2, %dl
andb $-0x1d, %cl
orb %dl, %cl
orb $0x10, %cl
jmp 0x2406d
andb $-0x11, %cl
jmp 0x2406d
shlb $0x2, %bpl
movzbl %bpl, %esi
orb $0x10, %bpl
cmpb $0x4, %dl
movzbl %bpl, %edx
cmovbl %esi, %edx
andb $0x1c, %dl
andb $-0x1d, %cl
orb %dl, %cl
andb $-0x4, %cl
movb %cl, 0x28(%rax)
movq %rbx, %rdi
callq 0x241b6
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x493a
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_page.c
// Function: lv_page_set_style
void lv_page_set_style(lv_obj_t * page, lv_page_style_t type, const lv_style_t * style)
{
    LV_ASSERT_OBJ(page, LV_OBJX_NAME);

    lv_page_ext_t * ext = lv_obj_get_ext_attr(page);

    switch(type) {
        case LV_PAGE_STYLE_BG: lv_obj_set_style(page, style); break;
        case LV_PAGE_STYLE_SCRL: lv_obj_set_style(ext->scrl, style); break;
        case LV_PAGE_STYLE_SB:
            ext->sb.style = style;
            lv_area_set_height(&ext->sb.hor_area, ext->sb.style->body.padding.inner);
            lv_area_set_width(&ext->sb.ver_area, ext->sb.style->body.padding.inner);
            lv_page_sb_refresh(page);
            lv_obj_refresh_ext_draw_pad(page);
            lv_obj_invalidate(page);
            break;
#if LV_USE_ANIMATION
        case LV_PAGE_STYLE_EDGE_FLASH: ext->edge_flash.style = style; break;
#endif
    }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rdx, %r14
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x240cb
movq %rbx, %rdi
callq 0x6747
cmpb $0x3, %bpl
ja 0x24128
movq %rax, %r15
movzbl %bpl, %eax
leaq 0x179eb(%rip), %rcx     # 0x3baa8
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %rbx, %rdi
jmp 0x24137
leaq 0x17072(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x240da
movq %r14, 0x10(%r15)
leaq 0x18(%r15), %rdi
movswl 0x1e(%r14), %esi
callq 0x26833
movq %r15, %rdi
addq $0x20, %rdi
movq 0x10(%r15), %rax
movswl 0x1e(%rax), %esi
callq 0x26829
movq %rbx, %rdi
callq 0x241b6
movq %rbx, %rdi
callq 0x617f
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x493a
movq %r14, 0x38(%r15)
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
movq 0x8(%r15), %rdi
movq %r14, %rsi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x5a3d
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_page.c
// Function: lv_page_get_style
const lv_style_t * lv_page_get_style(const lv_obj_t * page, lv_page_style_t type)
{
    LV_ASSERT_OBJ(page, LV_OBJX_NAME);

    const lv_style_t * style = NULL;
    lv_page_ext_t * ext      = lv_obj_get_ext_attr(page);

    switch(type) {
        case LV_PAGE_STYLE_BG: style = lv_obj_get_style(page); break;
        case LV_PAGE_STYLE_SCRL: style = lv_obj_get_style(ext->scrl); break;
        case LV_PAGE_STYLE_SB: style = ext->sb.style; break;
#if LV_USE_ANIMATION
        case LV_PAGE_STYLE_EDGE_FLASH: style = ext->edge_flash.style; break;
#endif
        default: style = NULL; break;
    }

    return style;
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x24181
movq %rbx, %rdi
callq 0x6747
cmpb $0x3, %bpl
ja 0x241ad
movzbl %bpl, %ecx
leaq 0x17945(%rip), %rdx     # 0x3bab8
movslq (%rdx,%rcx,4), %rcx
addq %rdx, %rcx
jmpq *%rcx
movq %rbx, %rdi
jmp 0x241a2
leaq 0x16fbc(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x24190
movq 0x10(%rax), %rax
jmp 0x241af
movq 0x38(%rax), %rax
jmp 0x241af
movq 0x8(%rax), %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x6316
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_page.c
// Function: lv_page_set_anim_time
void lv_page_set_anim_time(lv_obj_t * page, uint16_t anim_time)
{
    LV_ASSERT_OBJ(page, LV_OBJX_NAME);

#if LV_USE_ANIMATION
    lv_page_ext_t * ext = lv_obj_get_ext_attr(page);
    ext->anim_time      = anim_time;
#else
    (void)page;      /*Unused*/
    (void)anim_time; /*Unused*/
#endif
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movl %esi, %ebx
movq %rdi, %r14
callq 0x7994
testb %al, %al
je 0x2462b
movq %r14, %rdi
callq 0x6747
movw %bx, 0x48(%rax)
addq $0x8, %rsp
popq %rbx
popq %r14
retq
leaq 0x16b12(%rip), %rdi     # 0x3b144
movq %r14, %rsi
callq 0x7b01
jmp 0x2463a
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_page.c
// Function: lv_page_set_edge_flash
void lv_page_set_edge_flash(lv_obj_t * page, bool en)
{
    LV_ASSERT_OBJ(page, LV_OBJX_NAME);

#if LV_USE_ANIMATION
    lv_page_ext_t * ext     = lv_obj_get_ext_attr(page);
    ext->edge_flash.enabled = en ? 1 : 0;
#else
    (void)page;
    (void)en;
#endif
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movl %esi, %ebx
movq %rdi, %r14
callq 0x7994
testb %al, %al
je 0x246a7
movq %r14, %rdi
callq 0x6747
movb 0x40(%rax), %cl
andb $-0x2, %cl
orb %bl, %cl
movb %cl, 0x40(%rax)
addq $0x8, %rsp
popq %rbx
popq %r14
retq
leaq 0x16a96(%rip), %rdi     # 0x3b144
movq %r14, %rsi
callq 0x7b01
jmp 0x246b6
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_page.c
// Function: lv_page_get_anim_time
uint16_t lv_page_get_anim_time(const lv_obj_t * page)
{
    LV_ASSERT_OBJ(page, LV_OBJX_NAME);

#if LV_USE_ANIMATION
    lv_page_ext_t * ext = lv_obj_get_ext_attr(page);
    return ext->anim_time;
#else
    (void)page; /*Unused*/
    return 0;
#endif
}

// Assembly:
pushq %rbx
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x246d3
movq %rbx, %rdi
callq 0x6747
movzwl 0x48(%rax), %eax
popq %rbx
retq
leaq 0x16a6a(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x246e2
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_page.c
// Function: lv_page_get_edge_flash
bool lv_page_get_edge_flash(lv_obj_t * page)
{
    LV_ASSERT_OBJ(page, LV_OBJX_NAME);

#if LV_USE_ANIMATION
    lv_page_ext_t * ext = lv_obj_get_ext_attr(page);
    return ext->edge_flash.enabled == 0 ? false : true;
#else
    (void)page;
    return false;
#endif
}

// Assembly:
pushq %rbx
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x2475d
movq %rbx, %rdi
callq 0x6747
movb 0x40(%rax), %al
andb $0x1, %al
popq %rbx
retq
leaq 0x169e0(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x2476c
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_page.c
// Function: lv_page_get_fit_width
lv_coord_t lv_page_get_fit_width(lv_obj_t * page)
{
    LV_ASSERT_OBJ(page, LV_OBJX_NAME);

    const lv_style_t * bg_style   = lv_page_get_style(page, LV_PAGE_STYLE_BG);
    const lv_style_t * scrl_style = lv_page_get_style(page, LV_PAGE_STYLE_SCRL);

    return lv_obj_get_width(page) - bg_style->body.padding.left - bg_style->body.padding.right -
           scrl_style->body.padding.left - scrl_style->body.padding.right;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x247be
movq %rbx, %rdi
xorl %esi, %esi
callq 0x24149
movq %rax, %r14
pushq $0x1
popq %rsi
movq %rbx, %rdi
callq 0x24149
movq %rax, %r15
movq %rbx, %rdi
callq 0x5308
movzwl 0x1a(%r14), %ecx
addw 0x1c(%r14), %cx
addw 0x1a(%r15), %cx
addw 0x1c(%r15), %cx
subl %ecx, %eax
popq %rbx
popq %r14
popq %r15
retq
leaq 0x1697f(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x247cd
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_page.c
// Function: lv_page_get_fit_height
lv_coord_t lv_page_get_fit_height(lv_obj_t * page)
{
    LV_ASSERT_OBJ(page, LV_OBJX_NAME);

    const lv_style_t * bg_style   = lv_page_get_style(page, LV_PAGE_STYLE_BG);
    const lv_style_t * scrl_style = lv_page_get_style(page, LV_PAGE_STYLE_SCRL);

    return lv_obj_get_height(page) - bg_style->body.padding.top - bg_style->body.padding.bottom -
           scrl_style->body.padding.top - scrl_style->body.padding.bottom;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x2481f
movq %rbx, %rdi
xorl %esi, %esi
callq 0x24149
movq %rax, %r14
pushq $0x1
popq %rsi
movq %rbx, %rdi
callq 0x24149
movq %rax, %r15
movq %rbx, %rdi
callq 0x5332
movzwl 0x16(%r14), %ecx
addw 0x18(%r14), %cx
addw 0x16(%r15), %cx
addw 0x18(%r15), %cx
subl %ecx, %eax
popq %rbx
popq %r14
popq %r15
retq
leaq 0x1691e(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x2482e