user: Please show me the C implementation that matches the assembly code listed below:

```asm
<expand_fascn>:
  endbr64
  push   %r14
  push   %r13
  xor    %r13d,%r13d
  push   %r12
  xor    %r12d,%r12d
  push   %rbp
  mov    %rsi,%rbp
  push   %rbx
  mov    %rdi,%rbx
  xor    %edi,%edi
  jmp    L111
  nop
L60:
  add    %edi,%edi
L192:
  mov    %edi,%eax
  xor    $0x1,%eax
  test   %r14b,%r14b
  cmovs  %eax,%edi
  movsbl %r14b,%eax
  lea    (%rax,%rax,1),%r14d
  lea    0x2(%r12),%eax
  imul   $0xcccccccd,%eax,%eax
  movsbl %dil,%edi
  cmp    $0x33333333,%eax
  jbe    L153
  add    %edi,%edi
L217:
  mov    %edi,%eax
  xor    $0x1,%eax
  test   %r14b,%r14b
  movsbl %r14b,%r14d
  cmovs  %eax,%edi
  lea    0x3(%r12),%eax
  add    %r14d,%r14d
  imul   $0xcccccccd,%eax,%eax
  movsbl %dil,%edi
  cmp    $0x33333333,%eax
  jbe    L71
  add    %edi,%edi
L203:
  mov    %edi,%eax
  xor    $0x1,%eax
  test   %r14b,%r14b
  movsbl %r14b,%r14d
  cmovs  %eax,%edi
  lea    0x4(%r12),%eax
  add    %r14d,%r14d
  imul   $0xcccccccd,%eax,%eax
  movsbl %dil,%edi
  cmp    $0x33333333,%eax
  jbe    L105
  add    %edi,%edi
L112:
  mov    %edi,%eax
  xor    $0x1,%eax
  test   %r14b,%r14b
  movsbl %r14b,%r14d
  cmovs  %eax,%edi
  lea    0x5(%r12),%eax
  add    %r14d,%r14d
  imul   $0xcccccccd,%eax,%eax
  movsbl %dil,%edi
  cmp    $0x33333333,%eax
  jbe    L248
  add    %edi,%edi
L96:
  mov    %edi,%eax
  xor    $0x1,%eax
  test   %r14b,%r14b
  movsbl %r14b,%r14d
  cmovs  %eax,%edi
  lea    0x6(%r12),%eax
  add    %r14d,%r14d
  imul   $0xcccccccd,%eax,%eax
  movsbl %dil,%edi
  cmp    $0x33333333,%eax
  jbe    L122
  add    %edi,%edi
L164:
  mov    %edi,%eax
  xor    $0x1,%eax
  test   %r14b,%r14b
  movsbl %r14b,%r14d
  cmovs  %eax,%edi
  lea    0x7(%r12),%eax
  add    %r14d,%r14d
  imul   $0xcccccccd,%eax,%eax
  movsbl %dil,%edi
  cmp    $0x33333333,%eax
  jbe    L54
  add    %edi,%edi
L13:
  mov    %edi,%eax
  xor    $0x1,%eax
  test   %r14b,%r14b
  cmovs  %eax,%edi
  add    $0x8,%r12d
  imul   $0xcccccccd,%r12d,%eax
  movsbl %dil,%edi
  cmp    $0x33333333,%eax
  jbe    L21
  add    %edi,%edi
  add    $0x1,%rbx
  cmp    $0xc8,%r12d
  je     L165
L111:
  movsbl (%rbx),%eax
  mov    %edi,%edx
  xor    $0x1,%edx
  lea    (%rax,%rax,1),%r14d
  test   %al,%al
  lea    0x1(%r12),%eax
  cmovs  %edx,%edi
  imul   $0xcccccccd,%eax,%eax
  movsbl %dil,%edi
  cmp    $0x33333333,%eax
  ja     L60
  xor    %eax,%eax
  call   <convertCharacter@plt>
  cmp    $0x5a,%al
  je     L87
  movslq %r13d,%rdx
  xor    %edi,%edi
  add    $0x1,%r13d
  mov    %al,0x0(%rbp,%rdx,1)
  jmp    L192
  nopl   0x0(%rax,%rax,1)
L153:
  xor    %eax,%eax
  call   <convertCharacter@plt>
  cmp    $0x5a,%al
  je     L87
  movslq %r13d,%rdx
  xor    %edi,%edi
  add    $0x1,%r13d
  mov    %al,0x0(%rbp,%rdx,1)
  jmp    L217
  nopl   0x0(%rax)
L71:
  xor    %eax,%eax
  call   <convertCharacter@plt>
  cmp    $0x5a,%al
  je     L87
  movslq %r13d,%rdx
  xor    %edi,%edi
  add    $0x1,%r13d
  mov    %al,0x0(%rbp,%rdx,1)
  jmp    L203
  nopl   0x0(%rax)
L105:
  xor    %eax,%eax
  call   <convertCharacter@plt>
  cmp    $0x5a,%al
  je     L87
  movslq %r13d,%rdx
  xor    %edi,%edi
  add    $0x1,%r13d
  mov    %al,0x0(%rbp,%rdx,1)
  jmp    L112
  nopl   0x0(%rax)
L248:
  xor    %eax,%eax
  call   <convertCharacter@plt>
  cmp    $0x5a,%al
  je     L87
  movslq %r13d,%rdx
  xor    %edi,%edi
  add    $0x1,%r13d
  mov    %al,0x0(%rbp,%rdx,1)
  jmp    L96
  nopl   0x0(%rax)
L122:
  xor    %eax,%eax
  call   <convertCharacter@plt>
  cmp    $0x5a,%al
  je     L87
  movslq %r13d,%rdx
  xor    %edi,%edi
  add    $0x1,%r13d
  mov    %al,0x0(%rbp,%rdx,1)
  jmp    L164
  nopl   (%rax)
L54:
  xor    %eax,%eax
  call   <convertCharacter@plt>
  cmp    $0x5a,%al
  je     L87
  movslq %r13d,%rdx
  xor    %edi,%edi
  add    $0x1,%r13d
  mov    %al,0x0(%rbp,%rdx,1)
  jmp    L13
  nopl   (%rax)
L21:
  xor    %eax,%eax
  call   <convertCharacter@plt>
  cmp    $0x5a,%al
  je     L87
  movslq %r13d,%rdx
  xor    %edi,%edi
  add    $0x1,%r13d
  add    $0x1,%rbx
  mov    %al,0x0(%rbp,%rdx,1)
  cmp    $0xc8,%r12d
  jne    L111
L165:
  pop    %rbx
  xor    %eax,%eax
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
  nopl   0x0(%rax)
L87:
  pop    %rbx
  mov    $0x1,%eax
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
```

assistant: ```c
int expand_fascn(fascn25, fascn40)
char fascn25[25], fascn40[40];
{
  int byte_count, bit_count, bit_index, expanded_index;
  char temp, temp2 = 0;
  for (bit_count = 0, byte_count = 0, expanded_index = 0; byte_count < 25; byte_count++) {
    temp = fascn25[byte_count];
    for (bit_index = 0; bit_index < 8; bit_index++) {
      if (0x80 & temp) {
        temp2 ^= 0x01;
      }
      temp <<= 1;
      bit_count += 1;
      if ((bit_count % 5) == 0) {
        temp2 = convertCharacter(temp2);
        if (temp2 == 'Z') {
          return (1);
        }
        fascn40[expanded_index] = temp2;
        expanded_index += 1;
        temp2 = 0;
      }
      temp2 <<= 1;
    }
  }
  return (0);
}
```