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

```asm
<main>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  lea    D61(%rip),%r13
  push   %r12
  mov    %edi,%r12d
  mov    $0x3c,%edi
  push   %rbp
  mov    %rsi,%rbp
  push   %rbx
  sub    $0x8,%rsp
  call   <malloc@plt>
  mov    0x8(%rbp),%rdi
  mov    %r13,%rsi
  mov    %rax,%r14
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L171
  cmp    $0x4,%r12d
  jg     L120
L160:
  lea    D118(%rip),%rdi
  call   <printf@plt>
  lea    D86(%rip),%rdi
  call   <printf@plt>
  lea    D111(%rip),%rdi
  call   <printf@plt>
  lea    D26(%rip),%rdi
  call   <printf@plt>
L52:
  add    $0x8,%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L120:
  xor    %r15d,%r15d
  cmp    $0x6,%r12d
  je     L41
L99:
  mov    0x8(%rbp),%rdi
  mov    %r13,%rsi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L141
  mov    0x8(%rbp),%rdi
  lea    D97(%rip),%rsi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L52
L10:
  mov    %r14,%rcx
  mov    %r15d,%edx
  mov    %rbp,%rsi
  mov    %r12d,%edi
  call   <sep@plt>
  mov    %eax,%r13d
L173:
  add    $0x1,%r13d
  jne    L52
  lea    D115(%rip),%rdi
  call   <printf@plt>
  jmp    L52
L171:
  mov    0x8(%rbp),%rdi
  lea    D97(%rip),%rsi
  xor    %ebx,%ebx
  call   <strcmp@plt>
  test   %rax,%rax
  setne  %bl
  cmp    $0x4,%r12d
  jle    L160
  xor    %r15d,%r15d
  cmp    $0x6,%r12d
  je     L25
L113:
  sub    $0x1,%ebx
  jne    L99
  jmp    L160
L141:
  mov    %rbp,%rsi
  mov    %r12d,%edi
  mov    %r14,%rcx
  mov    %r15d,%edx
  call   <merge@plt>
  mov    0x8(%rbp),%rdi
  lea    D97(%rip),%rsi
  mov    %eax,%r13d
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L173
  jmp    L10
L41:
  xor    %ebx,%ebx
L25:
  lea    D92(%rip),%r15
  mov    0x28(%rbp),%rdi
  mov    %r15,%rsi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L134
  mov    0x28(%rbp),%rdi
  mov    %r15,%rsi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L160
  mov    $0x1,%ebx
L76:
  lea    D83(%rip),%rdi
  mov    $0x1,%r15d
  call   <printf@plt>
  mov    %r14,%rsi
  lea    D52(%rip),%rdi
  call   <scanf@plt>
  jmp    L113
L134:
  mov    0x28(%rbp),%rdi
  mov    %r15,%rsi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L76
  xor    %r15d,%r15d
  jmp    L113
```

tool_calls: name: parse_data
arguments: data_tag: D61
type: string
name: parse_data
arguments: data_tag: D118
type: string
name: parse_data
arguments: data_tag: D86
type: string
name: parse_data
arguments: data_tag: D111
type: string
name: parse_data
arguments: data_tag: D26
type: string
name: parse_data
arguments: data_tag: D97
type: string
name: parse_data
arguments: data_tag: D115
type: string
name: parse_data
arguments: data_tag: D92
type: string
name: parse_data
arguments: data_tag: D83
type: string
name: parse_data
arguments: data_tag: D52
type: string

tool: D61: -m

tool: D118: Syntax Error 


tool: D86: hide-file -m <host_file> <guest_file> <output_file> -p   //merge
	 -p can be omitted if you don't want to encrypt guest_file via password


tool: D111: 			OR


tool: D26: hide-file -s <merged_file> <output_img_file> <output_txt_file> -p   //separate
	 -p can be omitted if the merged_file was not encrypted via password


tool: D97: -s

tool: D115: Run-time Error


tool: D92: -p

tool: D83: ( password ) : 

tool: D52: %s

assistant: ```c
int main(int argc, char **argv) {
  int error_code = 0;
  int ask_pass = 0, res = 0;
  char *pass;
  pass = (char *)malloc(sizeof(char) * 60);
  if ((strcmp(argv[1], "-m") != 0) && (strcmp(argv[1], "-s") != 0))
    error_code = 1;
  if (argc < 5)
    error_code = 1;
  if ((argc == 6) && (strcmp(argv[5], "-p") != 0))
    error_code = 1;
  if ((argc == 6) && (strcmp(argv[5], "-p") == 0)) {
    ask_pass = 1;
    printf("( password ) : ");
    scanf("%s", pass);
  }
  if (error_code != 1) {
    if (strcmp(argv[1], "-m") == 0)
      res = merge(argc, argv, ask_pass, pass);
    if (strcmp(argv[1], "-s") == 0)
      res = sep(argc, argv, ask_pass, pass);
  } else if (error_code == 1) {
    printf("Syntax Error \n");
    printf("hide-file -m <host_file> <guest_file> <output_file> -p   //merge\n\t -p can be omitted if you don't want to encrypt guest_file via password\n");
    printf("\t\t\tOR\n");
    printf("hide-file -s <merged_file> <output_img_file> <output_txt_file> -p   //separate\n\t -p can be omitted if the merged_file was not encrypted via password\n");
  }
  if (res == -1)
    printf("Run-time Error\n");
  return 0;
}
```