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

```asm
<MergeChannels>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x10,%rsp
  mov    %rdi,-0x68(%rbp)
  mov    %rsi,-0x70(%rbp)
  mov    %rdx,-0x78(%rbp)
  mov    %rcx,-0x80(%rbp)
  mov    %r8d,-0x84(%rbp)
  mov    %r9d,-0x88(%rbp)
  mov    0x10(%rbp),%edx
  mov    -0x88(%rbp),%eax
  cmp    %eax,%edx
  cmovle %edx,%eax
  mov    -0x84(%rbp),%edx
  cmp    %eax,%edx
  cmovle %edx,%eax
  mov    %eax,-0x34(%rbp)
  mov    -0x84(%rbp),%eax
  cltd
  idivl  -0x34(%rbp)
  mov    %eax,-0x30(%rbp)
  mov    -0x84(%rbp),%eax
  mov    %eax,-0x2c(%rbp)
  movl   $0x0,-0x48(%rbp)
  mov    -0x30(%rbp),%eax
  imul   -0x34(%rbp),%eax
  mov    %eax,-0x28(%rbp)
  mov    -0x28(%rbp),%edx
  mov    -0x34(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x24(%rbp)
  mov    -0x88(%rbp),%eax
  cltd
  idivl  -0x34(%rbp)
  mov    %eax,-0x20(%rbp)
  mov    -0x88(%rbp),%eax
  mov    %eax,-0x1c(%rbp)
  movl   $0x0,-0x44(%rbp)
  mov    -0x20(%rbp),%eax
  imul   -0x34(%rbp),%eax
  mov    %eax,-0x18(%rbp)
  mov    -0x18(%rbp),%edx
  mov    -0x34(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x14(%rbp)
  mov    0x10(%rbp),%eax
  cltd
  idivl  -0x34(%rbp)
  mov    %eax,-0x10(%rbp)
  mov    0x10(%rbp),%eax
  mov    %eax,-0xc(%rbp)
  movl   $0x0,-0x40(%rbp)
  mov    -0x10(%rbp),%eax
  imul   -0x34(%rbp),%eax
  mov    %eax,-0x8(%rbp)
  mov    -0x8(%rbp),%edx
  mov    -0x34(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  movl   $0x0,-0x38(%rbp)
  jmp    L134
L91:
  mov    -0x84(%rbp),%edx
  mov    -0x48(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x2c(%rbp)
  mov    -0x2c(%rbp),%eax
  cmp    -0x24(%rbp),%eax
  jl     L5
  mov    -0x30(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x54(%rbp)
  mov    -0x2c(%rbp),%eax
  sub    -0x24(%rbp),%eax
  mov    %eax,-0x48(%rbp)
  jmp    L83
L5:
  mov    -0x30(%rbp),%eax
  mov    %eax,-0x54(%rbp)
  mov    -0x2c(%rbp),%eax
  sub    -0x28(%rbp),%eax
  mov    %eax,-0x48(%rbp)
L83:
  mov    -0x88(%rbp),%edx
  mov    -0x44(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x1c(%rbp)
  mov    -0x1c(%rbp),%eax
  cmp    -0x14(%rbp),%eax
  jl     L15
  mov    -0x20(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x50(%rbp)
  mov    -0x1c(%rbp),%eax
  sub    -0x14(%rbp),%eax
  mov    %eax,-0x44(%rbp)
  jmp    L89
L15:
  mov    -0x20(%rbp),%eax
  mov    %eax,-0x50(%rbp)
  mov    -0x1c(%rbp),%eax
  sub    -0x18(%rbp),%eax
  mov    %eax,-0x44(%rbp)
L89:
  mov    0x10(%rbp),%edx
  mov    -0x40(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0xc(%rbp)
  mov    -0xc(%rbp),%eax
  cmp    -0x4(%rbp),%eax
  jl     L18
  mov    -0x10(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x4c(%rbp)
  mov    -0xc(%rbp),%eax
  sub    -0x4(%rbp),%eax
  mov    %eax,-0x40(%rbp)
  jmp    L76
L18:
  mov    -0x10(%rbp),%eax
  mov    %eax,-0x4c(%rbp)
  mov    -0xc(%rbp),%eax
  sub    -0x8(%rbp),%eax
  mov    %eax,-0x40(%rbp)
L76:
  movl   $0x0,-0x3c(%rbp)
  jmp    L47
L98:
  mov    -0x70(%rbp),%rdx
  lea    0x1(%rdx),%rax
  mov    %rax,-0x70(%rbp)
  mov    -0x68(%rbp),%rax
  lea    0x1(%rax),%rcx
  mov    %rcx,-0x68(%rbp)
  movzbl (%rdx),%edx
  mov    %dl,(%rax)
  addl   $0x1,-0x3c(%rbp)
L47:
  mov    -0x3c(%rbp),%eax
  cmp    -0x54(%rbp),%eax
  jl     L98
  movl   $0x0,-0x3c(%rbp)
  jmp    L38
L128:
  mov    -0x78(%rbp),%rdx
  lea    0x1(%rdx),%rax
  mov    %rax,-0x78(%rbp)
  mov    -0x68(%rbp),%rax
  lea    0x1(%rax),%rcx
  mov    %rcx,-0x68(%rbp)
  movzbl (%rdx),%edx
  mov    %dl,(%rax)
  addl   $0x1,-0x3c(%rbp)
L38:
  mov    -0x3c(%rbp),%eax
  cmp    -0x50(%rbp),%eax
  jl     L128
  movl   $0x0,-0x3c(%rbp)
  jmp    L57
L41:
  mov    -0x80(%rbp),%rdx
  lea    0x1(%rdx),%rax
  mov    %rax,-0x80(%rbp)
  mov    -0x68(%rbp),%rax
  lea    0x1(%rax),%rcx
  mov    %rcx,-0x68(%rbp)
  movzbl (%rdx),%edx
  mov    %dl,(%rax)
  addl   $0x1,-0x3c(%rbp)
L57:
  mov    -0x3c(%rbp),%eax
  cmp    -0x4c(%rbp),%eax
  jl     L41
  addl   $0x1,-0x38(%rbp)
L134:
  mov    -0x38(%rbp),%eax
  cmp    -0x34(%rbp),%eax
  jl     L91
  nop
  nop
  leave
  ret
```

