user: 请将以下的汇编代码转换成C语言代码:

```asm
<FileExtensionToProtocolInfo>:
  endbr64
  push   %rbp
  mov    %rdi,%rbp
  push   %rbx
  sub    $0x28,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x18(%rsp)
  xor    %eax,%eax
  test   %esi,%esi
  jne    L38
L122:
  cmpb   $0x2e,0x0(%rbp)
  je     L142
  mov    %rbp,%rsi
  lea    0x4(%rsp),%rbx
  lea    0x5(%rsp),%rdi
  movb   $0x2e,0x4(%rsp)
  call   <strcpy@plt>
  mov    %rbx,%rbp
L142:
  lea    D64(%rip),%rsi
  mov    %rbp,%rdi
  call   <stricmp@plt>
  mov    %rax,%r8
  lea    D81(%rip),%rax
  test   %r8,%r8
  jne    L66
L140:
  mov    0x18(%rsp),%rdx
  sub    %fs:0x28,%rdx
  jne    L104
  add    $0x28,%rsp
  pop    %rbx
  pop    %rbp
  ret
  nopw   0x0(%rax,%rax,1)
L38:
  lea    0xe(%rsp),%rbx
  mov    %rdi,%rsi
  xor    %r8d,%r8d
  mov    $0x1,%ecx
  mov    $0xa,%edx
  mov    %rbx,%rdi
  mov    %rbx,%rbp
  call   <strToUtf8@plt>
  jmp    L122
  nopl   (%rax)
L66:
  lea    D67(%rip),%rsi
  mov    %rbp,%rdi
  call   <stricmp@plt>
  mov    %rax,%r8
  lea    D155(%rip),%rax
  test   %r8,%r8
  je     L140
  lea    D26(%rip),%rsi
  mov    %rbp,%rdi
  call   <stricmp@plt>
  mov    %rax,%r8
  lea    D175(%rip),%rax
  test   %r8,%r8
  je     L140
  lea    D154(%rip),%rsi
  mov    %rbp,%rdi
  call   <stricmp@plt>
  mov    %rax,%r8
  lea    D185(%rip),%rax
  test   %r8,%r8
  je     L140
  lea    D117(%rip),%rsi
  mov    %rbp,%rdi
  call   <stricmp@plt>
  mov    %rax,%r8
  lea    D36(%rip),%rax
  test   %r8,%r8
  je     L140
  lea    D87(%rip),%rsi
  mov    %rbp,%rdi
  call   <stricmp@plt>
  mov    %rax,%r8
  lea    D225(%rip),%rax
  test   %r8,%r8
  je     L140
  lea    D209(%rip),%rsi
  mov    %rbp,%rdi
  call   <stricmp@plt>
  mov    %rax,%r8
  lea    D167(%rip),%rax
  test   %r8,%r8
  je     L140
  lea    D143(%rip),%rsi
  mov    %rbp,%rdi
  call   <stricmp@plt>
  mov    %rax,%r8
  lea    D220(%rip),%rax
  test   %r8,%r8
  je     L140
  lea    D100(%rip),%rsi
  mov    %rbp,%rdi
  call   <stricmp@plt>
  test   %rax,%rax
  jne    L62
L123:
  lea    D194(%rip),%rax
  jmp    L140
L104:
  call   <__stack_chk_fail@plt>
L62:
  lea    D125(%rip),%rsi
  mov    %rbp,%rdi
  call   <stricmp@plt>
  test   %rax,%rax
  je     L123
  lea    D86(%rip),%rsi
  mov    %rbp,%rdi
  call   <stricmp@plt>
  mov    %rax,%r8
  lea    D78(%rip),%rax
  test   %r8,%r8
  je     L140
  lea    D201(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmpi@plt>
  lea    D40(%rip),%rdx
  test   %rax,%rax
  lea    D102(%rip),%rax
  cmovne %rdx,%rax
  jmp    L140
```

