user: Demonstrate the C code that generates the assembly output below:

```asm
<calculate_number_of_bases_in_recombations_excluding_gaps>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x18,%rsp
  test   %esi,%esi
  jle    L25
  mov    %rdi,%r13
  mov    (%rdi),%rdi
  mov    %rdx,%rbx
  mov    %rcx,%rbp
  mov    %r8d,%r12d
  lea    -0x1(%rsi),%r14d
  mov    %esi,%r9d
  xor    %edx,%edx
  nopw   0x0(%rax,%rax,1)
L173:
  cmpl   $0xffffffff,(%rdi,%rdx,4)
  lea    0x0(,%rdx,4),%r8
  je     L14
  mov    0x8(%r13),%r10
  add    %r10,%r8
  cmpl   $0xffffffff,(%r8)
  je     L14
  xor    %eax,%eax
  jmp    L67
  nopl   0x0(%rax,%rax,1)
L24:
  mov    (%r8),%r11d
  cmp    %r11d,%ecx
  jg     L197
  cmp    %r11d,%esi
  jl     L197
L178:
  mov    %esi,(%r8)
L163:
  movl   $0xffffffff,(%rdi,%rax,4)
  movl   $0xffffffff,(%r10,%rax,4)
L197:
  add    $0x1,%rax
  cmp    %rax,%r9
  je     L14
L67:
  cmp    %edx,%eax
  je     L197
  mov    (%rdi,%rax,4),%ecx
  cmp    $0xffffffff,%ecx
  je     L197
  mov    (%r10,%rax,4),%esi
  cmp    $0xffffffff,%esi
  je     L197
  mov    (%rdi,%rdx,4),%r11d
  cmp    %r11d,%esi
  jl     L24
  cmp    %r11d,%ecx
  jg     L24
  mov    %ecx,(%rdi,%rdx,4)
  mov    (%r8),%r11d
  cmp    %r11d,%ecx
  jg     L163
  mov    (%r10,%rax,4),%esi
  cmp    %r11d,%esi
  jl     L163
  jmp    L178
  nopl   0x0(%rax)
L14:
  add    $0x1,%rdx
  cmp    %rdx,%r9
  jne    L173
  lea    0x0(,%r14,4),%rax
  xor    %r15d,%r15d
  xor    %r14d,%r14d
  mov    %rax,0x8(%rsp)
  jmp    L72
  nopw   0x0(%rax,%rax,1)
L55:
  mov    0x0(%r13),%rdi
  add    $0x4,%r15
L72:
  mov    (%rdi,%r15,1),%edx
  cmp    $0xffffffff,%edx
  je     L90
  mov    0x8(%r13),%rax
  mov    (%rax,%r15,1),%ecx
  cmp    $0xffffffff,%ecx
  je     L90
  mov    %r12d,%r8d
  mov    %rbp,%rsi
  mov    %rbx,%rdi
  call   <calculate_block_size_without_gaps@plt>
  add    %eax,%r14d
L90:
  cmp    %r15,0x8(%rsp)
  jne    L55
L189:
  add    $0x18,%rsp
  mov    %r14d,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L25:
  xor    %r14d,%r14d
  jmp    L189
```

assistant: ```c
int calculate_number_of_bases_in_recombations_excluding_gaps(int **block_coordinates, int num_blocks, char *child_sequence, int *snp_locations, int length_of_original_genome) {
  int total_bases = 0;
  int current_block = 1;
  int start_block = 0;
  for (start_block = 0; start_block < num_blocks; start_block++) {
    if (block_coordinates[0][start_block] == -1 || block_coordinates[1][start_block] == -1) {
      continue;
    }
    for (current_block = 0; current_block < num_blocks; current_block++) {
      if (current_block == start_block) {
        continue;
      }
      if (block_coordinates[0][current_block] == -1 || block_coordinates[1][current_block] == -1) {
        continue;
      }
      int found_overlap = 0;
      if (block_coordinates[0][start_block] >= block_coordinates[0][current_block] && block_coordinates[0][start_block] <= block_coordinates[1][current_block]) {
        block_coordinates[0][start_block] = block_coordinates[0][current_block];
        found_overlap = 1;
      }
      if (block_coordinates[1][start_block] >= block_coordinates[0][current_block] && block_coordinates[1][start_block] <= block_coordinates[1][current_block]) {
        block_coordinates[1][start_block] = block_coordinates[1][current_block];
        found_overlap = 1;
      }
      if (found_overlap == 1) {
        block_coordinates[0][current_block] = -1;
        block_coordinates[1][current_block] = -1;
      }
    }
  }
  for (start_block = 0; start_block < num_blocks; start_block++) {
    if (block_coordinates[0][start_block] == -1 || block_coordinates[1][start_block] == -1) {
      continue;
    }
    total_bases += calculate_block_size_without_gaps(child_sequence, snp_locations, block_coordinates[0][start_block], block_coordinates[1][start_block], length_of_original_genome);
  }
  return total_bases;
}
```