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

```asm
<get_hash_key>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x18,%rsp
  mov    %ecx,%r14d
  test   %esi,%esi
  jle    L52
  mov    %rdi,%r15
  mov    %edx,%r12d
  mov    %esi,%eax
  mov    %rax,0x8(%rsp)
  mov    $0x0,%ebx
  mov    $0x0,%r13d
  mov    $0x0,%ebp
  jmp    L53
  mov    $0x0,%ebp
  jmp    L50
  mov    $0x1,%ebp
L50:
  cmp    %r12d,%ebp
  jge    L228
L141:
  test   %r14d,%r14d
  je     L156
  mov    0x4(%rsp),%esi
  mov    %r12d,%edi
  call   <pow@plt>
  imul   %ebp,%eax
  add    %eax,%r13d
  add    $0x1,%rbx
  cmp    0x8(%rsp),%rbx
  je     L263
L53:
  mov    %ebx,0x4(%rsp)
  movzbl (%r15,%rbx,1),%esi
  lea    -0x2a(%rsi),%eax
  cmp    $0x30,%al
  ja     L50
  movzbl %al,%eax
  lea    D3(%rip),%rdx
  movslq (%rdx,%rax,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  mov    $0x2,%ebp
  jmp    L50
  mov    $0x3,%ebp
  jmp    L50
  mov    $0x4,%ebp
  jmp    L50
  mov    $0x5,%ebp
  jmp    L50
  mov    $0x6,%ebp
  jmp    L50
  mov    $0x7,%ebp
  jmp    L50
  mov    $0x8,%ebp
  jmp    L50
  mov    $0x9,%ebp
  jmp    L50
  mov    $0xa,%ebp
  jmp    L50
  mov    $0xb,%ebp
  jmp    L50
  mov    $0xc,%ebp
  jmp    L50
  mov    $0xd,%ebp
  jmp    L50
  mov    $0xe,%ebp
  jmp    L50
  mov    $0xf,%ebp
  jmp    L50
  mov    $0x10,%ebp
  jmp    L50
  mov    $0x11,%ebp
  jmp    L50
  mov    $0x12,%ebp
  jmp    L50
  mov    $0x13,%ebp
  jmp    L50
  mov    $0x14,%ebp
  jmp    L50
  mov    $0x15,%ebp
  jmp    L50
  mov    $0x16,%ebp
  jmp    L50
  mov    $0x17,%ebp
  jmp    L50
  mov    $0x18,%ebp
  jmp    L50
  mov    $0x19,%ebp
  jmp    L50
  mov    $0x1a,%ebp
  jmp    L50
L228:
  movsbl %sil,%esi
  lea    D15(%rip),%rdi
  call   <printf@plt>
  mov    $0x0,%edi
  call   <exit@plt>
  mov    $0x0,%ebp
  jmp    L141
L52:
  mov    $0x0,%r13d
  mov    $0x0,%ebp
L263:
  cmp    $0x1,%r14d
  cmove  %r13d,%ebp
L156:
  mov    %ebp,%eax
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
```

tool_calls: name: retrieve_data
arguments: label: D15
type: string

tool: D15: no such symbol (%c)


assistant: ```c
int get_hash_key(char *d, int n, int alphn, int f) {
  int i, j, m = 0, h = 0;
  for (i = 0; i < n; i++) {
    switch (d[i]) {
    case 'A':
      m = 0;
      break;
    case 'C':
      m = 1;
      break;
    case 'G':
      m = 2;
      break;
    case 'T':
      m = 3;
      break;
    case 'N':
      m = 4;
      break;
    case '-':
      m = 5;
      break;
    case 'B':
      m = 6;
      break;
    case 'D':
      m = 7;
      break;
    case 'H':
      m = 8;
      break;
    case 'K':
      m = 9;
      break;
    case 'M':
      m = 10;
      break;
    case 'R':
      m = 11;
      break;
    case 'S':
      m = 12;
      break;
    case 'V':
      m = 13;
      break;
    case 'W':
      m = 14;
      break;
    case 'Y':
      m = 15;
      break;
    case 'L':
      m = 16;
      break;
    case 'E':
      m = 17;
      break;
    case 'F':
      m = 18;
      break;
    case 'I':
      m = 19;
      break;
    case 'O':
      m = 20;
      break;
    case 'P':
      m = 21;
      break;
    case 'Q':
      m = 22;
      break;
    case 'U':
      m = 23;
      break;
    case 'X':
      m = 24;
      break;
    case 'Z':
      m = 25;
      break;
    case '*':
      m = 26;
      break;
    }
    if (m + 1 > alphn) {
      printf("no such symbol (%c)\n", d[i]);
      m = 0;
      exit(0);
    }
    if (f == 0)
      break;
    h += m * pow(alphn, i);
  }
  if (f == 1)
    return h;
  else
    return m;
}
```