user: 请从给定的汇编指令推导出C源代码:

```asm
<GetLmode>:
  endbr64
  push   %rbx
  mov    %rdi,%rbx
  lea    D293(%rip),%rsi
  call   <strcmp@plt>
  mov    %rax,%rdx
  mov    $0x3e7,%eax
  test   %rdx,%rdx
  je     L189
  lea    D283(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  mov    %rax,%rdx
  mov    $0x63,%eax
  test   %rdx,%rdx
  je     L189
  lea    D223(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  mov    %rax,%rdx
  mov    $0x63,%eax
  test   %rdx,%rdx
  je     L189
  lea    D234(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  mov    %rax,%rdx
  mov    $0x2,%eax
  test   %rdx,%rdx
  je     L189
  lea    D232(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  mov    %rax,%rdx
  mov    $0x3,%eax
  test   %rdx,%rdx
  je     L189
  lea    D44(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  mov    %rax,%rdx
  mov    $0x5,%eax
  test   %rdx,%rdx
  je     L189
  lea    D202(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  mov    %rax,%rdx
  mov    $0xc,%eax
  test   %rdx,%rdx
  je     L189
  lea    D130(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  mov    %rax,%rdx
  mov    $0xc,%eax
  test   %rdx,%rdx
  je     L189
  lea    D149(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  mov    %rax,%rdx
  mov    $0xd,%eax
  test   %rdx,%rdx
  je     L189
  lea    D15(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  mov    %rax,%rdx
  mov    $0xe,%eax
  test   %rdx,%rdx
  je     L189
  lea    D300(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  mov    %rax,%rdx
  mov    $0xe,%eax
  test   %rdx,%rdx
  je     L189
  lea    D1(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  mov    %rax,%rdx
  mov    $0xe,%eax
  test   %rdx,%rdx
  je     L189
  lea    D270(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  mov    %rax,%rdx
  mov    $0xf,%eax
  test   %rdx,%rdx
  je     L189
  lea    D307(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  mov    %rax,%rdx
  mov    $0xf,%eax
  test   %rdx,%rdx
  je     L189
  lea    D70(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  mov    %rax,%rdx
  mov    $0x10,%eax
  test   %rdx,%rdx
  je     L189
  lea    D18(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  mov    %rax,%rdx
  mov    $0x11,%eax
  test   %rdx,%rdx
  je     L189
  lea    D292(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L80
  lea    D171(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L245
  lea    D91(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L351
  lea    D186(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L136
  lea    D20(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L16
  lea    D74(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L431
  lea    D277(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L397
  lea    D238(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L147
  lea    D260(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L376
  lea    D38(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L202
  lea    D253(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L333
  lea    D73(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L417
  lea    D228(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L249
  lea    D208(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L209
  lea    D203(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  cmp    $0x1,%rax
  sbb    %eax,%eax
  and    $0x34,%eax
  jmp    L189
L80:
  mov    $0x12,%eax
L189:
  pop    %rbx
  ret
L245:
  mov    $0x12,%eax
  jmp    L189
L351:
  mov    $0x12,%eax
  jmp    L189
L136:
  mov    $0x15,%eax
  jmp    L189
L16:
  mov    $0x16,%eax
  jmp    L189
L431:
  mov    $0x17,%eax
  jmp    L189
L397:
  mov    $0x17,%eax
  jmp    L189
L147:
  mov    $0x18,%eax
  jmp    L189
L376:
  mov    $0x19,%eax
  jmp    L189
L202:
  mov    $0x1a,%eax
  jmp    L189
L333:
  mov    $0x1b,%eax
  jmp    L189
L417:
  mov    $0x1c,%eax
  jmp    L189
L249:
  mov    $0x1d,%eax
  jmp    L189
L209:
  mov    $0x33,%eax
  jmp    L189
```

