user: What would the C source look like for the assembly code provided here?

```asm
<relacao_01>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x50,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x313052,-0xc(%rbp)
  movl   $0x1,-0x3c(%rbp)
  movl   $0x2,-0x38(%rbp)
  movl   $0x3,-0x34(%rbp)
  movl   $0x1,-0x30(%rbp)
  movl   $0x2,-0x2c(%rbp)
  movl   $0x3,-0x28(%rbp)
  movl   $0x2,-0x24(%rbp)
  movl   $0x1,-0x20(%rbp)
  movl   $0x1,-0x1c(%rbp)
  movl   $0x0,-0x50(%rbp)
  movl   $0x0,-0x4c(%rbp)
  movl   $0x1,-0x48(%rbp)
  movl   $0x1,-0x44(%rbp)
  movl   $0x0,-0x40(%rbp)
  mov    $0xa,%edi
  call   <putchar@plt>
  lea    -0x30(%rbp),%rax
  mov    %rax,%rdi
  call   <ehReflexiva@plt>
  cmp    %eax,-0x50(%rbp)
  je     L40
  lea    -0xc(%rbp),%rax
  mov    %rax,%rsi
  lea    D25(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L40:
  mov    $0x0,%eax
  call   <ehSimetrica@plt>
  cmp    %eax,-0x4c(%rbp)
  je     L58
  lea    -0xc(%rbp),%rax
  mov    %rax,%rsi
  lea    D24(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L58:
  mov    $0x0,%eax
  call   <ehTransitiva@plt>
  cmp    %eax,-0x48(%rbp)
  je     L1
  lea    -0xc(%rbp),%rax
  mov    %rax,%rsi
  lea    D18(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L1:
  mov    $0x0,%eax
  call   <ehAntiSimetrica@plt>
  cmp    %eax,-0x44(%rbp)
  je     L28
  lea    -0xc(%rbp),%rax
  mov    %rax,%rsi
  lea    D43(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L28:
  mov    $0x0,%eax
  call   <ehEquivalencia@plt>
  cmp    %eax,-0x40(%rbp)
  je     L47
  lea    -0xc(%rbp),%rax
  mov    %rax,%rsi
  lea    D49(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L47:
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L29
  call   <__stack_chk_fail@plt>
L29:
  leave
  ret
```

tool_calls: name: retrieve_data
arguments: label: D25
data_type: string
name: retrieve_data
arguments: label: D24
data_type: string
name: retrieve_data
arguments: label: D18
data_type: string
name: retrieve_data
arguments: label: D43
data_type: string
name: retrieve_data
arguments: label: D49
data_type: string

tool: D25: ERRO: [%s] - Problema na propriedade reflexiva!


tool: D24: ERRO: [%s] - Problema na propriedade simetrica!


tool: D18: ERRO: [%s] - Problema na propriedade transitiva!


tool: D43: ERRO: [%s] - Problema na propriedade anti-simetrica!


tool: D49: ERRO: [%s] - Problema na verifiacao da equivalencia!


assistant: ```c
void relacao_01() {
  char nome[4] = "R01";
  int conjS[3] = {1, 2, 3};
  int rho[3][2] = {{1, 2}, {3, 2}, {1, 1}};
  int reflexiva = 0;
  int simetrica = 0;
  int transitiva = 1;
  int anti_simetrica = 1;
  int equivalencia = 0;
  printf("\n");
  if (ehReflexiva(rho) != reflexiva) {
    printf("ERRO: [%s] - Problema na propriedade reflexiva!\n", nome);
  }
  if (ehSimetrica() != simetrica) {
    printf("ERRO: [%s] - Problema na propriedade simetrica!\n", nome);
  }
  if (ehTransitiva() != transitiva) {
    printf("ERRO: [%s] - Problema na propriedade transitiva!\n", nome);
  }
  if (ehAntiSimetrica() != anti_simetrica) {
    printf("ERRO: [%s] - Problema na propriedade anti-simetrica!\n", nome);
  }
  if (ehEquivalencia() != equivalencia) {
    printf("ERRO: [%s] - Problema na verifiacao da equivalencia!\n", nome);
  }
}
```