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

```asm
<bubble_sort>:
  endbr64
  sub    $0x48,%rsp
  movdqa D18(%rip),%xmm0
  mov    $0xb,%edx
  mov    %fs:0x28,%rax
  mov    %rax,0x38(%rsp)
  xor    %eax,%eax
  lea    0x28(%rsp),%rax
  movaps %xmm0,(%rsp)
  movdqa D26(%rip),%xmm0
  movaps %xmm0,0x10(%rsp)
  movdqa D23(%rip),%xmm0
  movaps %xmm0,0x20(%rsp)
  nopl   0x0(%rax,%rax,1)
L60:
  movq   (%rax),%xmm1
  movd   (%rax),%xmm0
  pshufd $0xe5,%xmm1,%xmm3
  movd   %xmm1,%ecx
  movd   %xmm3,%esi
  pshufd $0xe1,%xmm1,%xmm2
  cmp    %ecx,%esi
  jge    L171
  movq   %xmm2,(%rax)
  cmp    $0xb,%edx
  je     L123
  movd   0x8(%rax),%xmm1
  punpckldq %xmm0,%xmm1
  cmp    %ecx,0x8(%rax)
  jge    L171
  movq   %xmm1,0x4(%rax)
  cmp    $0xa,%edx
  je     L123
  movd   0xc(%rax),%xmm1
  punpckldq %xmm0,%xmm1
  cmp    %ecx,0xc(%rax)
  jge    L171
  movq   %xmm1,0x8(%rax)
  cmp    $0x9,%edx
  je     L123
  movd   0x10(%rax),%xmm1
  punpckldq %xmm0,%xmm1
  cmp    %ecx,0x10(%rax)
  jge    L171
  movq   %xmm1,0xc(%rax)
  cmp    $0x8,%edx
  je     L123
  movd   0x14(%rax),%xmm1
  punpckldq %xmm0,%xmm1
  cmp    0x14(%rax),%ecx
  jle    L171
  movq   %xmm1,0x10(%rax)
  cmp    $0x7,%edx
  je     L123
  movd   0x18(%rax),%xmm1
  punpckldq %xmm0,%xmm1
  cmp    0x18(%rax),%ecx
  jle    L171
  movq   %xmm1,0x14(%rax)
  cmp    $0x6,%edx
  je     L123
  movd   0x1c(%rax),%xmm1
  punpckldq %xmm0,%xmm1
  cmp    0x1c(%rax),%ecx
  jle    L171
  movq   %xmm1,0x18(%rax)
  cmp    $0x5,%edx
  je     L123
  movd   0x20(%rax),%xmm1
  punpckldq %xmm0,%xmm1
  cmp    0x20(%rax),%ecx
  jle    L171
  movq   %xmm1,0x1c(%rax)
  cmp    $0x4,%edx
  je     L123
  movd   0x24(%rax),%xmm1
  punpckldq %xmm0,%xmm1
  cmp    0x24(%rax),%ecx
  jle    L171
  movq   %xmm1,0x20(%rax)
  cmp    $0x3,%edx
  je     L123
  movd   0x28(%rax),%xmm1
  punpckldq %xmm0,%xmm1
  cmp    0x28(%rax),%ecx
  jle    L171
  movq   %xmm1,0x24(%rax)
  cmp    $0x2,%edx
  je     L86
  movd   0x2c(%rax),%xmm1
  punpckldq %xmm0,%xmm1
  cmp    %ecx,0x2c(%rax)
  jge    L171
  movq   %xmm1,0x28(%rax)
L171:
  sub    $0x1,%edx
  sub    $0x4,%rax
  cmp    $0x1,%edx
  jne    L60
L86:
  mov    %rsp,%rdi
  call   <private_sort_check@plt>
  mov    0x38(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L52
  add    $0x48,%rsp
  ret
  nopl   0x0(%rax,%rax,1)
L123:
  sub    $0x4,%rax
  sub    $0x1,%edx
  jmp    L60
L52:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: read_data
arguments: label: D18
type_guessed: byte[16]
name: read_data
arguments: label: D26
type_guessed: byte[16]
name: read_data
arguments: label: D23
type_guessed: byte[16]

tool: {"D18": [0x05,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x0c,0x00,0x00,0x00]}

tool: {"D26": [0x2a,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2d,0x00,0x00,0x00]}

tool: {"D23": [0x09,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x17,0x00,0x00,0x00]}

assistant: ```c
void bubble_sort() {
  int array[12] = {5, 7, 99, 12, 42, 31, 1, 45, 9, 21, 22, 23};
  int i, j, temp;
  for (i = 12 - 2; i > 0; i--) {
    for (j = i; j < 12 - 1; j++) {
      if (array[j] > array[j + 1]) {
        temp = array[j];
        array[j] = array[j + 1];
        array[j + 1] = temp;
      } else {
        break;
      }
    }
  }
  private_sort_check(array);
}
```