Package: ethereum-dasm
ethereum-dasmethereum evm bytecode disassembler with static- and dynamic-analysis and function signature lookup[https://github.com/ethereum/] [https://www.ethereum.org/]disassembles evm bytecodedecompile a contract to pseudocodeinstall#> python3 -m pip install -r requirements*.txt
#> python3 -m pip install ethereum-dasm[mythril,abidecoder]
#> python3 -m ethereum-dasm  # verify installation#> python3 -m ethereum_dasm -a 0x44919b8026f38d70437a8eb3be47b06ab1c3e4bf  # jusst to verify installationusageUsage: ethereum_dasm.py [options]

       example: ethereum_dasm.py [-L -F -v] <file_or_bytecode>
                ethereum_dasm.py [-L -F -v] # read from stdin
                ethereum_dasm.py [-L -F -a <address>] # fetch contract code from infura.io


Options:
  -h, --help            show this help message and exit
  -v VERBOSITY, --verbosity=VERBOSITY
                        available loglevels:
                        critical,fatal,error,warning,warn,info,debug,notset
                        [default: critical]
  -L, --listing         disables table mode, outputs assembly only
  -F, --no-online-lookup
                        disable online function signature lookup
  -a ADDRESS, --address=ADDRESS
                        fetch contract bytecode from address
  -C, --no-color        disable color mode (requires pip install colorama)
  -A, --guess-abi       guess the ABI for that contract
  -D, --no-dynamic-analysis
                        disable dynamic analysis / symolic execution
  -S, --no-static-analysis
                        disable static analysis
  -s, --simplify        simplify disassembly to human readable code
  -x, --simplify-show-asm
                        simplify: show or hide asm annotations in simplified
                        code
  -y, --simplify-show-unreachable
                        simplify: show or hide annotations for unreachable
                        instructions in simplified code
  -n NETWORK, --network=NETWORK
                        network for address lookup (default: mainnet, ropsten,
                        rinkeby, kovan#> echo "0x12345678" | python3 -m ethereum_dasm
#> python3 -m ethereum_dasm 0x12345678
#> python3 -m ethereum_dasm ether_contract.evm
#> python3 -m ethereum_dasm -a <contract address>
#> python3 -m ethereum_dasm -a <contract address>  -A
#> python3 -m ethereum_dasm -a <contract address>  --simplify [--simplify-show-asm, --simplify-show-unreachable]featuresdisassemble evm bytecodedecompile evm bytecode to pseudocodeprovide the path to the ethereum vm bytecode or the bytecode as an argument to evmdasm. Tries to read from stdin by default.returns !=0 on errorsvarious output modes (-Lto switch from table to listing mode)color-modeinvalid opcodes are prefixed withUNKNOWN_gas consumption for instructionreturn value and arguments for instructionbasic jump/xref analysisbasicblockingonline function signature and method name lookup, operand annotationspayable modifier detectiondynamic analysis based on symbolic execution (depends on mythril)ABI.json download (from etherchain.org)ABI.json reconstruction from static analysis of the evm bytecodemain interfaceContract().examplesabi online lookup or reconstruction#>python3 -m ethereum_dasm -a 0x44919b8026f38d70437a8eb3be47b06ab1c3e4bf  -A# [....][{'stateMutability':'nonpayable','constant':False,'type':'function','name':'enter','signature':'0x124c32a1','outputs':[{'type':'bool','name':''}],'inputs':[{'type':'bytes32','name':'_passcode'},{'type':'bytes8','name':'_gateKey'}],'payable':False},{'stateMutability':'pure','constant':True,'type':'function','name':'maxEntrants','signature':'0x60643652','outputs':[{'type':'uint8','name': ''}], 'inputs': [], 'payable': False}, {'stateMutability': 'view', 'constant': True, 'type': 'function', 'name': 'totalEntrants', 'signature': '0x694463a2', 'outputs': [{'type': 'uint8', 'name': ''}], 'inputs': [], 'payable': False}, {'stateMutability': 'nonpayable', 'constant': False, 'type': 'function', 'name': 'assignAll', 'signature': '0x90ae631d', 'outputs': [{'type': 'bool', 'name': ''}], 'inputs': [], 'payable': False}, {'inputs': [], 'stateMutability': 'nonpayable', 'payable': False, 'type': 'constructor'}]abi reconstruction from dasm if abi is not available#> python3 -m ethereum_dasm -a 0x8f8bed23a644f3bbb4e227e28704c050e67c35be -A[{'signature': '0x95d89b41', 'outputs': [], 'stateMutability': None, 'name': 'symbol', 'constant': None, 'inputs': [], 'payable': True, 'type': 'function', 'address': 598}, {'signature': '0x095ea7b3', 'outputs':
 [], 'stateMutability': None, 'name': 'approve', 'constant': None, 'inputs': ['bytes32', '<bytes??>'], 'payable': True, 'type': 'function', 'address': 328}, {'signature': '0x313ce567', 'outputs': [], 'stateMutab
ility': None, 'name': 'decimals', 'constant': None, 'inputs': [], 'payable': True, 'type': 'function', 'address': 486}, {'signature': '0xdd62ed3e', 'outputs': [], 'stateMutability': None, 'name': 'allowance', 'c
onstant': None, 'inputs': ['bytes32', '<bytes??>'], 'payable': True, 'type': 'function', 'address': 691}, {'signature': '0x66188463', 'outputs': [], 'stateMutability': None, 'name': 'decreaseApproval', 'constant
': None, 'inputs': ['bytes32', '<bytes??>'], 'payable': True, 'type': 'function', 'address': 529}, {'signature': '0x23b872dd', 'outputs': [], 'stateMutability': None, 'name': 'transferFrom', 'constant': None, 'i
nputs': ['bytes32', 'bytes32', '<bytes??>'], 'payable': True, 'type': 'function', 'address': 423}, {'signature': '0x2ff2e9dc', 'outputs': [], 'stateMutability': None, 'name': 'INITIAL_SUPPLY', 'constant': None,
'inputs': [], 'payable': True, 'type': 'function', 'address': 465}, {'signature': '0x06fdde03', 'outputs': [], 'stateMutability': None, 'name': 'name', 'constant': None, 'inputs': [], 'payable': True, 'type': 'f
unction', 'address': 190}, {'signature': '0x18160ddd', 'outputs': [], 'stateMutability': None, 'name': 'totalSupply', 'constant': None, 'inputs': [], 'payable': True, 'type': 'function', 'address': 384}, {'signa
ture': '0x70a08231', 'outputs': [], 'stateMutability': None, 'name': 'balanceOf', 'constant': None, 'inputs': ['<bytes??>'], 'payable': True, 'type': 'function', 'address': 565}, {'signature': '0xa9059cbb', 'out
puts': [], 'stateMutability': None, 'name': 'transfer', 'constant': None, 'inputs': [{'type': 'address', 'name': 'arg0'}, {'type': 'uint256', 'name': 'arg1'}], 'payable': True, 'type': 'function', 'address': 619
}, {'signature': '0xd73dd623', 'outputs': [], 'stateMutability': None, 'name': 'increaseApproval', 'constant': None, 'inputs': ['bytes32', '<bytes??>'], 'payable': True, 'type': 'function', 'address': 655}]detailed listingpython3 -m ethereum_dasm -a 0x44919b8026f38d70437a8eb3be47b06ab1c3e4bf  -A --no-colorInstaddrhexgas|mnemonicoperandxrefsdescriptionretvalargs------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:loc_0x00[00x0000]3|PUSH10x60# Place 1 byte item on stack.                                         item1[20x0002]3|PUSH10x40# Place 1 byte item on stack.                                         item2[40x0004]3|MSTORE# Save word to memory.                                                                 value, offset3[50x0005]3|PUSH10x04# Place 1 byte item on stack.                                         item4[70x0007]2|CALLDATASIZE# Get size of input data in current environment.                      msg.data.length5[80x0008]3|LT# Lesser-than comparison                                              flag             a, b6[90x0009]3|PUSH20x0048# Place 2-byte item on stack.                                         item7[120x000c]10|JUMPI@0x48# Conditionally alter the program counter.                                             evm.pc, condition8[130x000d]3|PUSH40xffffffff# Place 4-byte item on stack.                                         item9[180x0012]3|PUSH10xe0# Place 1 byte item on stack.                                         item10[200x0014]3|PUSH10x02# Place 1 byte item on stack.                                         item11[220x0016]10|EXP# Exponential operation.                                              result           base, exponent12[230x0017]3|PUSH10x00# Place 1 byte item on stack.                                         item13[250x0019]3|CALLDATALOAD# Get input data of current environment.                              msg.data         unknown14[260x001a]5|DIV# Integer division operation.                                         result           a, b15[270x001b]3|AND# Bitwise AND operation.                                              result           a, b16[280x001c]3|PUSH40x124c32a1-->'function enter(bytes32,bytes8)'# Place 4-byte item on stack.                                         item17[330x0021]3|DUP2# Duplicate 2nd stack item.18[340x0022]3|EQ# Equality  comparison                                                flag             a, b19[350x0023]3|PUSH20x004d# Place 2-byte item on stack.                                         item20[380x0026]10|JUMPI@0x4d# Conditionally alter the program counter.                                             evm.pc, condition21[390x0027]3|DUP1# Duplicate 1st stack item.22[400x0028]3|PUSH40x60643652-->'function maxEntrants()'# Place 4-byte item on stack.                                         item23[450x002d]3|EQ# Equality  comparison                                                flag             a, b24[460x002e]3|PUSH20x0095# Place 2-byte item on stack.                                         item25[490x0031]10|JUMPI@0x95# Conditionally alter the program counter.                                             evm.pc, condition26[500x0032]3|DUP1# Duplicate 1st stack item.27[510x0033]3|PUSH40x694463a2-->'function totalEntrants()'# Place 4-byte item on stack.                                         item28[560x0038]3|EQ# Equality  comparison                                                flag             a, b29[570x0039]3|PUSH20x00be# Place 2-byte item on stack.                                         item30[600x003c]10|JUMPI@0xbe# Conditionally alter the program counter.                                             evm.pc, condition31[610x003d]3|DUP1# Duplicate 1st stack item.32[620x003e]3|PUSH40x90ae631d-->'function assignAll()'# Place 4-byte item on stack.                                         item33[670x0043]3|EQ# Equality  comparison                                                flag             a, b34[680x0044]3|PUSH20x00d1# Place 2-byte item on stack.                                         item35[710x0047]10|JUMPI@0xd1# Conditionally alter the program counter.                                             evm.pc, condition:loc_0x4836[720x0048]1|JUMPDESTJUMPI@0xc# Mark a valid destination for jumps.37[730x0049]3|PUSH10x00# Place 1 byte item on stack.                                         item38[750x004b]3|DUP1# Duplicate 1st stack item.39[760x004c]0|REVERT# throw an error                                                                       offset, size:loc_0x4d/*******************************************************************functionenter(bytes32,bytes8)payable:Falseinputs:(2)['bytes32','<bytes??>']potentialsignatures:['enter(bytes32,bytes8)']*******************************************************************/40[770x004d]1|JUMPDESTJUMPI@0x26# Mark a valid destination for jumps.41[780x004e]2|CALLVALUE# Get deposited value by the instruction/transaction responsible for  msg.valuethisexecution.42[790x004f]3|ISZERO# Simple not operator                                                 flag             a43[800x0050]3|PUSH20x0058# Place 2-byte item on stack.                                         item44[830x0053]10|JUMPI@0x58# Conditionally alter the program counter.                                             evm.pc, condition45[840x0054]3|PUSH10x00# Place 1 byte item on stack.                                         item46[860x0056]3|DUP1# Duplicate 1st stack item.47[870x0057]0|REVERT# throw an error                                                                       offset, size:loc_0x5848[880x0058]1|JUMPDESTJUMPI@0x53# Mark a valid destination for jumps.49[890x0059]3|PUSH20x0081# Place 2-byte item on stack.                                         item50[920x005c]3|PUSH10x04# Place 1 byte item on stack.                                         item51[940x005e]3|CALLDATALOAD# Get input data of current environment.                              msg.data         unknown52[950x005f]3|PUSH240xffffffffffffffffffffffffffffffffffffffffffffffff# Place 24-byte item on stack.                                        item53[1200x0078]3|NOT# Bitwise NOT operation.                                              result           a, b54[1210x0079]3|PUSH10x24# Place 1 byte item on stack.                                         item55[1230x007b]3|CALLDATALOAD# Get input data of current environment.                              msg.data         unknown56[1240x007c]3|AND# Bitwise AND operation.                                              result           a, b57[1250x007d]3|PUSH20x00e4# Place 2-byte item on stack.                                         item58[1280x0080]8|JUMP@0xe4# Alter the program counter.                                                           evm.pc:loc_0x8159[1290x0081]1|JUMPDEST# Mark a valid destination for jumps.60[1300x0082]3|PUSH10x40# Place 1 byte item on stack.                                         item61[1320x0084]3|MLOAD# Load word from memory.                                                               offset62[1330x0085]3|SWAP1# Exchange 1st and 2nd stack items.63[1340x0086]3|ISZERO# Simple not operator                                                 flag             a64[1350x0087]3|ISZERO# Simple not operator                                                 flag             a65[1360x0088]3|DUP2# Duplicate 2nd stack item.66[1370x0089]3|MSTORE# Save word to memory.                                                                 value, offset67[1380x008a]3|PUSH10x20# Place 1 byte item on stack.                                         item68[1400x008c]3|ADD# Addition operation.                                                 result           a, b69[1410x008d]3|PUSH10x40# Place 1 byte item on stack.                                         item70[1430x008f]3|MLOAD# Load word from memory.                                                               offset71[1440x0090]3|DUP1# Duplicate 1st stack item.72[1450x0091]3|SWAP2# Exchange 1st and 3rd stack items.73[1460x0092]3|SUB# Subtraction operation.                                              result           a, b74[1470x0093]3|SWAP1# Exchange 1st and 2nd stack items.75[1480x0094]0|RETURN# Halt execution returning output data.                                                offset, size:loc_0x95/*******************************************************************functionmaxEntrants()payable:Falseinputs:(0)[]potentialsignatures:['maxEntrants()']*******************************************************************/76[1490x0095]1|JUMPDESTJUMPI@0x31# Mark a valid destination for jumps.77[1500x0096]2|CALLVALUE# Get deposited value by the instruction/transaction responsible for  msg.valuethisexecution.78[1510x0097]3|ISZERO# Simple not operator                                                 flag             a79[1520x0098]3|PUSH20x00a0# Place 2-byte item on stack.                                         item80[1550x009b]10|JUMPI@0xa0# Conditionally alter the program counter.                                             evm.pc, condition81[1560x009c]3|PUSH10x00# Place 1 byte item on stack.                                         item82[1580x009e]3|DUP1# Duplicate 1st stack item.83[1590x009f]0|REVERT# throw an error                                                                       offset, size:loc_0xa084[1600x00a0]1|JUMPDESTJUMPI@0x9b# Mark a valid destination for jumps.85[1610x00a1]3|PUSH20x00a8# Place 2-byte item on stack.                                         item86[1640x00a4]3|PUSH20x0314# Place 2-byte item on stack.                                         item87[1670x00a7]8|JUMP@0x314# Alter the program counter.                                                           evm.pc:loc_0xa888[1680x00a8]1|JUMPDEST# Mark a valid destination for jumps.89[1690x00a9]3|PUSH10x40# Place 1 byte item on stack.                                         item90[1710x00ab]3|MLOAD# Load word from memory.                                                               offset91[1720x00ac]3|PUSH10xff# Place 1 byte item on stack.                                         item92[1740x00ae]3|SWAP1# Exchange 1st and 2nd stack items.93[1750x00af]3|SWAP2# Exchange 1st and 3rd stack items.94[1760x00b0]3|AND# Bitwise AND operation.                                              result           a, b95[1770x00b1]3|DUP2# Duplicate 2nd stack item.96[1780x00b2]3|MSTORE# Save word to memory.                                                                 value, offset97[1790x00b3]3|PUSH10x20# Place 1 byte item on stack.                                         item98[1810x00b5]3|ADD# Addition operation.                                                 result           a, b99[1820x00b6]3|PUSH10x40# Place 1 byte item on stack.                                         item100[1840x00b8]3|MLOAD# Load word from memory.                                                               offset101[1850x00b9]3|DUP1# Duplicate 1st stack item.102[1860x00ba]3|SWAP2# Exchange 1st and 3rd stack items.103[1870x00bb]3|SUB# Subtraction operation.                                              result           a, b104[1880x00bc]3|SWAP1# Exchange 1st and 2nd stack items.105[1890x00bd]0|RETURN# Halt execution returning output data.                                                offset, size:loc_0xbe/*******************************************************************functiontotalEntrants()payable:Falseinputs:(0)[]potentialsignatures:['totalEntrants()']*******************************************************************/106[1900x00be]1|JUMPDESTJUMPI@0x3c# Mark a valid destination for jumps.107[1910x00bf]2|CALLVALUE# Get deposited value by the instruction/transaction responsible for  msg.valuethisexecution.108[1920x00c0]3|ISZERO# Simple not operator                                                 flag             a109[1930x00c1]3|PUSH20x00c9# Place 2-byte item on stack.                                         item110[1960x00c4]10|JUMPI@0xc9# Conditionally alter the program counter.                                             evm.pc, condition111[1970x00c5]3|PUSH10x00# Place 1 byte item on stack.                                         item112[1990x00c7]3|DUP1# Duplicate 1st stack item.113[2000x00c8]0|REVERT# throw an error                                                                       offset, size:loc_0xc9114[2010x00c9]1|JUMPDESTJUMPI@0xc4# Mark a valid destination for jumps.115[2020x00ca]3|PUSH20x00a8# Place 2-byte item on stack.                                         item116[2050x00cd]3|PUSH20x031a# Place 2-byte item on stack.                                         item117[2080x00d0]8|JUMP@0x31a# Alter the program counter.                                                           evm.pc:loc_0xd1/*******************************************************************functionassignAll()payable:Falseinputs:(0)[]potentialsignatures:['assignAll()']*******************************************************************/118[2090x00d1]1|JUMPDESTJUMPI@0x47# Mark a valid destination for jumps.119[2100x00d2]2|CALLVALUE# Get deposited value by the instruction/transaction responsible for  msg.valuethisexecution.120[2110x00d3]3|ISZERO# Simple not operator                                                 flag             a121[2120x00d4]3|PUSH20x00dc# Place 2-byte item on stack.                                         item122[2150x00d7]10|JUMPI@0xdc# Conditionally alter the program counter.                                             evm.pc, condition123[2160x00d8]3|PUSH10x00# Place 1 byte item on stack.                                         item124[2180x00da]3|DUP1# Duplicate 1st stack item.125[2190x00db]0|REVERT# throw an error                                                                       offset, size:loc_0xdc126[2200x00dc]1|JUMPDESTJUMPI@0xd7# Mark a valid destination for jumps.127[2210x00dd]3|PUSH20x0081# Place 2-byte item on stack.                                         item128[2240x00e0]3|PUSH20x0320# Place 2-byte item on stack.                                         item129[2270x00e3]8|JUMP@0x320# Alter the program counter.                                                           evm.pc:loc_0xe4130[2280x00e4]1|JUMPDESTJUMP@0x80# Mark a valid destination for jumps.131[2290x00e5]3|PUSH10x00# Place 1 byte item on stack.                                         item132[2310x00e7]2|ORIGIN# Get execution origination address.                                  tx.origin133[2320x00e8]3|PUSH10x01# Place 1 byte item on stack.                                         item134[2340x00ea]3|PUSH10xa0# Place 1 byte item on stack.                                         item135[2360x00ec]3|PUSH10x02# Place 1 byte item on stack.                                         item136[2380x00ee]10|EXP# Exponential operation.                                              result           base, exponent137[2390x00ef]3|SUB# Subtraction operation.                                              result           a, b138[2400x00f0]3|AND# Bitwise AND operation.                                              result           a, b139[2410x00f1]2|CALLER# Get caller address.This is the address of the account that is       msg.senderdirectlyresponsibleforthisexecution.140[2420x00f2]3|PUSH10x01# Place 1 byte item on stack.                                         item141[2440x00f4]3|PUSH10xa0# Place 1 byte item on stack.                                         item142[2460x00f6]3|PUSH10x02# Place 1 byte item on stack.                                         item143[2480x00f8]10|EXP# Exponential operation.                                              result           base, exponent144[2490x00f9]3|SUB# Subtraction operation.                                              result           a, b145[2500x00fa]3|AND# Bitwise AND operation.                                              result           a, b146[2510x00fb]3|EQ# Equality  comparison                                                flag             a, b147[2520x00fc]3|ISZERO# Simple not operator                                                 flag             a148[2530x00fd]3|ISZERO# Simple not operator                                                 flag             a149[2540x00fe]3|ISZERO# Simple not operator                                                 flag             a150[2550x00ff]3|PUSH20x0107# Place 2-byte item on stack.                                         item151[2580x0102]10|JUMPI@0x107# Conditionally alter the program counter.                                             evm.pc, condition152[2590x0103]3|PUSH10x00# Place 1 byte item on stack.                                         item153[2610x0105]3|DUP1# Duplicate 1st stack item.154[2620x0106]0|REVERT# throw an error                                                                       offset, size[...]:loc_0x5d5954[14930x05d5]1|JUMPDESTJUMPI@0x5c9# Mark a valid destination for jumps.955[14940x05d6]2|POP# Remove item from stack.                                                              #dummy956[14950x05d7]3|SWAP1# Exchange 1st and 2nd stack items.957[14960x05d8]8|JUMP# Alter the program counter.                                                           evm.pc958[14970x05d9]0|STOP# Halts execution.959[14980x05da]750|LOG10x65# Append log record with one topic.                                                    start, size, topic1960[15000x05dc]3|PUSH30x7a7a72# Place 3-byte item on stack.                                         item961[15040x05e0]2|ADDRESS# Get address of currently executing account.                         this.address962[15050x05e1]2|PC# Get the value of the program counter prior to the increment.        evm.pc963[15060x05e2]30|SHA3# Compute Keccak-256 hash.                                            flag             offset, size964[15070x05e3]-1|UNKNOWN_0xf# Invalid opcode965[15080x05e4]3|SWAP4# Exchange 1st and 5th stack items.966[15090x05e5]3|SWAP14# Exchange 1st and 15th stack items.967[15100x05e6]2|CALLDATASIZE# Get size of input data in current environment.                      msg.data.length968[15110x05e7]-1|UNKNOWN_0xe1# Invalid opcode969[15120x05e8]-1|UNKNOWN_0xcb# Invalid opcode970[15130x05e9]3|PUSH220xc68ec825da862dc7082ea12aea89eb3783b2e0423cd2# Place 22-byte item on stack.                                        item971[15360x0600]30|SHA3# Compute Keccak-256 hash.                                            flag             offset, size972[15370x0601]-1|UNKNOWN_0x28# Invalid opcode973[15380x0602]3|PUSH160x0029# Place 16-byte item on stack.                                        item==============================reconstructedABI:[{'name':'enter','stateMutability':'nonpayable','signature':'0x124c32a1','payable':False,'inputs':[{'name':'_passcode','type':'bytes32'},{'name':'_gateKey','type':'bytes8'}],'constant':False,'type':'function','outputs':[{'name':'','type':'bool'}]},{'name':'maxEntrants','stateMutability':'pure','signature':'0x60643652','payable':False,'inputs':[],'constant':True,'type':'function','outputs':[{'name':'','type':'uint8'}]},{'name':'totalEntrants','stateMutability':'view','signature':'0x694463a2','payable':False,'inputs':[],'constant':True,'type':'function','outputs':[{'name':'','type':'uint8'}]},{'name':'assignAll','stateMutability':'nonpayable','signature':'0x90ae631d','payable':False,'inputs':[],'constant':False,'type':'function','outputs':[{'name':'','type':'bool'}]},{'stateMutability':'nonpayable','type':'constructor','payable':False,'inputs':[]}]decompile to pseudocodepython3 -m ethereum_dasm -a 0x44919b8026f38d70437a8eb3be47b06ab1c3e4bf --simplify #[--simplify-show-asm, --simplify-show-unreachable]

