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

```asm
<gm_encode>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x90,%rsp
  mov    %rdi,-0x78(%rbp)
  mov    %esi,-0x7c(%rbp)
  mov    %rdx,-0x88(%rbp)
  mov    %ecx,-0x80(%rbp)
  mov    %r8d,-0x8c(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x0,-0x60(%rbp)
  movl   $0x0,-0x54(%rbp)
  movl   $0x0,-0x4c(%rbp)
  movq   $0x0,-0x20(%rbp)
  movl   $0x0,-0x48(%rbp)
  movl   $0x0,-0x3c(%rbp)
  mov    -0x88(%rbp),%rax
  lea    D366(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  movl   $0x0,-0x68(%rbp)
  movl   $0x0,-0x64(%rbp)
  movl   $0x0,-0x38(%rbp)
  movq   $0x0,-0x28(%rbp)
  cmpl   $0x0,-0x80(%rbp)
  je     L1238
  mov    -0x88(%rbp),%rax
  lea    D181(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L1238:
  cmpl   $0x3,-0x8c(%rbp)
  je     L787
  mov    -0x88(%rbp),%rax
  lea    D947(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  movl   $0x0,-0x5c(%rbp)
  jmp    L81
L680:
  mov    -0x5c(%rbp),%eax
  mov    $0x100,%edx
  mov    %eax,%ecx
  sar    %cl,%edx
  mov    %edx,%eax
  and    -0x8c(%rbp),%eax
  test   %eax,%eax
  je     L1387
  mov    -0x88(%rbp),%rax
  lea    D524(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L1416
L1387:
  mov    -0x88(%rbp),%rax
  lea    D128(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L1416:
  addl   $0x1,-0x5c(%rbp)
L81:
  cmpl   $0x9,-0x5c(%rbp)
  jle    L680
L787:
  mov    -0x64(%rbp),%ecx
  mov    -0x68(%rbp),%edx
  mov    -0x7c(%rbp),%esi
  mov    -0x78(%rbp),%rax
  mov    %rax,%rdi
  call   <seek_forward@plt>
  mov    %eax,-0x34(%rbp)
  mov    -0x34(%rbp),%eax
  cmp    -0x64(%rbp),%eax
  je     L1776
  cmpl   $0x7,-0x64(%rbp)
  ja     L438
  mov    -0x64(%rbp),%eax
  lea    0x0(,%rax,4),%rdx
  lea    D102(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  cltq
  lea    D102(%rip),%rdx
  add    %rdx,%rax
  notrack jmp *%rax
  cmpl   $0x7,-0x34(%rbp)
  ja     L598
  mov    -0x34(%rbp),%eax
  lea    0x0(,%rax,4),%rdx
  lea    D245(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  cltq
  lea    D245(%rip),%rdx
  add    %rdx,%rax
  notrack jmp *%rax
  mov    -0x88(%rbp),%rax
  lea    D199(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L711
  mov    -0x88(%rbp),%rax
  lea    D348(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L711
  mov    -0x88(%rbp),%rax
  lea    D647(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L711
  mov    -0x88(%rbp),%rax
  lea    D139(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L711
  mov    -0x88(%rbp),%rax
  lea    D529(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L711
  mov    -0x88(%rbp),%rax
  lea    D497(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  nop
L711:
  jmp    L598
  cmpl   $0x6,-0x34(%rbp)
  ja     L128
  mov    -0x34(%rbp),%eax
  lea    0x0(,%rax,4),%rdx
  lea    D737(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  cltq
  lea    D737(%rip),%rdx
  add    %rdx,%rax
  notrack jmp *%rax
  mov    -0x88(%rbp),%rax
  lea    D324(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L1245
  mov    -0x88(%rbp),%rax
  lea    D537(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L1245
  mov    -0x88(%rbp),%rax
  lea    D997(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L1245
  mov    -0x88(%rbp),%rax
  lea    D552(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L1245
  mov    -0x88(%rbp),%rax
  lea    D672(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  nop
L1245:
  jmp    L128
  cmpl   $0x3,-0x54(%rbp)
  je     L495
  cmpl   $0x3,-0x54(%rbp)
  jg     L276
  cmpl   $0x1,-0x54(%rbp)
  je     L589
  cmpl   $0x2,-0x54(%rbp)
  je     L964
  jmp    L276
L589:
  mov    -0x88(%rbp),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movb   $0x31,(%rax)
  mov    -0x28(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    -0x88(%rbp),%rax
  add    %rdx,%rax
  movb   $0x30,(%rax)
  jmp    L276
L964:
  mov    -0x88(%rbp),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movb   $0x30,(%rax)
  mov    -0x28(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    -0x88(%rbp),%rax
  add    %rdx,%rax
  movb   $0x31,(%rax)
  jmp    L276
L495:
  mov    -0x88(%rbp),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movb   $0x30,(%rax)
  mov    -0x28(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    -0x88(%rbp),%rax
  add    %rdx,%rax
  movb   $0x30,(%rax)
  nop
L276:
  cmpl   $0x7,-0x34(%rbp)
  ja     L1733
  mov    -0x34(%rbp),%eax
  lea    0x0(,%rax,4),%rdx
  lea    D119(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  cltq
  lea    D119(%rip),%rdx
  add    %rdx,%rax
  notrack jmp *%rax
  mov    -0x88(%rbp),%rax
  lea    D657(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L882
  mov    -0x88(%rbp),%rax
  lea    D871(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L882
  mov    -0x88(%rbp),%rax
  lea    D850(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L882
  mov    -0x88(%rbp),%rax
  lea    D255(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L882
  mov    -0x88(%rbp),%rax
  lea    D94(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  nop
L882:
  jmp    L1733
  cmpl   $0x7,-0x34(%rbp)
  ja     L572
  mov    -0x34(%rbp),%eax
  lea    0x0(,%rax,4),%rdx
  lea    D738(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  cltq
  lea    D738(%rip),%rdx
  add    %rdx,%rax
  notrack jmp *%rax
  mov    -0x88(%rbp),%rax
  lea    D874(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L1144
  mov    -0x88(%rbp),%rax
  lea    D487(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L1144
  mov    -0x88(%rbp),%rax
  lea    D724(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L1144
  mov    -0x88(%rbp),%rax
  lea    D955(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L1144
  mov    -0x88(%rbp),%rax
  lea    D145(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  nop
L1144:
  jmp    L572
  cmpl   $0x7,-0x34(%rbp)
  ja     L997
  mov    -0x34(%rbp),%eax
  lea    0x0(,%rax,4),%rdx
  lea    D983(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  cltq
  lea    D983(%rip),%rdx
  add    %rdx,%rax
  notrack jmp *%rax
  mov    -0x88(%rbp),%rax
  lea    D214(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L1598
  mov    -0x88(%rbp),%rax
  lea    D778(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L1598
  mov    -0x88(%rbp),%rax
  lea    D608(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L1598
  mov    -0x88(%rbp),%rax
  lea    D519(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L1598
  mov    -0x88(%rbp),%rax
  lea    D650(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  nop
L1598:
  jmp    L997
  mov    -0x48(%rbp),%edx
  mov    -0x20(%rbp),%rcx
  mov    -0x88(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <add_byte_count@plt>
  movl   $0x0,-0x48(%rbp)
  cmpl   $0x7,-0x34(%rbp)
  ja     L1326
  mov    -0x34(%rbp),%eax
  lea    0x0(,%rax,4),%rdx
  lea    D510(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  cltq
  lea    D510(%rip),%rdx
  add    %rdx,%rax
  notrack jmp *%rax
  mov    -0x88(%rbp),%rax
  lea    D199(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L1522
  mov    -0x88(%rbp),%rax
  lea    D348(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L1522
  mov    -0x88(%rbp),%rax
  lea    D647(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L1522
  mov    -0x88(%rbp),%rax
  lea    D139(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L1522
  mov    -0x88(%rbp),%rax
  lea    D529(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  nop
L1522:
  jmp    L1326
L598:
  nop
  jmp    L438
L128:
  nop
  jmp    L438
L1733:
  nop
  jmp    L438
L572:
  nop
  jmp    L438
L997:
  nop
  jmp    L438
L1326:
  nop
L438:
  cmpl   $0x0,-0x3c(%rbp)
  je     L1776
  cmpl   $0x7,-0x34(%rbp)
  ja     L1776
  mov    -0x34(%rbp),%eax
  lea    0x0(,%rax,4),%rdx
  lea    D13(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  cltq
  lea    D13(%rip),%rdx
  add    %rdx,%rax
  notrack jmp *%rax
  lea    D271(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L1776
  lea    D914(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L1776
  lea    D837(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L1776
  lea    D879(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L1776
  lea    D143(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L1776
  lea    D470(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  nop
L1776:
  mov    -0x64(%rbp),%eax
  mov    %eax,-0x38(%rbp)
  mov    -0x34(%rbp),%eax
  mov    %eax,-0x64(%rbp)
  cmpl   $0x7,-0x64(%rbp)
  ja     L1163
  mov    -0x64(%rbp),%eax
  lea    0x0(,%rax,4),%rdx
  lea    D294(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  cltq
  lea    D294(%rip),%rdx
  add    %rdx,%rax
  notrack jmp *%rax
  movl   $0x0,-0x58(%rbp)
  mov    -0x68(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    $0xff,%eax
  jle    L793
  mov    -0x68(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  sar    $0x8,%eax
  and    $0xff,%eax
  mov    %eax,-0x30(%rbp)
  mov    -0x68(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  and    $0xff,%eax
  mov    %eax,-0x2c(%rbp)
  cmpl   $0x9f,-0x30(%rbp)
  jle    L672
  cmpl   $0xa9,-0x30(%rbp)
  jg     L672
  mov    -0x30(%rbp),%eax
  lea    -0xa1(%rax),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  shl    $0x5,%eax
  mov    %eax,%edx
  mov    -0x2c(%rbp),%eax
  sub    $0xa0,%eax
  add    %edx,%eax
  mov    %eax,-0x60(%rbp)
L672:
  cmpl   $0xaf,-0x30(%rbp)
  jle    L1296
  cmpl   $0xf7,-0x30(%rbp)
  jg     L1296
  mov    -0x30(%rbp),%eax
  lea    -0xa7(%rax),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  shl    $0x5,%eax
  mov    %eax,%edx
  mov    -0x2c(%rbp),%eax
  sub    $0xa0,%eax
  add    %edx,%eax
  mov    %eax,-0x60(%rbp)
L1296:
  movl   $0x1,-0x58(%rbp)
L793:
  cmpl   $0x0,-0x58(%rbp)
  jne    L1539
  mov    -0x7c(%rbp),%eax
  sub    $0x1,%eax
  cmp    %eax,-0x68(%rbp)
  je     L1539
  mov    -0x68(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    $0x13,%eax
  jne    L911
  mov    -0x68(%rbp),%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    $0x10,%eax
  jne    L911
  movl   $0x1e60,-0x60(%rbp)
  addl   $0x1,-0x68(%rbp)
L911:
  movl   $0x1,-0x58(%rbp)
L1539:
  cmpl   $0x0,-0x58(%rbp)
  jne    L1044
  mov    -0x7c(%rbp),%eax
  sub    $0x1,%eax
  cmp    %eax,-0x68(%rbp)
  je     L1044
  mov    -0x68(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    $0x2f,%eax
  jle    L1044
  mov    -0x68(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    $0x39,%eax
  jg     L1044
  mov    -0x68(%rbp),%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    $0x2f,%eax
  jle    L1044
  mov    -0x68(%rbp),%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    $0x39,%eax
  jg     L1044
  mov    -0x68(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  lea    -0x30(%rax),%edx
  mov    %edx,%eax
  shl    $0x2,%eax
  add    %edx,%eax
  add    %eax,%eax
  lea    0x1f61(%rax),%edx
  mov    -0x68(%rbp),%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,4),%rcx
  mov    -0x78(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%eax
  sub    $0x30,%eax
  add    %edx,%eax
  mov    %eax,-0x60(%rbp)
  addl   $0x1,-0x68(%rbp)
L1044:
  cmpl   $0x0,-0x58(%rbp)
  jne    L1497
  mov    -0x68(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  add    $0x1e61,%eax
  mov    %eax,-0x60(%rbp)
L1497:
  cmpl   $0x0,-0x3c(%rbp)
  je     L1707
  mov    -0x60(%rbp),%eax
  mov    %eax,%esi
  lea    D505(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L1707:
  movl   $0x0,-0x5c(%rbp)
  jmp    L720
L757:
  mov    -0x5c(%rbp),%eax
  mov    $0x1000,%edx
  mov    %eax,%ecx
  sar    %cl,%edx
  mov    %edx,%eax
  and    -0x60(%rbp),%eax
  test   %eax,%eax
  je     L1476
  mov    -0x88(%rbp),%rax
  lea    D524(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L225
L1476:
  mov    -0x88(%rbp),%rax
  lea    D128(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L225:
  addl   $0x1,-0x5c(%rbp)
L720:
  cmpl   $0xc,-0x5c(%rbp)
  jle    L757
  addl   $0x1,-0x68(%rbp)
  jmp    L1163
  mov    -0x38(%rbp),%eax
  cmp    -0x64(%rbp),%eax
  je     L702
  mov    -0x88(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  cltq
  mov    %rax,-0x28(%rbp)
  mov    -0x88(%rbp),%rax
  lea    D477(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L702:
  movl   $0x0,-0x54(%rbp)
  movl   $0xffffffff,-0x50(%rbp)
  movl   $0x30,-0x14(%rbp)
  movl   $0x30,-0x10(%rbp)
  movl   $0x30,-0xc(%rbp)
L490:
  mov    -0x68(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    $0x2f,%eax
  jle    L1297
  mov    -0x68(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    $0x39,%eax
  jg     L1297
  mov    -0x68(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
  mov    -0x54(%rbp),%eax
  cltq
  mov    %edx,-0x14(%rbp,%rax,4)
  addl   $0x1,-0x68(%rbp)
  addl   $0x1,-0x54(%rbp)
L1297:
  mov    -0x68(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    $0x20,%eax
  je     L1680
  cmp    $0x20,%eax
  jl     L1000
  sub    $0x2b,%eax
  cmp    $0x3,%eax
  ja     L1000
L1680:
  mov    -0x68(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x4c(%rbp)
  addl   $0x1,-0x68(%rbp)
  mov    -0x54(%rbp),%eax
  mov    %eax,-0x50(%rbp)
  nop
L1000:
  mov    -0x7c(%rbp),%eax
  sub    $0x1,%eax
  cmp    %eax,-0x68(%rbp)
  jge    L300
  mov    -0x68(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    $0x13,%eax
  jne    L300
  mov    -0x68(%rbp),%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    $0x10,%eax
  jne    L300
  mov    -0x68(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x4c(%rbp)
  addl   $0x2,-0x68(%rbp)
  mov    -0x54(%rbp),%eax
  mov    %eax,-0x50(%rbp)
L300:
  cmpl   $0x2,-0x54(%rbp)
  jg     L925
  mov    -0x68(%rbp),%eax
  cmp    -0x7c(%rbp),%eax
  jl     L490
L925:
  cmpl   $0xffffffff,-0x50(%rbp)
  je     L826
  mov    -0x4c(%rbp),%eax
  sub    $0x13,%eax
  cmp    $0x1b,%eax
  ja     L554
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rdx
  lea    D63(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  cltq
  lea    D63(%rip),%rdx
  add    %rdx,%rax
  notrack jmp *%rax
  movl   $0x0,-0x60(%rbp)
  jmp    L554
  movl   $0x3,-0x60(%rbp)
  jmp    L554
  movl   $0x6,-0x60(%rbp)
  jmp    L554
  movl   $0x9,-0x60(%rbp)
  jmp    L554
  movl   $0xc,-0x60(%rbp)
  jmp    L554
  movl   $0xf,-0x60(%rbp)
  nop
L554:
  mov    -0x50(%rbp),%eax
  add    %eax,-0x60(%rbp)
  addl   $0x3e8,-0x60(%rbp)
  cmpl   $0x0,-0x3c(%rbp)
  je     L830
  mov    -0x60(%rbp),%eax
  mov    %eax,%esi
  lea    D505(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L830:
  movl   $0x0,-0x5c(%rbp)
  jmp    L1549
L974:
  mov    -0x5c(%rbp),%eax
  mov    $0x200,%edx
  mov    %eax,%ecx
  sar    %cl,%edx
  mov    %edx,%eax
  and    -0x60(%rbp),%eax
  test   %eax,%eax
  je     L1500
  mov    -0x88(%rbp),%rax
  lea    D524(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L1078
L1500:
  mov    -0x88(%rbp),%rax
  lea    D128(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L1078:
  addl   $0x1,-0x5c(%rbp)
L1549:
  cmpl   $0x9,-0x5c(%rbp)
  jle    L974
L826:
  mov    -0x14(%rbp),%eax
  sub    $0x30,%eax
  imul   $0x64,%eax,%ecx
  mov    -0x10(%rbp),%eax
  lea    -0x30(%rax),%edx
  mov    %edx,%eax
  shl    $0x2,%eax
  add    %edx,%eax
  add    %eax,%eax
  lea    (%rcx,%rax,1),%edx
  mov    -0xc(%rbp),%eax
  sub    $0x30,%eax
  add    %edx,%eax
  mov    %eax,-0x60(%rbp)
  cmpl   $0x0,-0x3c(%rbp)
  je     L1374
  mov    -0x60(%rbp),%eax
  mov    %eax,%esi
  lea    D505(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L1374:
  movl   $0x0,-0x5c(%rbp)
  jmp    L1799
L1725:
  mov    -0x5c(%rbp),%eax
  mov    $0x200,%edx
  mov    %eax,%ecx
  sar    %cl,%edx
  mov    %edx,%eax
  and    -0x60(%rbp),%eax
  test   %eax,%eax
  je     L292
  mov    -0x88(%rbp),%rax
  lea    D524(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L635
L292:
  mov    -0x88(%rbp),%rax
  lea    D128(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L635:
  addl   $0x1,-0x5c(%rbp)
L1799:
  cmpl   $0x9,-0x5c(%rbp)
  jle    L1725
  jmp    L1163
  mov    -0x38(%rbp),%eax
  cmp    -0x64(%rbp),%eax
  je     L1241
  mov    -0x88(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  cltq
  mov    %rax,-0x20(%rbp)
  mov    -0x88(%rbp),%rax
  lea    D454(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L1241:
  cmpl   $0x200,-0x48(%rbp)
  jne    L656
  mov    -0x48(%rbp),%edx
  mov    -0x20(%rbp),%rcx
  mov    -0x88(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <add_byte_count@plt>
  mov    -0x88(%rbp),%rax
  lea    D497(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  mov    -0x88(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  cltq
  mov    %rax,-0x20(%rbp)
  mov    -0x88(%rbp),%rax
  lea    D454(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  movl   $0x0,-0x48(%rbp)
L656:
  mov    -0x68(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x60(%rbp)
  cmpl   $0x0,-0x3c(%rbp)
  je     L865
  mov    -0x60(%rbp),%eax
  mov    %eax,%esi
  lea    D505(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L865:
  movl   $0x0,-0x5c(%rbp)
  jmp    L930
L1453:
  mov    -0x5c(%rbp),%eax
  mov    $0x80,%edx
  mov    %eax,%ecx
  sar    %cl,%edx
  mov    %edx,%eax
  and    -0x60(%rbp),%eax
  test   %eax,%eax
  je     L577
  mov    -0x88(%rbp),%rax
  lea    D524(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L673
L577:
  mov    -0x88(%rbp),%rax
  lea    D128(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L673:
  addl   $0x1,-0x5c(%rbp)
L930:
  cmpl   $0x7,-0x5c(%rbp)
  jle    L1453
  addl   $0x1,-0x68(%rbp)
  addl   $0x1,-0x48(%rbp)
  jmp    L1163
  movl   $0x1,-0x44(%rbp)
  mov    -0x68(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    $0x2f,%eax
  jle    L1158
  mov    -0x68(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    $0x39,%eax
  jg     L1158
  movl   $0x0,-0x44(%rbp)
L1158:
  mov    -0x68(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    $0x40,%eax
  jle    L144
  mov    -0x68(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    $0x5a,%eax
  jg     L144
  movl   $0x0,-0x44(%rbp)
L144:
  mov    -0x68(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    $0x60,%eax
  jle    L1320
  mov    -0x68(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    $0x7a,%eax
  jg     L1320
  movl   $0x0,-0x44(%rbp)
L1320:
  mov    -0x68(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    $0x20,%eax
  jne    L180
  movl   $0x0,-0x44(%rbp)
L180:
  cmpl   $0x0,-0x44(%rbp)
  jne    L369
  mov    -0x68(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,%esi
  lea    D417(%rip),%rax
  mov    %rax,%rdi
  call   <posn@plt>
  mov    %eax,-0x60(%rbp)
  cmpl   $0x0,-0x3c(%rbp)
  je     L1717
  mov    -0x60(%rbp),%eax
  mov    %eax,%esi
  lea    D505(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L1717:
  movl   $0x0,-0x5c(%rbp)
  jmp    L564
L1066:
  mov    -0x5c(%rbp),%eax
  mov    $0x20,%edx
  mov    %eax,%ecx
  sar    %cl,%edx
  mov    %edx,%eax
  and    -0x60(%rbp),%eax
  test   %eax,%eax
  je     L640
  mov    -0x88(%rbp),%rax
  lea    D524(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L1693
L640:
  mov    -0x88(%rbp),%rax
  lea    D128(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L1693:
  addl   $0x1,-0x5c(%rbp)
L564:
  cmpl   $0x5,-0x5c(%rbp)
  jle    L1066
  jmp    L1520
L369:
  mov    -0x88(%rbp),%rax
  lea    D765(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  mov    -0x68(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
  mov    -0x88(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <add_shift_char@plt>
L1520:
  addl   $0x1,-0x68(%rbp)
  jmp    L1163
  movl   $0x1,-0x44(%rbp)
  mov    -0x68(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    $0x40,%eax
  jle    L137
  mov    -0x68(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    $0x5a,%eax
  jg     L137
  movl   $0x0,-0x44(%rbp)
L137:
  mov    -0x68(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    $0x20,%eax
  jne    L931
  movl   $0x0,-0x44(%rbp)
L931:
  cmpl   $0x0,-0x44(%rbp)
  jne    L1191
  mov    -0x68(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,%esi
  lea    D941(%rip),%rax
  mov    %rax,%rdi
  call   <posn@plt>
  mov    %eax,-0x60(%rbp)
  cmpl   $0x0,-0x3c(%rbp)
  je     L411
  mov    -0x60(%rbp),%eax
  mov    %eax,%esi
  lea    D505(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L411:
  movl   $0x0,-0x5c(%rbp)
  jmp    L430
L26:
  mov    -0x5c(%rbp),%eax
  mov    $0x10,%edx
  mov    %eax,%ecx
  sar    %cl,%edx
  mov    %edx,%eax
  and    -0x60(%rbp),%eax
  test   %eax,%eax
  je     L56
  mov    -0x88(%rbp),%rax
  lea    D524(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L423
L56:
  mov    -0x88(%rbp),%rax
  lea    D128(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L423:
  addl   $0x1,-0x5c(%rbp)
L430:
  cmpl   $0x4,-0x5c(%rbp)
  jle    L26
  jmp    L1352
L1191:
  mov    -0x88(%rbp),%rax
  lea    D433(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  mov    -0x68(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
  mov    -0x88(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <add_shift_char@plt>
L1352:
  addl   $0x1,-0x68(%rbp)
  jmp    L1163
  movl   $0x1,-0x44(%rbp)
  mov    -0x68(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    $0x60,%eax
  jle    L1550
  mov    -0x68(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    $0x7a,%eax
  jg     L1550
  movl   $0x0,-0x44(%rbp)
L1550:
  mov    -0x68(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    $0x20,%eax
  jne    L1656
  movl   $0x0,-0x44(%rbp)
L1656:
  cmpl   $0x0,-0x44(%rbp)
  jne    L741
  mov    -0x68(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,%esi
  lea    D489(%rip),%rax
  mov    %rax,%rdi
  call   <posn@plt>
  mov    %eax,-0x60(%rbp)
  cmpl   $0x0,-0x3c(%rbp)
  je     L669
  mov    -0x60(%rbp),%eax
  mov    %eax,%esi
  lea    D505(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L669:
  movl   $0x0,-0x5c(%rbp)
  jmp    L1250
L1601:
  mov    -0x5c(%rbp),%eax
  mov    $0x10,%edx
  mov    %eax,%ecx
  sar    %cl,%edx
  mov    %edx,%eax
  and    -0x60(%rbp),%eax
  test   %eax,%eax
  je     L199
  mov    -0x88(%rbp),%rax
  lea    D524(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L891
L199:
  mov    -0x88(%rbp),%rax
  lea    D128(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L891:
  addl   $0x1,-0x5c(%rbp)
L1250:
  cmpl   $0x4,-0x5c(%rbp)
  jle    L1601
  jmp    L809
L741:
  mov    -0x88(%rbp),%rax
  lea    D433(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  mov    -0x68(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
  mov    -0x88(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <add_shift_char@plt>
L809:
  addl   $0x1,-0x68(%rbp)
  nop
L1163:
  mov    -0x88(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  cmp    $0x23e7,%eax
  jle    L1600
  mov    $0x5,%eax
  jmp    L1243
L1600:
  mov    -0x68(%rbp),%eax
  cmp    -0x7c(%rbp),%eax
  jl     L787
  cmpl   $0x1,-0x64(%rbp)
  jne    L316
  cmpl   $0x3,-0x54(%rbp)
  je     L437
  cmpl   $0x3,-0x54(%rbp)
  jg     L316
  cmpl   $0x1,-0x54(%rbp)
  je     L511
  cmpl   $0x2,-0x54(%rbp)
  je     L1340
  jmp    L316
L511:
  mov    -0x88(%rbp),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movb   $0x31,(%rax)
  mov    -0x28(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    -0x88(%rbp),%rax
  add    %rdx,%rax
  movb   $0x30,(%rax)
  jmp    L316
L1340:
  mov    -0x88(%rbp),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movb   $0x30,(%rax)
  mov    -0x28(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    -0x88(%rbp),%rax
  add    %rdx,%rax
  movb   $0x31,(%rax)
  jmp    L316
L437:
  mov    -0x88(%rbp),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movb   $0x30,(%rax)
  mov    -0x28(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    -0x88(%rbp),%rax
  add    %rdx,%rax
  movb   $0x30,(%rax)
  nop
L316:
  cmpl   $0x6,-0x64(%rbp)
  jne    L896
  mov    -0x48(%rbp),%edx
  mov    -0x20(%rbp),%rcx
  mov    -0x88(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <add_byte_count@plt>
L896:
  cmpl   $0x7,-0x64(%rbp)
  ja     L298
  mov    -0x64(%rbp),%eax
  lea    0x0(,%rax,4),%rdx
  lea    D374(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  cltq
  lea    D374(%rip),%rdx
  add    %rdx,%rax
  notrack jmp *%rax
  mov    -0x88(%rbp),%rax
  lea    D435(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L298
  mov    -0x88(%rbp),%rax
  lea    D355(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L298
  mov    -0x88(%rbp),%rax
  lea    D116(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L298
  mov    -0x88(%rbp),%rax
  lea    D74(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L298
  mov    -0x88(%rbp),%rax
  lea    D959(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  nop
L298:
  mov    -0x88(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  movslq %eax,%rdx
  imul   $0xffffffff92492493,%rdx,%rdx
  shr    $0x20,%rdx
  add    %eax,%edx
  sar    $0x2,%edx
  mov    %eax,%esi
  sar    $0x1f,%esi
  mov    %edx,%ecx
  sub    %esi,%ecx
  mov    %ecx,%edx
  shl    $0x3,%edx
  sub    %ecx,%edx
  sub    %edx,%eax
  mov    %eax,%ecx
  mov    $0x7,%eax
  sub    %ecx,%eax
  mov    %eax,-0x54(%rbp)
  cmpl   $0x7,-0x54(%rbp)
  jne    L215
  movl   $0x0,-0x54(%rbp)
L215:
  movl   $0x0,-0x40(%rbp)
  jmp    L1480
L480:
  mov    -0x88(%rbp),%rax
  lea    D128(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  addl   $0x1,-0x40(%rbp)
L1480:
  mov    -0x40(%rbp),%eax
  cmp    -0x54(%rbp),%eax
  jl     L480
  mov    -0x88(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  cmp    $0x23e7,%eax
  jle    L84
  mov    $0x5,%eax
  jmp    L1243
L84:
  mov    $0x0,%eax
L1243:
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L1450
  call   <__stack_chk_fail@plt>
L1450:
  leave
  ret
```

