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

```asm
<run_life>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbx
  sub    $0x88,%rsp
  mov    %rdi,-0x88(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x38(%rbp)
  xor    %eax,%eax
  mov    D57(%rip),%rax
  mov    (%rax),%esi
  movslq %esi,%rax
  sub    $0x1,%rax
  mov    %rax,-0x58(%rbp)
  movslq %esi,%rax
  mov    %rax,%rcx
  mov    $0x0,%ebx
  mov    %rsp,%rax
  mov    %rax,%rbx
  movl   $0x0,-0x5c(%rbp)
  mov    D57(%rip),%rax
  mov    (%rax),%r8d
  mov    D84(%rip),%rax
  mov    (%rax),%r9d
  movslq %r8d,%rax
  sub    $0x1,%rax
  mov    %rax,-0x50(%rbp)
  movslq %r8d,%rax
  mov    %rax,-0xb0(%rbp)
  movq   $0x0,-0xa8(%rbp)
  movslq %r8d,%rax
  lea    0x0(,%rax,4),%rcx
  movslq %r9d,%rax
  sub    $0x1,%rax
  mov    %rax,-0x48(%rbp)
  movslq %r8d,%rax
  mov    %rax,-0xa0(%rbp)
  movq   $0x0,-0x98(%rbp)
  movslq %r9d,%rax
  mov    %rax,%r14
  mov    $0x0,%r15d
  mov    -0x98(%rbp),%rdx
  imul   %r14,%rdx
  mov    -0xa0(%rbp),%rax
  imul   %r15,%rax
  lea    (%rdx,%rax,1),%rdi
  mov    -0xa0(%rbp),%rax
  mul    %r14
  add    %rdx,%rdi
  mov    %rdi,%rdx
  movslq %r8d,%rax
  mov    %rax,%r12
  mov    $0x0,%r13d
  movslq %r9d,%rax
  mov    %rax,%r10
  mov    $0x0,%r11d
  mov    %r13,%rdx
  imul   %r10,%rdx
  mov    %r11,%rax
  imul   %r12,%rax
  lea    (%rdx,%rax,1),%rdi
  mov    %r12,%rax
  mul    %r10
  add    %rdx,%rdi
  mov    %rdi,%rdx
  movslq %r8d,%rdx
  movslq %r9d,%rax
  imul   %rdx,%rax
  lea    0x0(,%rax,4),%rdx
  mov    $0x10,%eax
  sub    $0x1,%rax
  add    %rdx,%rax
  mov    $0x10,%edi
  mov    $0x0,%edx
  div    %rdi
  imul   $0x10,%rax,%rax
  mov    %rax,%rdi
  and    $0xfffffffffffff000,%rdi
  mov    %rsp,%rdx
  sub    %rdi,%rdx
L174:
  cmp    %rdx,%rsp
  je     L210
  sub    $0x1000,%rsp
  orq    $0x0,0xff8(%rsp)
  jmp    L174
L210:
  mov    %rax,%rdx
  and    $0xfff,%edx
  sub    %rdx,%rsp
  mov    %rax,%rdx
  and    $0xfff,%edx
  test   %rdx,%rdx
  je     L257
  and    $0xfff,%eax
  sub    $0x8,%rax
  add    %rsp,%rax
  orq    $0x0,(%rax)
L257:
  mov    %rsp,%rax
  add    $0x3,%rax
  shr    $0x2,%rax
  shl    $0x2,%rax
  mov    %rax,-0x40(%rbp)
  movl   $0x0,-0x74(%rbp)
  jmp    L255
L155:
  movl   $0x0,-0x70(%rbp)
  jmp    L148
L80:
  cmpl   $0x0,-0x74(%rbp)
  jg     L134
  mov    D84(%rip),%rax
  mov    (%rax),%eax
  sub    $0x1,%eax
  mov    %eax,-0x6c(%rbp)
  jmp    L11
L134:
  mov    -0x74(%rbp),%eax
  sub    $0x1,%eax
  mov    %eax,-0x6c(%rbp)
L11:
  mov    -0x74(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    D84(%rip),%rax
  mov    (%rax),%eax
  cmp    %eax,%edx
  jl     L216
  movl   $0x0,-0x64(%rbp)
  jmp    L70
L216:
  mov    -0x74(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x64(%rbp)
L70:
  cmpl   $0x0,-0x70(%rbp)
  jg     L154
  mov    D57(%rip),%rax
  mov    (%rax),%eax
  sub    $0x1,%eax
  mov    %eax,-0x68(%rbp)
  jmp    L199
L154:
  mov    -0x70(%rbp),%eax
  sub    $0x1,%eax
  mov    %eax,-0x68(%rbp)
L199:
  mov    -0x70(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    D57(%rip),%rax
  mov    (%rax),%eax
  cmp    %eax,%edx
  jl     L66
  movl   $0x0,-0x60(%rbp)
  jmp    L166
L66:
  mov    -0x70(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x60(%rbp)
L166:
  movl   $0x0,-0x5c(%rbp)
  mov    -0x6c(%rbp),%eax
  movslq %eax,%rdx
  movslq %esi,%rax
  imul   %rdx,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x88(%rbp),%rax
  add    %rax,%rdx
  mov    -0x68(%rbp),%eax
  cltq
  mov    (%rdx,%rax,4),%eax
  add    %eax,-0x5c(%rbp)
  mov    -0x6c(%rbp),%eax
  movslq %eax,%rdx
  movslq %esi,%rax
  imul   %rdx,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x88(%rbp),%rax
  add    %rax,%rdx
  mov    -0x70(%rbp),%eax
  cltq
  mov    (%rdx,%rax,4),%eax
  add    %eax,-0x5c(%rbp)
  mov    -0x6c(%rbp),%eax
  movslq %eax,%rdx
  movslq %esi,%rax
  imul   %rdx,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x88(%rbp),%rax
  add    %rax,%rdx
  mov    -0x60(%rbp),%eax
  cltq
  mov    (%rdx,%rax,4),%eax
  add    %eax,-0x5c(%rbp)
  mov    -0x74(%rbp),%eax
  movslq %eax,%rdx
  movslq %esi,%rax
  imul   %rdx,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x88(%rbp),%rax
  add    %rax,%rdx
  mov    -0x68(%rbp),%eax
  cltq
  mov    (%rdx,%rax,4),%eax
  add    %eax,-0x5c(%rbp)
  mov    -0x74(%rbp),%eax
  movslq %eax,%rdx
  movslq %esi,%rax
  imul   %rdx,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x88(%rbp),%rax
  add    %rax,%rdx
  mov    -0x60(%rbp),%eax
  cltq
  mov    (%rdx,%rax,4),%eax
  add    %eax,-0x5c(%rbp)
  mov    -0x64(%rbp),%eax
  movslq %eax,%rdx
  movslq %esi,%rax
  imul   %rdx,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x88(%rbp),%rax
  add    %rax,%rdx
  mov    -0x68(%rbp),%eax
  cltq
  mov    (%rdx,%rax,4),%eax
  add    %eax,-0x5c(%rbp)
  mov    -0x64(%rbp),%eax
  movslq %eax,%rdx
  movslq %esi,%rax
  imul   %rdx,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x88(%rbp),%rax
  add    %rax,%rdx
  mov    -0x70(%rbp),%eax
  cltq
  mov    (%rdx,%rax,4),%eax
  add    %eax,-0x5c(%rbp)
  mov    -0x64(%rbp),%eax
  movslq %eax,%rdx
  movslq %esi,%rax
  imul   %rdx,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x88(%rbp),%rax
  add    %rax,%rdx
  mov    -0x60(%rbp),%eax
  cltq
  mov    (%rdx,%rax,4),%eax
  add    %eax,-0x5c(%rbp)
  mov    -0x74(%rbp),%eax
  movslq %eax,%rdx
  movslq %esi,%rax
  imul   %rdx,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x88(%rbp),%rax
  add    %rax,%rdx
  mov    -0x70(%rbp),%eax
  cltq
  mov    (%rdx,%rax,4),%eax
  test   %eax,%eax
  jne    L85
  cmpl   $0x3,-0x5c(%rbp)
  jne    L85
  mov    %rcx,%rdi
  shr    $0x2,%rdi
  mov    -0x40(%rbp),%rax
  mov    -0x70(%rbp),%edx
  movslq %edx,%r8
  mov    -0x74(%rbp),%edx
  movslq %edx,%rdx
  imul   %rdi,%rdx
  add    %r8,%rdx
  movl   $0x1,(%rax,%rdx,4)
  jmp    L152
L85:
  mov    -0x74(%rbp),%eax
  movslq %eax,%rdx
  movslq %esi,%rax
  imul   %rdx,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x88(%rbp),%rax
  add    %rax,%rdx
  mov    -0x70(%rbp),%eax
  cltq
  mov    (%rdx,%rax,4),%eax
  cmp    $0x1,%eax
  jne    L30
  cmpl   $0x3,-0x5c(%rbp)
  je     L147
  cmpl   $0x2,-0x5c(%rbp)
  jne    L30
L147:
  mov    %rcx,%rdi
  shr    $0x2,%rdi
  mov    -0x40(%rbp),%rax
  mov    -0x70(%rbp),%edx
  movslq %edx,%r8
  mov    -0x74(%rbp),%edx
  movslq %edx,%rdx
  imul   %rdi,%rdx
  add    %r8,%rdx
  movl   $0x1,(%rax,%rdx,4)
  jmp    L152
L30:
  mov    %rcx,%rdi
  shr    $0x2,%rdi
  mov    -0x40(%rbp),%rax
  mov    -0x70(%rbp),%edx
  movslq %edx,%r8
  mov    -0x74(%rbp),%edx
  movslq %edx,%rdx
  imul   %rdi,%rdx
  add    %r8,%rdx
  movl   $0x0,(%rax,%rdx,4)
L152:
  addl   $0x1,-0x70(%rbp)
L148:
  mov    D57(%rip),%rax
  mov    (%rax),%eax
  cmp    %eax,-0x70(%rbp)
  jl     L80
  addl   $0x1,-0x74(%rbp)
L255:
  mov    D84(%rip),%rax
  mov    (%rax),%eax
  cmp    %eax,-0x74(%rbp)
  jl     L155
  movl   $0x0,-0x74(%rbp)
  jmp    L242
L143:
  movl   $0x0,-0x70(%rbp)
  jmp    L79
L269:
  mov    %rcx,%r8
  shr    $0x2,%r8
  mov    -0x74(%rbp),%eax
  movslq %eax,%rdx
  movslq %esi,%rax
  imul   %rdx,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x88(%rbp),%rax
  lea    (%rdx,%rax,1),%rdi
  mov    -0x40(%rbp),%rax
  mov    -0x70(%rbp),%edx
  movslq %edx,%r9
  mov    -0x74(%rbp),%edx
  movslq %edx,%rdx
  imul   %r8,%rdx
  add    %r9,%rdx
  mov    (%rax,%rdx,4),%edx
  mov    -0x70(%rbp),%eax
  cltq
  mov    %edx,(%rdi,%rax,4)
  addl   $0x1,-0x70(%rbp)
L79:
  mov    D57(%rip),%rax
  mov    (%rax),%eax
  cmp    %eax,-0x70(%rbp)
  jl     L269
  addl   $0x1,-0x74(%rbp)
L242:
  mov    D84(%rip),%rax
  mov    (%rax),%eax
  cmp    %eax,-0x74(%rbp)
  jl     L143
  mov    %rbx,%rsp
  nop
  mov    -0x38(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L168
  call   <__stack_chk_fail@plt>
L168:
  lea    -0x28(%rbp),%rsp
  pop    %rbx
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  pop    %rbp
  ret
```

