user: What is the c source code of the assembly code below?

```asm
<dxsmooth>:
  endbr64
  push   %rbx
  mov    %rsi,%r9
  mov    (%rsi),%ecx
  test   %ecx,%ecx
  jle    L158
  mov    %rdi,%rdx
  mov    $0x0,%eax
  mov    $0x0,%ebx
  jmp    L10
L80:
  mov    %ebx,%ecx
  jmp    L156
L377:
  cmp    $0x2,%r8d
  jne    L381
  cmp    $0x1,%ecx
  je     L54
L381:
  cmp    $0x3,%r8d
  jg     L54
L150:
  cmp    $0x5a,%r10d
  setne  %cl
  movzbl %cl,%ecx
  lea    0x5b(%rcx,%rcx,1),%ecx
  mov    %ecx,0x280(%rdi)
L151:
  add    $0x1,%eax
  mov    (%r9),%ecx
  add    $0x4,%rdx
  cmp    %eax,%ecx
  jle    L158
L10:
  mov    %rdx,%r10
  mov    0x280(%rdx),%esi
  mov    (%rdx),%r8d
  test   %eax,%eax
  je     L139
  mov    0x27c(%rdx),%r11d
  sub    $0x1,%ecx
  cmp    %ecx,%eax
  je     L80
  lea    0x1(%rax),%ecx
  movslq %ecx,%rcx
  mov    0x280(%rdi,%rcx,4),%ecx
L156:
  cmp    $0x61,%esi
  je     L402
  cmp    $0x60,%esi
  je     L106
  cmp    $0x5a,%esi
  je     L146
  cmp    $0x5c,%esi
  jne    L151
  cmp    $0x1,%r8d
  jle    L35
  movl   $0x5d,0x280(%r10)
  jmp    L151
L44:
  movl   $0x5b,0x280(%rdi)
  jmp    L151
L402:
  cmp    $0x3,%r8d
  jle    L106
  movl   $0x5f,0x280(%r10)
  jmp    L151
L106:
  lea    -0x5b(%r11),%esi
  cmp    $0x1,%esi
  jbe    L202
  cmp    $0x5d,%r11d
  je     L305
  cmp    $0x5a,%r11d
  je     L305
  cmp    $0x5a,%ecx
  setne  %cl
  movzbl %cl,%ecx
  lea    0x5b(%rcx,%rcx,1),%ecx
  mov    %ecx,0x280(%r10)
  jmp    L151
L202:
  movl   $0x5b,0x280(%r10)
  jmp    L151
L305:
  movl   $0x5d,0x280(%r10)
  jmp    L151
L146:
  cmp    $0x1,%r8d
  jle    L55
  movl   $0x5b,0x280(%r10)
  jmp    L151
L55:
  lea    -0x5b(%r11),%ecx
  cmp    $0x1,%ecx
  jbe    L170
  cmp    $0x5f,%r11d
  jne    L151
  movl   $0x5b,0x280(%r10)
  jmp    L151
L170:
  movl   $0x5b,0x280(%r10)
  jmp    L151
L35:
  cmp    $0x5d,%r11d
  je     L191
  cmp    $0x5a,%r11d
  je     L191
  cmp    $0x5f,%r11d
  jne    L151
  movl   $0x5d,0x280(%r10)
  jmp    L151
L191:
  movl   $0x5d,0x280(%r10)
  jmp    L151
L158:
  mov    %r9,%rsi
  call   <grwp@plt>
  pop    %rbx
  ret
L54:
  movl   $0x5f,0x280(%rdi)
  jmp    L151
L139:
  mov    %eax,%r10d
  cmp    $0x1,%ecx
  je     L275
  lea    0x1(%rax),%r10d
  movslq %r10d,%r10
  mov    0x280(%rdi,%r10,4),%r10d
L275:
  cmp    $0x61,%esi
  je     L377
  cmp    $0x60,%esi
  je     L150
  cmp    $0x5a,%esi
  je     L44
  cmp    $0x5c,%esi
  jne    L151
  movl   $0x5d,0x280(%rdi)
  jmp    L151
```

assistant: ```c
__attribute__((visibility("hidden"))) void dxsmooth(int list[2][160], int *indexliste) {
  int i, last, next;
  for (i = 0; i < *(indexliste); i++) {
    int current = list[1][i];
    int length = list[0][i];
    if (i != 0) {
      last = list[1][i - 1];
    } else {
      last = 0;
    }
    if (i != *(indexliste)-1) {
      next = list[1][i + 1];
    } else {
      next = 0;
    }
    if (i == 0) {
      if (current == 97) {
        if ((*(indexliste) == 1) && (length == 2)) {
          list[1][i] = 95;
          current = 95;
        } else if (length >= 4) {
          list[1][i] = 95;
          current = 95;
        } else {
          current = 96;
        }
      }
      if (current == 96) {
        if (next == 90) {
          list[1][i] = 91;
        } else {
          list[1][i] = 93;
        }
      } else if (current == 90) {
        list[1][i] = 91;
      } else if (current == 92) {
        list[1][i] = 93;
      }
    } else {
      if (current == 97) {
        if (length >= 4) {
          list[1][i] = 95;
          current = 95;
        } else {
          current = 96;
        }
      }
      if (current == 96) {
        if (last == 91 || last == 92) {
          list[1][i] = 91;
        } else if (last == 93 || last == 90) {
          list[1][i] = 93;
        } else if (next == 90) {
          list[1][i] = 91;
        } else {
          list[1][i] = 93;
        }
      } else if (current == 90) {
        if (length > 1) {
          list[1][i] = 91;
        } else if (last == 91 || last == 92) {
          list[1][i] = 91;
        } else if (last == 95) {
          list[1][i] = 91;
        }
      } else if (current == 92) {
        if (length > 1) {
          list[1][i] = 93;
        } else if (last == 93 || last == 90) {
          list[1][i] = 93;
        } else if (last == 95) {
          list[1][i] = 93;
        }
      }
    }
  }
  grwp(list, indexliste);
}
```