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

```asm
<mask2prefix>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x10,%rsp
  mov    %rdi,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  lea    D303(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L225
  lea    D253(%rip),%rax
  mov    %rax,-0x8(%rbp)
  jmp    L299
L225:
  mov    -0x8(%rbp),%rax
  lea    D304(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L347
  lea    D301(%rip),%rax
  mov    %rax,-0x8(%rbp)
  jmp    L299
L347:
  mov    -0x8(%rbp),%rax
  lea    D487(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L14
  lea    D124(%rip),%rax
  mov    %rax,-0x8(%rbp)
  jmp    L299
L14:
  mov    -0x8(%rbp),%rax
  lea    D294(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L180
  lea    D317(%rip),%rax
  mov    %rax,-0x8(%rbp)
  jmp    L299
L180:
  mov    -0x8(%rbp),%rax
  lea    D436(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L339
  lea    D603(%rip),%rax
  mov    %rax,-0x8(%rbp)
  jmp    L299
L339:
  mov    -0x8(%rbp),%rax
  lea    D573(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L553
  lea    D395(%rip),%rax
  mov    %rax,-0x8(%rbp)
  jmp    L299
L553:
  mov    -0x8(%rbp),%rax
  lea    D328(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L607
  lea    D366(%rip),%rax
  mov    %rax,-0x8(%rbp)
  jmp    L299
L607:
  mov    -0x8(%rbp),%rax
  lea    D491(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L136
  lea    D371(%rip),%rax
  mov    %rax,-0x8(%rbp)
  jmp    L299
L136:
  mov    -0x8(%rbp),%rax
  lea    D651(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L388
  lea    D373(%rip),%rax
  mov    %rax,-0x8(%rbp)
  jmp    L299
L388:
  mov    -0x8(%rbp),%rax
  lea    D312(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L18
  lea    D60(%rip),%rax
  mov    %rax,-0x8(%rbp)
  jmp    L299
L18:
  mov    -0x8(%rbp),%rax
  lea    D479(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L268
  lea    D625(%rip),%rax
  mov    %rax,-0x8(%rbp)
  jmp    L299
L268:
  mov    -0x8(%rbp),%rax
  lea    D107(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L166
  lea    D469(%rip),%rax
  mov    %rax,-0x8(%rbp)
  jmp    L299
L166:
  mov    -0x8(%rbp),%rax
  lea    D335(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L624
  lea    D184(%rip),%rax
  mov    %rax,-0x8(%rbp)
  jmp    L299
L624:
  mov    -0x8(%rbp),%rax
  lea    D555(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L363
  lea    D609(%rip),%rax
  mov    %rax,-0x8(%rbp)
  jmp    L299
L363:
  mov    -0x8(%rbp),%rax
  lea    D220(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L529
  lea    D447(%rip),%rax
  mov    %rax,-0x8(%rbp)
  jmp    L299
L529:
  mov    -0x8(%rbp),%rax
  lea    D151(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L525
  lea    D459(%rip),%rax
  mov    %rax,-0x8(%rbp)
  jmp    L299
L525:
  mov    -0x8(%rbp),%rax
  lea    D622(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L631
  lea    D126(%rip),%rax
  mov    %rax,-0x8(%rbp)
  jmp    L299
L631:
  mov    -0x8(%rbp),%rax
  lea    D394(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L395
  lea    D418(%rip),%rax
  mov    %rax,-0x8(%rbp)
  jmp    L299
L395:
  mov    -0x8(%rbp),%rax
  lea    D640(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L205
  lea    D376(%rip),%rax
  mov    %rax,-0x8(%rbp)
  jmp    L299
L205:
  mov    -0x8(%rbp),%rax
  lea    D13(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L494
  lea    D215(%rip),%rax
  mov    %rax,-0x8(%rbp)
  jmp    L299
L494:
  mov    -0x8(%rbp),%rax
  lea    D333(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L350
  lea    D584(%rip),%rax
  mov    %rax,-0x8(%rbp)
  jmp    L299
L350:
  mov    -0x8(%rbp),%rax
  lea    D346(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L286
  lea    D541(%rip),%rax
  mov    %rax,-0x8(%rbp)
  jmp    L299
L286:
  mov    -0x8(%rbp),%rax
  lea    D426(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L61
  lea    D37(%rip),%rax
  mov    %rax,-0x8(%rbp)
  jmp    L299
L61:
  mov    -0x8(%rbp),%rax
  lea    D271(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L551
  lea    D528(%rip),%rax
  mov    %rax,-0x8(%rbp)
  jmp    L299
L551:
  mov    -0x8(%rbp),%rax
  lea    D280(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L633
  lea    D597(%rip),%rax
  mov    %rax,-0x8(%rbp)
  jmp    L299
L633:
  mov    -0x8(%rbp),%rax
  lea    D592(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L476
  lea    D585(%rip),%rax
  mov    %rax,-0x8(%rbp)
  jmp    L299
L476:
  mov    -0x8(%rbp),%rax
  lea    D330(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L392
  lea    D2(%rip),%rax
  mov    %rax,-0x8(%rbp)
  jmp    L299
L392:
  mov    -0x8(%rbp),%rax
  lea    D320(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L45
  lea    D175(%rip),%rax
  mov    %rax,-0x8(%rbp)
  jmp    L299
L45:
  mov    -0x8(%rbp),%rax
  lea    D663(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L35
  lea    D382(%rip),%rax
  mov    %rax,-0x8(%rbp)
  jmp    L299
L35:
  mov    -0x8(%rbp),%rax
  lea    D19(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L338
  lea    D380(%rip),%rax
  mov    %rax,-0x8(%rbp)
  jmp    L299
L338:
  mov    -0x8(%rbp),%rax
  lea    D224(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L188
  lea    D51(%rip),%rax
  mov    %rax,-0x8(%rbp)
  jmp    L299
L188:
  mov    -0x8(%rbp),%rax
  lea    D17(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L504
  lea    D446(%rip),%rax
  mov    %rax,-0x8(%rbp)
  jmp    L299
L504:
  mov    -0x8(%rbp),%rax
  lea    D517(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L25
  lea    D311(%rip),%rax
  mov    %rax,-0x8(%rbp)
  jmp    L299
L25:
  lea    D14(%rip),%rax
  mov    %rax,-0x8(%rbp)
L299:
  mov    -0x8(%rbp),%rax
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_tag: D303
datatype: string
name: extract_symbolic_data
arguments: data_tag: D253
datatype: string
name: extract_symbolic_data
arguments: data_tag: D304
datatype: string
name: extract_symbolic_data
arguments: data_tag: D301
datatype: string
name: extract_symbolic_data
arguments: data_tag: D487
datatype: string
name: extract_symbolic_data
arguments: data_tag: D124
datatype: string
name: extract_symbolic_data
arguments: data_tag: D294
datatype: string
name: extract_symbolic_data
arguments: data_tag: D317
datatype: string
name: extract_symbolic_data
arguments: data_tag: D436
datatype: string
name: extract_symbolic_data
arguments: data_tag: D603
datatype: string
name: extract_symbolic_data
arguments: data_tag: D573
datatype: string
name: extract_symbolic_data
arguments: data_tag: D395
datatype: string
name: extract_symbolic_data
arguments: data_tag: D328
datatype: string
name: extract_symbolic_data
arguments: data_tag: D366
datatype: string
name: extract_symbolic_data
arguments: data_tag: D491
datatype: string
name: extract_symbolic_data
arguments: data_tag: D371
datatype: string
name: extract_symbolic_data
arguments: data_tag: D651
datatype: string
name: extract_symbolic_data
arguments: data_tag: D373
datatype: string
name: extract_symbolic_data
arguments: data_tag: D312
datatype: string
name: extract_symbolic_data
arguments: data_tag: D60
datatype: string
name: extract_symbolic_data
arguments: data_tag: D479
datatype: string
name: extract_symbolic_data
arguments: data_tag: D625
datatype: string
name: extract_symbolic_data
arguments: data_tag: D107
datatype: string
name: extract_symbolic_data
arguments: data_tag: D469
datatype: string
name: extract_symbolic_data
arguments: data_tag: D335
datatype: string
name: extract_symbolic_data
arguments: data_tag: D184
datatype: string
name: extract_symbolic_data
arguments: data_tag: D555
datatype: string
name: extract_symbolic_data
arguments: data_tag: D609
datatype: string
name: extract_symbolic_data
arguments: data_tag: D220
datatype: string
name: extract_symbolic_data
arguments: data_tag: D447
datatype: string
name: extract_symbolic_data
arguments: data_tag: D151
datatype: string
name: extract_symbolic_data
arguments: data_tag: D459
datatype: string
name: extract_symbolic_data
arguments: data_tag: D622
datatype: string
name: extract_symbolic_data
arguments: data_tag: D126
datatype: string
name: extract_symbolic_data
arguments: data_tag: D394
datatype: string
name: extract_symbolic_data
arguments: data_tag: D418
datatype: string
name: extract_symbolic_data
arguments: data_tag: D640
datatype: string
name: extract_symbolic_data
arguments: data_tag: D376
datatype: string
name: extract_symbolic_data
arguments: data_tag: D13
datatype: string
name: extract_symbolic_data
arguments: data_tag: D215
datatype: string
name: extract_symbolic_data
arguments: data_tag: D333
datatype: string
name: extract_symbolic_data
arguments: data_tag: D584
datatype: string
name: extract_symbolic_data
arguments: data_tag: D346
datatype: string
name: extract_symbolic_data
arguments: data_tag: D541
datatype: string
name: extract_symbolic_data
arguments: data_tag: D426
datatype: string
name: extract_symbolic_data
arguments: data_tag: D37
datatype: string
name: extract_symbolic_data
arguments: data_tag: D271
datatype: string
name: extract_symbolic_data
arguments: data_tag: D528
datatype: string
name: extract_symbolic_data
arguments: data_tag: D280
datatype: string
name: extract_symbolic_data
arguments: data_tag: D597
datatype: string
name: extract_symbolic_data
arguments: data_tag: D592
datatype: string
name: extract_symbolic_data
arguments: data_tag: D585
datatype: string
name: extract_symbolic_data
arguments: data_tag: D330
datatype: string
name: extract_symbolic_data
arguments: data_tag: D2
datatype: string
name: extract_symbolic_data
arguments: data_tag: D320
datatype: string
name: extract_symbolic_data
arguments: data_tag: D175
datatype: string
name: extract_symbolic_data
arguments: data_tag: D663
datatype: string
name: extract_symbolic_data
arguments: data_tag: D382
datatype: string
name: extract_symbolic_data
arguments: data_tag: D19
datatype: string
name: extract_symbolic_data
arguments: data_tag: D380
datatype: string
name: extract_symbolic_data
arguments: data_tag: D224
datatype: string
name: extract_symbolic_data
arguments: data_tag: D51
datatype: string
name: extract_symbolic_data
arguments: data_tag: D17
datatype: string
name: extract_symbolic_data
arguments: data_tag: D446
datatype: string
name: extract_symbolic_data
arguments: data_tag: D517
datatype: string
name: extract_symbolic_data
arguments: data_tag: D311
datatype: string
name: extract_symbolic_data
arguments: data_tag: D14
datatype: string

tool: D303: 0.0.0.0

tool: D253: 0

tool: D304: 128.0.0.0

tool: D301: 1

tool: D487: 192.0.0.0

tool: D124: 2

tool: D294: 224.0.0.0

tool: D317: 3

tool: D436: 240.0.0.0

tool: D603: 4

tool: D573: 248.0.0.0

tool: D395: 5

tool: D328: 252.0.0.0

tool: D366: 6

tool: D491: 254.0.0.0

tool: D371: 7

tool: D651: 255.0.0.0

tool: D373: 8

tool: D312: 255.128.0.0

tool: D60: 9

tool: D479: 255.192.0.0

tool: D625: 10

tool: D107: 255.224.0.0

tool: D469: 11

tool: D335: 255.240.0.0

tool: D184: 12

tool: D555: 255.248.0.0

tool: D609: 13

tool: D220: 255.252.0.0

tool: D447: 14

tool: D151: 255.254.0.0

tool: D459: 15

tool: D622: 255.255.0.0

tool: D126: 16

tool: D394: 255.255.128.0

tool: D418: 17

tool: D640: 255.255.192.0

tool: D376: 18

tool: D13: 255.255.224.0

tool: D215: 19

tool: D333: 255.255.240.0

tool: D584: 20

tool: D346: 255.255.248.0

tool: D541: 21

tool: D426: 255.255.252.0

tool: D37: 22

tool: D271: 255.255.254.0

tool: D528: 23

tool: D280: 255.255.255.0

tool: D597: 24

tool: D592: 255.255.255.128

tool: D585: 25

tool: D330: 255.255.255.192

tool: D2: 26

tool: D320: 255.255.255.224

tool: D175: 27

tool: D663: 255.255.255.240

tool: D382: 28

tool: D19: 255.255.255.248

tool: D380: 29

tool: D224: 255.255.255.252

tool: D51: 30

tool: D17: 255.255.255.254

tool: D446: 31

tool: D517: 255.255.255.255

tool: D311: 32

tool: 

assistant: ```c
char *mask2prefix(char *mask) {
  if (!strcmp(mask, "0.0.0.0"))
    mask = "0";
  else if (!strcmp(mask, "128.0.0.0"))
    mask = "1";
  else if (!strcmp(mask, "192.0.0.0"))
    mask = "2";
  else if (!strcmp(mask, "224.0.0.0"))
    mask = "3";
  else if (!strcmp(mask, "240.0.0.0"))
    mask = "4";
  else if (!strcmp(mask, "248.0.0.0"))
    mask = "5";
  else if (!strcmp(mask, "252.0.0.0"))
    mask = "6";
  else if (!strcmp(mask, "254.0.0.0"))
    mask = "7";
  else if (!strcmp(mask, "255.0.0.0"))
    mask = "8";
  else if (!strcmp(mask, "255.128.0.0"))
    mask = "9";
  else if (!strcmp(mask, "255.192.0.0"))
    mask = "10";
  else if (!strcmp(mask, "255.224.0.0"))
    mask = "11";
  else if (!strcmp(mask, "255.240.0.0"))
    mask = "12";
  else if (!strcmp(mask, "255.248.0.0"))
    mask = "13";
  else if (!strcmp(mask, "255.252.0.0"))
    mask = "14";
  else if (!strcmp(mask, "255.254.0.0"))
    mask = "15";
  else if (!strcmp(mask, "255.255.0.0"))
    mask = "16";
  else if (!strcmp(mask, "255.255.128.0"))
    mask = "17";
  else if (!strcmp(mask, "255.255.192.0"))
    mask = "18";
  else if (!strcmp(mask, "255.255.224.0"))
    mask = "19";
  else if (!strcmp(mask, "255.255.240.0"))
    mask = "20";
  else if (!strcmp(mask, "255.255.248.0"))
    mask = "21";
  else if (!strcmp(mask, "255.255.252.0"))
    mask = "22";
  else if (!strcmp(mask, "255.255.254.0"))
    mask = "23";
  else if (!strcmp(mask, "255.255.255.0"))
    mask = "24";
  else if (!strcmp(mask, "255.255.255.128"))
    mask = "25";
  else if (!strcmp(mask, "255.255.255.192"))
    mask = "26";
  else if (!strcmp(mask, "255.255.255.224"))
    mask = "27";
  else if (!strcmp(mask, "255.255.255.240"))
    mask = "28";
  else if (!strcmp(mask, "255.255.255.248"))
    mask = "29";
  else if (!strcmp(mask, "255.255.255.252"))
    mask = "30";
  else if (!strcmp(mask, "255.255.255.254"))
    mask = "31";
  else if (!strcmp(mask, "255.255.255.255"))
    mask = "32";
  else
    mask = "";
  return mask;
}
```