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

```asm
<main>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x158,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x148(%rsp)
  xor    %eax,%eax
  movl   $0xffffffff,0x2c(%rsp)
  movl   $0xffffffff,0x30(%rsp)
  lea    D193(%rip),%rbx
  mov    %rbx,%rdi
  call   <puts@plt>
  lea    D492(%rip),%rdi
  call   <puts@plt>
  mov    %rbx,%rdi
  call   <puts@plt>
  mov    $0x2,%edi
  mov    $0x0,%eax
  call   <sleep@plt>
  movb   $0x0,0x17(%rsp)
  movb   $0x0,0x16(%rsp)
  movb   $0x0,0x15(%rsp)
  movl   $0x0,0xc(%rsp)
  movl   $0x0,0x1c(%rsp)
  movl   $0x0,0x18(%rsp)
  mov    %rbx,%r14
  lea    D378(%rip),%r15
L483:
  mov    $0x4,%edi
  mov    $0x0,%eax
  call   <sleep@plt>
  mov    $0x0,%eax
  call   <clrscr@plt>
  mov    %r14,%rdi
  call   <puts@plt>
  movl   $0xffffffff,0x2c(%rsp)
  lea    D415(%rip),%r12
  lea    D307(%rip),%rbp
  lea    D144(%rip),%rbx
L85:
  mov    %r15,%rdi
  call   <puts@plt>
  mov    %r12,%rdi
  call   <puts@plt>
  mov    %rbp,%rdi
  call   <puts@plt>
  lea    0x2c(%rsp),%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  mov    0x2c(%rsp),%r13d
  test   %r13d,%r13d
  jle    L85
  cmp    $0x1,%r13d
  je     L1038
  cmp    $0x2,%r13d
  je     L581
  cmp    $0x3,%r13d
  jne    L483
  lea    D193(%rip),%rdi
  call   <puts@plt>
  lea    D215(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D364(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D400(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  cmpb   $0x1,0x15(%rsp)
  je     L502
L319:
  cmpb   $0x1,0x16(%rsp)
  je     L954
L474:
  cmpb   $0x1,0x17(%rsp)
  je     L77
L720:
  lea    D400(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    0x148(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L583
  add    $0x158,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L1038:
  mov    %r14,%rdi
  call   <puts@plt>
  lea    D436(%rip),%rdi
  call   <puts@plt>
  mov    %r14,%rdi
  call   <puts@plt>
  lea    D152(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x0,%eax
  call   <getchar@plt>
  mov    $0x0,%ebx
  jmp    L91
L503:
  mov    %al,0x110(%rsp,%rbx,1)
  add    $0x1,%rbx
L91:
  mov    %ebx,%ebp
  mov    $0x0,%eax
  call   <getchar@plt>
  cmp    $0x13,%ebx
  jg     L711
  cmp    $0xa,%al
  jne    L503
L711:
  movslq %ebp,%rax
  movb   $0x0,0x110(%rsp,%rax,1)
  cmp    $0x13,%ebp
  jg     L549
L258:
  lea    D232(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x0,%ebx
  jmp    L610
L549:
  mov    $0x0,%eax
  call   <getchar@plt>
  cmp    $0xa,%al
  jne    L549
  jmp    L258
L126:
  mov    %al,0x130(%rsp,%rbx,1)
  add    $0x1,%rbx
L610:
  mov    %ebx,%ebp
  mov    $0x0,%eax
  call   <getchar@plt>
  cmp    $0x13,%ebx
  jg     L749
  cmp    $0xa,%al
  jne    L126
L749:
  movslq %ebp,%rax
  movb   $0x0,0x130(%rsp,%rax,1)
  cmp    $0x13,%ebp
  jg     L923
L432:
  lea    D197(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    0x4a(%rsp),%rbp
  lea    0x50(%rsp),%r12
L376:
  mov    $0x0,%eax
  call   <getchar@plt>
  mov    %eax,%ebx
  cmp    $0xa,%al
  je     L376
  movsbl %al,%edi
  call   <isalnum@plt>
  test   %eax,%eax
  je     L376
  mov    %bl,0x0(%rbp)
  add    $0x1,%rbp
  cmp    %rbp,%r12
  jne    L376
  movb   $0x0,0x136(%rsp)
L982:
  mov    $0x0,%eax
  call   <getchar@plt>
  cmp    $0xa,%al
  jne    L982
  lea    0x50(%rsp),%rsi
  lea    0x110(%rsp),%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L288
  lea    0x70(%rsp),%rsi
  lea    0x130(%rsp),%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L288
  lea    0x38(%rsp),%rsi
  lea    0x4a(%rsp),%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L600
L288:
  lea    0x90(%rsp),%rsi
  lea    0x110(%rsp),%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L416
  lea    0xb0(%rsp),%rsi
  lea    0x130(%rsp),%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L416
  lea    0x3e(%rsp),%rsi
  lea    0x4a(%rsp),%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L980
L416:
  lea    0xd0(%rsp),%rsi
  lea    0x110(%rsp),%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L510
  lea    0xf0(%rsp),%rsi
  lea    0x130(%rsp),%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L510
  lea    0x44(%rsp),%rsi
  lea    0x4a(%rsp),%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L632
L510:
  lea    D57(%rip),%rdi
  call   <puts@plt>
L287:
  mov    %r14,%rdi
  call   <puts@plt>
  jmp    L483
L923:
  mov    $0x0,%eax
  call   <getchar@plt>
  cmp    $0xa,%al
  jne    L923
  jmp    L432
L920:
  movl   $0xffffffff,0x28(%rsp)
  lea    D4(%rip),%r12
  lea    0x28(%rsp),%rbp
  lea    D144(%rip),%rbx
L436:
  mov    %r14,%rdi
  call   <puts@plt>
  mov    %r12,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    %rbp,%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  mov    0x28(%rsp),%eax
  test   %eax,%eax
  js     L436
  cmpl   $0x1,0x10(%rsp)
  je     L205
  cmpl   $0x2,0x10(%rsp)
  je     L991
  add    %eax,0xc(%rsp)
  jmp    L745
L205:
  add    %eax,0x18(%rsp)
  jmp    L745
L991:
  add    %eax,0x1c(%rsp)
  jmp    L745
L343:
  movl   $0xffffffff,0x28(%rsp)
  lea    D10(%rip),%rbp
  lea    0x28(%rsp),%rbx
  lea    D144(%rip),%r12
L413:
  mov    %r14,%rdi
  call   <puts@plt>
  mov    %rbp,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    %rbx,%rsi
  mov    %r12,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  mov    0x28(%rsp),%eax
  test   %eax,%eax
  js     L413
  mov    %eax,%edx
  neg    %edx
  cmovs  %eax,%edx
  cmp    %edx,0x8(%rsp)
  jl     L413
  cmpl   $0x1,0x10(%rsp)
  je     L133
  cmpl   $0x2,0x10(%rsp)
  je     L539
  sub    %eax,0xc(%rsp)
  jmp    L745
L133:
  sub    %eax,0x18(%rsp)
  jmp    L745
L539:
  sub    %eax,0x1c(%rsp)
  jmp    L745
L829:
  cmpl   $0x1,0x10(%rsp)
  je     L854
  cmpl   $0x2,0x10(%rsp)
  je     L142
  mov    0x28(%rsp),%ecx
  sub    %ecx,0xc(%rsp)
  mov    0xc(%rsp),%eax
  mov    %eax,%esi
  lea    D456(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L796
L854:
  mov    0x28(%rsp),%ecx
  sub    %ecx,0x18(%rsp)
  mov    0x18(%rsp),%eax
  mov    %eax,%esi
  lea    D270(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L796:
  mov    0x34(%rsp),%eax
  cmp    $0x1,%eax
  je     L189
  cmp    $0x2,%eax
  je     L699
  cmp    $0x3,%eax
  jne    L745
  mov    0xc(%rsp),%esi
  add    0x28(%rsp),%esi
  mov    %esi,0xc(%rsp)
  lea    D456(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L745
L142:
  mov    0x28(%rsp),%ecx
  sub    %ecx,0x1c(%rsp)
  mov    0x1c(%rsp),%eax
  mov    %eax,%esi
  lea    D90(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L796
L189:
  mov    0x18(%rsp),%esi
  add    0x28(%rsp),%esi
  mov    %esi,0x18(%rsp)
  lea    D270(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L745
L699:
  mov    0x1c(%rsp),%esi
  add    0x28(%rsp),%esi
  mov    %esi,0x1c(%rsp)
  lea    D90(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L745
L581:
  mov    %r14,%rdi
  call   <puts@plt>
  lea    D222(%rip),%rdi
  call   <puts@plt>
  mov    %r14,%rdi
  call   <puts@plt>
  lea    D152(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x0,%eax
  call   <getchar@plt>
  mov    $0x0,%ebx
  jmp    L356
L198:
  mov    %al,0x110(%rsp,%rbx,1)
  add    $0x1,%rbx
L356:
  mov    %ebx,%ebp
  mov    $0x0,%eax
  call   <getchar@plt>
  cmp    $0x13,%ebx
  jg     L241
  cmp    $0xa,%al
  jne    L198
L241:
  movslq %ebp,%rax
  movb   $0x0,0x110(%rsp,%rax,1)
  cmp    $0x13,%ebp
  jg     L393
L771:
  lea    D232(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x0,%ebx
  jmp    L558
L393:
  mov    $0x0,%eax
  call   <getchar@plt>
  cmp    $0xa,%al
  jne    L393
  jmp    L771
L640:
  mov    %al,0x130(%rsp,%rbx,1)
  add    $0x1,%rbx
L558:
  mov    %ebx,%ebp
  mov    $0x0,%eax
  call   <getchar@plt>
  cmp    $0x13,%ebx
  jg     L185
  cmp    $0xa,%al
  jne    L640
L185:
  movslq %ebp,%rax
  movb   $0x0,0x130(%rsp,%rax,1)
  cmp    $0x13,%ebp
  jg     L694
L725:
  lea    D197(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    0x4a(%rsp),%rbx
  lea    0x50(%rsp),%rbp
L421:
  mov    $0x0,%eax
  call   <getchar@plt>
  mov    %eax,%r12d
  cmp    $0xa,%al
  je     L421
  movsbl %al,%edi
  call   <isalnum@plt>
  test   %eax,%eax
  je     L421
  mov    %r12b,(%rbx)
  add    $0x1,%rbx
  cmp    %rbp,%rbx
  jne    L421
  movb   $0x0,0x136(%rsp)
L713:
  mov    $0x0,%eax
  call   <getchar@plt>
  cmp    $0xa,%al
  jne    L713
  cmpb   $0x0,0x15(%rsp)
  je     L895
  cmpb   $0x0,0x16(%rsp)
  je     L281
  cmpb   $0x0,0x17(%rsp)
  jne    L427
  lea    0x110(%rsp),%rsi
  lea    0xd0(%rsp),%rdi
  call   <strcpy@plt>
  lea    0x130(%rsp),%rsi
  lea    0xf0(%rsp),%rdi
  call   <strcpy@plt>
  lea    0x4a(%rsp),%rsi
  lea    0x44(%rsp),%rdi
  call   <strcpy@plt>
  movzbl 0x16(%rsp),%eax
  mov    %al,0x17(%rsp)
  jmp    L315
L694:
  mov    $0x0,%eax
  call   <getchar@plt>
  cmp    $0xa,%al
  jne    L694
  jmp    L725
L895:
  lea    0x110(%rsp),%rsi
  lea    0x50(%rsp),%rdi
  call   <strcpy@plt>
  lea    0x130(%rsp),%rsi
  lea    0x70(%rsp),%rdi
  call   <strcpy@plt>
  lea    0x4a(%rsp),%rsi
  lea    0x38(%rsp),%rdi
  call   <strcpy@plt>
L315:
  mov    %r14,%rdi
  call   <puts@plt>
  movb   $0x1,0x15(%rsp)
  jmp    L483
L281:
  lea    0x110(%rsp),%rsi
  lea    0x90(%rsp),%rdi
  call   <strcpy@plt>
  lea    0x130(%rsp),%rsi
  lea    0xb0(%rsp),%rdi
  call   <strcpy@plt>
  lea    0x4a(%rsp),%rsi
  lea    0x3e(%rsp),%rdi
  call   <strcpy@plt>
  movzbl 0x15(%rsp),%eax
  mov    %al,0x16(%rsp)
  jmp    L315
L427:
  lea    D460(%rip),%rdi
  call   <puts@plt>
  movzbl 0x17(%rsp),%eax
  mov    %al,0x16(%rsp)
  jmp    L315
L502:
  lea    0x70(%rsp),%rdx
  lea    0x50(%rsp),%rsi
  mov    0x18(%rsp),%ecx
  lea    D86(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L319
L954:
  lea    0xb0(%rsp),%rdx
  lea    0x90(%rsp),%rsi
  mov    0x1c(%rsp),%ecx
  lea    D86(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L474
L77:
  lea    0xf0(%rsp),%rdx
  lea    0xd0(%rsp),%rsi
  mov    0xc(%rsp),%ecx
  lea    D86(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L720
L1022:
  mov    %r14,%rdi
  call   <puts@plt>
  mov    $0x2,%esi
  lea    D408(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    0xb0(%rsp),%rdx
  lea    0x90(%rsp),%rsi
  lea    D77(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    0x1c(%rsp),%eax
  mov    %eax,0x8(%rsp)
  jmp    L35
L967:
  mov    %r14,%rdi
  call   <puts@plt>
  mov    $0x1,%esi
  lea    D408(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    0x70(%rsp),%rdx
  lea    0x50(%rsp),%rsi
  lea    D77(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    0x18(%rsp),%eax
  mov    %eax,0x8(%rsp)
  jmp    L35
L980:
  mov    $0x2,%r13d
L600:
  mov    %r14,%rdi
  call   <puts@plt>
  lea    D458(%rip),%rdi
  call   <puts@plt>
  mov    %r14,%rdi
  call   <puts@plt>
  mov    %r13d,0x10(%rsp)
L745:
  mov    $0x4,%edi
  mov    $0x0,%eax
  call   <sleep@plt>
  mov    $0x0,%eax
  call   <clrscr@plt>
  mov    0x10(%rsp),%eax
  cmp    $0x1,%eax
  je     L967
  cmp    $0x2,%eax
  je     L1022
  mov    %r14,%rdi
  call   <puts@plt>
  mov    $0x3,%esi
  lea    D408(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    0xf0(%rsp),%rdx
  lea    0xd0(%rsp),%rsi
  lea    D77(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    0xc(%rsp),%eax
  mov    %eax,0x8(%rsp)
L35:
  mov    0x8(%rsp),%esi
  lea    D315(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    %r14,%rdi
  call   <puts@plt>
  movl   $0xffffffff,0x30(%rsp)
  lea    D87(%rip),%r13
  lea    D407(%rip),%r12
  lea    D142(%rip),%rbp
  lea    D26(%rip),%rbx
L815:
  mov    %r13,%rdi
  call   <puts@plt>
  mov    %r12,%rdi
  call   <puts@plt>
  mov    %rbp,%rdi
  call   <puts@plt>
  mov    %rbx,%rdi
  call   <puts@plt>
  lea    0x30(%rsp),%rsi
  lea    D144(%rip),%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  mov    0x30(%rsp),%eax
  test   %eax,%eax
  jle    L815
  cmp    $0x1,%eax
  je     L287
  cmp    $0x2,%eax
  je     L920
  cmp    $0x3,%eax
  je     L343
  cmp    $0x4,%eax
  jne    L745
  movl   $0xffffffff,0x28(%rsp)
  lea    D37(%rip),%rbp
  lea    0x28(%rsp),%rbx
  lea    D144(%rip),%r12
L324:
  mov    %r14,%rdi
  call   <puts@plt>
  mov    %rbp,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    %rbx,%rsi
  mov    %r12,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  mov    0x28(%rsp),%eax
  test   %eax,%eax
  js     L324
  mov    %eax,%edx
  neg    %edx
  cmovns %edx,%eax
  cmp    %eax,0x8(%rsp)
  jl     L324
  movl   $0xffffffff,0x34(%rsp)
  lea    D11(%rip),%r12
  lea    0x34(%rsp),%rbp
  lea    D144(%rip),%rbx
L207:
  mov    %r14,%rdi
  call   <puts@plt>
  mov    %r12,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    %rbp,%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  mov    0x34(%rsp),%eax
  cmp    $0x4,%eax
  ja     L207
  cmp    0x10(%rsp),%eax
  je     L207
  mov    %r14,%rdi
  call   <puts@plt>
  mov    0x34(%rsp),%eax
  cmpb   $0x0,0x15(%rsp)
  je     L532
  cmp    $0x1,%eax
  je     L829
L532:
  cmpb   $0x1,0x16(%rsp)
  jne    L782
  cmp    $0x2,%eax
  je     L829
L782:
  cmpb   $0x1,0x17(%rsp)
  jne    L162
  cmp    $0x3,%eax
  je     L829
L162:
  lea    D238(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L745
L632:
  mov    $0x3,%r13d
  jmp    L600
L583:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: disassemble_data
arguments: data_label: D193
data_type: string
name: disassemble_data
arguments: data_label: D492
data_type: string
name: disassemble_data
arguments: data_label: D378
data_type: string
name: disassemble_data
arguments: data_label: D415
data_type: string
name: disassemble_data
arguments: data_label: D307
data_type: string
name: disassemble_data
arguments: data_label: D144
data_type: string
name: disassemble_data
arguments: data_label: D215
data_type: string
name: disassemble_data
arguments: data_label: D364
data_type: string
name: disassemble_data
arguments: data_label: D400
data_type: string
name: disassemble_data
arguments: data_label: D436
data_type: string
name: disassemble_data
arguments: data_label: D152
data_type: string
name: disassemble_data
arguments: data_label: D232
data_type: string
name: disassemble_data
arguments: data_label: D197
data_type: string
name: disassemble_data
arguments: data_label: D57
data_type: string
name: disassemble_data
arguments: data_label: D4
data_type: string
name: disassemble_data
arguments: data_label: D10
data_type: string
name: disassemble_data
arguments: data_label: D456
data_type: string
name: disassemble_data
arguments: data_label: D270
data_type: string
name: disassemble_data
arguments: data_label: D90
data_type: string
name: disassemble_data
arguments: data_label: D222
data_type: string
name: disassemble_data
arguments: data_label: D460
data_type: string
name: disassemble_data
arguments: data_label: D86
data_type: string
name: disassemble_data
arguments: data_label: D408
data_type: string
name: disassemble_data
arguments: data_label: D77
data_type: string
name: disassemble_data
arguments: data_label: D458
data_type: string
name: disassemble_data
arguments: data_label: D315
data_type: string
name: disassemble_data
arguments: data_label: D87
data_type: string
name: disassemble_data
arguments: data_label: D407
data_type: string
name: disassemble_data
arguments: data_label: D142
data_type: string
name: disassemble_data
arguments: data_label: D26
data_type: string
name: disassemble_data
arguments: data_label: D37
data_type: string
name: disassemble_data
arguments: data_label: D11
data_type: string
name: disassemble_data
arguments: data_label: D238
data_type: string

tool: D193: ----------

tool: D492: Welcome to bank.c!

tool: D378: Enter 1 to log in.

tool: D415: Enter 2 to create an account.

tool: D307: Enter 3 to end the program.

tool: D144: %d

tool: D215: -------------------------

tool: D364: 
|First	|Last	|Value	|

tool: D400: 
-------------------------

tool: D436: ~Login~

tool: D152: First Name: 

tool: D232: Last Name: 

tool: D197: Password: 

tool: D57: An account with that first name, last name, and password does not exist.

tool: D4: Deposit: 

tool: D10: Retrieve: 

tool: D456: Acc #3: %d


tool: D270: Acc #1: %d


tool: D90: Acc #2: %d


tool: D222: ~New Account~

tool: D460: Sorry, there are no more accounts availible.

tool: D86: 
|%s	|%s	|%d	|

tool: D408: Account #%d


tool: D77: %s %s

tool: D458: Login sucessful!

tool: D315: 
Ballance: $%d


tool: D87: Enter 1 to log out.

tool: D407: Enter 2 to deposit money to your account.

tool: D142: Enter 3 to retrieve money from your account.

tool: D26: Enter 4 to transfer money to another account.

tool: D37: Tranfer: 

tool: D11: To account: 

tool: D238: The specified account does not exist.

assistant: ```c
void main() {
  char first1[20], last1[20], first2[20], last2[20], first3[20], last3[20];
  char pass1[6], pass2[6], pass3[6];
  char firstc[20], lastc[20], passc[6];
  int val1 = 0, val2 = 0, val3 = 0;
  int change;
  char acc1 = 0, acc2 = 0, acc3 = 0;
  int curacc, curval;
  int accountloop = 1;
  int accountcmd = -1;
  int actionloop;
  int actioncmd = -1;
  int request;
  int accr;
  char let;
  printf("----------\n");
  printf("Welcome to bank.c!\n");
  printf("----------\n");
  sleep((unsigned int)2);
  while (accountloop == 1) {
    sleep((unsigned int)4);
    clrscr();
    printf("----------\n");
    curacc = 0;
    for (accountcmd = -1; accountcmd <= 0;) {
      printf("Enter 1 to log in.\n");
      printf("Enter 2 to create an account.\n");
      printf("Enter 3 to end the program.\n");
      scanf("%d", &accountcmd);
    }
    if (accountcmd == 1) {
      printf("----------\n");
      printf("~Login~\n");
      printf("----------\n");
      printf("First Name: ");
      request = 0;
      getchar();
      while (((let = getchar()) != '\n') && (request < 20)) {
        firstc[request] = let;
        request += 1;
      }
      firstc[request] = '\0';
      if (request >= 20)
        while ((let = getchar()) != '\n') {
        }
      printf("Last Name: ");
      request = 0;
      while (((let = getchar()) != '\n') && (request < 20)) {
        lastc[request] = let;
        request += 1;
      }
      lastc[request] = '\0';
      if (request >= 20)
        while ((let = getchar()) != '\n') {
        }
      printf("Password: ");
      request = 0;
      while (request < 6) {
        while (((let = getchar()) == '\n') || (isalnum(let) == 0)) {
        }
        passc[request] = let;
        request += 1;
      }
      lastc[request] = '\0';
      if (request >= 6)
        while ((let = getchar()) != '\n') {
        }
      else
        let = getchar();
      if ((strcmp(firstc, first1) == 0) && (strcmp(lastc, last1) == 0) && (strcmp(passc, pass1) == 0)) {
        curacc = 1;
        curval = val1;
      } else if ((strcmp(firstc, first2) == 0) && (strcmp(lastc, last2) == 0) && (strcmp(passc, pass2) == 0)) {
        curacc = 2;
        curval = val2;
      } else if ((strcmp(firstc, first3) == 0) && (strcmp(lastc, last3) == 0) && (strcmp(passc, pass3) == 0)) {
        curacc = 3;
        curval = val3;
      }
      if ((curacc > 0) && (curacc < 4)) {
        printf("----------\n");
        printf("Login sucessful!\n");
        printf("----------\n");
        actionloop = 1;
        while (actionloop == 1) {
          sleep((unsigned int)4);
          clrscr();
          if (curacc == 1)
            curval = val1;
          else if (curacc == 2)
            curval = val2;
          else if (curacc == 3)
            curval = val3;
          printf("----------\n");
          printf("Account #%d\n", curacc);
          if (curacc == 1)
            printf("%s %s", first1, last1);
          else if (curacc == 2)
            printf("%s %s", first2, last2);
          else if (curacc == 3)
            printf("%s %s", first3, last3);
          printf("\nBallance: $%d\n", curval);
          printf("----------\n");
          for (actioncmd = -1; actioncmd <= 0;) {
            printf("Enter 1 to log out.\n");
            printf("Enter 2 to deposit money to your account.\n");
            printf("Enter 3 to retrieve money from your account.\n");
            printf("Enter 4 to transfer money to another account.\n");
            scanf("%d", &actioncmd);
          }
          if (actioncmd == 1) {
            actionloop = 0;
          } else if (actioncmd == 2) {
            for (change = -1; change < 0;) {
              printf("----------\n");
              printf("Deposit: ");
              scanf("%d", &change);
            }
            if (curacc == 1)
              val1 += change;
            else if (curacc == 2)
              val2 += change;
            else if (curacc == 3)
              val3 += change;
          } else if (actioncmd == 3) {
            for (change = -1; (change < 0) || ((curval - abs(change)) < 0);) {
              printf("----------\n");
              printf("Retrieve: ");
              scanf("%d", &change);
            }
            if (curacc == 1)
              val1 -= change;
            else if (curacc == 2)
              val2 -= change;
            else if (curacc == 3)
              val3 -= change;
          } else if (actioncmd == 4) {
            for (change = -1; (change < 0) || ((curval - abs(change)) < 0);) {
              printf("----------\n");
              printf("Tranfer: ");
              scanf("%d", &change);
            }
            for (accr = -1; (accr < 0) || (accr > 4) || (accr == curacc);) {
              printf("----------\n");
              printf("To account: ");
              scanf("%d", &accr);
            }
            printf("----------\n");
            if (((accr == 1) && (acc1 == 1)) || ((accr == 2) && (acc2 == 1)) || ((accr == 3) && (acc3 == 1))) {
              if (curacc == 1) {
                val1 -= change;
                printf("Acc #1: %d\n", val1);
              } else if (curacc == 2) {
                val2 -= change;
                printf("Acc #2: %d\n", val2);
              } else if (curacc == 3) {
                val3 -= change;
                printf("Acc #3: %d\n", val3);
              }
              if (accr == 1) {
                val1 += change;
                printf("Acc #1: %d\n", val1);
              } else if (accr == 2) {
                val2 += change;
                printf("Acc #2: %d\n", val2);
              } else if (accr == 3) {
                val3 += change;
                printf("Acc #3: %d\n", val3);
              }
            } else {
              printf("The specified account does not exist.");
            }
          }
        }
      } else {
        printf("An account with that first name, last name, and password does not exist.\n");
      }
      printf("----------\n");
    } else if (accountcmd == 2) {
      printf("----------\n");
      printf("~New Account~\n");
      printf("----------\n");
      printf("First Name: ");
      request = 0;
      getchar();
      while (((let = getchar()) != '\n') && (request < 20)) {
        firstc[request] = let;
        request += 1;
      }
      firstc[request] = '\0';
      if (request >= 20)
        while ((let = getchar()) != '\n') {
        }
      printf("Last Name: ");
      request = 0;
      while (((let = getchar()) != '\n') && (request < 20)) {
        lastc[request] = let;
        request += 1;
      }
      lastc[request] = '\0';
      if (request >= 20)
        while ((let = getchar()) != '\n') {
        }
      printf("Password: ");
      request = 0;
      while (request < 6) {
        while (((let = getchar()) == '\n') || (isalnum(let) == 0)) {
        }
        passc[request] = let;
        request += 1;
      }
      lastc[request] = '\0';
      if (request >= 6)
        while ((let = getchar()) != '\n') {
        }
      else
        let = getchar();
      if (acc1 == 0) {
        strcpy(first1, firstc);
        strcpy(last1, lastc);
        strcpy(pass1, passc);
        acc1 = 1;
      } else if (acc2 == 0) {
        strcpy(first2, firstc);
        strcpy(last2, lastc);
        strcpy(pass2, passc);
        acc2 = 1;
      } else if (acc3 == 0) {
        strcpy(first3, firstc);
        strcpy(last3, lastc);
        strcpy(pass3, passc);
        acc3 = 1;
      } else {
        printf("Sorry, there are no more accounts availible.\n");
      }
      printf("----------\n");
    } else if (accountcmd == 3) {
      printf("----------\n");
      accountloop = 0;
    }
  }
  printf("-------------------------");
  printf("\n|First\t|Last\t|Value\t|");
  printf("\n-------------------------");
  if (acc1 == 1) {
    printf("\n|%s\t|%s\t|%d\t|", first1, last1, val1);
  }
  if (acc2 == 1) {
    printf("\n|%s\t|%s\t|%d\t|", first2, last2, val2);
  }
  if (acc3 == 1) {
    printf("\n|%s\t|%s\t|%d\t|", first3, last3, val3);
  }
  printf("\n-------------------------");
}
```