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

```asm
<check_ft_type>:
  endbr64
  push   %r13
  lea    D245(%rip),%r13
  push   %r12
  mov    %rsi,%r12
  mov    %r13,%rsi
  push   %rbp
  mov    %rdi,%rbp
  push   %rbx
  mov    %rdx,%rbx
  sub    $0x8,%rsp
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L89
L383:
  movl   $0xe,(%rbx)
  mov    $0x1,%eax
L352:
  add    $0x8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
  nopl   0x0(%rax)
L89:
  lea    D115(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L473
  lea    D87(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L473
  lea    D95(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L26
  lea    D319(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L26
  lea    D209(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L243
  lea    D184(%rip),%r13
L148:
  mov    %rbp,%rsi
  mov    %r12,%rdi
  call   <strcpy@plt>
  mov    %r13,%rsi
  mov    %rbp,%rdi
  call   <strcpy@plt>
  movl   $0x10,(%rbx)
  mov    $0x1,%eax
  jmp    L352
  nopl   (%rax)
L473:
  mov    %rbp,%rsi
  mov    %r12,%rdi
  call   <strcpy@plt>
  mov    %r13,%rsi
  mov    %rbp,%rdi
  call   <strcpy@plt>
  jmp    L383
  nopl   0x0(%rax,%rax,1)
L26:
  mov    %rbp,%rsi
  mov    %r12,%rdi
  call   <strcpy@plt>
  lea    D153(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcpy@plt>
  movl   $0x0,(%rbx)
  mov    $0x1,%eax
  jmp    L352
L243:
  lea    D161(%rip),%rsi
  mov    %rbp,%rdi
  lea    D184(%rip),%r13
  call   <strcmp@plt>
  test   %rax,%rax
  je     L148
  lea    D94(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L148
  lea    D78(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L148
  lea    D102(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L148
  mov    %r13,%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L148
  lea    D314(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L148
  lea    D312(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L148
  lea    D193(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L448
  movl   $0x11,(%rbx)
  mov    $0x1,%eax
  jmp    L352
L448:
  lea    D164(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L40
  movl   $0x3,(%rbx)
  mov    $0x1,%eax
  jmp    L352
L40:
  lea    D104(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L480
  movl   $0xb,(%rbx)
  mov    $0x1,%eax
  jmp    L352
L480:
  lea    D222(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L206
  movl   $0xd,(%rbx)
  mov    $0x1,%eax
  jmp    L352
L206:
  lea    D199(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L15
  movl   $0x7,(%rbx)
  mov    $0x1,%eax
  jmp    L352
L15:
  lea    D257(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L94
  movl   $0x12,(%rbx)
  mov    $0x1,%eax
  jmp    L352
L94:
  lea    D153(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L34
  movl   $0x0,(%rbx)
  mov    $0x1,%eax
  jmp    L352
L34:
  lea    D284(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L282
  movl   $0x9,(%rbx)
  mov    $0x1,%eax
  jmp    L352
L282:
  lea    D313(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L404
  movl   $0x5,(%rbx)
  mov    $0x1,%eax
  jmp    L352
L404:
  lea    D1(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L417
  movl   $0x4,(%rbx)
  mov    $0x1,%eax
  jmp    L352
L417:
  lea    D7(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L205
  movl   $0x6,(%rbx)
  mov    $0x1,%eax
  jmp    L352
L205:
  lea    D282(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L39
  movl   $0xc,(%rbx)
  mov    $0x1,%eax
  jmp    L352
L39:
  lea    D301(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L71
  movl   $0x8,(%rbx)
  mov    $0x1,%eax
  jmp    L352
L71:
  lea    D308(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L308
  movl   $0x1,(%rbx)
  mov    $0x1,%eax
  jmp    L352
L308:
  lea    D238(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L13
  movl   $0x2,(%rbx)
  mov    $0x1,%eax
  jmp    L352
L13:
  lea    D49(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L240
  movl   $0xf,(%rbx)
  mov    $0x1,%eax
  jmp    L352
L240:
  lea    D119(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L400
  movl   $0x13,(%rbx)
  mov    $0x1,%eax
  jmp    L352
L400:
  lea    D15(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  mov    %rax,%r8
  xor    %eax,%eax
  test   %r8,%r8
  jne    L352
  movl   $0x14,(%rbx)
  mov    $0x1,%eax
  jmp    L352
```

tool_calls: name: read_data
arguments: label: D245
type: string
name: read_data
arguments: label: D115
type: string
name: read_data
arguments: label: D87
type: string
name: read_data
arguments: label: D95
type: string
name: read_data
arguments: label: D319
type: string
name: read_data
arguments: label: D209
type: string
name: read_data
arguments: label: D184
type: string
name: read_data
arguments: label: D153
type: string
name: read_data
arguments: label: D161
type: string
name: read_data
arguments: label: D94
type: string
name: read_data
arguments: label: D78
type: string
name: read_data
arguments: label: D102
type: string
name: read_data
arguments: label: D314
type: string
name: read_data
arguments: label: D312
type: string
name: read_data
arguments: label: D193
type: string
name: read_data
arguments: label: D164
type: string
name: read_data
arguments: label: D104
type: string
name: read_data
arguments: label: D222
type: string
name: read_data
arguments: label: D199
type: string
name: read_data
arguments: label: D257
type: string
name: read_data
arguments: label: D284
type: string
name: read_data
arguments: label: D313
type: string
name: read_data
arguments: label: D1
type: string
name: read_data
arguments: label: D7
type: string
name: read_data
arguments: label: D282
type: string
name: read_data
arguments: label: D301
type: string
name: read_data
arguments: label: D308
type: string
name: read_data
arguments: label: D238
type: string
name: read_data
arguments: label: D49
type: string
name: read_data
arguments: label: D119
type: string
name: read_data
arguments: label: D15
type: string