======================[simplified]

:init
        memory[0x40] = 0x60
        if (Not(ULE(0x4, 1_calldatasize))) goto LOC_0x48
        if (And(If(1_calldatasize <= 0x3, 0x0, 1_calldata[0x3]) == 0xa1,
                If(1_calldatasize <= 0x2, 0x0, 1_calldata[0x2]) == 0x32,
                If(1_calldatasize <= 0x1, 0x0, 1_calldata[0x1]) == 0x4c,
                If(1_calldatasize <= 0x0, 0x0, 1_calldata[0x0]) == 0x12)) goto function_enter (LOC_0x4d)
        if (And(If(1_calldatasize <= 0x3, 0x0, 1_calldata[0x3]) == 0x52,
                If(1_calldatasize <= 0x2, 0x0, 1_calldata[0x2]) == 0x36,
                If(1_calldatasize <= 0x1, 0x0, 1_calldata[0x1]) == 0x64,
                If(1_calldatasize <= 0x0, 0x0, 1_calldata[0x0]) == 0x60)) goto function_maxEntrants (LOC_0x95)
        if (And(If(1_calldatasize <= 0x3, 0x0, 1_calldata[0x3]) == 0xa2,
                If(1_calldatasize <= 0x2, 0x0, 1_calldata[0x2]) == 0x63,
                If(1_calldatasize <= 0x1, 0x0, 1_calldata[0x1]) == 0x44,
                If(1_calldatasize <= 0x0, 0x0, 1_calldata[0x0]) == 0x69)) goto function_totalEntrants (LOC_0xbe)
        if (And(If(1_calldatasize <= 0x3, 0x0, 1_calldata[0x3]) == 0x1d,
                If(1_calldatasize <= 0x2, 0x0, 1_calldata[0x2]) == 0x63,
                If(1_calldatasize <= 0x1, 0x0, 1_calldata[0x1]) == 0xae,
                If(1_calldatasize <= 0x0, 0x0, 1_calldata[0x0]) == 0x90)) goto function_assignAll (LOC_0xd1)

