user: 下面的汇编指令对应的C源代码是什么:

```asm
<c_blit_write>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbx
  sub    $0x4c8,%rsp
  mov    %rdi,-0x4a8(%rbp)
  mov    %esi,%eax
  mov    %ecx,-0x4b4(%rbp)
  mov    %r8d,%r13d
  mov    %r9d,%r12d
  mov    0x18(%rbp),%ebx
  mov    0x20(%rbp),%r11d
  mov    0x28(%rbp),%r10d
  mov    0x30(%rbp),%r9d
  mov    0x38(%rbp),%edi
  mov    %edi,-0x4ec(%rbp)
  mov    0x40(%rbp),%r15d
  mov    0x48(%rbp),%r14d
  mov    0x58(%rbp),%r8d
  mov    0x60(%rbp),%edi
  mov    0x68(%rbp),%esi
  mov    0x70(%rbp),%ecx
  mov    %ax,-0x4ac(%rbp)
  mov    %edx,%eax
  mov    %ax,-0x4b0(%rbp)
  mov    %r13d,%eax
  mov    %ax,-0x4b8(%rbp)
  mov    %r12d,%eax
  mov    %ax,-0x4bc(%rbp)
  mov    %ebx,%eax
  mov    %ax,-0x4c0(%rbp)
  mov    %r11d,%eax
  mov    %ax,-0x4c4(%rbp)
  mov    %r10d,%eax
  mov    %ax,-0x4c8(%rbp)
  mov    %r9d,%eax
  mov    %ax,-0x4cc(%rbp)
  movzbl -0x4ec(%rbp),%eax
  mov    %al,-0x4d0(%rbp)
  mov    %r15d,%eax
  mov    %al,-0x4d4(%rbp)
  mov    %r14d,%eax
  mov    %al,-0x4d8(%rbp)
  mov    %r8d,%eax
  mov    %ax,-0x4dc(%rbp)
  mov    %edi,%eax
  mov    %ax,-0x4e0(%rbp)
  mov    %esi,%eax
  mov    %ax,-0x4e4(%rbp)
  mov    %ecx,%eax
  mov    %ax,-0x4e8(%rbp)
  movzwl -0x4b8(%rbp),%edx
  movzwl -0x4c0(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x48a(%rbp)
  movzwl -0x4bc(%rbp),%edx
  movzwl -0x4c4(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x488(%rbp)
  movzwl -0x4c0(%rbp),%edx
  movzwl -0x4c8(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x486(%rbp)
  movzwl -0x4c4(%rbp),%edx
  movzwl -0x4cc(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x484(%rbp)
  movswl -0x4c8(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0x3f0(%rbp)
  cmpb   $0x0,-0x4d4(%rbp)
  jne    L2292
  movzwl -0x4c0(%rbp),%eax
  cmp    -0x4dc(%rbp),%ax
  jl     L2292
  movzwl -0x486(%rbp),%eax
  cmp    -0x4e4(%rbp),%ax
  jg     L2292
  movzwl -0x4c4(%rbp),%eax
  cmp    -0x4e0(%rbp),%ax
  jl     L2292
  movzwl -0x484(%rbp),%eax
  cmp    -0x4e8(%rbp),%ax
  jg     L2292
  mov    0x10(%rbp),%rax
  mov    %rax,-0x40(%rbp)
  movswl -0x488(%rbp),%eax
  imul   -0x4b4(%rbp),%eax
  mov    %eax,%ecx
  movswl -0x48a(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  add    %ecx,%eax
  mov    %eax,%edx
  mov    -0x4a8(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x38(%rbp)
  movw   $0x0,-0x48c(%rbp)
  jmp    L2722
L2883:
  mov    -0x3f0(%rbp),%edx
  mov    -0x40(%rbp),%rcx
  mov    -0x38(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memcpy@plt>
  mov    -0x3f0(%rbp),%eax
  add    %rax,-0x40(%rbp)
  mov    -0x4b4(%rbp),%eax
  add    %rax,-0x38(%rbp)
  movzwl -0x48c(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x48c(%rbp)
L2722:
  movzwl -0x48c(%rbp),%eax
  cmp    -0x4cc(%rbp),%ax
  jl     L2883
  jmp    L1973
L2292:
  movzbl -0x4d4(%rbp),%eax
  cmp    $0xa,%eax
  ja     L1973
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rdx
  lea    D18(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  cltq
  lea    D18(%rip),%rdx
  add    %rdx,%rax
  notrack jmp *%rax
  movzbl -0x4d0(%rbp),%eax
  cmp    $0x4,%eax
  je     L274
  cmp    $0x4,%eax
  jg     L2913
  cmp    $0x2,%eax
  je     L3654
  cmp    $0x3,%eax
  je     L2656
  jmp    L2913
L274:
  movw   $0x0,-0x48c(%rbp)
  jmp    L445
L3510:
  movswl -0x48c(%rbp),%eax
  mov    -0x3f0(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0x94(%rbp)
  movzwl -0x488(%rbp),%edx
  movzwl -0x48c(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x3fc(%rbp)
  movzwl -0x3fc(%rbp),%eax
  mov    -0x4b4(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0x90(%rbp)
  movzwl -0x3fc(%rbp),%eax
  movswl -0x4bc(%rbp),%ecx
  movswl -0x4e0(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jl     L3139
  movzwl -0x3fc(%rbp),%eax
  movswl -0x4bc(%rbp),%ecx
  movswl -0x4e8(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jg     L3139
  movw   $0x0,-0x48e(%rbp)
  jmp    L1536
L741:
  movzwl -0x48a(%rbp),%edx
  movzwl -0x48e(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x3fa(%rbp)
  movzwl -0x3fa(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0x8c(%rbp)
  movzwl -0x3fa(%rbp),%eax
  movswl -0x4b8(%rbp),%ecx
  movswl -0x4dc(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jl     L3240
  movzwl -0x3fa(%rbp),%eax
  movswl -0x4b8(%rbp),%ecx
  movswl -0x4e4(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jg     L3240
  movswl -0x48e(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0x88(%rbp)
  mov    -0x94(%rbp),%edx
  mov    -0x88(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x84(%rbp)
  mov    -0x90(%rbp),%edx
  mov    -0x88(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x80(%rbp)
  mov    -0x8c(%rbp),%edx
  mov    -0x90(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x7c(%rbp)
  mov    -0x84(%rbp),%edx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  mov    -0x7c(%rbp),%ecx
  mov    -0x4a8(%rbp),%rdx
  add    %rcx,%rdx
  mov    (%rax),%eax
  mov    %eax,(%rdx)
L3240:
  movzwl -0x48e(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x48e(%rbp)
L1536:
  movzwl -0x48e(%rbp),%eax
  cmp    -0x4c8(%rbp),%ax
  jl     L741
L3139:
  movzwl -0x48c(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x48c(%rbp)
L445:
  movzwl -0x48c(%rbp),%eax
  cmp    -0x4cc(%rbp),%ax
  jl     L3510
  jmp    L3324
L2656:
  movw   $0x0,-0x48c(%rbp)
  jmp    L2700
L902:
  movswl -0x48c(%rbp),%eax
  mov    -0x3f0(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0x78(%rbp)
  movzwl -0x488(%rbp),%edx
  movzwl -0x48c(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x3f8(%rbp)
  movzwl -0x3f8(%rbp),%eax
  mov    -0x4b4(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0x74(%rbp)
  movzwl -0x3f8(%rbp),%eax
  movswl -0x4bc(%rbp),%ecx
  movswl -0x4e0(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jl     L1803
  movzwl -0x3f8(%rbp),%eax
  movswl -0x4bc(%rbp),%ecx
  movswl -0x4e8(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jg     L1803
  movw   $0x0,-0x48e(%rbp)
  jmp    L1215
L3724:
  movzwl -0x48a(%rbp),%edx
  movzwl -0x48e(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x3f6(%rbp)
  movzwl -0x3f6(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0x70(%rbp)
  movzwl -0x3f6(%rbp),%eax
  movswl -0x4b8(%rbp),%ecx
  movswl -0x4dc(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jl     L3520
  movzwl -0x3f6(%rbp),%eax
  movswl -0x4b8(%rbp),%ecx
  movswl -0x4e4(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jg     L3520
  movswl -0x48e(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0x6c(%rbp)
  mov    -0x78(%rbp),%edx
  mov    -0x6c(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x68(%rbp)
  mov    -0x74(%rbp),%edx
  mov    -0x6c(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x64(%rbp)
  mov    -0x70(%rbp),%edx
  mov    -0x74(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x60(%rbp)
  mov    -0x68(%rbp),%edx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  mov    -0x60(%rbp),%ecx
  mov    -0x4a8(%rbp),%rdx
  add    %rcx,%rdx
  movzbl (%rax),%eax
  mov    %al,(%rdx)
  mov    -0x68(%rbp),%eax
  lea    0x1(%rax),%rdx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  mov    -0x60(%rbp),%edx
  lea    0x1(%rdx),%rcx
  mov    -0x4a8(%rbp),%rdx
  add    %rcx,%rdx
  movzbl (%rax),%eax
  mov    %al,(%rdx)
  mov    -0x68(%rbp),%eax
  lea    0x2(%rax),%rdx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  mov    -0x60(%rbp),%edx
  lea    0x2(%rdx),%rcx
  mov    -0x4a8(%rbp),%rdx
  add    %rcx,%rdx
  movzbl (%rax),%eax
  mov    %al,(%rdx)
L3520:
  movzwl -0x48e(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x48e(%rbp)
L1215:
  movzwl -0x48e(%rbp),%eax
  cmp    -0x4c8(%rbp),%ax
  jl     L3724
L1803:
  movzwl -0x48c(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x48c(%rbp)
L2700:
  movzwl -0x48c(%rbp),%eax
  cmp    -0x4cc(%rbp),%ax
  jl     L902
  jmp    L3324
L3654:
  movw   $0x0,-0x48c(%rbp)
  jmp    L1585
L1860:
  movswl -0x48c(%rbp),%eax
  mov    -0x3f0(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0x5c(%rbp)
  movzwl -0x488(%rbp),%edx
  movzwl -0x48c(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x3f4(%rbp)
  movzwl -0x3f4(%rbp),%eax
  mov    -0x4b4(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0x58(%rbp)
  movzwl -0x3f4(%rbp),%eax
  movswl -0x4bc(%rbp),%ecx
  movswl -0x4e0(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jl     L1880
  movzwl -0x3f4(%rbp),%eax
  movswl -0x4bc(%rbp),%ecx
  movswl -0x4e8(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jg     L1880
  movw   $0x0,-0x48e(%rbp)
  jmp    L1546
L1319:
  movzwl -0x48a(%rbp),%edx
  movzwl -0x48e(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x3f2(%rbp)
  movzwl -0x3f2(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0x54(%rbp)
  movzwl -0x3f2(%rbp),%eax
  movswl -0x4b8(%rbp),%ecx
  movswl -0x4dc(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jl     L3657
  movzwl -0x3f2(%rbp),%eax
  movswl -0x4b8(%rbp),%ecx
  movswl -0x4e4(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jg     L3657
  movswl -0x48e(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0x50(%rbp)
  mov    -0x5c(%rbp),%edx
  mov    -0x50(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4c(%rbp)
  mov    -0x58(%rbp),%edx
  mov    -0x50(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x48(%rbp)
  mov    -0x54(%rbp),%edx
  mov    -0x58(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x44(%rbp)
  mov    -0x4c(%rbp),%edx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  mov    -0x44(%rbp),%ecx
  mov    -0x4a8(%rbp),%rdx
  add    %rcx,%rdx
  movzwl (%rax),%eax
  mov    %ax,(%rdx)
L3657:
  movzwl -0x48e(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x48e(%rbp)
L1546:
  movzwl -0x48e(%rbp),%eax
  cmp    -0x4c8(%rbp),%ax
  jl     L1319
L1880:
  movzwl -0x48c(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x48c(%rbp)
L1585:
  movzwl -0x48c(%rbp),%eax
  cmp    -0x4cc(%rbp),%ax
  jl     L1860
  nop
L3324:
  jmp    L2913
  movzbl -0x4d0(%rbp),%eax
  cmp    $0x4,%eax
  je     L2253
  cmp    $0x4,%eax
  jg     L998
  cmp    $0x2,%eax
  je     L516
  cmp    $0x3,%eax
  je     L467
  jmp    L998
L2253:
  movw   $0x0,-0x48c(%rbp)
  jmp    L2609
L1486:
  movswl -0x48c(%rbp),%eax
  mov    -0x3f0(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0xe8(%rbp)
  movzwl -0x488(%rbp),%edx
  movzwl -0x48c(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x408(%rbp)
  movzwl -0x408(%rbp),%eax
  mov    -0x4b4(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0xe4(%rbp)
  movzwl -0x408(%rbp),%eax
  movswl -0x4bc(%rbp),%ecx
  movswl -0x4e0(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jl     L1958
  movzwl -0x408(%rbp),%eax
  movswl -0x4bc(%rbp),%ecx
  movswl -0x4e8(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jg     L1958
  movw   $0x0,-0x48e(%rbp)
  jmp    L2148
L2270:
  movzwl -0x48a(%rbp),%edx
  movzwl -0x48e(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x406(%rbp)
  movzwl -0x406(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0xe0(%rbp)
  movzwl -0x406(%rbp),%eax
  movswl -0x4b8(%rbp),%ecx
  movswl -0x4dc(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jl     L832
  movzwl -0x406(%rbp),%eax
  movswl -0x4b8(%rbp),%ecx
  movswl -0x4e4(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jg     L832
  movswl -0x48e(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0xdc(%rbp)
  mov    -0xe8(%rbp),%edx
  mov    -0xdc(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0xd8(%rbp)
  mov    -0xe4(%rbp),%edx
  mov    -0xdc(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0xd4(%rbp)
  mov    -0xe0(%rbp),%edx
  mov    -0xe4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0xd0(%rbp)
  mov    -0xd0(%rbp),%edx
  mov    -0x4a8(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%ecx
  mov    -0xd8(%rbp),%edx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
  mov    -0xd0(%rbp),%esi
  mov    -0x4a8(%rbp),%rax
  add    %rsi,%rax
  xor    %ecx,%edx
  mov    %edx,(%rax)
L832:
  movzwl -0x48e(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x48e(%rbp)
L2148:
  movzwl -0x48e(%rbp),%eax
  cmp    -0x4c8(%rbp),%ax
  jl     L2270
L1958:
  movzwl -0x48c(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x48c(%rbp)
L2609:
  movzwl -0x48c(%rbp),%eax
  cmp    -0x4cc(%rbp),%ax
  jl     L1486
  jmp    L265
L467:
  movw   $0x0,-0x48c(%rbp)
  jmp    L966
L179:
  movswl -0x48c(%rbp),%eax
  mov    -0x3f0(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0xcc(%rbp)
  movzwl -0x488(%rbp),%edx
  movzwl -0x48c(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x404(%rbp)
  movzwl -0x404(%rbp),%eax
  mov    -0x4b4(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0xc8(%rbp)
  movzwl -0x404(%rbp),%eax
  movswl -0x4bc(%rbp),%ecx
  movswl -0x4e0(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jl     L1899
  movzwl -0x404(%rbp),%eax
  movswl -0x4bc(%rbp),%ecx
  movswl -0x4e8(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jg     L1899
  movw   $0x0,-0x48e(%rbp)
  jmp    L3411
L2286:
  movzwl -0x48a(%rbp),%edx
  movzwl -0x48e(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x402(%rbp)
  movzwl -0x402(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0xc4(%rbp)
  movzwl -0x402(%rbp),%eax
  movswl -0x4b8(%rbp),%ecx
  movswl -0x4dc(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jl     L494
  movzwl -0x402(%rbp),%eax
  movswl -0x4b8(%rbp),%ecx
  movswl -0x4e4(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jg     L494
  movswl -0x48e(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0xc0(%rbp)
  mov    -0xcc(%rbp),%edx
  mov    -0xc0(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0xbc(%rbp)
  mov    -0xc8(%rbp),%edx
  mov    -0xc0(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0xb8(%rbp)
  mov    -0xc4(%rbp),%edx
  mov    -0xc8(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0xb4(%rbp)
  mov    -0xb4(%rbp),%edx
  mov    -0x4a8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%ecx
  mov    -0xbc(%rbp),%edx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%edx
  mov    -0xb4(%rbp),%esi
  mov    -0x4a8(%rbp),%rax
  add    %rsi,%rax
  xor    %ecx,%edx
  mov    %dl,(%rax)
  mov    -0xb4(%rbp),%eax
  lea    0x1(%rax),%rdx
  mov    -0x4a8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%ecx
  mov    -0xbc(%rbp),%eax
  lea    0x1(%rax),%rdx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%edx
  mov    -0xb4(%rbp),%eax
  lea    0x1(%rax),%rsi
  mov    -0x4a8(%rbp),%rax
  add    %rsi,%rax
  xor    %ecx,%edx
  mov    %dl,(%rax)
  mov    -0xb4(%rbp),%eax
  lea    0x2(%rax),%rdx
  mov    -0x4a8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%ecx
  mov    -0xbc(%rbp),%eax
  lea    0x2(%rax),%rdx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%edx
  mov    -0xb4(%rbp),%eax
  lea    0x2(%rax),%rsi
  mov    -0x4a8(%rbp),%rax
  add    %rsi,%rax
  xor    %ecx,%edx
  mov    %dl,(%rax)
L494:
  movzwl -0x48e(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x48e(%rbp)
L3411:
  movzwl -0x48e(%rbp),%eax
  cmp    -0x4c8(%rbp),%ax
  jl     L2286
L1899:
  movzwl -0x48c(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x48c(%rbp)
L966:
  movzwl -0x48c(%rbp),%eax
  cmp    -0x4cc(%rbp),%ax
  jl     L179
  jmp    L265
L516:
  movw   $0x0,-0x48c(%rbp)
  jmp    L3745
L661:
  movswl -0x48c(%rbp),%eax
  mov    -0x3f0(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0xb0(%rbp)
  movzwl -0x488(%rbp),%edx
  movzwl -0x48c(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x400(%rbp)
  movzwl -0x400(%rbp),%eax
  mov    -0x4b4(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0xac(%rbp)
  movzwl -0x400(%rbp),%eax
  movswl -0x4bc(%rbp),%ecx
  movswl -0x4e0(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jl     L2044
  movzwl -0x400(%rbp),%eax
  movswl -0x4bc(%rbp),%ecx
  movswl -0x4e8(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jg     L2044
  movw   $0x0,-0x48e(%rbp)
  jmp    L410
L718:
  movzwl -0x48a(%rbp),%edx
  movzwl -0x48e(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x3fe(%rbp)
  movzwl -0x3fe(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0xa8(%rbp)
  movzwl -0x3fe(%rbp),%eax
  movswl -0x4b8(%rbp),%ecx
  movswl -0x4dc(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jl     L719
  movzwl -0x3fe(%rbp),%eax
  movswl -0x4b8(%rbp),%ecx
  movswl -0x4e4(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jg     L719
  movswl -0x48e(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0xa4(%rbp)
  mov    -0xb0(%rbp),%edx
  mov    -0xa4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0xa0(%rbp)
  mov    -0xac(%rbp),%edx
  mov    -0xa4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x9c(%rbp)
  mov    -0xa8(%rbp),%edx
  mov    -0xac(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x98(%rbp)
  mov    -0x98(%rbp),%edx
  mov    -0x4a8(%rbp),%rax
  add    %rdx,%rax
  movzwl (%rax),%ecx
  mov    -0xa0(%rbp),%edx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  movzwl (%rax),%edx
  mov    -0x98(%rbp),%esi
  mov    -0x4a8(%rbp),%rax
  add    %rsi,%rax
  xor    %ecx,%edx
  mov    %dx,(%rax)
L719:
  movzwl -0x48e(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x48e(%rbp)
L410:
  movzwl -0x48e(%rbp),%eax
  cmp    -0x4c8(%rbp),%ax
  jl     L718
L2044:
  movzwl -0x48c(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x48c(%rbp)
L3745:
  movzwl -0x48c(%rbp),%eax
  cmp    -0x4cc(%rbp),%ax
  jl     L661
  nop
L265:
  jmp    L998
  movzbl -0x4d0(%rbp),%eax
  cmp    $0x4,%eax
  je     L2935
  cmp    $0x4,%eax
  jg     L1316
  cmp    $0x2,%eax
  je     L309
  cmp    $0x3,%eax
  je     L1463
  jmp    L1316
L2935:
  movw   $0x0,-0x48c(%rbp)
  jmp    L53
L1593:
  movswl -0x48c(%rbp),%eax
  mov    -0x3f0(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0x13c(%rbp)
  movzwl -0x488(%rbp),%edx
  movzwl -0x48c(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x414(%rbp)
  movzwl -0x414(%rbp),%eax
  mov    -0x4b4(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0x138(%rbp)
  movzwl -0x414(%rbp),%eax
  movswl -0x4bc(%rbp),%ecx
  movswl -0x4e0(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jl     L3160
  movzwl -0x414(%rbp),%eax
  movswl -0x4bc(%rbp),%ecx
  movswl -0x4e8(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jg     L3160
  movw   $0x0,-0x48e(%rbp)
  jmp    L3760
L2988:
  movzwl -0x48a(%rbp),%edx
  movzwl -0x48e(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x412(%rbp)
  movzwl -0x412(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0x134(%rbp)
  movzwl -0x412(%rbp),%eax
  movswl -0x4b8(%rbp),%ecx
  movswl -0x4dc(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jl     L2183
  movzwl -0x412(%rbp),%eax
  movswl -0x4b8(%rbp),%ecx
  movswl -0x4e4(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jg     L2183
  movswl -0x48e(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0x130(%rbp)
  mov    -0x13c(%rbp),%edx
  mov    -0x130(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x12c(%rbp)
  mov    -0x138(%rbp),%edx
  mov    -0x130(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x128(%rbp)
  mov    -0x134(%rbp),%edx
  mov    -0x138(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x124(%rbp)
  mov    -0x124(%rbp),%edx
  mov    -0x4a8(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%ecx
  mov    -0x12c(%rbp),%edx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
  mov    -0x124(%rbp),%esi
  mov    -0x4a8(%rbp),%rax
  add    %rsi,%rax
  or     %ecx,%edx
  mov    %edx,(%rax)
L2183:
  movzwl -0x48e(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x48e(%rbp)
L3760:
  movzwl -0x48e(%rbp),%eax
  cmp    -0x4c8(%rbp),%ax
  jl     L2988
L3160:
  movzwl -0x48c(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x48c(%rbp)
L53:
  movzwl -0x48c(%rbp),%eax
  cmp    -0x4cc(%rbp),%ax
  jl     L1593
  jmp    L588
L1463:
  movw   $0x0,-0x48c(%rbp)
  jmp    L1346
L1595:
  movswl -0x48c(%rbp),%eax
  mov    -0x3f0(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0x120(%rbp)
  movzwl -0x488(%rbp),%edx
  movzwl -0x48c(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x410(%rbp)
  movzwl -0x410(%rbp),%eax
  mov    -0x4b4(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0x11c(%rbp)
  movzwl -0x410(%rbp),%eax
  movswl -0x4bc(%rbp),%ecx
  movswl -0x4e0(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jl     L2335
  movzwl -0x410(%rbp),%eax
  movswl -0x4bc(%rbp),%ecx
  movswl -0x4e8(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jg     L2335
  movw   $0x0,-0x48e(%rbp)
  jmp    L3397
L788:
  movzwl -0x48a(%rbp),%edx
  movzwl -0x48e(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x40e(%rbp)
  movzwl -0x40e(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0x118(%rbp)
  movzwl -0x40e(%rbp),%eax
  movswl -0x4b8(%rbp),%ecx
  movswl -0x4dc(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jl     L858
  movzwl -0x40e(%rbp),%eax
  movswl -0x4b8(%rbp),%ecx
  movswl -0x4e4(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jg     L858
  movswl -0x48e(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0x114(%rbp)
  mov    -0x120(%rbp),%edx
  mov    -0x114(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x110(%rbp)
  mov    -0x11c(%rbp),%edx
  mov    -0x114(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x10c(%rbp)
  mov    -0x118(%rbp),%edx
  mov    -0x11c(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x108(%rbp)
  mov    -0x108(%rbp),%edx
  mov    -0x4a8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%ecx
  mov    -0x110(%rbp),%edx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%edx
  mov    -0x108(%rbp),%esi
  mov    -0x4a8(%rbp),%rax
  add    %rsi,%rax
  or     %ecx,%edx
  mov    %dl,(%rax)
  mov    -0x108(%rbp),%eax
  lea    0x1(%rax),%rdx
  mov    -0x4a8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%ecx
  mov    -0x110(%rbp),%eax
  lea    0x1(%rax),%rdx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%edx
  mov    -0x108(%rbp),%eax
  lea    0x1(%rax),%rsi
  mov    -0x4a8(%rbp),%rax
  add    %rsi,%rax
  or     %ecx,%edx
  mov    %dl,(%rax)
  mov    -0x108(%rbp),%eax
  lea    0x2(%rax),%rdx
  mov    -0x4a8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%ecx
  mov    -0x110(%rbp),%eax
  lea    0x2(%rax),%rdx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%edx
  mov    -0x108(%rbp),%eax
  lea    0x2(%rax),%rsi
  mov    -0x4a8(%rbp),%rax
  add    %rsi,%rax
  or     %ecx,%edx
  mov    %dl,(%rax)
L858:
  movzwl -0x48e(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x48e(%rbp)
L3397:
  movzwl -0x48e(%rbp),%eax
  cmp    -0x4c8(%rbp),%ax
  jl     L788
L2335:
  movzwl -0x48c(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x48c(%rbp)
L1346:
  movzwl -0x48c(%rbp),%eax
  cmp    -0x4cc(%rbp),%ax
  jl     L1595
  jmp    L588
L309:
  movw   $0x0,-0x48c(%rbp)
  jmp    L3032
L3737:
  movswl -0x48c(%rbp),%eax
  mov    -0x3f0(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0x104(%rbp)
  movzwl -0x488(%rbp),%edx
  movzwl -0x48c(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x40c(%rbp)
  movzwl -0x40c(%rbp),%eax
  mov    -0x4b4(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0x100(%rbp)
  movzwl -0x40c(%rbp),%eax
  movswl -0x4bc(%rbp),%ecx
  movswl -0x4e0(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jl     L3217
  movzwl -0x40c(%rbp),%eax
  movswl -0x4bc(%rbp),%ecx
  movswl -0x4e8(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jg     L3217
  movw   $0x0,-0x48e(%rbp)
  jmp    L3570
L2679:
  movzwl -0x48a(%rbp),%edx
  movzwl -0x48e(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x40a(%rbp)
  movzwl -0x40a(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0xfc(%rbp)
  movzwl -0x40a(%rbp),%eax
  movswl -0x4b8(%rbp),%ecx
  movswl -0x4dc(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jl     L984
  movzwl -0x40a(%rbp),%eax
  movswl -0x4b8(%rbp),%ecx
  movswl -0x4e4(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jg     L984
  movswl -0x48e(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0xf8(%rbp)
  mov    -0x104(%rbp),%edx
  mov    -0xf8(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0xf4(%rbp)
  mov    -0x100(%rbp),%edx
  mov    -0xf8(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0xf0(%rbp)
  mov    -0xfc(%rbp),%edx
  mov    -0x100(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0xec(%rbp)
  mov    -0xec(%rbp),%edx
  mov    -0x4a8(%rbp),%rax
  add    %rdx,%rax
  movzwl (%rax),%ecx
  mov    -0xf4(%rbp),%edx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  movzwl (%rax),%edx
  mov    -0xec(%rbp),%esi
  mov    -0x4a8(%rbp),%rax
  add    %rsi,%rax
  or     %ecx,%edx
  mov    %dx,(%rax)
L984:
  movzwl -0x48e(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x48e(%rbp)
L3570:
  movzwl -0x48e(%rbp),%eax
  cmp    -0x4c8(%rbp),%ax
  jl     L2679
L3217:
  movzwl -0x48c(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x48c(%rbp)
L3032:
  movzwl -0x48c(%rbp),%eax
  cmp    -0x4cc(%rbp),%ax
  jl     L3737
  nop
L588:
  jmp    L1316
  movzbl -0x4d0(%rbp),%eax
  cmp    $0x4,%eax
  je     L3673
  cmp    $0x4,%eax
  jg     L1172
  cmp    $0x2,%eax
  je     L986
  cmp    $0x3,%eax
  je     L2553
  jmp    L1172
L3673:
  movw   $0x0,-0x48c(%rbp)
  jmp    L809
L715:
  movswl -0x48c(%rbp),%eax
  mov    -0x3f0(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0x190(%rbp)
  movzwl -0x488(%rbp),%edx
  movzwl -0x48c(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x420(%rbp)
  movzwl -0x420(%rbp),%eax
  mov    -0x4b4(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0x18c(%rbp)
  movzwl -0x420(%rbp),%eax
  movswl -0x4bc(%rbp),%ecx
  movswl -0x4e0(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jl     L2054
  movzwl -0x420(%rbp),%eax
  movswl -0x4bc(%rbp),%ecx
  movswl -0x4e8(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jg     L2054
  movw   $0x0,-0x48e(%rbp)
  jmp    L3478
L158:
  movzwl -0x48a(%rbp),%edx
  movzwl -0x48e(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x41e(%rbp)
  movzwl -0x41e(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0x188(%rbp)
  movzwl -0x41e(%rbp),%eax
  movswl -0x4b8(%rbp),%ecx
  movswl -0x4dc(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jl     L1706
  movzwl -0x41e(%rbp),%eax
  movswl -0x4b8(%rbp),%ecx
  movswl -0x4e4(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jg     L1706
  movswl -0x48e(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0x184(%rbp)
  mov    -0x190(%rbp),%edx
  mov    -0x184(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x180(%rbp)
  mov    -0x18c(%rbp),%edx
  mov    -0x184(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x17c(%rbp)
  mov    -0x188(%rbp),%edx
  mov    -0x18c(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x178(%rbp)
  mov    -0x178(%rbp),%edx
  mov    -0x4a8(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%ecx
  mov    -0x180(%rbp),%edx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
  mov    -0x178(%rbp),%esi
  mov    -0x4a8(%rbp),%rax
  add    %rsi,%rax
  and    %ecx,%edx
  mov    %edx,(%rax)
L1706:
  movzwl -0x48e(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x48e(%rbp)
L3478:
  movzwl -0x48e(%rbp),%eax
  cmp    -0x4c8(%rbp),%ax
  jl     L158
L2054:
  movzwl -0x48c(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x48c(%rbp)
L809:
  movzwl -0x48c(%rbp),%eax
  cmp    -0x4cc(%rbp),%ax
  jl     L715
  jmp    L1928
L2553:
  movw   $0x0,-0x48c(%rbp)
  jmp    L2545
L1170:
  movswl -0x48c(%rbp),%eax
  mov    -0x3f0(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0x174(%rbp)
  movzwl -0x488(%rbp),%edx
  movzwl -0x48c(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x41c(%rbp)
  movzwl -0x41c(%rbp),%eax
  mov    -0x4b4(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0x170(%rbp)
  movzwl -0x41c(%rbp),%eax
  movswl -0x4bc(%rbp),%ecx
  movswl -0x4e0(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jl     L797
  movzwl -0x41c(%rbp),%eax
  movswl -0x4bc(%rbp),%ecx
  movswl -0x4e8(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jg     L797
  movw   $0x0,-0x48e(%rbp)
  jmp    L2899
L2354:
  movzwl -0x48a(%rbp),%edx
  movzwl -0x48e(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x41a(%rbp)
  movzwl -0x41a(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0x16c(%rbp)
  movzwl -0x41a(%rbp),%eax
  movswl -0x4b8(%rbp),%ecx
  movswl -0x4dc(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jl     L874
  movzwl -0x41a(%rbp),%eax
  movswl -0x4b8(%rbp),%ecx
  movswl -0x4e4(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jg     L874
  movswl -0x48e(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0x168(%rbp)
  mov    -0x174(%rbp),%edx
  mov    -0x168(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x164(%rbp)
  mov    -0x170(%rbp),%edx
  mov    -0x168(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x160(%rbp)
  mov    -0x16c(%rbp),%edx
  mov    -0x170(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x15c(%rbp)
  mov    -0x15c(%rbp),%edx
  mov    -0x4a8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%ecx
  mov    -0x164(%rbp),%edx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%edx
  mov    -0x15c(%rbp),%esi
  mov    -0x4a8(%rbp),%rax
  add    %rsi,%rax
  and    %ecx,%edx
  mov    %dl,(%rax)
  mov    -0x15c(%rbp),%eax
  lea    0x1(%rax),%rdx
  mov    -0x4a8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%ecx
  mov    -0x164(%rbp),%eax
  lea    0x1(%rax),%rdx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%edx
  mov    -0x15c(%rbp),%eax
  lea    0x1(%rax),%rsi
  mov    -0x4a8(%rbp),%rax
  add    %rsi,%rax
  and    %ecx,%edx
  mov    %dl,(%rax)
  mov    -0x15c(%rbp),%eax
  lea    0x2(%rax),%rdx
  mov    -0x4a8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%ecx
  mov    -0x164(%rbp),%eax
  lea    0x2(%rax),%rdx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%edx
  mov    -0x15c(%rbp),%eax
  lea    0x2(%rax),%rsi
  mov    -0x4a8(%rbp),%rax
  add    %rsi,%rax
  and    %ecx,%edx
  mov    %dl,(%rax)
L874:
  movzwl -0x48e(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x48e(%rbp)
L2899:
  movzwl -0x48e(%rbp),%eax
  cmp    -0x4c8(%rbp),%ax
  jl     L2354
L797:
  movzwl -0x48c(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x48c(%rbp)
L2545:
  movzwl -0x48c(%rbp),%eax
  cmp    -0x4cc(%rbp),%ax
  jl     L1170
  jmp    L1928
L986:
  movw   $0x0,-0x48c(%rbp)
  jmp    L168
L1197:
  movswl -0x48c(%rbp),%eax
  mov    -0x3f0(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0x158(%rbp)
  movzwl -0x488(%rbp),%edx
  movzwl -0x48c(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x418(%rbp)
  movzwl -0x418(%rbp),%eax
  mov    -0x4b4(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0x154(%rbp)
  movzwl -0x418(%rbp),%eax
  movswl -0x4bc(%rbp),%ecx
  movswl -0x4e0(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jl     L1684
  movzwl -0x418(%rbp),%eax
  movswl -0x4bc(%rbp),%ecx
  movswl -0x4e8(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jg     L1684
  movw   $0x0,-0x48e(%rbp)
  jmp    L793
L1385:
  movzwl -0x48a(%rbp),%edx
  movzwl -0x48e(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x416(%rbp)
  movzwl -0x416(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0x150(%rbp)
  movzwl -0x416(%rbp),%eax
  movswl -0x4b8(%rbp),%ecx
  movswl -0x4dc(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jl     L303
  movzwl -0x416(%rbp),%eax
  movswl -0x4b8(%rbp),%ecx
  movswl -0x4e4(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jg     L303
  movswl -0x48e(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0x14c(%rbp)
  mov    -0x158(%rbp),%edx
  mov    -0x14c(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x148(%rbp)
  mov    -0x154(%rbp),%edx
  mov    -0x14c(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x144(%rbp)
  mov    -0x150(%rbp),%edx
  mov    -0x154(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x140(%rbp)
  mov    -0x140(%rbp),%edx
  mov    -0x4a8(%rbp),%rax
  add    %rdx,%rax
  movzwl (%rax),%ecx
  mov    -0x148(%rbp),%edx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  movzwl (%rax),%edx
  mov    -0x140(%rbp),%esi
  mov    -0x4a8(%rbp),%rax
  add    %rsi,%rax
  and    %ecx,%edx
  mov    %dx,(%rax)
L303:
  movzwl -0x48e(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x48e(%rbp)
L793:
  movzwl -0x48e(%rbp),%eax
  cmp    -0x4c8(%rbp),%ax
  jl     L1385
L1684:
  movzwl -0x48c(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x48c(%rbp)
L168:
  movzwl -0x48c(%rbp),%eax
  cmp    -0x4cc(%rbp),%ax
  jl     L1197
  nop
L1928:
  jmp    L1172
  movzbl -0x4d0(%rbp),%eax
  cmp    $0x4,%eax
  je     L1891
  cmp    $0x4,%eax
  jg     L695
  cmp    $0x2,%eax
  je     L1085
  cmp    $0x3,%eax
  je     L3276
  jmp    L695
L1891:
  movw   $0x0,-0x48c(%rbp)
  jmp    L1179
L2674:
  movswl -0x48c(%rbp),%eax
  mov    -0x3f0(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0x1ec(%rbp)
  movzwl -0x488(%rbp),%edx
  movzwl -0x48c(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x42c(%rbp)
  movzwl -0x42c(%rbp),%eax
  mov    -0x4b4(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0x1e8(%rbp)
  movzwl -0x42c(%rbp),%eax
  movswl -0x4bc(%rbp),%ecx
  movswl -0x4e0(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jl     L903
  movzwl -0x42c(%rbp),%eax
  movswl -0x4bc(%rbp),%ecx
  movswl -0x4e8(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jg     L903
  movw   $0x0,-0x48e(%rbp)
  jmp    L3460
L2964:
  movzwl -0x48a(%rbp),%edx
  movzwl -0x48e(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x42a(%rbp)
  movzwl -0x42a(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0x1e4(%rbp)
  movzwl -0x42a(%rbp),%eax
  movswl -0x4b8(%rbp),%ecx
  movswl -0x4dc(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jl     L828
  movzwl -0x42a(%rbp),%eax
  movswl -0x4b8(%rbp),%ecx
  movswl -0x4e4(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jg     L828
  movswl -0x48e(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0x1e0(%rbp)
  mov    -0x1ec(%rbp),%edx
  mov    -0x1e0(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x1dc(%rbp)
  mov    -0x1e8(%rbp),%edx
  mov    -0x1e0(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x1d8(%rbp)
  mov    -0x1e4(%rbp),%edx
  mov    -0x1e8(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x1d4(%rbp)
  mov    -0x1dc(%rbp),%edx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x1d0(%rbp)
  mov    -0x1d0(%rbp),%eax
  xor    0x50(%rbp),%eax
  mov    $0x0,%al
  test   %eax,%eax
  je     L828
  mov    -0x1d4(%rbp),%edx
  mov    -0x4a8(%rbp),%rax
  add    %rax,%rdx
  mov    -0x1d0(%rbp),%eax
  mov    %eax,(%rdx)
L828:
  movzwl -0x48e(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x48e(%rbp)
L3460:
  movzwl -0x48e(%rbp),%eax
  cmp    -0x4c8(%rbp),%ax
  jl     L2964
L903:
  movzwl -0x48c(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x48c(%rbp)
L1179:
  movzwl -0x48c(%rbp),%eax
  cmp    -0x4cc(%rbp),%ax
  jl     L2674
  jmp    L12
L3276:
  movw   $0x0,-0x48c(%rbp)
  jmp    L3487
L2195:
  movswl -0x48c(%rbp),%eax
  mov    -0x3f0(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0x1cc(%rbp)
  movzwl -0x488(%rbp),%edx
  movzwl -0x48c(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x428(%rbp)
  movzwl -0x428(%rbp),%eax
  mov    -0x4b4(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0x1c8(%rbp)
  movzwl -0x428(%rbp),%eax
  movswl -0x4bc(%rbp),%ecx
  movswl -0x4e0(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jl     L1908
  movzwl -0x428(%rbp),%eax
  movswl -0x4bc(%rbp),%ecx
  movswl -0x4e8(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jg     L1908
  movw   $0x0,-0x48e(%rbp)
  jmp    L1337
L1200:
  movzwl -0x48a(%rbp),%edx
  movzwl -0x48e(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x426(%rbp)
  movzwl -0x426(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0x1c4(%rbp)
  movzwl -0x426(%rbp),%eax
  movswl -0x4b8(%rbp),%ecx
  movswl -0x4dc(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jl     L1488
  movzwl -0x426(%rbp),%eax
  movswl -0x4b8(%rbp),%ecx
  movswl -0x4e4(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jg     L1488
  movswl -0x48e(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0x1c0(%rbp)
  mov    -0x1cc(%rbp),%edx
  mov    -0x1c0(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x1bc(%rbp)
  mov    -0x1c8(%rbp),%edx
  mov    -0x1c0(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x1b8(%rbp)
  mov    -0x1c4(%rbp),%edx
  mov    -0x1c8(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x1b4(%rbp)
  mov    -0x1bc(%rbp),%edx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  xor    0x50(%rbp),%eax
  mov    $0x0,%al
  test   %eax,%eax
  je     L1488
  mov    -0x1bc(%rbp),%edx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  mov    -0x1b4(%rbp),%ecx
  mov    -0x4a8(%rbp),%rdx
  add    %rcx,%rdx
  movzbl (%rax),%eax
  mov    %al,(%rdx)
  mov    -0x1bc(%rbp),%eax
  lea    0x1(%rax),%rdx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  mov    -0x1b4(%rbp),%edx
  lea    0x1(%rdx),%rcx
  mov    -0x4a8(%rbp),%rdx
  add    %rcx,%rdx
  movzbl (%rax),%eax
  mov    %al,(%rdx)
  mov    -0x1bc(%rbp),%eax
  lea    0x2(%rax),%rdx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  mov    -0x1b4(%rbp),%edx
  lea    0x2(%rdx),%rcx
  mov    -0x4a8(%rbp),%rdx
  add    %rcx,%rdx
  movzbl (%rax),%eax
  mov    %al,(%rdx)
L1488:
  movzwl -0x48e(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x48e(%rbp)
L1337:
  movzwl -0x48e(%rbp),%eax
  cmp    -0x4c8(%rbp),%ax
  jl     L1200
L1908:
  movzwl -0x48c(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x48c(%rbp)
L3487:
  movzwl -0x48c(%rbp),%eax
  cmp    -0x4cc(%rbp),%ax
  jl     L2195
  jmp    L12
L1085:
  movw   $0x0,-0x48c(%rbp)
  jmp    L2675
L2382:
  movswl -0x48c(%rbp),%eax
  mov    -0x3f0(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0x1b0(%rbp)
  movzwl -0x488(%rbp),%edx
  movzwl -0x48c(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x424(%rbp)
  movzwl -0x424(%rbp),%eax
  mov    -0x4b4(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0x1ac(%rbp)
  movzwl -0x424(%rbp),%eax
  movswl -0x4bc(%rbp),%ecx
  movswl -0x4e0(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jl     L963
  movzwl -0x424(%rbp),%eax
  movswl -0x4bc(%rbp),%ecx
  movswl -0x4e8(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jg     L963
  movw   $0x0,-0x48e(%rbp)
  jmp    L3562
L1997:
  movzwl -0x48a(%rbp),%edx
  movzwl -0x48e(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x422(%rbp)
  movzwl -0x422(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0x1a8(%rbp)
  movzwl -0x422(%rbp),%eax
  movswl -0x4b8(%rbp),%ecx
  movswl -0x4dc(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jl     L525
  movzwl -0x422(%rbp),%eax
  movswl -0x4b8(%rbp),%ecx
  movswl -0x4e4(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jg     L525
  movswl -0x48e(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0x1a4(%rbp)
  mov    -0x1b0(%rbp),%edx
  mov    -0x1a4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x1a0(%rbp)
  mov    -0x1ac(%rbp),%edx
  mov    -0x1a4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x19c(%rbp)
  mov    -0x1a8(%rbp),%edx
  mov    -0x1ac(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x198(%rbp)
  mov    -0x1a0(%rbp),%edx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  movzwl (%rax),%eax
  movzwl %ax,%eax
  mov    %eax,-0x194(%rbp)
  mov    0x50(%rbp),%eax
  movzwl %ax,%eax
  cmp    %eax,-0x194(%rbp)
  je     L525
  mov    -0x198(%rbp),%edx
  mov    -0x4a8(%rbp),%rax
  add    %rdx,%rax
  mov    -0x194(%rbp),%edx
  mov    %dx,(%rax)
L525:
  movzwl -0x48e(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x48e(%rbp)
L3562:
  movzwl -0x48e(%rbp),%eax
  cmp    -0x4c8(%rbp),%ax
  jl     L1997
L963:
  movzwl -0x48c(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x48c(%rbp)
L2675:
  movzwl -0x48c(%rbp),%eax
  cmp    -0x4cc(%rbp),%ax
  jl     L2382
  nop
L12:
  jmp    L695
  movzbl -0x4d0(%rbp),%eax
  cmp    $0x4,%eax
  je     L2706
  cmp    $0x4,%eax
  jg     L2373
  cmp    $0x2,%eax
  je     L440
  cmp    $0x3,%eax
  je     L1120
  jmp    L2373
L2706:
  movw   $0x0,-0x48c(%rbp)
  jmp    L1379
L277:
  movswl -0x48c(%rbp),%eax
  mov    -0x3f0(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0x240(%rbp)
  movzwl -0x488(%rbp),%edx
  movzwl -0x48c(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x438(%rbp)
  movzwl -0x438(%rbp),%eax
  mov    -0x4b4(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0x23c(%rbp)
  movzwl -0x438(%rbp),%eax
  movswl -0x4bc(%rbp),%ecx
  movswl -0x4e0(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jl     L846
  movzwl -0x438(%rbp),%eax
  movswl -0x4bc(%rbp),%ecx
  movswl -0x4e8(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jg     L846
  movw   $0x0,-0x48e(%rbp)
  jmp    L931
L961:
  movzwl -0x48a(%rbp),%edx
  movzwl -0x48e(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x436(%rbp)
  movzwl -0x436(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0x238(%rbp)
  movzwl -0x436(%rbp),%eax
  movswl -0x4b8(%rbp),%ecx
  movswl -0x4dc(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jl     L1025
  movzwl -0x436(%rbp),%eax
  movswl -0x4b8(%rbp),%ecx
  movswl -0x4e4(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jg     L1025
  movswl -0x48e(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0x234(%rbp)
  mov    -0x240(%rbp),%edx
  mov    -0x234(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x230(%rbp)
  mov    -0x23c(%rbp),%edx
  mov    -0x234(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x22c(%rbp)
  mov    -0x238(%rbp),%edx
  mov    -0x23c(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x228(%rbp)
  mov    -0x228(%rbp),%edx
  mov    -0x4a8(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  xor    0x50(%rbp),%eax
  mov    $0x0,%al
  test   %eax,%eax
  jne    L1025
  mov    -0x230(%rbp),%edx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  mov    -0x228(%rbp),%ecx
  mov    -0x4a8(%rbp),%rdx
  add    %rcx,%rdx
  mov    (%rax),%eax
  mov    %eax,(%rdx)
L1025:
  movzwl -0x48e(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x48e(%rbp)
L931:
  movzwl -0x48e(%rbp),%eax
  cmp    -0x4c8(%rbp),%ax
  jl     L961
L846:
  movzwl -0x48c(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x48c(%rbp)
L1379:
  movzwl -0x48c(%rbp),%eax
  cmp    -0x4cc(%rbp),%ax
  jl     L277
  jmp    L2502
L1120:
  movw   $0x0,-0x48c(%rbp)
  jmp    L3285
L3734:
  movswl -0x48c(%rbp),%eax
  mov    -0x3f0(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0x224(%rbp)
  movzwl -0x488(%rbp),%edx
  movzwl -0x48c(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x434(%rbp)
  movzwl -0x434(%rbp),%eax
  mov    -0x4b4(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0x220(%rbp)
  movzwl -0x434(%rbp),%eax
  movswl -0x4bc(%rbp),%ecx
  movswl -0x4e0(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jl     L1111
  movzwl -0x434(%rbp),%eax
  movswl -0x4bc(%rbp),%ecx
  movswl -0x4e8(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jg     L1111
  movw   $0x0,-0x48e(%rbp)
  jmp    L2389
L2598:
  movzwl -0x48a(%rbp),%edx
  movzwl -0x48e(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x432(%rbp)
  movzwl -0x432(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0x21c(%rbp)
  movzwl -0x432(%rbp),%eax
  movswl -0x4b8(%rbp),%ecx
  movswl -0x4dc(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jl     L3305
  movzwl -0x432(%rbp),%eax
  movswl -0x4b8(%rbp),%ecx
  movswl -0x4e4(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jg     L3305
  movswl -0x48e(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0x218(%rbp)
  mov    -0x224(%rbp),%edx
  mov    -0x218(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x214(%rbp)
  mov    -0x220(%rbp),%edx
  mov    -0x218(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x210(%rbp)
  mov    -0x21c(%rbp),%edx
  mov    -0x220(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x20c(%rbp)
  mov    -0x21c(%rbp),%edx
  mov    -0x210(%rbp),%eax
  add    %rax,%rdx
  mov    -0x4a8(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    0x50(%rbp),%edx
  mov    $0x0,%dl
  cmp    %edx,%eax
  jne    L3305
  mov    -0x214(%rbp),%edx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  mov    -0x20c(%rbp),%ecx
  mov    -0x4a8(%rbp),%rdx
  add    %rcx,%rdx
  movzbl (%rax),%eax
  mov    %al,(%rdx)
  mov    -0x214(%rbp),%eax
  lea    0x1(%rax),%rdx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  mov    -0x20c(%rbp),%edx
  lea    0x1(%rdx),%rcx
  mov    -0x4a8(%rbp),%rdx
  add    %rcx,%rdx
  movzbl (%rax),%eax
  mov    %al,(%rdx)
  mov    -0x214(%rbp),%eax
  lea    0x2(%rax),%rdx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  mov    -0x20c(%rbp),%edx
  lea    0x2(%rdx),%rcx
  mov    -0x4a8(%rbp),%rdx
  add    %rcx,%rdx
  movzbl (%rax),%eax
  mov    %al,(%rdx)
L3305:
  movzwl -0x48e(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x48e(%rbp)
L2389:
  movzwl -0x48e(%rbp),%eax
  cmp    -0x4c8(%rbp),%ax
  jl     L2598
L1111:
  movzwl -0x48c(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x48c(%rbp)
L3285:
  movzwl -0x48c(%rbp),%eax
  cmp    -0x4cc(%rbp),%ax
  jl     L3734
  jmp    L2502
L440:
  movw   $0x0,-0x48c(%rbp)
  jmp    L628
L3266:
  movswl -0x48c(%rbp),%eax
  mov    -0x3f0(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0x208(%rbp)
  movzwl -0x488(%rbp),%edx
  movzwl -0x48c(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x430(%rbp)
  movzwl -0x430(%rbp),%eax
  mov    -0x4b4(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0x204(%rbp)
  movzwl -0x430(%rbp),%eax
  movswl -0x4bc(%rbp),%ecx
  movswl -0x4e0(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jl     L2160
  movzwl -0x430(%rbp),%eax
  movswl -0x4bc(%rbp),%ecx
  movswl -0x4e8(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jg     L2160
  movw   $0x0,-0x48e(%rbp)
  jmp    L875
L1243:
  movzwl -0x48a(%rbp),%edx
  movzwl -0x48e(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x42e(%rbp)
  movzwl -0x42e(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0x200(%rbp)
  movzwl -0x42e(%rbp),%eax
  movswl -0x4b8(%rbp),%ecx
  movswl -0x4dc(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jl     L1462
  movzwl -0x42e(%rbp),%eax
  movswl -0x4b8(%rbp),%ecx
  movswl -0x4e4(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jg     L1462
  movswl -0x48e(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0x1fc(%rbp)
  mov    -0x208(%rbp),%edx
  mov    -0x1fc(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x1f8(%rbp)
  mov    -0x204(%rbp),%edx
  mov    -0x1fc(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x1f4(%rbp)
  mov    -0x200(%rbp),%edx
  mov    -0x204(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x1f0(%rbp)
  mov    -0x200(%rbp),%edx
  mov    -0x1f4(%rbp),%eax
  add    %rax,%rdx
  mov    -0x4a8(%rbp),%rax
  add    %rdx,%rax
  movzwl (%rax),%eax
  movzwl %ax,%edx
  mov    0x50(%rbp),%eax
  movzwl %ax,%eax
  cmp    %eax,%edx
  jne    L1462
  mov    -0x1f8(%rbp),%edx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  mov    -0x1f0(%rbp),%ecx
  mov    -0x4a8(%rbp),%rdx
  add    %rcx,%rdx
  movzwl (%rax),%eax
  mov    %ax,(%rdx)
L1462:
  movzwl -0x48e(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x48e(%rbp)
L875:
  movzwl -0x48e(%rbp),%eax
  cmp    -0x4c8(%rbp),%ax
  jl     L1243
L2160:
  movzwl -0x48c(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x48c(%rbp)
L628:
  movzwl -0x48c(%rbp),%eax
  cmp    -0x4cc(%rbp),%ax
  jl     L3266
  nop
L2502:
  jmp    L2373
  movzbl -0x4d0(%rbp),%eax
  cmp    $0x4,%eax
  je     L264
  cmp    $0x4,%eax
  jg     L1240
  cmp    $0x2,%eax
  je     L657
  cmp    $0x3,%eax
  je     L3678
  jmp    L1240
L264:
  movw   $0x0,-0x48c(%rbp)
  jmp    L1236
L838:
  movswl -0x48c(%rbp),%eax
  mov    -0x3f0(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0x29c(%rbp)
  movzwl -0x488(%rbp),%edx
  movzwl -0x48c(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x452(%rbp)
  movzwl -0x452(%rbp),%eax
  mov    -0x4b4(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0x298(%rbp)
  movzwl -0x452(%rbp),%eax
  movswl -0x4bc(%rbp),%ecx
  movswl -0x4e0(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jl     L3247
  movzwl -0x452(%rbp),%eax
  movswl -0x4bc(%rbp),%ecx
  movswl -0x4e8(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jg     L3247
  movw   $0x0,-0x48e(%rbp)
  jmp    L2264
L1956:
  movzwl -0x48a(%rbp),%edx
  movzwl -0x48e(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x450(%rbp)
  movzwl -0x450(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0x294(%rbp)
  movzwl -0x450(%rbp),%eax
  movswl -0x4b8(%rbp),%ecx
  movswl -0x4dc(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jl     L1607
  movzwl -0x450(%rbp),%eax
  movswl -0x4b8(%rbp),%ecx
  movswl -0x4e4(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jg     L1607
  movswl -0x48e(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0x290(%rbp)
  mov    -0x29c(%rbp),%edx
  mov    -0x290(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x28c(%rbp)
  mov    -0x298(%rbp),%edx
  mov    -0x290(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x288(%rbp)
  mov    -0x294(%rbp),%edx
  mov    -0x298(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x284(%rbp)
  mov    -0x284(%rbp),%edx
  mov    -0x4a8(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x280(%rbp)
  mov    -0x280(%rbp),%eax
  mov    %al,-0x49e(%rbp)
  mov    -0x280(%rbp),%eax
  shr    $0x8,%eax
  mov    %al,-0x49d(%rbp)
  mov    -0x280(%rbp),%eax
  shr    $0x10,%eax
  mov    %al,-0x49c(%rbp)
  mov    -0x28c(%rbp),%edx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x27c(%rbp)
  mov    -0x27c(%rbp),%eax
  mov    %al,-0x49b(%rbp)
  mov    -0x27c(%rbp),%eax
  shr    $0x8,%eax
  mov    %al,-0x49a(%rbp)
  mov    -0x27c(%rbp),%eax
  shr    $0x10,%eax
  mov    %al,-0x499(%rbp)
  mov    -0x27c(%rbp),%eax
  shr    $0x18,%eax
  mov    %al,-0x498(%rbp)
  movzbl -0x498(%rbp),%eax
  not    %eax
  mov    %al,-0x497(%rbp)
  movzbl -0x49b(%rbp),%edx
  movzbl -0x498(%rbp),%eax
  mov    %edx,%ecx
  imul   %eax,%ecx
  movzbl -0x49e(%rbp),%edx
  movzbl -0x497(%rbp),%eax
  imul   %edx,%eax
  add    %ecx,%eax
  sar    $0x8,%eax
  mov    %al,-0x49e(%rbp)
  movzbl -0x49a(%rbp),%edx
  movzbl -0x498(%rbp),%eax
  mov    %edx,%ecx
  imul   %eax,%ecx
  movzbl -0x49d(%rbp),%edx
  movzbl -0x497(%rbp),%eax
  imul   %edx,%eax
  add    %ecx,%eax
  sar    $0x8,%eax
  mov    %al,-0x49d(%rbp)
  movzbl -0x499(%rbp),%edx
  movzbl -0x498(%rbp),%eax
  mov    %edx,%ecx
  imul   %eax,%ecx
  movzbl -0x49c(%rbp),%edx
  movzbl -0x497(%rbp),%eax
  imul   %edx,%eax
  add    %ecx,%eax
  sar    $0x8,%eax
  mov    %al,-0x49c(%rbp)
  movzbl -0x49e(%rbp),%edx
  movzbl -0x49d(%rbp),%eax
  shl    $0x8,%eax
  or     %eax,%edx
  movzbl -0x49c(%rbp),%eax
  shl    $0x10,%eax
  or     %eax,%edx
  movzbl -0x498(%rbp),%eax
  shl    $0x18,%eax
  or     %eax,%edx
  mov    -0x284(%rbp),%ecx
  mov    -0x4a8(%rbp),%rax
  add    %rcx,%rax
  mov    %edx,(%rax)
L1607:
  movzwl -0x48e(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x48e(%rbp)
L2264:
  movzwl -0x48e(%rbp),%eax
  cmp    -0x4c8(%rbp),%ax
  jl     L1956
L3247:
  movzwl -0x48c(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x48c(%rbp)
L1236:
  movzwl -0x48c(%rbp),%eax
  cmp    -0x4cc(%rbp),%ax
  jl     L838
  jmp    L247
L3678:
  movw   $0x0,-0x48c(%rbp)
  jmp    L2752
L630:
  movswl -0x48c(%rbp),%eax
  mov    -0x3f0(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0x278(%rbp)
  movzwl -0x488(%rbp),%edx
  movzwl -0x48c(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x44e(%rbp)
  movzwl -0x44e(%rbp),%eax
  mov    -0x4b4(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0x274(%rbp)
  movzwl -0x44e(%rbp),%eax
  movswl -0x4bc(%rbp),%ecx
  movswl -0x4e0(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jl     L2756
  movzwl -0x44e(%rbp),%eax
  movswl -0x4bc(%rbp),%ecx
  movswl -0x4e8(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jg     L2756
  movw   $0x0,-0x48e(%rbp)
  jmp    L443
L470:
  movzwl -0x48a(%rbp),%edx
  movzwl -0x48e(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x44c(%rbp)
  movzwl -0x44c(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0x270(%rbp)
  movzwl -0x44c(%rbp),%eax
  movswl -0x4b8(%rbp),%ecx
  movswl -0x4dc(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jl     L3501
  movzwl -0x44c(%rbp),%eax
  movswl -0x4b8(%rbp),%ecx
  movswl -0x4e4(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jg     L3501
  movswl -0x48e(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0x26c(%rbp)
  mov    -0x278(%rbp),%edx
  mov    -0x26c(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x268(%rbp)
  mov    -0x274(%rbp),%edx
  mov    -0x26c(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x264(%rbp)
  mov    -0x270(%rbp),%edx
  mov    -0x274(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x260(%rbp)
  mov    -0x260(%rbp),%edx
  mov    -0x4a8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  mov    %al,-0x496(%rbp)
  mov    -0x260(%rbp),%eax
  lea    0x1(%rax),%rdx
  mov    -0x4a8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  mov    %al,-0x495(%rbp)
  mov    -0x260(%rbp),%eax
  lea    0x2(%rax),%rdx
  mov    -0x4a8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  mov    %al,-0x494(%rbp)
  mov    -0x268(%rbp),%edx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  mov    %al,-0x493(%rbp)
  mov    -0x268(%rbp),%eax
  lea    0x1(%rax),%rdx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  mov    %al,-0x492(%rbp)
  mov    -0x268(%rbp),%eax
  lea    0x2(%rax),%rdx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  mov    %al,-0x491(%rbp)
  movzbl -0x4d8(%rbp),%eax
  not    %eax
  mov    %al,-0x490(%rbp)
  movzbl -0x493(%rbp),%edx
  movzbl -0x4d8(%rbp),%eax
  mov    %edx,%ecx
  imul   %eax,%ecx
  movzbl -0x496(%rbp),%edx
  movzbl -0x490(%rbp),%eax
  imul   %edx,%eax
  add    %ecx,%eax
  sar    $0x8,%eax
  mov    %al,-0x496(%rbp)
  movzbl -0x492(%rbp),%edx
  movzbl -0x4d8(%rbp),%eax
  mov    %edx,%ecx
  imul   %eax,%ecx
  movzbl -0x495(%rbp),%edx
  movzbl -0x490(%rbp),%eax
  imul   %edx,%eax
  add    %ecx,%eax
  sar    $0x8,%eax
  mov    %al,-0x495(%rbp)
  movzbl -0x491(%rbp),%edx
  movzbl -0x4d8(%rbp),%eax
  mov    %edx,%ecx
  imul   %eax,%ecx
  movzbl -0x494(%rbp),%edx
  movzbl -0x490(%rbp),%eax
  imul   %edx,%eax
  add    %ecx,%eax
  sar    $0x8,%eax
  mov    %al,-0x494(%rbp)
  mov    -0x260(%rbp),%edx
  mov    -0x4a8(%rbp),%rax
  add    %rax,%rdx
  movzbl -0x496(%rbp),%eax
  mov    %al,(%rdx)
  mov    -0x260(%rbp),%eax
  lea    0x1(%rax),%rdx
  mov    -0x4a8(%rbp),%rax
  add    %rax,%rdx
  movzbl -0x495(%rbp),%eax
  mov    %al,(%rdx)
  mov    -0x260(%rbp),%eax
  lea    0x2(%rax),%rdx
  mov    -0x4a8(%rbp),%rax
  add    %rax,%rdx
  movzbl -0x494(%rbp),%eax
  mov    %al,(%rdx)
L3501:
  movzwl -0x48e(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x48e(%rbp)
L443:
  movzwl -0x48e(%rbp),%eax
  cmp    -0x4c8(%rbp),%ax
  jl     L470
L2756:
  movzwl -0x48c(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x48c(%rbp)
L2752:
  movzwl -0x48c(%rbp),%eax
  cmp    -0x4cc(%rbp),%ax
  jl     L630
  jmp    L247
L657:
  movw   $0x0,-0x48c(%rbp)
  jmp    L3232
L2559:
  movswl -0x48c(%rbp),%eax
  mov    -0x3f0(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0x25c(%rbp)
  movzwl -0x488(%rbp),%edx
  movzwl -0x48c(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x44a(%rbp)
  movzwl -0x44a(%rbp),%eax
  mov    -0x4b4(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0x258(%rbp)
  movzwl -0x44a(%rbp),%eax
  movswl -0x4bc(%rbp),%ecx
  movswl -0x4e0(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jl     L2941
  movzwl -0x44a(%rbp),%eax
  movswl -0x4bc(%rbp),%ecx
  movswl -0x4e8(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jg     L2941
  movw   $0x0,-0x48e(%rbp)
  jmp    L647
L3174:
  movzwl -0x48a(%rbp),%edx
  movzwl -0x48e(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x448(%rbp)
  movzwl -0x448(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0x254(%rbp)
  movzwl -0x448(%rbp),%eax
  movswl -0x4b8(%rbp),%ecx
  movswl -0x4dc(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jl     L2246
  movzwl -0x448(%rbp),%eax
  movswl -0x4b8(%rbp),%ecx
  movswl -0x4e4(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jg     L2246
  movswl -0x48e(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0x250(%rbp)
  mov    -0x25c(%rbp),%edx
  mov    -0x250(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x24c(%rbp)
  mov    -0x258(%rbp),%edx
  mov    -0x250(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x248(%rbp)
  mov    -0x254(%rbp),%edx
  mov    -0x258(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x244(%rbp)
  mov    -0x244(%rbp),%edx
  mov    -0x4a8(%rbp),%rax
  add    %rdx,%rax
  movzwl (%rax),%eax
  mov    %ax,-0x446(%rbp)
  movzwl -0x446(%rbp),%eax
  and    $0x1f,%eax
  mov    %ax,-0x444(%rbp)
  movzwl -0x446(%rbp),%eax
  shr    $0x5,%ax
  and    $0x3f,%eax
  mov    %ax,-0x442(%rbp)
  movzwl -0x446(%rbp),%eax
  shr    $0xb,%ax
  mov    %ax,-0x440(%rbp)
  mov    -0x24c(%rbp),%edx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  movzwl (%rax),%eax
  mov    %ax,-0x446(%rbp)
  movzwl -0x446(%rbp),%eax
  and    $0x1f,%eax
  mov    %ax,-0x43e(%rbp)
  movzwl -0x446(%rbp),%eax
  shr    $0x5,%ax
  and    $0x3f,%eax
  mov    %ax,-0x43c(%rbp)
  movzwl -0x446(%rbp),%eax
  shr    $0xb,%ax
  mov    %ax,-0x43a(%rbp)
  movzbl -0x4d8(%rbp),%eax
  not    %eax
  mov    %al,-0x48f(%rbp)
  movzwl -0x43e(%rbp),%edx
  movzbl -0x4d8(%rbp),%eax
  mov    %edx,%ecx
  imul   %eax,%ecx
  movzwl -0x444(%rbp),%edx
  movzbl -0x48f(%rbp),%eax
  imul   %edx,%eax
  add    %ecx,%eax
  sar    $0x8,%eax
  mov    %ax,-0x444(%rbp)
  movzwl -0x43c(%rbp),%edx
  movzbl -0x4d8(%rbp),%eax
  mov    %edx,%ecx
  imul   %eax,%ecx
  movzwl -0x442(%rbp),%edx
  movzbl -0x48f(%rbp),%eax
  imul   %edx,%eax
  add    %ecx,%eax
  sar    $0x8,%eax
  mov    %ax,-0x442(%rbp)
  movzwl -0x43a(%rbp),%edx
  movzbl -0x4d8(%rbp),%eax
  mov    %edx,%ecx
  imul   %eax,%ecx
  movzwl -0x440(%rbp),%edx
  movzbl -0x48f(%rbp),%eax
  imul   %edx,%eax
  add    %ecx,%eax
  sar    $0x8,%eax
  mov    %ax,-0x440(%rbp)
  movzwl -0x440(%rbp),%eax
  shl    $0xb,%eax
  mov    %eax,%edx
  movzwl -0x442(%rbp),%eax
  shl    $0x5,%eax
  or     %eax,%edx
  movzwl -0x444(%rbp),%eax
  or     %eax,%edx
  mov    -0x244(%rbp),%ecx
  mov    -0x4a8(%rbp),%rax
  add    %rcx,%rax
  mov    %dx,(%rax)
L2246:
  movzwl -0x48e(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x48e(%rbp)
L647:
  movzwl -0x48e(%rbp),%eax
  cmp    -0x4c8(%rbp),%ax
  jl     L3174
L2941:
  movzwl -0x48c(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x48c(%rbp)
L3232:
  movzwl -0x48c(%rbp),%eax
  cmp    -0x4cc(%rbp),%ax
  jl     L2559
  nop
L247:
  jmp    L1240
  movzbl -0x4d0(%rbp),%eax
  cmp    $0x4,%eax
  je     L3349
  cmp    $0x4,%eax
  jg     L1309
  cmp    $0x2,%eax
  je     L3493
  cmp    $0x3,%eax
  je     L1244
  jmp    L1309
L3349:
  movw   $0x0,-0x48c(%rbp)
  jmp    L2903
L3603:
  movswl -0x48c(%rbp),%eax
  mov    -0x3f0(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0x2f0(%rbp)
  movzwl -0x488(%rbp),%edx
  movzwl -0x48c(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x45e(%rbp)
  movzwl -0x45e(%rbp),%eax
  mov    -0x4b4(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0x2ec(%rbp)
  movzwl -0x45e(%rbp),%eax
  movswl -0x4bc(%rbp),%ecx
  movswl -0x4e0(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jl     L2463
  movzwl -0x45e(%rbp),%eax
  movswl -0x4bc(%rbp),%ecx
  movswl -0x4e8(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jg     L2463
  movw   $0x0,-0x48e(%rbp)
  jmp    L164
L2919:
  movzwl -0x48a(%rbp),%edx
  movzwl -0x48e(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x45c(%rbp)
  movzwl -0x45c(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0x2e8(%rbp)
  movzwl -0x45c(%rbp),%eax
  movswl -0x4b8(%rbp),%ecx
  movswl -0x4dc(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jl     L2914
  movzwl -0x45c(%rbp),%eax
  movswl -0x4b8(%rbp),%ecx
  movswl -0x4e4(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jg     L2914
  movswl -0x48e(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0x2e4(%rbp)
  mov    -0x2f0(%rbp),%edx
  mov    -0x2e4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x2e0(%rbp)
  mov    -0x2ec(%rbp),%edx
  mov    -0x2e4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x2dc(%rbp)
  mov    -0x2e8(%rbp),%edx
  mov    -0x2ec(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x2d8(%rbp)
  mov    -0x2d8(%rbp),%edx
  mov    -0x4a8(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%ecx
  mov    -0x2e0(%rbp),%edx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
  mov    -0x2d8(%rbp),%esi
  mov    -0x4a8(%rbp),%rax
  add    %rsi,%rax
  add    %ecx,%edx
  mov    %edx,(%rax)
L2914:
  movzwl -0x48e(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x48e(%rbp)
L164:
  movzwl -0x48e(%rbp),%eax
  cmp    -0x4c8(%rbp),%ax
  jl     L2919
L2463:
  movzwl -0x48c(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x48c(%rbp)
L2903:
  movzwl -0x48c(%rbp),%eax
  cmp    -0x4cc(%rbp),%ax
  jl     L3603
  jmp    L3672
L1244:
  movw   $0x0,-0x48c(%rbp)
  jmp    L297
L462:
  movswl -0x48c(%rbp),%eax
  mov    -0x3f0(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0x2d4(%rbp)
  movzwl -0x488(%rbp),%edx
  movzwl -0x48c(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x45a(%rbp)
  movzwl -0x45a(%rbp),%eax
  mov    -0x4b4(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0x2d0(%rbp)
  movzwl -0x45a(%rbp),%eax
  movswl -0x4bc(%rbp),%ecx
  movswl -0x4e0(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jl     L275
  movzwl -0x45a(%rbp),%eax
  movswl -0x4bc(%rbp),%ecx
  movswl -0x4e8(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jg     L275
  movw   $0x0,-0x48e(%rbp)
  jmp    L780
L360:
  movzwl -0x48a(%rbp),%edx
  movzwl -0x48e(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x458(%rbp)
  movzwl -0x458(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0x2cc(%rbp)
  movzwl -0x458(%rbp),%eax
  movswl -0x4b8(%rbp),%ecx
  movswl -0x4dc(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jl     L3248
  movzwl -0x458(%rbp),%eax
  movswl -0x4b8(%rbp),%ecx
  movswl -0x4e4(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jg     L3248
  movswl -0x48e(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0x2c8(%rbp)
  mov    -0x2d4(%rbp),%edx
  mov    -0x2c8(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x2c4(%rbp)
  mov    -0x2d0(%rbp),%edx
  mov    -0x2c8(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x2c0(%rbp)
  mov    -0x2cc(%rbp),%edx
  mov    -0x2d0(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x2bc(%rbp)
  mov    -0x2bc(%rbp),%edx
  mov    -0x4a8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  mov    %eax,%ecx
  mov    -0x2c4(%rbp),%edx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  add    %eax,%ecx
  mov    -0x2bc(%rbp),%edx
  mov    -0x4a8(%rbp),%rax
  add    %rdx,%rax
  mov    %ecx,%edx
  mov    %dl,(%rax)
  mov    -0x2bc(%rbp),%eax
  lea    0x1(%rax),%rdx
  mov    -0x4a8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  mov    %eax,%ecx
  mov    -0x2c4(%rbp),%eax
  lea    0x1(%rax),%rdx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  lea    (%rcx,%rax,1),%edx
  mov    -0x2bc(%rbp),%eax
  lea    0x1(%rax),%rcx
  mov    -0x4a8(%rbp),%rax
  add    %rcx,%rax
  mov    %dl,(%rax)
  mov    -0x2bc(%rbp),%eax
  lea    0x2(%rax),%rdx
  mov    -0x4a8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  mov    %eax,%ecx
  mov    -0x2c4(%rbp),%eax
  lea    0x2(%rax),%rdx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  lea    (%rcx,%rax,1),%edx
  mov    -0x2bc(%rbp),%eax
  lea    0x2(%rax),%rcx
  mov    -0x4a8(%rbp),%rax
  add    %rcx,%rax
  mov    %dl,(%rax)
L3248:
  movzwl -0x48e(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x48e(%rbp)
L780:
  movzwl -0x48e(%rbp),%eax
  cmp    -0x4c8(%rbp),%ax
  jl     L360
L275:
  movzwl -0x48c(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x48c(%rbp)
L297:
  movzwl -0x48c(%rbp),%eax
  cmp    -0x4cc(%rbp),%ax
  jl     L462
  jmp    L3672
L3493:
  movw   $0x0,-0x48c(%rbp)
  jmp    L1843
L1631:
  movswl -0x48c(%rbp),%eax
  mov    -0x3f0(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0x2b8(%rbp)
  movzwl -0x488(%rbp),%edx
  movzwl -0x48c(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x456(%rbp)
  movzwl -0x456(%rbp),%eax
  mov    -0x4b4(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0x2b4(%rbp)
  movzwl -0x456(%rbp),%eax
  movswl -0x4bc(%rbp),%ecx
  movswl -0x4e0(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jl     L3260
  movzwl -0x456(%rbp),%eax
  movswl -0x4bc(%rbp),%ecx
  movswl -0x4e8(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jg     L3260
  movw   $0x0,-0x48e(%rbp)
  jmp    L380
L3192:
  movzwl -0x48a(%rbp),%edx
  movzwl -0x48e(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x454(%rbp)
  movzwl -0x454(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0x2b0(%rbp)
  movzwl -0x454(%rbp),%eax
  movswl -0x4b8(%rbp),%ecx
  movswl -0x4dc(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jl     L2969
  movzwl -0x454(%rbp),%eax
  movswl -0x4b8(%rbp),%ecx
  movswl -0x4e4(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jg     L2969
  movswl -0x48e(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0x2ac(%rbp)
  mov    -0x2b8(%rbp),%edx
  mov    -0x2ac(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x2a8(%rbp)
  mov    -0x2b4(%rbp),%edx
  mov    -0x2ac(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x2a4(%rbp)
  mov    -0x2b0(%rbp),%edx
  mov    -0x2b4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x2a0(%rbp)
  mov    -0x2a0(%rbp),%edx
  mov    -0x4a8(%rbp),%rax
  add    %rdx,%rax
  movzwl (%rax),%ecx
  mov    -0x2a8(%rbp),%edx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  movzwl (%rax),%edx
  mov    -0x2a0(%rbp),%esi
  mov    -0x4a8(%rbp),%rax
  add    %rsi,%rax
  add    %ecx,%edx
  mov    %dx,(%rax)
L2969:
  movzwl -0x48e(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x48e(%rbp)
L380:
  movzwl -0x48e(%rbp),%eax
  cmp    -0x4c8(%rbp),%ax
  jl     L3192
L3260:
  movzwl -0x48c(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x48c(%rbp)
L1843:
  movzwl -0x48c(%rbp),%eax
  cmp    -0x4cc(%rbp),%ax
  jl     L1631
  nop
L3672:
  jmp    L1309
  movzbl -0x4d0(%rbp),%eax
  cmp    $0x4,%eax
  je     L3753
  cmp    $0x4,%eax
  jg     L2106
  cmp    $0x2,%eax
  je     L1741
  cmp    $0x3,%eax
  je     L388
  jmp    L2106
L3753:
  movw   $0x0,-0x48c(%rbp)
  jmp    L211
L3684:
  movswl -0x48c(%rbp),%eax
  mov    -0x3f0(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0x344(%rbp)
  movzwl -0x488(%rbp),%edx
  movzwl -0x48c(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x46a(%rbp)
  movzwl -0x46a(%rbp),%eax
  mov    -0x4b4(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0x340(%rbp)
  movzwl -0x46a(%rbp),%eax
  movswl -0x4bc(%rbp),%ecx
  movswl -0x4e0(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jl     L2425
  movzwl -0x46a(%rbp),%eax
  movswl -0x4bc(%rbp),%ecx
  movswl -0x4e8(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jg     L2425
  movw   $0x0,-0x48e(%rbp)
  jmp    L1901
L1668:
  movzwl -0x48a(%rbp),%edx
  movzwl -0x48e(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x468(%rbp)
  movzwl -0x468(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0x33c(%rbp)
  movzwl -0x468(%rbp),%eax
  movswl -0x4b8(%rbp),%ecx
  movswl -0x4dc(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jl     L1260
  movzwl -0x468(%rbp),%eax
  movswl -0x4b8(%rbp),%ecx
  movswl -0x4e4(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jg     L1260
  movswl -0x48e(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0x338(%rbp)
  mov    -0x344(%rbp),%edx
  mov    -0x338(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x334(%rbp)
  mov    -0x340(%rbp),%edx
  mov    -0x338(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x330(%rbp)
  mov    -0x33c(%rbp),%edx
  mov    -0x340(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x32c(%rbp)
  mov    -0x32c(%rbp),%edx
  mov    -0x4a8(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
  mov    -0x334(%rbp),%ecx
  mov    0x10(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%ecx
  mov    -0x32c(%rbp),%esi
  mov    -0x4a8(%rbp),%rax
  add    %rsi,%rax
  sub    %ecx,%edx
  mov    %edx,(%rax)
L1260:
  movzwl -0x48e(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x48e(%rbp)
L1901:
  movzwl -0x48e(%rbp),%eax
  cmp    -0x4c8(%rbp),%ax
  jl     L1668
L2425:
  movzwl -0x48c(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x48c(%rbp)
L211:
  movzwl -0x48c(%rbp),%eax
  cmp    -0x4cc(%rbp),%ax
  jl     L3684
  jmp    L3279
L388:
  movw   $0x0,-0x48c(%rbp)
  jmp    L636
L3694:
  movswl -0x48c(%rbp),%eax
  mov    -0x3f0(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0x328(%rbp)
  movzwl -0x488(%rbp),%edx
  movzwl -0x48c(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x466(%rbp)
  movzwl -0x466(%rbp),%eax
  mov    -0x4b4(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0x324(%rbp)
  movzwl -0x466(%rbp),%eax
  movswl -0x4bc(%rbp),%ecx
  movswl -0x4e0(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jl     L1271
  movzwl -0x466(%rbp),%eax
  movswl -0x4bc(%rbp),%ecx
  movswl -0x4e8(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jg     L1271
  movw   $0x0,-0x48e(%rbp)
  jmp    L256
L2494:
  movzwl -0x48a(%rbp),%edx
  movzwl -0x48e(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x464(%rbp)
  movzwl -0x464(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0x320(%rbp)
  movzwl -0x464(%rbp),%eax
  movswl -0x4b8(%rbp),%ecx
  movswl -0x4dc(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jl     L1611
  movzwl -0x464(%rbp),%eax
  movswl -0x4b8(%rbp),%ecx
  movswl -0x4e4(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jg     L1611
  movswl -0x48e(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0x31c(%rbp)
  mov    -0x328(%rbp),%edx
  mov    -0x31c(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x318(%rbp)
  mov    -0x324(%rbp),%edx
  mov    -0x31c(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x314(%rbp)
  mov    -0x320(%rbp),%edx
  mov    -0x324(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x310(%rbp)
  mov    -0x310(%rbp),%edx
  mov    -0x4a8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  mov    %eax,%ecx
  mov    -0x318(%rbp),%edx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  sub    %eax,%ecx
  mov    -0x310(%rbp),%edx
  mov    -0x4a8(%rbp),%rax
  add    %rdx,%rax
  mov    %ecx,%edx
  mov    %dl,(%rax)
  mov    -0x310(%rbp),%eax
  lea    0x1(%rax),%rdx
  mov    -0x4a8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  mov    %eax,%edx
  mov    -0x318(%rbp),%eax
  lea    0x1(%rax),%rcx
  mov    0x10(%rbp),%rax
  add    %rcx,%rax
  movzbl (%rax),%eax
  sub    %eax,%edx
  mov    -0x310(%rbp),%eax
  lea    0x1(%rax),%rcx
  mov    -0x4a8(%rbp),%rax
  add    %rcx,%rax
  mov    %dl,(%rax)
  mov    -0x310(%rbp),%eax
  lea    0x2(%rax),%rdx
  mov    -0x4a8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  mov    %eax,%edx
  mov    -0x318(%rbp),%eax
  lea    0x2(%rax),%rcx
  mov    0x10(%rbp),%rax
  add    %rcx,%rax
  movzbl (%rax),%eax
  sub    %eax,%edx
  mov    -0x310(%rbp),%eax
  lea    0x2(%rax),%rcx
  mov    -0x4a8(%rbp),%rax
  add    %rcx,%rax
  mov    %dl,(%rax)
L1611:
  movzwl -0x48e(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x48e(%rbp)
L256:
  movzwl -0x48e(%rbp),%eax
  cmp    -0x4c8(%rbp),%ax
  jl     L2494
L1271:
  movzwl -0x48c(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x48c(%rbp)
L636:
  movzwl -0x48c(%rbp),%eax
  cmp    -0x4cc(%rbp),%ax
  jl     L3694
  jmp    L3279
L1741:
  movw   $0x0,-0x48c(%rbp)
  jmp    L3087
L426:
  movswl -0x48c(%rbp),%eax
  mov    -0x3f0(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0x30c(%rbp)
  movzwl -0x488(%rbp),%edx
  movzwl -0x48c(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x462(%rbp)
  movzwl -0x462(%rbp),%eax
  mov    -0x4b4(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0x308(%rbp)
  movzwl -0x462(%rbp),%eax
  movswl -0x4bc(%rbp),%ecx
  movswl -0x4e0(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jl     L1599
  movzwl -0x462(%rbp),%eax
  movswl -0x4bc(%rbp),%ecx
  movswl -0x4e8(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jg     L1599
  movw   $0x0,-0x48e(%rbp)
  jmp    L2851
L2110:
  movzwl -0x48a(%rbp),%edx
  movzwl -0x48e(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x460(%rbp)
  movzwl -0x460(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0x304(%rbp)
  movzwl -0x460(%rbp),%eax
  movswl -0x4b8(%rbp),%ecx
  movswl -0x4dc(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jl     L2801
  movzwl -0x460(%rbp),%eax
  movswl -0x4b8(%rbp),%ecx
  movswl -0x4e4(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jg     L2801
  movswl -0x48e(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0x300(%rbp)
  mov    -0x30c(%rbp),%edx
  mov    -0x300(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x2fc(%rbp)
  mov    -0x308(%rbp),%edx
  mov    -0x300(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x2f8(%rbp)
  mov    -0x304(%rbp),%edx
  mov    -0x308(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x2f4(%rbp)
  mov    -0x2f4(%rbp),%edx
  mov    -0x4a8(%rbp),%rax
  add    %rdx,%rax
  movzwl (%rax),%edx
  mov    -0x2fc(%rbp),%ecx
  mov    0x10(%rbp),%rax
  add    %rcx,%rax
  movzwl (%rax),%ecx
  mov    -0x2f4(%rbp),%esi
  mov    -0x4a8(%rbp),%rax
  add    %rsi,%rax
  sub    %ecx,%edx
  mov    %dx,(%rax)
L2801:
  movzwl -0x48e(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x48e(%rbp)
L2851:
  movzwl -0x48e(%rbp),%eax
  cmp    -0x4c8(%rbp),%ax
  jl     L2110
L1599:
  movzwl -0x48c(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x48c(%rbp)
L3087:
  movzwl -0x48c(%rbp),%eax
  cmp    -0x4cc(%rbp),%ax
  jl     L426
  nop
L3279:
  jmp    L2106
  movzbl -0x4d0(%rbp),%eax
  cmp    $0x4,%eax
  je     L1505
  cmp    $0x4,%eax
  jg     L3605
  cmp    $0x2,%eax
  je     L3719
  cmp    $0x3,%eax
  je     L634
  jmp    L3605
L1505:
  movw   $0x0,-0x48c(%rbp)
  jmp    L3006
L1888:
  movswl -0x48c(%rbp),%eax
  mov    -0x3f0(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0x398(%rbp)
  movzwl -0x488(%rbp),%edx
  movzwl -0x48c(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x476(%rbp)
  movzwl -0x476(%rbp),%eax
  mov    -0x4b4(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0x394(%rbp)
  movzwl -0x476(%rbp),%eax
  movswl -0x4bc(%rbp),%ecx
  movswl -0x4e0(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jl     L579
  movzwl -0x476(%rbp),%eax
  movswl -0x4bc(%rbp),%ecx
  movswl -0x4e8(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jg     L579
  movw   $0x0,-0x48e(%rbp)
  jmp    L1468
L3567:
  movzwl -0x48a(%rbp),%edx
  movzwl -0x48e(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x474(%rbp)
  movzwl -0x474(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0x390(%rbp)
  movzwl -0x474(%rbp),%eax
  movswl -0x4b8(%rbp),%ecx
  movswl -0x4dc(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jl     L1581
  movzwl -0x474(%rbp),%eax
  movswl -0x4b8(%rbp),%ecx
  movswl -0x4e4(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jg     L1581
  movswl -0x48e(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0x38c(%rbp)
  mov    -0x398(%rbp),%edx
  mov    -0x38c(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x388(%rbp)
  mov    -0x394(%rbp),%edx
  mov    -0x38c(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x384(%rbp)
  mov    -0x390(%rbp),%edx
  mov    -0x394(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x380(%rbp)
  mov    -0x380(%rbp),%edx
  mov    -0x4a8(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%ecx
  mov    -0x388(%rbp),%edx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    -0x380(%rbp),%esi
  mov    -0x4a8(%rbp),%rdx
  add    %rsi,%rdx
  imul   %ecx,%eax
  mov    %eax,(%rdx)
L1581:
  movzwl -0x48e(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x48e(%rbp)
L1468:
  movzwl -0x48e(%rbp),%eax
  cmp    -0x4c8(%rbp),%ax
  jl     L3567
L579:
  movzwl -0x48c(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x48c(%rbp)
L3006:
  movzwl -0x48c(%rbp),%eax
  cmp    -0x4cc(%rbp),%ax
  jl     L1888
  jmp    L2145
L634:
  movw   $0x0,-0x48c(%rbp)
  jmp    L1691
L843:
  movswl -0x48c(%rbp),%eax
  mov    -0x3f0(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0x37c(%rbp)
  movzwl -0x488(%rbp),%edx
  movzwl -0x48c(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x472(%rbp)
  movzwl -0x472(%rbp),%eax
  mov    -0x4b4(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0x378(%rbp)
  movzwl -0x472(%rbp),%eax
  movswl -0x4bc(%rbp),%ecx
  movswl -0x4e0(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jl     L1765
  movzwl -0x472(%rbp),%eax
  movswl -0x4bc(%rbp),%ecx
  movswl -0x4e8(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jg     L1765
  movw   $0x0,-0x48e(%rbp)
  jmp    L1444
L3141:
  movzwl -0x48a(%rbp),%edx
  movzwl -0x48e(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x470(%rbp)
  movzwl -0x470(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0x374(%rbp)
  movzwl -0x470(%rbp),%eax
  movswl -0x4b8(%rbp),%ecx
  movswl -0x4dc(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jl     L92
  movzwl -0x470(%rbp),%eax
  movswl -0x4b8(%rbp),%ecx
  movswl -0x4e4(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jg     L92
  movswl -0x48e(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0x370(%rbp)
  mov    -0x37c(%rbp),%edx
  mov    -0x370(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x36c(%rbp)
  mov    -0x378(%rbp),%edx
  mov    -0x370(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x368(%rbp)
  mov    -0x374(%rbp),%edx
  mov    -0x378(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x364(%rbp)
  mov    -0x364(%rbp),%edx
  mov    -0x4a8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  mov    %eax,%ecx
  mov    -0x36c(%rbp),%edx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  mov    %eax,%edx
  mov    %ecx,%eax
  imul   %edx,%eax
  mov    %eax,%edx
  mov    -0x364(%rbp),%ecx
  mov    -0x4a8(%rbp),%rax
  add    %rcx,%rax
  mov    %dl,(%rax)
  mov    -0x364(%rbp),%eax
  lea    0x1(%rax),%rdx
  mov    -0x4a8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  mov    %eax,%ecx
  mov    -0x36c(%rbp),%eax
  lea    0x1(%rax),%rdx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  mov    %eax,%edx
  mov    %ecx,%eax
  imul   %edx,%eax
  mov    %eax,%edx
  mov    -0x364(%rbp),%eax
  lea    0x1(%rax),%rcx
  mov    -0x4a8(%rbp),%rax
  add    %rcx,%rax
  mov    %dl,(%rax)
  mov    -0x364(%rbp),%eax
  lea    0x2(%rax),%rdx
  mov    -0x4a8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  mov    %eax,%ecx
  mov    -0x36c(%rbp),%eax
  lea    0x2(%rax),%rdx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  mov    %eax,%edx
  mov    %ecx,%eax
  imul   %edx,%eax
  mov    %eax,%edx
  mov    -0x364(%rbp),%eax
  lea    0x2(%rax),%rcx
  mov    -0x4a8(%rbp),%rax
  add    %rcx,%rax
  mov    %dl,(%rax)
L92:
  movzwl -0x48e(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x48e(%rbp)
L1444:
  movzwl -0x48e(%rbp),%eax
  cmp    -0x4c8(%rbp),%ax
  jl     L3141
L1765:
  movzwl -0x48c(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x48c(%rbp)
L1691:
  movzwl -0x48c(%rbp),%eax
  cmp    -0x4cc(%rbp),%ax
  jl     L843
  jmp    L2145
L3719:
  movw   $0x0,-0x48c(%rbp)
  jmp    L1550
L337:
  movswl -0x48c(%rbp),%eax
  mov    -0x3f0(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0x360(%rbp)
  movzwl -0x488(%rbp),%edx
  movzwl -0x48c(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x46e(%rbp)
  movzwl -0x46e(%rbp),%eax
  mov    -0x4b4(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0x35c(%rbp)
  movzwl -0x46e(%rbp),%eax
  movswl -0x4bc(%rbp),%ecx
  movswl -0x4e0(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jl     L369
  movzwl -0x46e(%rbp),%eax
  movswl -0x4bc(%rbp),%ecx
  movswl -0x4e8(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jg     L369
  movw   $0x0,-0x48e(%rbp)
  jmp    L13
L1881:
  movzwl -0x48a(%rbp),%edx
  movzwl -0x48e(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x46c(%rbp)
  movzwl -0x46c(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0x358(%rbp)
  movzwl -0x46c(%rbp),%eax
  movswl -0x4b8(%rbp),%ecx
  movswl -0x4dc(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jl     L1568
  movzwl -0x46c(%rbp),%eax
  movswl -0x4b8(%rbp),%ecx
  movswl -0x4e4(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jg     L1568
  movswl -0x48e(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0x354(%rbp)
  mov    -0x360(%rbp),%edx
  mov    -0x354(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x350(%rbp)
  mov    -0x35c(%rbp),%edx
  mov    -0x354(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x34c(%rbp)
  mov    -0x358(%rbp),%edx
  mov    -0x35c(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x348(%rbp)
  mov    -0x348(%rbp),%edx
  mov    -0x4a8(%rbp),%rax
  add    %rdx,%rax
  movzwl (%rax),%ecx
  mov    -0x350(%rbp),%edx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  movzwl (%rax),%eax
  mov    -0x348(%rbp),%esi
  mov    -0x4a8(%rbp),%rdx
  add    %rsi,%rdx
  imul   %ecx,%eax
  mov    %ax,(%rdx)
L1568:
  movzwl -0x48e(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x48e(%rbp)
L13:
  movzwl -0x48e(%rbp),%eax
  cmp    -0x4c8(%rbp),%ax
  jl     L1881
L369:
  movzwl -0x48c(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x48c(%rbp)
L1550:
  movzwl -0x48c(%rbp),%eax
  cmp    -0x4cc(%rbp),%ax
  jl     L337
  nop
L2145:
  jmp    L3605
  movzbl -0x4d0(%rbp),%eax
  cmp    $0x4,%eax
  je     L428
  cmp    $0x4,%eax
  jg     L2162
  cmp    $0x2,%eax
  je     L2068
  cmp    $0x3,%eax
  je     L362
  jmp    L2162
L428:
  movw   $0x0,-0x48c(%rbp)
  jmp    L890
L799:
  movswl -0x48c(%rbp),%eax
  mov    -0x3f0(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0x3ec(%rbp)
  movzwl -0x488(%rbp),%edx
  movzwl -0x48c(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x482(%rbp)
  movzwl -0x482(%rbp),%eax
  mov    -0x4b4(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0x3e8(%rbp)
  movzwl -0x482(%rbp),%eax
  movswl -0x4bc(%rbp),%ecx
  movswl -0x4e0(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jl     L3566
  movzwl -0x482(%rbp),%eax
  movswl -0x4bc(%rbp),%ecx
  movswl -0x4e8(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jg     L3566
  movw   $0x0,-0x48e(%rbp)
  jmp    L220
L822:
  movzwl -0x48a(%rbp),%edx
  movzwl -0x48e(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x480(%rbp)
  movzwl -0x480(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0x3e4(%rbp)
  movzwl -0x480(%rbp),%eax
  movswl -0x4b8(%rbp),%ecx
  movswl -0x4dc(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jl     L2097
  movzwl -0x480(%rbp),%eax
  movswl -0x4b8(%rbp),%ecx
  movswl -0x4e4(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jg     L2097
  movswl -0x48e(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0x3e0(%rbp)
  mov    -0x3ec(%rbp),%edx
  mov    -0x3e0(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x3dc(%rbp)
  mov    -0x3e8(%rbp),%edx
  mov    -0x3e0(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x3d8(%rbp)
  mov    -0x3e4(%rbp),%edx
  mov    -0x3e8(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x3d4(%rbp)
  mov    -0x3d4(%rbp),%edx
  mov    -0x4a8(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    -0x3dc(%rbp),%ecx
  mov    0x10(%rbp),%rdx
  add    %rcx,%rdx
  mov    (%rdx),%ebx
  mov    -0x3d4(%rbp),%esi
  mov    -0x4a8(%rbp),%rcx
  add    %rsi,%rcx
  mov    $0x0,%edx
  div    %ebx
  mov    %eax,(%rcx)
L2097:
  movzwl -0x48e(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x48e(%rbp)
L220:
  movzwl -0x48e(%rbp),%eax
  cmp    -0x4c8(%rbp),%ax
  jl     L822
L3566:
  movzwl -0x48c(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x48c(%rbp)
L890:
  movzwl -0x48c(%rbp),%eax
  cmp    -0x4cc(%rbp),%ax
  jl     L799
  jmp    L1201
L362:
  movw   $0x0,-0x48c(%rbp)
  jmp    L2763
L600:
  movswl -0x48c(%rbp),%eax
  mov    -0x3f0(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0x3d0(%rbp)
  movzwl -0x488(%rbp),%edx
  movzwl -0x48c(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x47e(%rbp)
  movzwl -0x47e(%rbp),%eax
  mov    -0x4b4(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0x3cc(%rbp)
  movzwl -0x47e(%rbp),%eax
  movswl -0x4bc(%rbp),%ecx
  movswl -0x4e0(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jl     L1313
  movzwl -0x47e(%rbp),%eax
  movswl -0x4bc(%rbp),%ecx
  movswl -0x4e8(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jg     L1313
  movw   $0x0,-0x48e(%rbp)
  jmp    L477
L1849:
  movzwl -0x48a(%rbp),%edx
  movzwl -0x48e(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x47c(%rbp)
  movzwl -0x47c(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0x3c8(%rbp)
  movzwl -0x47c(%rbp),%eax
  movswl -0x4b8(%rbp),%ecx
  movswl -0x4dc(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jl     L3671
  movzwl -0x47c(%rbp),%eax
  movswl -0x4b8(%rbp),%ecx
  movswl -0x4e4(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jg     L3671
  movswl -0x48e(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0x3c4(%rbp)
  mov    -0x3d0(%rbp),%edx
  mov    -0x3c4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x3c0(%rbp)
  mov    -0x3cc(%rbp),%edx
  mov    -0x3c4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x3bc(%rbp)
  mov    -0x3c8(%rbp),%edx
  mov    -0x3cc(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x3b8(%rbp)
  mov    -0x3b8(%rbp),%edx
  mov    -0x4a8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    -0x3c0(%rbp),%ecx
  mov    0x10(%rbp),%rdx
  add    %rcx,%rdx
  movzbl (%rdx),%edx
  movsbl %dl,%ebx
  cltd
  idiv   %ebx
  mov    %eax,%ecx
  mov    -0x3b8(%rbp),%edx
  mov    -0x4a8(%rbp),%rax
  add    %rdx,%rax
  mov    %ecx,%edx
  mov    %dl,(%rax)
  mov    -0x3b8(%rbp),%eax
  lea    0x1(%rax),%rdx
  mov    -0x4a8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    -0x3c0(%rbp),%edx
  lea    0x1(%rdx),%rcx
  mov    0x10(%rbp),%rdx
  add    %rcx,%rdx
  movzbl (%rdx),%edx
  movsbl %dl,%edi
  cltd
  idiv   %edi
  mov    %eax,%ecx
  mov    -0x3b8(%rbp),%eax
  lea    0x1(%rax),%rdx
  mov    -0x4a8(%rbp),%rax
  add    %rdx,%rax
  mov    %ecx,%edx
  mov    %dl,(%rax)
  mov    -0x3b8(%rbp),%eax
  lea    0x2(%rax),%rdx
  mov    -0x4a8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    -0x3c0(%rbp),%edx
  lea    0x2(%rdx),%rcx
  mov    0x10(%rbp),%rdx
  add    %rcx,%rdx
  movzbl (%rdx),%edx
  movsbl %dl,%ebx
  cltd
  idiv   %ebx
  mov    %eax,%ecx
  mov    -0x3b8(%rbp),%eax
  lea    0x2(%rax),%rdx
  mov    -0x4a8(%rbp),%rax
  add    %rdx,%rax
  mov    %ecx,%edx
  mov    %dl,(%rax)
L3671:
  movzwl -0x48e(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x48e(%rbp)
L477:
  movzwl -0x48e(%rbp),%eax
  cmp    -0x4c8(%rbp),%ax
  jl     L1849
L1313:
  movzwl -0x48c(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x48c(%rbp)
L2763:
  movzwl -0x48c(%rbp),%eax
  cmp    -0x4cc(%rbp),%ax
  jl     L600
  jmp    L1201
L2068:
  movw   $0x0,-0x48c(%rbp)
  jmp    L1634
L1915:
  movswl -0x48c(%rbp),%eax
  mov    -0x3f0(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0x3b4(%rbp)
  movzwl -0x488(%rbp),%edx
  movzwl -0x48c(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x47a(%rbp)
  movzwl -0x47a(%rbp),%eax
  mov    -0x4b4(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0x3b0(%rbp)
  movzwl -0x47a(%rbp),%eax
  movswl -0x4bc(%rbp),%ecx
  movswl -0x4e0(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jl     L1504
  movzwl -0x47a(%rbp),%eax
  movswl -0x4bc(%rbp),%ecx
  movswl -0x4e8(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jg     L1504
  movw   $0x0,-0x48e(%rbp)
  jmp    L47
L2257:
  movzwl -0x48a(%rbp),%edx
  movzwl -0x48e(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x478(%rbp)
  movzwl -0x478(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0x3ac(%rbp)
  movzwl -0x478(%rbp),%eax
  movswl -0x4b8(%rbp),%ecx
  movswl -0x4dc(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jl     L521
  movzwl -0x478(%rbp),%eax
  movswl -0x4b8(%rbp),%ecx
  movswl -0x4e4(%rbp),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  jg     L521
  movswl -0x48e(%rbp),%edx
  movzbl -0x4d0(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0x3a8(%rbp)
  mov    -0x3b4(%rbp),%edx
  mov    -0x3a8(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x3a4(%rbp)
  mov    -0x3b0(%rbp),%edx
  mov    -0x3a8(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x3a0(%rbp)
  mov    -0x3ac(%rbp),%edx
  mov    -0x3b0(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x39c(%rbp)
  mov    -0x39c(%rbp),%edx
  mov    -0x4a8(%rbp),%rax
  add    %rdx,%rax
  movzwl (%rax),%eax
  mov    -0x3a4(%rbp),%ecx
  mov    0x10(%rbp),%rdx
  add    %rcx,%rdx
  movzwl (%rdx),%edi
  mov    -0x39c(%rbp),%esi
  mov    -0x4a8(%rbp),%rcx
  add    %rsi,%rcx
  mov    $0x0,%edx
  div    %di
  mov    %ax,(%rcx)
L521:
  movzwl -0x48e(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x48e(%rbp)
L47:
  movzwl -0x48e(%rbp),%eax
  cmp    -0x4c8(%rbp),%ax
  jl     L2257
L1504:
  movzwl -0x48c(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x48c(%rbp)
L1634:
  movzwl -0x48c(%rbp),%eax
  cmp    -0x4cc(%rbp),%ax
  jl     L1915
  nop
L1201:
  jmp    L2162
L2913:
  nop
  jmp    L1973
L998:
  nop
  jmp    L1973
L1316:
  nop
  jmp    L1973
L1172:
  nop
  jmp    L1973
L695:
  nop
  jmp    L1973
L2373:
  nop
  jmp    L1973
L1240:
  nop
  jmp    L1973
L1309:
  nop
  jmp    L1973
L2106:
  nop
  jmp    L1973
L3605:
  nop
  jmp    L1973
L2162:
  nop
L1973:
  nop
  add    $0x4c8,%rsp
  pop    %rbx
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  pop    %rbp
  ret
```

