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

```asm
<parse_netmap>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  sub    $0x1b8,%rsp
  mov    %rdi,-0x1a8(%rbp)
  mov    %rsi,-0x1b0(%rbp)
  mov    %rdx,-0x1b8(%rbp)
  mov    %rcx,-0x1c0(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x18(%rbp)
  xor    %eax,%eax
  mov    -0x1b0(%rbp),%rax
  movl   $0x0,(%rax)
  mov    -0x1b8(%rbp),%rax
  movl   $0x0,(%rax)
  mov    -0x1c0(%rbp),%rax
  movl   $0x0,(%rax)
  mov    -0x1a8(%rbp),%rax
  lea    D67(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strtok@plt>
  mov    %rax,-0x198(%rbp)
  cmpq   $0x0,-0x198(%rbp)
  je     L53
  mov    -0x198(%rbp),%rdx
  lea    -0xf0(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  lea    D67(%rip),%rax
  mov    %rax,%rsi
  mov    $0x0,%edi
  call   <strtok@plt>
  mov    %rax,-0x198(%rbp)
  cmpq   $0x0,-0x198(%rbp)
  je     L117
  jmp    L123
L53:
  mov    $0x1,%eax
  jmp    L204
L123:
  mov    -0x198(%rbp),%rdx
  lea    -0x80(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  lea    -0xf0(%rbp),%rax
  lea    D57(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strtok@plt>
  mov    %rax,-0x198(%rbp)
  cmpq   $0x0,-0x198(%rbp)
  je     L19
  jmp    L17
L117:
  mov    $0x1,%eax
  jmp    L204
L17:
  mov    -0x198(%rbp),%rdx
  lea    -0x190(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  lea    D67(%rip),%rax
  mov    %rax,%rsi
  mov    $0x0,%edi
  call   <strtok@plt>
  mov    %rax,-0x198(%rbp)
  cmpq   $0x0,-0x198(%rbp)
  je     L190
  jmp    L111
L19:
  mov    $0x1,%eax
  jmp    L204
L111:
  mov    -0x198(%rbp),%rdx
  lea    -0x170(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  lea    -0x170(%rbp),%rdx
  lea    -0x110(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  lea    -0x110(%rbp),%rax
  lea    D7(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strtok@plt>
  mov    %rax,-0x198(%rbp)
  cmpq   $0x0,-0x198(%rbp)
  je     L128
  jmp    L144
L190:
  mov    $0x1,%eax
  jmp    L204
L144:
  mov    -0x198(%rbp),%rdx
  lea    -0x170(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
L128:
  lea    -0x170(%rbp),%rax
  lea    D8(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strtok@plt>
  mov    %rax,-0x198(%rbp)
  cmpq   $0x0,-0x198(%rbp)
  je     L6
  mov    -0x198(%rbp),%rdx
  lea    -0x150(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  lea    D8(%rip),%rax
  mov    %rax,%rsi
  mov    $0x0,%edi
  call   <strtok@plt>
  mov    %rax,-0x198(%rbp)
  cmpq   $0x0,-0x198(%rbp)
  je     L105
  jmp    L168
L6:
  mov    $0x1,%eax
  jmp    L204
L168:
  mov    -0x198(%rbp),%rdx
  lea    -0x130(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  lea    -0x150(%rbp),%rax
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    %eax,%ebx
  lea    -0x130(%rbp),%rax
  mov    %rax,%rdi
  call   <atoi@plt>
  shl    $0x4,%eax
  add    %ebx,%eax
  mov    %eax,-0x19c(%rbp)
  movl   $0x0,-0x1a0(%rbp)
  jmp    L89
L105:
  mov    $0x1,%eax
  jmp    L204
L81:
  mov    -0x1a0(%rbp),%eax
  cltq
  movzbl -0x80(%rbp,%rax,1),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <isdigit@plt>
  test   %rax,%rax
  je     L200
  addl   $0x1,-0x1a0(%rbp)
  jmp    L89
L200:
  mov    -0x1a0(%rbp),%eax
  cltq
  movb   $0x0,-0x80(%rbp,%rax,1)
  jmp    L230
L89:
  mov    -0x1a0(%rbp),%eax
  cltq
  movzbl -0x80(%rbp,%rax,1),%eax
  test   %al,%al
  jne    L81
L230:
  lea    -0x190(%rbp),%rax
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    -0x1b0(%rbp),%rdx
  mov    %eax,(%rdx)
  mov    -0x1b8(%rbp),%rax
  mov    -0x19c(%rbp),%edx
  mov    %edx,(%rax)
  lea    -0x80(%rbp),%rax
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    -0x1c0(%rbp),%rdx
  mov    %eax,(%rdx)
  mov    $0x0,%eax
L204:
  mov    -0x18(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L73
  call   <__stack_chk_fail@plt>
L73:
  mov    -0x8(%rbp),%rbx
  leave
  ret
```

tool_calls: name: retrieve_data
arguments: data_label: D67
type_guessed: string
name: retrieve_data
arguments: data_label: D57
type_guessed: string
name: retrieve_data
arguments: data_label: D7
type_guessed: string
name: retrieve_data
arguments: data_label: D8
type_guessed: string

tool: D67:  

tool: D57: :

tool: D7: @

tool: D8: /

assistant: ```c
int parse_netmap(char *s, int *iouinst, int *iouintf, int *iouliveinst) {
  char Left[100], Right[100];
  char LeftInstance[20], RightInstance[20];
  char LeftIntf[20], IntMajor[20], IntMinor[20];
  char temps[30];
  int interface;
  char *t;
  int i;
  *iouinst = 0;
  *iouintf = 0;
  *iouliveinst = 0;
  t = strtok(s, " ");
  if (t != NULL)
    strcpy(Left, t);
  else
    return 1;
  t = strtok(NULL, " ");
  if (t != NULL)
    strcpy(Right, t);
  else
    return 1;
  t = strtok(Left, ":");
  if (t != NULL)
    strcpy(LeftInstance, t);
  else
    return 1;
  t = strtok(NULL, " ");
  if (t != NULL)
    strcpy(LeftIntf, t);
  else
    return 1;
  strcpy(temps, LeftIntf);
  t = strtok(temps, "@");
  if (t != NULL)
    strcpy(LeftIntf, t);
  t = strtok(LeftIntf, "/");
  if (t != NULL)
    strcpy(IntMajor, t);
  else
    return 1;
  t = strtok(NULL, "/");
  if (t != NULL)
    strcpy(IntMinor, t);
  else
    return 1;
  interface = atoi(IntMajor) + (atoi(IntMinor) * 16);
  i = 0;
  while (Right[i] != '\0') {
    if (isdigit(Right[i]))
      i++;
    else {
      Right[i] = '\0';
      break;
    }
  }
  *iouinst = atoi(LeftInstance);
  *iouintf = interface;
  *iouliveinst = atoi(Right);
  return 0;
}
```