:LOC_0x48 
        REVERT(offset=0x0, size=0x0)
        /******* <<terminates execution>> *******/

:function_enter (LOC_0x4d) 
  /*******************************************************************
    function enter(bytes32,bytes8)
    payable: False
    inputs: (2) ['bytes32', '<bytes??>']
    potential signatures: ['enter(bytes32,bytes8)']
  *******************************************************************/

        if (call_value1 == 0x0) goto LOC_0x58
        REVERT(offset=0x0, size=0x0)
        /******* <<terminates execution>> *******/

:LOC_0x58 
        goto LOC_0xe4

:LOC_0x81 

:function_maxEntrants (LOC_0x95) 
  /*******************************************************************
    function maxEntrants()
    payable: False
    inputs: (0) []
    potential signatures: ['maxEntrants()']
  *******************************************************************/

        if (call_value1 == 0x0) goto LOC_0xa0
        REVERT(offset=0x0, size=0x0)
        /******* <<terminates execution>> *******/

:LOC_0xa0 
        goto LOC_0x314

:LOC_0xa8 
        memory[0x60] = 0xfa
        RETURN(offset=0x60, size=0x20)
        /******* <<terminates execution>> *******/

:function_totalEntrants (LOC_0xbe) 
  /*******************************************************************
    function totalEntrants()
    payable: False
    inputs: (0) []
    potential signatures: ['totalEntrants()']
  *******************************************************************/

        if (call_value1 == 0x0) goto LOC_0xc9
        REVERT(offset=0x0, size=0x0)
        /******* <<terminates execution>> *******/