tool_calls: name: retrieve_data
arguments: data_tag: D366
datatype: string
name: retrieve_data
arguments: data_tag: D181
datatype: string
name: retrieve_data
arguments: data_tag: D947
datatype: string
name: retrieve_data
arguments: data_tag: D524
datatype: string
name: retrieve_data
arguments: data_tag: D128
datatype: string
name: retrieve_data
arguments: data_tag: D199
datatype: string
name: retrieve_data
arguments: data_tag: D348
datatype: string
name: retrieve_data
arguments: data_tag: D647
datatype: string
name: retrieve_data
arguments: data_tag: D139
datatype: string
name: retrieve_data
arguments: data_tag: D529
datatype: string
name: retrieve_data
arguments: data_tag: D497
datatype: string
name: retrieve_data
arguments: data_tag: D324
datatype: string
name: retrieve_data
arguments: data_tag: D537
datatype: string
name: retrieve_data
arguments: data_tag: D997
datatype: string
name: retrieve_data
arguments: data_tag: D552
datatype: string
name: retrieve_data
arguments: data_tag: D672
datatype: string
name: retrieve_data
arguments: data_tag: D657
datatype: string
name: retrieve_data
arguments: data_tag: D871
datatype: string
name: retrieve_data
arguments: data_tag: D850
datatype: string
name: retrieve_data
arguments: data_tag: D255
datatype: string
name: retrieve_data
arguments: data_tag: D94
datatype: string
name: retrieve_data
arguments: data_tag: D874
datatype: string
name: retrieve_data
arguments: data_tag: D487
datatype: string
name: retrieve_data
arguments: data_tag: D724
datatype: string
name: retrieve_data
arguments: data_tag: D955
datatype: string
name: retrieve_data
arguments: data_tag: D145
datatype: string
name: retrieve_data
arguments: data_tag: D214
datatype: string
name: retrieve_data
arguments: data_tag: D778
datatype: string
name: retrieve_data
arguments: data_tag: D608
datatype: string
name: retrieve_data
arguments: data_tag: D519
datatype: string
name: retrieve_data
arguments: data_tag: D650
datatype: string
name: retrieve_data
arguments: data_tag: D271
datatype: string
name: retrieve_data
arguments: data_tag: D914
datatype: string
name: retrieve_data
arguments: data_tag: D837
datatype: string
name: retrieve_data
arguments: data_tag: D879
datatype: string
name: retrieve_data
arguments: data_tag: D143
datatype: string
name: retrieve_data
arguments: data_tag: D470
datatype: string
name: retrieve_data
arguments: data_tag: D505
datatype: string
name: retrieve_data
arguments: data_tag: D477
datatype: string
name: retrieve_data
arguments: data_tag: D454
datatype: string
name: retrieve_data
arguments: data_tag: D417
datatype: string
name: retrieve_data
arguments: data_tag: D765
datatype: string
name: retrieve_data
arguments: data_tag: D941
datatype: string
name: retrieve_data
arguments: data_tag: D433
datatype: string
name: retrieve_data
arguments: data_tag: D489
datatype: string
name: retrieve_data
arguments: data_tag: D435
datatype: string
name: retrieve_data
arguments: data_tag: D355
datatype: string
name: retrieve_data
arguments: data_tag: D116
datatype: string
name: retrieve_data
arguments: data_tag: D74
datatype: string
name: retrieve_data
arguments: data_tag: D959
datatype: string

