user: Converte this assembly snippet into its equivalent C code:

```asm
<t1>:
  endbr64
  push   %rbx
  mov    %edi,%ebx
  lea    D41(%rip),%rdi
  call   <printf@plt>
  mov    $0x0,%edx
  mov    $0x19,%esi
  mov    %ebx,%edi
  call   <set_mode@plt>
  mov    $0x19,%esi
  mov    %ebx,%edi
  call   <get_mode@plt>
  mov    %eax,%edx
  lea    D55(%rip),%r9
  mov    $0x0,%r8d
  mov    $0x0,%ecx
  mov    $0x1,%esi
  mov    $0x1,%edi
  call   <CHECK@plt>
  mov    $0x2,%edx
  mov    $0x19,%esi
  mov    %ebx,%edi
  call   <set_pull_up_down@plt>
  mov    $0x19,%esi
  mov    %ebx,%edi
  call   <gpio_read@plt>
  mov    %eax,%edx
  lea    D38(%rip),%r9
  mov    $0x0,%r8d
  mov    $0x1,%ecx
  mov    $0x2,%esi
  mov    $0x1,%edi
  call   <CHECK@plt>
  mov    $0x1,%edx
  mov    $0x19,%esi
  mov    %ebx,%edi
  call   <set_pull_up_down@plt>
  mov    $0x19,%esi
  mov    %ebx,%edi
  call   <gpio_read@plt>
  mov    %eax,%edx
  lea    D38(%rip),%r9
  mov    $0x0,%r8d
  mov    $0x0,%ecx
  mov    $0x3,%esi
  mov    $0x1,%edi
  call   <CHECK@plt>
  mov    $0x0,%edx
  mov    $0x19,%esi
  mov    %ebx,%edi
  call   <gpio_write@plt>
  mov    $0x19,%esi
  mov    %ebx,%edi
  call   <get_mode@plt>
  mov    %eax,%edx
  lea    D10(%rip),%r9
  mov    $0x0,%r8d
  mov    $0x1,%ecx
  mov    $0x4,%esi
  mov    $0x1,%edi
  call   <CHECK@plt>
  mov    $0x19,%esi
  mov    %ebx,%edi
  call   <gpio_read@plt>
  mov    %eax,%edx
  lea    D48(%rip),%r9
  mov    $0x0,%r8d
  mov    $0x0,%ecx
  mov    $0x5,%esi
  mov    $0x1,%edi
  call   <CHECK@plt>
  mov    $0x1,%edx
  mov    $0x19,%esi
  mov    %ebx,%edi
  call   <gpio_write@plt>
  mov    $0x19,%esi
  mov    %ebx,%edi
  call   <gpio_read@plt>
  mov    %eax,%edx
  lea    D59(%rip),%r9
  mov    $0x0,%r8d
  mov    $0x1,%ecx
  mov    $0x6,%esi
  mov    $0x1,%edi
  call   <CHECK@plt>
  lea    D53(%rip),%rsi
  lea    D78(%rip),%rdi
  call   <pigpio_start@plt>
  mov    %eax,%ebx
  lea    D21(%rip),%r9
  mov    $0x64,%r8d
  mov    $0x1f,%ecx
  mov    %eax,%edx
  mov    $0x7,%esi
  mov    $0x1,%edi
  call   <CHECK@plt>
  mov    %ebx,%edi
  call   <pigpio_stop@plt>
  pop    %rbx
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_label: D41
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D55
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D38
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D10
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D48
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D59
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D53
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D78
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D21
type_guessed: string

tool: D41: Mode/PUD/read/write tests.


tool: D55: set mode, get mode

tool: D38: set pull up down, read

tool: D10: write, get mode

tool: D48: read

tool: D59: write, read

tool: D53: 8888

tool: D78: localhost

tool: D21: pigpio_start with non-default arguments

assistant: ```c
void t1(int pi) {
  int v;
  printf("Mode/PUD/read/write tests.\n");
  set_mode(pi, 25, 0);
  v = get_mode(pi, 25);
  CHECK(1, 1, v, 0, 0, "set mode, get mode");
  set_pull_up_down(pi, 25, 2);
  v = gpio_read(pi, 25);
  CHECK(1, 2, v, 1, 0, "set pull up down, read");
  set_pull_up_down(pi, 25, 1);
  v = gpio_read(pi, 25);
  CHECK(1, 3, v, 0, 0, "set pull up down, read");
  gpio_write(pi, 25, 0);
  v = get_mode(pi, 25);
  CHECK(1, 4, v, 1, 0, "write, get mode");
  v = gpio_read(pi, 25);
  CHECK(1, 5, v, 0, 0, "read");
  gpio_write(pi, 25, 1);
  v = gpio_read(pi, 25);
  CHECK(1, 6, v, 1, 0, "write, read");
  v = pigpio_start("localhost", "8888");
  CHECK(1, 7, v, 31, 100, "pigpio_start with non-default arguments");
  pigpio_stop(v);
}
```