Disassembly: 
  L1: 55 ?? push ebp
   8b ec ?? mov ebp, esp
   51 ?? push ecx
   53 ?? push ebx
   56 ?? push esi
   8b f1 ?? mov esi, ecx
   57 ?? push edi
   8b 7d 0c ?? mov edi, dword ss:[ebp + 12]
   8b 4e 14 ?? mov ecx, dword ds:[esi + 0x14<20>]
   89 4d fc ?? mov dword ss:[ebp + 0xfc<252,-4>], ecx
   3b f9 ?? cmp edi, ecx
   77 2a ?? ja basic block L6
  
  L2: 8b de ?? mov ebx, esi
   83 f9 10 ?? cmp ecx, 0x10<16>
   72 02 ?? jb basic block L4
  
  L3: 8b 1e ?? mov ebx, dword ds:[esi]
  
  L4: 57 ?? push edi
   68 f0 41 40 00 ?? push 0x004041f0<"bar">
   53 ?? push ebx
   89 7e 10 ?? mov dword ds:[esi + 0x10<16>], edi
   e8 64 1b 00 00 ?? call function 0x004033d2
  
  L5: 83 c4 0c ?? add esp, 12
   c6 04 3b 00 ?? mov byte ds:[ebx + edi], 0
   8b c6 ?? mov eax, esi
   5f ?? pop edi
   5e ?? pop esi
   5b ?? pop ebx
   8b e5 ?? mov esp, ebp
   5d ?? pop ebp
   c2 08 00 ?? ret 8
  
  L6: 81 ff ff ff ff 7f ?? cmp edi, 0x7fffffff
   0f 87 d6 00 00 00 ?? ja basic block L29
  
  L7: 8b df ?? mov ebx, edi
   83 cb 0f ?? or ebx, 15
   81 fb ff ff ff 7f ?? cmp ebx, 0x7fffffff
   76 07 ?? jbe basic block L9
  
  L8: bb ff ff ff 7f ?? mov ebx, 0x7fffffff
   eb 1e ?? jmp basic block L12
  
  L9: 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 07 ?? jbe basic block L11
  
  L10: bb ff ff ff 7f ?? mov ebx, 0x7fffffff
   eb 08 ?? jmp basic block L12
  
  L11: 8d 04 0a ?? lea eax, ds:[edx + ecx]
   3b d8 ?? cmp ebx, eax
   0f 42 d8 ?? cmovb ebx, eax
  
  L12: 8d 4b 01 ?? lea ecx, ds:[ebx + 1]
   81 f9 00 10 00 00 ?? cmp ecx, 0x00001000<4096>
   72 25 ?? jb basic block L16
  
  L13: 8d 41 23 ?? lea eax, ds:[ecx + 0x23<35>]
   83 ca ff ?? or edx, 0xff<255,-1>
   3b c1 ?? cmp eax, ecx
   0f 46 c2 ?? cmovbe eax, edx
   50 ?? push eax
   e8 f3 07 00 00 ?? call function 0x004020cd
  
  L14: 8b c8 ?? mov ecx, eax
   83 c4 04 ?? add esp, 4
   85 c9 ?? test ecx, ecx
   74 79 ?? je basic block L28
  
  L15: 8d 41 23 ?? lea eax, ds:[ecx + 0x23<35>]
   83 e0 e0 ?? and eax, 0xe0<224,-32>
   89 48 fc ?? mov dword ds:[eax + 0xfc<252,-4>], ecx
   eb 11 ?? jmp basic block L20
  
  L16: 85 c9 ?? test ecx, ecx
   74 0b ?? je basic block L19
  
  L17: 51 ?? push ecx
   e8 d5 07 00 00 ?? call function 0x004020cd
  
  L18: 83 c4 04 ?? add esp, 4
   eb 02 ?? jmp basic block L20
  
  L19: 33 c0 ?? xor eax, eax
  
  L20: 57 ?? push edi
   68 f0 41 40 00 ?? push 0x004041f0<"bar">
   50 ?? push eax
   89 45 0c ?? mov dword ss:[ebp + 12], eax
   89 7e 10 ?? mov dword ds:[esi + 0x10<16>], edi
   89 5e 14 ?? mov dword ds:[esi + 0x14<20>], ebx
   e8 b8 1a 00 00 ?? call function 0x004033cc
  
  L21: 8b 5d 0c ?? mov ebx, dword ss:[ebp + 12]
   83 c4 0c ?? add esp, 12
   8b 45 fc ?? mov eax, dword ss:[ebp + 0xfc<252,-4>]
   c6 04 3b 00 ?? mov byte ds:[ebx + edi], 0
   83 f8 10 ?? cmp eax, 0x10<16>
   72 29 ?? jb basic block L27
  
  L22: 8d 48 01 ?? lea ecx, ds:[eax + 1]
   8b 06 ?? mov eax, dword ds:[esi]
   81 f9 00 10 00 00 ?? cmp ecx, 0x00001000<4096>
   72 12 ?? jb basic block L25
  
  L23: 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 L28
  
  L24: 8b c2 ?? mov eax, edx
  
  L25: 51 ?? push ecx
   50 ?? push eax
   e8 b1 07 00 00 ?? call function 0x004020fd
  
  L26: 83 c4 08 ?? add esp, 8
  
  L27: 5f ?? pop edi
   89 1e ?? mov dword ds:[esi], ebx
   8b c6 ?? mov eax, esi
   5e ?? pop esi
   5b ?? pop ebx
   8b e5 ?? mov esp, ebp
   5d ?? pop ebp
   c2 08 00 ?? ret 8
  
  L28: ff 15 f4 40 40 00 ?? call dword ds:[0x004040f4]
  
  L29: e8 09 04 00 00 ?? call function 0x00401d70
  
  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
  
  