// File: donfreiday[P]gb/./imgui/imgui.cpp
// Function: ImGui::RenderTextClipped(ImVec2 const&, ImVec2 const&, char const*, char const*, ImVec2 const*, int, ImVec2 const*, ImVec2 const*)
void ImGui::RenderTextClipped(const ImVec2& pos_min, const ImVec2& pos_max, const char* text, const char* text_end, const ImVec2* text_size_if_known, ImGuiAlign align, const ImVec2* clip_min, const ImVec2* clip_max)
{
    // Hide anything after a '##' string
    const char* text_display_end = FindTextDisplayEnd(text, text_end);
    const int text_len = (int)(text_display_end - text);
    if (text_len == 0)
        return;

    ImGuiState& g = *GImGui;
    ImGuiWindow* window = GetCurrentWindow();

    // Perform CPU side clipping for single clipped element to avoid using scissor state
    ImVec2 pos = pos_min;
    const ImVec2 text_size = text_size_if_known ? *text_size_if_known : ImGui::CalcTextSize(text, text_display_end, false, 0.0f);

    if (!clip_max) clip_max = &pos_max;
    bool need_clipping = (pos.x + text_size.x >= clip_max->x) || (pos.y + text_size.y >= clip_max->y);
    if (!clip_min) clip_min = &pos_min; else need_clipping |= (pos.x < clip_min->x) || (pos.y < clip_min->y);

    // Align
    if (align & ImGuiAlign_Center) pos.x = ImMax(pos.x, (pos.x + pos_max.x - text_size.x) * 0.5f);
    else if (align & ImGuiAlign_Right) pos.x = ImMax(pos.x, pos_max.x - text_size.x);
    if (align & ImGuiAlign_VCenter) pos.y = ImMax(pos.y, (pos.y + pos_max.y - text_size.y) * 0.5f);

    // Render
    if (need_clipping)
    {
        ImVec4 fine_clip_rect(clip_min->x, clip_min->y, clip_max->x, clip_max->y);
        window->DrawList->AddText(g.Font, g.FontSize, pos, window->Color(ImGuiCol_Text), text, text_display_end, 0.0f, &fine_clip_rect);
    }
    else
    {
        window->DrawList->AddText(g.Font, g.FontSize, pos, window->Color(ImGuiCol_Text), text, text_display_end, 0.0f, NULL);
    }
    if (g.LogEnabled)
        LogRenderedText(pos, text, text_display_end);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xb0, %rsp
movq 0x18(%rbp), %rax
movq 0x10(%rbp), %rax
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq %r8, -0x28(%rbp)
movl %r9d, -0x2c(%rbp)
movq -0x18(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x10230
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rax
movq -0x18(%rbp), %rcx
subq %rcx, %rax
movl %eax, -0x3c(%rbp)
cmpl $0x0, -0x3c(%rbp)
jne 0x10645
jmp 0x10920
movq 0x68e74(%rip), %rax     # 0x794c0
movq %rax, -0x48(%rbp)
callq 0x2e220
movq %rax, -0x50(%rbp)
movq -0x8(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x58(%rbp)
cmpq $0x0, -0x28(%rbp)
je 0x10678
movq -0x28(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x60(%rbp)
jmp 0x1068f
movq -0x18(%rbp), %rdi
movq -0x38(%rbp), %rsi
xorl %edx, %edx
xorps %xmm0, %xmm0
callq 0x10930
movlpd %xmm0, -0x60(%rbp)
cmpq $0x0, 0x18(%rbp)
jne 0x1069e
movq -0x10(%rbp), %rax
movq %rax, 0x18(%rbp)
movss -0x58(%rbp), %xmm0
addss -0x60(%rbp), %xmm0
movq 0x18(%rbp), %rcx
movb $0x1, %al
ucomiss (%rcx), %xmm0
movb %al, -0x75(%rbp)
jae 0x106ce
movss -0x54(%rbp), %xmm0
addss -0x5c(%rbp), %xmm0
movq 0x18(%rbp), %rax
ucomiss 0x4(%rax), %xmm0
setae %al
movb %al, -0x75(%rbp)
movb -0x75(%rbp), %al
andb $0x1, %al
movb %al, -0x61(%rbp)
cmpq $0x0, 0x10(%rbp)
jne 0x106e7
movq -0x8(%rbp), %rax
movq %rax, 0x10(%rbp)
jmp 0x10732
movss -0x58(%rbp), %xmm1
movq 0x10(%rbp), %rax
movss (%rax), %xmm0
movb $0x1, %al
ucomiss %xmm1, %xmm0
movb %al, -0x76(%rbp)
ja 0x10715
movss -0x54(%rbp), %xmm1
movq 0x10(%rbp), %rax
movss 0x4(%rax), %xmm0
ucomiss %xmm1, %xmm0
seta %al
movb %al, -0x76(%rbp)
movb -0x76(%rbp), %al
andb $0x1, %al
movzbl %al, %ecx
movb -0x61(%rbp), %al
andb $0x1, %al
movzbl %al, %eax
orl %ecx, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movb %al, -0x61(%rbp)
movl -0x2c(%rbp), %eax
andl $0x2, %eax
cmpl $0x0, %eax
je 0x1076c
movss -0x58(%rbp), %xmm0
movss -0x58(%rbp), %xmm1
movq -0x10(%rbp), %rax
addss (%rax), %xmm1
subss -0x60(%rbp), %xmm1
movss 0x4a8c8(%rip), %xmm2    # 0x5b024
mulss %xmm2, %xmm1
callq 0xb7c0
movss %xmm0, -0x58(%rbp)
jmp 0x10795
movl -0x2c(%rbp), %eax
andl $0x4, %eax
cmpl $0x0, %eax
je 0x10793
movss -0x58(%rbp), %xmm0
movq -0x10(%rbp), %rax
movss (%rax), %xmm1
subss -0x60(%rbp), %xmm1
callq 0xb7c0
movss %xmm0, -0x58(%rbp)
jmp 0x10795
movl -0x2c(%rbp), %eax
andl $0x10, %eax
cmpl $0x0, %eax
je 0x107ce
movss -0x54(%rbp), %xmm0
movss -0x54(%rbp), %xmm1
movq -0x10(%rbp), %rax
addss 0x4(%rax), %xmm1
subss -0x5c(%rbp), %xmm1
movss 0x4a864(%rip), %xmm2    # 0x5b024
mulss %xmm2, %xmm1
callq 0xb7c0
movss %xmm0, -0x54(%rbp)
testb $0x1, -0x61(%rbp)
je 0x10881
movq 0x10(%rbp), %rax
movss (%rax), %xmm0
movq 0x10(%rbp), %rax
movss 0x4(%rax), %xmm1
movq 0x18(%rbp), %rax
movss (%rax), %xmm2
movq 0x18(%rbp), %rax
movss 0x4(%rax), %xmm3
leaq -0x74(%rbp), %rdi
callq 0x2d2b0
movq -0x50(%rbp), %rax
movq 0x270(%rax), %rax
movq %rax, -0x90(%rbp)
movq -0x48(%rbp), %rax
movq 0x1710(%rax), %rax
movq %rax, -0x88(%rbp)
movq -0x48(%rbp), %rax
movss 0x1718(%rax), %xmm0
movss %xmm0, -0x7c(%rbp)
movq -0x50(%rbp), %rdi
xorl %esi, %esi
movss 0x4a7d2(%rip), %xmm0    # 0x5b018
callq 0x2ea40
movq -0x90(%rbp), %rdi
movq -0x88(%rbp), %rsi
movss -0x7c(%rbp), %xmm0
movl %eax, %ecx
movq -0x18(%rbp), %r8
movq -0x38(%rbp), %r9
leaq -0x58(%rbp), %rdx
xorps %xmm1, %xmm1
leaq -0x74(%rbp), %rax
movq %rax, (%rsp)
callq 0x40a90
jmp 0x10902
movq -0x50(%rbp), %rax
movq 0x270(%rax), %rax
movq %rax, -0xa8(%rbp)
movq -0x48(%rbp), %rax
movq 0x1710(%rax), %rax
movq %rax, -0xa0(%rbp)
movq -0x48(%rbp), %rax
movss 0x1718(%rax), %xmm0
movss %xmm0, -0x94(%rbp)
movq -0x50(%rbp), %rdi
xorl %esi, %esi
movss 0x4a751(%rip), %xmm0    # 0x5b018
callq 0x2ea40
movq -0xa8(%rbp), %rdi
movq -0xa0(%rbp), %rsi
movss -0x94(%rbp), %xmm0
movl %eax, %ecx
movq -0x18(%rbp), %r8
movq -0x38(%rbp), %r9
leaq -0x58(%rbp), %rdx
xorps %xmm1, %xmm1
xorl %eax, %eax
movq $0x0, (%rsp)
callq 0x40a90
movq -0x48(%rbp), %rax
testb $0x1, 0x2be8(%rax)
je 0x10920
movq -0x18(%rbp), %rsi
movq -0x38(%rbp), %rdx
leaq -0x58(%rbp), %rdi
callq 0x10320
addq $0xb0, %rsp
popq %rbp
retq
nopl (%rax)