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

```asm
<main>:
  endbr64
  push   %r15
  lea    D4(%rip),%rdi
  push   %r14
  lea    D77(%rip),%r14
  push   %r13
  push   %r12
  lea    D86(%rip),%r12
  push   %rbp
  push   %rbx
  lea    D25(%rip),%rbx
  sub    $0x18,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x8(%rsp)
  xor    %eax,%eax
  mov    %rsp,%r13
  lea    0x4(%rsp),%rbp
  call   <puts@plt>
  nopl   0x0(%rax,%rax,1)
L2:
  mov    %r14,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r13,%rsi
  mov    %rbx,%rdi
  call   <scanf@plt>
  mov    %r12,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %rbp,%rsi
  mov    %rbx,%rdi
  call   <scanf@plt>
  mov    (%rsp),%edi
  mov    0x4(%rsp),%esi
  mov    %edi,%eax
  and    %esi,%eax
  cmp    $0xffffffff,%eax
  je     L42
  test   %esi,%esi
  js     L43
  call   <kuvvet_hesabi@plt>
  lea    D98(%rip),%rcx
  lea    D85(%rip),%rdx
  mov    %eax,%r15d
  lea    D48(%rip),%rsi
  lea    D16(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    0x4(%rsp),%edx
  mov    (%rsp),%esi
  mov    %r15d,%ecx
  lea    D22(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  jmp    L2
  cs nopw 0x0(%rax,%rax,1)
L43:
  lea    D33(%rip),%rdi
  call   <puts@plt>
  jmp    L2
  nopl   0x0(%rax)
L42:
  xor    %eax,%eax
  lea    D54(%rip),%rdi
  call   <printf@plt>
  mov    0x8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L32
  add    $0x18,%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L32:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: retrieve_data
arguments: data_tag: D4
type_guessed: string
name: retrieve_data
arguments: data_tag: D77
type_guessed: string
name: retrieve_data
arguments: data_tag: D86
type_guessed: string
name: retrieve_data
arguments: data_tag: D25
type_guessed: string
name: retrieve_data
arguments: data_tag: D98
type_guessed: string
name: retrieve_data
arguments: data_tag: D85
type_guessed: string
name: retrieve_data
arguments: data_tag: D48
type_guessed: string
name: retrieve_data
arguments: data_tag: D16
type_guessed: string
name: retrieve_data
arguments: data_tag: D22
type_guessed: string
name: retrieve_data
arguments: data_tag: D33
type_guessed: string
name: retrieve_data
arguments: data_tag: D54
type_guessed: string

tool: D4: Programdan cikmak icin us ve tabani -1 giriniz.

tool: D77: Us'su alinacak sayiyi giriniz: 

tool: D86: Sayinin Us'sunu giriniz: 

tool: D25: %d

tool: D98: Sonuc

tool: D85: Ust

tool: D48: Taban

tool: D16: %10s%10s%10s


tool: D22: %10d%10d%10d


tool: D33: Us kuvvetini negatif  bir sayi girmeyiniz.

tool: D54: Programdan ciktiniz :)

assistant: ```c
int main() {
  printf("Programdan cikmak icin us ve tabani -1 giriniz.\n");
  int girilen_taban;
  int girilen_us;
  int sonsuz_dongu = 0;
  while (sonsuz_dongu < 1) {
    printf("Us'su alinacak sayiyi giriniz: ");
    scanf("%d", &girilen_taban);
    printf("Sayinin Us'sunu giriniz: ");
    scanf("%d", &girilen_us);
    if ((girilen_taban == -1) && (girilen_us == -1)) {
      printf("Programdan ciktiniz :)");
      break;
    }
    int sayinin_ussu;
    if (girilen_us >= 0) {
      sayinin_ussu = kuvvet_hesabi(girilen_taban, girilen_us);
      printf("%10s%10s%10s\n", "Taban", "Ust", "Sonuc");
      printf("%10d%10d%10d\n", girilen_taban, girilen_us, sayinin_ussu);
    } else {
      printf("Us kuvvetini negatif  bir sayi girmeyiniz.\n");
    }
  }
  return 0;
}
```