user: Translate the below assembly code into C programming language:

```asm
<changeYourPassword>:
  endbr64
  push   %r15
  lea    D28(%rip),%r15
  push   %r14
  mov    %rdi,%r14
  push   %r13
  mov    %rsi,%r13
  push   %r12
  push   %rbp
  push   %rbx
  xor    %ebx,%ebx
  sub    $0x18,%rsp
  nopl   0x0(%rax)
L108:
  mov    %r15,%rdi
  call   <printf@plt>
  mov    $0x1,%edi
  call   <stringInput@plt>
  mov    %r13,%rsi
  mov    %r14,%rdi
  mov    %rax,%rdx
  mov    %rax,%rbp
  call   <searchForUser@plt>
  test   %rax,%rax
  jne    L28
  cmp    $0x2,%ebx
  je     L20
  lea    D67(%rip),%rdi
  add    $0x1,%ebx
  call   <printf@plt>
  mov    %rbp,%rdi
  call   <free@plt>
  mov    $0x2,%edi
  call   <sleep@plt>
  jmp    L108
  nopl   0x0(%rax)
L28:
  lea    D88(%rip),%rdi
  call   <printf@plt>
  mov    $0x1,%edi
  call   <stringInput@plt>
  mov    %rax,%rdi
  mov    %rax,%r12
  call   <strlen@plt>
  test   %rax,%rax
  jne    L32
  lea    D62(%rip),%rdi
  add    $0x1,%ebx
  call   <printf@plt>
L2:
  mov    %r12,%rdi
  call   <free@plt>
  mov    %rbp,%rdi
  call   <free@plt>
  mov    $0x2,%edi
  call   <sleep@plt>
  cmp    $0x2,%ebx
  jle    L108
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopw   0x0(%rax,%rax,1)
L20:
  lea    D11(%rip),%rdi
  call   <printf@plt>
  mov    %rbp,%rdi
  call   <free@plt>
  add    $0x18,%rsp
  mov    $0x2,%edi
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  jmp    1130 <sleep@plt>
  nopl   0x0(%rax)
L32:
  lea    D80(%rip),%rdi
  call   <printf@plt>
  mov    $0x1,%edi
  call   <stringInput@plt>
  mov    %rax,%rdi
  mov    %rax,0x8(%rsp)
  call   <strlen@plt>
  mov    0x8(%rsp),%r8
  test   %rax,%rax
  jne    L118
  lea    D62(%rip),%rdi
  add    $0x1,%ebx
  call   <printf@plt>
  mov    0x8(%rsp),%r8
L36:
  mov    %r8,%rdi
  call   <free@plt>
  jmp    L2
  xchg   %ax,%ax
L118:
  mov    %r8,%rsi
  mov    %r12,%rdi
  mov    %r8,0x8(%rsp)
  call   <strcmp@plt>
  mov    0x8(%rsp),%r8
  test   %rax,%rax
  je     L8
  mov    %r8,0x8(%rsp)
  cmp    $0x2,%ebx
  je     L59
  lea    D52(%rip),%rdi
  add    $0x1,%ebx
  call   <printf@plt>
  mov    0x8(%rsp),%r8
  jmp    L36
  nopw   0x0(%rax,%rax,1)
L8:
  mov    %r12,%rdx
  mov    %r13,%rsi
  mov    %r14,%rdi
  mov    $0x4,%ebx
  call   <changePassword@plt>
  lea    D9(%rip),%rdi
  call   <printf@plt>
  mov    0x8(%rsp),%r8
  jmp    L36
  cs nopw 0x0(%rax,%rax,1)
L59:
  lea    D11(%rip),%rdi
  mov    $0x3,%ebx
  call   <printf@plt>
  mov    0x8(%rsp),%r8
  jmp    L36
```

tool_calls: name: disassemble_data
arguments: tag: D28
datatype: string
name: disassemble_data
arguments: tag: D67
datatype: string
name: disassemble_data
arguments: tag: D88
datatype: string
name: disassemble_data
arguments: tag: D62
datatype: string
name: disassemble_data
arguments: tag: D11
datatype: string
name: disassemble_data
arguments: tag: D80
datatype: string
name: disassemble_data
arguments: tag: D52
datatype: string
name: disassemble_data
arguments: tag: D9
datatype: string

tool: D28: Current password: 

tool: D67: 
Incorrect password. Try again.


tool: D88: New password: 

tool: D62: 
Invalid password entered. Please try again.


tool: D11: 
Too many tries used. Exiting program.


tool: D80: Re-enter new password: 

tool: D52: 
Non-equal inputs detected. Please try again.


tool: D9: 
Password change successful. Exiting program.


assistant: ```c
void changeYourPassword(sqlite3 *db, char *username) {
  char *password;
  char *newPassword, *newPassword2;
  for (int i = 0; i < 3; i++) {
    printf("Current password: ");
    password = stringInput(1);
    if (searchForUser(db, username, password)) {
      printf("New password: ");
      newPassword = stringInput(1);
      if (strlen(newPassword) <= 0) {
        printf("\nInvalid password entered. Please try again.\n");
      } else {
        printf("Re-enter new password: ");
        newPassword2 = stringInput(1);
        if (strlen(newPassword2) <= 0) {
          printf("\nInvalid password entered. Please try again.\n");
        } else {
          if (strcmp(newPassword, newPassword2) == 0) {
            changePassword(db, username, newPassword);
            printf("\nPassword change successful. Exiting program.\n");
            i = 3;
          } else if (i == 2) {
            printf("\nToo many tries used. Exiting program.\n");
          } else {
            printf("\nNon-equal inputs detected. Please try again.\n");
          }
        }
        free(newPassword2);
      }
      free(newPassword);
    } else if (i == 2) {
      printf("\nToo many tries used. Exiting program.\n");
    } else {
      printf("\nIncorrect password. Try again.\n");
    }
    free(password);
    sleep(2);
  }
}
```