:LOC_0xc9 
        goto LOC_0x31a

:function_assignAll (LOC_0xd1) 
  /*******************************************************************
    function assignAll()
    payable: False
    inputs: (0) []
    potential signatures: ['assignAll()']
  *******************************************************************/

        if (call_value1 == 0x0) goto LOC_0xdc
        REVERT(offset=0x0, size=0x0)
        /******* <<terminates execution>> *******/

:LOC_0xdc 
        goto LOC_0x320

:LOC_0xe4 
        if (Not(Extract(159, 0, origin1) ==
                0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef)) goto LOC_0x107
        REVERT(offset=0x0, size=0x0)
        /******* <<terminates execution>> *******/

:LOC_0x107 
        if (True) goto LOC_0x114

:LOC_0x114 
        if (bvurem_i(1_gas, 0x1fff) == 0x0) goto LOC_0x11f
        REVERT(offset=0x0, size=0x0)
        /******* <<terminates execution>> *******/

:LOC_0x11f 
        if (And(If(1_calldatasize <= 0x29, 0x0, 1_calldata[0x29]) == 0x0,
                If(1_calldatasize <= 0x28, 0x0, 1_calldata[0x28]) == 0x0)) goto LOC_0x154
        REVERT(offset=0x0, size=0x0)
        /******* <<terminates execution>> *******/

