user: 请将这段汇编代码片段转换成等效的C代码:

```asm
<TraiteMessage>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %rdi,-0x28(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  lea    -0x11(%rbp),%rax
  mov    $0x9,%edx
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <memset@plt>
  mov    -0x28(%rbp),%rax
  mov    %rax,%rdi
  call   <MessageValide@plt>
  test   %rax,%rax
  jne    L66
  mov    -0x28(%rbp),%rax
  lea    D4(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L86
  mov    -0x28(%rbp),%rax
  lea    D19(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L86
  mov    -0x28(%rbp),%rax
  lea    D8(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L16
  mov    $0x0,%eax
  call   <RobbyUp@plt>
L16:
  mov    -0x28(%rbp),%rax
  lea    D59(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L48
  mov    $0x0,%eax
  call   <RobbyDown@plt>
L48:
  mov    -0x28(%rbp),%rax
  lea    D12(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L82
  mov    $0x0,%eax
  call   <RobbyLeft@plt>
L82:
  mov    -0x28(%rbp),%rax
  lea    D49(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L109
  mov    $0x0,%eax
  call   <RobbyRight@plt>
L109:
  mov    -0x28(%rbp),%rax
  lea    D73(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L51
  mov    $0x0,%eax
  call   <RobbyOpen@plt>
L51:
  mov    -0x28(%rbp),%rax
  lea    D66(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L86
  mov    $0x0,%eax
  call   <RobbyClose@plt>
  jmp    L86
L66:
  mov    $0xffffffff,%eax
  jmp    L33
L86:
  mov    $0x0,%eax
L33:
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L2
  call   <__stack_chk_fail@plt>
L2:
  leave
  ret
```

tool_calls: name: retrieve_data
arguments: data_tag: D4
data_type: string
name: retrieve_data
arguments: data_tag: D19
data_type: string
name: retrieve_data
arguments: data_tag: D8
data_type: string
name: retrieve_data
arguments: data_tag: D59
data_type: string
name: retrieve_data
arguments: data_tag: D12
data_type: string
name: retrieve_data
arguments: data_tag: D49
data_type: string
name: retrieve_data
arguments: data_tag: D73
data_type: string
name: retrieve_data
arguments: data_tag: D66
data_type: string

tool: D4: quit

tool: D19: exit

tool: D8: up

tool: D59: down

tool: D12: left

tool: D49: right

tool: D73: open

tool: D66: close

assistant: ```c
int TraiteMessage(char *message) {
  char chaine[9];
  memset(chaine, 0, sizeof(chaine));
  if (MessageValide(message) == 0) {
    if ((strcmp(message, "quit") != 0) && (strcmp(message, "exit") != 0)) {
      if (strcmp(message, "up") == 0) {
        RobbyUp();
      }
      if (strcmp(message, "down") == 0) {
        RobbyDown();
      }
      if (strcmp(message, "left") == 0) {
        RobbyLeft();
      }
      if (strcmp(message, "right") == 0) {
        RobbyRight();
      }
      if (strcmp(message, "open") == 0) {
        RobbyOpen();
      }
      if (strcmp(message, "close") == 0) {
        RobbyClose();
      }
    }
  } else {
    return (-1);
  }
  return (0);
}
```