tool: 

tool: D181: 1010

tool: D947: 11000

tool: D524: 1

tool: D128: 0

tool: D199: 0001

tool: D348: 0010

tool: D647: 0011

tool: D139: 0100

tool: D529: 0101

tool: D497: 0111

tool: D324: 1111111100001

tool: D537: 1111111100010

tool: D997: 1111111100011

tool: D552: 1111111100100

tool: D672: 1111111100101

tool: D657: 1111111011

tool: D871: 1111111100

tool: D850: 1111111101

tool: D255: 1111111110

tool: D94: 1111111111

tool: D874: 11100

tool: D487: 11101

tool: D724: 11110

tool: D955: 1111100

tool: D145: 1111110

tool: D214: 1111110001

tool: D778: 1111110010

tool: D608: 1111110011

tool: D519: 1111110100

tool: D650: 1111110111

tool: D271: CHIN 

tool: D914: NUMB 

tool: D837: LOWR 

tool: D879: UPPR 

tool: D143: MIXD 

tool: D470: BYTE 

tool: D505: [%d] 

tool: D477: XX

tool: D454: LLLLLLLLL

tool: D417: 0123456789ABCDEFGHIJKLMOPRSTUVWXYZabcdefghijklmnopqrstuvwxyz 

tool: D765: 1111110110