:LOC_0x154 
        if (Not(And(If(1_calldatasize <= 0x27, 0x0, 1_calldata[0x27]) ==
                    0x0,
                    If(1_calldatasize <= 0x26, 0x0, 1_calldata[0x26]) ==
                    0x0,
                    If(1_calldatasize <= 0x25, 0x0, 1_calldata[0x25]) ==
                    0x0,
                    If(1_calldatasize <= 0x24, 0x0, 1_calldata[0x24]) ==
                    0x0))) goto LOC_0x18f
        REVERT(offset=0x0, size=0x0)
        /******* <<terminates execution>> *******/

:LOC_0x18f 
        if (And(Extract(7, 0, origin1) ==
                If(1_calldatasize <= 0x2b, 0x0, 1_calldata[0x2b]),
                Extract(15, 8, origin1) ==
                If(1_calldatasize <= 0x2a, 0x0, 1_calldata[0x2a]),
                If(1_calldatasize <= 0x29, 0x0, 1_calldata[0x29]) == 0x0,
                If(1_calldatasize <= 0x28, 0x0, 1_calldata[0x28]) == 0x0)) goto LOC_0x1c0
        REVERT(offset=0x0, size=0x0)
        /******* <<terminates execution>> *******/

:LOC_0x1c0 
        if (True) goto LOC_0x1d1

