user: 请显示与下面列出的汇编代码相匹配的C语言实现：

```asm
<normal_var_and_pointers>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x14,-0x30(%rbp)
  movl   $0xa,-0x2c(%rbp)
  lea    -0x2c(%rbp),%rax
  mov    %rax,-0x28(%rbp)
  lea    -0x2c(%rbp),%rax
  mov    %rax,-0x20(%rbp)
  lea    -0x2c(%rbp),%rax
  mov    %rax,-0x18(%rbp)
  lea    -0x2c(%rbp),%rax
  mov    %rax,-0x10(%rbp)
  mov    -0x2c(%rbp),%eax
  mov    %eax,%esi
  lea    D35(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D134(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x2c(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x2c(%rbp)
  mov    -0x2c(%rbp),%eax
  mov    %eax,%esi
  lea    D80(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D129(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x28(%rbp),%rax
  mov    (%rax),%eax
  lea    -0x1(%rax),%edx
  mov    -0x28(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x28(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,%esi
  lea    D80(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D77(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x20(%rbp),%rax
  mov    (%rax),%eax
  lea    0x1(%rax),%edx
  mov    -0x20(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x20(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,%esi
  lea    D80(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D21(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D65(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D55(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x30(%rbp),%rax
  mov    %rax,-0x18(%rbp)
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,%esi
  lea    D80(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D41(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D53(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x10(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,%esi
  lea    D80(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L9
  call   <__stack_chk_fail@plt>
L9:
  leave
  ret
```

tool_calls: name: retrieve_data
arguments: label: D35
type: string
name: retrieve_data
arguments: label: D134
type: string
name: retrieve_data
arguments: label: D80
type: string
name: retrieve_data
arguments: label: D129
type: string
name: retrieve_data
arguments: label: D77
type: string
name: retrieve_data
arguments: label: D21
type: string
name: retrieve_data
arguments: label: D65
type: string
name: retrieve_data
arguments: label: D55
type: string
name: retrieve_data
arguments: label: D41
type: string
name: retrieve_data
arguments: label: D53
type: string

tool: D35: 
Original value of i: %i

tool: D134: 
	Incrementing value of i via i.

tool: D80: 
		New value of i: %i

tool: D129: 
	Decrementing value of i via pointer `int * ptrToVar`.

tool: D77: 
	Incrementing value of i via pointer to constant location: `int * const ptrToConstantLoc`.

tool: D21: 
	Decrementing value of i via pointer to constant var: `const int * ptrToConstantVar`.

tool: D65: 
ERROR: cannot decrement as to what it points cannot be modified for `const int * ptrToConstantVar`.

tool: D55: 
INFO: Though we can point to entirely different variable.

tool: D41: 
	Incrementing value of i via pointer to constant var and location: `const int * const ptrToConstantVarAndLoc`.

tool: D53: 
ERROR: Cannot change location or value for `const int * const ptrToConstantVarAndLoc`.

assistant: ```c
void normal_var_and_pointers() {
  int other = 20;
  int i = 10;
  int *ptrToVar = &i;
  int *const ptrToConstantLoc = &i;
  const int *ptrToConstantVar = &i;
  const int *const ptrToConstantVarAndLoc = &i;
  printf("\nOriginal value of i: %i", i);
  printf("\n\tIncrementing value of i via i.");
  i++;
  printf("\n\t\tNew value of i: %i", i);
  printf("\n\tDecrementing value of i via pointer `int * ptrToVar`.");
  --*ptrToVar;
  printf("\n\t\tNew value of i: %i", *ptrToVar);
  printf("\n\tIncrementing value of i via pointer to constant location: `int * const ptrToConstantLoc`.");
  ++*ptrToConstantLoc;
  printf("\n\t\tNew value of i: %i", *ptrToConstantLoc);
  printf("\n\tDecrementing value of i via pointer to constant var: `const int * ptrToConstantVar`.");
  printf("\nERROR: cannot decrement as to what it points cannot be modified for `const int * ptrToConstantVar`.");
  printf("\nINFO: Though we can point to entirely different variable.");
  ptrToConstantVar = &other;
  printf("\n\t\tNew value of i: %i", *ptrToConstantVar);
  printf("\n\tIncrementing value of i via pointer to constant var and location: `const int * const ptrToConstantVarAndLoc`.");
  printf("\nERROR: Cannot change location or value for `const int * const ptrToConstantVarAndLoc`.");
  printf("\n\t\tNew value of i: %i", *ptrToConstantVarAndLoc);
}
```