user: 请将以下的汇编代码转换成C语言代码:

```asm
<bn_sqr_comba8>:
  endbr64
  push   %r12
  mov    %rsi,%rax
  push   %rbp
  push   %rbx
  mov    (%rsi),%rcx
  mov    %ecx,%esi
  shr    $0x20,%rcx
  mov    %rsi,%rdx
  imul   %rsi,%rsi
  imul   %rcx,%rdx
  imul   %rcx,%rcx
  mov    %rdx,%r8
  shl    $0x21,%rdx
  shr    $0x1f,%r8
  add    %rsi,%rdx
  adc    %r8,%rcx
  mov    %rdx,(%rdi)
  mov    0x8(%rax),%r8
  mov    (%rax),%r9
  mov    %r8d,%edx
  shr    $0x20,%r8
  mov    %r9d,%r11d
  shr    $0x20,%r9
  mov    %rdx,%rsi
  mov    %r8,%r10
  imul   %r9,%rdx
  imul   %r11,%r8
  imul   %r11,%rsi
  imul   %r9,%r10
  add    %r8,%rdx
  jb     L726
L212:
  mov    %rdx,%r8
  shl    $0x20,%rdx
  shr    $0x20,%r8
  add    %rdx,%rsi
  mov    %r10,%rdx
  adc    %r8,%rdx
  mov    %rsi,%r9
  add    %rsi,%rsi
  mov    %rdx,%r8
  shr    $0x3f,%r9
  shr    $0x3f,%r8
  lea    (%r9,%rdx,2),%r9
  add    %rsi,%rcx
  jb     L406
L675:
  mov    %rcx,0x8(%rdi)
  mov    0x8(%rax),%rdx
  mov    0x10(%rax),%r11
  mov    (%rax),%rbp
  mov    %edx,%esi
  shr    $0x20,%rdx
  mov    %rsi,%rcx
  imul   %rsi,%rsi
  mov    %ebp,%r12d
  imul   %rdx,%rcx
  imul   %rdx,%rdx
  mov    %rcx,%r10
  shl    $0x21,%rcx
  shr    $0x1f,%r10
  add    %rsi,%rcx
  adc    %r10,%rdx
  add    %rcx,%r9
  mov    %r11d,%ecx
  adc    $0x0,%rdx
  mov    %rcx,%r10
  add    %r8,%rdx
  setb   %r8b
  shr    $0x20,%r11
  imul   %r12,%r10
  mov    %rdx,%rsi
  shr    $0x20,%rbp
  mov    %r11,%rbx
  movzbl %r8b,%r8d
  imul   %rbp,%rcx
  imul   %r12,%r11
  imul   %rbp,%rbx
  add    %r11,%rcx
  jb     L939
L1230:
  mov    %rcx,%r11
  shl    $0x20,%rcx
  shr    $0x20,%r11
  add    %rcx,%r10
  adc    %r11,%rbx
  mov    %rbx,%rcx
  shr    $0x3f,%rcx
  add    %rcx,%r8
  mov    %r10,%rcx
  add    %r10,%r10
  shr    $0x3f,%rcx
  lea    (%rcx,%rbx,2),%rcx
  add    %r10,%r9
  jb     L1177
L1120:
  add    %rdx,%rcx
  setb   %dl
  mov    %rcx,%rsi
  movzbl %dl,%edx
  cmp    $0x1,%rdx
  sbb    $0xffffffffffffffff,%r8
L844:
  mov    %r9,0x10(%rdi)
  mov    0x18(%rax),%r9
  mov    (%rax),%r10
  mov    %r9d,%edx
  shr    $0x20,%r9
  mov    %r10d,%ebx
  shr    $0x20,%r10
  mov    %rdx,%rcx
  mov    %r9,%r11
  imul   %r10,%rdx
  imul   %rbx,%r9
  imul   %rbx,%rcx
  imul   %r10,%r11
  add    %r9,%rdx
  jb     L1220
L51:
  mov    %rdx,%r9
  shl    $0x20,%rdx
  shr    $0x20,%r9
  add    %rdx,%rcx
  mov    %r11,%rdx
  adc    %r9,%rdx
  mov    %rcx,%r10
  add    %rcx,%rcx
  mov    %rdx,%r9
  shr    $0x3f,%r10
  shr    $0x3f,%r9
  lea    (%r10,%rdx,2),%rdx
  add    %rsi,%rcx
  jb     L353
L919:
  add    %r8,%rdx
  mov    %rdx,%r8
  adc    $0x0,%r9
L931:
  mov    0x10(%rax),%r10
  mov    0x8(%rax),%r11
  mov    %r10d,%esi
  mov    %r11d,%ebp
  shr    $0x20,%r10
  shr    $0x20,%r11
  mov    %rsi,%rdx
  mov    %r10,%rbx
  imul   %r11,%rsi
  imul   %rbp,%r10
  imul   %rbp,%rdx
  imul   %r11,%rbx
  add    %r10,%rsi
  jb     L112
L767:
  mov    %rsi,%r10
  shl    $0x20,%rsi
  shr    $0x20,%r10
  add    %rsi,%rdx
  adc    %r10,%rbx
  mov    %rbx,%r10
  shr    $0x3f,%r10
  add    %r10,%r9
  mov    %rdx,%r10
  add    %rdx,%rdx
  shr    $0x3f,%r10
  lea    (%r10,%rbx,2),%rsi
  add    %rdx,%rcx
  jb     L737
L75:
  xor    %edx,%edx
  add    %r8,%rsi
  setb   %dl
  mov    %rsi,%r8
  cmp    $0x1,%rdx
  sbb    $0xffffffffffffffff,%r9
L1371:
  mov    %rcx,0x18(%rdi)
  mov    0x10(%rax),%rdx
  mov    0x18(%rax),%r11
  mov    0x8(%rax),%rbp
  mov    %edx,%ecx
  shr    $0x20,%rdx
  mov    %rcx,%rsi
  imul   %rcx,%rcx
  mov    %ebp,%r12d
  imul   %rdx,%rsi
  imul   %rdx,%rdx
  mov    %rsi,%r10
  shl    $0x21,%rsi
  shr    $0x1f,%r10
  add    %rsi,%rcx
  mov    %r11d,%esi
  adc    %r10,%rdx
  add    %r8,%rcx
  adc    $0x0,%rdx
  mov    %rcx,%r10
  add    %r9,%rdx
  mov    %rsi,%r9
  setb   %cl
  shr    $0x20,%r11
  imul   %r12,%r9
  mov    %rdx,%r8
  shr    $0x20,%rbp
  mov    %r11,%rbx
  movzbl %cl,%ecx
  imul   %rbp,%rsi
  imul   %r12,%r11
  imul   %rbp,%rbx
  add    %r11,%rsi
  jb     L224
L539:
  mov    %rsi,%r11
  shl    $0x20,%rsi
  shr    $0x20,%r11
  add    %rsi,%r9
  adc    %r11,%rbx
  mov    %rbx,%rsi
  shr    $0x3f,%rsi
  add    %rsi,%rcx
  mov    %r9,%rsi
  add    %r9,%r9
  shr    $0x3f,%rsi
  lea    (%rsi,%rbx,2),%rsi
  add    %r10,%r9
  jb     L1275
L756:
  add    %rdx,%rsi
  setb   %dl
  mov    %rsi,%r8
  movzbl %dl,%edx
  cmp    $0x1,%rdx
  sbb    $0xffffffffffffffff,%rcx
L950:
  mov    0x20(%rax),%r10
  mov    (%rax),%r11
  mov    %r10d,%esi
  mov    %r11d,%ebp
  shr    $0x20,%r10
  shr    $0x20,%r11
  mov    %rsi,%rdx
  mov    %r10,%rbx
  imul   %r11,%rsi
  imul   %rbp,%r10
  imul   %rbp,%rdx
  imul   %r11,%rbx
  add    %r10,%rsi
  jb     L777
L684:
  mov    %rsi,%r10
  shl    $0x20,%rsi
  shr    $0x20,%r10
  add    %rsi,%rdx
  adc    %r10,%rbx
  mov    %rbx,%r10
  shr    $0x3f,%r10
  add    %r10,%rcx
  mov    %rdx,%r10
  add    %rdx,%rdx
  shr    $0x3f,%r10
  lea    (%r10,%rbx,2),%rsi
  add    %rdx,%r9
  jb     L29
L491:
  xor    %edx,%edx
  add    %r8,%rsi
  setb   %dl
  mov    %rsi,%r8
  cmp    $0x1,%rdx
  sbb    $0xffffffffffffffff,%rcx
L1298:
  mov    %r9,0x20(%rdi)
  mov    0x28(%rax),%r9
  mov    (%rax),%r10
  mov    %r9d,%esi
  shr    $0x20,%r9
  mov    %r10d,%ebx
  shr    $0x20,%r10
  mov    %rsi,%rdx
  mov    %r9,%r11
  imul   %r10,%rsi
  imul   %rbx,%r9
  imul   %rbx,%rdx
  imul   %r10,%r11
  add    %r9,%rsi
  jb     L184
L785:
  mov    %rsi,%r9
  shl    $0x20,%rsi
  shr    $0x20,%r9
  add    %rsi,%rdx
  adc    %r11,%r9
  mov    %rdx,%r10
  add    %rdx,%rdx
  mov    %r9,%rsi
  shr    $0x3f,%r10
  shr    $0x3f,%rsi
  lea    (%r10,%r9,2),%r9
  add    %r8,%rdx
  jb     L639
L192:
  add    %rcx,%r9
  mov    %r9,%rcx
  adc    $0x0,%rsi
L1381:
  mov    0x20(%rax),%r10
  mov    0x8(%rax),%r11
  mov    %r10d,%r8d
  mov    %r11d,%ebp
  shr    $0x20,%r10
  shr    $0x20,%r11
  mov    %r8,%r9
  mov    %r10,%rbx
  imul   %r11,%r8
  imul   %rbp,%r10
  imul   %rbp,%r9
  imul   %r11,%rbx
  add    %r10,%r8
  jb     L1163
L38:
  mov    %r8,%r10
  shl    $0x20,%r8
  shr    $0x20,%r10
  add    %r8,%r9
  adc    %r10,%rbx
  mov    %rbx,%r10
  shr    $0x3f,%r10
  add    %r10,%rsi
  mov    %r9,%r10
  add    %r9,%r9
  shr    $0x3f,%r10
  lea    (%r10,%rbx,2),%r8
  add    %r9,%rdx
  jb     L867
L423:
  xor    %r9d,%r9d
  add    %rcx,%r8
  setb   %r9b
  mov    %r8,%rcx
  cmp    $0x1,%r9
  sbb    $0xffffffffffffffff,%rsi
L838:
  mov    0x18(%rax),%r10
  mov    0x10(%rax),%r11
  mov    %r10d,%r8d
  mov    %r11d,%ebp
  shr    $0x20,%r10
  shr    $0x20,%r11
  mov    %r8,%r9
  mov    %r10,%rbx
  imul   %r11,%r8
  imul   %rbp,%r10
  imul   %rbp,%r9
  imul   %r11,%rbx
  add    %r10,%r8
  jb     L49
L1296:
  mov    %r8,%r10
  shl    $0x20,%r8
  shr    $0x20,%r10
  add    %r8,%r9
  adc    %r10,%rbx
  mov    %rbx,%r10
  shr    $0x3f,%r10
  add    %r10,%rsi
  mov    %r9,%r10
  add    %r9,%r9
  shr    $0x3f,%r10
  lea    (%r10,%rbx,2),%r8
  add    %r9,%rdx
  jb     L902
L766:
  xor    %r9d,%r9d
  add    %rcx,%r8
  setb   %r9b
  mov    %r8,%rcx
  cmp    $0x1,%r9
  sbb    $0xffffffffffffffff,%rsi
L920:
  mov    %rdx,0x28(%rdi)
  mov    0x18(%rax),%rdx
  mov    0x20(%rax),%r11
  mov    0x10(%rax),%rbp
  mov    %edx,%r8d
  shr    $0x20,%rdx
  mov    %r8,%r9
  imul   %r8,%r8
  mov    %ebp,%r12d
  imul   %rdx,%r9
  imul   %rdx,%rdx
  mov    %r9,%r10
  shl    $0x21,%r9
  shr    $0x1f,%r10
  add    %r9,%r8
  adc    %r10,%rdx
  add    %rcx,%r8
  adc    $0x0,%rdx
  mov    %r8,%r9
  add    %rsi,%rdx
  mov    %r11d,%esi
  setb   %cl
  shr    $0x20,%r11
  mov    %rsi,%r10
  mov    %rdx,%r8
  shr    $0x20,%rbp
  imul   %r12,%r10
  mov    %r11,%rbx
  movzbl %cl,%ecx
  imul   %rbp,%rsi
  imul   %r12,%r11
  imul   %rbp,%rbx
  add    %r11,%rsi
  jb     L1013
L627:
  mov    %rsi,%r11
  shl    $0x20,%rsi
  shr    $0x20,%r11
  add    %rsi,%r10
  adc    %r11,%rbx
  mov    %rbx,%rsi
  shr    $0x3f,%rsi
  add    %rsi,%rcx
  mov    %r10,%rsi
  add    %r10,%r10
  shr    $0x3f,%rsi
  lea    (%rsi,%rbx,2),%rsi
  add    %r10,%r9
  jb     L1349
L372:
  add    %rdx,%rsi
  setb   %dl
  mov    %rsi,%r8
  movzbl %dl,%edx
  cmp    $0x1,%rdx
  sbb    $0xffffffffffffffff,%rcx
L586:
  mov    0x28(%rax),%r10
  mov    0x8(%rax),%r11
  mov    %r10d,%esi
  mov    %r11d,%ebp
  shr    $0x20,%r10
  shr    $0x20,%r11
  mov    %rsi,%rdx
  mov    %r10,%rbx
  imul   %r11,%rsi
  imul   %rbp,%r10
  imul   %rbp,%rdx
  imul   %r11,%rbx
  add    %r10,%rsi
  jb     L1200
L743:
  mov    %rsi,%r10
  shl    $0x20,%rsi
  shr    $0x20,%r10
  add    %rsi,%rdx
  adc    %r10,%rbx
  mov    %rbx,%r10
  shr    $0x3f,%r10
  add    %r10,%rcx
  mov    %rdx,%r10
  add    %rdx,%rdx
  shr    $0x3f,%r10
  lea    (%r10,%rbx,2),%rsi
  add    %r9,%rdx
  jb     L1327
L885:
  xor    %r9d,%r9d
  add    %r8,%rsi
  setb   %r9b
  mov    %rsi,%r8
  cmp    $0x1,%r9
  sbb    $0xffffffffffffffff,%rcx
L1359:
  mov    0x30(%rax),%r10
  mov    (%rax),%r11
  mov    %r10d,%esi
  mov    %r11d,%ebp
  shr    $0x20,%r10
  shr    $0x20,%r11
  mov    %rsi,%r9
  mov    %r10,%rbx
  imul   %r11,%rsi
  imul   %rbp,%r10
  imul   %rbp,%r9
  imul   %r11,%rbx
  add    %r10,%rsi
  jb     L1195
L511:
  mov    %rsi,%r10
  shl    $0x20,%rsi
  shr    $0x20,%r10
  add    %rsi,%r9
  adc    %r10,%rbx
  mov    %rbx,%r10
  shr    $0x3f,%r10
  add    %r10,%rcx
  mov    %r9,%r10
  add    %r9,%r9
  shr    $0x3f,%r10
  lea    (%r10,%rbx,2),%rsi
  add    %r9,%rdx
  jb     L906
L1214:
  xor    %r9d,%r9d
  add    %r8,%rsi
  setb   %r9b
  mov    %rsi,%r8
  cmp    $0x1,%r9
  sbb    $0xffffffffffffffff,%rcx
L934:
  mov    %rdx,0x30(%rdi)
  mov    0x38(%rax),%r9
  mov    (%rax),%r10
  mov    %r9d,%esi
  shr    $0x20,%r9
  mov    %r10d,%ebx
  shr    $0x20,%r10
  mov    %rsi,%rdx
  mov    %r9,%r11
  imul   %r10,%rsi
  imul   %rbx,%r9
  imul   %rbx,%rdx
  imul   %r10,%r11
  add    %r9,%rsi
  jb     L183
L728:
  mov    %rsi,%r9
  shl    $0x20,%rsi
  shr    $0x20,%r9
  add    %rsi,%rdx
  adc    %r11,%r9
  mov    %rdx,%r10
  add    %rdx,%rdx
  mov    %r9,%rsi
  shr    $0x3f,%r10
  shr    $0x3f,%rsi
  lea    (%r10,%r9,2),%r9
  add    %r8,%rdx
  jb     L319
L1363:
  add    %rcx,%r9
  mov    %r9,%rcx
  adc    $0x0,%rsi
L417:
  mov    0x30(%rax),%r10
  mov    0x8(%rax),%r11
  mov    %r10d,%r8d
  mov    %r11d,%ebp
  shr    $0x20,%r10
  shr    $0x20,%r11
  mov    %r8,%r9
  mov    %r10,%rbx
  imul   %r11,%r8
  imul   %rbp,%r10
  imul   %rbp,%r9
  imul   %r11,%rbx
  add    %r10,%r8
  jb     L1080
L1016:
  mov    %r8,%r10
  shl    $0x20,%r8
  shr    $0x20,%r10
  add    %r8,%r9
  adc    %r10,%rbx
  mov    %rbx,%r10
  shr    $0x3f,%r10
  add    %r10,%rsi
  mov    %r9,%r10
  add    %r9,%r9
  shr    $0x3f,%r10
  lea    (%r10,%rbx,2),%r8
  add    %r9,%rdx
  jb     L570
L81:
  xor    %r9d,%r9d
  add    %rcx,%r8
  setb   %r9b
  mov    %r8,%rcx
  cmp    $0x1,%r9
  sbb    $0xffffffffffffffff,%rsi
L294:
  mov    0x28(%rax),%r10
  mov    0x10(%rax),%r11
  mov    %r10d,%r8d
  mov    %r11d,%ebp
  shr    $0x20,%r10
  shr    $0x20,%r11
  mov    %r8,%r9
  mov    %r10,%rbx
  imul   %r11,%r8
  imul   %rbp,%r10
  imul   %rbp,%r9
  imul   %r11,%rbx
  add    %r10,%r8
  jb     L634
L615:
  mov    %r8,%r10
  shl    $0x20,%r8
  shr    $0x20,%r10
  add    %r8,%r9
  adc    %r10,%rbx
  mov    %rbx,%r10
  shr    $0x3f,%r10
  add    %r10,%rsi
  mov    %r9,%r10
  add    %r9,%r9
  shr    $0x3f,%r10
  lea    (%r10,%rbx,2),%r8
  add    %r9,%rdx
  jb     L896
L1222:
  xor    %r9d,%r9d
  add    %rcx,%r8
  setb   %r9b
  mov    %r8,%rcx
  cmp    $0x1,%r9
  sbb    $0xffffffffffffffff,%rsi
L1234:
  mov    0x20(%rax),%r10
  mov    0x18(%rax),%r11
  mov    %r10d,%r8d
  mov    %r11d,%ebp
  shr    $0x20,%r10
  shr    $0x20,%r11
  mov    %r8,%r9
  mov    %r10,%rbx
  imul   %r11,%r8
  imul   %rbp,%r10
  imul   %rbp,%r9
  imul   %r11,%rbx
  add    %r10,%r8
  jb     L136
L383:
  mov    %r8,%r10
  shl    $0x20,%r8
  shr    $0x20,%r10
  add    %r8,%r9
  adc    %r10,%rbx
  mov    %rbx,%r10
  shr    $0x3f,%r10
  add    %r10,%rsi
  mov    %r9,%r10
  add    %r9,%r9
  shr    $0x3f,%r10
  lea    (%r10,%rbx,2),%r8
  add    %r9,%rdx
  jb     L669
L266:
  xor    %r9d,%r9d
  add    %rcx,%r8
  setb   %r9b
  mov    %r8,%rcx
  cmp    $0x1,%r9
  sbb    $0xffffffffffffffff,%rsi
L410:
  mov    %rdx,0x38(%rdi)
  mov    0x20(%rax),%rdx
  mov    0x28(%rax),%r11
  mov    0x18(%rax),%rbp
  mov    %edx,%r8d
  shr    $0x20,%rdx
  mov    %r8,%r9
  imul   %r8,%r8
  mov    %ebp,%r12d
  imul   %rdx,%r9
  imul   %rdx,%rdx
  mov    %r9,%r10
  shl    $0x21,%r9
  shr    $0x1f,%r10
  add    %r9,%r8
  adc    %r10,%rdx
  add    %rcx,%r8
  mov    %r11d,%ecx
  adc    $0x0,%rdx
  mov    %rcx,%r9
  mov    %r8,%r10
  add    %rdx,%rsi
  setb   %dl
  shr    $0x20,%r11
  imul   %r12,%r9
  mov    %rsi,%r8
  shr    $0x20,%rbp
  mov    %r11,%rbx
  movzbl %dl,%edx
  imul   %rbp,%rcx
  imul   %r12,%r11
  imul   %rbp,%rbx
  add    %r11,%rcx
  jb     L486
L1140:
  mov    %rcx,%r11
  shl    $0x20,%rcx
  shr    $0x20,%r11
  add    %rcx,%r9
  adc    %r11,%rbx
  mov    %rbx,%rcx
  shr    $0x3f,%rcx
  add    %rcx,%rdx
  mov    %r9,%rcx
  add    %r9,%r9
  shr    $0x3f,%rcx
  lea    (%rcx,%rbx,2),%rcx
  add    %r10,%r9
  jb     L248
L870:
  add    %rsi,%rcx
  setb   %sil
  mov    %rcx,%r8
  movzbl %sil,%esi
  cmp    $0x1,%rsi
  sbb    $0xffffffffffffffff,%rdx
L220:
  mov    0x30(%rax),%r10
  mov    0x10(%rax),%r11
  mov    %r10d,%ecx
  mov    %r11d,%ebp
  shr    $0x20,%r10
  shr    $0x20,%r11
  mov    %rcx,%rsi
  mov    %r10,%rbx
  imul   %r11,%rcx
  imul   %rbp,%r10
  imul   %rbp,%rsi
  imul   %r11,%rbx
  add    %r10,%rcx
  jb     L837
L1246:
  mov    %rcx,%r10
  shl    $0x20,%rcx
  shr    $0x20,%r10
  add    %rcx,%rsi
  adc    %r10,%rbx
  mov    %rbx,%r10
  shr    $0x3f,%r10
  add    %r10,%rdx
  mov    %rsi,%r10
  add    %rsi,%rsi
  shr    $0x3f,%r10
  lea    (%r10,%rbx,2),%rcx
  add    %rsi,%r9
  jb     L263
L426:
  xor    %esi,%esi
  add    %r8,%rcx
  setb   %sil
  mov    %rcx,%r8
  cmp    $0x1,%rsi
  sbb    $0xffffffffffffffff,%rdx
L744:
  mov    0x38(%rax),%r10
  mov    0x8(%rax),%r11
  mov    %r10d,%ecx
  mov    %r11d,%ebp
  shr    $0x20,%r10
  shr    $0x20,%r11
  mov    %rcx,%rsi
  mov    %r10,%rbx
  imul   %r11,%rcx
  imul   %rbp,%r10
  imul   %rbp,%rsi
  imul   %r11,%rbx
  add    %r10,%rcx
  jb     L404
L1372:
  mov    %rcx,%r10
  shl    $0x20,%rcx
  shr    $0x20,%r10
  add    %rcx,%rsi
  adc    %r10,%rbx
  mov    %rbx,%r10
  shr    $0x3f,%r10
  add    %r10,%rdx
  mov    %rsi,%r10
  add    %rsi,%rsi
  shr    $0x3f,%r10
  lea    (%r10,%rbx,2),%rcx
  add    %r9,%rsi
  jb     L768
L690:
  xor    %r9d,%r9d
  add    %r8,%rcx
  setb   %r9b
  mov    %rcx,%r8
  cmp    $0x1,%r9
  sbb    $0xffffffffffffffff,%rdx
L1178:
  mov    %rsi,0x40(%rdi)
  mov    0x38(%rax),%r9
  mov    0x10(%rax),%r10
  mov    %r9d,%ecx
  shr    $0x20,%r9
  mov    %r10d,%ebx
  shr    $0x20,%r10
  mov    %rcx,%rsi
  mov    %r9,%r11
  imul   %r10,%rcx
  imul   %rbx,%r9
  imul   %rbx,%rsi
  imul   %r10,%r11
  add    %r9,%rcx
  jb     L641
L1367:
  mov    %rcx,%r9
  shl    $0x20,%rcx
  shr    $0x20,%r9
  add    %rsi,%rcx
  adc    %r11,%r9
  mov    %rcx,%r10
  add    %rcx,%rcx
  mov    %r9,%rsi
  shr    $0x3f,%r10
  shr    $0x3f,%rsi
  add    %r8,%rcx
  lea    (%r10,%r9,2),%r10
  mov    %rcx,%r9
  jb     L787
L1325:
  add    %rdx,%r10
  mov    %r10,%rdx
  adc    $0x0,%rsi
L1045:
  mov    0x30(%rax),%r10
  mov    0x18(%rax),%r11
  mov    %r10d,%ecx
  mov    %r11d,%ebp
  shr    $0x20,%r10
  shr    $0x20,%r11
  mov    %rcx,%r8
  mov    %r10,%rbx
  imul   %r11,%rcx
  imul   %rbp,%r10
  imul   %rbp,%r8
  imul   %r11,%rbx
  add    %r10,%rcx
  jb     L207
L1152:
  mov    %rcx,%r10
  shl    $0x20,%rcx
  shr    $0x20,%r10
  add    %rcx,%r8
  adc    %r10,%rbx
  mov    %rbx,%r10
  shr    $0x3f,%r10
  add    %r10,%rsi
  mov    %r8,%r10
  add    %r8,%r8
  shr    $0x3f,%r10
  lea    (%r10,%rbx,2),%rcx
  add    %r8,%r9
  jb     L1382
L620:
  xor    %r8d,%r8d
  add    %rdx,%rcx
  setb   %r8b
  mov    %rcx,%rdx
  cmp    $0x1,%r8
  sbb    $0xffffffffffffffff,%rsi
L942:
  mov    0x28(%rax),%r10
  mov    0x20(%rax),%r11
  mov    %r10d,%ecx
  mov    %r11d,%ebp
  shr    $0x20,%r10
  shr    $0x20,%r11
  mov    %rcx,%r8
  mov    %r10,%rbx
  imul   %r11,%rcx
  imul   %rbp,%r10
  imul   %rbp,%r8
  imul   %r11,%rbx
  add    %r10,%rcx
  jb     L89
L1386:
  mov    %rcx,%r10
  shl    $0x20,%rcx
  shr    $0x20,%r10
  add    %rcx,%r8
  adc    %r10,%rbx
  mov    %rbx,%r10
  shr    $0x3f,%r10
  add    %r10,%rsi
  mov    %r8,%r10
  add    %r8,%r8
  shr    $0x3f,%r10
  lea    (%r10,%rbx,2),%rcx
  add    %r8,%r9
  jb     L1114
L78:
  xor    %r8d,%r8d
  add    %rdx,%rcx
  setb   %r8b
  mov    %rcx,%rdx
  cmp    $0x1,%r8
  sbb    $0xffffffffffffffff,%rsi
L309:
  mov    %r9,0x48(%rdi)
  mov    0x28(%rax),%rcx
  mov    0x30(%rax),%r11
  mov    0x20(%rax),%rbp
  mov    %ecx,%r8d
  shr    $0x20,%rcx
  mov    %r8,%r9
  imul   %r8,%r8
  mov    %ebp,%r12d
  imul   %rcx,%r9
  imul   %rcx,%rcx
  mov    %r9,%r10
  shl    $0x21,%r9
  shr    $0x1f,%r10
  add    %r9,%r8
  adc    %r10,%rcx
  add    %rdx,%r8
  mov    %r11d,%edx
  adc    $0x0,%rcx
  mov    %rdx,%r9
  mov    %r8,%r10
  add    %rsi,%rcx
  setb   %sil
  shr    $0x20,%r11
  imul   %r12,%r9
  mov    %rcx,%r8
  shr    $0x20,%rbp
  mov    %r11,%rbx
  movzbl %sil,%esi
  imul   %rbp,%rdx
  imul   %r12,%r11
  imul   %rbp,%rbx
  add    %r11,%rdx
  jb     L171
L991:
  mov    %rdx,%r11
  shl    $0x20,%rdx
  shr    $0x20,%r11
  add    %rdx,%r9
  adc    %r11,%rbx
  mov    %rbx,%rdx
  shr    $0x3f,%rdx
  add    %rdx,%rsi
  mov    %r9,%rdx
  add    %r9,%r9
  shr    $0x3f,%rdx
  lea    (%rdx,%rbx,2),%rdx
  add    %r10,%r9
  jb     L1097
L1079:
  add    %rcx,%rdx
  setb   %cl
  mov    %rdx,%r8
  movzbl %cl,%ecx
  cmp    $0x1,%rcx
  sbb    $0xffffffffffffffff,%rsi
L1052:
  mov    0x38(%rax),%r10
  mov    0x18(%rax),%r11
  mov    %r10d,%edx
  mov    %r11d,%ebp
  shr    $0x20,%r10
  shr    $0x20,%r11
  mov    %rdx,%rcx
  mov    %r10,%rbx
  imul   %r11,%rdx
  imul   %rbp,%r10
  imul   %rbp,%rcx
  imul   %r11,%rbx
  add    %r10,%rdx
  jb     L1149
L1281:
  mov    %rdx,%r10
  shl    $0x20,%rdx
  shr    $0x20,%r10
  add    %rdx,%rcx
  adc    %r10,%rbx
  mov    %rbx,%r10
  shr    $0x3f,%r10
  add    %r10,%rsi
  mov    %rcx,%r10
  add    %rcx,%rcx
  shr    $0x3f,%r10
  lea    (%r10,%rbx,2),%rdx
  add    %rcx,%r9
  jb     L591
L476:
  xor    %ecx,%ecx
  add    %r8,%rdx
  setb   %cl
  mov    %rdx,%r8
  cmp    $0x1,%rcx
  sbb    $0xffffffffffffffff,%rsi
L115:
  mov    %r9,0x50(%rdi)
  mov    0x38(%rax),%r9
  mov    0x20(%rax),%r10
  mov    %r9d,%edx
  shr    $0x20,%r9
  mov    %r10d,%ebx
  shr    $0x20,%r10
  mov    %rdx,%rcx
  mov    %r9,%r11
  imul   %r10,%rdx
  imul   %rbx,%r9
  imul   %rbx,%rcx
  imul   %r10,%r11
  add    %r9,%rdx
  jb     L928
L1:
  mov    %rdx,%r9
  shl    $0x20,%rdx
  shr    $0x20,%r9
  add    %rdx,%rcx
  mov    %r11,%rdx
  adc    %r9,%rdx
  mov    %rcx,%r10
  add    %rcx,%rcx
  mov    %rdx,%r9
  shr    $0x3f,%r10
  shr    $0x3f,%r9
  lea    (%r10,%rdx,2),%rdx
  add    %r8,%rcx
  jb     L1005
L15:
  add    %rsi,%rdx
  mov    %rdx,%rsi
  adc    $0x0,%r9
L593:
  mov    0x30(%rax),%r10
  mov    0x28(%rax),%r11
  mov    %r10d,%r8d
  mov    %r11d,%ebp
  shr    $0x20,%r10
  shr    $0x20,%r11
  mov    %r8,%rdx
  mov    %r10,%rbx
  imul   %r11,%r8
  imul   %rbp,%r10
  imul   %rbp,%rdx
  imul   %r11,%rbx
  add    %r10,%r8
  jb     L218
L1059:
  mov    %r8,%r10
  shl    $0x20,%r8
  shr    $0x20,%r10
  add    %r8,%rdx
  adc    %r10,%rbx
  mov    %rbx,%r10
  shr    $0x3f,%r10
  add    %r10,%r9
  mov    %rdx,%r10
  add    %rdx,%rdx
  shr    $0x3f,%r10
  lea    (%r10,%rbx,2),%r8
  add    %rdx,%rcx
  jb     L114
L26:
  xor    %edx,%edx
  add    %rsi,%r8
  setb   %dl
  mov    %r8,%rsi
  cmp    $0x1,%rdx
  sbb    $0xffffffffffffffff,%r9
L1304:
  mov    %rcx,0x58(%rdi)
  mov    0x30(%rax),%rdx
  mov    0x38(%rax),%r11
  mov    0x28(%rax),%rbp
  mov    %edx,%ecx
  shr    $0x20,%rdx
  mov    %rcx,%r8
  imul   %rcx,%rcx
  mov    %ebp,%r12d
  imul   %rdx,%r8
  imul   %rdx,%rdx
  mov    %r8,%r10
  shl    $0x21,%r8
  shr    $0x1f,%r10
  add    %r8,%rcx
  adc    %r10,%rdx
  add    %rsi,%rcx
  adc    $0x0,%rdx
  mov    %rcx,%r10
  mov    %r11d,%ecx
  add    %r9,%rdx
  mov    %rcx,%r9
  setb   %sil
  shr    $0x20,%r11
  imul   %r12,%r9
  mov    %rdx,%r8
  shr    $0x20,%rbp
  mov    %r11,%rbx
  movzbl %sil,%esi
  imul   %rbp,%rcx
  imul   %r12,%r11
  imul   %rbp,%rbx
  add    %r11,%rcx
  jb     L915
L538:
  mov    %rcx,%r11
  shl    $0x20,%rcx
  shr    $0x20,%r11
  add    %rcx,%r9
  adc    %r11,%rbx
  mov    %rbx,%rcx
  shr    $0x3f,%rcx
  add    %rcx,%rsi
  mov    %r9,%rcx
  add    %r9,%r9
  shr    $0x3f,%rcx
  lea    (%rcx,%rbx,2),%r11
  mov    %r10,%rcx
  add    %r9,%rcx
  jb     L254
L1102:
  add    %rdx,%r11
  setb   %dl
  mov    %r11,%r8
  movzbl %dl,%edx
  cmp    $0x1,%rdx
  sbb    $0xffffffffffffffff,%rsi
L1164:
  mov    %rcx,0x60(%rdi)
  mov    0x38(%rax),%r9
  mov    0x30(%rax),%r10
  mov    %r9d,%ecx
  shr    $0x20,%r9
  mov    %r10d,%ebx
  shr    $0x20,%r10
  mov    %rcx,%rdx
  mov    %r9,%r11
  imul   %r10,%rcx
  imul   %rbx,%r9
  imul   %rbx,%rdx
  imul   %r10,%r11
  add    %r9,%rcx
  jb     L978
L1073:
  mov    %rcx,%r9
  shl    $0x20,%rcx
  shr    $0x20,%r9
  add    %rcx,%rdx
  adc    %r11,%r9
  mov    %rdx,%r10
  add    %rdx,%rdx
  mov    %r9,%rcx
  shr    $0x3f,%r10
  shr    $0x3f,%rcx
  lea    (%r10,%r9,2),%r9
  add    %r8,%rdx
  jb     L415
L407:
  add    %rsi,%r9
  mov    %r9,%rsi
  adc    $0x0,%rcx
L610:
  mov    %rdx,0x68(%rdi)
  mov    0x38(%rax),%rdx
  pop    %rbx
  pop    %rbp
  mov    %edx,%eax
  shr    $0x20,%rdx
  pop    %r12
  mov    %rax,%r8
  imul   %rax,%rax
  imul   %rdx,%r8
  imul   %rdx,%rdx
  mov    %r8,%r9
  shl    $0x21,%r8
  shr    $0x1f,%r9
  add    %r8,%rax
  adc    %r9,%rdx
  add    %rsi,%rax
  adc    %rdx,%rcx
  movq   %rax,%xmm0
  movq   %rcx,%xmm1
  punpcklqdq %xmm1,%xmm0
  movups %xmm0,0x70(%rdi)
  ret
L726:
  movabs $0x100000000,%r8
  add    %r8,%r10
  jmp    L212
L415:
  add    $0x1,%r9
  jne    L407
  add    $0x1,%rcx
  jmp    L610
L978:
  movabs $0x100000000,%r9
  add    %r9,%r11
  jmp    L1073
L254:
  add    $0x1,%r11
  jne    L1102
  add    $0x1,%rsi
  jmp    L1164
L915:
  movabs $0x100000000,%r11
  add    %r11,%rbx
  jmp    L538
L114:
  add    $0x1,%r8
  jne    L26
  add    $0x1,%r9
  jmp    L1304
L218:
  movabs $0x100000000,%r10
  add    %r10,%rbx
  jmp    L1059
L1005:
  add    $0x1,%rdx
  jne    L15
  add    $0x1,%r9
  jmp    L593
L928:
  movabs $0x100000000,%r9
  add    %r9,%r11
  jmp    L1
L591:
  add    $0x1,%rdx
  jne    L476
  add    $0x1,%rsi
  jmp    L115
L1149:
  movabs $0x100000000,%r10
  add    %r10,%rbx
  jmp    L1281
L1097:
  add    $0x1,%rdx
  jne    L1079
  add    $0x1,%rsi
  jmp    L1052
L171:
  movabs $0x100000000,%r11
  add    %r11,%rbx
  jmp    L991
L1114:
  add    $0x1,%rcx
  jne    L78
  add    $0x1,%rsi
  jmp    L309
L89:
  movabs $0x100000000,%r10
  add    %r10,%rbx
  jmp    L1386
L1382:
  add    $0x1,%rcx
  jne    L620
  add    $0x1,%rsi
  jmp    L942
L207:
  movabs $0x100000000,%r10
  add    %r10,%rbx
  jmp    L1152
L787:
  add    $0x1,%r10
  jne    L1325
  add    $0x1,%rsi
  jmp    L1045
L641:
  movabs $0x100000000,%r9
  add    %r9,%r11
  jmp    L1367
L768:
  add    $0x1,%rcx
  jne    L690
  add    $0x1,%rdx
  jmp    L1178
L404:
  movabs $0x100000000,%r10
  add    %r10,%rbx
  jmp    L1372
L263:
  add    $0x1,%rcx
  jne    L426
  add    $0x1,%rdx
  jmp    L744
L837:
  movabs $0x100000000,%r10
  add    %r10,%rbx
  jmp    L1246
L248:
  add    $0x1,%rcx
  jne    L870
  add    $0x1,%rdx
  jmp    L220
L486:
  movabs $0x100000000,%r11
  add    %r11,%rbx
  jmp    L1140
L669:
  add    $0x1,%r8
  jne    L266
  add    $0x1,%rsi
  jmp    L410
L136:
  movabs $0x100000000,%r10
  add    %r10,%rbx
  jmp    L383
L896:
  add    $0x1,%r8
  jne    L1222
  add    $0x1,%rsi
  jmp    L1234
L634:
  movabs $0x100000000,%r10
  add    %r10,%rbx
  jmp    L615
L570:
  add    $0x1,%r8
  jne    L81
  add    $0x1,%rsi
  jmp    L294
L1080:
  movabs $0x100000000,%r10
  add    %r10,%rbx
  jmp    L1016
L319:
  add    $0x1,%r9
  jne    L1363
  add    $0x1,%rsi
  jmp    L417
L183:
  movabs $0x100000000,%r9
  add    %r9,%r11
  jmp    L728
L906:
  add    $0x1,%rsi
  jne    L1214
  add    $0x1,%rcx
  jmp    L934
L1195:
  movabs $0x100000000,%r10
  add    %r10,%rbx
  jmp    L511
L1327:
  add    $0x1,%rsi
  jne    L885
  add    $0x1,%rcx
  jmp    L1359
L1200:
  movabs $0x100000000,%r10
  add    %r10,%rbx
  jmp    L743
L1349:
  add    $0x1,%rsi
  jne    L372
  add    $0x1,%rcx
  jmp    L586
L1013:
  movabs $0x100000000,%r11
  add    %r11,%rbx
  jmp    L627
L902:
  add    $0x1,%r8
  jne    L766
  add    $0x1,%rsi
  jmp    L920
L49:
  movabs $0x100000000,%r10
  add    %r10,%rbx
  jmp    L1296
L867:
  add    $0x1,%r8
  jne    L423
  add    $0x1,%rsi
  jmp    L838
L1163:
  movabs $0x100000000,%r10
  add    %r10,%rbx
  jmp    L38
L639:
  add    $0x1,%r9
  jne    L192
  add    $0x1,%rsi
  jmp    L1381
L184:
  movabs $0x100000000,%r9
  add    %r9,%r11
  jmp    L785
L29:
  add    $0x1,%rsi
  jne    L491
  add    $0x1,%rcx
  jmp    L1298
L777:
  movabs $0x100000000,%r10
  add    %r10,%rbx
  jmp    L684
L1275:
  add    $0x1,%rsi
  jne    L756
  add    $0x1,%rcx
  jmp    L950
L224:
  movabs $0x100000000,%r11
  add    %r11,%rbx
  jmp    L539
L737:
  add    $0x1,%rsi
  jne    L75
  add    $0x1,%r9
  jmp    L1371
L112:
  movabs $0x100000000,%r10
  add    %r10,%rbx
  jmp    L767
L353:
  add    $0x1,%rdx
  jne    L919
  add    $0x1,%r9
  jmp    L931
L1220:
  movabs $0x100000000,%r9
  add    %r9,%r11
  jmp    L51
L1177:
  add    $0x1,%rcx
  jne    L1120
  add    $0x1,%r8
  jmp    L844
L939:
  movabs $0x100000000,%r11
  add    %r11,%rbx
  jmp    L1230
L406:
  add    $0x1,%r9
  jne    L675
  add    $0x1,%r8
  jmp    L675
```

