user: What would the C source look like for the assembly code provided here:

```asm
<CreateCounts>:
  endbr64
  push   %rbp
  push   %rbx
  sub    $0x8,%rsp
  mov    %rdi,%rbx
  cmp    $0x20,%esi
  je     L31
  mov    %esi,%ebp
  cmp    $0x8,%esi
  jbe    L16
  lea    D50(%rip),%rsi
  mov    $0x0,%eax
  call   <Output@plt>
L10:
  lea    D91(%rip),%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <Output@plt>
  mov    $0x20,%eax
  mov    $0x0,%edx
  div    %ebp
  mov    %eax,%ebp
  mov    %eax,%edx
  lea    D20(%rip),%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <Output@plt>
  lea    D5(%rip),%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <Output@plt>
  mov    %ebp,%edx
  lea    D80(%rip),%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <Output@plt>
L25:
  add    $0x8,%rsp
  pop    %rbx
  pop    %rbp
  ret
L16:
  lea    D59(%rip),%rsi
  mov    $0x0,%eax
  call   <Output@plt>
  lea    D96(%rip),%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <Output@plt>
  lea    D73(%rip),%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <Output@plt>
  lea    D64(%rip),%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <Output@plt>
  lea    D17(%rip),%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <Output@plt>
  jmp    L10
L31:
  lea    D77(%rip),%rsi
  mov    $0x0,%eax
  call   <Output@plt>
  jmp    L25
```

tool_calls: name: parse_data
arguments: tag: D50
data_type: string
name: parse_data
arguments: tag: D91
data_type: string
name: parse_data
arguments: tag: D20
data_type: string
name: parse_data
arguments: tag: D5
data_type: string
name: parse_data
arguments: tag: D80
data_type: string
name: parse_data
arguments: tag: D59
data_type: string
name: parse_data
arguments: tag: D96
data_type: string
name: parse_data
arguments: tag: D73
data_type: string
name: parse_data
arguments: tag: D64
data_type: string
name: parse_data
arguments: tag: D17
data_type: string
name: parse_data
arguments: tag: D77
data_type: string

tool: D50: LeftCount = ((ULONG_PTR) DestBase >> 1) & 0x01;


tool: D91: CenterCount = (BltInfo->DestRect.right - BltInfo->DestRect.left -


tool: D20:                LeftCount) / %u;


tool: D5: RightCount = (BltInfo->DestRect.right - BltInfo->DestRect.left -


tool: D80:               LeftCount - %u * CenterCount);


tool: D59: LeftCount = (ULONG_PTR) DestBase & 0x03;


tool: D96: if ((ULONG)(BltInfo->DestRect.right - BltInfo->DestRect.left) < LeftCount)


tool: D73: {


tool: D64: LeftCount = BltInfo->DestRect.right - BltInfo->DestRect.left;


tool: D17: }


tool: D77: CenterCount = BltInfo->DestRect.right - BltInfo->DestRect.left;


assistant: ```c
void CreateCounts(FILE *Out, unsigned Bpp) {
  ;
  if (32 != Bpp) {
    if (8 < Bpp) {
      Output(Out, "LeftCount = ((ULONG_PTR) DestBase >> 1) & 0x01;\n");
    } else {
      Output(Out, "LeftCount = (ULONG_PTR) DestBase & 0x03;\n");
      Output(Out, "if ((ULONG)(BltInfo->DestRect.right - BltInfo->DestRect.left) < "
                  "LeftCount)\n");
      Output(Out, "{\n");
      Output(Out, "LeftCount = BltInfo->DestRect.right - "
                  "BltInfo->DestRect.left;\n");
      Output(Out, "}\n");
    }
    Output(Out, "CenterCount = (BltInfo->DestRect.right - BltInfo->DestRect.left -\n");
    Output(Out, "               LeftCount) / %u;\n", 32 / Bpp);
    Output(Out, "RightCount = (BltInfo->DestRect.right - BltInfo->DestRect.left -\n");
    Output(Out, "              LeftCount - %u * CenterCount);\n", 32 / Bpp);
  } else {
    Output(Out, "CenterCount = BltInfo->DestRect.right - BltInfo->DestRect.left;\n");
  }
}
```