Disassembly: 
  L1: 55 ?? push ebp
   8b ec ?? mov ebp, esp
   51 ?? push ecx
   53 ?? push ebx
   8b 5d 08 ?? mov ebx, dword ss:[ebp + 8]
   56 ?? push esi
   57 ?? push edi
   8b f9 ?? mov edi, ecx
   81 fb ff ff ff 7f ?? cmp ebx, 0x7fffffff
   0f 87 d5 00 00 00 ?? ja basic block L24
  
  L2: 8b 4f 14 ?? mov ecx, dword ds:[edi + 0x14<20>]
   8b f3 ?? mov esi, ebx
   83 ce 0f ?? or esi, 15
   89 4d fc ?? mov dword ss:[ebp + 0xfc<252,-4>], ecx
   81 fe ff ff ff 7f ?? cmp esi, 0x7fffffff
   76 13 ?? jbe basic block L5
  
  L3: b8 00 00 00 80 ?? mov eax, 0x80000000
   be ff ff ff 7f ?? mov esi, 0x7fffffff
   8b c8 ?? mov ecx, eax
   e8 34 04 00 00 ?? call function 0x00402120
  
  L4: eb 4e ?? jmp basic block L15
  
  L5: 8b d1 ?? mov edx, ecx
   b8 ff ff ff 7f ?? mov eax, 0x7fffffff
   d1 ea ?? shr edx, 1
   2b c2 ?? sub eax, edx
   3b c8 ?? cmp ecx, eax
   76 13 ?? jbe basic block L8
  
  L6: b8 00 00 00 80 ?? mov eax, 0x80000000
   be ff ff ff 7f ?? mov esi, 0x7fffffff
   8b c8 ?? mov ecx, eax
   e8 12 04 00 00 ?? call function 0x00402120
  
  L7: eb 2c ?? jmp basic block L15
  
  L8: 8d 04 0a ?? lea eax, ds:[edx + ecx]
   3b f0 ?? cmp esi, eax
   0f 42 f0 ?? cmovb esi, eax
   8d 46 01 ?? lea eax, ds:[esi + 1]
   3d 00 10 00 00 ?? cmp eax, 0x00001000<4096>
   72 09 ?? jb basic block L11
  
  L9: 8b c8 ?? mov ecx, eax
   e8 f7 03 00 00 ?? call function 0x00402120
  
  L10: eb 11 ?? jmp basic block L15
  
  L11: 85 c0 ?? test eax, eax
   74 0b ?? je basic block L14
  
  L12: 50 ?? push eax
   e8 95 04 00 00 ?? call function 0x004021ca
  
  L13: 83 c4 04 ?? add esp, 4
   eb 02 ?? jmp basic block L15
  
  L14: 33 c0 ?? xor eax, eax
  
  L15: 53 ?? push ebx
   68 08 42 40 00 ?? push 0x00404208<"bar">
   50 ?? push eax
   89 45 08 ?? mov dword ss:[ebp + 8], eax
   89 5f 10 ?? mov dword ds:[edi + 0x10<16>], ebx
   89 77 14 ?? mov dword ds:[edi + 0x14<20>], esi
   e8 ce 17 00 00 ?? call function 0x0040351f
  
  L16: 8b 75 08 ?? mov esi, dword ss:[ebp + 8]
   83 c4 0c ?? add esp, 12
   8b 4d fc ?? mov ecx, dword ss:[ebp + 0xfc<252,-4>]
   c6 04 1e 00 ?? mov byte ds:[esi + ebx], 0
   83 f9 10 ?? cmp ecx, 0x10<16>
   72 27 ?? jb basic block L22
  
  L17: 8b 07 ?? mov eax, dword ds:[edi]
   41 ?? inc ecx
   81 f9 00 10 00 00 ?? cmp ecx, 0x00001000<4096>
   72 12 ?? jb basic block L20
  
  L18: 8b 50 fc ?? mov edx, dword ds:[eax + 0xfc<252,-4>]
   83 c1 23 ?? add ecx, 0x23<35>
   2b c2 ?? sub eax, edx
   83 c0 fc ?? add eax, 0xfc<252,-4>
   83 f8 1f ?? cmp eax, 0x1f<31>
   77 19 ?? ja basic block L23
  
  L19: 8b c2 ?? mov eax, edx
  
  L20: 51 ?? push ecx
   50 ?? push eax
   e8 73 04 00 00 ?? call function 0x004021fa
  
  L21: 83 c4 08 ?? add esp, 8
  
  L22: 89 37 ?? mov dword ds:[edi], esi
   8b c7 ?? mov eax, edi
   5f ?? pop edi
   5e ?? pop esi
   5b ?? pop ebx
   8b e5 ?? mov esp, ebp
   5d ?? pop ebp
   c2 0c 00 ?? ret 12
  
  L23: ff 15 fc 40 40 00 ?? call dword ds:[0x004040fc]
  
  L24: e8 3e f5 ff ff ?? call function 0x004012e0
  
  L25: cc ?? int3
  
  L26: cc ?? int3
  
  L27: cc ?? int3
  
  L28: cc ?? int3
  
  L29: cc ?? int3
  
  L30: cc ?? int3
  
  L31: cc ?? int3
  
  L32: cc ?? int3
  
  L33: cc ?? int3
  
  L34: cc ?? int3
  
  L35: cc ?? int3
  
  L36: cc ?? int3
  
  L37: cc ?? int3
  
  L38: cc ?? int3
  
  