assistant: ```c
void run_life(int grid[COLS][LINES]) {
  int i;
  int j;
  int ii;
  int jj;
  int iii;
  int jjj;
  int nei = 0;
  int newgrid[COLS][LINES];
  for (i = 0; i < COLS; i++) {
    for (j = 0; j < LINES; j++) {
      if (i - 1 < 0)
        ii = COLS - 1;
      else
        ii = i - 1;
      if (i + 1 >= COLS)
        iii = 0;
      else
        iii = i + 1;
      if (j - 1 < 0)
        jj = LINES - 1;
      else
        jj = j - 1;
      if (j + 1 >= LINES)
        jjj = 0;
      else
        jjj = j + 1;
      nei = 0;
      nei += grid[ii][jj];
      nei += grid[ii][j];
      nei += grid[ii][jjj];
      nei += grid[i][jj];
      nei += grid[i][jjj];
      nei += grid[iii][jj];
      nei += grid[iii][j];
      nei += grid[iii][jjj];
      if ((grid[i][j] == 0) && nei == 3)
        newgrid[i][j] = 1;
      else if ((grid[i][j] == 1) && (nei == 3 || nei == 2))
        newgrid[i][j] = 1;
      else
        newgrid[i][j] = 0;
    }
  }
  for (i = 0; i < COLS; i++) {
    for (j = 0; j < LINES; j++) {
      grid[i][j] = newgrid[i][j];
    }
  }
}
```