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

```asm
<LzmaDecode>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x78,%rsp
  mov    %rdi,-0xd8(%rbp)
  mov    %esi,-0xdc(%rbp)
  mov    %edx,-0xe0(%rbp)
  mov    %ecx,-0xe4(%rbp)
  mov    %r8d,-0xe8(%rbp)
  mov    %r9,-0xf0(%rbp)
  mov    -0xe0(%rbp),%edx
  mov    -0xe4(%rbp),%eax
  add    %edx,%eax
  mov    $0x300,%edx
  mov    %eax,%ecx
  shl    %cl,%edx
  mov    %edx,%eax
  add    $0x736,%eax
  mov    %eax,-0x68(%rbp)
  mov    -0xd8(%rbp),%rax
  mov    %rax,-0x38(%rbp)
  movl   $0x0,-0xbc(%rbp)
  movb   $0x0,-0xc1(%rbp)
  movl   $0x1,-0xb8(%rbp)
  movl   $0x1,-0xb4(%rbp)
  movl   $0x1,-0xb0(%rbp)
  movl   $0x1,-0xac(%rbp)
  movl   $0x0,-0xa8(%rbp)
  mov    -0xe8(%rbp),%eax
  mov    $0x1,%edx
  mov    %eax,%ecx
  shl    %cl,%edx
  mov    %edx,%eax
  sub    $0x1,%eax
  mov    %eax,-0x64(%rbp)
  mov    -0xe4(%rbp),%eax
  mov    $0x1,%edx
  mov    %eax,%ecx
  shl    %cl,%edx
  mov    %edx,%eax
  sub    $0x1,%eax
  mov    %eax,-0x60(%rbp)
  movl   $0x0,-0xa4(%rbp)
  mov    -0xdc(%rbp),%eax
  mov    -0x68(%rbp),%edx
  add    %rdx,%rdx
  cmp    %rdx,%rax
  jae    L727
  mov    $0x2,%eax
  jmp    L1122
L727:
  movl   $0x0,-0xc0(%rbp)
  jmp    L134
L674:
  mov    -0xc0(%rbp),%eax
  lea    (%rax,%rax,1),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movw   $0x400,(%rax)
  addl   $0x1,-0xc0(%rbp)
L134:
  mov    -0xc0(%rbp),%eax
  cmp    -0x68(%rbp),%eax
  jb     L674
  mov    -0xf0(%rbp),%rax
  mov    %rax,-0x50(%rbp)
  mov    0x10(%rbp),%edx
  mov    -0xf0(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x30(%rbp)
  movl   $0x0,-0x9c(%rbp)
  movl   $0xffffffff,-0xa0(%rbp)
  movl   $0x0,-0x98(%rbp)
  jmp    L1058
L325:
  mov    -0x50(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jne    L195
  mov    $0x1,%eax
  jmp    L1122
L195:
  mov    -0x9c(%rbp),%eax
  shl    $0x8,%eax
  mov    %eax,%ecx
  mov    -0x50(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x50(%rbp)
  movzbl (%rax),%eax
  movzbl %al,%eax
  or     %ecx,%eax
  mov    %eax,-0x9c(%rbp)
  addl   $0x1,-0x98(%rbp)
L1058:
  cmpl   $0x4,-0x98(%rbp)
  jle    L325
  mov    0x28(%rbp),%rax
  movl   $0x0,(%rax)
  jmp    L697
L594:
  mov    -0xa8(%rbp),%eax
  and    -0x64(%rbp),%eax
  mov    %eax,-0x5c(%rbp)
  mov    -0xbc(%rbp),%eax
  shl    $0x4,%eax
  movslq %eax,%rdx
  mov    -0x5c(%rbp),%eax
  cltq
  add    %rdx,%rax
  lea    (%rax,%rax,1),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x48(%rbp)
  cmpl   $0xffffff,-0xa0(%rbp)
  ja     L11
  mov    -0x50(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jne    L659
  mov    $0x1,%eax
  jmp    L1122
L659:
  shll   $0x8,-0xa0(%rbp)
  mov    -0x9c(%rbp),%eax
  shl    $0x8,%eax
  mov    %eax,%ecx
  mov    -0x50(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x50(%rbp)
  movzbl (%rax),%eax
  movzbl %al,%eax
  or     %ecx,%eax
  mov    %eax,-0x9c(%rbp)
L11:
  mov    -0xa0(%rbp),%eax
  shr    $0xb,%eax
  mov    %eax,%edx
  mov    -0x48(%rbp),%rax
  movzwl (%rax),%eax
  movzwl %ax,%eax
  imul   %edx,%eax
  mov    %eax,-0x58(%rbp)
  mov    -0x9c(%rbp),%eax
  cmp    -0x58(%rbp),%eax
  jae    L106
  movl   $0x1,-0x94(%rbp)
  mov    -0x58(%rbp),%eax
  mov    %eax,-0xa0(%rbp)
  mov    -0x48(%rbp),%rax
  movzwl (%rax),%edx
  mov    -0x48(%rbp),%rax
  movzwl (%rax),%eax
  movzwl %ax,%ecx
  mov    $0x800,%eax
  sub    %ecx,%eax
  sar    $0x5,%eax
  add    %eax,%edx
  mov    -0x48(%rbp),%rax
  mov    %dx,(%rax)
  mov    -0xa8(%rbp),%eax
  and    -0x60(%rbp),%eax
  mov    %eax,%edx
  mov    -0xe0(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%ecx
  shl    %cl,%esi
  movzbl -0xc1(%rbp),%edx
  mov    $0x8,%eax
  sub    -0xe0(%rbp),%eax
  mov    %eax,%ecx
  sar    %cl,%edx
  mov    %edx,%eax
  lea    (%rsi,%rax,1),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  shl    $0x8,%eax
  mov    %eax,%eax
  add    $0x736,%rax
  lea    (%rax,%rax,1),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x48(%rbp)
  cmpl   $0x6,-0xbc(%rbp)
  jle    L243
  mov    -0xa8(%rbp),%eax
  sub    -0xb8(%rbp),%eax
  mov    %eax,%edx
  mov    0x18(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  mov    %eax,-0x90(%rbp)
L83:
  shll   -0x90(%rbp)
  mov    -0x90(%rbp),%eax
  and    $0x100,%eax
  mov    %eax,-0x54(%rbp)
  mov    -0x54(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x94(%rbp),%eax
  cltq
  add    %rdx,%rax
  add    $0x100,%rax
  lea    (%rax,%rax,1),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x10(%rbp)
  cmpl   $0xffffff,-0xa0(%rbp)
  ja     L1029
  mov    -0x50(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jne    L911
  mov    $0x1,%eax
  jmp    L1122
L911:
  shll   $0x8,-0xa0(%rbp)
  mov    -0x9c(%rbp),%eax
  shl    $0x8,%eax
  mov    %eax,%ecx
  mov    -0x50(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x50(%rbp)
  movzbl (%rax),%eax
  movzbl %al,%eax
  or     %ecx,%eax
  mov    %eax,-0x9c(%rbp)
L1029:
  mov    -0xa0(%rbp),%eax
  shr    $0xb,%eax
  mov    %eax,%edx
  mov    -0x10(%rbp),%rax
  movzwl (%rax),%eax
  movzwl %ax,%eax
  imul   %edx,%eax
  mov    %eax,-0x58(%rbp)
  mov    -0x9c(%rbp),%eax
  cmp    -0x58(%rbp),%eax
  jae    L597
  mov    -0x58(%rbp),%eax
  mov    %eax,-0xa0(%rbp)
  mov    -0x10(%rbp),%rax
  movzwl (%rax),%edx
  mov    -0x10(%rbp),%rax
  movzwl (%rax),%eax
  movzwl %ax,%ecx
  mov    $0x800,%eax
  sub    %ecx,%eax
  sar    $0x5,%eax
  add    %eax,%edx
  mov    -0x10(%rbp),%rax
  mov    %dx,(%rax)
  shll   -0x94(%rbp)
  cmpl   $0x0,-0x54(%rbp)
  je     L27
  jmp    L434
L597:
  mov    -0x58(%rbp),%eax
  sub    %eax,-0xa0(%rbp)
  mov    -0x58(%rbp),%eax
  sub    %eax,-0x9c(%rbp)
  mov    -0x10(%rbp),%rax
  movzwl (%rax),%edx
  mov    -0x10(%rbp),%rax
  movzwl (%rax),%eax
  shr    $0x5,%ax
  sub    %eax,%edx
  mov    -0x10(%rbp),%rax
  mov    %dx,(%rax)
  mov    -0x94(%rbp),%eax
  add    %eax,%eax
  add    $0x1,%eax
  mov    %eax,-0x94(%rbp)
  cmpl   $0x0,-0x54(%rbp)
  je     L691
L27:
  cmpl   $0xff,-0x94(%rbp)
  jle    L83
  jmp    L243
L691:
  nop
L434:
  jmp    L243
L544:
  mov    -0x94(%rbp),%eax
  cltq
  lea    (%rax,%rax,1),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x8(%rbp)
  cmpl   $0xffffff,-0xa0(%rbp)
  ja     L269
  mov    -0x50(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jne    L263
  mov    $0x1,%eax
  jmp    L1122
L263:
  shll   $0x8,-0xa0(%rbp)
  mov    -0x9c(%rbp),%eax
  shl    $0x8,%eax
  mov    %eax,%ecx
  mov    -0x50(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x50(%rbp)
  movzbl (%rax),%eax
  movzbl %al,%eax
  or     %ecx,%eax
  mov    %eax,-0x9c(%rbp)
L269:
  mov    -0xa0(%rbp),%eax
  shr    $0xb,%eax
  mov    %eax,%edx
  mov    -0x8(%rbp),%rax
  movzwl (%rax),%eax
  movzwl %ax,%eax
  imul   %edx,%eax
  mov    %eax,-0x58(%rbp)
  mov    -0x9c(%rbp),%eax
  cmp    -0x58(%rbp),%eax
  jae    L1155
  mov    -0x58(%rbp),%eax
  mov    %eax,-0xa0(%rbp)
  mov    -0x8(%rbp),%rax
  movzwl (%rax),%edx
  mov    -0x8(%rbp),%rax
  movzwl (%rax),%eax
  movzwl %ax,%ecx
  mov    $0x800,%eax
  sub    %ecx,%eax
  sar    $0x5,%eax
  add    %eax,%edx
  mov    -0x8(%rbp),%rax
  mov    %dx,(%rax)
  shll   -0x94(%rbp)
  jmp    L243
L1155:
  mov    -0x58(%rbp),%eax
  sub    %eax,-0xa0(%rbp)
  mov    -0x58(%rbp),%eax
  sub    %eax,-0x9c(%rbp)
  mov    -0x8(%rbp),%rax
  movzwl (%rax),%edx
  mov    -0x8(%rbp),%rax
  movzwl (%rax),%eax
  shr    $0x5,%ax
  sub    %eax,%edx
  mov    -0x8(%rbp),%rax
  mov    %dx,(%rax)
  mov    -0x94(%rbp),%eax
  add    %eax,%eax
  add    $0x1,%eax
  mov    %eax,-0x94(%rbp)
L243:
  cmpl   $0xff,-0x94(%rbp)
  jle    L544
  mov    -0x94(%rbp),%eax
  mov    %al,-0xc1(%rbp)
  mov    -0xa8(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0xa8(%rbp)
  mov    %eax,%edx
  mov    0x18(%rbp),%rax
  add    %rax,%rdx
  movzbl -0xc1(%rbp),%eax
  mov    %al,(%rdx)
  cmpl   $0x3,-0xbc(%rbp)
  jg     L100
  movl   $0x0,-0xbc(%rbp)
  jmp    L697
L100:
  cmpl   $0x9,-0xbc(%rbp)
  jg     L117
  subl   $0x3,-0xbc(%rbp)
  jmp    L697
L117:
  subl   $0x6,-0xbc(%rbp)
  jmp    L697
L106:
  mov    -0x58(%rbp),%eax
  sub    %eax,-0xa0(%rbp)
  mov    -0x58(%rbp),%eax
  sub    %eax,-0x9c(%rbp)
  mov    -0x48(%rbp),%rax
  movzwl (%rax),%edx
  mov    -0x48(%rbp),%rax
  movzwl (%rax),%eax
  shr    $0x5,%ax
  sub    %eax,%edx
  mov    -0x48(%rbp),%rax
  mov    %dx,(%rax)
  mov    -0xbc(%rbp),%eax
  cltq
  add    $0xc0,%rax
  lea    (%rax,%rax,1),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x48(%rbp)
  cmpl   $0xffffff,-0xa0(%rbp)
  ja     L66
  mov    -0x50(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jne    L78
  mov    $0x1,%eax
  jmp    L1122
L78:
  shll   $0x8,-0xa0(%rbp)
  mov    -0x9c(%rbp),%eax
  shl    $0x8,%eax
  mov    %eax,%ecx
  mov    -0x50(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x50(%rbp)
  movzbl (%rax),%eax
  movzbl %al,%eax
  or     %ecx,%eax
  mov    %eax,-0x9c(%rbp)
L66:
  mov    -0xa0(%rbp),%eax
  shr    $0xb,%eax
  mov    %eax,%edx
  mov    -0x48(%rbp),%rax
  movzwl (%rax),%eax
  movzwl %ax,%eax
  imul   %edx,%eax
  mov    %eax,-0x58(%rbp)
  mov    -0x9c(%rbp),%eax
  cmp    -0x58(%rbp),%eax
  jae    L882
  mov    -0x58(%rbp),%eax
  mov    %eax,-0xa0(%rbp)
  mov    -0x48(%rbp),%rax
  movzwl (%rax),%edx
  mov    -0x48(%rbp),%rax
  movzwl (%rax),%eax
  movzwl %ax,%ecx
  mov    $0x800,%eax
  sub    %ecx,%eax
  sar    $0x5,%eax
  add    %eax,%edx
  mov    -0x48(%rbp),%rax
  mov    %dx,(%rax)
  mov    -0xb0(%rbp),%eax
  mov    %eax,-0xac(%rbp)
  mov    -0xb4(%rbp),%eax
  mov    %eax,-0xb0(%rbp)
  mov    -0xb8(%rbp),%eax
  mov    %eax,-0xb4(%rbp)
  cmpl   $0x6,-0xbc(%rbp)
  jg     L957
  mov    $0x0,%eax
  jmp    L475
L957:
  mov    $0x3,%eax
L475:
  mov    %eax,-0xbc(%rbp)
  mov    -0x38(%rbp),%rax
  add    $0x664,%rax
  mov    %rax,-0x48(%rbp)
  jmp    L893
L882:
  mov    -0x58(%rbp),%eax
  sub    %eax,-0xa0(%rbp)
  mov    -0x58(%rbp),%eax
  sub    %eax,-0x9c(%rbp)
  mov    -0x48(%rbp),%rax
  movzwl (%rax),%edx
  mov    -0x48(%rbp),%rax
  movzwl (%rax),%eax
  shr    $0x5,%ax
  sub    %eax,%edx
  mov    -0x48(%rbp),%rax
  mov    %dx,(%rax)
  mov    -0xbc(%rbp),%eax
  cltq
  add    $0xcc,%rax
  lea    (%rax,%rax,1),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x48(%rbp)
  cmpl   $0xffffff,-0xa0(%rbp)
  ja     L55
  mov    -0x50(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jne    L1156
  mov    $0x1,%eax
  jmp    L1122
L1156:
  shll   $0x8,-0xa0(%rbp)
  mov    -0x9c(%rbp),%eax
  shl    $0x8,%eax
  mov    %eax,%ecx
  mov    -0x50(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x50(%rbp)
  movzbl (%rax),%eax
  movzbl %al,%eax
  or     %ecx,%eax
  mov    %eax,-0x9c(%rbp)
L55:
  mov    -0xa0(%rbp),%eax
  shr    $0xb,%eax
  mov    %eax,%edx
  mov    -0x48(%rbp),%rax
  movzwl (%rax),%eax
  movzwl %ax,%eax
  imul   %edx,%eax
  mov    %eax,-0x58(%rbp)
  mov    -0x9c(%rbp),%eax
  cmp    -0x58(%rbp),%eax
  jae    L763
  mov    -0x58(%rbp),%eax
  mov    %eax,-0xa0(%rbp)
  mov    -0x48(%rbp),%rax
  movzwl (%rax),%edx
  mov    -0x48(%rbp),%rax
  movzwl (%rax),%eax
  movzwl %ax,%ecx
  mov    $0x800,%eax
  sub    %ecx,%eax
  sar    $0x5,%eax
  add    %eax,%edx
  mov    -0x48(%rbp),%rax
  mov    %dx,(%rax)
  mov    -0xbc(%rbp),%eax
  shl    $0x4,%eax
  movslq %eax,%rdx
  mov    -0x5c(%rbp),%eax
  cltq
  add    %rdx,%rax
  add    $0xf0,%rax
  lea    (%rax,%rax,1),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x48(%rbp)
  cmpl   $0xffffff,-0xa0(%rbp)
  ja     L1
  mov    -0x50(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jne    L240
  mov    $0x1,%eax
  jmp    L1122
L240:
  shll   $0x8,-0xa0(%rbp)
  mov    -0x9c(%rbp),%eax
  shl    $0x8,%eax
  mov    %eax,%ecx
  mov    -0x50(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x50(%rbp)
  movzbl (%rax),%eax
  movzbl %al,%eax
  or     %ecx,%eax
  mov    %eax,-0x9c(%rbp)
L1:
  mov    -0xa0(%rbp),%eax
  shr    $0xb,%eax
  mov    %eax,%edx
  mov    -0x48(%rbp),%rax
  movzwl (%rax),%eax
  movzwl %ax,%eax
  imul   %edx,%eax
  mov    %eax,-0x58(%rbp)
  mov    -0x9c(%rbp),%eax
  cmp    -0x58(%rbp),%eax
  jae    L225
  mov    -0x58(%rbp),%eax
  mov    %eax,-0xa0(%rbp)
  mov    -0x48(%rbp),%rax
  movzwl (%rax),%edx
  mov    -0x48(%rbp),%rax
  movzwl (%rax),%eax
  movzwl %ax,%ecx
  mov    $0x800,%eax
  sub    %ecx,%eax
  sar    $0x5,%eax
  add    %eax,%edx
  mov    -0x48(%rbp),%rax
  mov    %dx,(%rax)
  cmpl   $0x0,-0xa8(%rbp)
  jne    L936
  mov    $0x1,%eax
  jmp    L1122
L936:
  cmpl   $0x6,-0xbc(%rbp)
  jg     L532
  mov    $0x9,%eax
  jmp    L601
L532:
  mov    $0xb,%eax
L601:
  mov    %eax,-0xbc(%rbp)
  mov    -0xa8(%rbp),%eax
  sub    -0xb8(%rbp),%eax
  mov    %eax,%edx
  mov    0x18(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  mov    %al,-0xc1(%rbp)
  mov    -0xa8(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0xa8(%rbp)
  mov    %eax,%edx
  mov    0x18(%rbp),%rax
  add    %rax,%rdx
  movzbl -0xc1(%rbp),%eax
  mov    %al,(%rdx)
  jmp    L697
L225:
  mov    -0x58(%rbp),%eax
  sub    %eax,-0xa0(%rbp)
  mov    -0x58(%rbp),%eax
  sub    %eax,-0x9c(%rbp)
  mov    -0x48(%rbp),%rax
  movzwl (%rax),%edx
  mov    -0x48(%rbp),%rax
  movzwl (%rax),%eax
  shr    $0x5,%ax
  sub    %eax,%edx
  mov    -0x48(%rbp),%rax
  mov    %dx,(%rax)
  jmp    L341
L763:
  mov    -0x58(%rbp),%eax
  sub    %eax,-0xa0(%rbp)
  mov    -0x58(%rbp),%eax
  sub    %eax,-0x9c(%rbp)
  mov    -0x48(%rbp),%rax
  movzwl (%rax),%edx
  mov    -0x48(%rbp),%rax
  movzwl (%rax),%eax
  shr    $0x5,%ax
  sub    %eax,%edx
  mov    -0x48(%rbp),%rax
  mov    %dx,(%rax)
  mov    -0xbc(%rbp),%eax
  cltq
  add    $0xd8,%rax
  lea    (%rax,%rax,1),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x48(%rbp)
  cmpl   $0xffffff,-0xa0(%rbp)
  ja     L1134
  mov    -0x50(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jne    L39
  mov    $0x1,%eax
  jmp    L1122
L39:
  shll   $0x8,-0xa0(%rbp)
  mov    -0x9c(%rbp),%eax
  shl    $0x8,%eax
  mov    %eax,%ecx
  mov    -0x50(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x50(%rbp)
  movzbl (%rax),%eax
  movzbl %al,%eax
  or     %ecx,%eax
  mov    %eax,-0x9c(%rbp)
L1134:
  mov    -0xa0(%rbp),%eax
  shr    $0xb,%eax
  mov    %eax,%edx
  mov    -0x48(%rbp),%rax
  movzwl (%rax),%eax
  movzwl %ax,%eax
  imul   %edx,%eax
  mov    %eax,-0x58(%rbp)
  mov    -0x9c(%rbp),%eax
  cmp    -0x58(%rbp),%eax
  jae    L934
  mov    -0x58(%rbp),%eax
  mov    %eax,-0xa0(%rbp)
  mov    -0x48(%rbp),%rax
  movzwl (%rax),%edx
  mov    -0x48(%rbp),%rax
  movzwl (%rax),%eax
  movzwl %ax,%ecx
  mov    $0x800,%eax
  sub    %ecx,%eax
  sar    $0x5,%eax
  add    %eax,%edx
  mov    -0x48(%rbp),%rax
  mov    %dx,(%rax)
  mov    -0xb4(%rbp),%eax
  mov    %eax,-0x8c(%rbp)
  jmp    L234
L934:
  mov    -0x58(%rbp),%eax
  sub    %eax,-0xa0(%rbp)
  mov    -0x58(%rbp),%eax
  sub    %eax,-0x9c(%rbp)
  mov    -0x48(%rbp),%rax
  movzwl (%rax),%edx
  mov    -0x48(%rbp),%rax
  movzwl (%rax),%eax
  shr    $0x5,%ax
  sub    %eax,%edx
  mov    -0x48(%rbp),%rax
  mov    %dx,(%rax)
  mov    -0xbc(%rbp),%eax
  cltq
  add    $0xe4,%rax
  lea    (%rax,%rax,1),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x48(%rbp)
  cmpl   $0xffffff,-0xa0(%rbp)
  ja     L731
  mov    -0x50(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jne    L458
  mov    $0x1,%eax
  jmp    L1122
L458:
  shll   $0x8,-0xa0(%rbp)
  mov    -0x9c(%rbp),%eax
  shl    $0x8,%eax
  mov    %eax,%ecx
  mov    -0x50(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x50(%rbp)
  movzbl (%rax),%eax
  movzbl %al,%eax
  or     %ecx,%eax
  mov    %eax,-0x9c(%rbp)
L731:
  mov    -0xa0(%rbp),%eax
  shr    $0xb,%eax
  mov    %eax,%edx
  mov    -0x48(%rbp),%rax
  movzwl (%rax),%eax
  movzwl %ax,%eax
  imul   %edx,%eax
  mov    %eax,-0x58(%rbp)
  mov    -0x9c(%rbp),%eax
  cmp    -0x58(%rbp),%eax
  jae    L385
  mov    -0x58(%rbp),%eax
  mov    %eax,-0xa0(%rbp)
  mov    -0x48(%rbp),%rax
  movzwl (%rax),%edx
  mov    -0x48(%rbp),%rax
  movzwl (%rax),%eax
  movzwl %ax,%ecx
  mov    $0x800,%eax
  sub    %ecx,%eax
  sar    $0x5,%eax
  add    %eax,%edx
  mov    -0x48(%rbp),%rax
  mov    %dx,(%rax)
  mov    -0xb0(%rbp),%eax
  mov    %eax,-0x8c(%rbp)
  jmp    L108
L385:
  mov    -0x58(%rbp),%eax
  sub    %eax,-0xa0(%rbp)
  mov    -0x58(%rbp),%eax
  sub    %eax,-0x9c(%rbp)
  mov    -0x48(%rbp),%rax
  movzwl (%rax),%edx
  mov    -0x48(%rbp),%rax
  movzwl (%rax),%eax
  shr    $0x5,%ax
  sub    %eax,%edx
  mov    -0x48(%rbp),%rax
  mov    %dx,(%rax)
  mov    -0xac(%rbp),%eax
  mov    %eax,-0x8c(%rbp)
  mov    -0xb0(%rbp),%eax
  mov    %eax,-0xac(%rbp)
L108:
  mov    -0xb4(%rbp),%eax
  mov    %eax,-0xb0(%rbp)
L234:
  mov    -0xb8(%rbp),%eax
  mov    %eax,-0xb4(%rbp)
  mov    -0x8c(%rbp),%eax
  mov    %eax,-0xb8(%rbp)
L341:
  cmpl   $0x6,-0xbc(%rbp)
  jg     L927
  mov    $0x8,%eax
  jmp    L994
L927:
  mov    $0xb,%eax
L994:
  mov    %eax,-0xbc(%rbp)
  mov    -0x38(%rbp),%rax
  add    $0xa68,%rax
  mov    %rax,-0x48(%rbp)
L893:
  mov    -0x48(%rbp),%rax
  mov    %rax,-0x40(%rbp)
  cmpl   $0xffffff,-0xa0(%rbp)
  ja     L841
  mov    -0x50(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jne    L413
  mov    $0x1,%eax
  jmp    L1122
L413:
  shll   $0x8,-0xa0(%rbp)
  mov    -0x9c(%rbp),%eax
  shl    $0x8,%eax
  mov    %eax,%ecx
  mov    -0x50(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x50(%rbp)
  movzbl (%rax),%eax
  movzbl %al,%eax
  or     %ecx,%eax
  mov    %eax,-0x9c(%rbp)
L841:
  mov    -0xa0(%rbp),%eax
  shr    $0xb,%eax
  mov    %eax,%edx
  mov    -0x40(%rbp),%rax
  movzwl (%rax),%eax
  movzwl %ax,%eax
  imul   %edx,%eax
  mov    %eax,-0x58(%rbp)
  mov    -0x9c(%rbp),%eax
  cmp    -0x58(%rbp),%eax
  jae    L587
  mov    -0x58(%rbp),%eax
  mov    %eax,-0xa0(%rbp)
  mov    -0x40(%rbp),%rax
  movzwl (%rax),%edx
  mov    -0x40(%rbp),%rax
  movzwl (%rax),%eax
  movzwl %ax,%ecx
  mov    $0x800,%eax
  sub    %ecx,%eax
  sar    $0x5,%eax
  add    %eax,%edx
  mov    -0x40(%rbp),%rax
  mov    %dx,(%rax)
  mov    -0x5c(%rbp),%eax
  shl    $0x3,%eax
  cltq
  add    $0x2,%rax
  lea    (%rax,%rax,1),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x40(%rbp)
  movl   $0x0,-0x84(%rbp)
  movl   $0x3,-0x88(%rbp)
  jmp    L482
L587:
  mov    -0x58(%rbp),%eax
  sub    %eax,-0xa0(%rbp)
  mov    -0x58(%rbp),%eax
  sub    %eax,-0x9c(%rbp)
  mov    -0x40(%rbp),%rax
  movzwl (%rax),%edx
  mov    -0x40(%rbp),%rax
  movzwl (%rax),%eax
  shr    $0x5,%ax
  sub    %eax,%edx
  mov    -0x40(%rbp),%rax
  mov    %dx,(%rax)
  mov    -0x48(%rbp),%rax
  add    $0x2,%rax
  mov    %rax,-0x40(%rbp)
  cmpl   $0xffffff,-0xa0(%rbp)
  ja     L6
  mov    -0x50(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jne    L481
  mov    $0x1,%eax
  jmp    L1122
L481:
  shll   $0x8,-0xa0(%rbp)
  mov    -0x9c(%rbp),%eax
  shl    $0x8,%eax
  mov    %eax,%ecx
  mov    -0x50(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x50(%rbp)
  movzbl (%rax),%eax
  movzbl %al,%eax
  or     %ecx,%eax
  mov    %eax,-0x9c(%rbp)
L6:
  mov    -0xa0(%rbp),%eax
  shr    $0xb,%eax
  mov    %eax,%edx
  mov    -0x40(%rbp),%rax
  movzwl (%rax),%eax
  movzwl %ax,%eax
  imul   %edx,%eax
  mov    %eax,-0x58(%rbp)
  mov    -0x9c(%rbp),%eax
  cmp    -0x58(%rbp),%eax
  jae    L996
  mov    -0x58(%rbp),%eax
  mov    %eax,-0xa0(%rbp)
  mov    -0x40(%rbp),%rax
  movzwl (%rax),%edx
  mov    -0x40(%rbp),%rax
  movzwl (%rax),%eax
  movzwl %ax,%ecx
  mov    $0x800,%eax
  sub    %ecx,%eax
  sar    $0x5,%eax
  add    %eax,%edx
  mov    -0x40(%rbp),%rax
  mov    %dx,(%rax)
  mov    -0x5c(%rbp),%eax
  shl    $0x3,%eax
  cltq
  add    $0x82,%rax
  lea    (%rax,%rax,1),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x40(%rbp)
  movl   $0x8,-0x84(%rbp)
  movl   $0x3,-0x88(%rbp)
  jmp    L482
L996:
  mov    -0x58(%rbp),%eax
  sub    %eax,-0xa0(%rbp)
  mov    -0x58(%rbp),%eax
  sub    %eax,-0x9c(%rbp)
  mov    -0x40(%rbp),%rax
  movzwl (%rax),%edx
  mov    -0x40(%rbp),%rax
  movzwl (%rax),%eax
  shr    $0x5,%ax
  sub    %eax,%edx
  mov    -0x40(%rbp),%rax
  mov    %dx,(%rax)
  mov    -0x48(%rbp),%rax
  add    $0x204,%rax
  mov    %rax,-0x40(%rbp)
  movl   $0x10,-0x84(%rbp)
  movl   $0x8,-0x88(%rbp)
L482:
  mov    -0x88(%rbp),%eax
  mov    %eax,-0x80(%rbp)
  movl   $0x1,-0xa4(%rbp)
L186:
  mov    -0xa4(%rbp),%eax
  cltq
  lea    (%rax,%rax,1),%rdx
  mov    -0x40(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x28(%rbp)
  cmpl   $0xffffff,-0xa0(%rbp)
  ja     L602
  mov    -0x50(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jne    L828
  mov    $0x1,%eax
  jmp    L1122
L828:
  shll   $0x8,-0xa0(%rbp)
  mov    -0x9c(%rbp),%eax
  shl    $0x8,%eax
  mov    %eax,%ecx
  mov    -0x50(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x50(%rbp)
  movzbl (%rax),%eax
  movzbl %al,%eax
  or     %ecx,%eax
  mov    %eax,-0x9c(%rbp)
L602:
  mov    -0xa0(%rbp),%eax
  shr    $0xb,%eax
  mov    %eax,%edx
  mov    -0x28(%rbp),%rax
  movzwl (%rax),%eax
  movzwl %ax,%eax
  imul   %edx,%eax
  mov    %eax,-0x58(%rbp)
  mov    -0x9c(%rbp),%eax
  cmp    -0x58(%rbp),%eax
  jae    L610
  mov    -0x58(%rbp),%eax
  mov    %eax,-0xa0(%rbp)
  mov    -0x28(%rbp),%rax
  movzwl (%rax),%edx
  mov    -0x28(%rbp),%rax
  movzwl (%rax),%eax
  movzwl %ax,%ecx
  mov    $0x800,%eax
  sub    %ecx,%eax
  sar    $0x5,%eax
  add    %eax,%edx
  mov    -0x28(%rbp),%rax
  mov    %dx,(%rax)
  shll   -0xa4(%rbp)
  jmp    L844
L610:
  mov    -0x58(%rbp),%eax
  sub    %eax,-0xa0(%rbp)
  mov    -0x58(%rbp),%eax
  sub    %eax,-0x9c(%rbp)
  mov    -0x28(%rbp),%rax
  movzwl (%rax),%edx
  mov    -0x28(%rbp),%rax
  movzwl (%rax),%eax
  shr    $0x5,%ax
  sub    %eax,%edx
  mov    -0x28(%rbp),%rax
  mov    %dx,(%rax)
  mov    -0xa4(%rbp),%eax
  add    %eax,%eax
  add    $0x1,%eax
  mov    %eax,-0xa4(%rbp)
L844:
  subl   $0x1,-0x80(%rbp)
  cmpl   $0x0,-0x80(%rbp)
  jne    L186
  mov    -0x88(%rbp),%eax
  mov    $0x1,%edx
  mov    %eax,%ecx
  shl    %cl,%edx
  mov    %edx,%eax
  sub    %eax,-0xa4(%rbp)
  mov    -0x84(%rbp),%eax
  add    %eax,-0xa4(%rbp)
  cmpl   $0x3,-0xbc(%rbp)
  jg     L322
  addl   $0x7,-0xbc(%rbp)
  mov    -0xa4(%rbp),%eax
  mov    $0x3,%edx
  cmp    %edx,%eax
  cmovg  %edx,%eax
  shl    $0x6,%eax
  cltq
  add    $0x1b0,%rax
  lea    (%rax,%rax,1),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x48(%rbp)
  movl   $0x6,-0x78(%rbp)
  movl   $0x1,-0x7c(%rbp)
L533:
  mov    -0x7c(%rbp),%eax
  cltq
  lea    (%rax,%rax,1),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x20(%rbp)
  cmpl   $0xffffff,-0xa0(%rbp)
  ja     L1098
  mov    -0x50(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jne    L470
  mov    $0x1,%eax
  jmp    L1122
L470:
  shll   $0x8,-0xa0(%rbp)
  mov    -0x9c(%rbp),%eax
  shl    $0x8,%eax
  mov    %eax,%ecx
  mov    -0x50(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x50(%rbp)
  movzbl (%rax),%eax
  movzbl %al,%eax
  or     %ecx,%eax
  mov    %eax,-0x9c(%rbp)
L1098:
  mov    -0xa0(%rbp),%eax
  shr    $0xb,%eax
  mov    %eax,%edx
  mov    -0x20(%rbp),%rax
  movzwl (%rax),%eax
  movzwl %ax,%eax
  imul   %edx,%eax
  mov    %eax,-0x58(%rbp)
  mov    -0x9c(%rbp),%eax
  cmp    -0x58(%rbp),%eax
  jae    L344
  mov    -0x58(%rbp),%eax
  mov    %eax,-0xa0(%rbp)
  mov    -0x20(%rbp),%rax
  movzwl (%rax),%edx
  mov    -0x20(%rbp),%rax
  movzwl (%rax),%eax
  movzwl %ax,%ecx
  mov    $0x800,%eax
  sub    %ecx,%eax
  sar    $0x5,%eax
  add    %eax,%edx
  mov    -0x20(%rbp),%rax
  mov    %dx,(%rax)
  shll   -0x7c(%rbp)
  jmp    L747
L344:
  mov    -0x58(%rbp),%eax
  sub    %eax,-0xa0(%rbp)
  mov    -0x58(%rbp),%eax
  sub    %eax,-0x9c(%rbp)
  mov    -0x20(%rbp),%rax
  movzwl (%rax),%edx
  mov    -0x20(%rbp),%rax
  movzwl (%rax),%eax
  shr    $0x5,%ax
  sub    %eax,%edx
  mov    -0x20(%rbp),%rax
  mov    %dx,(%rax)
  mov    -0x7c(%rbp),%eax
  add    %eax,%eax
  add    $0x1,%eax
  mov    %eax,-0x7c(%rbp)
L747:
  subl   $0x1,-0x78(%rbp)
  cmpl   $0x0,-0x78(%rbp)
  jne    L533
  subl   $0x40,-0x7c(%rbp)
  cmpl   $0x3,-0x7c(%rbp)
  jle    L493
  mov    -0x7c(%rbp),%eax
  sar    %eax
  sub    $0x1,%eax
  mov    %eax,-0x74(%rbp)
  mov    -0x7c(%rbp),%eax
  and    $0x1,%eax
  or     $0x2,%eax
  mov    %eax,-0xb8(%rbp)
  cmpl   $0xd,-0x7c(%rbp)
  jg     L1086
  mov    -0x74(%rbp),%eax
  mov    %eax,%ecx
  shll   %cl,-0xb8(%rbp)
  mov    -0xb8(%rbp),%eax
  mov    -0x7c(%rbp),%edx
  movslq %edx,%rdx
  sub    %rdx,%rax
  add    $0x2b0,%rax
  add    %rax,%rax
  lea    -0x2(%rax),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x48(%rbp)
  jmp    L76
L1086:
  subl   $0x4,-0x74(%rbp)
L20:
  cmpl   $0xffffff,-0xa0(%rbp)
  ja     L262
  mov    -0x50(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jne    L1118
  mov    $0x1,%eax
  jmp    L1122
L1118:
  shll   $0x8,-0xa0(%rbp)
  mov    -0x9c(%rbp),%eax
  shl    $0x8,%eax
  mov    %eax,%ecx
  mov    -0x50(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x50(%rbp)
  movzbl (%rax),%eax
  movzbl %al,%eax
  or     %ecx,%eax
  mov    %eax,-0x9c(%rbp)
L262:
  shrl   -0xa0(%rbp)
  shll   -0xb8(%rbp)
  mov    -0x9c(%rbp),%eax
  cmp    -0xa0(%rbp),%eax
  jb     L846
  mov    -0xa0(%rbp),%eax
  sub    %eax,-0x9c(%rbp)
  orl    $0x1,-0xb8(%rbp)
L846:
  subl   $0x1,-0x74(%rbp)
  cmpl   $0x0,-0x74(%rbp)
  jne    L20
  mov    -0x38(%rbp),%rax
  add    $0x644,%rax
  mov    %rax,-0x48(%rbp)
  shll   $0x4,-0xb8(%rbp)
  movl   $0x4,-0x74(%rbp)
L76:
  movl   $0x1,-0x70(%rbp)
  movl   $0x1,-0x6c(%rbp)
L720:
  mov    -0x6c(%rbp),%eax
  cltq
  lea    (%rax,%rax,1),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x18(%rbp)
  cmpl   $0xffffff,-0xa0(%rbp)
  ja     L266
  mov    -0x50(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jne    L144
  mov    $0x1,%eax
  jmp    L1122
L144:
  shll   $0x8,-0xa0(%rbp)
  mov    -0x9c(%rbp),%eax
  shl    $0x8,%eax
  mov    %eax,%ecx
  mov    -0x50(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x50(%rbp)
  movzbl (%rax),%eax
  movzbl %al,%eax
  or     %ecx,%eax
  mov    %eax,-0x9c(%rbp)
L266:
  mov    -0xa0(%rbp),%eax
  shr    $0xb,%eax
  mov    %eax,%edx
  mov    -0x18(%rbp),%rax
  movzwl (%rax),%eax
  movzwl %ax,%eax
  imul   %edx,%eax
  mov    %eax,-0x58(%rbp)
  mov    -0x9c(%rbp),%eax
  cmp    -0x58(%rbp),%eax
  jae    L194
  mov    -0x58(%rbp),%eax
  mov    %eax,-0xa0(%rbp)
  mov    -0x18(%rbp),%rax
  movzwl (%rax),%edx
  mov    -0x18(%rbp),%rax
  movzwl (%rax),%eax
  movzwl %ax,%ecx
  mov    $0x800,%eax
  sub    %ecx,%eax
  sar    $0x5,%eax
  add    %eax,%edx
  mov    -0x18(%rbp),%rax
  mov    %dx,(%rax)
  shll   -0x6c(%rbp)
  jmp    L984
L194:
  mov    -0x58(%rbp),%eax
  sub    %eax,-0xa0(%rbp)
  mov    -0x58(%rbp),%eax
  sub    %eax,-0x9c(%rbp)
  mov    -0x18(%rbp),%rax
  movzwl (%rax),%edx
  mov    -0x18(%rbp),%rax
  movzwl (%rax),%eax
  shr    $0x5,%ax
  sub    %eax,%edx
  mov    -0x18(%rbp),%rax
  mov    %dx,(%rax)
  mov    -0x6c(%rbp),%eax
  add    %eax,%eax
  add    $0x1,%eax
  mov    %eax,-0x6c(%rbp)
  mov    -0x70(%rbp),%eax
  or     %eax,-0xb8(%rbp)
L984:
  shll   -0x70(%rbp)
  subl   $0x1,-0x74(%rbp)
  cmpl   $0x0,-0x74(%rbp)
  jne    L720
  jmp    L519
L493:
  mov    -0x7c(%rbp),%eax
  mov    %eax,-0xb8(%rbp)
L519:
  addl   $0x1,-0xb8(%rbp)
  cmpl   $0x0,-0xb8(%rbp)
  jne    L322
  movl   $0xffffffff,-0xa4(%rbp)
  jmp    L859
L322:
  addl   $0x2,-0xa4(%rbp)
  mov    -0xb8(%rbp),%eax
  cmp    -0xa8(%rbp),%eax
  jbe    L229
  mov    $0x1,%eax
  jmp    L1122
L229:
  mov    -0xa8(%rbp),%eax
  sub    -0xb8(%rbp),%eax
  mov    %eax,%edx
  mov    0x18(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  mov    %al,-0xc1(%rbp)
  subl   $0x1,-0xa4(%rbp)
  mov    -0xa8(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0xa8(%rbp)
  mov    %eax,%edx
  mov    0x18(%rbp),%rax
  add    %rax,%rdx
  movzbl -0xc1(%rbp),%eax
  mov    %al,(%rdx)
  cmpl   $0x0,-0xa4(%rbp)
  je     L697
  mov    -0xa8(%rbp),%eax
  cmp    0x20(%rbp),%eax
  jb     L229
L697:
  mov    -0xa8(%rbp),%eax
  cmp    0x20(%rbp),%eax
  jb     L594
L859:
  cmpl   $0xffffff,-0xa0(%rbp)
  ja     L807
  mov    -0x50(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jne    L589
  mov    $0x1,%eax
  jmp    L1122
L589:
  shll   $0x8,-0xa0(%rbp)
  mov    -0x9c(%rbp),%eax
  shl    $0x8,%eax
  mov    %eax,%ecx
  mov    -0x50(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x50(%rbp)
  movzbl (%rax),%eax
  movzbl %al,%eax
  or     %ecx,%eax
  mov    %eax,-0x9c(%rbp)
L807:
  mov    0x28(%rbp),%rax
  mov    -0xa8(%rbp),%edx
  mov    %edx,(%rax)
  mov    $0x0,%eax
L1122:
  leave
  ret
```