assistant: ```c
void MergeChannels(unsigned char *buf, unsigned char *lum, unsigned char *cb, unsigned char *cr, int n_lum, int n_cb, int n_cr) {
  int lum_pkg, cb_pkg, cr_pkg;
  int lum_div, cb_div, cr_div;
  int lum_cur, cb_cur, cr_cur;
  int lum_rem, cb_rem, cr_rem;
  int lum_tr0, cb_tr0, cr_tr0;
  int lum_tr1, cb_tr1, cr_tr1;
  int i, pkg, min;
  min = (n_lum < (n_cb < n_cr ? n_cb : n_cr) ? n_lum : (n_cb < n_cr ? n_cb : n_cr));
  lum_div = n_lum / min;
  lum_cur = n_lum;
  lum_rem = 0;
  lum_tr0 = lum_div * min;
  lum_tr1 = lum_tr0 + min;
  cb_div = n_cb / min;
  cb_cur = n_cb;
  cb_rem = 0;
  cb_tr0 = cb_div * min;
  cb_tr1 = cb_tr0 + min;
  cr_div = n_cr / min;
  cr_cur = n_cr;
  cr_rem = 0;
  cr_tr0 = cr_div * min;
  cr_tr1 = cr_tr0 + min;
  for (pkg = 0; pkg < min; pkg++) {
    lum_cur = n_lum + lum_rem;
    if (lum_cur >= lum_tr1) {
      lum_pkg = lum_div + 1;
      lum_rem = lum_cur - lum_tr1;
    } else {
      lum_pkg = lum_div;
      lum_rem = lum_cur - lum_tr0;
    }
    cb_cur = n_cb + cb_rem;
    if (cb_cur >= cb_tr1) {
      cb_pkg = cb_div + 1;
      cb_rem = cb_cur - cb_tr1;
    } else {
      cb_pkg = cb_div;
      cb_rem = cb_cur - cb_tr0;
    }
    cr_cur = n_cr + cr_rem;
    if (cr_cur >= cr_tr1) {
      cr_pkg = cr_div + 1;
      cr_rem = cr_cur - cr_tr1;
    } else {
      cr_pkg = cr_div;
      cr_rem = cr_cur - cr_tr0;
    }
    for (i = 0; i < lum_pkg; i++)
      *buf++ = *lum++;
    for (i = 0; i < cb_pkg; i++)
      *buf++ = *cb++;
    for (i = 0; i < cr_pkg; i++)
      *buf++ = *cr++;
  }
}
```