tool_calls: name: extract_symbolic_data
arguments: data_tag: D293
type: string
name: extract_symbolic_data
arguments: data_tag: D283
type: string
name: extract_symbolic_data
arguments: data_tag: D223
type: string
name: extract_symbolic_data
arguments: data_tag: D234
type: string
name: extract_symbolic_data
arguments: data_tag: D232
type: string
name: extract_symbolic_data
arguments: data_tag: D44
type: string
name: extract_symbolic_data
arguments: data_tag: D202
type: string
name: extract_symbolic_data
arguments: data_tag: D130
type: string
name: extract_symbolic_data
arguments: data_tag: D149
type: string
name: extract_symbolic_data
arguments: data_tag: D15
type: string
name: extract_symbolic_data
arguments: data_tag: D300
type: string
name: extract_symbolic_data
arguments: data_tag: D1
type: string
name: extract_symbolic_data
arguments: data_tag: D270
type: string
name: extract_symbolic_data
arguments: data_tag: D307
type: string
name: extract_symbolic_data
arguments: data_tag: D70
type: string
name: extract_symbolic_data
arguments: data_tag: D18
type: string
name: extract_symbolic_data
arguments: data_tag: D292
type: string
name: extract_symbolic_data
arguments: data_tag: D171
type: string
name: extract_symbolic_data
arguments: data_tag: D91
type: string
name: extract_symbolic_data
arguments: data_tag: D186
type: string
name: extract_symbolic_data
arguments: data_tag: D20
type: string
name: extract_symbolic_data
arguments: data_tag: D74
type: string
name: extract_symbolic_data
arguments: data_tag: D277
type: string
name: extract_symbolic_data
arguments: data_tag: D238
type: string
name: extract_symbolic_data
arguments: data_tag: D260
type: string
name: extract_symbolic_data
arguments: data_tag: D38
type: string
name: extract_symbolic_data
arguments: data_tag: D253
type: string
name: extract_symbolic_data
arguments: data_tag: D73
type: string
name: extract_symbolic_data
arguments: data_tag: D228
type: string
name: extract_symbolic_data
arguments: data_tag: D208
type: string
name: extract_symbolic_data
arguments: data_tag: D203
type: string

tool: D293: help

tool: D283: exit

tool: D223: quit

tool: D234: pwd

tool: D232: cd

tool: D44: history

tool: D202: cluster

tool: D130: status

tool: D149: status2

tool: D15: perf

tool: D300: df

tool: D1: vmstat

tool: D270: ps

tool: D307: process

tool: D70: mem

tool: D18: cache

tool: D292: vol

tool: D171: volume

tool: D91: disk

tool: D186: mkdir

tool: D20: rmdir

tool: D74: ls

tool: D277: dir

tool: D238: stat

tool: D260: mv

tool: D38: rm

tool: D253: chmod

tool: D73: chown

tool: D228: chgrp

tool: D208: get

tool: D203: put

assistant: ```c
int GetLmode(char *para) {
  if (strcmp(para, "help") == 0) {
    return 999;
  }
  if (strcmp(para, "exit") == 0) {
    return 99;
  }
  if (strcmp(para, "quit") == 0) {
    return 99;
  }
  if (strcmp(para, "pwd") == 0) {
    return 2;
  }
  if (strcmp(para, "cd") == 0) {
    return 3;
  }
  if (strcmp(para, "history") == 0) {
    return 5;
  }
  if (strcmp(para, "cluster") == 0) {
    return 12;
  }
  if (strcmp(para, "status") == 0) {
    return 12;
  }
  if (strcmp(para, "status2") == 0) {
    return 13;
  }
  if (strcmp(para, "perf") == 0) {
    return 14;
  }
  if (strcmp(para, "df") == 0) {
    return 14;
  }
  if (strcmp(para, "vmstat") == 0) {
    return 14;
  }
  if (strcmp(para, "ps") == 0) {
    return 15;
  }
  if (strcmp(para, "process") == 0) {
    return 15;
  }
  if (strcmp(para, "mem") == 0) {
    return 16;
  }
  if (strcmp(para, "cache") == 0) {
    return 17;
  }
  if (strcmp(para, "vol") == 0) {
    return 18;
  }
  if (strcmp(para, "volume") == 0) {
    return 18;
  }
  if (strcmp(para, "disk") == 0) {
    return 18;
  }
  if (strcmp(para, "mkdir") == 0) {
    return 21;
  }
  if (strcmp(para, "rmdir") == 0) {
    return 22;
  }
  if (strcmp(para, "ls") == 0) {
    return 23;
  }
  if (strcmp(para, "dir") == 0) {
    return 23;
  }
  if (strcmp(para, "stat") == 0) {
    return 24;
  }
  if (strcmp(para, "mv") == 0) {
    return 25;
  }
  if (strcmp(para, "rm") == 0) {
    return 26;
  }
  if (strcmp(para, "chmod") == 0) {
    return 27;
  }
  if (strcmp(para, "chown") == 0) {
    return 28;
  }
  if (strcmp(para, "chgrp") == 0) {
    return 29;
  }
  if (strcmp(para, "get") == 0) {
    return 51;
  }
  if (strcmp(para, "put") == 0) {
    return 52;
  }
  return 0;
}
```