tool: D941: ABCDEFGHIJKLMNOPQRSTUVWXYZ 

tool: D433: 1111101

tool: D489: abcdefghijklmnopqrstuvwxyz 

tool: D435: 1111111100000

tool: D355: 1111111010

tool: D116: 11011

tool: D74: 1111110000

tool: D959: 0000

assistant: ```c
int gm_encode(int gbdata[], int length, char binary[], int reader, int eci) {
  int sp, current_mode, next_mode, last_mode, glyph = 0, q;
  int c1, c2, done;
  int p = 0, ppos;
  int numbuf[3], punt = 0;
  size_t number_pad_posn, byte_count_posn = 0;
  int byte_count = 0, debug = 0;
  int shift, i;
  strcpy(binary, "");
  sp = 0;
  current_mode = 0;
  last_mode = 0;
  number_pad_posn = 0;
  if (reader) {
    strcat(binary, "1010");
  }
  if (eci != 3) {
    strcat(binary, "11000");
    for (q = 0; q < 10; q++) {
      if (eci & (0x100 >> q)) {
        strcat(binary, "1");
      } else {
        strcat(binary, "0");
      }
    }
  }
  do {
    next_mode = seek_forward(gbdata, length, sp, current_mode);
    if (next_mode != current_mode) {
      switch (current_mode) {
      case 0:
        switch (next_mode) {
        case 7:
          strcat(binary, "0001");
          break;
        case 1:
          strcat(binary, "0010");
          break;
        case 2:
          strcat(binary, "0011");
          break;
        case 3:
          strcat(binary, "0100");
          break;
        case 4:
          strcat(binary, "0101");
          break;
        case 6:
          strcat(binary, "0111");
          break;
        }
        break;
      case 7:
        switch (next_mode) {
        case 1:
          strcat(binary, "1111111100001");
          break;
        case 2:
          strcat(binary, "1111111100010");
          break;
        case 3:
          strcat(binary, "1111111100011");
          break;
        case 4:
          strcat(binary, "1111111100100");
          break;
        case 6:
          strcat(binary, "1111111100101");
          break;
        }
        break;
      case 1:
        switch (p) {
        case 1:
          binary[number_pad_posn] = '1';
          binary[number_pad_posn + 1] = '0';
          break;
        case 2:
          binary[number_pad_posn] = '0';
          binary[number_pad_posn + 1] = '1';
          break;
        case 3:
          binary[number_pad_posn] = '0';
          binary[number_pad_posn + 1] = '0';
          break;
        }
        switch (next_mode) {
        case 7:
          strcat(binary, "1111111011");
          break;
        case 2:
          strcat(binary, "1111111100");
          break;
        case 3:
          strcat(binary, "1111111101");
          break;
        case 4:
          strcat(binary, "1111111110");
          break;
        case 6:
          strcat(binary, "1111111111");
          break;
        }
        break;
      case 2:
      case 3:
        switch (next_mode) {
        case 7:
          strcat(binary, "11100");
          break;
        case 1:
          strcat(binary, "11101");
          break;
        case 2:
        case 3:
          strcat(binary, "11110");
          break;
        case 4:
          strcat(binary, "1111100");
          break;
        case 6:
          strcat(binary, "1111110");
          break;
        }
        break;
      case 4:
        switch (next_mode) {
        case 7:
          strcat(binary, "1111110001");
          break;
        case 1:
          strcat(binary, "1111110010");
          break;
        case 2:
          strcat(binary, "1111110011");
          break;
        case 3:
          strcat(binary, "1111110100");
          break;
        case 6:
          strcat(binary, "1111110111");
          break;
        }
        break;
      case 6:
        add_byte_count(binary, byte_count_posn, byte_count);
        byte_count = 0;
        switch (next_mode) {
        case 7:
          strcat(binary, "0001");
          break;
        case 1:
          strcat(binary, "0010");
          break;
        case 2:
          strcat(binary, "0011");
          break;
        case 3:
          strcat(binary, "0100");
          break;
        case 4:
          strcat(binary, "0101");
          break;
        }
        break;
      }
      if (debug) {
        switch (next_mode) {
        case 7:
          printf("CHIN ");
          break;
        case 1:
          printf("NUMB ");
          break;
        case 2:
          printf("LOWR ");
          break;
        case 3:
          printf("UPPR ");
          break;
        case 4:
          printf("MIXD ");
          break;
        case 6:
          printf("BYTE ");
          break;
        }
      }
    }
    last_mode = current_mode;
    current_mode = next_mode;
    switch (current_mode) {
    case 7:
      done = 0;
      if (gbdata[sp] > 0xff) {
        c1 = (gbdata[sp] & 0xff00) >> 8;
        c2 = gbdata[sp] & 0xff;
        if ((c1 >= 0xa0) && (c1 <= 0xa9)) {
          glyph = (0x60 * (c1 - 0xa1)) + (c2 - 0xa0);
        }
        if ((c1 >= 0xb0) && (c1 <= 0xf7)) {
          glyph = (0x60 * (c1 - 0xb0 + 9)) + (c2 - 0xa0);
        }
        done = 1;
      }
      if (!(done)) {
        if (sp != (length - 1)) {
          if ((gbdata[sp] == 0x13) && (gbdata[sp + 1] == 0x10)) {
            glyph = 7776;
            sp++;
          }
          done = 1;
        }
      }
      if (!(done)) {
        if (sp != (length - 1)) {
          if (((gbdata[sp] >= '0') && (gbdata[sp] <= '9')) && ((gbdata[sp + 1] >= '0') && (gbdata[sp + 1] <= '9'))) {
            glyph = 8033 + (10 * (gbdata[sp] - '0')) + (gbdata[sp + 1] - '0');
            sp++;
          }
        }
      }
      if (!(done)) {
        glyph = 7777 + gbdata[sp];
      }
      if (debug) {
        printf("[%d] ", glyph);
      }
      for (q = 0; q < 13; q++) {
        if (glyph & (0x1000 >> q)) {
          strcat(binary, "1");
        } else {
          strcat(binary, "0");
        }
      }
      sp++;
      break;
    case 1:
      if (last_mode != current_mode) {
        number_pad_posn = strlen(binary);
        strcat(binary, "XX");
      }
      p = 0;
      ppos = -1;
      numbuf[0] = '0';
      numbuf[1] = '0';
      numbuf[2] = '0';
      do {
        if ((gbdata[sp] >= '0') && (gbdata[sp] <= '9')) {
          numbuf[p] = gbdata[sp];
          sp++;
          p++;
        }
        switch (gbdata[sp]) {
        case ' ':
        case '+':
        case '-':
        case '.':
        case ',':
          punt = gbdata[sp];
          sp++;
          ppos = p;
          break;
        }
        if (sp < (length - 1)) {
          if ((gbdata[sp] == 0x13) && (gbdata[sp + 1] == 0x10)) {
            punt = gbdata[sp];
            sp += 2;
            ppos = p;
          }
        }
      } while ((p < 3) && (sp < length));
      if (ppos != -1) {
        switch (punt) {
        case ' ':
          glyph = 0;
          break;
        case '+':
          glyph = 3;
          break;
        case '-':
          glyph = 6;
          break;
        case '.':
          glyph = 9;
          break;
        case ',':
          glyph = 12;
          break;
        case 0x13:
          glyph = 15;
          break;
        }
        glyph += ppos;
        glyph += 1000;
        if (debug) {
          printf("[%d] ", glyph);
        }
        for (q = 0; q < 10; q++) {
          if (glyph & (0x200 >> q)) {
            strcat(binary, "1");
          } else {
            strcat(binary, "0");
          }
        }
      }
      glyph = (100 * (numbuf[0] - '0')) + (10 * (numbuf[1] - '0')) + (numbuf[2] - '0');
      if (debug) {
        printf("[%d] ", glyph);
      }
      for (q = 0; q < 10; q++) {
        if (glyph & (0x200 >> q)) {
          strcat(binary, "1");
        } else {
          strcat(binary, "0");
        }
      }
      break;
    case 6:
      if (last_mode != current_mode) {
        byte_count_posn = strlen(binary);
        strcat(binary, "LLLLLLLLL");
      }
      if (byte_count == 512) {
        add_byte_count(binary, byte_count_posn, byte_count);
        strcat(binary, "0111");
        byte_count_posn = strlen(binary);
        strcat(binary, "LLLLLLLLL");
        byte_count = 0;
      }
      glyph = gbdata[sp];
      if (debug) {
        printf("[%d] ", glyph);
      }
      for (q = 0; q < 8; q++) {
        if (glyph & (0x80 >> q)) {
          strcat(binary, "1");
        } else {
          strcat(binary, "0");
        }
      }
      sp++;
      byte_count++;
      break;
    case 4:
      shift = 1;
      if ((gbdata[sp] >= '0') && (gbdata[sp] <= '9')) {
        shift = 0;
      }
      if ((gbdata[sp] >= 'A') && (gbdata[sp] <= 'Z')) {
        shift = 0;
      }
      if ((gbdata[sp] >= 'a') && (gbdata[sp] <= 'z')) {
        shift = 0;
      }
      if (gbdata[sp] == ' ') {
        shift = 0;
      }
      if (shift == 0) {
        glyph = posn("0123456789ABCDEFGHIJKLMOPRSTUVWXYZabcdefghijklmnopqrstuvwxyz ", gbdata[sp]);
        if (debug) {
          printf("[%d] ", glyph);
        }
        for (q = 0; q < 6; q++) {
          if (glyph & (0x20 >> q)) {
            strcat(binary, "1");
          } else {
            strcat(binary, "0");
          }
        }
      } else {
        strcat(binary, "1111110110");
        add_shift_char(binary, gbdata[sp]);
      }
      sp++;
      break;
    case 3:
      shift = 1;
      if ((gbdata[sp] >= 'A') && (gbdata[sp] <= 'Z')) {
        shift = 0;
      }
      if (gbdata[sp] == ' ') {
        shift = 0;
      }
      if (shift == 0) {
        glyph = posn("ABCDEFGHIJKLMNOPQRSTUVWXYZ ", gbdata[sp]);
        if (debug) {
          printf("[%d] ", glyph);
        }
        for (q = 0; q < 5; q++) {
          if (glyph & (0x10 >> q)) {
            strcat(binary, "1");
          } else {
            strcat(binary, "0");
          }
        }
      } else {
        strcat(binary, "1111101");
        add_shift_char(binary, gbdata[sp]);
      }
      sp++;
      break;
    case 2:
      shift = 1;
      if ((gbdata[sp] >= 'a') && (gbdata[sp] <= 'z')) {
        shift = 0;
      }
      if (gbdata[sp] == ' ') {
        shift = 0;
      }
      if (shift == 0) {
        glyph = posn("abcdefghijklmnopqrstuvwxyz ", gbdata[sp]);
        if (debug) {
          printf("[%d] ", glyph);
        }
        for (q = 0; q < 5; q++) {
          if (glyph & (0x10 >> q)) {
            strcat(binary, "1");
          } else {
            strcat(binary, "0");
          }
        }
      } else {
        strcat(binary, "1111101");
        add_shift_char(binary, gbdata[sp]);
      }
      sp++;
      break;
    }
    if (strlen(binary) > 9191) {
      return 5;
    }
  } while (sp < length);
  if (current_mode == 1) {
    switch (p) {
    case 1:
      binary[number_pad_posn] = '1';
      binary[number_pad_posn + 1] = '0';
      break;
    case 2:
      binary[number_pad_posn] = '0';
      binary[number_pad_posn + 1] = '1';
      break;
    case 3:
      binary[number_pad_posn] = '0';
      binary[number_pad_posn + 1] = '0';
      break;
    }
  }
  if (current_mode == 6) {
    add_byte_count(binary, byte_count_posn, byte_count);
  }
  switch (current_mode) {
  case 7:
    strcat(binary, "1111111100000");
    break;
  case 1:
    strcat(binary, "1111111010");
    break;
  case 2:
  case 3:
    strcat(binary, "11011");
    break;
  case 4:
    strcat(binary, "1111110000");
    break;
  case 6:
    strcat(binary, "0000");
    break;
  }
  p = 7 - (strlen(binary) % 7);
  if (p == 7) {
    p = 0;
  }
  for (i = 0; i < p; i++) {
    strcat(binary, "0");
  }
  if (strlen(binary) > 9191) {
    return 5;
  }
  return 0;
}
```