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

```asm
<geo_map>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %edi,-0x14(%rbp)
  mov    %rsi,-0x20(%rbp)
  mov    %edx,-0x18(%rbp)
  mov    %ecx,-0x24(%rbp)
  mov    %r8d,-0x28(%rbp)
  cmpl   $0x0,-0x24(%rbp)
  je     L646
  cmpl   $0x4,-0x24(%rbp)
  jne    L344
L646:
  movl   $0x0,-0x28(%rbp)
L344:
  mov    -0x24(%rbp),%eax
  imul   $0x64,%eax,%edx
  mov    -0x28(%rbp),%eax
  add    %edx,%eax
  cmp    $0x26c,%eax
  jg     L515
  cmp    $0x1f4,%eax
  jge    L479
  test   %eax,%eax
  je     L517
  cmp    $0x190,%eax
  je     L517
  jmp    L515
L479:
  sub    $0x1f4,%eax
  cmp    $0x78,%eax
  ja     L515
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rdx
  lea    D10(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  cltq
  lea    D10(%rip),%rdx
  add    %rdx,%rax
  notrack jmp *%rax
L517:
  cmpl   $0xffffffff,-0x14(%rbp)
  jne    L533
  mov    -0x18(%rbp),%eax
  sub    $0x1,%eax
  jmp    L200
L533:
  mov    -0x14(%rbp),%eax
  jmp    L200
  mov    -0x18(%rbp),%ecx
  mov    -0x18(%rbp),%eax
  movslq %eax,%rsi
  mov    -0x20(%rbp),%rax
  mov    $0x0,%edx
  div    %rsi
  mov    %rdx,%rax
  mov    %eax,%edx
  mov    %ecx,%eax
  sub    %edx,%eax
  sub    $0x1,%eax
  mov    %eax,-0x4(%rbp)
  cmpl   $0xffffffff,-0x14(%rbp)
  jne    L584
  mov    -0x4(%rbp),%eax
  jmp    L200
L584:
  mov    -0x14(%rbp),%eax
  cmp    -0x4(%rbp),%eax
  jl     L467
  addl   $0x1,-0x14(%rbp)
L467:
  mov    -0x14(%rbp),%eax
  jmp    L200
  mov    -0x18(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x20(%rbp),%rax
  mov    $0x0,%edx
  div    %rcx
  mov    %rdx,%rax
  mov    %eax,-0x4(%rbp)
  cmpl   $0xffffffff,-0x14(%rbp)
  jne    L319
  mov    -0x4(%rbp),%eax
  jmp    L200
L319:
  mov    -0x14(%rbp),%eax
  cmp    -0x4(%rbp),%eax
  jl     L468
  addl   $0x1,-0x14(%rbp)
L468:
  mov    -0x14(%rbp),%eax
  jmp    L200
  mov    -0x18(%rbp),%ecx
  mov    -0x18(%rbp),%eax
  movslq %eax,%rsi
  mov    -0x20(%rbp),%rax
  mov    $0x0,%edx
  div    %rsi
  mov    %rdx,%rax
  mov    %eax,%edx
  mov    %ecx,%eax
  sub    %edx,%eax
  sub    $0x1,%eax
  mov    %eax,-0x4(%rbp)
  cmpl   $0xffffffff,-0x14(%rbp)
  jne    L919
  mov    -0x4(%rbp),%eax
  jmp    L200
L919:
  mov    -0x4(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    -0x14(%rbp),%eax
  add    %edx,%eax
  cltd
  idivl  -0x18(%rbp)
  mov    %edx,%eax
  jmp    L200
  mov    -0x18(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x20(%rbp),%rax
  mov    $0x0,%edx
  div    %rcx
  mov    %rdx,%rax
  mov    %eax,-0x4(%rbp)
  cmpl   $0xffffffff,-0x14(%rbp)
  jne    L676
  mov    -0x4(%rbp),%eax
  jmp    L200
L676:
  mov    -0x4(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    -0x14(%rbp),%eax
  add    %edx,%eax
  cltd
  idivl  -0x18(%rbp)
  mov    %edx,%eax
  jmp    L200
  mov    -0x14(%rbp),%eax
  add    $0x1,%eax
  jmp    L200
  cmpl   $0xfffffffe,-0x14(%rbp)
  jne    L902
  mov    -0x18(%rbp),%eax
  sub    $0x1,%eax
  jmp    L200
L902:
  cmpl   $0xffffffff,-0x14(%rbp)
  jne    L197
  mov    -0x18(%rbp),%eax
  sub    $0x2,%eax
  jmp    L200
L197:
  mov    -0x14(%rbp),%eax
  jmp    L200
  cmpl   $0xfffffffe,-0x14(%rbp)
  jne    L449
  mov    -0x18(%rbp),%eax
  sub    $0x1,%eax
  jmp    L200
L449:
  subl   $0x1,-0x18(%rbp)
  mov    -0x18(%rbp),%ecx
  mov    -0x18(%rbp),%eax
  movslq %eax,%rsi
  mov    -0x20(%rbp),%rax
  mov    $0x0,%edx
  div    %rsi
  mov    %rdx,%rax
  mov    %eax,%edx
  mov    %ecx,%eax
  sub    %edx,%eax
  sub    $0x1,%eax
  mov    %eax,-0x4(%rbp)
  cmpl   $0xffffffff,-0x14(%rbp)
  jne    L243
  mov    -0x4(%rbp),%eax
  jmp    L200
L243:
  mov    -0x14(%rbp),%eax
  cmp    -0x4(%rbp),%eax
  jl     L485
  addl   $0x1,-0x14(%rbp)
L485:
  mov    -0x14(%rbp),%eax
  jmp    L200
  cmpl   $0xfffffffe,-0x14(%rbp)
  jne    L1018
  mov    -0x18(%rbp),%eax
  sub    $0x1,%eax
  jmp    L200
L1018:
  subl   $0x1,-0x18(%rbp)
  mov    -0x18(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x20(%rbp),%rax
  mov    $0x0,%edx
  div    %rcx
  mov    %rdx,%rax
  mov    %eax,-0x4(%rbp)
  cmpl   $0xffffffff,-0x14(%rbp)
  jne    L857
  mov    -0x4(%rbp),%eax
  jmp    L200
L857:
  mov    -0x14(%rbp),%eax
  cmp    -0x4(%rbp),%eax
  jl     L415
  addl   $0x1,-0x14(%rbp)
L415:
  mov    -0x14(%rbp),%eax
  jmp    L200
  cmpl   $0xfffffffe,-0x14(%rbp)
  jne    L823
  mov    -0x18(%rbp),%eax
  sub    $0x1,%eax
  jmp    L200
L823:
  subl   $0x1,-0x18(%rbp)
  mov    -0x18(%rbp),%ecx
  mov    -0x18(%rbp),%eax
  movslq %eax,%rsi
  mov    -0x20(%rbp),%rax
  mov    $0x0,%edx
  div    %rsi
  mov    %rdx,%rax
  mov    %eax,%edx
  mov    %ecx,%eax
  sub    %edx,%eax
  sub    $0x1,%eax
  mov    %eax,-0x4(%rbp)
  cmpl   $0xffffffff,-0x14(%rbp)
  jne    L254
  mov    -0x4(%rbp),%eax
  jmp    L200
L254:
  mov    -0x4(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    -0x14(%rbp),%eax
  add    %edx,%eax
  cltd
  idivl  -0x18(%rbp)
  mov    %edx,%eax
  jmp    L200
  cmpl   $0xfffffffe,-0x14(%rbp)
  jne    L569
  mov    -0x18(%rbp),%eax
  sub    $0x1,%eax
  jmp    L200
L569:
  subl   $0x1,-0x18(%rbp)
  mov    -0x18(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x20(%rbp),%rax
  mov    $0x0,%edx
  div    %rcx
  mov    %rdx,%rax
  mov    %eax,-0x4(%rbp)
  cmpl   $0xffffffff,-0x14(%rbp)
  jne    L685
  mov    -0x4(%rbp),%eax
  jmp    L200
L685:
  mov    -0x4(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    -0x14(%rbp),%eax
  add    %edx,%eax
  cltd
  idivl  -0x18(%rbp)
  mov    %edx,%eax
  jmp    L200
  cmpl   $0xfffffffe,-0x14(%rbp)
  jne    L508
  mov    -0x18(%rbp),%eax
  sub    $0x1,%eax
  jmp    L200
L508:
  mov    -0x14(%rbp),%eax
  add    $0x1,%eax
  jmp    L200
  cmpl   $0xffffffff,-0x14(%rbp)
  jne    L691
  mov    $0x0,%eax
  jmp    L200
L691:
  cmpl   $0xfffffffe,-0x14(%rbp)
  jne    L185
  mov    $0x1,%eax
  jmp    L200
L185:
  mov    -0x14(%rbp),%eax
  add    $0x2,%eax
  jmp    L200
  mov    -0x18(%rbp),%ecx
  mov    -0x18(%rbp),%eax
  movslq %eax,%rsi
  mov    -0x20(%rbp),%rax
  mov    $0x0,%edx
  div    %rsi
  mov    %rdx,%rax
  mov    %eax,%edx
  mov    %ecx,%eax
  sub    %edx,%eax
  sub    $0x1,%eax
  mov    %eax,-0x4(%rbp)
  cmpl   $0xffffffff,-0x14(%rbp)
  jne    L201
  mov    -0x4(%rbp),%eax
  jmp    L200
L201:
  cmpl   $0xfffffffe,-0x14(%rbp)
  jne    L450
  mov    -0x4(%rbp),%eax
  add    $0x1,%eax
  cltd
  idivl  -0x18(%rbp)
  mov    %edx,%eax
  jmp    L200
L450:
  mov    -0x18(%rbp),%eax
  sub    $0x1,%eax
  cmp    %eax,-0x4(%rbp)
  jne    L522
  mov    -0x14(%rbp),%eax
  add    $0x1,%eax
  jmp    L200
L522:
  mov    -0x14(%rbp),%eax
  cmp    -0x4(%rbp),%eax
  jl     L927
  mov    -0x14(%rbp),%eax
  add    $0x2,%eax
  jmp    L200
L927:
  mov    -0x14(%rbp),%eax
  jmp    L200
  mov    -0x18(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x20(%rbp),%rax
  mov    $0x0,%edx
  div    %rcx
  mov    %rdx,%rax
  mov    %eax,-0x4(%rbp)
  cmpl   $0xffffffff,-0x14(%rbp)
  jne    L130
  mov    -0x4(%rbp),%eax
  jmp    L200
L130:
  cmpl   $0xfffffffe,-0x14(%rbp)
  jne    L452
  mov    -0x4(%rbp),%eax
  add    $0x1,%eax
  cltd
  idivl  -0x18(%rbp)
  mov    %edx,%eax
  jmp    L200
L452:
  mov    -0x18(%rbp),%eax
  sub    $0x1,%eax
  cmp    %eax,-0x4(%rbp)
  jne    L304
  mov    -0x14(%rbp),%eax
  add    $0x1,%eax
  jmp    L200
L304:
  mov    -0x14(%rbp),%eax
  cmp    -0x4(%rbp),%eax
  jl     L849
  mov    -0x14(%rbp),%eax
  add    $0x2,%eax
  jmp    L200
L849:
  mov    -0x14(%rbp),%eax
  jmp    L200
  mov    -0x18(%rbp),%ecx
  mov    -0x18(%rbp),%eax
  movslq %eax,%rsi
  mov    -0x20(%rbp),%rax
  mov    $0x0,%edx
  div    %rsi
  mov    %rdx,%rax
  mov    %eax,%edx
  mov    %ecx,%eax
  sub    %edx,%eax
  sub    $0x1,%eax
  mov    %eax,-0x4(%rbp)
  cmpl   $0xffffffff,-0x14(%rbp)
  jne    L432
  mov    -0x4(%rbp),%eax
  jmp    L200
L432:
  cmpl   $0xfffffffe,-0x14(%rbp)
  jne    L35
  mov    -0x4(%rbp),%eax
  add    $0x1,%eax
  cltd
  idivl  -0x18(%rbp)
  mov    %edx,%eax
  jmp    L200
L35:
  mov    -0x4(%rbp),%eax
  lea    0x2(%rax),%edx
  mov    -0x14(%rbp),%eax
  add    %edx,%eax
  cltd
  idivl  -0x18(%rbp)
  mov    %edx,%eax
  jmp    L200
  mov    -0x18(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x20(%rbp),%rax
  mov    $0x0,%edx
  div    %rcx
  mov    %rdx,%rax
  mov    %eax,-0x4(%rbp)
  cmpl   $0xffffffff,-0x14(%rbp)
  jne    L214
  mov    -0x4(%rbp),%eax
  jmp    L200
L214:
  cmpl   $0xfffffffe,-0x14(%rbp)
  jne    L851
  mov    -0x4(%rbp),%eax
  add    $0x1,%eax
  cltd
  idivl  -0x18(%rbp)
  mov    %edx,%eax
  jmp    L200
L851:
  mov    -0x4(%rbp),%eax
  lea    0x2(%rax),%edx
  mov    -0x14(%rbp),%eax
  add    %edx,%eax
  cltd
  idivl  -0x18(%rbp)
  mov    %edx,%eax
  jmp    L200
  mov    -0x18(%rbp),%ecx
  mov    -0x20(%rbp),%rax
  add    $0x1,%rax
  mov    -0x18(%rbp),%edx
  movslq %edx,%rsi
  mov    $0x0,%edx
  div    %rsi
  mov    %rdx,%rax
  mov    %eax,%edx
  mov    %ecx,%eax
  sub    %edx,%eax
  sub    $0x1,%eax
  mov    %eax,-0x4(%rbp)
  cmpl   $0xffffffff,-0x14(%rbp)
  jne    L458
  mov    -0x4(%rbp),%eax
  jmp    L200
L458:
  cmpl   $0xfffffffe,-0x14(%rbp)
  jne    L565
  mov    -0x4(%rbp),%eax
  add    $0x1,%eax
  cltd
  idivl  -0x18(%rbp)
  mov    %edx,%eax
  jmp    L200
L565:
  mov    -0x18(%rbp),%eax
  sub    $0x1,%eax
  cmp    %eax,-0x4(%rbp)
  jne    L407
  mov    -0x14(%rbp),%eax
  add    $0x1,%eax
  jmp    L200
L407:
  mov    -0x14(%rbp),%eax
  cmp    -0x4(%rbp),%eax
  jl     L608
  mov    -0x14(%rbp),%eax
  add    $0x2,%eax
  jmp    L200
L608:
  mov    -0x14(%rbp),%eax
  jmp    L200
  mov    -0x18(%rbp),%ecx
  mov    -0x18(%rbp),%eax
  movslq %eax,%rsi
  mov    -0x20(%rbp),%rax
  mov    $0x0,%edx
  div    %rsi
  mov    %rdx,%rax
  mov    %eax,%edx
  mov    %ecx,%eax
  sub    %edx,%eax
  sub    $0x1,%eax
  mov    %eax,-0x4(%rbp)
  cmpl   $0xffffffff,-0x14(%rbp)
  jne    L469
  mov    -0x4(%rbp),%eax
  jmp    L200
L469:
  cmpl   $0xfffffffe,-0x14(%rbp)
  jne    L911
  mov    -0x4(%rbp),%edx
  mov    -0x18(%rbp),%eax
  add    %edx,%eax
  sub    $0x1,%eax
  cltd
  idivl  -0x18(%rbp)
  mov    %edx,%eax
  jmp    L200
L911:
  mov    -0x4(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    -0x14(%rbp),%eax
  add    %edx,%eax
  cltd
  idivl  -0x18(%rbp)
  mov    %edx,%eax
  jmp    L200
L515:
  mov    $0xffffffff,%eax
L200:
  pop    %rbp
  ret
```