assistant: ```c
void bn_sqr_comba8(unsigned long long *r, unsigned long long *a) {
  unsigned long long bl, bh;
  unsigned long long t1, t2;
  unsigned long long c1, c2, c3;
  c1 = 0;
  c2 = 0;
  c3 = 0;
  {
    unsigned long long l, h, m;
    h = ((a)[0]);
    l = ((h) & (0xffffffffL));
    h = (((h) >> 32) & (0xffffffffL));
    m = (l) * (h);
    l *= l;
    h *= h;
    h += (m & (0xffffffff80000000LL)) >> (32 - 1);
    m = (m & (0xffffffffL)) << (32 + 1);
    l = (l + m) & (0xffffffffffffffffLL);
    if (l < m)
      h++;
    (t1) = l;
    (t2) = h;
  };
  c1 = (c1 + t1) & (0xffffffffffffffffLL);
  if ((c1) < t1)
    t2++;
  c2 = (c2 + t2) & (0xffffffffffffffffLL);
  if ((c2) < t2)
    c3++;
  ;
  r[0] = c1;
  c1 = 0;
  t1 = (((a)[1]) & (0xffffffffL));
  t2 = ((((a)[1]) >> 32) & (0xffffffffL));
  bl = (((a)[0]) & (0xffffffffL));
  bh = ((((a)[0]) >> 32) & (0xffffffffL));
  {
    unsigned long long m, m1, lt, ht;
    lt = t1;
    ht = t2;
    m = (bh) * (lt);
    lt = (bl) * (lt);
    m1 = (bl) * (ht);
    ht = (bh) * (ht);
    m = (m + m1) & (0xffffffffffffffffLL);
    if (m < m1)
      ht += ((unsigned long long)((1L) & (0xffffffffL)) << 32);
    ht += (((m) >> 32) & (0xffffffffL));
    m1 = ((unsigned long long)((m) & (0xffffffffL)) << 32);
    lt = (lt + m1) & (0xffffffffffffffffLL);
    if (lt < m1)
      ht++;
    (t1) = lt;
    (t2) = ht;
  };
  if (t2 & (0x8000000000000000LL))
    c1++;
  t2 = (t2 + t2) & (0xffffffffffffffffLL);
  if (t1 & (0x8000000000000000LL))
    t2++;
  t1 = (t1 + t1) & (0xffffffffffffffffLL);
  c2 = (c2 + t1) & (0xffffffffffffffffLL);
  if ((c2 < t1) && (((++t2) & (0xffffffffffffffffLL)) == 0))
    c1++;
  c3 = (c3 + t2) & (0xffffffffffffffffLL);
  if ((c3) < t2)
    c1++;
  ;
  r[1] = c2;
  c2 = 0;
  {
    unsigned long long l, h, m;
    h = ((a)[1]);
    l = ((h) & (0xffffffffL));
    h = (((h) >> 32) & (0xffffffffL));
    m = (l) * (h);
    l *= l;
    h *= h;
    h += (m & (0xffffffff80000000LL)) >> (32 - 1);
    m = (m & (0xffffffffL)) << (32 + 1);
    l = (l + m) & (0xffffffffffffffffLL);
    if (l < m)
      h++;
    (t1) = l;
    (t2) = h;
  };
  c3 = (c3 + t1) & (0xffffffffffffffffLL);
  if ((c3) < t1)
    t2++;
  c1 = (c1 + t2) & (0xffffffffffffffffLL);
  if ((c1) < t2)
    c2++;
  ;
  t1 = (((a)[2]) & (0xffffffffL));
  t2 = ((((a)[2]) >> 32) & (0xffffffffL));
  bl = (((a)[0]) & (0xffffffffL));
  bh = ((((a)[0]) >> 32) & (0xffffffffL));
  {
    unsigned long long m, m1, lt, ht;
    lt = t1;
    ht = t2;
    m = (bh) * (lt);
    lt = (bl) * (lt);
    m1 = (bl) * (ht);
    ht = (bh) * (ht);
    m = (m + m1) & (0xffffffffffffffffLL);
    if (m < m1)
      ht += ((unsigned long long)((1L) & (0xffffffffL)) << 32);
    ht += (((m) >> 32) & (0xffffffffL));
    m1 = ((unsigned long long)((m) & (0xffffffffL)) << 32);
    lt = (lt + m1) & (0xffffffffffffffffLL);
    if (lt < m1)
      ht++;
    (t1) = lt;
    (t2) = ht;
  };
  if (t2 & (0x8000000000000000LL))
    c2++;
  t2 = (t2 + t2) & (0xffffffffffffffffLL);
  if (t1 & (0x8000000000000000LL))
    t2++;
  t1 = (t1 + t1) & (0xffffffffffffffffLL);
  c3 = (c3 + t1) & (0xffffffffffffffffLL);
  if ((c3 < t1) && (((++t2) & (0xffffffffffffffffLL)) == 0))
    c2++;
  c1 = (c1 + t2) & (0xffffffffffffffffLL);
  if ((c1) < t2)
    c2++;
  ;
  r[2] = c3;
  c3 = 0;
  t1 = (((a)[3]) & (0xffffffffL));
  t2 = ((((a)[3]) >> 32) & (0xffffffffL));
  bl = (((a)[0]) & (0xffffffffL));
  bh = ((((a)[0]) >> 32) & (0xffffffffL));
  {
    unsigned long long m, m1, lt, ht;
    lt = t1;
    ht = t2;
    m = (bh) * (lt);
    lt = (bl) * (lt);
    m1 = (bl) * (ht);
    ht = (bh) * (ht);
    m = (m + m1) & (0xffffffffffffffffLL);
    if (m < m1)
      ht += ((unsigned long long)((1L) & (0xffffffffL)) << 32);
    ht += (((m) >> 32) & (0xffffffffL));
    m1 = ((unsigned long long)((m) & (0xffffffffL)) << 32);
    lt = (lt + m1) & (0xffffffffffffffffLL);
    if (lt < m1)
      ht++;
    (t1) = lt;
    (t2) = ht;
  };
  if (t2 & (0x8000000000000000LL))
    c3++;
  t2 = (t2 + t2) & (0xffffffffffffffffLL);
  if (t1 & (0x8000000000000000LL))
    t2++;
  t1 = (t1 + t1) & (0xffffffffffffffffLL);
  c1 = (c1 + t1) & (0xffffffffffffffffLL);
  if ((c1 < t1) && (((++t2) & (0xffffffffffffffffLL)) == 0))
    c3++;
  c2 = (c2 + t2) & (0xffffffffffffffffLL);
  if ((c2) < t2)
    c3++;
  ;
  t1 = (((a)[2]) & (0xffffffffL));
  t2 = ((((a)[2]) >> 32) & (0xffffffffL));
  bl = (((a)[1]) & (0xffffffffL));
  bh = ((((a)[1]) >> 32) & (0xffffffffL));
  {
    unsigned long long m, m1, lt, ht;
    lt = t1;
    ht = t2;
    m = (bh) * (lt);
    lt = (bl) * (lt);
    m1 = (bl) * (ht);
    ht = (bh) * (ht);
    m = (m + m1) & (0xffffffffffffffffLL);
    if (m < m1)
      ht += ((unsigned long long)((1L) & (0xffffffffL)) << 32);
    ht += (((m) >> 32) & (0xffffffffL));
    m1 = ((unsigned long long)((m) & (0xffffffffL)) << 32);
    lt = (lt + m1) & (0xffffffffffffffffLL);
    if (lt < m1)
      ht++;
    (t1) = lt;
    (t2) = ht;
  };
  if (t2 & (0x8000000000000000LL))
    c3++;
  t2 = (t2 + t2) & (0xffffffffffffffffLL);
  if (t1 & (0x8000000000000000LL))
    t2++;
  t1 = (t1 + t1) & (0xffffffffffffffffLL);
  c1 = (c1 + t1) & (0xffffffffffffffffLL);
  if ((c1 < t1) && (((++t2) & (0xffffffffffffffffLL)) == 0))
    c3++;
  c2 = (c2 + t2) & (0xffffffffffffffffLL);
  if ((c2) < t2)
    c3++;
  ;
  r[3] = c1;
  c1 = 0;
  {
    unsigned long long l, h, m;
    h = ((a)[2]);
    l = ((h) & (0xffffffffL));
    h = (((h) >> 32) & (0xffffffffL));
    m = (l) * (h);
    l *= l;
    h *= h;
    h += (m & (0xffffffff80000000LL)) >> (32 - 1);
    m = (m & (0xffffffffL)) << (32 + 1);
    l = (l + m) & (0xffffffffffffffffLL);
    if (l < m)
      h++;
    (t1) = l;
    (t2) = h;
  };
  c2 = (c2 + t1) & (0xffffffffffffffffLL);
  if ((c2) < t1)
    t2++;
  c3 = (c3 + t2) & (0xffffffffffffffffLL);
  if ((c3) < t2)
    c1++;
  ;
  t1 = (((a)[3]) & (0xffffffffL));
  t2 = ((((a)[3]) >> 32) & (0xffffffffL));
  bl = (((a)[1]) & (0xffffffffL));
  bh = ((((a)[1]) >> 32) & (0xffffffffL));
  {
    unsigned long long m, m1, lt, ht;
    lt = t1;
    ht = t2;
    m = (bh) * (lt);
    lt = (bl) * (lt);
    m1 = (bl) * (ht);
    ht = (bh) * (ht);
    m = (m + m1) & (0xffffffffffffffffLL);
    if (m < m1)
      ht += ((unsigned long long)((1L) & (0xffffffffL)) << 32);
    ht += (((m) >> 32) & (0xffffffffL));
    m1 = ((unsigned long long)((m) & (0xffffffffL)) << 32);
    lt = (lt + m1) & (0xffffffffffffffffLL);
    if (lt < m1)
      ht++;
    (t1) = lt;
    (t2) = ht;
  };
  if (t2 & (0x8000000000000000LL))
    c1++;
  t2 = (t2 + t2) & (0xffffffffffffffffLL);
  if (t1 & (0x8000000000000000LL))
    t2++;
  t1 = (t1 + t1) & (0xffffffffffffffffLL);
  c2 = (c2 + t1) & (0xffffffffffffffffLL);
  if ((c2 < t1) && (((++t2) & (0xffffffffffffffffLL)) == 0))
    c1++;
  c3 = (c3 + t2) & (0xffffffffffffffffLL);
  if ((c3) < t2)
    c1++;
  ;
  t1 = (((a)[4]) & (0xffffffffL));
  t2 = ((((a)[4]) >> 32) & (0xffffffffL));
  bl = (((a)[0]) & (0xffffffffL));
  bh = ((((a)[0]) >> 32) & (0xffffffffL));
  {
    unsigned long long m, m1, lt, ht;
    lt = t1;
    ht = t2;
    m = (bh) * (lt);
    lt = (bl) * (lt);
    m1 = (bl) * (ht);
    ht = (bh) * (ht);
    m = (m + m1) & (0xffffffffffffffffLL);
    if (m < m1)
      ht += ((unsigned long long)((1L) & (0xffffffffL)) << 32);
    ht += (((m) >> 32) & (0xffffffffL));
    m1 = ((unsigned long long)((m) & (0xffffffffL)) << 32);
    lt = (lt + m1) & (0xffffffffffffffffLL);
    if (lt < m1)
      ht++;
    (t1) = lt;
    (t2) = ht;
  };
  if (t2 & (0x8000000000000000LL))
    c1++;
  t2 = (t2 + t2) & (0xffffffffffffffffLL);
  if (t1 & (0x8000000000000000LL))
    t2++;
  t1 = (t1 + t1) & (0xffffffffffffffffLL);
  c2 = (c2 + t1) & (0xffffffffffffffffLL);
  if ((c2 < t1) && (((++t2) & (0xffffffffffffffffLL)) == 0))
    c1++;
  c3 = (c3 + t2) & (0xffffffffffffffffLL);
  if ((c3) < t2)
    c1++;
  ;
  r[4] = c2;
  c2 = 0;
  t1 = (((a)[5]) & (0xffffffffL));
  t2 = ((((a)[5]) >> 32) & (0xffffffffL));
  bl = (((a)[0]) & (0xffffffffL));
  bh = ((((a)[0]) >> 32) & (0xffffffffL));
  {
    unsigned long long m, m1, lt, ht;
    lt = t1;
    ht = t2;
    m = (bh) * (lt);
    lt = (bl) * (lt);
    m1 = (bl) * (ht);
    ht = (bh) * (ht);
    m = (m + m1) & (0xffffffffffffffffLL);
    if (m < m1)
      ht += ((unsigned long long)((1L) & (0xffffffffL)) << 32);
    ht += (((m) >> 32) & (0xffffffffL));
    m1 = ((unsigned long long)((m) & (0xffffffffL)) << 32);
    lt = (lt + m1) & (0xffffffffffffffffLL);
    if (lt < m1)
      ht++;
    (t1) = lt;
    (t2) = ht;
  };
  if (t2 & (0x8000000000000000LL))
    c2++;
  t2 = (t2 + t2) & (0xffffffffffffffffLL);
  if (t1 & (0x8000000000000000LL))
    t2++;
  t1 = (t1 + t1) & (0xffffffffffffffffLL);
  c3 = (c3 + t1) & (0xffffffffffffffffLL);
  if ((c3 < t1) && (((++t2) & (0xffffffffffffffffLL)) == 0))
    c2++;
  c1 = (c1 + t2) & (0xffffffffffffffffLL);
  if ((c1) < t2)
    c2++;
  ;
  t1 = (((a)[4]) & (0xffffffffL));
  t2 = ((((a)[4]) >> 32) & (0xffffffffL));
  bl = (((a)[1]) & (0xffffffffL));
  bh = ((((a)[1]) >> 32) & (0xffffffffL));
  {
    unsigned long long m, m1, lt, ht;
    lt = t1;
    ht = t2;
    m = (bh) * (lt);
    lt = (bl) * (lt);
    m1 = (bl) * (ht);
    ht = (bh) * (ht);
    m = (m + m1) & (0xffffffffffffffffLL);
    if (m < m1)
      ht += ((unsigned long long)((1L) & (0xffffffffL)) << 32);
    ht += (((m) >> 32) & (0xffffffffL));
    m1 = ((unsigned long long)((m) & (0xffffffffL)) << 32);
    lt = (lt + m1) & (0xffffffffffffffffLL);
    if (lt < m1)
      ht++;
    (t1) = lt;
    (t2) = ht;
  };
  if (t2 & (0x8000000000000000LL))
    c2++;
  t2 = (t2 + t2) & (0xffffffffffffffffLL);
  if (t1 & (0x8000000000000000LL))
    t2++;
  t1 = (t1 + t1) & (0xffffffffffffffffLL);
  c3 = (c3 + t1) & (0xffffffffffffffffLL);
  if ((c3 < t1) && (((++t2) & (0xffffffffffffffffLL)) == 0))
    c2++;
  c1 = (c1 + t2) & (0xffffffffffffffffLL);
  if ((c1) < t2)
    c2++;
  ;
  t1 = (((a)[3]) & (0xffffffffL));
  t2 = ((((a)[3]) >> 32) & (0xffffffffL));
  bl = (((a)[2]) & (0xffffffffL));
  bh = ((((a)[2]) >> 32) & (0xffffffffL));
  {
    unsigned long long m, m1, lt, ht;
    lt = t1;
    ht = t2;
    m = (bh) * (lt);
    lt = (bl) * (lt);
    m1 = (bl) * (ht);
    ht = (bh) * (ht);
    m = (m + m1) & (0xffffffffffffffffLL);
    if (m < m1)
      ht += ((unsigned long long)((1L) & (0xffffffffL)) << 32);
    ht += (((m) >> 32) & (0xffffffffL));
    m1 = ((unsigned long long)((m) & (0xffffffffL)) << 32);
    lt = (lt + m1) & (0xffffffffffffffffLL);
    if (lt < m1)
      ht++;
    (t1) = lt;
    (t2) = ht;
  };
  if (t2 & (0x8000000000000000LL))
    c2++;
  t2 = (t2 + t2) & (0xffffffffffffffffLL);
  if (t1 & (0x8000000000000000LL))
    t2++;
  t1 = (t1 + t1) & (0xffffffffffffffffLL);
  c3 = (c3 + t1) & (0xffffffffffffffffLL);
  if ((c3 < t1) && (((++t2) & (0xffffffffffffffffLL)) == 0))
    c2++;
  c1 = (c1 + t2) & (0xffffffffffffffffLL);
  if ((c1) < t2)
    c2++;
  ;
  r[5] = c3;
  c3 = 0;
  {
    unsigned long long l, h, m;
    h = ((a)[3]);
    l = ((h) & (0xffffffffL));
    h = (((h) >> 32) & (0xffffffffL));
    m = (l) * (h);
    l *= l;
    h *= h;
    h += (m & (0xffffffff80000000LL)) >> (32 - 1);
    m = (m & (0xffffffffL)) << (32 + 1);
    l = (l + m) & (0xffffffffffffffffLL);
    if (l < m)
      h++;
    (t1) = l;
    (t2) = h;
  };
  c1 = (c1 + t1) & (0xffffffffffffffffLL);
  if ((c1) < t1)
    t2++;
  c2 = (c2 + t2) & (0xffffffffffffffffLL);
  if ((c2) < t2)
    c3++;
  ;
  t1 = (((a)[4]) & (0xffffffffL));
  t2 = ((((a)[4]) >> 32) & (0xffffffffL));
  bl = (((a)[2]) & (0xffffffffL));
  bh = ((((a)[2]) >> 32) & (0xffffffffL));
  {
    unsigned long long m, m1, lt, ht;
    lt = t1;
    ht = t2;
    m = (bh) * (lt);
    lt = (bl) * (lt);
    m1 = (bl) * (ht);
    ht = (bh) * (ht);
    m = (m + m1) & (0xffffffffffffffffLL);
    if (m < m1)
      ht += ((unsigned long long)((1L) & (0xffffffffL)) << 32);
    ht += (((m) >> 32) & (0xffffffffL));
    m1 = ((unsigned long long)((m) & (0xffffffffL)) << 32);
    lt = (lt + m1) & (0xffffffffffffffffLL);
    if (lt < m1)
      ht++;
    (t1) = lt;
    (t2) = ht;
  };
  if (t2 & (0x8000000000000000LL))
    c3++;
  t2 = (t2 + t2) & (0xffffffffffffffffLL);
  if (t1 & (0x8000000000000000LL))
    t2++;
  t1 = (t1 + t1) & (0xffffffffffffffffLL);
  c1 = (c1 + t1) & (0xffffffffffffffffLL);
  if ((c1 < t1) && (((++t2) & (0xffffffffffffffffLL)) == 0))
    c3++;
  c2 = (c2 + t2) & (0xffffffffffffffffLL);
  if ((c2) < t2)
    c3++;
  ;
  t1 = (((a)[5]) & (0xffffffffL));
  t2 = ((((a)[5]) >> 32) & (0xffffffffL));
  bl = (((a)[1]) & (0xffffffffL));
  bh = ((((a)[1]) >> 32) & (0xffffffffL));
  {
    unsigned long long m, m1, lt, ht;
    lt = t1;
    ht = t2;
    m = (bh) * (lt);
    lt = (bl) * (lt);
    m1 = (bl) * (ht);
    ht = (bh) * (ht);
    m = (m + m1) & (0xffffffffffffffffLL);
    if (m < m1)
      ht += ((unsigned long long)((1L) & (0xffffffffL)) << 32);
    ht += (((m) >> 32) & (0xffffffffL));
    m1 = ((unsigned long long)((m) & (0xffffffffL)) << 32);
    lt = (lt + m1) & (0xffffffffffffffffLL);
    if (lt < m1)
      ht++;
    (t1) = lt;
    (t2) = ht;
  };
  if (t2 & (0x8000000000000000LL))
    c3++;
  t2 = (t2 + t2) & (0xffffffffffffffffLL);
  if (t1 & (0x8000000000000000LL))
    t2++;
  t1 = (t1 + t1) & (0xffffffffffffffffLL);
  c1 = (c1 + t1) & (0xffffffffffffffffLL);
  if ((c1 < t1) && (((++t2) & (0xffffffffffffffffLL)) == 0))
    c3++;
  c2 = (c2 + t2) & (0xffffffffffffffffLL);
  if ((c2) < t2)
    c3++;
  ;
  t1 = (((a)[6]) & (0xffffffffL));
  t2 = ((((a)[6]) >> 32) & (0xffffffffL));
  bl = (((a)[0]) & (0xffffffffL));
  bh = ((((a)[0]) >> 32) & (0xffffffffL));
  {
    unsigned long long m, m1, lt, ht;
    lt = t1;
    ht = t2;
    m = (bh) * (lt);
    lt = (bl) * (lt);
    m1 = (bl) * (ht);
    ht = (bh) * (ht);
    m = (m + m1) & (0xffffffffffffffffLL);
    if (m < m1)
      ht += ((unsigned long long)((1L) & (0xffffffffL)) << 32);
    ht += (((m) >> 32) & (0xffffffffL));
    m1 = ((unsigned long long)((m) & (0xffffffffL)) << 32);
    lt = (lt + m1) & (0xffffffffffffffffLL);
    if (lt < m1)
      ht++;
    (t1) = lt;
    (t2) = ht;
  };
  if (t2 & (0x8000000000000000LL))
    c3++;
  t2 = (t2 + t2) & (0xffffffffffffffffLL);
  if (t1 & (0x8000000000000000LL))
    t2++;
  t1 = (t1 + t1) & (0xffffffffffffffffLL);
  c1 = (c1 + t1) & (0xffffffffffffffffLL);
  if ((c1 < t1) && (((++t2) & (0xffffffffffffffffLL)) == 0))
    c3++;
  c2 = (c2 + t2) & (0xffffffffffffffffLL);
  if ((c2) < t2)
    c3++;
  ;
  r[6] = c1;
  c1 = 0;
  t1 = (((a)[7]) & (0xffffffffL));
  t2 = ((((a)[7]) >> 32) & (0xffffffffL));
  bl = (((a)[0]) & (0xffffffffL));
  bh = ((((a)[0]) >> 32) & (0xffffffffL));
  {
    unsigned long long m, m1, lt, ht;
    lt = t1;
    ht = t2;
    m = (bh) * (lt);
    lt = (bl) * (lt);
    m1 = (bl) * (ht);
    ht = (bh) * (ht);
    m = (m + m1) & (0xffffffffffffffffLL);
    if (m < m1)
      ht += ((unsigned long long)((1L) & (0xffffffffL)) << 32);
    ht += (((m) >> 32) & (0xffffffffL));
    m1 = ((unsigned long long)((m) & (0xffffffffL)) << 32);
    lt = (lt + m1) & (0xffffffffffffffffLL);
    if (lt < m1)
      ht++;
    (t1) = lt;
    (t2) = ht;
  };
  if (t2 & (0x8000000000000000LL))
    c1++;
  t2 = (t2 + t2) & (0xffffffffffffffffLL);
  if (t1 & (0x8000000000000000LL))
    t2++;
  t1 = (t1 + t1) & (0xffffffffffffffffLL);
  c2 = (c2 + t1) & (0xffffffffffffffffLL);
  if ((c2 < t1) && (((++t2) & (0xffffffffffffffffLL)) == 0))
    c1++;
  c3 = (c3 + t2) & (0xffffffffffffffffLL);
  if ((c3) < t2)
    c1++;
  ;
  t1 = (((a)[6]) & (0xffffffffL));
  t2 = ((((a)[6]) >> 32) & (0xffffffffL));
  bl = (((a)[1]) & (0xffffffffL));
  bh = ((((a)[1]) >> 32) & (0xffffffffL));
  {
    unsigned long long m, m1, lt, ht;
    lt = t1;
    ht = t2;
    m = (bh) * (lt);
    lt = (bl) * (lt);
    m1 = (bl) * (ht);
    ht = (bh) * (ht);
    m = (m + m1) & (0xffffffffffffffffLL);
    if (m < m1)
      ht += ((unsigned long long)((1L) & (0xffffffffL)) << 32);
    ht += (((m) >> 32) & (0xffffffffL));
    m1 = ((unsigned long long)((m) & (0xffffffffL)) << 32);
    lt = (lt + m1) & (0xffffffffffffffffLL);
    if (lt < m1)
      ht++;
    (t1) = lt;
    (t2) = ht;
  };
  if (t2 & (0x8000000000000000LL))
    c1++;
  t2 = (t2 + t2) & (0xffffffffffffffffLL);
  if (t1 & (0x8000000000000000LL))
    t2++;
  t1 = (t1 + t1) & (0xffffffffffffffffLL);
  c2 = (c2 + t1) & (0xffffffffffffffffLL);
  if ((c2 < t1) && (((++t2) & (0xffffffffffffffffLL)) == 0))
    c1++;
  c3 = (c3 + t2) & (0xffffffffffffffffLL);
  if ((c3) < t2)
    c1++;
  ;
  t1 = (((a)[5]) & (0xffffffffL));
  t2 = ((((a)[5]) >> 32) & (0xffffffffL));
  bl = (((a)[2]) & (0xffffffffL));
  bh = ((((a)[2]) >> 32) & (0xffffffffL));
  {
    unsigned long long m, m1, lt, ht;
    lt = t1;
    ht = t2;
    m = (bh) * (lt);
    lt = (bl) * (lt);
    m1 = (bl) * (ht);
    ht = (bh) * (ht);
    m = (m + m1) & (0xffffffffffffffffLL);
    if (m < m1)
      ht += ((unsigned long long)((1L) & (0xffffffffL)) << 32);
    ht += (((m) >> 32) & (0xffffffffL));
    m1 = ((unsigned long long)((m) & (0xffffffffL)) << 32);
    lt = (lt + m1) & (0xffffffffffffffffLL);
    if (lt < m1)
      ht++;
    (t1) = lt;
    (t2) = ht;
  };
  if (t2 & (0x8000000000000000LL))
    c1++;
  t2 = (t2 + t2) & (0xffffffffffffffffLL);
  if (t1 & (0x8000000000000000LL))
    t2++;
  t1 = (t1 + t1) & (0xffffffffffffffffLL);
  c2 = (c2 + t1) & (0xffffffffffffffffLL);
  if ((c2 < t1) && (((++t2) & (0xffffffffffffffffLL)) == 0))
    c1++;
  c3 = (c3 + t2) & (0xffffffffffffffffLL);
  if ((c3) < t2)
    c1++;
  ;
  t1 = (((a)[4]) & (0xffffffffL));
  t2 = ((((a)[4]) >> 32) & (0xffffffffL));
  bl = (((a)[3]) & (0xffffffffL));
  bh = ((((a)[3]) >> 32) & (0xffffffffL));
  {
    unsigned long long m, m1, lt, ht;
    lt = t1;
    ht = t2;
    m = (bh) * (lt);
    lt = (bl) * (lt);
    m1 = (bl) * (ht);
    ht = (bh) * (ht);
    m = (m + m1) & (0xffffffffffffffffLL);
    if (m < m1)
      ht += ((unsigned long long)((1L) & (0xffffffffL)) << 32);
    ht += (((m) >> 32) & (0xffffffffL));
    m1 = ((unsigned long long)((m) & (0xffffffffL)) << 32);
    lt = (lt + m1) & (0xffffffffffffffffLL);
    if (lt < m1)
      ht++;
    (t1) = lt;
    (t2) = ht;
  };
  if (t2 & (0x8000000000000000LL))
    c1++;
  t2 = (t2 + t2) & (0xffffffffffffffffLL);
  if (t1 & (0x8000000000000000LL))
    t2++;
  t1 = (t1 + t1) & (0xffffffffffffffffLL);
  c2 = (c2 + t1) & (0xffffffffffffffffLL);
  if ((c2 < t1) && (((++t2) & (0xffffffffffffffffLL)) == 0))
    c1++;
  c3 = (c3 + t2) & (0xffffffffffffffffLL);
  if ((c3) < t2)
    c1++;
  ;
  r[7] = c2;
  c2 = 0;
  {
    unsigned long long l, h, m;
    h = ((a)[4]);
    l = ((h) & (0xffffffffL));
    h = (((h) >> 32) & (0xffffffffL));
    m = (l) * (h);
    l *= l;
    h *= h;
    h += (m & (0xffffffff80000000LL)) >> (32 - 1);
    m = (m & (0xffffffffL)) << (32 + 1);
    l = (l + m) & (0xffffffffffffffffLL);
    if (l < m)
      h++;
    (t1) = l;
    (t2) = h;
  };
  c3 = (c3 + t1) & (0xffffffffffffffffLL);
  if ((c3) < t1)
    t2++;
  c1 = (c1 + t2) & (0xffffffffffffffffLL);
  if ((c1) < t2)
    c2++;
  ;
  t1 = (((a)[5]) & (0xffffffffL));
  t2 = ((((a)[5]) >> 32) & (0xffffffffL));
  bl = (((a)[3]) & (0xffffffffL));
  bh = ((((a)[3]) >> 32) & (0xffffffffL));
  {
    unsigned long long m, m1, lt, ht;
    lt = t1;
    ht = t2;
    m = (bh) * (lt);
    lt = (bl) * (lt);
    m1 = (bl) * (ht);
    ht = (bh) * (ht);
    m = (m + m1) & (0xffffffffffffffffLL);
    if (m < m1)
      ht += ((unsigned long long)((1L) & (0xffffffffL)) << 32);
    ht += (((m) >> 32) & (0xffffffffL));
    m1 = ((unsigned long long)((m) & (0xffffffffL)) << 32);
    lt = (lt + m1) & (0xffffffffffffffffLL);
    if (lt < m1)
      ht++;
    (t1) = lt;
    (t2) = ht;
  };
  if (t2 & (0x8000000000000000LL))
    c2++;
  t2 = (t2 + t2) & (0xffffffffffffffffLL);
  if (t1 & (0x8000000000000000LL))
    t2++;
  t1 = (t1 + t1) & (0xffffffffffffffffLL);
  c3 = (c3 + t1) & (0xffffffffffffffffLL);
  if ((c3 < t1) && (((++t2) & (0xffffffffffffffffLL)) == 0))
    c2++;
  c1 = (c1 + t2) & (0xffffffffffffffffLL);
  if ((c1) < t2)
    c2++;
  ;
  t1 = (((a)[6]) & (0xffffffffL));
  t2 = ((((a)[6]) >> 32) & (0xffffffffL));
  bl = (((a)[2]) & (0xffffffffL));
  bh = ((((a)[2]) >> 32) & (0xffffffffL));
  {
    unsigned long long m, m1, lt, ht;
    lt = t1;
    ht = t2;
    m = (bh) * (lt);
    lt = (bl) * (lt);
    m1 = (bl) * (ht);
    ht = (bh) * (ht);
    m = (m + m1) & (0xffffffffffffffffLL);
    if (m < m1)
      ht += ((unsigned long long)((1L) & (0xffffffffL)) << 32);
    ht += (((m) >> 32) & (0xffffffffL));
    m1 = ((unsigned long long)((m) & (0xffffffffL)) << 32);
    lt = (lt + m1) & (0xffffffffffffffffLL);
    if (lt < m1)
      ht++;
    (t1) = lt;
    (t2) = ht;
  };
  if (t2 & (0x8000000000000000LL))
    c2++;
  t2 = (t2 + t2) & (0xffffffffffffffffLL);
  if (t1 & (0x8000000000000000LL))
    t2++;
  t1 = (t1 + t1) & (0xffffffffffffffffLL);
  c3 = (c3 + t1) & (0xffffffffffffffffLL);
  if ((c3 < t1) && (((++t2) & (0xffffffffffffffffLL)) == 0))
    c2++;
  c1 = (c1 + t2) & (0xffffffffffffffffLL);
  if ((c1) < t2)
    c2++;
  ;
  t1 = (((a)[7]) & (0xffffffffL));
  t2 = ((((a)[7]) >> 32) & (0xffffffffL));
  bl = (((a)[1]) & (0xffffffffL));
  bh = ((((a)[1]) >> 32) & (0xffffffffL));
  {
    unsigned long long m, m1, lt, ht;
    lt = t1;
    ht = t2;
    m = (bh) * (lt);
    lt = (bl) * (lt);
    m1 = (bl) * (ht);
    ht = (bh) * (ht);
    m = (m + m1) & (0xffffffffffffffffLL);
    if (m < m1)
      ht += ((unsigned long long)((1L) & (0xffffffffL)) << 32);
    ht += (((m) >> 32) & (0xffffffffL));
    m1 = ((unsigned long long)((m) & (0xffffffffL)) << 32);
    lt = (lt + m1) & (0xffffffffffffffffLL);
    if (lt < m1)
      ht++;
    (t1) = lt;
    (t2) = ht;
  };
  if (t2 & (0x8000000000000000LL))
    c2++;
  t2 = (t2 + t2) & (0xffffffffffffffffLL);
  if (t1 & (0x8000000000000000LL))
    t2++;
  t1 = (t1 + t1) & (0xffffffffffffffffLL);
  c3 = (c3 + t1) & (0xffffffffffffffffLL);
  if ((c3 < t1) && (((++t2) & (0xffffffffffffffffLL)) == 0))
    c2++;
  c1 = (c1 + t2) & (0xffffffffffffffffLL);
  if ((c1) < t2)
    c2++;
  ;
  r[8] = c3;
  c3 = 0;
  t1 = (((a)[7]) & (0xffffffffL));
  t2 = ((((a)[7]) >> 32) & (0xffffffffL));
  bl = (((a)[2]) & (0xffffffffL));
  bh = ((((a)[2]) >> 32) & (0xffffffffL));
  {
    unsigned long long m, m1, lt, ht;
    lt = t1;
    ht = t2;
    m = (bh) * (lt);
    lt = (bl) * (lt);
    m1 = (bl) * (ht);
    ht = (bh) * (ht);
    m = (m + m1) & (0xffffffffffffffffLL);
    if (m < m1)
      ht += ((unsigned long long)((1L) & (0xffffffffL)) << 32);
    ht += (((m) >> 32) & (0xffffffffL));
    m1 = ((unsigned long long)((m) & (0xffffffffL)) << 32);
    lt = (lt + m1) & (0xffffffffffffffffLL);
    if (lt < m1)
      ht++;
    (t1) = lt;
    (t2) = ht;
  };
  if (t2 & (0x8000000000000000LL))
    c3++;
  t2 = (t2 + t2) & (0xffffffffffffffffLL);
  if (t1 & (0x8000000000000000LL))
    t2++;
  t1 = (t1 + t1) & (0xffffffffffffffffLL);
  c1 = (c1 + t1) & (0xffffffffffffffffLL);
  if ((c1 < t1) && (((++t2) & (0xffffffffffffffffLL)) == 0))
    c3++;
  c2 = (c2 + t2) & (0xffffffffffffffffLL);
  if ((c2) < t2)
    c3++;
  ;
  t1 = (((a)[6]) & (0xffffffffL));
  t2 = ((((a)[6]) >> 32) & (0xffffffffL));
  bl = (((a)[3]) & (0xffffffffL));
  bh = ((((a)[3]) >> 32) & (0xffffffffL));
  {
    unsigned long long m, m1, lt, ht;
    lt = t1;
    ht = t2;
    m = (bh) * (lt);
    lt = (bl) * (lt);
    m1 = (bl) * (ht);
    ht = (bh) * (ht);
    m = (m + m1) & (0xffffffffffffffffLL);
    if (m < m1)
      ht += ((unsigned long long)((1L) & (0xffffffffL)) << 32);
    ht += (((m) >> 32) & (0xffffffffL));
    m1 = ((unsigned long long)((m) & (0xffffffffL)) << 32);
    lt = (lt + m1) & (0xffffffffffffffffLL);
    if (lt < m1)
      ht++;
    (t1) = lt;
    (t2) = ht;
  };
  if (t2 & (0x8000000000000000LL))
    c3++;
  t2 = (t2 + t2) & (0xffffffffffffffffLL);
  if (t1 & (0x8000000000000000LL))
    t2++;
  t1 = (t1 + t1) & (0xffffffffffffffffLL);
  c1 = (c1 + t1) & (0xffffffffffffffffLL);
  if ((c1 < t1) && (((++t2) & (0xffffffffffffffffLL)) == 0))
    c3++;
  c2 = (c2 + t2) & (0xffffffffffffffffLL);
  if ((c2) < t2)
    c3++;
  ;
  t1 = (((a)[5]) & (0xffffffffL));
  t2 = ((((a)[5]) >> 32) & (0xffffffffL));
  bl = (((a)[4]) & (0xffffffffL));
  bh = ((((a)[4]) >> 32) & (0xffffffffL));
  {
    unsigned long long m, m1, lt, ht;
    lt = t1;
    ht = t2;
    m = (bh) * (lt);
    lt = (bl) * (lt);
    m1 = (bl) * (ht);
    ht = (bh) * (ht);
    m = (m + m1) & (0xffffffffffffffffLL);
    if (m < m1)
      ht += ((unsigned long long)((1L) & (0xffffffffL)) << 32);
    ht += (((m) >> 32) & (0xffffffffL));
    m1 = ((unsigned long long)((m) & (0xffffffffL)) << 32);
    lt = (lt + m1) & (0xffffffffffffffffLL);
    if (lt < m1)
      ht++;
    (t1) = lt;
    (t2) = ht;
  };
  if (t2 & (0x8000000000000000LL))
    c3++;
  t2 = (t2 + t2) & (0xffffffffffffffffLL);
  if (t1 & (0x8000000000000000LL))
    t2++;
  t1 = (t1 + t1) & (0xffffffffffffffffLL);
  c1 = (c1 + t1) & (0xffffffffffffffffLL);
  if ((c1 < t1) && (((++t2) & (0xffffffffffffffffLL)) == 0))
    c3++;
  c2 = (c2 + t2) & (0xffffffffffffffffLL);
  if ((c2) < t2)
    c3++;
  ;
  r[9] = c1;
  c1 = 0;
  {
    unsigned long long l, h, m;
    h = ((a)[5]);
    l = ((h) & (0xffffffffL));
    h = (((h) >> 32) & (0xffffffffL));
    m = (l) * (h);
    l *= l;
    h *= h;
    h += (m & (0xffffffff80000000LL)) >> (32 - 1);
    m = (m & (0xffffffffL)) << (32 + 1);
    l = (l + m) & (0xffffffffffffffffLL);
    if (l < m)
      h++;
    (t1) = l;
    (t2) = h;
  };
  c2 = (c2 + t1) & (0xffffffffffffffffLL);
  if ((c2) < t1)
    t2++;
  c3 = (c3 + t2) & (0xffffffffffffffffLL);
  if ((c3) < t2)
    c1++;
  ;
  t1 = (((a)[6]) & (0xffffffffL));
  t2 = ((((a)[6]) >> 32) & (0xffffffffL));
  bl = (((a)[4]) & (0xffffffffL));
  bh = ((((a)[4]) >> 32) & (0xffffffffL));
  {
    unsigned long long m, m1, lt, ht;
    lt = t1;
    ht = t2;
    m = (bh) * (lt);
    lt = (bl) * (lt);
    m1 = (bl) * (ht);
    ht = (bh) * (ht);
    m = (m + m1) & (0xffffffffffffffffLL);
    if (m < m1)
      ht += ((unsigned long long)((1L) & (0xffffffffL)) << 32);
    ht += (((m) >> 32) & (0xffffffffL));
    m1 = ((unsigned long long)((m) & (0xffffffffL)) << 32);
    lt = (lt + m1) & (0xffffffffffffffffLL);
    if (lt < m1)
      ht++;
    (t1) = lt;
    (t2) = ht;
  };
  if (t2 & (0x8000000000000000LL))
    c1++;
  t2 = (t2 + t2) & (0xffffffffffffffffLL);
  if (t1 & (0x8000000000000000LL))
    t2++;
  t1 = (t1 + t1) & (0xffffffffffffffffLL);
  c2 = (c2 + t1) & (0xffffffffffffffffLL);
  if ((c2 < t1) && (((++t2) & (0xffffffffffffffffLL)) == 0))
    c1++;
  c3 = (c3 + t2) & (0xffffffffffffffffLL);
  if ((c3) < t2)
    c1++;
  ;
  t1 = (((a)[7]) & (0xffffffffL));
  t2 = ((((a)[7]) >> 32) & (0xffffffffL));
  bl = (((a)[3]) & (0xffffffffL));
  bh = ((((a)[3]) >> 32) & (0xffffffffL));
  {
    unsigned long long m, m1, lt, ht;
    lt = t1;
    ht = t2;
    m = (bh) * (lt);
    lt = (bl) * (lt);
    m1 = (bl) * (ht);
    ht = (bh) * (ht);
    m = (m + m1) & (0xffffffffffffffffLL);
    if (m < m1)
      ht += ((unsigned long long)((1L) & (0xffffffffL)) << 32);
    ht += (((m) >> 32) & (0xffffffffL));
    m1 = ((unsigned long long)((m) & (0xffffffffL)) << 32);
    lt = (lt + m1) & (0xffffffffffffffffLL);
    if (lt < m1)
      ht++;
    (t1) = lt;
    (t2) = ht;
  };
  if (t2 & (0x8000000000000000LL))
    c1++;
  t2 = (t2 + t2) & (0xffffffffffffffffLL);
  if (t1 & (0x8000000000000000LL))
    t2++;
  t1 = (t1 + t1) & (0xffffffffffffffffLL);
  c2 = (c2 + t1) & (0xffffffffffffffffLL);
  if ((c2 < t1) && (((++t2) & (0xffffffffffffffffLL)) == 0))
    c1++;
  c3 = (c3 + t2) & (0xffffffffffffffffLL);
  if ((c3) < t2)
    c1++;
  ;
  r[10] = c2;
  c2 = 0;
  t1 = (((a)[7]) & (0xffffffffL));
  t2 = ((((a)[7]) >> 32) & (0xffffffffL));
  bl = (((a)[4]) & (0xffffffffL));
  bh = ((((a)[4]) >> 32) & (0xffffffffL));
  {
    unsigned long long m, m1, lt, ht;
    lt = t1;
    ht = t2;
    m = (bh) * (lt);
    lt = (bl) * (lt);
    m1 = (bl) * (ht);
    ht = (bh) * (ht);
    m = (m + m1) & (0xffffffffffffffffLL);
    if (m < m1)
      ht += ((unsigned long long)((1L) & (0xffffffffL)) << 32);
    ht += (((m) >> 32) & (0xffffffffL));
    m1 = ((unsigned long long)((m) & (0xffffffffL)) << 32);
    lt = (lt + m1) & (0xffffffffffffffffLL);
    if (lt < m1)
      ht++;
    (t1) = lt;
    (t2) = ht;
  };
  if (t2 & (0x8000000000000000LL))
    c2++;
  t2 = (t2 + t2) & (0xffffffffffffffffLL);
  if (t1 & (0x8000000000000000LL))
    t2++;
  t1 = (t1 + t1) & (0xffffffffffffffffLL);
  c3 = (c3 + t1) & (0xffffffffffffffffLL);
  if ((c3 < t1) && (((++t2) & (0xffffffffffffffffLL)) == 0))
    c2++;
  c1 = (c1 + t2) & (0xffffffffffffffffLL);
  if ((c1) < t2)
    c2++;
  ;
  t1 = (((a)[6]) & (0xffffffffL));
  t2 = ((((a)[6]) >> 32) & (0xffffffffL));
  bl = (((a)[5]) & (0xffffffffL));
  bh = ((((a)[5]) >> 32) & (0xffffffffL));
  {
    unsigned long long m, m1, lt, ht;
    lt = t1;
    ht = t2;
    m = (bh) * (lt);
    lt = (bl) * (lt);
    m1 = (bl) * (ht);
    ht = (bh) * (ht);
    m = (m + m1) & (0xffffffffffffffffLL);
    if (m < m1)
      ht += ((unsigned long long)((1L) & (0xffffffffL)) << 32);
    ht += (((m) >> 32) & (0xffffffffL));
    m1 = ((unsigned long long)((m) & (0xffffffffL)) << 32);
    lt = (lt + m1) & (0xffffffffffffffffLL);
    if (lt < m1)
      ht++;
    (t1) = lt;
    (t2) = ht;
  };
  if (t2 & (0x8000000000000000LL))
    c2++;
  t2 = (t2 + t2) & (0xffffffffffffffffLL);
  if (t1 & (0x8000000000000000LL))
    t2++;
  t1 = (t1 + t1) & (0xffffffffffffffffLL);
  c3 = (c3 + t1) & (0xffffffffffffffffLL);
  if ((c3 < t1) && (((++t2) & (0xffffffffffffffffLL)) == 0))
    c2++;
  c1 = (c1 + t2) & (0xffffffffffffffffLL);
  if ((c1) < t2)
    c2++;
  ;
  r[11] = c3;
  c3 = 0;
  {
    unsigned long long l, h, m;
    h = ((a)[6]);
    l = ((h) & (0xffffffffL));
    h = (((h) >> 32) & (0xffffffffL));
    m = (l) * (h);
    l *= l;
    h *= h;
    h += (m & (0xffffffff80000000LL)) >> (32 - 1);
    m = (m & (0xffffffffL)) << (32 + 1);
    l = (l + m) & (0xffffffffffffffffLL);
    if (l < m)
      h++;
    (t1) = l;
    (t2) = h;
  };
  c1 = (c1 + t1) & (0xffffffffffffffffLL);
  if ((c1) < t1)
    t2++;
  c2 = (c2 + t2) & (0xffffffffffffffffLL);
  if ((c2) < t2)
    c3++;
  ;
  t1 = (((a)[7]) & (0xffffffffL));
  t2 = ((((a)[7]) >> 32) & (0xffffffffL));
  bl = (((a)[5]) & (0xffffffffL));
  bh = ((((a)[5]) >> 32) & (0xffffffffL));
  {
    unsigned long long m, m1, lt, ht;
    lt = t1;
    ht = t2;
    m = (bh) * (lt);
    lt = (bl) * (lt);
    m1 = (bl) * (ht);
    ht = (bh) * (ht);
    m = (m + m1) & (0xffffffffffffffffLL);
    if (m < m1)
      ht += ((unsigned long long)((1L) & (0xffffffffL)) << 32);
    ht += (((m) >> 32) & (0xffffffffL));
    m1 = ((unsigned long long)((m) & (0xffffffffL)) << 32);
    lt = (lt + m1) & (0xffffffffffffffffLL);
    if (lt < m1)
      ht++;
    (t1) = lt;
    (t2) = ht;
  };
  if (t2 & (0x8000000000000000LL))
    c3++;
  t2 = (t2 + t2) & (0xffffffffffffffffLL);
  if (t1 & (0x8000000000000000LL))
    t2++;
  t1 = (t1 + t1) & (0xffffffffffffffffLL);
  c1 = (c1 + t1) & (0xffffffffffffffffLL);
  if ((c1 < t1) && (((++t2) & (0xffffffffffffffffLL)) == 0))
    c3++;
  c2 = (c2 + t2) & (0xffffffffffffffffLL);
  if ((c2) < t2)
    c3++;
  ;
  r[12] = c1;
  c1 = 0;
  t1 = (((a)[7]) & (0xffffffffL));
  t2 = ((((a)[7]) >> 32) & (0xffffffffL));
  bl = (((a)[6]) & (0xffffffffL));
  bh = ((((a)[6]) >> 32) & (0xffffffffL));
  {
    unsigned long long m, m1, lt, ht;
    lt = t1;
    ht = t2;
    m = (bh) * (lt);
    lt = (bl) * (lt);
    m1 = (bl) * (ht);
    ht = (bh) * (ht);
    m = (m + m1) & (0xffffffffffffffffLL);
    if (m < m1)
      ht += ((unsigned long long)((1L) & (0xffffffffL)) << 32);
    ht += (((m) >> 32) & (0xffffffffL));
    m1 = ((unsigned long long)((m) & (0xffffffffL)) << 32);
    lt = (lt + m1) & (0xffffffffffffffffLL);
    if (lt < m1)
      ht++;
    (t1) = lt;
    (t2) = ht;
  };
  if (t2 & (0x8000000000000000LL))
    c1++;
  t2 = (t2 + t2) & (0xffffffffffffffffLL);
  if (t1 & (0x8000000000000000LL))
    t2++;
  t1 = (t1 + t1) & (0xffffffffffffffffLL);
  c2 = (c2 + t1) & (0xffffffffffffffffLL);
  if ((c2 < t1) && (((++t2) & (0xffffffffffffffffLL)) == 0))
    c1++;
  c3 = (c3 + t2) & (0xffffffffffffffffLL);
  if ((c3) < t2)
    c1++;
  ;
  r[13] = c2;
  c2 = 0;
  {
    unsigned long long l, h, m;
    h = ((a)[7]);
    l = ((h) & (0xffffffffL));
    h = (((h) >> 32) & (0xffffffffL));
    m = (l) * (h);
    l *= l;
    h *= h;
    h += (m & (0xffffffff80000000LL)) >> (32 - 1);
    m = (m & (0xffffffffL)) << (32 + 1);
    l = (l + m) & (0xffffffffffffffffLL);
    if (l < m)
      h++;
    (t1) = l;
    (t2) = h;
  };
  c3 = (c3 + t1) & (0xffffffffffffffffLL);
  if ((c3) < t1)
    t2++;
  c1 = (c1 + t2) & (0xffffffffffffffffLL);
  if ((c1) < t2)
    c2++;
  ;
  r[14] = c3;
  r[15] = c1;
}
```