tool: D245: STRUCT

tool: D115: HELIX

tool: D87: STRAND

tool: D95: DNA_BIND

tool: D319: ZN_FING

tool: D209: NP_BIND

tool: D184: SITE

tool: D153: DOMAIN

tool: D161: CA_BIND

tool: D94: METAL

tool: D78: CARBOHYD

tool: D102: DISULFID

tool: D314: ACT_SITE

tool: D312: BINDING

tool: D193: MOD_RES

tool: D164: REPEAT

tool: D104: TRANSMEM

tool: D222: SIGNAL

tool: D199: VARSPLIC

tool: D257: VARIANT

tool: D284: BLOCK

tool: D313: REGION

tool: D1: PHYLOBLOCK

tool: D7: SEQERR

tool: D282: COIL

tool: D301: LOWCOMP

tool: D308: PFAM-A

tool: D238: PFAM-B

tool: D49: PROSITE

tool: D119: ELM

tool: D15: DISORDER

assistant: ```c
int check_ft_type(char *ft_type, char *ft_name, int *type) {
  int ret = 0;
  int seq_type = 0;
  if (strcmp(ft_type, "STRUCT") == 0) {
    seq_type = 3;
    (*type) = 14;
    ret = 1;
  } else if ((strcmp(ft_type, "HELIX") == 0) || (strcmp(ft_type, "STRAND") == 0)) {
    strcpy(ft_name, ft_type);
    strcpy(ft_type, "STRUCT");
    seq_type = 3;
    (*type) = 14;
    ret = 1;
  } else if ((strcmp(ft_type, "DNA_BIND") == 0) || (strcmp(ft_type, "ZN_FING") == 0)) {
    strcpy(ft_name, ft_type);
    strcpy(ft_type, "DOMAIN");
    (*type) = 0;
    ret = 1;
  } else if ((strcmp(ft_type, "NP_BIND") == 0) || (strcmp(ft_type, "CA_BIND") == 0) || (strcmp(ft_type, "METAL") == 0) || (strcmp(ft_type, "CARBOHYD") == 0) || (strcmp(ft_type, "DISULFID") == 0) || (strcmp(ft_type, "SITE") == 0) || (strcmp(ft_type, "ACT_SITE") == 0) || (strcmp(ft_type, "BINDING") == 0)) {
    strcpy(ft_name, ft_type);
    strcpy(ft_type, "SITE");
    (*type) = 16;
    ret = 1;
  } else if (strcmp(ft_type, "MOD_RES") == 0) {
    (*type) = 17;
    ret = 1;
  } else if (strcmp(ft_type, "REPEAT") == 0) {
    (*type) = 3;
    ret = 1;
  } else if (strcmp(ft_type, "TRANSMEM") == 0) {
    (*type) = 11;
    ret = 1;
  } else if (strcmp(ft_type, "SIGNAL") == 0) {
    (*type) = 13;
    ret = 1;
  } else if (strcmp(ft_type, "VARSPLIC") == 0) {
    (*type) = 7;
    ret = 1;
  } else if (strcmp(ft_type, "VARIANT") == 0) {
    (*type) = 18;
    ret = 1;
  } else if (strcmp(ft_type, "DOMAIN") == 0) {
    (*type) = 0;
    ret = 1;
  } else if (strcmp(ft_type, "BLOCK") == 0) {
    (*type) = 9;
    ret = 1;
  } else if (strcmp(ft_type, "REGION") == 0) {
    (*type) = 5;
    ret = 1;
  } else if (strcmp(ft_type, "PHYLOBLOCK") == 0) {
    (*type) = 4;
    ret = 1;
  } else if (strcmp(ft_type, "SEQERR") == 0) {
    (*type) = 6;
    ret = 1;
  } else if (strcmp(ft_type, "COIL") == 0) {
    (*type) = 12;
    ret = 1;
  } else if (strcmp(ft_type, "LOWCOMP") == 0) {
    (*type) = 8;
    ret = 1;
  } else if (strcmp(ft_type, "PFAM-A") == 0) {
    (*type) = 1;
    ret = 1;
  } else if (strcmp(ft_type, "PFAM-B") == 0) {
    (*type) = 2;
    ret = 1;
  } else if (strcmp(ft_type, "PROSITE") == 0) {
    (*type) = 15;
    ret = 1;
  } else if (strcmp(ft_type, "ELM") == 0) {
    (*type) = 19;
    ret = 1;
  } else if (strcmp(ft_type, "DISORDER") == 0) {
    (*type) = 20;
    ret = 1;
  }
  return ret;
}
```