assistant: ```c
int LzmaDecode(unsigned char *buffer, unsigned int bufferSize, int lc, int lp, int pb, unsigned char *inStream, unsigned int inSize, unsigned char *outStream, unsigned int outSize, unsigned int *outSizeProcessed) {
  unsigned int numProbs = (((((((((((0 + (12 << 4)) + 12) + 12) + 12) + 12) + (12 << 4)) + (4 << 6)) + (1 << (14 >> 1)) - 14) + (1 << 4)) + (((((0 + 1) + 1) + ((1 << 4) << 3)) + ((1 << 4) << 3)) + (1 << 8))) + (((((0 + 1) + 1) + ((1 << 4) << 3)) + ((1 << 4) << 3)) + (1 << 8))) + ((unsigned int)768 << (lc + lp));
  unsigned short *p = (unsigned short *)buffer;
  unsigned int i;
  int state = 0;
  unsigned char previousByte = 0;
  unsigned int rep0 = 1, rep1 = 1, rep2 = 1, rep3 = 1;
  unsigned int nowPos = 0;
  unsigned int posStateMask = (1 << pb) - 1;
  unsigned int literalPosMask = (1 << lp) - 1;
  int len = 0;
  unsigned char *Buffer;
  unsigned char *BufferLim;
  unsigned int Range;
  unsigned int Code;
  if (bufferSize < numProbs * sizeof(unsigned short))
    return 2;
  for (i = 0; i < numProbs; i++)
    p[i] = (1 << 11) >> 1;
  Buffer = inStream;
  BufferLim = inStream + inSize;
  Code = 0;
  Range = 0xFFFFFFFF;
  {
    int i;
    for (i = 0; i < 5; i++) {
      {
        if (Buffer == BufferLim)
          return 1;
      };
      Code = (Code << 8) | (*Buffer++);
    }
  };
  *outSizeProcessed = 0;
  while (nowPos < outSize) {
    unsigned short *prob;
    unsigned int bound;
    int posState = (int)((nowPos)&posStateMask);
    prob = p + 0 + (state << 4) + posState;
    if (Range < ((unsigned int)1 << 24)) {
      {
        if (Buffer == BufferLim)
          return 1;
      };
      Range <<= 8;
      Code = (Code << 8) | (*Buffer++);
    };
    bound = (Range >> 11) * *(prob);
    if (Code < bound) {
      int symbol = 1;
      Range = bound;
      *(prob) += ((1 << 11) - *(prob)) >> 5;
      prob = p + (((((((((((0 + (12 << 4)) + 12) + 12) + 12) + 12) + (12 << 4)) + (4 << 6)) + (1 << (14 >> 1)) - 14) + (1 << 4)) + (((((0 + 1) + 1) + ((1 << 4) << 3)) + ((1 << 4) << 3)) + (1 << 8))) + (((((0 + 1) + 1) + ((1 << 4) << 3)) + ((1 << 4) << 3)) + (1 << 8))) + (768 * ((((nowPos)&literalPosMask) << lc) + (previousByte >> (8 - lc))));
      if (state >= 7) {
        int matchByte;
        matchByte = outStream[nowPos - rep0];
        do {
          int bit;
          unsigned short *probLit;
          matchByte <<= 1;
          bit = (matchByte & 0x100);
          probLit = prob + 0x100 + bit + symbol;
          if (Range < ((unsigned int)1 << 24)) {
            {
              if (Buffer == BufferLim)
                return 1;
            };
            Range <<= 8;
            Code = (Code << 8) | (*Buffer++);
          };
          bound = (Range >> 11) * *(probLit);
          if (Code < bound) {
            Range = bound;
            *(probLit) += ((1 << 11) - *(probLit)) >> 5;
            ;
            symbol <<= 1;
            if (bit != 0)
              break;
          } else {
            Range -= bound;
            Code -= bound;
            *(probLit) -= (*(probLit)) >> 5;
            ;
            symbol = (symbol + symbol) + 1;
            if (bit == 0)
              break;
          }
        } while (symbol < 0x100);
      }
      while (symbol < 0x100) {
        unsigned short *probLit = prob + symbol;
        if (Range < ((unsigned int)1 << 24)) {
          {
            if (Buffer == BufferLim)
              return 1;
          };
          Range <<= 8;
          Code = (Code << 8) | (*Buffer++);
        };
        bound = (Range >> 11) * *(probLit);
        if (Code < bound) {
          Range = bound;
          *(probLit) += ((1 << 11) - *(probLit)) >> 5;
          ;
          symbol <<= 1;
          ;
          ;
        } else {
          Range -= bound;
          Code -= bound;
          *(probLit) -= (*(probLit)) >> 5;
          ;
          symbol = (symbol + symbol) + 1;
          ;
          ;
        }
      }
      previousByte = (unsigned char)symbol;
      outStream[nowPos++] = previousByte;
      if (state < 4)
        state = 0;
      else if (state < 10)
        state -= 3;
      else
        state -= 6;
    } else {
      Range -= bound;
      Code -= bound;
      *(prob) -= (*(prob)) >> 5;
      ;
      prob = p + (0 + (12 << 4)) + state;
      if (Range < ((unsigned int)1 << 24)) {
        {
          if (Buffer == BufferLim)
            return 1;
        };
        Range <<= 8;
        Code = (Code << 8) | (*Buffer++);
      };
      bound = (Range >> 11) * *(prob);
      if (Code < bound) {
        Range = bound;
        *(prob) += ((1 << 11) - *(prob)) >> 5;
        ;
        rep3 = rep2;
        rep2 = rep1;
        rep1 = rep0;
        state = state < 7 ? 0 : 3;
        prob = p + (((((((((0 + (12 << 4)) + 12) + 12) + 12) + 12) + (12 << 4)) + (4 << 6)) + (1 << (14 >> 1)) - 14) + (1 << 4));
      } else {
        Range -= bound;
        Code -= bound;
        *(prob) -= (*(prob)) >> 5;
        ;
        prob = p + ((0 + (12 << 4)) + 12) + state;
        if (Range < ((unsigned int)1 << 24)) {
          {
            if (Buffer == BufferLim)
              return 1;
          };
          Range <<= 8;
          Code = (Code << 8) | (*Buffer++);
        };
        bound = (Range >> 11) * *(prob);
        if (Code < bound) {
          Range = bound;
          *(prob) += ((1 << 11) - *(prob)) >> 5;
          ;
          prob = p + (((((0 + (12 << 4)) + 12) + 12) + 12) + 12) + (state << 4) + posState;
          if (Range < ((unsigned int)1 << 24)) {
            {
              if (Buffer == BufferLim)
                return 1;
            };
            Range <<= 8;
            Code = (Code << 8) | (*Buffer++);
          };
          bound = (Range >> 11) * *(prob);
          if (Code < bound) {
            Range = bound;
            *(prob) += ((1 << 11) - *(prob)) >> 5;
            ;
            if (nowPos == 0)
              return 1;
            state = state < 7 ? 9 : 11;
            previousByte = outStream[nowPos - rep0];
            outStream[nowPos++] = previousByte;
            continue;
          } else {
            Range -= bound;
            Code -= bound;
            *(prob) -= (*(prob)) >> 5;
            ;
          }
        } else {
          unsigned int distance;
          Range -= bound;
          Code -= bound;
          *(prob) -= (*(prob)) >> 5;
          ;
          prob = p + (((0 + (12 << 4)) + 12) + 12) + state;
          if (Range < ((unsigned int)1 << 24)) {
            {
              if (Buffer == BufferLim)
                return 1;
            };
            Range <<= 8;
            Code = (Code << 8) | (*Buffer++);
          };
          bound = (Range >> 11) * *(prob);
          if (Code < bound) {
            Range = bound;
            *(prob) += ((1 << 11) - *(prob)) >> 5;
            ;
            distance = rep1;
          } else {
            Range -= bound;
            Code -= bound;
            *(prob) -= (*(prob)) >> 5;
            ;
            prob = p + ((((0 + (12 << 4)) + 12) + 12) + 12) + state;
            if (Range < ((unsigned int)1 << 24)) {
              {
                if (Buffer == BufferLim)
                  return 1;
              };
              Range <<= 8;
              Code = (Code << 8) | (*Buffer++);
            };
            bound = (Range >> 11) * *(prob);
            if (Code < bound) {
              Range = bound;
              *(prob) += ((1 << 11) - *(prob)) >> 5;
              ;
              distance = rep2;
            } else {
              Range -= bound;
              Code -= bound;
              *(prob) -= (*(prob)) >> 5;
              ;
              distance = rep3;
              rep3 = rep2;
            }
            rep2 = rep1;
          }
          rep1 = rep0;
          rep0 = distance;
        }
        state = state < 7 ? 8 : 11;
        prob = p + ((((((((((0 + (12 << 4)) + 12) + 12) + 12) + 12) + (12 << 4)) + (4 << 6)) + (1 << (14 >> 1)) - 14) + (1 << 4)) + (((((0 + 1) + 1) + ((1 << 4) << 3)) + ((1 << 4) << 3)) + (1 << 8)));
      }
      {
        int numBits, offset;
        unsigned short *probLen = prob + 0;
        if (Range < ((unsigned int)1 << 24)) {
          {
            if (Buffer == BufferLim)
              return 1;
          };
          Range <<= 8;
          Code = (Code << 8) | (*Buffer++);
        };
        bound = (Range >> 11) * *(probLen);
        if (Code < bound) {
          Range = bound;
          *(probLen) += ((1 << 11) - *(probLen)) >> 5;
          ;
          probLen = prob + ((0 + 1) + 1) + (posState << 3);
          offset = 0;
          numBits = 3;
        } else {
          Range -= bound;
          Code -= bound;
          *(probLen) -= (*(probLen)) >> 5;
          ;
          probLen = prob + (0 + 1);
          if (Range < ((unsigned int)1 << 24)) {
            {
              if (Buffer == BufferLim)
                return 1;
            };
            Range <<= 8;
            Code = (Code << 8) | (*Buffer++);
          };
          bound = (Range >> 11) * *(probLen);
          if (Code < bound) {
            Range = bound;
            *(probLen) += ((1 << 11) - *(probLen)) >> 5;
            ;
            probLen = prob + (((0 + 1) + 1) + ((1 << 4) << 3)) + (posState << 3);
            offset = (1 << 3);
            numBits = 3;
          } else {
            Range -= bound;
            Code -= bound;
            *(probLen) -= (*(probLen)) >> 5;
            ;
            probLen = prob + ((((0 + 1) + 1) + ((1 << 4) << 3)) + ((1 << 4) << 3));
            offset = (1 << 3) + (1 << 3);
            numBits = 8;
          }
        }
        {
          int i = numBits;
          len = 1;
          do {
            unsigned short *p = probLen + len;
            if (Range < ((unsigned int)1 << 24)) {
              {
                if (Buffer == BufferLim)
                  return 1;
              };
              Range <<= 8;
              Code = (Code << 8) | (*Buffer++);
            };
            bound = (Range >> 11) * *(p);
            if (Code < bound) {
              Range = bound;
              *(p) += ((1 << 11) - *(p)) >> 5;
              ;
              len <<= 1;
              ;
              ;
            } else {
              Range -= bound;
              Code -= bound;
              *(p) -= (*(p)) >> 5;
              ;
              len = (len + len) + 1;
              ;
              ;
            }
          } while (--i != 0);
          len -= (1 << numBits);
        };
        len += offset;
      }
      if (state < 4) {
        int posSlot;
        state += 7;
        prob = p + ((((((0 + (12 << 4)) + 12) + 12) + 12) + 12) + (12 << 4)) + ((len < 4 ? len : 4 - 1) << 6);
        {
          int i = 6;
          posSlot = 1;
          do {
            unsigned short *p = prob + posSlot;
            if (Range < ((unsigned int)1 << 24)) {
              {
                if (Buffer == BufferLim)
                  return 1;
              };
              Range <<= 8;
              Code = (Code << 8) | (*Buffer++);
            };
            bound = (Range >> 11) * *(p);
            if (Code < bound) {
              Range = bound;
              *(p) += ((1 << 11) - *(p)) >> 5;
              ;
              posSlot <<= 1;
              ;
              ;
            } else {
              Range -= bound;
              Code -= bound;
              *(p) -= (*(p)) >> 5;
              ;
              posSlot = (posSlot + posSlot) + 1;
              ;
              ;
            }
          } while (--i != 0);
          posSlot -= (1 << 6);
        };
        if (posSlot >= 4) {
          int numDirectBits = ((posSlot >> 1) - 1);
          rep0 = (2 | ((unsigned int)posSlot & 1));
          if (posSlot < 14) {
            rep0 <<= numDirectBits;
            prob = p + (((((((0 + (12 << 4)) + 12) + 12) + 12) + 12) + (12 << 4)) + (4 << 6)) + rep0 - posSlot - 1;
          } else {
            numDirectBits -= 4;
            do {
              if (Range < ((unsigned int)1 << 24)) {
                {
                  if (Buffer == BufferLim)
                    return 1;
                };
                Range <<= 8;
                Code = (Code << 8) | (*Buffer++);
              }
              Range >>= 1;
              rep0 <<= 1;
              if (Code >= Range) {
                Code -= Range;
                rep0 |= 1;
              }
            } while (--numDirectBits != 0);
            prob = p + ((((((((0 + (12 << 4)) + 12) + 12) + 12) + 12) + (12 << 4)) + (4 << 6)) + (1 << (14 >> 1)) - 14);
            rep0 <<= 4;
            numDirectBits = 4;
          }
          {
            int i = 1;
            int mi = 1;
            do {
              unsigned short *prob3 = prob + mi;
              if (Range < ((unsigned int)1 << 24)) {
                {
                  if (Buffer == BufferLim)
                    return 1;
                };
                Range <<= 8;
                Code = (Code << 8) | (*Buffer++);
              };
              bound = (Range >> 11) * *(prob3);
              if (Code < bound) {
                Range = bound;
                *(prob3) += ((1 << 11) - *(prob3)) >> 5;
                ;
                mi <<= 1;
                ;
                ;
              } else {
                Range -= bound;
                Code -= bound;
                *(prob3) -= (*(prob3)) >> 5;
                ;
                mi = (mi + mi) + 1;
                rep0 |= i;
              };
              i <<= 1;
            } while (--numDirectBits != 0);
          }
        } else
          rep0 = posSlot;
        if (++rep0 == (unsigned int)(0)) {
          len = -1;
          break;
        }
      }
      len += 2;
      if (rep0 > nowPos)
        return 1;
      do {
        previousByte = outStream[nowPos - rep0];
        len--;
        outStream[nowPos++] = previousByte;
      } while (len != 0 && nowPos < outSize);
    }
  }
  if (Range < ((unsigned int)1 << 24)) {
    {
      if (Buffer == BufferLim)
        return 1;
    };
    Range <<= 8;
    Code = (Code << 8) | (*Buffer++);
  };
  *outSizeProcessed = nowPos;
  return 0;
}
```