user: 下面的汇编指令对应的C源代码是什么:

```asm
<touch>:
  endbr64
  push   %r15
  mov    %edi,%r15d
  push   %r14
  push   %r13
  mov    %rdx,%r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x78,%rsp
  mov    0xb0(%rsp),%rax
  mov    0xb8(%rsp),%rbx
  mov    %rcx,0x8(%rsp)
  movslq %edi,%rcx
  lea    0x0(,%rcx,4),%r11
  mov    %rax,0x18(%rsp)
  mov    0xc0(%rsp),%rax
  mov    %rbx,0x10(%rsp)
  mov    %fs:0x28,%rdx
  mov    %rdx,0x68(%rsp)
  xor    %edx,%edx
  movl   $0x1,(%r9,%rcx,4)
  movslq (%rax),%rdx
  mov    %r11,0x50(%rsp)
  lea    0x1(%rdx),%edi
  mov    %edi,(%rax)
  lea    0x4(%rsi,%r11,1),%rdi
  mov    %r15d,(%rbx,%rdx,4)
  mov    (%rdi),%r10d
  movslq (%rsi,%rcx,4),%rbp
  mov    %rdi,0x28(%rsp)
  lea    0x64(%rsp),%rdi
  mov    %rdi,0x30(%rsp)
  cmp    %r10d,%ebp
  jge    L91
  mov    %r15d,0x5c(%rsp)
  mov    %r9,%r14
  mov    %r8,%r15
  mov    %rax,%r11
  jmp    L232
  nopw   0x0(%rax,%rax,1)
L198:
  add    $0x1,%rbp
  cmp    %ebp,%r10d
  jle    L91
L232:
  movslq 0x0(%r13,%rbp,4),%rax
  mov    %rax,%rdx
  shl    $0x2,%rax
  lea    (%r14,%rax,1),%rcx
  mov    (%rcx),%edi
  test   %edi,%edi
  jne    L198
  movl   $0x1,(%rcx)
  movslq (%r11),%rcx
  lea    (%rsi,%rax,1),%r10
  lea    0x1(%rcx),%edi
  mov    %edi,(%r11)
  mov    0x10(%rsp),%rdi
  mov    %edx,(%rdi,%rcx,4)
  mov    0x8(%rsp),%rdi
  add    %rax,%rdi
  lea    0x4(%rsi,%rax,1),%rax
  mov    (%rdi),%ecx
  mov    %rax,(%rsp)
  test   %ecx,%ecx
  jne    L238
  movslq (%r10),%rbx
  mov    (%rax),%ecx
  cmp    %ecx,%ebx
  jge    L20
  mov    %rbp,0x20(%rsp)
  mov    %r10,0x48(%rsp)
  jmp    L13
  nopw   0x0(%rax,%rax,1)
L33:
  add    $0x1,%rbx
  cmp    %ebx,%ecx
  jle    L115
L13:
  mov    (%r15,%rbx,4),%edx
  lea    0x0(,%rbx,4),%r12
  lea    (%r15,%r12,1),%rbp
  test   %edx,%edx
  je     L33
  movslq 0x0(%r13,%rbx,4),%r8
  add    %r13,%r12
  mov    (%r14,%r8,4),%eax
  mov    %r8,%rdi
  test   %eax,%eax
  jne    L33
  mov    0x18(%rsp),%rax
  mov    %r14,%r9
  mov    %r15,%r8
  mov    (%rax),%ecx
  cmp    %edx,%ecx
  cmovg  %edx,%ecx
  sub    $0x8,%rsp
  mov    %r13,%rdx
  mov    %ecx,0x6c(%rsp)
  push   %r11
  mov    %r11,0x50(%rsp)
  push   0x20(%rsp)
  push   0x48(%rsp)
  mov    0x28(%rsp),%rcx
  mov    %rsi,0x58(%rsp)
  call   <touch>
  mov    0x84(%rsp),%edx
  add    $0x20,%rsp
  test   %edx,%edx
  jne    L216
  mov    (%rsp),%rax
  add    $0x1,%rbx
  mov    0x38(%rsp),%rsi
  mov    0x40(%rsp),%r11
  mov    (%rax),%ecx
  cmp    %ebx,%ecx
  jg     L13
  nopl   0x0(%rax)
L115:
  mov    0x20(%rsp),%rbp
L20:
  mov    0x28(%rsp),%rax
  add    $0x1,%rbp
  mov    (%rax),%r10d
  cmp    %ebp,%r10d
  jg     L232
  nopw   0x0(%rax,%rax,1)
L91:
  mov    0x18(%rsp),%rax
  movl   $0x0,(%rax)
L65:
  mov    0x68(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L237
  add    $0x78,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L216:
  movslq (%r12),%rax
  mov    0x8(%rsp),%rsi
  mov    %r15,%r8
  mov    0x48(%rsp),%r10
  mov    0x5c(%rsp),%r15d
  add    %edx,(%rsi,%rax,4)
  mov    %rsi,%rax
  mov    0x50(%rsp),%rsi
  sub    %edx,(%rax,%rsi,1)
  mov    (%rsp),%rax
  sub    %edx,0x0(%rbp)
  mov    (%r10),%ecx
  movslq (%rax),%rsi
  movslq %ecx,%rax
  shl    $0x2,%rax
  cmp    %ecx,%esi
  jg     L134
  jmp    L247
  nopl   0x0(%rax)
L240:
  add    $0x1,%ecx
  add    $0x4,%rax
  cmp    %ecx,%esi
  je     L213
L134:
  cmp    %r15d,0x0(%r13,%rax,1)
  jne    L240
L247:
  add    %edx,(%r8,%rax,1)
  mov    0x18(%rsp),%rax
  mov    %edx,(%rax)
  jmp    L65
  nopw   0x0(%rax,%rax,1)
L213:
  lea    0x0(,%rsi,4),%rax
  add    %edx,(%r8,%rax,1)
  mov    0x18(%rsp),%rax
  mov    %edx,(%rax)
  jmp    L65
L238:
  mov    0x18(%rsp),%rax
  mov    0x50(%rsp),%rsi
  mov    %r15,%r8
  mov    0x5c(%rsp),%r15d
  mov    (%rax),%edx
  mov    0x8(%rsp),%rax
  cmp    %edx,%ecx
  cmovle %ecx,%edx
  sub    %edx,%ecx
  mov    %ecx,(%rdi)
  sub    %edx,(%rax,%rsi,1)
  mov    (%rsp),%rax
  mov    (%r10),%ecx
  movslq (%rax),%rsi
  movslq %ecx,%rax
  shl    $0x2,%rax
  cmp    %ecx,%esi
  jg     L163
  jmp    L247
  nopl   0x0(%rax)
L194:
  add    $0x1,%ecx
  add    $0x4,%rax
  cmp    %ecx,%esi
  je     L213
L163:
  cmp    %r15d,0x0(%r13,%rax,1)
  jne    L194
  jmp    L247
L237:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
void touch(int node, int *pointers, int *indices, int *resid, int *flow, int *touched, int *flow1, int *seen, int *nseen) {
  int flow2;
  int neighbor;
  int i, j, k;
  touched[node] = 1;
  seen[(*nseen)++] = node;
  for (i = pointers[node]; i < pointers[node + 1]; i++) {
    neighbor = indices[i];
    if (!touched[neighbor]) {
      touched[neighbor] = 1;
      seen[(*nseen)++] = neighbor;
      if (resid[neighbor]) {
        flow2 = ((*flow1) < (resid[neighbor]) ? (*flow1) : (resid[neighbor]));
        resid[neighbor] -= flow2;
        resid[node] -= flow2;
        for (k = pointers[neighbor]; k < pointers[neighbor + 1] && indices[k] != node; k++) {
          ;
        }
        flow[k] += flow2;
        *flow1 = flow2;
        return;
      }
      for (j = pointers[neighbor]; j < pointers[neighbor + 1]; j++) {
        if (flow[j] && !touched[indices[j]]) {
          flow2 = ((*flow1) < (flow[j]) ? (*flow1) : (flow[j]));
          touch(indices[j], pointers, indices, resid, flow, touched, &flow2, seen, nseen);
          if (flow2) {
            resid[indices[j]] += flow2;
            resid[node] -= flow2;
            flow[j] -= flow2;
            for (k = pointers[neighbor]; k < pointers[neighbor + 1] && indices[k] != node; k++) {
              ;
            }
            flow[k] += flow2;
            *flow1 = flow2;
            return;
          }
        }
      }
    }
  }
  *flow1 = 0;
}
```