assistant: ```c
int geo_map(int block, unsigned long long stripe, int raid_disks, int level, int layout) {
  int pd;
  if ((level == 0) || (level == 4))
    layout = 0;
  switch (level * 100 + layout) {
  case 000:
  case 400:
  case 500 + 5:
    if (block == -1)
      return raid_disks - 1;
    return block;
  case 500 + 0:
    pd = (raid_disks - 1) - stripe % raid_disks;
    if (block == -1)
      return pd;
    if (block >= pd)
      block++;
    return block;
  case 500 + 1:
    pd = stripe % raid_disks;
    if (block == -1)
      return pd;
    if (block >= pd)
      block++;
    return block;
  case 500 + 2:
    pd = (raid_disks - 1) - stripe % raid_disks;
    if (block == -1)
      return pd;
    return (pd + 1 + block) % raid_disks;
  case 500 + 3:
    pd = stripe % raid_disks;
    if (block == -1)
      return pd;
    return (pd + 1 + block) % raid_disks;
  case 500 + 4:
    return block + 1;
  case 600 + 5:
    if (block == -2)
      return raid_disks - 1;
    if (block == -1)
      return raid_disks - 2;
    return block;
  case 600 + 16:
    if (block == -2)
      return raid_disks - 1;
    raid_disks--;
    pd = (raid_disks - 1) - stripe % raid_disks;
    if (block == -1)
      return pd;
    if (block >= pd)
      block++;
    return block;
  case 600 + 17:
    if (block == -2)
      return raid_disks - 1;
    raid_disks--;
    pd = stripe % raid_disks;
    if (block == -1)
      return pd;
    if (block >= pd)
      block++;
    return block;
  case 600 + 18:
    if (block == -2)
      return raid_disks - 1;
    raid_disks--;
    pd = (raid_disks - 1) - stripe % raid_disks;
    if (block == -1)
      return pd;
    return (pd + 1 + block) % raid_disks;
  case 600 + 19:
    if (block == -2)
      return raid_disks - 1;
    raid_disks--;
    pd = stripe % raid_disks;
    if (block == -1)
      return pd;
    return (pd + 1 + block) % raid_disks;
  case 600 + 20:
    if (block == -2)
      return raid_disks - 1;
    return block + 1;
  case 600 + 4:
    if (block == -1)
      return 0;
    if (block == -2)
      return 1;
    return block + 2;
  case 600 + 0:
    pd = raid_disks - 1 - (stripe % raid_disks);
    if (block == -1)
      return pd;
    if (block == -2)
      return (pd + 1) % raid_disks;
    if (pd == raid_disks - 1)
      return block + 1;
    if (block >= pd)
      return block + 2;
    return block;
  case 600 + 8:
  case 600 + 1:
    pd = stripe % raid_disks;
    if (block == -1)
      return pd;
    if (block == -2)
      return (pd + 1) % raid_disks;
    if (pd == raid_disks - 1)
      return block + 1;
    if (block >= pd)
      return block + 2;
    return block;
  case 600 + 2:
    pd = raid_disks - 1 - (stripe % raid_disks);
    if (block == -1)
      return pd;
    if (block == -2)
      return (pd + 1) % raid_disks;
    return (pd + 2 + block) % raid_disks;
  case 600 + 3:
    pd = stripe % raid_disks;
    if (block == -1)
      return pd;
    if (block == -2)
      return (pd + 1) % raid_disks;
    return (pd + 2 + block) % raid_disks;
  case 600 + 9:
    pd = raid_disks - 1 - ((stripe + 1) % raid_disks);
    if (block == -1)
      return pd;
    if (block == -2)
      return (pd + 1) % raid_disks;
    if (pd == raid_disks - 1)
      return block + 1;
    if (block >= pd)
      return block + 2;
    return block;
  case 600 + 10:
    pd = raid_disks - 1 - (stripe % raid_disks);
    if (block == -1)
      return pd;
    if (block == -2)
      return (pd + raid_disks - 1) % raid_disks;
    return (pd + 1 + block) % raid_disks;
  }
  return -1;
}
```