user: 请将以下的汇编代码转换成C语言代码：

```asm
<aesEncrypt>:
  endbr64
  push   %r15
  mov    %esi,%r15d
  push   %r14
  push   %r13
  push   %r12
  mov    %rdi,%r12
  push   %rbp
  mov    %rdx,%rbp
  mov    $0x10,%edx
  push   %rbx
  mov    %ecx,%ebx
  sub    $0x1c8,%rsp
  mov    %esi,0x4(%rsp)
  lea    0x180(%rsp),%r13
  mov    %r8,%rsi
  mov    %r13,%rdi
  mov    %fs:0x28,%rax
  mov    %rax,0x1b8(%rsp)
  xor    %eax,%eax
  call   <memcpy@plt>
  lea    0x20(%rsp),%r11
  mov    $0x80,%edx
  mov    %r13,%rsi
  mov    %r11,%rdi
  mov    %r11,0x8(%rsp)
  call   <aesSetupEncrypt@plt>
  test   %ebx,%ebx
  je     L163
  mov    0x8(%rsp),%r11
  lea    0x10(%r12),%r8
  mov    %r15d,%r13d
  mov    %eax,%r10d
  lea    0x190(%rsp),%r12
  lea    0x1a0(%rsp),%r15
L113:
  lea    -0x10(%r8),%r14
  xor    %eax,%eax
  nopw   0x0(%rax,%rax,1)
L161:
  test   %ebx,%ebx
  je     L42
  movzbl 0x0(%rbp),%edx
  add    $0x1,%rbp
  sub    $0x1,%ebx
  mov    %dl,(%r12,%rax,1)
  add    $0x1,%rax
  cmp    $0x10,%rax
  jne    L161
  mov    %r15,%rcx
  mov    %r12,%rdx
  mov    %r10d,%esi
  mov    %r11,%rdi
  mov    %r8,0x18(%rsp)
  mov    %r10d,0x10(%rsp)
  mov    %r11,0x8(%rsp)
  call   <aesDoEncrypt@plt>
  cmp    $0xf,%r13d
  jle    L70
  mov    %r14,%rdi
  mov    $0x10,%edx
  lea    -0x10(%r13),%r14d
  mov    %r15,%rsi
  call   <memcpy@plt>
  test   %ebx,%ebx
  mov    0x8(%rsp),%r11
  mov    0x10(%rsp),%r10d
  mov    0x18(%rsp),%r8
  jne    L49
  mov    $0x10,%edx
  mov    $0x10,%esi
  mov    %r12,%rdi
  mov    %r11,0x10(%rsp)
  mov    %r10d,0x8(%rsp)
  call   <memset@plt>
  mov    0x8(%rsp),%esi
  mov    %r15,%rcx
  mov    %r12,%rdx
  mov    0x10(%rsp),%rdi
  call   <aesDoEncrypt@plt>
  cmp    $0xf,%r14d
  jle    L70
  mov    0x18(%rsp),%rdi
  mov    $0x10,%edx
  mov    %r15,%rsi
  sub    $0x20,%r13d
  call   <memcpy@plt>
  mov    0x4(%rsp),%r14d
  sub    %r13d,%r14d
L147:
  mov    0x1b8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L160
  add    $0x1c8,%rsp
  mov    %r14d,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopw   0x0(%rax,%rax,1)
L42:
  mov    $0x10,%edx
  mov    $0x10,%ecx
  lea    (%r12,%rax,1),%rsi
  sub    %eax,%edx
  sub    %eax,%ecx
  movzbl %dl,%eax
  movabs $0x101010101010101,%rdx
  imul   %rdx,%rax
  cmp    $0x8,%ecx
  jae    L28
  test   $0x4,%cl
  jne    L134
  test   %ecx,%ecx
  je     L63
  mov    %al,(%rsi)
  test   $0x2,%cl
  jne    L22
L63:
  mov    %r15,%rcx
  mov    %r12,%rdx
  mov    %r10d,%esi
  mov    %r11,%rdi
  call   <aesDoEncrypt@plt>
  cmp    $0xf,%r13d
  jle    L70
  mov    %r14,%rdi
  mov    $0x10,%edx
  mov    %r15,%rsi
  sub    $0x10,%r13d
  call   <memcpy@plt>
  mov    0x4(%rsp),%r14d
  sub    %r13d,%r14d
  jmp    L147
  nopl   0x0(%rax,%rax,1)
L28:
  lea    0x8(%rsi),%rdi
  mov    %ecx,%edx
  mov    %rax,(%rsi)
  and    $0xfffffffffffffff8,%rdi
  mov    %rax,-0x8(%rsi,%rdx,1)
  sub    %rdi,%rsi
  add    %esi,%ecx
  and    $0xfffffff8,%ecx
  cmp    $0x8,%ecx
  jb     L63
  and    $0xfffffff8,%ecx
  xor    %edx,%edx
L29:
  mov    %edx,%esi
  add    $0x8,%edx
  mov    %rax,(%rdi,%rsi,1)
  cmp    %ecx,%edx
  jb     L29
  jmp    L63
L49:
  add    $0x10,%r8
  mov    %r14d,%r13d
  jmp    L113
  nop
L70:
  mov    $0xffffffff,%r14d
  jmp    L147
L134:
  mov    %eax,(%rsi)
  mov    %eax,-0x4(%rsi,%rcx,1)
  jmp    L63
L22:
  mov    %ax,-0x2(%rsi,%rcx,1)
  jmp    L63
L163:
  xor    %r14d,%r14d
  jmp    L147
L160:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
int aesEncrypt(unsigned char *output, int outlen, unsigned char *input, int inlen, unsigned char *password) {
  unsigned long rk[((128) / 8 + 28)];
  unsigned char key[((128) / 8)];
  int nrounds;
  int totalout = outlen;
  memcpy(key, password, 16);
  nrounds = aesSetupEncrypt(rk, key, 128);
  while (inlen) {
    unsigned char plaintext[16];
    unsigned char ciphertext[16];
    unsigned int j;
    for (j = 0; j < 16; j++) {
      if (inlen) {
        plaintext[j] = *input++;
        inlen--;
      } else
        break;
    }
    char c = 16 - j;
    unsigned int orig_block_size = j;
    for (; j < 16; j++)
      plaintext[j] = c;
    aesDoEncrypt(rk, nrounds, plaintext, ciphertext);
    if (outlen < 16)
      return -1;
    memcpy(output, ciphertext, 16);
    output += 16;
    outlen -= 16;
    if (orig_block_size == 16 && inlen == 0) {
      memset(plaintext, 16, 16);
      aesDoEncrypt(rk, nrounds, plaintext, ciphertext);
      if (outlen < 16)
        return -1;
      memcpy(output, ciphertext, 16);
      output += 16;
      outlen -= 16;
    }
  }
  return totalout - outlen;
}
```