tool_calls: name: retrieve_data
arguments: tag: D64
type: string
name: retrieve_data
arguments: tag: D81
type: string
name: retrieve_data
arguments: tag: D67
type: string
name: retrieve_data
arguments: tag: D155
type: string
name: retrieve_data
arguments: tag: D26
type: string
name: retrieve_data
arguments: tag: D175
type: string
name: retrieve_data
arguments: tag: D154
type: string
name: retrieve_data
arguments: tag: D185
type: string
name: retrieve_data
arguments: tag: D117
type: string
name: retrieve_data
arguments: tag: D36
type: string
name: retrieve_data
arguments: tag: D87
type: string
name: retrieve_data
arguments: tag: D225
type: string
name: retrieve_data
arguments: tag: D209
type: string
name: retrieve_data
arguments: tag: D167
type: string
name: retrieve_data
arguments: tag: D143
type: string
name: retrieve_data
arguments: tag: D220
type: string
name: retrieve_data
arguments: tag: D100
type: string
name: retrieve_data
arguments: tag: D194
type: string
name: retrieve_data
arguments: tag: D125
type: string
name: retrieve_data
arguments: tag: D86
type: string
name: retrieve_data
arguments: tag: D78
type: string
name: retrieve_data
arguments: tag: D201
type: string
name: retrieve_data
arguments: tag: D40
type: string
name: retrieve_data
arguments: tag: D102
type: string

tool: D64: .mp3

tool: D81: http-get:*:audio/mpeg:*

tool: D67: .wma

tool: D155: http-get:*:audio/x-ms-wma:*

tool: D26: .ogg

tool: D175: http-get:*:audio/x-ogg:*

tool: D154: .asx

tool: D185: http-get:*:audio/x-ms-asx:*

tool: D117: .asf

tool: D36: http-get:*:video/x-ms-asf:*

tool: D87: .wmv

tool: D225: http-get:*:video/x-ms-wmv:*

tool: D209: .mpg

tool: D167: http-get:*:video/mpeg:*

tool: D143: .mov

tool: D220: http-get:*:video/quicktime:*

tool: D100: .jpg

tool: D194: http-get:*:image/jpeg:*

tool: D125: .jpeg

tool: D86: .bmp

tool: D78: http-get:*:image/bmp:*

tool: D201: .m3u

tool: D40: http-get:*:application/octet-stream:*

tool: D102: http-get:*:audio/mpegurl:*

assistant: ```c
char *FileExtensionToProtocolInfo(char *extension, int wide) {
  char tempExtension[10], temp2[10];
  char *retVal = NULL;
  if (wide) {
    strToUtf8(temp2, extension, 10, 1, NULL);
    extension = temp2;
  }
  if (extension[0] != '.') {
    tempExtension[0] = '.';
    strcpy(tempExtension + 1, extension);
    extension = tempExtension;
  }
  if (stricmp(extension, ".mp3") == 0) {
    retVal = "http-get:*:audio/mpeg:*";
  } else if (stricmp(extension, ".wma") == 0) {
    retVal = "http-get:*:audio/x-ms-wma:*";
  } else if (stricmp(extension, ".ogg") == 0) {
    retVal = "http-get:*:audio/x-ogg:*";
  } else if (stricmp(extension, ".asx") == 0) {
    retVal = "http-get:*:audio/x-ms-asx:*";
  } else if (stricmp(extension, ".asf") == 0) {
    retVal = "http-get:*:video/x-ms-asf:*";
  } else if (stricmp(extension, ".wmv") == 0) {
    retVal = "http-get:*:video/x-ms-wmv:*";
  } else if (stricmp(extension, ".mpg") == 0) {
    retVal = "http-get:*:video/mpeg:*";
  } else if (stricmp(extension, ".mov") == 0) {
    retVal = "http-get:*:video/quicktime:*";
  } else if (stricmp(extension, ".jpg") == 0) {
    retVal = "http-get:*:image/jpeg:*";
  } else if (stricmp(extension, ".jpeg") == 0) {
    retVal = "http-get:*:image/jpeg:*";
  } else if (stricmp(extension, ".bmp") == 0) {
    retVal = "http-get:*:image/bmp:*";
  } else if (strcmpi(extension, ".m3u") == 0) {
    retVal = "http-get:*:audio/mpegurl:*";
  } else {
    retVal = "http-get:*:application/octet-stream:*";
  }
  return retVal;
}
```