:LOC_0x1d1 
        memory[0x0] = 0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef
        memory[0x20] = 0x3
        if (True) goto LOC_0x1f7

:LOC_0x1f7 
        memory[0x0] = Concat(0x0, Extract(159, 0, origin1))
        memory[0x20] = 0x3
        if (True) goto LOC_0x21d

:LOC_0x21d 
        memory[0x60] = Concat(If(1_calldatasize <= 0x4, 0x0, 1_calldata[0x4]),
                   If(1_calldatasize <= 0x5, 0x0, 1_calldata[0x5]),
                   If(1_calldatasize <= 0x6, 0x0, 1_calldata[0x6]),
                   If(1_calldatasize <= 0x7, 0x0, 1_calldata[0x7]),
                   If(1_calldatasize <= 0x8, 0x0, 1_calldata[0x8]),
                   If(1_calldatasize <= 0x9, 0x0, 1_calldata[0x9]),
                   If(1_calldatasize <= 0xa, 0x0, 1_calldata[0xa]),
                   If(1_calldatasize <= 0xb, 0x0, 1_calldata[0xb]),
                   If(1_calldatasize <= 0xc, 0x0, 1_calldata[0xc]),
                   If(1_calldatasize <= 0xd, 0x0, 1_calldata[0xd]),
                   If(1_calldatasize <= 0xe, 0x0, 1_calldata[0xe]),
                   If(1_calldatasize <= 0xf, 0x0, 1_calldata[0xf]),
                   If(1_calldatasize <= 0x10, 0x0, 1_calldata[0x10]),
                   If(1_calldatasize <= 0x11, 0x0, 1_calldata[0x11]),
                   If(1_calldatasize <= 0x12, 0x0, 1_calldata[0x12]),
                   If(1_calldatasize <= 0x13, 0x0, 1_calldata[0x13]),
                   If(1_calldatasize <= 0x14, 0x0, 1_calldata[0x14]),
                   If(1_calldatasize <= 0x15, 0x0, 1_calldata[0x15]),
                   If(1_calldatasize <= 0x16, 0x0, 1_calldata[0x16]),
                   If(1_calldatasize <= 0x17, 0x0, 1_calldata[0x17]),
                   If(1_calldatasize <= 0x18, 0x0, 1_calldata[0x18]),
                   If(1_calldatasize <= 0x19, 0x0, 1_calldata[0x19]),
                   If(1_calldatasize <= 0x1a, 0x0, 1_calldata[0x1a]),
                   If(1_calldatasize <= 0x1b, 0x0, 1_calldata[0x1b]),
                   If(1_calldatasize <= 0x1c, 0x0, 1_calldata[0x1c]),
                   If(1_calldatasize <= 0x1d, 0x0, 1_calldata[0x1d]),
                   If(1_calldatasize <= 0x1e, 0x0, 1_calldata[0x1e]),
                   If(1_calldatasize <= 0x1f, 0x0, 1_calldata[0x1f]),
                   If(1_calldatasize <= 0x20, 0x0, 1_calldata[0x20]),
                   If(1_calldatasize <= 0x21, 0x0, 1_calldata[0x21]),
                   If(1_calldatasize <= 0x22, 0x0, 1_calldata[0x22]),
                   If(1_calldatasize <= 0x23, 0x0, 1_calldata[0x23]))
        memory[0x0] = KECCAC[If(1_calldatasize_<=_0x4,_0x0,_1_calldata[0x4])]
        memory[0x20] = 0x4
        if (False) goto LOC_0x257
        REVERT(offset=0x0, size=0x0)
        /******* <<terminates execution>> *******/

:LOC_0x257 

:LOC_0x275 

:LOC_0x2d6 

:LOC_0x314 

:LOC_0x317 
        goto LOC_0xa8

:LOC_0x31a 
        goto LOC_0xa8

:LOC_0x320 
        if (False) goto LOC_0x338
        REVERT(offset=0x0, size=0x0)
        /******* <<terminates execution>> *******/

:LOC_0x338 

:LOC_0x347 

:LOC_0x3a8 

:LOC_0x3b9 

:LOC_0x3d8 

:LOC_0x3e0 

:LOC_0x3f5 

:LOC_0x459 

:LOC_0x46a 

:LOC_0x4de 

:LOC_0x541 

:LOC_0x552 

:LOC_0x556 

:LOC_0x55e 

:LOC_0x588 

:LOC_0x592 

:LOC_0x5b6 

:LOC_0x5bb 

:LOC_0x5c1 

:LOC_0x5d5