user: What is the c source code of the assembly code below?

```asm
<random_block>:
  endbr64
  push   %r12
  mov    D252(%rip),%r12d
  cmp    $0xffffffff,%r12d
  je     L40
  movd   D41(%rip),%xmm1
L1:
  movd   D95(%rip),%xmm0
  movd   D248(%rip),%xmm3
  xor    %eax,%eax
  movd   D0(%rip),%xmm2
  punpckldq %xmm3,%xmm0
  punpckldq %xmm2,%xmm1
  punpcklqdq %xmm1,%xmm0
  movaps %xmm0,D155(%rip)
  call   <rand@plt>
  movslq %eax,%rdx
  mov    %eax,%ecx
  imul   $0xffffffff92492493,%rdx,%rdx
  sar    $0x1f,%ecx
  shr    $0x20,%rdx
  add    %eax,%edx
  sar    $0x2,%edx
  sub    %ecx,%edx
  lea    0x0(,%rdx,8),%ecx
  sub    %edx,%ecx
  sub    %ecx,%eax
  cmp    D155(%rip),%eax
  mov    %eax,D155(%rip)
  mov    %eax,%edx
  je     L74
  cmp    D95(%rip),%eax
  je     L74
  cmp    D248(%rip),%eax
  je     L74
L59:
  cmp    %edx,D155(%rip)
  je     L36
  cmp    %edx,D155(%rip)
  je     L36
L88:
  cmp    %edx,D155(%rip)
  je     L11
  cmp    %edx,D155(%rip)
  je     L11
L129:
  cmp    %edx,D155(%rip)
  je     L27
  cmp    %edx,D155(%rip)
  je     L27
  mov    %r12d,%eax
  pop    %r12
  ret
L40:
  mov    $0x7,%edi
  call   <random_number@plt>
  mov    $0x7,%edi
  mov    %eax,D155(%rip)
  call   <random_number@plt>
  mov    $0x7,%edi
  mov    %eax,D155(%rip)
  call   <random_number@plt>
  mov    $0x7,%edi
  mov    %eax,D155(%rip)
  call   <random_number@plt>
  mov    D155(%rip),%r12d
  movd   %eax,%xmm1
  jmp    L1
  nopw   0x0(%rax,%rax,1)
L74:
  xor    %eax,%eax
  call   <rand@plt>
  movslq %eax,%rdx
  mov    %eax,%ecx
  imul   $0xffffffff92492493,%rdx,%rdx
  sar    $0x1f,%ecx
  shr    $0x20,%rdx
  add    %eax,%edx
  sar    $0x2,%edx
  sub    %ecx,%edx
  lea    0x0(,%rdx,8),%ecx
  sub    %edx,%ecx
  sub    %ecx,%eax
  cmp    %eax,D155(%rip)
  mov    %eax,D155(%rip)
  mov    %eax,%edx
  jne    L59
L36:
  xor    %eax,%eax
  call   <rand@plt>
  movslq %eax,%rdx
  mov    %eax,%ecx
  imul   $0xffffffff92492493,%rdx,%rdx
  sar    $0x1f,%ecx
  shr    $0x20,%rdx
  add    %eax,%edx
  sar    $0x2,%edx
  sub    %ecx,%edx
  lea    0x0(,%rdx,8),%ecx
  sub    %edx,%ecx
  sub    %ecx,%eax
  cmp    D155(%rip),%eax
  mov    %eax,D155(%rip)
  mov    %eax,%edx
  jne    L88
L11:
  xor    %eax,%eax
  call   <rand@plt>
  movslq %eax,%rdx
  mov    %eax,%ecx
  imul   $0xffffffff92492493,%rdx,%rdx
  sar    $0x1f,%ecx
  shr    $0x20,%rdx
  add    %eax,%edx
  sar    $0x2,%edx
  sub    %ecx,%edx
  lea    0x0(,%rdx,8),%ecx
  sub    %edx,%ecx
  sub    %ecx,%eax
  cmp    %eax,D155(%rip)
  mov    %eax,D155(%rip)
  mov    %eax,%edx
  jne    L129
L27:
  xor    %eax,%eax
  call   <rand@plt>
  movslq %eax,%rdx
  mov    %eax,%ecx
  imul   $0xffffffff92492493,%rdx,%rdx
  sar    $0x1f,%ecx
  shr    $0x20,%rdx
  add    %eax,%edx
  sar    $0x2,%edx
  sub    %ecx,%edx
  lea    0x0(,%rdx,8),%ecx
  sub    %edx,%ecx
  sub    %ecx,%eax
  mov    %eax,D155(%rip)
  mov    %r12d,%eax
  pop    %r12
  ret
```

assistant: ```c
int random_block() {
  static int queue[4] = {-1, -1, -1, -1};
  int current;
  int i, j;
  if (queue[0] == -1) {
    queue[0] = random_number(7);
    queue[1] = random_number(7);
    queue[2] = random_number(7);
    queue[3] = random_number(7);
  }
  current = queue[0];
  for (i = 0; i < 4; ++i) {
    queue[i] = queue[i + 1];
  }
  queue[3] = rand() % 7;
  for (j = 0; j < 4; ++j) {
    for (i = 0; i < 3; ++i) {
      if (queue[i] == queue[3]) {
        queue[3] = rand() % 7;
        break;
      }
    }
  }
  return current;
}
```