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

```asm
<preip_set_apply_save>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x110,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movq   $0x0,-0x90(%rbp)
  movq   $0x0,-0x88(%rbp)
  movq   $0x0,-0x80(%rbp)
  movq   $0x0,-0x78(%rbp)
  movq   $0x0,-0x70(%rbp)
  movq   $0x0,-0x68(%rbp)
  movq   $0x0,-0x60(%rbp)
  movq   $0x0,-0x58(%rbp)
  movq   $0x0,-0x50(%rbp)
  movq   $0x0,-0x48(%rbp)
  movq   $0x0,-0x40(%rbp)
  movq   $0x0,-0x38(%rbp)
  movq   $0x0,-0x30(%rbp)
  movq   $0x0,-0x28(%rbp)
  movq   $0x0,-0x20(%rbp)
  movq   $0x0,-0x18(%rbp)
  movq   $0x0,-0x110(%rbp)
  movq   $0x0,-0x108(%rbp)
  movq   $0x0,-0x100(%rbp)
  movq   $0x0,-0xf0(%rbp)
  movq   $0x0,-0xe8(%rbp)
  movq   $0x0,-0xe0(%rbp)
  movq   $0x0,-0xd8(%rbp)
  movq   $0x0,-0xd0(%rbp)
  movq   $0x0,-0xc8(%rbp)
  movq   $0x0,-0xc0(%rbp)
  movq   $0x0,-0xb8(%rbp)
  movq   $0x0,-0xf8(%rbp)
  movq   $0x0,-0xb0(%rbp)
  movq   $0x0,-0xa8(%rbp)
  movq   $0x0,-0xa0(%rbp)
  movq   $0x0,-0x98(%rbp)
  lea    D65(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  call   <write_to_nvram@plt>
  mov    $0x0,%eax
  call   <nvram_commit@plt>
  mov    $0x0,%edi
  call   <set_config_sta@plt>
  test   %rax,%rax
  je     L11
  lea    D30(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
L11:
  lea    D33(%rip),%rax
  mov    %rax,%rdi
  call   <nvram_safe_get@plt>
  mov    %rax,-0x110(%rbp)
  mov    -0x110(%rbp),%rdx
  lea    -0x90(%rbp),%rax
  lea    D96(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
  lea    -0x90(%rbp),%rax
  mov    %rax,%rdi
  call   <system@plt>
  lea    -0xf0(%rbp),%rax
  mov    $0x0,%r9d
  mov    $0x20,%r8d
  mov    %rax,%rcx
  lea    D78(%rip),%rax
  mov    %rax,%rdx
  mov    $0x0,%esi
  lea    D28(%rip),%rax
  mov    %rax,%rdi
  call   <ezplib_get_attr_val@plt>
  lea    -0x90(%rbp),%rax
  mov    $0x80,%edx
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <memset@plt>
  lea    -0xf0(%rbp),%rax
  mov    %rax,%rdi
  call   <atoi@plt>
  lea    0x5f(%rax),%edx
  lea    -0x90(%rbp),%rax
  lea    D51(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
  lea    -0x90(%rbp),%rax
  mov    %rax,%rdi
  call   <system@plt>
  lea    -0xf0(%rbp),%rax
  mov    $0x20,%edx
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <memset@plt>
  lea    -0xf0(%rbp),%rax
  mov    $0x0,%r9d
  mov    $0x20,%r8d
  mov    %rax,%rcx
  lea    D6(%rip),%rax
  mov    %rax,%rdx
  mov    $0x0,%esi
  lea    D28(%rip),%rax
  mov    %rax,%rdi
  call   <ezplib_get_attr_val@plt>
  lea    -0x90(%rbp),%rax
  mov    $0x80,%edx
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <memset@plt>
  lea    -0xf0(%rbp),%rax
  mov    %rax,%rdi
  call   <atoi@plt>
  lea    0x5f(%rax),%edx
  lea    -0x90(%rbp),%rax
  lea    D39(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
  lea    -0x90(%rbp),%rax
  mov    %rax,%rdi
  call   <system@plt>
  lea    D43(%rip),%rax
  mov    %rax,%rdi
  call   <system@plt>
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L17
  call   <__stack_chk_fail@plt>
L17:
  leave
  ret
```

tool_calls: name: parse_data
arguments: tag: D65
type_infered: string
name: parse_data
arguments: tag: D30
type_infered: string
name: parse_data
arguments: tag: D33
type_infered: string
name: parse_data
arguments: tag: D96
type_infered: string
name: parse_data
arguments: tag: D78
type_infered: string
name: parse_data
arguments: tag: D28
type_infered: string
name: parse_data
arguments: tag: D51
type_infered: string
name: parse_data
arguments: tag: D6
type_infered: string
name: parse_data
arguments: tag: D39
type_infered: string
name: parse_data
arguments: tag: D43
type_infered: string

tool: D65: preip_set_apply_save


tool: D30: set_config_sta error!


tool: D33: hostname

tool: D96: echo %s > /proc/sys/kernel/hostname

tool: D78: connrssi

tool: D28: wl0_apcli_rule

tool: D51: iwpriv sta0 connrssi %d

tool: D6: disconnrssi

tool: D39: iwpriv sta0 disconnrssi %d

tool: D43: /etc/init.d/network-lan restart 2>/dev/null 1>/dev/null &

assistant: ```c
void preip_set_apply_save(void) {
  char cmd[128] = {0};
  char *sys_name = NULL;
  char *connrssi = NULL;
  char *disconnrssi = NULL;
  char buf[32] = {0};
  char br_name[32] = {0}, *br_get = NULL;
  char buf_proto[32] = {0};
  printf("preip_set_apply_save\n");
  write_to_nvram();
  nvram_commit();
  if (set_config_sta(0)) {
    printf("set_config_sta error!\n");
  }
  sys_name = nvram_safe_get("hostname");
  sprintf(cmd, "echo %s > /proc/sys/kernel/hostname", sys_name);
  system(cmd);
  ezplib_get_attr_val("wl0_apcli_rule", 0, "connrssi", buf, 32, 0);
  memset(cmd, 0, sizeof(cmd));
  sprintf(cmd, "iwpriv sta0 connrssi %d", (atoi(buf) + 95));
  system(cmd);
  memset(buf, 0, sizeof(buf));
  ezplib_get_attr_val("wl0_apcli_rule", 0, "disconnrssi", buf, 32, 0);
  memset(cmd, 0, sizeof(cmd));
  sprintf(cmd, "iwpriv sta0 disconnrssi %d", (atoi(buf) + 95));
  system(cmd);
  system("/etc/init.d/network-lan restart 2>/dev/null 1>/dev/null &");
  return 0;
}
```