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

```asm
<sc_strcat_ex>:
  endbr64
  push   %r13
  mov    %rsi,%r13
  push   %r12
  mov    %rdi,%r12
  push   %rbp
  push   %rbx
  mov    %rdx,%rbx
  sub    $0x8,%rsp
  call   <sc_strlen@plt>
  mov    %r13,%rdi
  mov    %eax,%ebp
  call   <sc_strlen@plt>
  test   %r12,%r12
  je     L25
  test   %r13,%r13
  je     L25
  mov    %eax,%edx
  test   %ebp,%ebp
  jle    L174
  lea    0x1(%r12),%rdi
  mov    %rbx,%rcx
  lea    -0x1(%rbp),%eax
  mov    %ebp,%esi
  sub    %rdi,%rcx
  cmp    $0xe,%rcx
  jbe    L68
  cmp    $0x6,%eax
  jbe    L68
  cmp    $0xe,%eax
  jbe    L96
  mov    %ebp,%ecx
  xor    %eax,%eax
  shr    $0x4,%ecx
  shl    $0x4,%rcx
  nopl   0x0(%rax)
L325:
  movdqu (%r12,%rax,1),%xmm0
  movups %xmm0,(%rbx,%rax,1)
  add    $0x10,%rax
  cmp    %rcx,%rax
  jne    L325
  mov    %ebp,%ecx
  and    $0xfffffff0,%ecx
  mov    %ecx,%eax
  cmp    %ecx,%ebp
  je     L224
  mov    %ebp,%esi
  sub    %ecx,%esi
  lea    -0x1(%rsi),%edi
  cmp    $0x6,%edi
  jbe    L290
L268:
  mov    (%r12,%rcx,1),%rdi
  mov    %rdi,(%rbx,%rcx,1)
  mov    %esi,%ecx
  and    $0xfffffff8,%ecx
  add    %ecx,%eax
  cmp    %ecx,%esi
  je     L224
L290:
  movslq %eax,%rcx
  movzbl (%r12,%rcx,1),%esi
  mov    %sil,(%rbx,%rcx,1)
  lea    0x1(%rax),%ecx
  cmp    %ecx,%ebp
  jle    L224
  movslq %ecx,%rcx
  movzbl (%r12,%rcx,1),%esi
  mov    %sil,(%rbx,%rcx,1)
  lea    0x2(%rax),%ecx
  cmp    %ecx,%ebp
  jle    L224
  movslq %ecx,%rcx
  movzbl (%r12,%rcx,1),%esi
  mov    %sil,(%rbx,%rcx,1)
  lea    0x3(%rax),%ecx
  cmp    %ecx,%ebp
  jle    L224
  movslq %ecx,%rcx
  movzbl (%r12,%rcx,1),%esi
  mov    %sil,(%rbx,%rcx,1)
  lea    0x4(%rax),%ecx
  cmp    %ecx,%ebp
  jle    L224
  movslq %ecx,%rcx
  movzbl (%r12,%rcx,1),%esi
  mov    %sil,(%rbx,%rcx,1)
  lea    0x5(%rax),%ecx
  cmp    %ecx,%ebp
  jle    L224
  movslq %ecx,%rcx
  add    $0x6,%eax
  movzbl (%r12,%rcx,1),%esi
  mov    %sil,(%rbx,%rcx,1)
  cmp    %eax,%ebp
  jle    L224
  cltq
  movzbl (%r12,%rax,1),%ecx
  mov    %cl,(%rbx,%rax,1)
L224:
  movslq %ebp,%rax
  mov    %ebp,%ecx
  add    %rbx,%rax
L208:
  add    %ebp,%edx
  cmp    %edx,%ecx
  jge    L310
  movslq %ecx,%rsi
  movslq %ebp,%r9
  mov    %edx,%r8d
  mov    %rsi,%rdi
  lea    (%rbx,%rsi,1),%r10
  sub    %ecx,%r8d
  sub    %r9,%rdi
  mov    %r10,%r11
  lea    -0x1(%r8),%eax
  lea    0x1(%r13,%rdi,1),%r12
  sub    %r12,%r11
  cmp    $0xe,%r11
  jbe    L11
  cmp    $0x6,%eax
  jbe    L11
  cmp    $0xe,%eax
  jbe    L112
  mov    %r8d,%r9d
  add    %r13,%rdi
  xor    %eax,%eax
  shr    $0x4,%r9d
  shl    $0x4,%r9
L217:
  movdqu (%rdi,%rax,1),%xmm1
  movups %xmm1,(%r10,%rax,1)
  add    $0x10,%rax
  cmp    %r9,%rax
  jne    L217
  mov    %r8d,%eax
  and    $0xfffffff0,%eax
  add    %eax,%ecx
  cmp    %eax,%r8d
  je     L212
  sub    %eax,%r8d
  lea    -0x1(%r8),%r9d
  cmp    $0x6,%r9d
  jbe    L110
L131:
  mov    (%rdi,%rax,1),%rdi
  add    %rbx,%rax
  mov    %rdi,(%rax,%rsi,1)
  mov    %r8d,%eax
  and    $0xfffffff8,%eax
  add    %eax,%ecx
  cmp    %eax,%r8d
  je     L212
L110:
  mov    %ecx,%eax
  sub    %ebp,%eax
  cltq
  movzbl 0x0(%r13,%rax,1),%esi
  movslq %ecx,%rax
  mov    %sil,(%rbx,%rax,1)
  lea    0x1(%rcx),%eax
  cmp    %eax,%edx
  jle    L212
  mov    %eax,%esi
  cltq
  sub    %ebp,%esi
  movslq %esi,%rsi
  movzbl 0x0(%r13,%rsi,1),%esi
  mov    %sil,(%rbx,%rax,1)
  lea    0x2(%rcx),%eax
  cmp    %edx,%eax
  jge    L212
  mov    %eax,%esi
  cltq
  sub    %ebp,%esi
  movslq %esi,%rsi
  movzbl 0x0(%r13,%rsi,1),%esi
  mov    %sil,(%rbx,%rax,1)
  lea    0x3(%rcx),%eax
  cmp    %eax,%edx
  jle    L212
  mov    %eax,%esi
  cltq
  sub    %ebp,%esi
  movslq %esi,%rsi
  movzbl 0x0(%r13,%rsi,1),%esi
  mov    %sil,(%rbx,%rax,1)
  lea    0x4(%rcx),%eax
  cmp    %edx,%eax
  jge    L212
  mov    %eax,%esi
  cltq
  sub    %ebp,%esi
  movslq %esi,%rsi
  movzbl 0x0(%r13,%rsi,1),%esi
  mov    %sil,(%rbx,%rax,1)
  lea    0x5(%rcx),%eax
  cmp    %eax,%edx
  jle    L212
  mov    %eax,%esi
  add    $0x6,%ecx
  cltq
  sub    %ebp,%esi
  movslq %esi,%rsi
  movzbl 0x0(%r13,%rsi,1),%esi
  mov    %sil,(%rbx,%rax,1)
  cmp    %ecx,%edx
  jle    L212
  mov    %ecx,%eax
  movslq %ecx,%rcx
  sub    %ebp,%eax
  cltq
  movzbl 0x0(%r13,%rax,1),%eax
  mov    %al,(%rbx,%rcx,1)
L212:
  movslq %edx,%rdx
  lea    (%rbx,%rdx,1),%rax
L310:
  movb   $0x0,(%rax)
L25:
  add    $0x8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
  nopl   0x0(%rax)
L68:
  mov    %ebp,%esi
  xor    %eax,%eax
  nopl   0x0(%rax)
L350:
  movzbl (%r12,%rax,1),%ecx
  mov    %cl,(%rbx,%rax,1)
  add    $0x1,%rax
  cmp    %rax,%rsi
  jne    L350
  jmp    L224
  cs nopw 0x0(%rax,%rax,1)
L11:
  mov    %r13,%rax
  sub    %r9,%rax
  cs nopw 0x0(%rax,%rax,1)
L262:
  movzbl (%rax,%rsi,1),%ecx
  mov    %cl,(%rbx,%rsi,1)
  add    $0x1,%rsi
  cmp    %esi,%edx
  jg     L262
  jmp    L212
  nopl   0x0(%rax)
L174:
  mov    %rbx,%rax
  xor    %ecx,%ecx
  jmp    L208
L112:
  xor    %eax,%eax
  add    %r13,%rdi
  jmp    L131
L96:
  xor    %ecx,%ecx
  xor    %eax,%eax
  jmp    L268
```

assistant: ```c
void sc_strcat_ex(char *A, char *B, char *C) {
  int walker = 0;
  int length_of_A = sc_strlen(A);
  int length_of_B = sc_strlen(B);
  if (!A || !B)
    return;
  for (walker = 0; walker < length_of_A; walker++)
    C[walker] = A[walker];
  for (; walker < length_of_A + length_of_B; walker++)
    C[walker] = B[walker - length_of_A];
  C[walker] = '\0';
}
```