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

```asm
<deputy_nullcheck>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x50,%rsp
  mov    %rdi,-0x48(%rbp)
  mov    %esi,-0x4c(%rbp)
  mov    %edx,-0x50(%rbp)
  movl   $0x0,-0x34(%rbp)
  cmpl   $0x4,-0x50(%rbp)
  je     L38
  cmpl   $0x4,-0x50(%rbp)
  ja     L8
  cmpl   $0x1,-0x50(%rbp)
  je     L165
  cmpl   $0x2,-0x50(%rbp)
  je     L54
  jmp    L8
L165:
  mov    -0x48(%rbp),%rax
  mov    %rax,-0x30(%rbp)
  mov    -0x4c(%rbp),%edx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x8(%rbp)
  jmp    L97
L68:
  addq   $0x1,-0x30(%rbp)
L97:
  mov    -0x30(%rbp),%rax
  cmp    -0x8(%rbp),%rax
  jae    L83
  mov    -0x30(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L68
L83:
  mov    -0x30(%rbp),%rax
  cmp    -0x8(%rbp),%rax
  setae  %al
  movzbl %al,%eax
  mov    %eax,-0x34(%rbp)
  jmp    L112
L54:
  mov    -0x48(%rbp),%rax
  mov    %rax,-0x28(%rbp)
  mov    -0x4c(%rbp),%eax
  lea    (%rax,%rax,1),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x10(%rbp)
  jmp    L154
L4:
  addq   $0x2,-0x28(%rbp)
L154:
  mov    -0x28(%rbp),%rax
  cmp    -0x10(%rbp),%rax
  jae    L113
  mov    -0x28(%rbp),%rax
  movzwl (%rax),%eax
  test   %ax,%ax
  jne    L4
L113:
  mov    -0x28(%rbp),%rax
  cmp    -0x10(%rbp),%rax
  setae  %al
  movzbl %al,%eax
  mov    %eax,-0x34(%rbp)
  jmp    L112
L38:
  mov    -0x48(%rbp),%rax
  mov    %rax,-0x20(%rbp)
  mov    -0x4c(%rbp),%eax
  lea    0x0(,%rax,8),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x18(%rbp)
  jmp    L21
L20:
  addq   $0x8,-0x20(%rbp)
L21:
  mov    -0x20(%rbp),%rax
  cmp    -0x18(%rbp),%rax
  jae    L163
  mov    -0x20(%rbp),%rax
  mov    (%rax),%rax
  test   %rax,%rax
  jne    L20
L163:
  mov    -0x20(%rbp),%rax
  cmp    -0x18(%rbp),%rax
  setae  %al
  movzbl %al,%eax
  mov    %eax,-0x34(%rbp)
  jmp    L112
L8:
  lea    D10(%rip),%r8
  mov    $0x6d,%ecx
  lea    D3(%rip),%rax
  mov    %rax,%rdx
  lea    D22(%rip),%rax
  mov    %rax,%rsi
  lea    D23(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <deputy_fail_mayreturn@plt>
L112:
  mov    -0x34(%rbp),%eax
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: data_tag: D10
type_infered: string
name: disassemble_data
arguments: data_tag: D3
type_infered: string
name: disassemble_data
arguments: data_tag: D22
type_infered: string
name: disassemble_data
arguments: data_tag: D23
type_infered: string

tool: D10: deputy_nullcheck

tool: D3: /scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/2022-01-22/02-19-57/repos/spl/ivy/refs/heads/master/deputy-include/deputy/checks.h

tool: 

tool: D23: Bug: Invalid byte size for nullcheck.


assistant: ```c
__attribute__((regparm(0))) int deputy_nullcheck(const volatile void *e, unsigned int len, unsigned int bytes) {
  int success = 0;
  switch (bytes) {
  case 1:
    do {
      char *p1 = (char *)e;
      char *p2 = ((char *)e) + len;
      while (p1 < p2 && *p1 != 0) {
        p1++;
      }
      success = (p1 >= p2);
    } while (0);
    break;
  case 2:
    do {
      short *p1 = (short *)e;
      short *p2 = ((short *)e) + len;
      while (p1 < p2 && *p1 != 0) {
        p1++;
      }
      success = (p1 >= p2);
    } while (0);
    break;
  case 4:
    do {
      long *p1 = (long *)e;
      long *p2 = ((long *)e) + len;
      while (p1 < p2 && *p1 != 0) {
        p1++;
      }
      success = (p1 >= p2);
    } while (0);
    break;
  default:
    deputy_fail_mayreturn("Bug: Invalid byte size for nullcheck.\n", "", "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/2022-01-22/02-19-57/repos/spl/ivy/refs/heads/master/deputy-include/deputy/checks.h", 109, __FUNCTION__);
  }
  return success;
}
```