assistant: ```c
void c_blit_write(char *framebuffer, short screen_width, short screen_height, unsigned int bytes_per_line, short xoffset, short yoffset, char *blit_data, short x, short y, short w, short h, unsigned char bytes_per_pixel, unsigned char draw_mode, unsigned char alpha, unsigned int bcolor, short x_clip, short y_clip, short xx_clip, short yy_clip) {
  short fb_x = xoffset + x;
  short fb_y = yoffset + y;
  short xx = x + w;
  short yy = y + h;
  short horizontal;
  short vertical;
  unsigned int bline = w * bytes_per_pixel;
  if (draw_mode == 0 && x >= x_clip && xx <= xx_clip && y >= y_clip && yy <= yy_clip) {
    unsigned char *source = blit_data;
    unsigned char *dest = &framebuffer[(fb_y * bytes_per_line) + (fb_x * bytes_per_pixel)];
    for (vertical = 0; vertical < h; vertical++) {
      memcpy(dest, source, bline);
      source += bline;
      dest += bytes_per_line;
    }
  } else {
    switch (draw_mode) {
    case 0:
      switch (bytes_per_pixel) {
      case 4:
        for (vertical = 0; vertical < h; vertical++) {
          unsigned int vbl = vertical * bline;
          unsigned short yv = fb_y + vertical;
          unsigned int yvbl = yv * bytes_per_line;
          if (yv >= (yoffset + y_clip) && yv <= (yoffset + yy_clip)) {
            for (horizontal = 0; horizontal < w; horizontal++) {
              unsigned short xh = fb_x + horizontal;
              unsigned int xhbp = xh * bytes_per_pixel;
              if (xh >= (xoffset + x_clip) && xh <= (xoffset + xx_clip)) {
                unsigned int hzpixel = horizontal * bytes_per_pixel;
                unsigned int vhz = vbl + hzpixel;
                unsigned int yvhz = yvbl + hzpixel;
                unsigned int xhbp_yvbl = xhbp + yvbl;
                *((unsigned int *)(framebuffer + xhbp_yvbl)) = *((unsigned int *)(blit_data + vhz));
              }
            }
          }
        }
        break;
      case 3:
        for (vertical = 0; vertical < h; vertical++) {
          unsigned int vbl = vertical * bline;
          unsigned short yv = fb_y + vertical;
          unsigned int yvbl = yv * bytes_per_line;
          if (yv >= (yoffset + y_clip) && yv <= (yoffset + yy_clip)) {
            for (horizontal = 0; horizontal < w; horizontal++) {
              unsigned short xh = fb_x + horizontal;
              unsigned int xhbp = xh * bytes_per_pixel;
              if (xh >= (xoffset + x_clip) && xh <= (xoffset + xx_clip)) {
                unsigned int hzpixel = horizontal * bytes_per_pixel;
                unsigned int vhz = vbl + hzpixel;
                unsigned int yvhz = yvbl + hzpixel;
                unsigned int xhbp_yvbl = xhbp + yvbl;
                *(framebuffer + xhbp_yvbl) = *(blit_data + vhz);
                *(framebuffer + xhbp_yvbl + 1) = *(blit_data + vhz + 1);
                *(framebuffer + xhbp_yvbl + 2) = *(blit_data + vhz + 2);
              }
            }
          }
        }
        break;
      case 2:
        for (vertical = 0; vertical < h; vertical++) {
          unsigned int vbl = vertical * bline;
          unsigned short yv = fb_y + vertical;
          unsigned int yvbl = yv * bytes_per_line;
          if (yv >= (yoffset + y_clip) && yv <= (yoffset + yy_clip)) {
            for (horizontal = 0; horizontal < w; horizontal++) {
              unsigned short xh = fb_x + horizontal;
              unsigned int xhbp = xh * bytes_per_pixel;
              if (xh >= (xoffset + x_clip) && xh <= (xoffset + xx_clip)) {
                unsigned int hzpixel = horizontal * bytes_per_pixel;
                unsigned int vhz = vbl + hzpixel;
                unsigned int yvhz = yvbl + hzpixel;
                unsigned int xhbp_yvbl = xhbp + yvbl;
                *((unsigned short *)(framebuffer + xhbp_yvbl)) = *((unsigned short *)(blit_data + vhz));
              }
            }
          }
        }
        break;
      }
      break;
    case 1:
      switch (bytes_per_pixel) {
      case 4:
        for (vertical = 0; vertical < h; vertical++) {
          unsigned int vbl = vertical * bline;
          unsigned short yv = fb_y + vertical;
          unsigned int yvbl = yv * bytes_per_line;
          if (yv >= (yoffset + y_clip) && yv <= (yoffset + yy_clip)) {
            for (horizontal = 0; horizontal < w; horizontal++) {
              unsigned short xh = fb_x + horizontal;
              unsigned int xhbp = xh * bytes_per_pixel;
              if (xh >= (xoffset + x_clip) && xh <= (xoffset + xx_clip)) {
                unsigned int hzpixel = horizontal * bytes_per_pixel;
                unsigned int vhz = vbl + hzpixel;
                unsigned int yvhz = yvbl + hzpixel;
                unsigned int xhbp_yvbl = xhbp + yvbl;
                *((unsigned int *)(framebuffer + xhbp_yvbl)) ^= *((unsigned int *)(blit_data + vhz));
              }
            }
          }
        }
        break;
      case 3:
        for (vertical = 0; vertical < h; vertical++) {
          unsigned int vbl = vertical * bline;
          unsigned short yv = fb_y + vertical;
          unsigned int yvbl = yv * bytes_per_line;
          if (yv >= (yoffset + y_clip) && yv <= (yoffset + yy_clip)) {
            for (horizontal = 0; horizontal < w; horizontal++) {
              unsigned short xh = fb_x + horizontal;
              unsigned int xhbp = xh * bytes_per_pixel;
              if (xh >= (xoffset + x_clip) && xh <= (xoffset + xx_clip)) {
                unsigned int hzpixel = horizontal * bytes_per_pixel;
                unsigned int vhz = vbl + hzpixel;
                unsigned int yvhz = yvbl + hzpixel;
                unsigned int xhbp_yvbl = xhbp + yvbl;
                *(framebuffer + xhbp_yvbl) ^= *(blit_data + vhz);
                *(framebuffer + xhbp_yvbl + 1) ^= *(blit_data + vhz + 1);
                *(framebuffer + xhbp_yvbl + 2) ^= *(blit_data + vhz + 2);
              }
            }
          }
        }
        break;
      case 2:
        for (vertical = 0; vertical < h; vertical++) {
          unsigned int vbl = vertical * bline;
          unsigned short yv = fb_y + vertical;
          unsigned int yvbl = yv * bytes_per_line;
          if (yv >= (yoffset + y_clip) && yv <= (yoffset + yy_clip)) {
            for (horizontal = 0; horizontal < w; horizontal++) {
              unsigned short xh = fb_x + horizontal;
              unsigned int xhbp = xh * bytes_per_pixel;
              if (xh >= (xoffset + x_clip) && xh <= (xoffset + xx_clip)) {
                unsigned int hzpixel = horizontal * bytes_per_pixel;
                unsigned int vhz = vbl + hzpixel;
                unsigned int yvhz = yvbl + hzpixel;
                unsigned int xhbp_yvbl = xhbp + yvbl;
                *((unsigned short *)(framebuffer + xhbp_yvbl)) ^= *((unsigned short *)(blit_data + vhz));
              }
            }
          }
        }
        break;
      }
      break;
    case 2:
      switch (bytes_per_pixel) {
      case 4:
        for (vertical = 0; vertical < h; vertical++) {
          unsigned int vbl = vertical * bline;
          unsigned short yv = fb_y + vertical;
          unsigned int yvbl = yv * bytes_per_line;
          if (yv >= (yoffset + y_clip) && yv <= (yoffset + yy_clip)) {
            for (horizontal = 0; horizontal < w; horizontal++) {
              unsigned short xh = fb_x + horizontal;
              unsigned int xhbp = xh * bytes_per_pixel;
              if (xh >= (xoffset + x_clip) && xh <= (xoffset + xx_clip)) {
                unsigned int hzpixel = horizontal * bytes_per_pixel;
                unsigned int vhz = vbl + hzpixel;
                unsigned int yvhz = yvbl + hzpixel;
                unsigned int xhbp_yvbl = xhbp + yvbl;
                *((unsigned int *)(framebuffer + xhbp_yvbl)) |= *((unsigned int *)(blit_data + vhz));
              }
            }
          }
        }
        break;
      case 3:
        for (vertical = 0; vertical < h; vertical++) {
          unsigned int vbl = vertical * bline;
          unsigned short yv = fb_y + vertical;
          unsigned int yvbl = yv * bytes_per_line;
          if (yv >= (yoffset + y_clip) && yv <= (yoffset + yy_clip)) {
            for (horizontal = 0; horizontal < w; horizontal++) {
              unsigned short xh = fb_x + horizontal;
              unsigned int xhbp = xh * bytes_per_pixel;
              if (xh >= (xoffset + x_clip) && xh <= (xoffset + xx_clip)) {
                unsigned int hzpixel = horizontal * bytes_per_pixel;
                unsigned int vhz = vbl + hzpixel;
                unsigned int yvhz = yvbl + hzpixel;
                unsigned int xhbp_yvbl = xhbp + yvbl;
                *(framebuffer + xhbp_yvbl) |= *(blit_data + vhz);
                *(framebuffer + xhbp_yvbl + 1) |= *(blit_data + vhz + 1);
                *(framebuffer + xhbp_yvbl + 2) |= *(blit_data + vhz + 2);
              }
            }
          }
        }
        break;
      case 2:
        for (vertical = 0; vertical < h; vertical++) {
          unsigned int vbl = vertical * bline;
          unsigned short yv = fb_y + vertical;
          unsigned int yvbl = yv * bytes_per_line;
          if (yv >= (yoffset + y_clip) && yv <= (yoffset + yy_clip)) {
            for (horizontal = 0; horizontal < w; horizontal++) {
              unsigned short xh = fb_x + horizontal;
              unsigned int xhbp = xh * bytes_per_pixel;
              if (xh >= (xoffset + x_clip) && xh <= (xoffset + xx_clip)) {
                unsigned int hzpixel = horizontal * bytes_per_pixel;
                unsigned int vhz = vbl + hzpixel;
                unsigned int yvhz = yvbl + hzpixel;
                unsigned int xhbp_yvbl = xhbp + yvbl;
                *((unsigned short *)(framebuffer + xhbp_yvbl)) |= *((unsigned short *)(blit_data + vhz));
              }
            }
          }
        }
        break;
      }
      break;
    case 3:
      switch (bytes_per_pixel) {
      case 4:
        for (vertical = 0; vertical < h; vertical++) {
          unsigned int vbl = vertical * bline;
          unsigned short yv = fb_y + vertical;
          unsigned int yvbl = yv * bytes_per_line;
          if (yv >= (yoffset + y_clip) && yv <= (yoffset + yy_clip)) {
            for (horizontal = 0; horizontal < w; horizontal++) {
              unsigned short xh = fb_x + horizontal;
              unsigned int xhbp = xh * bytes_per_pixel;
              if (xh >= (xoffset + x_clip) && xh <= (xoffset + xx_clip)) {
                unsigned int hzpixel = horizontal * bytes_per_pixel;
                unsigned int vhz = vbl + hzpixel;
                unsigned int yvhz = yvbl + hzpixel;
                unsigned int xhbp_yvbl = xhbp + yvbl;
                *((unsigned int *)(framebuffer + xhbp_yvbl)) &= *((unsigned int *)(blit_data + vhz));
              }
            }
          }
        }
        break;
      case 3:
        for (vertical = 0; vertical < h; vertical++) {
          unsigned int vbl = vertical * bline;
          unsigned short yv = fb_y + vertical;
          unsigned int yvbl = yv * bytes_per_line;
          if (yv >= (yoffset + y_clip) && yv <= (yoffset + yy_clip)) {
            for (horizontal = 0; horizontal < w; horizontal++) {
              unsigned short xh = fb_x + horizontal;
              unsigned int xhbp = xh * bytes_per_pixel;
              if (xh >= (xoffset + x_clip) && xh <= (xoffset + xx_clip)) {
                unsigned int hzpixel = horizontal * bytes_per_pixel;
                unsigned int vhz = vbl + hzpixel;
                unsigned int yvhz = yvbl + hzpixel;
                unsigned int xhbp_yvbl = xhbp + yvbl;
                *(framebuffer + xhbp_yvbl) &= *(blit_data + vhz);
                *(framebuffer + xhbp_yvbl + 1) &= *(blit_data + vhz + 1);
                *(framebuffer + xhbp_yvbl + 2) &= *(blit_data + vhz + 2);
              }
            }
          }
        }
        break;
      case 2:
        for (vertical = 0; vertical < h; vertical++) {
          unsigned int vbl = vertical * bline;
          unsigned short yv = fb_y + vertical;
          unsigned int yvbl = yv * bytes_per_line;
          if (yv >= (yoffset + y_clip) && yv <= (yoffset + yy_clip)) {
            for (horizontal = 0; horizontal < w; horizontal++) {
              unsigned short xh = fb_x + horizontal;
              unsigned int xhbp = xh * bytes_per_pixel;
              if (xh >= (xoffset + x_clip) && xh <= (xoffset + xx_clip)) {
                unsigned int hzpixel = horizontal * bytes_per_pixel;
                unsigned int vhz = vbl + hzpixel;
                unsigned int yvhz = yvbl + hzpixel;
                unsigned int xhbp_yvbl = xhbp + yvbl;
                *((unsigned short *)(framebuffer + xhbp_yvbl)) &= *((unsigned short *)(blit_data + vhz));
              }
            }
          }
        }
        break;
      }
      break;
    case 4:
      switch (bytes_per_pixel) {
      case 4:
        for (vertical = 0; vertical < h; vertical++) {
          unsigned int vbl = vertical * bline;
          unsigned short yv = fb_y + vertical;
          unsigned int yvbl = yv * bytes_per_line;
          if (yv >= (yoffset + y_clip) && yv <= (yoffset + yy_clip)) {
            for (horizontal = 0; horizontal < w; horizontal++) {
              unsigned short xh = fb_x + horizontal;
              unsigned int xhbp = xh * bytes_per_pixel;
              if (xh >= (xoffset + x_clip) && xh <= (xoffset + xx_clip)) {
                unsigned int hzpixel = horizontal * bytes_per_pixel;
                unsigned int vhz = vbl + hzpixel;
                unsigned int yvhz = yvbl + hzpixel;
                unsigned int xhbp_yvbl = xhbp + yvbl;
                unsigned int rgb = *((unsigned int *)(blit_data + vhz));
                if ((rgb & 0xFFFFFF00) != (bcolor & 0xFFFFFF00)) {
                  *((unsigned int *)(framebuffer + xhbp_yvbl)) = rgb;
                }
              }
            }
          }
        }
        break;
      case 3:
        for (vertical = 0; vertical < h; vertical++) {
          unsigned int vbl = vertical * bline;
          unsigned short yv = fb_y + vertical;
          unsigned int yvbl = yv * bytes_per_line;
          if (yv >= (yoffset + y_clip) && yv <= (yoffset + yy_clip)) {
            for (horizontal = 0; horizontal < w; horizontal++) {
              unsigned short xh = fb_x + horizontal;
              unsigned int xhbp = xh * bytes_per_pixel;
              if (xh >= (xoffset + x_clip) && xh <= (xoffset + xx_clip)) {
                unsigned int hzpixel = horizontal * bytes_per_pixel;
                unsigned int vhz = vbl + hzpixel;
                unsigned int yvhz = yvbl + hzpixel;
                unsigned int xhbp_yvbl = xhbp + yvbl;
                if ((*((unsigned int *)(blit_data + vhz)) & 0xFFFFFF00) != (bcolor & 0xFFFFFF00)) {
                  *(framebuffer + xhbp_yvbl) = *(blit_data + vhz);
                  *(framebuffer + xhbp_yvbl + 1) = *(blit_data + vhz + 1);
                  *(framebuffer + xhbp_yvbl + 2) = *(blit_data + vhz + 2);
                }
              }
            }
          }
        }
        break;
      case 2:
        for (vertical = 0; vertical < h; vertical++) {
          unsigned int vbl = vertical * bline;
          unsigned short yv = fb_y + vertical;
          unsigned int yvbl = yv * bytes_per_line;
          if (yv >= (yoffset + y_clip) && yv <= (yoffset + yy_clip)) {
            for (horizontal = 0; horizontal < w; horizontal++) {
              unsigned short xh = fb_x + horizontal;
              unsigned int xhbp = xh * bytes_per_pixel;
              if (xh >= (xoffset + x_clip) && xh <= (xoffset + xx_clip)) {
                unsigned int hzpixel = horizontal * bytes_per_pixel;
                unsigned int vhz = vbl + hzpixel;
                unsigned int yvhz = yvbl + hzpixel;
                unsigned int xhbp_yvbl = xhbp + yvbl;
                unsigned int rgb = *((unsigned short *)(blit_data + vhz));
                if (rgb != (bcolor & 0xFFFF)) {
                  *((unsigned short *)(framebuffer + xhbp_yvbl)) = rgb;
                }
              }
            }
          }
        }
        break;
      }
      break;
    case 5:
      switch (bytes_per_pixel) {
      case 4:
        for (vertical = 0; vertical < h; vertical++) {
          unsigned int vbl = vertical * bline;
          unsigned short yv = fb_y + vertical;
          unsigned int yvbl = yv * bytes_per_line;
          if (yv >= (yoffset + y_clip) && yv <= (yoffset + yy_clip)) {
            for (horizontal = 0; horizontal < w; horizontal++) {
              unsigned short xh = fb_x + horizontal;
              unsigned int xhbp = xh * bytes_per_pixel;
              if (xh >= (xoffset + x_clip) && xh <= (xoffset + xx_clip)) {
                unsigned int hzpixel = horizontal * bytes_per_pixel;
                unsigned int vhz = vbl + hzpixel;
                unsigned int yvhz = yvbl + hzpixel;
                unsigned int xhbp_yvbl = xhbp + yvbl;
                if ((*((unsigned int *)(framebuffer + xhbp_yvbl)) & 0xFFFFFF00) == (bcolor & 0xFFFFFF00)) {
                  *((unsigned int *)(framebuffer + xhbp_yvbl)) = *((unsigned int *)(blit_data + vhz));
                }
              }
            }
          }
        }
        break;
      case 3:
        for (vertical = 0; vertical < h; vertical++) {
          unsigned int vbl = vertical * bline;
          unsigned short yv = fb_y + vertical;
          unsigned int yvbl = yv * bytes_per_line;
          if (yv >= (yoffset + y_clip) && yv <= (yoffset + yy_clip)) {
            for (horizontal = 0; horizontal < w; horizontal++) {
              unsigned short xh = fb_x + horizontal;
              unsigned int xhbp = xh * bytes_per_pixel;
              if (xh >= (xoffset + x_clip) && xh <= (xoffset + xx_clip)) {
                unsigned int hzpixel = horizontal * bytes_per_pixel;
                unsigned int vhz = vbl + hzpixel;
                unsigned int yvhz = yvbl + hzpixel;
                unsigned int xhbp_yvbl = xhbp + yvbl;
                if (*((unsigned int *)(framebuffer + xhbp + yvhz)) == (bcolor & 0xFFFFFF00)) {
                  *(framebuffer + xhbp_yvbl) = *(blit_data + vhz);
                  *(framebuffer + xhbp_yvbl + 1) = *(blit_data + vhz + 1);
                  *(framebuffer + xhbp_yvbl + 2) = *(blit_data + vhz + 2);
                }
              }
            }
          }
        }
        break;
      case 2:
        for (vertical = 0; vertical < h; vertical++) {
          unsigned int vbl = vertical * bline;
          unsigned short yv = fb_y + vertical;
          unsigned int yvbl = yv * bytes_per_line;
          if (yv >= (yoffset + y_clip) && yv <= (yoffset + yy_clip)) {
            for (horizontal = 0; horizontal < w; horizontal++) {
              unsigned short xh = fb_x + horizontal;
              unsigned int xhbp = xh * bytes_per_pixel;
              if (xh >= (xoffset + x_clip) && xh <= (xoffset + xx_clip)) {
                unsigned int hzpixel = horizontal * bytes_per_pixel;
                unsigned int vhz = vbl + hzpixel;
                unsigned int yvhz = yvbl + hzpixel;
                unsigned int xhbp_yvbl = xhbp + yvbl;
                if (*((unsigned short *)(framebuffer + xhbp + yvhz)) == (bcolor & 0xFFFF)) {
                  *((unsigned short *)(framebuffer + xhbp_yvbl)) = *((unsigned short *)(blit_data + vhz));
                }
              }
            }
          }
        }
        break;
      }
      break;
    case 6:
      switch (bytes_per_pixel) {
      case 4:
        for (vertical = 0; vertical < h; vertical++) {
          unsigned int vbl = vertical * bline;
          unsigned short yv = fb_y + vertical;
          unsigned int yvbl = yv * bytes_per_line;
          if (yv >= (yoffset + y_clip) && yv <= (yoffset + yy_clip)) {
            for (horizontal = 0; horizontal < w; horizontal++) {
              unsigned short xh = fb_x + horizontal;
              unsigned int xhbp = xh * bytes_per_pixel;
              if (xh >= (xoffset + x_clip) && xh <= (xoffset + xx_clip)) {
                unsigned int hzpixel = horizontal * bytes_per_pixel;
                unsigned int vhz = vbl + hzpixel;
                unsigned int yvhz = yvbl + hzpixel;
                unsigned int xhbp_yvbl = xhbp + yvbl;
                unsigned int fb_rgb = *((unsigned int *)(framebuffer + xhbp_yvbl));
                unsigned char fb_r = fb_rgb & 255;
                unsigned char fb_g = (fb_rgb >> 8) & 255;
                unsigned char fb_b = (fb_rgb >> 16) & 255;
                unsigned int blit_rgb = *((unsigned int *)(blit_data + vhz));
                unsigned char R = blit_rgb & 255;
                unsigned char G = (blit_rgb >> 8) & 255;
                unsigned char B = (blit_rgb >> 16) & 255;
                unsigned char A = (blit_rgb >> 24) & 255;
                unsigned char invA = (255 - A);
                fb_r = ((R * A) + (fb_r * invA)) >> 8;
                fb_g = ((G * A) + (fb_g * invA)) >> 8;
                fb_b = ((B * A) + (fb_b * invA)) >> 8;
                *((unsigned int *)(framebuffer + xhbp_yvbl)) = fb_r | (fb_g << 8) | (fb_b << 16) | (A << 24);
              }
            }
          }
        }
        break;
      case 3:
        for (vertical = 0; vertical < h; vertical++) {
          unsigned int vbl = vertical * bline;
          unsigned short yv = fb_y + vertical;
          unsigned int yvbl = yv * bytes_per_line;
          if (yv >= (yoffset + y_clip) && yv <= (yoffset + yy_clip)) {
            for (horizontal = 0; horizontal < w; horizontal++) {
              unsigned short xh = fb_x + horizontal;
              unsigned int xhbp = xh * bytes_per_pixel;
              if (xh >= (xoffset + x_clip) && xh <= (xoffset + xx_clip)) {
                unsigned int hzpixel = horizontal * bytes_per_pixel;
                unsigned int vhz = vbl + hzpixel;
                unsigned int yvhz = yvbl + hzpixel;
                unsigned int xhbp_yvbl = xhbp + yvbl;
                unsigned char fb_r = *(framebuffer + xhbp_yvbl);
                unsigned char fb_g = *(framebuffer + xhbp_yvbl + 1);
                unsigned char fb_b = *(framebuffer + xhbp_yvbl + 2);
                unsigned char R = *(blit_data + vhz);
                unsigned char G = *(blit_data + vhz + 1);
                unsigned char B = *(blit_data + vhz + 2);
                unsigned char invA = (255 - alpha);
                fb_r = ((R * alpha) + (fb_r * invA)) >> 8;
                fb_g = ((G * alpha) + (fb_g * invA)) >> 8;
                fb_b = ((B * alpha) + (fb_b * invA)) >> 8;
                *(framebuffer + xhbp_yvbl) = fb_r;
                *(framebuffer + xhbp_yvbl + 1) = fb_g;
                *(framebuffer + xhbp_yvbl + 2) = fb_b;
              }
            }
          }
        }
        break;
      case 2:
        for (vertical = 0; vertical < h; vertical++) {
          unsigned int vbl = vertical * bline;
          unsigned short yv = fb_y + vertical;
          unsigned int yvbl = yv * bytes_per_line;
          if (yv >= (yoffset + y_clip) && yv <= (yoffset + yy_clip)) {
            for (horizontal = 0; horizontal < w; horizontal++) {
              unsigned short xh = fb_x + horizontal;
              unsigned int xhbp = xh * bytes_per_pixel;
              if (xh >= (xoffset + x_clip) && xh <= (xoffset + xx_clip)) {
                unsigned int hzpixel = horizontal * bytes_per_pixel;
                unsigned int vhz = vbl + hzpixel;
                unsigned int yvhz = yvbl + hzpixel;
                unsigned int xhbp_yvbl = xhbp + yvbl;
                unsigned short rgb565 = *((unsigned short *)(framebuffer + xhbp_yvbl));
                unsigned short fb_r = rgb565 & 31;
                unsigned short fb_g = (rgb565 >> 5) & 63;
                unsigned short fb_b = (rgb565 >> 11) & 31;
                rgb565 = *((unsigned short *)(blit_data + vhz));
                unsigned short R = rgb565 & 31;
                unsigned short G = (rgb565 >> 5) & 63;
                unsigned short B = (rgb565 >> 11) & 31;
                unsigned char invA = (255 - alpha);
                fb_r = ((R * alpha) + (fb_r * invA)) >> 8;
                fb_g = ((G * alpha) + (fb_g * invA)) >> 8;
                fb_b = ((B * alpha) + (fb_b * invA)) >> 8;
                *((unsigned short *)(framebuffer + xhbp_yvbl)) = (fb_b << 11) | (fb_g << 5) | fb_r;
              }
            }
          }
        }
        break;
      }
      break;
    case 7:
      switch (bytes_per_pixel) {
      case 4:
        for (vertical = 0; vertical < h; vertical++) {
          unsigned int vbl = vertical * bline;
          unsigned short yv = fb_y + vertical;
          unsigned int yvbl = yv * bytes_per_line;
          if (yv >= (yoffset + y_clip) && yv <= (yoffset + yy_clip)) {
            for (horizontal = 0; horizontal < w; horizontal++) {
              unsigned short xh = fb_x + horizontal;
              unsigned int xhbp = xh * bytes_per_pixel;
              if (xh >= (xoffset + x_clip) && xh <= (xoffset + xx_clip)) {
                unsigned int hzpixel = horizontal * bytes_per_pixel;
                unsigned int vhz = vbl + hzpixel;
                unsigned int yvhz = yvbl + hzpixel;
                unsigned int xhbp_yvbl = xhbp + yvbl;
                *((unsigned int *)(framebuffer + xhbp_yvbl)) += *((unsigned int *)(blit_data + vhz));
              }
            }
          }
        }
        break;
      case 3:
        for (vertical = 0; vertical < h; vertical++) {
          unsigned int vbl = vertical * bline;
          unsigned short yv = fb_y + vertical;
          unsigned int yvbl = yv * bytes_per_line;
          if (yv >= (yoffset + y_clip) && yv <= (yoffset + yy_clip)) {
            for (horizontal = 0; horizontal < w; horizontal++) {
              unsigned short xh = fb_x + horizontal;
              unsigned int xhbp = xh * bytes_per_pixel;
              if (xh >= (xoffset + x_clip) && xh <= (xoffset + xx_clip)) {
                unsigned int hzpixel = horizontal * bytes_per_pixel;
                unsigned int vhz = vbl + hzpixel;
                unsigned int yvhz = yvbl + hzpixel;
                unsigned int xhbp_yvbl = xhbp + yvbl;
                *(framebuffer + xhbp_yvbl) += *(blit_data + vhz);
                *(framebuffer + xhbp_yvbl + 1) += *(blit_data + vhz + 1);
                *(framebuffer + xhbp_yvbl + 2) += *(blit_data + vhz + 2);
              }
            }
          }
        }
        break;
      case 2:
        for (vertical = 0; vertical < h; vertical++) {
          unsigned int vbl = vertical * bline;
          unsigned short yv = fb_y + vertical;
          unsigned int yvbl = yv * bytes_per_line;
          if (yv >= (yoffset + y_clip) && yv <= (yoffset + yy_clip)) {
            for (horizontal = 0; horizontal < w; horizontal++) {
              unsigned short xh = fb_x + horizontal;
              unsigned int xhbp = xh * bytes_per_pixel;
              if (xh >= (xoffset + x_clip) && xh <= (xoffset + xx_clip)) {
                unsigned int hzpixel = horizontal * bytes_per_pixel;
                unsigned int vhz = vbl + hzpixel;
                unsigned int yvhz = yvbl + hzpixel;
                unsigned int xhbp_yvbl = xhbp + yvbl;
                *((unsigned short *)(framebuffer + xhbp_yvbl)) += *((unsigned short *)(blit_data + vhz));
              }
            }
          }
        }
        break;
      }
      break;
    case 8:
      switch (bytes_per_pixel) {
      case 4:
        for (vertical = 0; vertical < h; vertical++) {
          unsigned int vbl = vertical * bline;
          unsigned short yv = fb_y + vertical;
          unsigned int yvbl = yv * bytes_per_line;
          if (yv >= (yoffset + y_clip) && yv <= (yoffset + yy_clip)) {
            for (horizontal = 0; horizontal < w; horizontal++) {
              unsigned short xh = fb_x + horizontal;
              unsigned int xhbp = xh * bytes_per_pixel;
              if (xh >= (xoffset + x_clip) && xh <= (xoffset + xx_clip)) {
                unsigned int hzpixel = horizontal * bytes_per_pixel;
                unsigned int vhz = vbl + hzpixel;
                unsigned int yvhz = yvbl + hzpixel;
                unsigned int xhbp_yvbl = xhbp + yvbl;
                *((unsigned int *)(framebuffer + xhbp_yvbl)) -= *((unsigned int *)(blit_data + vhz));
              }
            }
          }
        }
        break;
      case 3:
        for (vertical = 0; vertical < h; vertical++) {
          unsigned int vbl = vertical * bline;
          unsigned short yv = fb_y + vertical;
          unsigned int yvbl = yv * bytes_per_line;
          if (yv >= (yoffset + y_clip) && yv <= (yoffset + yy_clip)) {
            for (horizontal = 0; horizontal < w; horizontal++) {
              unsigned short xh = fb_x + horizontal;
              unsigned int xhbp = xh * bytes_per_pixel;
              if (xh >= (xoffset + x_clip) && xh <= (xoffset + xx_clip)) {
                unsigned int hzpixel = horizontal * bytes_per_pixel;
                unsigned int vhz = vbl + hzpixel;
                unsigned int yvhz = yvbl + hzpixel;
                unsigned int xhbp_yvbl = xhbp + yvbl;
                *(framebuffer + xhbp_yvbl) -= *(blit_data + vhz);
                *(framebuffer + xhbp_yvbl + 1) -= *(blit_data + vhz + 1);
                *(framebuffer + xhbp_yvbl + 2) -= *(blit_data + vhz + 2);
              }
            }
          }
        }
        break;
      case 2:
        for (vertical = 0; vertical < h; vertical++) {
          unsigned int vbl = vertical * bline;
          unsigned short yv = fb_y + vertical;
          unsigned int yvbl = yv * bytes_per_line;
          if (yv >= (yoffset + y_clip) && yv <= (yoffset + yy_clip)) {
            for (horizontal = 0; horizontal < w; horizontal++) {
              unsigned short xh = fb_x + horizontal;
              unsigned int xhbp = xh * bytes_per_pixel;
              if (xh >= (xoffset + x_clip) && xh <= (xoffset + xx_clip)) {
                unsigned int hzpixel = horizontal * bytes_per_pixel;
                unsigned int vhz = vbl + hzpixel;
                unsigned int yvhz = yvbl + hzpixel;
                unsigned int xhbp_yvbl = xhbp + yvbl;
                *((unsigned short *)(framebuffer + xhbp_yvbl)) -= *((unsigned short *)(blit_data + vhz));
              }
            }
          }
        }
        break;
      }
      break;
    case 9:
      switch (bytes_per_pixel) {
      case 4:
        for (vertical = 0; vertical < h; vertical++) {
          unsigned int vbl = vertical * bline;
          unsigned short yv = fb_y + vertical;
          unsigned int yvbl = yv * bytes_per_line;
          if (yv >= (yoffset + y_clip) && yv <= (yoffset + yy_clip)) {
            for (horizontal = 0; horizontal < w; horizontal++) {
              unsigned short xh = fb_x + horizontal;
              unsigned int xhbp = xh * bytes_per_pixel;
              if (xh >= (xoffset + x_clip) && xh <= (xoffset + xx_clip)) {
                unsigned int hzpixel = horizontal * bytes_per_pixel;
                unsigned int vhz = vbl + hzpixel;
                unsigned int yvhz = yvbl + hzpixel;
                unsigned int xhbp_yvbl = xhbp + yvbl;
                *((unsigned int *)(framebuffer + xhbp_yvbl)) *= *((unsigned int *)(blit_data + vhz));
              }
            }
          }
        }
        break;
      case 3:
        for (vertical = 0; vertical < h; vertical++) {
          unsigned int vbl = vertical * bline;
          unsigned short yv = fb_y + vertical;
          unsigned int yvbl = yv * bytes_per_line;
          if (yv >= (yoffset + y_clip) && yv <= (yoffset + yy_clip)) {
            for (horizontal = 0; horizontal < w; horizontal++) {
              unsigned short xh = fb_x + horizontal;
              unsigned int xhbp = xh * bytes_per_pixel;
              if (xh >= (xoffset + x_clip) && xh <= (xoffset + xx_clip)) {
                unsigned int hzpixel = horizontal * bytes_per_pixel;
                unsigned int vhz = vbl + hzpixel;
                unsigned int yvhz = yvbl + hzpixel;
                unsigned int xhbp_yvbl = xhbp + yvbl;
                *(framebuffer + xhbp_yvbl) *= *(blit_data + vhz);
                *(framebuffer + xhbp_yvbl + 1) *= *(blit_data + vhz + 1);
                *(framebuffer + xhbp_yvbl + 2) *= *(blit_data + vhz + 2);
              }
            }
          }
        }
        break;
      case 2:
        for (vertical = 0; vertical < h; vertical++) {
          unsigned int vbl = vertical * bline;
          unsigned short yv = fb_y + vertical;
          unsigned int yvbl = yv * bytes_per_line;
          if (yv >= (yoffset + y_clip) && yv <= (yoffset + yy_clip)) {
            for (horizontal = 0; horizontal < w; horizontal++) {
              unsigned short xh = fb_x + horizontal;
              unsigned int xhbp = xh * bytes_per_pixel;
              if (xh >= (xoffset + x_clip) && xh <= (xoffset + xx_clip)) {
                unsigned int hzpixel = horizontal * bytes_per_pixel;
                unsigned int vhz = vbl + hzpixel;
                unsigned int yvhz = yvbl + hzpixel;
                unsigned int xhbp_yvbl = xhbp + yvbl;
                *((unsigned short *)(framebuffer + xhbp_yvbl)) *= *((unsigned short *)(blit_data + vhz));
              }
            }
          }
        }
        break;
      }
      break;
    case 10:
      switch (bytes_per_pixel) {
      case 4:
        for (vertical = 0; vertical < h; vertical++) {
          unsigned int vbl = vertical * bline;
          unsigned short yv = fb_y + vertical;
          unsigned int yvbl = yv * bytes_per_line;
          if (yv >= (yoffset + y_clip) && yv <= (yoffset + yy_clip)) {
            for (horizontal = 0; horizontal < w; horizontal++) {
              unsigned short xh = fb_x + horizontal;
              unsigned int xhbp = xh * bytes_per_pixel;
              if (xh >= (xoffset + x_clip) && xh <= (xoffset + xx_clip)) {
                unsigned int hzpixel = horizontal * bytes_per_pixel;
                unsigned int vhz = vbl + hzpixel;
                unsigned int yvhz = yvbl + hzpixel;
                unsigned int xhbp_yvbl = xhbp + yvbl;
                *((unsigned int *)(framebuffer + xhbp_yvbl)) /= *((unsigned int *)(blit_data + vhz));
              }
            }
          }
        }
        break;
      case 3:
        for (vertical = 0; vertical < h; vertical++) {
          unsigned int vbl = vertical * bline;
          unsigned short yv = fb_y + vertical;
          unsigned int yvbl = yv * bytes_per_line;
          if (yv >= (yoffset + y_clip) && yv <= (yoffset + yy_clip)) {
            for (horizontal = 0; horizontal < w; horizontal++) {
              unsigned short xh = fb_x + horizontal;
              unsigned int xhbp = xh * bytes_per_pixel;
              if (xh >= (xoffset + x_clip) && xh <= (xoffset + xx_clip)) {
                unsigned int hzpixel = horizontal * bytes_per_pixel;
                unsigned int vhz = vbl + hzpixel;
                unsigned int yvhz = yvbl + hzpixel;
                unsigned int xhbp_yvbl = xhbp + yvbl;
                *(framebuffer + xhbp_yvbl) /= *(blit_data + vhz);
                *(framebuffer + xhbp_yvbl + 1) /= *(blit_data + vhz + 1);
                *(framebuffer + xhbp_yvbl + 2) /= *(blit_data + vhz + 2);
              }
            }
          }
        }
        break;
      case 2:
        for (vertical = 0; vertical < h; vertical++) {
          unsigned int vbl = vertical * bline;
          unsigned short yv = fb_y + vertical;
          unsigned int yvbl = yv * bytes_per_line;
          if (yv >= (yoffset + y_clip) && yv <= (yoffset + yy_clip)) {
            for (horizontal = 0; horizontal < w; horizontal++) {
              unsigned short xh = fb_x + horizontal;
              unsigned int xhbp = xh * bytes_per_pixel;
              if (xh >= (xoffset + x_clip) && xh <= (xoffset + xx_clip)) {
                unsigned int hzpixel = horizontal * bytes_per_pixel;
                unsigned int vhz = vbl + hzpixel;
                unsigned int yvhz = yvbl + hzpixel;
                unsigned int xhbp_yvbl = xhbp + yvbl;
                *((unsigned short *)(framebuffer + xhbp_yvbl)) /= *((unsigned short *)(blit_data + vhz));
              }
            }
          }
        }
        break;
      }
      break;
    }
  }
}
```