83f88a50-5919-4b54-b492-bcfe6e7ec907
Open this run to answer one question: is this real attacker-relevant behavior with real impact, or just normal contract plumbing?
| ID | Type | Status | Attempts | Heartbeat |
|---|---|---|---|---|
| 31679 | report.consolidate | complete | 1 / 1 | 3 months ago |
| 95497 | artifact.fetch | complete | 1 / 3 | 1 week ago |
| 95498 | tool.cast_disasm | complete | 1 / 3 | 1 week ago |
| 95499 | analysis.bundle | complete | 1 / 3 | 1 week ago |
| 95500 | capability.graph | complete | 1 / 3 | 1 week ago |
| 95501 | detector.run | complete | 1 / 3 | 1 week ago |
| 95502 | validation.fork | complete | 1 / 3 | 1 week ago |
No slither job recorded yet.
[codex:302519] OpenAI Codex v0.77.0 (research preview)
[codex:302519] --------
[codex:302519] workdir: /tmp/codex-multi-v8jcpqg0
[codex:302519] model: gpt-5.2-codex
[codex:302519] provider: openai
[codex:302519] approval: never
[codex:302519] sandbox: read-only
[codex:302519] reasoning effort: xhigh
[codex:302519] reasoning summaries: auto
[codex:302519] session id: 019b8c43-bf5b-75c0-9914-dbc897adb5a5
[codex:302519] --------
[codex:302519] user
[codex:302519] You are a profit-focused exploit hunter analyzing EVM bytecode. Your ONLY goal is finding ways to extract value (ETH, tokens, NFTs) from this contract.
[codex:302519]
[codex:302519] Read `BYTECODE_BUNDLE.txt` completely before concluding.
[codex:302519]
[codex:302519] ONLY REPORT if you find a CONCRETE, EXPLOITABLE path to profit. We do NOT care about:
[codex:302519] - Gas inefficiency, code quality, or best practices
[codex:302519] - Theoretical vulnerabilities without a clear extraction path
[codex:302519] - Generic footguns (unchecked return values, etc.) unless they enable theft
[codex:302519] - Issues requiring social engineering or off-chain coordination
[codex:302519]
[codex:302519] PATTERNS WORTH INVESTIGATING in bytecode:
[codex:302519] - CALL/DELEGATECALL with controllable destination or calldata
[codex:302519] - Value transfers (CALL with non-zero value) without prior CALLER/ORIGIN checks
[codex:302519] - SSTORE to low slots (0-10) that might be owner/admin storage
[codex:302519] - ecrecover (signature validation) - look for missing nonce/replay protection
[codex:302519] - External calls before state updates (reentrancy)
[codex:302519] - SELFDESTRUCT with controllable beneficiary
[codex:302519] - Proxy patterns (DELEGATECALL to storage slot) with unprotected upgrade paths
[codex:302519]
[codex:302519] For each finding, you MUST explain:
[codex:302519] 1. The specific bytecode pattern/offsets that indicate the vulnerability
[codex:302519] 2. The concrete sequence of transactions to extract value
[codex:302519] 3. Why you believe this is exploitable (not just suspicious)
[codex:302519]
[codex:302519] If you cannot identify a concrete profit path from bytecode alone: set no_findings=true.
[codex:302519] Do NOT hallucinate. Bytecode-only analysis is limited - be honest about uncertainty.
[codex:302519]
[codex:302519] Output MUST be valid JSON matching the provided schema.
[codex:302519] - severity: info, low, medium, high, critical (use high/critical ONLY for clear extraction paths)
[codex:302519] - category: access_control, reentrancy, math, oracle, upgradeability, auth, other
[codex:302519] mcp startup: no servers
[codex:302519]
[codex:302519] thinking
[codex:302519] **Preparing to analyze exploit request**
[codex:302519] exec
[codex:302519] /bin/bash -lc ls in /tmp/codex-multi-v8jcpqg0 succeeded in 5ms:
[codex:302519] BYTECODE_BUNDLE.txt
[codex:302519] codex-output-schema.json
[codex:302519] exec
[codex:302519] /bin/bash -lc 'cat BYTECODE_BUNDLE.txt' in /tmp/codex-multi-v8jcpqg0 succeeded in 8ms:
[codex:302519] Runtime bytecode bundle for best-effort auditing.
[codex:302519] Note: without verified source, conclusions are low-confidence unless a concrete pattern is visible.
[codex:302519]
[codex:302519] FILE: runtime_bytecode.hex
[codex:302519] 0x6080604052600436106101c15763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630317058181146101cc57806312fa6feb146101ff57806318160ddd146102285780631dae27b31461023d578063324536eb146102525780633f4ba83a1461026757806340c10f191461027e57806341e11c59146102a25780634935f367146102b75780635c975abb146102db5780635f04bf03146102f0578063668038e01461035557806370a082311461036a578063715018a61461038b578063814b3fe0146103a05780638456cb59146103b8578063882f327b146103cd5780638da5cb5b146103ee5780638eeb8d651461041f57806391b46a911461043457806391cb866b146104585780639a816f7d14610479578063a6c8d5a81461049a578063acdf4f18146104bb578063b8d48835146104c3578063bafbc927146104e4578063bb20b07914610508578063beabacc814610520578063ca1606371461054a578063d9075c351461056b578063e34cc84f14610580578063e50d33e3146105a1578063ef78d4fd146105b6578063f2fde38b146105cb578063fcddd056146105ec578063fcf4c297146105f4575b6101c9610615565b50005b3480156101d857600080fd5b506101ed600160a060020a036004351661071a565b60408051918252519081900360200190f35b34801561020b57600080fd5b5061021461072c565b604080519115158252519081900360200190f35b34801561023457600080fd5b506101ed610735565b34801561024957600080fd5b5061021461073b565b34801561025e57600080fd5b506101ed61084d565b34801561027357600080fd5b5061027c610853565b005b34801561028a57600080fd5b50610214600160a060020a03600435166024356108c9565b3480156102ae57600080fd5b506101ed6109b9565b3480156102c357600080fd5b50610214600160a060020a03600435166024356109bf565b3480156102e757600080fd5b50610214610a69565b3480156102fc57600080fd5b50610305610a79565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610341578181015183820152602001610329565b505050509050019250505060405180910390f35b34801561036157600080fd5b506101ed610af1565b34801561037657600080fd5b506101ed600160a060020a0360043516610c95565b34801561039757600080fd5b5061027c610cdd565b3480156103ac57600080fd5b506101ed600435610d49565b3480156103c457600080fd5b5061027c610d5b565b3480156103d957600080fd5b50610214600160a060020a0360043516610dd6565b3480156103fa57600080fd5b50610403610edd565b60408051600160a060020a039092168252519081900360200190f35b34801561042b57600080fd5b506101ed610eec565b34801561044057600080fd5b506101ed600160a060020a0360043516602435610ef2565b34801561046457600080fd5b506101ed600160a060020a0360043516610f0f565b34801561048557600080fd5b506101ed600160a060020a03600435166110ff565b3480156104a657600080fd5b506101ed600160a060020a0360043516611111565b61021461122f565b3480156104cf57600080fd5b50610214600160a060020a03600435166112bb565b3480156104f057600080fd5b50610214600160a060020a03600435166024356113b2565b34801561051457600080fd5b506101ed60043561149a565b34801561052c57600080fd5b50610214600160a060020a03600435811690602435166044356114ac565b34801561055657600080fd5b50610214600160a060020a03600435166116ef565b34801561057757600080fd5b50610305611704565b34801561058c57600080fd5b50610305600160a060020a0360043516611776565b3480156105ad57600080fd5b506101ed6118d8565b3480156105c257600080fd5b506101ed6119d1565b3480156105d757600080fd5b5061027c600160a060020a03600435166119d7565b610214610615565b34801561060057600080fd5b50610214600160a060020a03600435166119fa565b60035460009060ff161561062857600080fd5b600054600160a060020a0316331461063f57600080fd5b60005460a060020a900460ff161561065657600080fd5b6001805460009081526004602090815260408083203490558354835260059091529020429055805461068d9163ffffffff611b2116565b6001818155600d916000916106a8919063ffffffff611b2e16565b81526020808201929092526040908101600090812054600180548352600d9094529190205580546106de9163ffffffff611b2e16565b60408051348152905133917fdf9a51129930649214df58f542322c245372c6f2fa6fc3c9b40d927c597cd230919081900360200190a350600190565b600a6020526000908152604090205481565b60035460ff1681565b600e5490565b6003546000908190819060ff16151561075357600080fd5b3360009081526007602052604090205460ff161561077057600080fd5b6001543360009081526009602052604090205410156107945761079233611b40565b505b33600090815260086020908152604080832060015484529091529020546006546107c39163ffffffff611bd716565b91506107ff600d60006107e160018054611b2e90919063ffffffff16565b81526020019081526020016000205483611c0090919063ffffffff16565b33600081815260076020526040808220805460ff1916600117905551929350909183156108fc0291849190818181858888f19350505050158015610847573d6000803e3d6000fd5b50505090565b600e5481565b600054600160a060020a0316331461086a57600080fd5b60005460a060020a900460ff16151561088257600080fd5b6000805474ff0000000000000000000000000000000000000000191681556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b339190a1565b60008054600160a060020a031633146108e157600080fd5b600154156108ee57600080fd5b600160a060020a0383166000908152600860209081526040808320838052909152902054610922908363ffffffff611b2116565b600160a060020a0384166000908152600860209081526040808320838052825290912091909155600d90527f81955a0a11e65eac625c29e8882660bae4e165a75d72780094acae8ece9a29ee5461097f908363ffffffff611b2116565b60008052600d6020527f81955a0a11e65eac625c29e8882660bae4e165a75d72780094acae8ece9a29ee819055600e555060015b92915050565b60025481565b600160a060020a0382166000908152600b60205260408120548190819060ff1615156109ee5760009250610a61565b5060009050805b600160a060020a0385166000908152600c6020526040902054811015610a5d57600160a060020a0385166000908152600c60205260409020805485919083908110610a3c57fe5b90600052602060002001541115610a5257610a5d565b9015906001016109f5565b8192505b505092915050565b60005460a060020a900460ff1681565b6060806000600154604051908082528060200260200182016040528015610aaa578160200160208202803883390190505b509150600090505b600154811015610aeb576000818152600460205260409020548251839083908110610ad957fe5b60209081029091010152600101610ab2565b50919050565b6000805481908190819060a060020a900460ff1615610b0f57600080fd5b600154336000908152600a602052604090205410610b2c57600080fd5b600154336000908152600960205260408120549094501015610b5357610b5133611b40565b505b336000908152600a602052604090205491505b600154821015610c0a57336000908152600860209081526040808320858452909152812054118015610b9f5750610b9d33836109bf565b155b15610bff57336000908152600860209081526040808320858452825280832054600490925290912054610bd79163ffffffff611bd716565b6000838152600d6020526040902054909150610bfa90829063ffffffff611c0016565b830192505b600190910190610b66565b600154336000908152600a6020526040812091909155831115610c8d57604051339084156108fc029085906000818181858888f19350505050158015610c54573d6000803e3d6000fd5b50604080518481529051839133917f987d620f307ff6b94d58743cb7a7509f24071586a77759b77c2d4e29f75a2f9a9181900360200190a35b509092915050565b60035460009060ff1615610cab57506000610cd8565b50600160a060020a0381166000908152600860209081526040808320600983528184205484529091529020545b919050565b600054600160a060020a03163314610cf457600080fd5b60008054604051600160a060020a03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a26000805473ffffffffffffffffffffffffffffffffffffffff19169055565b60046020526000908152604090205481565b600054600160a060020a03163314610d7257600080fd5b60005460a060020a900460ff1615610d8957600080fd5b6000805474ff0000000000000000000000000000000000000000191660a060020a1781556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff6259190a1565b60008054600160a060020a03163314610dee57600080fd5b610dfa826001546109bf565b15610e0457600080fd5b600154600160a060020a0383166000908152600960205260409020541015610e3157610e2f82611b40565b505b610e5b610e3d83610c95565b6001546000908152600d60205260409020549063ffffffff611b2e16565b600180546000908152600d6020908152604080832094909455600160a060020a038616808352600b8252848320805460ff191685179055600c82528483208454815480870183559185529284200191909155915492517f9f1ec8c880f76798e7b793325d625e9b60e4082a553c98f42b6cda368dd600089190a3506001919050565b600054600160a060020a031681565b60065481565b600860209081526000928352604080842090915290825290205481565b60008054819081908190600160a060020a03163314610f2d57600080fd5b600154600160a060020a0386166000908152600a602052604090205410610f5357600080fd5b600154600160a060020a0386166000908152600960205260408120549094501015610f8357610f8185611b40565b505b600160a060020a0385166000908152600a602052604090205491505b60015482101561105557600160a060020a0385166000908152600860209081526040808320858452909152812054118015610fe15750610fdf85836109bf565b155b1561104a57600160a060020a03851660009081526008602090815260408083208584528252808320546004909252909120546110229163ffffffff611bd716565b6000838152600d602052604090205490915061104590829063ffffffff611c0016565b830192505b600190910190610f9f565b600154600160a060020a0386166000908152600a60205260408120919091558311156110f357604051600160a060020a0386169084156108fc029085906000818181858888f193505050501580156110b1573d6000803e3d6000fd5b506040805184815290518391600160a060020a038816917f987d620f307ff6b94d58743cb7a7509f24071586a77759b77c2d4e29f75a2f9a9181900360200190a35b8293505b505050919050565b60096020526000908152604090205481565b600160a060020a0381166000908152600a60205260408120548190819081805b60015483101561122457600160a060020a03871660009081526009602052604090205483111561118d57600160a060020a03871660009081526008602090815260408083206009835281842054845290915290205493506111b4565b600160a060020a038716600090815260086020908152604080832086845290915290205493505b6000841180156111cb57506111c987846109bf565b155b15611219576000838152600460205260409020546111ef908563ffffffff611bd716565b6000848152600d602052604090205490925061121290839063ffffffff611c0016565b9485019490505b600190920191611131565b509295945050505050565b60008054600160a060020a0316331461124757600080fd5b60035460ff161561125757600080fd5b600254421161126557600080fd5b346006819055600180548082019091556040805192835251909133917fdf9a51129930649214df58f542322c245372c6f2fa6fc3c9b40d927c597cd2309181900360200190a36003805460ff1916600117905590565b60008054600160a060020a031633146112d357600080fd5b6112df826001546109bf565b15156112ea57600080fd5b600154600160a060020a03831660009081526009602052604090205410156113175761131582611b40565b505b61134161132383610c95565b6001546000908152600d60205260409020549063ffffffff611b2116565b600180546000908152600d6020908152604080832094909455600160a060020a038616808352600c82528483208454815480870183559185529284200191909155915492517f0f0bc5b519ddefdd8e5f9e6423433aa2b869738de2ae34d58ebc796fc749fa0d9190a3506001919050565b6000805481908190819060a060020a900460ff16156113d057600080fd5b600160a060020a03861660009081526009602052604090205485116113f457600080fd5b60015485111561140357600080fd5b600160a060020a0386166000908152600960209081526040808320546008835281842081855290925290912054909350915081156114765750600182015b84811161147657600160a060020a03861660009081526008602090815260408083208484529091529020829055600101611441565b50505050600160a060020a0391909116600090815260096020526040902055600190565b60056020526000908152604090205481565b60035460009081908190819060ff16156114c557600080fd5b600054600160a060020a031633146114dc57600080fd5b60005460a060020a900460ff16156114f357600080fd5b600160a060020a038616151561150857600080fd5b600160a060020a038716600090815260096020908152604080832054600883528184208185529092529091205490935085111561154457600080fd5b6001548310156115595761155787611b40565b505b600154600160a060020a03871660009081526009602052604090205410156115865761158486611b40565b505b600160a060020a038716600090815260086020908152604080832060015484529091529020546115bc908663ffffffff611b2e16565b600160a060020a03808916600090815260086020818152604080842060018054865290835281852096909655938b168352908152828220935482529290925290205461160e908663ffffffff611b2116565b600160a060020a0387166000908152600860209081526040808320600180548552925290912091909155546116449088906109bf565b9150611652866001546109bf565b905081801561165f575080155b1561169d576001546000908152600d6020526040902054611686908663ffffffff611b2116565b6001546000908152600d60205260409020556116e2565b811580156116a85750805b156116e2576001546000908152600d60205260409020546116cf908663ffffffff611b2e16565b6001546000908152600d60205260409020555b5060019695505050505050565b60076020526000908152604090205460ff1681565b6060806000600154604051908082528060200260200182016040528015611735578160200160208202803883390190505b509150600090505b600154811015610aeb57600081815260056020526040902054825183908390811061176457fe5b6020908102909101015260010161173d565b6060806000806001546040519080825280602002602001820160405280156117a8578160200160208202803883390190505b509250600091505b6001548210156110f357600160a060020a03851660009081526009602052604090205482111561181d57600160a060020a03851660009081526008602090815260408083208584528252808320546004909252909120546118169163ffffffff611bd716565b9050611866565b600160a060020a0385166000908152600860209081526040808320600983528184205484528252808320548584526004909252909120546118639163ffffffff611bd716565b90505b61187085836109bf565b15611894576000838381518110151561188557fe5b602090810290910101526118cd565b6000828152600d60205260409020546118b490829063ffffffff611c0016565b83838151811015156118c257fe5b602090810290910101525b6001909101906117b0565b336000908152600a60205260408120548190819081805b6001548310156119c7573360009081526009602052604090205483111561193957336000908152600860209081526040808320600983528184205484529091529020549350611957565b33600090815260086020908152604080832086845290915290205493505b60008411801561196e575061196c33846109bf565b155b156119bc57600083815260046020526040902054611992908563ffffffff611bd716565b6000848152600d60205260409020549092506119b590839063ffffffff611c0016565b9485019490505b6001909201916118ef565b5092949350505050565b60015481565b600054600160a060020a031633146119ee57600080fd5b6119f781611c15565b50565b6000805481908190600160a060020a03163314611a1657600080fd5b60035460ff161515611a2757600080fd5b600160a060020a03841660009081526007602052604090205460ff1615611a4d57600080fd5b600154600160a060020a0385166000908152600960205260409020541015611a7a57611a7884611b40565b505b600160a060020a03841660009081526008602090815260408083206001548452909152902054600654611ab29163ffffffff611bd716565b9150611ad0600d60006107e160018054611b2e90919063ffffffff16565b600160a060020a038516600081815260076020526040808220805460ff1916600117905551929350909183156108fc0291849190818181858888f193505050501580156110f7573d6000803e3d6000fd5b818101828110156109b357fe5b600082821115611b3a57fe5b50900390565b600160a060020a03811660009081526009602090815260408083205460088352818420818552909252822054828115611bb05750600182015b6001548111611bb057600160a060020a03851660009081526008602090815260408083208484529091529020829055600101611b79565b60018054600160a060020a0387166000908152600960205260409020559350505050919050565b6000821515611be8575060006109b3565b50818102818382811515611bf857fe5b04146109b357fe5b60008183811515611c0d57fe5b049392505050565b600160a060020a0381161515611c2a57600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03929092169190911790555600a165627a7a7230582025d10253a2b9d47c65084fa899de9f3c71ae5ff2bc2fe3b23afaa8f14448af2f0029
[codex:302519]
[codex:302519] thinking
[codex:302519] **Analyzing bytecode for exploit paths**
[codex:302519]
[codex:302519] I'm gearing up to analyze this large, ERC20-like bytecode to identify any concrete exploit paths by scanning for function selectors, suspicious calls, and opcode patterns like CALL, DELEGATECALL, and SELFDESTRUCT using an in-memory Python script. I'll focus on spotting payable or vulnerable functions that could lead to a profit exploit.
[codex:302519] exec
[codex:302519] /bin/bash -lc "python - <<'PY'
[codex:302519] import binascii
[codex:302519] import re
[codex:302519] from pathlib import Path
[codex:302519] hexdata=Path('BYTECODE_BUNDLE.txt').read_text().split('FILE: runtime_bytecode.hex',1)[1]
[codex:302519] # get hex string after line
[codex:302519] hexstr=re.search(r'0x[0-9a-fA-F]+', hexdata).group(0)[2:]
[codex:302519] code=binascii.unhexlify(hexstr)
[codex:302519] # scan for opcodes f1,f2,f4,ff
[codex:302519] ops={0xf1:'CALL',0xf2:'CALLCODE',0xf4:'DELEGATECALL',0xff:'SELFDESTRUCT'}
[codex:302519] idxs={k:[] for k in ops}
[codex:302519] for i,b in enumerate(code):
[codex:302519] if b in ops:
[codex:302519] idxs[b].append(i)
[codex:302519] print({ops[k]:len(v) for k,v in idxs.items()})
[codex:302519] # show few contexts
[codex:302519] for b,locs in idxs.items():
[codex:302519] print(ops[b], locs[:10])
[codex:302519] PY" in /tmp/codex-multi-v8jcpqg0 succeeded in 37ms:
[codex:302519] {'CALL': 6, 'CALLCODE': 7, 'DELEGATECALL': 6, 'SELFDESTRUCT': 180}
[codex:302519] CALL [872, 2097, 3134, 4251, 6923, 7351]
[codex:302519] CALLCODE [418, 1110, 1790, 3356, 4758, 7248, 7343]
[codex:302519] DELEGATECALL [441, 447, 2225, 3310, 3786, 5102]
[codex:302519] SELFDESTRUCT [14, 15, 16, 17, 73, 1176, 1565, 1611, 1668, 1669]
[codex:302519]
[codex:302519] thinking
[codex:302519] **Planning opcode disassembly**
[codex:302519] exec
[codex:302519] /bin/bash -lc "python - <<'PY'
[codex:302519] import binascii, re
[codex:302519] from pathlib import Path
[codex:302519] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:302519] hexstr=re.search(r'0x[0-9a-fA-F]+', hexdata).group(0)[2:]
[codex:302519] code=binascii.unhexlify(hexstr)
[codex:302519] # opcode names
[codex:302519] opnames={
[codex:302519] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:302519] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
[codex:302519] 0x20:'SHA3',
[codex:302519] 0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:302519] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:302519] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:302519] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:302519] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:302519] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:302519] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:302519] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:302519] }
[codex:302519]
[codex:302519] ops_of_interest={'CALL','DELEGATECALL','SELFDESTRUCT','CALLCODE'}
[codex:302519] locs=[]
[codex:302519] idx=0
[codex:302519] while idx < len(code):
[codex:302519] op=code[idx]
[codex:302519] name=opnames.get(op,'UNKNOWN')
[codex:302519] if name in ops_of_interest:
[codex:302519] locs.append((idx,name))
[codex:302519] if 0x60 <= op <= 0x7f: # push
[codex:302519] push_len=op-0x5f
[codex:302519] idx += 1+push_len
[codex:302519] else:
[codex:302519] idx += 1
[codex:302519]
[codex:302519] print('found',len(locs),'ops of interest')
[codex:302519] print(locs[:50])
[codex:302519] PY" in /tmp/codex-multi-v8jcpqg0 succeeded in 31ms:
[codex:302519] found 4 ops of interest
[codex:302519] [(2097, 'CALL'), (3134, 'CALL'), (4251, 'CALL'), (6923, 'CALL')]
[codex:302519]
[codex:302519] thinking
[codex:302519] **Preparing to analyze CALL instructions**
[codex:302519] exec
[codex:302519] /bin/bash -lc "python - <<'PY'
[codex:302519] import binascii, re
[codex:302519] from pathlib import Path
[codex:302519] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:302519] hexstr=re.search(r'0x[0-9a-fA-F]+', hexdata).group(0)[2:]
[codex:302519] code=binascii.unhexlify(hexstr)
[codex:302519] # opcode table
[codex:302519] opnames={
[codex:302519] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:302519] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
[codex:302519] 0x20:'SHA3',
[codex:302519] 0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:302519] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:302519] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:302519] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:302519] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:302519] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:302519] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:302519] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:302519] }
[codex:302519]
[codex:302519] def disasm(start, count):
[codex:302519] i=start
[codex:302519] out=[]
[codex:302519] while i < len(code) and len(out)<count:
[codex:302519] op=code[i]
[codex:302519] name=opnames.get(op,'UNKNOWN')
[codex:302519] if 0x60 <= op <= 0x7f:
[codex:302519] l=op-0x5f
[codex:302519] data=code[i+1:i+1+l]
[codex:302519] out.append((i,name,data.hex()))
[codex:302519] i += 1+l
[codex:302519] else:
[codex:302519] out.append((i,name,''))
[codex:302519] i += 1
[codex:302519] return out
[codex:302519]
[codex:302519] # find CALLs
[codex:302519] call_offsets=[]
[codex:302519] i=0
[codex:302519] while i < len(code):
[codex:302519] op=code[i]
[codex:302519] if op==0xf1:
[codex:302519] call_offsets.append(i)
[codex:302519] if 0x60 <= op <= 0x7f:
[codex:302519] i += 1+(op-0x5f)
[codex:302519] else:
[codex:302519] i += 1
[codex:302519]
[codex:302519] print('CALL offsets',call_offsets)
[codex:302519] for off in call_offsets:
[codex:302519] print('--- around',off)
[codex:302519] for addr,name,data in disasm(off-20, 40):
[codex:302519] if addr==off:
[codex:302519] marker='>>'
[codex:302519] else:
[codex:302519] marker=' '
[codex:302519] if data:
[codex:302519] print(f\"{marker} {addr:04x} {name} 0x{data}\")
[codex:302519] else:
[codex:302519] print(f\"{marker} {addr:04x} {name}\")
[codex:302519]
[codex:302519] PY" in /tmp/codex-multi-v8jcpqg0 succeeded in 29ms:
[codex:302519] CALL offsets [2097, 3134, 4251, 6923]
[codex:302519] --- around 2097
[codex:302519] 081d SWAP4
[codex:302519] 081e POP
[codex:302519] 081f SWAP1
[codex:302519] 0820 SWAP2
[codex:302519] 0821 DUP4
[codex:302519] 0822 ISZERO
[codex:302519] 0823 PUSH2 0x08fc
[codex:302519] 0826 MUL
[codex:302519] 0827 SWAP2
[codex:302519] 0828 DUP5
[codex:302519] 0829 SWAP2
[codex:302519] 082a SWAP1
[codex:302519] 082b DUP2
[codex:302519] 082c DUP2
[codex:302519] 082d DUP2
[codex:302519] 082e DUP6
[codex:302519] 082f DUP9
[codex:302519] 0830 DUP9
[codex:302519]
[codex:302519] thinking
[codex:302519] **Analyzing low-level CALL instruction context**
[codex:302519]
[codex:302519] I'm exploring how CALL instructions transfer ETH by examining the surrounding EVM bytecode and stack operations. I’m trying to decode the gas stipend and call parameters, suspecting internal functions like safeTransferETH, and planning to parse function selectors to map calls for deeper insight into potential profit extraction or vulnerabilities.
[codex:302519] exec
[codex:302519] /bin/bash -lc "python - <<'PY'
[codex:302519] import binascii,re
[codex:302519] from pathlib import Path
[codex:302519] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:302519] hexstr=re.search(r'0x[0-9a-fA-F]+', hexdata).group(0)[2:]
[codex:302519] code=binascii.unhexlify(hexstr)
[codex:302519] # parse dispatcher: look for pattern PUSH4 <sel> ... PUSH2 <dest> JUMPI
[codex:302519] mapping={}
[codex:302519] # simple scan of bytecode for PUSH4 and following PUSH2 then JUMPI
[codex:302519] i=0
[codex:302519] while i < len(code)-1:
[codex:302519] op=code[i]
[codex:302519] if op==0x63: # PUSH4
[codex:302519] sel=int.from_bytes(code[i+1:i+5],'big')
[codex:302519] # scan forward a bit to find PUSH2 dest then JUMPI
[codex:302519] j=i+5
[codex:302519] dest=None
[codex:302519] while j < i+20 and j < len(code):
[codex:302519] opj=code[j]
[codex:302519] if opj==0x61: # PUSH2
[codex:302519] dest=int.from_bytes(code[j+1:j+3],'big')
[codex:302519] if opj==0x57 and dest is not None:
[codex:302519] mapping[sel]=dest
[codex:302519] break
[codex:302519] # advance
[codex:302519] if 0x60 <= opj <= 0x7f:
[codex:302519] j += 1+(opj-0x5f)
[codex:302519] else:
[codex:302519] j += 1
[codex:302519] i += 5
[codex:302519] else:
[codex:302519] if 0x60 <= op <= 0x7f:
[codex:302519] i += 1+(op-0x5f)
[codex:302519] else:
[codex:302519] i += 1
[codex:302519] # print mapping sorted by dest
[codex:302519] for sel,dest in sorted(mapping.items(), key=lambda kv: kv[1]):
[codex:302519] print(f\"0x{sel:08x} -> 0x{dest:04x}\")
[codex:302519] print('count',len(mapping))
[codex:302519] PY" in /tmp/codex-multi-v8jcpqg0 succeeded in 29ms:
[codex:302519] 0x03170581 -> 0x01cc
[codex:302519] 0x12fa6feb -> 0x01ff
[codex:302519] 0x18160ddd -> 0x0228
[codex:302519] 0x1dae27b3 -> 0x023d
[codex:302519] 0x324536eb -> 0x0252
[codex:302519] 0x3f4ba83a -> 0x0267
[codex:302519] 0x40c10f19 -> 0x027e
[codex:302519] 0x41e11c59 -> 0x02a2
[codex:302519] 0x4935f367 -> 0x02b7
[codex:302519] 0x5c975abb -> 0x02db
[codex:302519] 0x5f04bf03 -> 0x02f0
[codex:302519] 0x668038e0 -> 0x0355
[codex:302519] 0x70a08231 -> 0x036a
[codex:302519] 0x715018a6 -> 0x038b
[codex:302519] 0x814b3fe0 -> 0x03a0
[codex:302519] 0x8456cb59 -> 0x03b8
[codex:302519] 0x882f327b -> 0x03cd
[codex:302519] 0x8da5cb5b -> 0x03ee
[codex:302519] 0x8eeb8d65 -> 0x041f
[codex:302519] 0x91b46a91 -> 0x0434
[codex:302519]
[codex:302519] thinking
[codex:302519] **Mapping function calls to jump destinations**
[codex:302519] exec
[codex:302519] /bin/bash -lc "python - <<'PY'
[codex:302519] import binascii,re
[codex:302519] from pathlib import Path
[codex:302519] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:302519] hexstr=re.search(r'0x[0-9a-fA-F]+', hexdata).group(0)[2:]
[codex:302519] code=binascii.unhexlify(hexstr)
[codex:302519] # parse opcodes to get JUMPDESTs and map their order
[codex:302519] jumpdests=[]
[codex:302519] idx=0
[codex:302519] while idx < len(code):
[codex:302519] op=code[idx]
[codex:302519] if op==0x5b:
[codex:302519] jumpdests.append(idx)
[codex:302519] if 0x60 <= op <= 0x7f:
[codex:302519] idx += 1+(op-0x5f)
[codex:302519] else:
[codex:302519] idx += 1
[codex:302519] # mapping from selectors to dest
[codex:302519] mapping={}
[codex:302519] idx=0
[codex:302519] while idx < len(code)-1:
[codex:302519] op=code[idx]
[codex:302519] if op==0x63:
[codex:302519] sel=int.from_bytes(code[idx+1:idx+5],'big')
[codex:302519] j=idx+5
[codex:302519] dest=None
[codex:302519] while j<idx+20 and j<len(code):
[codex:302519] opj=code[j]
[codex:302519] if opj==0x61:
[codex:302519] dest=int.from_bytes(code[j+1:j+3],'big')
[codex:302519] if opj==0x57 and dest is not None:
[codex:302519] mapping[sel]=dest
[codex:302519] break
[codex:302519] if 0x60 <= opj <= 0x7f:
[codex:302519] j+=1+(opj-0x5f)
[codex:302519] else:
[codex:302519] j+=1
[codex:302519] idx += 5
[codex:302519] else:
[codex:302519] if 0x60 <= op <= 0x7f:
[codex:302519] idx += 1+(op-0x5f)
[codex:302519] else:
[codex:302519] idx += 1
[codex:302519] # call offsets
[codex:302519] call_offsets=[]
[codex:302519] idx=0
[codex:302519] while idx < len(code):
[codex:302519] op=code[idx]
[codex:302519] if op==0xf1:
[codex:302519] call_offsets.append(idx)
[codex:302519] if 0x60 <= op <= 0x7f:
[codex:302519] idx += 1+(op-0x5f)
[codex:302519] else:
[codex:302519] idx += 1
[codex:302519]
[codex:302519] # for each call find nearest previous jumpdest
[codex:302519] for off in call_offsets:
[codex:302519] prev=[j for j in jumpdests if j<=off]
[codex:302519] last=prev[-1] if prev else None
[codex:302519] print('CALL at',hex(off),'prev jumpdest',hex(last) if last else None)
[codex:302519]
[codex:302519] # show selector names for those jumpdest if any
[codex:302519] sel_by_dest={v:k for k,v in mapping.items()}
[codex:302519] print('selector by dest for those call contexts:')
[codex:302519] for off in call_offsets:
[codex:302519] prev=[j for j in jumpdests if j<=off]
[codex:302519] last=prev[-1] if prev else None
[codex:302519] sel=sel_by_dest.get(last)
[codex:302519] print(hex(off),'jumpdest',hex(last), 'selector', hex(sel) if sel else None)
[codex:302519]
[codex:302519] PY" in /tmp/codex-multi-v8jcpqg0 succeeded in 33ms:
[codex:302519] CALL at 0x831 prev jumpdest 0x7ff
[codex:302519] CALL at 0xc3e prev jumpdest 0xc0a
[codex:302519] CALL at 0x109b prev jumpdest 0x1055
[codex:302519] CALL at 0x1b0b prev jumpdest 0x1ad0
[codex:302519] selector by dest for those call contexts:
[codex:302519] 0x831 jumpdest 0x7ff selector None
[codex:302519] 0xc3e jumpdest 0xc0a selector None
[codex:302519] 0x109b jumpdest 0x1055 selector None
[codex:302519] 0x1b0b jumpdest 0x1ad0 selector None
[codex:302519]
[codex:302519] thinking
[codex:302519] **Investigating function call locations**
[codex:302519] exec
[codex:302519] /bin/bash -lc "python - <<'PY'
[codex:302519] import binascii,re
[codex:302519] from pathlib import Path
[codex:302519] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:302519] hexstr=re.search(r'0x[0-9a-fA-F]+', hexdata).group(0)[2:]
[codex:302519] code=binascii.unhexlify(hexstr)
[codex:302519] # opcode names
[codex:302519] opnames={
[codex:302519] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:302519] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
[codex:302519] 0x20:'SHA3',
[codex:302519] 0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:302519] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:302519] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:302519] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:302519] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:302519] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:302519] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:302519] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:302519] }
[codex:302519]
[codex:302519] def disasm_range(start,end):
[codex:302519] i=start
[codex:302519] while i < end:
[codex:302519] op=code[i]
[codex:302519] name=opnames.get(op,'UNKNOWN')
[codex:302519] if 0x60 <= op <= 0x7f:
[codex:302519] l=op-0x5f
[codex:302519] data=code[i+1:i+1+l]
[codex:302519] print(f\"{i:04x}: {name} 0x{data.hex()}\")
[codex:302519] i += 1+l
[codex:302519] else:
[codex:302519] print(f\"{i:04x}: {name}\")
[codex:302519] i += 1
[codex:302519]
[codex:302519] # disasm around 0x0615 to 0x0900
[codex:302519] start=0x0615; end=0x0900
[codex:302519] print('disasm',hex(start),hex(end))
[codex:302519] disasm_range(start,end)
[codex:302519] PY" in /tmp/codex-multi-v8jcpqg0 succeeded in 29ms:
[codex:302519] disasm 0x615 0x900
[codex:302519] 0615: JUMPDEST
[codex:302519] 0616: PUSH1 0x03
[codex:302519] 0618: SLOAD
[codex:302519] 0619: PUSH1 0x00
[codex:302519] 061b: SWAP1
[codex:302519] 061c: PUSH1 0xff
[codex:302519] 061e: AND
[codex:302519] 061f: ISZERO
[codex:302519] 0620: PUSH2 0x0628
[codex:302519] 0623: JUMPI
[codex:302519] 0624: PUSH1 0x00
[codex:302519] 0626: DUP1
[codex:302519] 0627: REVERT
[codex:302519] 0628: JUMPDEST
[codex:302519] 0629: PUSH1 0x00
[codex:302519] 062b: SLOAD
[codex:302519] 062c: PUSH1 0x01
[codex:302519] 062e: PUSH1 0xa0
[codex:302519] 0630: PUSH1 0x02
[codex:302519]
[codex:302519] thinking
[codex:302519] **Analyzing complex bytecode flow**
[codex:302519] exec
[codex:302519] /bin/bash -lc "python - <<'PY'
[codex:302519] import binascii,re
[codex:302519] from pathlib import Path
[codex:302519] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:302519] hexstr=re.search(r'0x[0-9a-fA-F]+', hexdata).group(0)[2:]
[codex:302519] code=binascii.unhexlify(hexstr)
[codex:302519] # opcode names
[codex:302519] opnames={
[codex:302519] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:302519] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
[codex:302519] 0x20:'SHA3',
[codex:302519] 0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:302519] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:302519] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:302519] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:302519] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:302519] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:302519] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:302519] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:302519] }
[codex:302519]
[codex:302519] def disasm_range(start,end):
[codex:302519] i=start
[codex:302519] while i < end:
[codex:302519] op=code[i]
[codex:302519] name=opnames.get(op,'UNKNOWN')
[codex:302519] if 0x60 <= op <= 0x7f:
[codex:302519] l=op-0x5f
[codex:302519] data=code[i+1:i+1+l]
[codex:302519] print(f\"{i:04x}: {name} 0x{data.hex()}\")
[codex:302519] i += 1+l
[codex:302519] else:
[codex:302519] print(f\"{i:04x}: {name}\")
[codex:302519] i += 1
[codex:302519]
[codex:302519] start=0x1b00; end=0x1c40
[codex:302519] print('disasm',hex(start),hex(end))
[codex:302519] disasm_range(start,end)
[codex:302519] PY" in /tmp/codex-multi-v8jcpqg0 succeeded in 29ms:
[codex:302519] disasm 0x1b00 0x1c40
[codex:302519] 1b00: MUL
[codex:302519] 1b01: SWAP2
[codex:302519] 1b02: DUP5
[codex:302519] 1b03: SWAP2
[codex:302519] 1b04: SWAP1
[codex:302519] 1b05: DUP2
[codex:302519] 1b06: DUP2
[codex:302519] 1b07: DUP2
[codex:302519] 1b08: DUP6
[codex:302519] 1b09: DUP9
[codex:302519] 1b0a: DUP9
[codex:302519] 1b0b: CALL
[codex:302519] 1b0c: SWAP4
[codex:302519] 1b0d: POP
[codex:302519] 1b0e: POP
[codex:302519] 1b0f: POP
[codex:302519] 1b10: POP
[codex:302519] 1b11: ISZERO
[codex:302519] 1b12: DUP1
[codex:302519]
[codex:302519] thinking
[codex:302519] **Analyzing EVM call stack and control flow**
[codex:302519]
[codex:302519] I'm sorting through disassembly to understand how internal math functions relate to calls around 0x1b0b and 0x1b21, clarifying function boundaries and jumps. I'm zooming into a function at 0x073b that appears to send ETH using a guarded call pattern and planning a symbolic stack evaluation to trace call arguments and storage effects, aiming to see if any unsafe external calls or reentrancy issues could allow exploit paths. I’m setting up to write a symbolic interpreter to simulate opcodes from 0x073b to 0x0831, representing storage loads and calldata symbolically, to reconstruct the call’s input parameters and check the logic around transfers.
[codex:302519] exec
[codex:302519] /bin/bash -lc "python - <<'PY'
[codex:302519] import binascii,re
[codex:302519] from pathlib import Path
[codex:302519] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:302519] hexstr=re.search(r'0x[0-9a-fA-F]+', hexdata).group(0)[2:]
[codex:302519] code=binascii.unhexlify(hexstr)
[codex:302519]
[codex:302519] # opcode names and stack effects
[codex:302519] opnames={
[codex:302519] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:302519] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
[codex:302519] 0x20:'SHA3',
[codex:302519] 0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:302519] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:302519] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:302519] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:302519] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:302519] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:302519] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:302519] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:302519] }
[codex:302519]
[codex:302519] start=0x073b
[codex:302519] end=0x0832
[codex:302519] # simple symbolic stack
[codex:302519] stack=[f'arg{i}' for i in range(10)] # placeholder maybe too many? We'll treat arg0 top? Actually stack top is last element.
[codex:302519] # We'll start with empty and let underflow create placeholders? We'll do custom.
[codex:302519] stack=[]
[codex:302519] mem={}
[codex:302519]
[codex:302519] # function to pop
[codex:302519] arg_counter=0
[codex:302519]
[codex:302519] def pop():
[codex:302519] global arg_counter
[codex:302519] if not stack:
[codex:302519] arg_counter += 1
[codex:302519] return f'unk{arg_counter}'
[codex:302519] return stack.pop()
[codex:302519]
[codex:302519] def push(x):
[codex:302519] stack.append(x)
[codex:302519]
[codex:302519] def fmt(x):
[codex:302519] return x
[codex:302519]
[codex:302519] # helper to handle binary op
[codex:302519]
[codex:302519] def binop(op):
[codex:302519] b=pop(); a=pop();
[codex:302519] push(f'({a} {op} {b})')
[codex:302519]
[codex:302519] def unop(op):
[codex:302519] a=pop(); push(f'{op}({a})')
[codex:302519]
[codex:302519] # parse
[codex:302519] pc=start
[codex:302519] while pc < end:
[codex:302519] op=code[pc]
[codex:302519] name=opnames.get(op,'UNKNOWN')
[codex:302519] # print debug
[codex:302519] # print(hex(pc), name, 'stack', stack)
[codex:302519] if 0x60 <= op <= 0x7f:
[codex:302519] l=op-0x5f
[codex:302519] data=code[pc+1:pc+1+l]
[codex:302519] val=int.from_bytes(data,'big')
[codex:302519] push(hex(val))
[codex:302519] pc += 1+l
[codex:302519] continue
[codex:302519] if name.startswith('DUP'):
[codex:302519] n=int(name[3:])
[codex:302519] if len(stack)<n:
[codex:302519] # pad
[codex:302519] while len(stack)<n:
[codex:302519] stack.insert(0,f'unk{len(stack)+1}')
[codex:302519] push(stack[-n])
[codex:302519] elif name.startswith('SWAP'):
[codex:302519] n=int(name[4:])
[codex:302519] if len(stack)<n+1:
[codex:302519] while len(stack)<n+1:
[codex:302519] stack.insert(0,f'unk{len(stack)+1}')
[codex:302519] stack[-1], stack[-1-n] = stack[-1-n], stack[-1]
[codex:302519] elif name=='POP':
[codex:302519] pop()
[codex:302519] elif name=='ADD':
[codex:302519] binop('+')
[codex:302519] elif name=='SUB':
[codex:302519] binop('-')
[codex:302519] elif name=='MUL':
[codex:302519] binop('*')
[codex:302519] elif name=='DIV':
[codex:302519] binop('/')
[codex:302519] elif name=='AND':
[codex:302519] binop('&')
[codex:302519] elif name=='OR':
[codex:302519] binop('|')
[codex:302519] elif name=='EQ':
[codex:302519] binop('==')
[codex:302519] elif name=='LT':
[codex:302519] binop('<')
[codex:302519] elif name=='GT':
[codex:302519] binop('>')
[codex:302519] elif name=='ISZERO':
[codex:302519] unop('iszero')
[codex:302519] elif name=='NOT':
[codex:302519] unop('not')
[codex:302519] elif name=='CALLER':
[codex:302519] push('CALLER')
[codex:302519] elif name=='CALLVALUE':
[codex:302519] push('CALLVALUE')
[codex:302519] elif name=='SLOAD':
[codex:302519] key=pop(); push(f'sload({key})')
[codex:302519] elif name=='SSTORE':
[codex:302519] val=pop(); key=pop();
[codex:302519] # ignore store
[codex:302519] elif name=='MSTORE':
[codex:302519] val=pop(); key=pop(); mem[key]=val
[codex:302519] elif name=='MLOAD':
[codex:302519] key=pop(); push(f'mem[{key}]')
[codex:302519] elif name=='SHA3':
[codex:302519] size=pop(); offset=pop();
[codex:302519] # try resolve if offset and size are constants
[codex:302519] push(f'sha3({offset},{size})')
[codex:302519] elif name in ('JUMP','JUMPI','JUMPDEST'):
[codex:302519] # ignore control flow
[codex:302519] pass
[codex:302519] elif name=='LOG3' or name=='LOG1' or name=='LOG2' or name=='LOG4':
[codex:302519] # pop appropriate? LOGn pops mstart, msize, topic1..n
[codex:302519] if name=='LOG1':
[codex:302519] pop(); pop(); pop()
[codex:302519] elif name=='LOG2':
[codex:302519] pop(); pop(); pop(); pop()
[codex:302519] elif name=='LOG3':
[codex:302519] pop(); pop(); pop(); pop(); pop()
[codex:302519] elif name=='LOG4':
[codex:302519] pop(); pop(); pop(); pop(); pop(); pop()
[codex:302519] elif name=='CALL':
[codex:302519] # capture call args
[codex:302519] out_size=pop(); out_offset=pop(); in_size=pop(); in_offset=pop(); value=pop(); to=pop(); gas=pop()
[codex:302519] print('CALL at',hex(pc),'args:',{'gas':gas,'to':to,'value':value,'in_offset':in_offset,'in_size':in_size,'out_offset':out_offset,'out_size':out_size})
[codex:302519] push('call_result')
[codex:302519] else:
[codex:302519] # other ops ignored
[codex:302519] pass
[codex:302519] pc += 1
[codex:302519]
[codex:302519] print('final stack',stack)
[codex:302519] PY" in /tmp/codex-multi-v8jcpqg0 succeeded in 29ms:
[codex:302519] CALL at 0x831 args: {'gas': '0x0', 'to': 'mem[0x40]', 'value': '0x0', 'in_offset': 'mem[0x40]', 'in_size': '(0x1c00 & 0xffffffff)', 'out_offset': 'CALLER', 'out_size': '(iszero((0x1c00 & 0xffffffff)) * 0x8fc)'}
[codex:302519] final stack ['0x0', '0x0', '0x0', 'iszero(iszero((sload(0x3) & 0xff)))', '0x753', '0x0', '0x0', 'iszero((sload(sha3(0x40,0x0)) & 0xff))', '0x770', '0x0', '0x0', 'iszero((sload(0x1) < sload(sha3(0x40,0x0))))', '0x794', '0x792', 'CALLER', '0x7c3', '(0xffffffff & 0x1bd7)', 'sload(sha3(0x40,0x0))', '0x7ff', '0xd', '0x0', '0x7e1', '0xd', '(0x1c00 & 0xffffffff)', 'CALLER', '(iszero((0x1c00 & 0xffffffff)) * 0x8fc)', '(0x1c00 & 0xffffffff)', 'mem[0x40]', 'call_result']
[codex:302519]
[codex:302519] thinking
[codex:302519] **Analyzing symbolic interpreter issues**
[codex:302519] exec
[codex:302519] /bin/bash -lc "python - <<'PY'
[codex:302519] import binascii,re
[codex:302519] from pathlib import Path
[codex:302519] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:302519] hexstr=re.search(r'0x[0-9a-fA-F]+', hexdata).group(0)[2:]
[codex:302519] code=binascii.unhexlify(hexstr)
[codex:302519] # opcode names
[codex:302519] opnames={
[codex:302519] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:302519] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
[codex:302519] 0x20:'SHA3',
[codex:302519] 0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:302519] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:302519] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:302519] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:302519] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:302519] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:302519] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:302519] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:302519] }
[codex:302519]
[codex:302519] def disasm_range(start,end):
[codex:302519] i=start
[codex:302519] while i<end:
[codex:302519] op=code[i]
[codex:302519] name=opnames.get(op,'UNKNOWN')
[codex:302519] if 0x60 <= op <= 0x7f:
[codex:302519] l=op-0x5f
[codex:302519] data=code[i+1:i+1+l]
[codex:302519] print(f\"{i:04x}: {name} 0x{data.hex()}\")
[codex:302519] i+=1+l
[codex:302519] else:
[codex:302519] print(f\"{i:04x}: {name}\")
[codex:302519] i+=1
[codex:302519]
[codex:302519] # show for some function entries near 0x023d etc
[codex:302519] for dest in [0x01cc,0x01ff,0x0228,0x023d,0x0252,0x0267,0x027e,0x02a2,0x02b7,0x02db,0x02f0]:
[codex:302519] print('\\nFunction entry',hex(dest))
[codex:302519] disasm_range(dest, dest+0x40)
[codex:302519] PY" in /tmp/codex-multi-v8jcpqg0 succeeded in 29ms:
[codex:302519]
[codex:302519] Function entry 0x1cc
[codex:302519] 01cc: JUMPDEST
[codex:302519] 01cd: CALLVALUE
[codex:302519] 01ce: DUP1
[codex:302519] 01cf: ISZERO
[codex:302519] 01d0: PUSH2 0x01d8
[codex:302519] 01d3: JUMPI
[codex:302519] 01d4: PUSH1 0x00
[codex:302519] 01d6: DUP1
[codex:302519] 01d7: REVERT
[codex:302519] 01d8: JUMPDEST
[codex:302519] 01d9: POP
[codex:302519] 01da: PUSH2 0x01ed
[codex:302519] 01dd: PUSH1 0x01
[codex:302519] 01df: PUSH1 0xa0
[codex:302519] 01e1: PUSH1 0x02
[codex:302519] 01e3: EXP
[codex:302519] 01e4: SUB
[codex:302519] 01e5: PUSH1 0x04
[codex:302519]
[codex:302519] thinking
[codex:302519] **Tracing internal call and security checks**
[codex:302519] exec
[codex:302519] /bin/bash -lc "python - <<'PY'
[codex:302519] import binascii,re
[codex:302519] from pathlib import Path
[codex:302519] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:302519] hexstr=re.search(r'0x[0-9a-fA-F]+', hexdata).group(0)[2:]
[codex:302519] code=binascii.unhexlify(hexstr)
[codex:302519] # opcode names
[codex:302519] opnames={
[codex:302519] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:302519] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
[codex:302519] 0x20:'SHA3',
[codex:302519] 0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:302519] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:302519] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:302519] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:302519] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:302519] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:302519] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:302519] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:302519] }
[codex:302519]
[codex:302519] def disasm_range(start,end):
[codex:302519] i=start
[codex:302519] while i<end:
[codex:302519] op=code[i]
[codex:302519] name=opnames.get(op,'UNKNOWN')
[codex:302519] if 0x60 <= op <= 0x7f:
[codex:302519] l=op-0x5f
[codex:302519] data=code[i+1:i+1+l]
[codex:302519] print(f\"{i:04x}: {name} 0x{data.hex()}\")
[codex:302519] i+=1+l
[codex:302519] else:
[codex:302519] print(f\"{i:04x}: {name}\")
[codex:302519] i+=1
[codex:302519]
[codex:302519] # function entry for selector f2fde38b is 0x05cb
[codex:302519] start=0x05cb; end=0x0630
[codex:302519] print('disasm',hex(start),hex(end))
[codex:302519] disasm_range(start,end)
[codex:302519] PY" in /tmp/codex-multi-v8jcpqg0 succeeded in 28ms:
[codex:302519] disasm 0x5cb 0x630
[codex:302519] 05cb: JUMPDEST
[codex:302519] 05cc: CALLVALUE
[codex:302519] 05cd: DUP1
[codex:302519] 05ce: ISZERO
[codex:302519] 05cf: PUSH2 0x05d7
[codex:302519] 05d2: JUMPI
[codex:302519] 05d3: PUSH1 0x00
[codex:302519] 05d5: DUP1
[codex:302519] 05d6: REVERT
[codex:302519] 05d7: JUMPDEST
[codex:302519] 05d8: POP
[codex:302519] 05d9: PUSH2 0x027c
[codex:302519] 05dc: PUSH1 0x01
[codex:302519] 05de: PUSH1 0xa0
[codex:302519] 05e0: PUSH1 0x02
[codex:302519] 05e2: EXP
[codex:302519] 05e3: SUB
[codex:302519] 05e4: PUSH1 0x04
[codex:302519] 05e6: CALLDATALOAD
[codex:302519]
[codex:302519] thinking
[codex:302519] **Inspecting ownership check**
[codex:302519] exec
[codex:302519] /bin/bash -lc "python - <<'PY'
[codex:302519] import binascii,re
[codex:302519] from pathlib import Path
[codex:302519] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:302519] hexstr=re.search(r'0x[0-9a-fA-F]+', hexdata).group(0)[2:]
[codex:302519] code=binascii.unhexlify(hexstr)
[codex:302519] # opcode names
[codex:302519] opnames={
[codex:302519] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:302519] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
[codex:302519] 0x20:'SHA3',
[codex:302519] 0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:302519] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:302519] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:302519] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:302519] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:302519] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:302519] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:302519] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:302519] }
[codex:302519]
[codex:302519] def disasm_range(start,end):
[codex:302519] i=start
[codex:302519] while i<end:
[codex:302519] op=code[i]
[codex:302519] name=opnames.get(op,'UNKNOWN')
[codex:302519] if 0x60 <= op <= 0x7f:
[codex:302519] l=op-0x5f
[codex:302519] data=code[i+1:i+1+l]
[codex:302519] print(f\"{i:04x}: {name} 0x{data.hex()}\")
[codex:302519] i+=1+l
[codex:302519] else:
[codex:302519] print(f\"{i:04x}: {name}\")
[codex:302519] i+=1
[codex:302519]
[codex:302519] start=0x19d7; end=0x1a30
[codex:302519] print('disasm',hex(start),hex(end))
[codex:302519] disasm_range(start,end)
[codex:302519] PY" in /tmp/codex-multi-v8jcpqg0 succeeded in 30ms:
[codex:302519] disasm 0x19d7 0x1a30
[codex:302519] 19d7: JUMPDEST
[codex:302519] 19d8: PUSH1 0x00
[codex:302519] 19da: SLOAD
[codex:302519] 19db: PUSH1 0x01
[codex:302519] 19dd: PUSH1 0xa0
[codex:302519] 19df: PUSH1 0x02
[codex:302519] 19e1: EXP
[codex:302519] 19e2: SUB
[codex:302519] 19e3: AND
[codex:302519] 19e4: CALLER
[codex:302519] 19e5: EQ
[codex:302519] 19e6: PUSH2 0x19ee
[codex:302519] 19e9: JUMPI
[codex:302519] 19ea: PUSH1 0x00
[codex:302519] 19ec: DUP1
[codex:302519] 19ed: REVERT
[codex:302519] 19ee: JUMPDEST
[codex:302519] 19ef: PUSH2 0x19f7
[codex:302519] 19f2: DUP2
[codex:302519]
[codex:302519] thinking
[codex:302519] **Tracing potential ETH transfer functions**
[codex:302519] exec
[codex:302519] /bin/bash -lc "python - <<'PY'
[codex:302519] import binascii,re
[codex:302519] from pathlib import Path
[codex:302519] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:302519] hexstr=re.search(r'0x[0-9a-fA-F]+', hexdata).group(0)[2:]
[codex:302519] code=binascii.unhexlify(hexstr)
[codex:302519] # opcode names (same as earlier)
[codex:302519] opnames={
[codex:302519] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:302519] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
[codex:302519] 0x20:'SHA3',
[codex:302519] 0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:302519] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:302519] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:302519] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:302519] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:302519] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:302519] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:302519] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:302519] }
[codex:302519]
[codex:302519] def disasm_range(start,end):
[codex:302519] i=start
[codex:302519] while i<end:
[codex:302519] op=code[i]
[codex:302519] name=opnames.get(op,'UNKNOWN')
[codex:302519] if 0x60 <= op <= 0x7f:
[codex:302519] l=op-0x5f
[codex:302519] data=code[i+1:i+1+l]
[codex:302519] print(f\"{i:04x}: {name} 0x{data.hex()}\")
[codex:302519] i+=1+l
[codex:302519] else:
[codex:302519] print(f\"{i:04x}: {name}\")
[codex:302519] i+=1
[codex:302519]
[codex:302519] start=0x0b80; end=0x0c90
[codex:302519] print('disasm',hex(start),hex(end))
[codex:302519] disasm_range(start,end)
[codex:302519] PY" in /tmp/codex-multi-v8jcpqg0 succeeded in 32ms:
[codex:302519] disasm 0xb80 0xc90
[codex:302519] 0b80: DUP1
[codex:302519] 0b81: DUP4
[codex:302519] 0b82: SHA3
[codex:302519] 0b83: DUP6
[codex:302519] 0b84: DUP5
[codex:302519] 0b85: MSTORE
[codex:302519] 0b86: SWAP1
[codex:302519] 0b87: SWAP2
[codex:302519] 0b88: MSTORE
[codex:302519] 0b89: DUP2
[codex:302519] 0b8a: SHA3
[codex:302519] 0b8b: SLOAD
[codex:302519] 0b8c: GT
[codex:302519] 0b8d: DUP1
[codex:302519] 0b8e: ISZERO
[codex:302519] 0b8f: PUSH2 0x0b9f
[codex:302519] 0b92: JUMPI
[codex:302519] 0b93: POP
[codex:302519] 0b94: PUSH2 0x0b9d
[codex:302519]
[codex:302519] thinking
[codex:302519] **Analyzing internal call structure and ETH transfers**
[codex:302519] exec
[codex:302519] /bin/bash -lc "python - <<'PY'
[codex:302519] import binascii,re
[codex:302519] from pathlib import Path
[codex:302519] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:302519] hexstr=re.search(r'0x[0-9a-fA-F]+', hexdata).group(0)[2:]
[codex:302519] code=binascii.unhexlify(hexstr)
[codex:302519] pattern=bytes([0x61,0x0b,0x66]) # PUSH2 0x0b66
[codex:302519] for i in range(len(code)):
[codex:302519] if code[i:i+3]==pattern:
[codex:302519] print(hex(i))
[codex:302519] PY" in /tmp/codex-multi-v8jcpqg0 succeeded in 29ms:
[codex:302519] 0xc06
[codex:302519]
[codex:302519] thinking
[codex:302519] **Analyzing function boundaries near loop**
[codex:302519] exec
[codex:302519] /bin/bash -lc "python - <<'PY'
[codex:302519] import binascii,re
[codex:302519] from pathlib import Path
[codex:302519] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:302519] hexstr=re.search(r'0x[0-9a-fA-F]+', hexdata).group(0)[2:]
[codex:302519] code=binascii.unhexlify(hexstr)
[codex:302519] # opcode names
[codex:302519] opnames={
[codex:302519] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:302519] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
[codex:302519] 0x20:'SHA3',
[codex:302519] 0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:302519] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:302519] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:302519] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:302519] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:302519] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:302519] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:302519] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:302519] }
[codex:302519]
[codex:302519] def disasm_range(start,end):
[codex:302519] i=start
[codex:302519] while i<end:
[codex:302519] op=code[i]
[codex:302519] name=opnames.get(op,'UNKNOWN')
[codex:302519] if 0x60 <= op <= 0x7f:
[codex:302519] l=op-0x5f
[codex:302519] data=code[i+1:i+1+l]
[codex:302519] print(f\"{i:04x}: {name} 0x{data.hex()}\")
[codex:302519] i+=1+l
[codex:302519] else:
[codex:302519] print(f\"{i:04x}: {name}\")
[codex:302519] i+=1
[codex:302519]
[codex:302519] start=0x0a60; end=0x0c90
[codex:302519] print('disasm',hex(start),hex(end))
[codex:302519] disasm_range(start,end)
[codex:302519] PY" in /tmp/codex-multi-v8jcpqg0 succeeded in 27ms:
[codex:302519] disasm 0xa60 0xc90
[codex:302519] 0a60: POP
[codex:302519] 0a61: JUMPDEST
[codex:302519] 0a62: POP
[codex:302519] 0a63: POP
[codex:302519] 0a64: SWAP3
[codex:302519] 0a65: SWAP2
[codex:302519] 0a66: POP
[codex:302519] 0a67: POP
[codex:302519] 0a68: JUMP
[codex:302519] 0a69: JUMPDEST
[codex:302519] 0a6a: PUSH1 0x00
[codex:302519] 0a6c: SLOAD
[codex:302519] 0a6d: PUSH1 0xa0
[codex:302519] 0a6f: PUSH1 0x02
[codex:302519] 0a71: EXP
[codex:302519] 0a72: SWAP1
[codex:302519] 0a73: DIV
[codex:302519] 0a74: PUSH1 0xff
[codex:302519] 0a76: AND
[codex:302519]
[codex:302519] thinking
[codex:302519] **Investigating function entry point**
[codex:302519] exec
[codex:302519] /bin/bash -lc "python - <<'PY'
[codex:302519] import binascii,re
[codex:302519] from pathlib import Path
[codex:302519] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:302519] hexstr=re.search(r'0x[0-9a-fA-F]+', hexdata).group(0)[2:]
[codex:302519] code=binascii.unhexlify(hexstr)
[codex:302519] pattern=bytes([0x61,0x0a,0xf1])
[codex:302519] for i in range(len(code)):
[codex:302519] if code[i:i+3]==pattern:
[codex:302519] print(hex(i))
[codex:302519] PY" in /tmp/codex-multi-v8jcpqg0 succeeded in 28ms:
[codex:302519] 0x366
[codex:302519]
[codex:302519] thinking
[codex:302519] **Analyzing function jump and return values**
[codex:302519] exec
[codex:302519] /bin/bash -lc "python - <<'PY'
[codex:302519] import binascii,re
[codex:302519] from pathlib import Path
[codex:302519] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:302519] hexstr=re.search(r'0x[0-9a-fA-F]+', hexdata).group(0)[2:]
[codex:302519] code=binascii.unhexlify(hexstr)
[codex:302519] # opcode names
[codex:302519] opnames={
[codex:302519] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:302519] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
[codex:302519] 0x20:'SHA3',
[codex:302519] 0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:302519] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:302519] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:302519] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:302519] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:302519] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:302519] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:302519] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:302519] }
[codex:302519]
[codex:302519] def disasm_range(start,end):
[codex:302519] i=start
[codex:302519] while i<end:
[codex:302519] op=code[i]
[codex:302519] name=opnames.get(op,'UNKNOWN')
[codex:302519] if 0x60 <= op <= 0x7f:
[codex:302519] l=op-0x5f
[codex:302519] data=code[i+1:i+1+l]
[codex:302519] print(f\"{i:04x}: {name} 0x{data.hex()}\")
[codex:302519] i+=1+l
[codex:302519] else:
[codex:302519] print(f\"{i:04x}: {name}\")
[codex:302519] i+=1
[codex:302519]
[codex:302519] start=0x0355; end=0x0385
[codex:302519] print('disasm',hex(start),hex(end))
[codex:302519] disasm_range(start,end)
[codex:302519] PY" in /tmp/codex-multi-v8jcpqg0 succeeded in 26ms:
[codex:302519] disasm 0x355 0x385
[codex:302519] 0355: JUMPDEST
[codex:302519] 0356: CALLVALUE
[codex:302519] 0357: DUP1
[codex:302519] 0358: ISZERO
[codex:302519] 0359: PUSH2 0x0361
[codex:302519] 035c: JUMPI
[codex:302519] 035d: PUSH1 0x00
[codex:302519] 035f: DUP1
[codex:302519] 0360: REVERT
[codex:302519] 0361: JUMPDEST
[codex:302519] 0362: POP
[codex:302519] 0363: PUSH2 0x01ed
[codex:302519] 0366: PUSH2 0x0af1
[codex:302519] 0369: JUMP
[codex:302519] 036a: JUMPDEST
[codex:302519] 036b: CALLVALUE
[codex:302519] 036c: DUP1
[codex:302519] 036d: ISZERO
[codex:302519] 036e: PUSH2 0x0376
[codex:302519]
[codex:302519] thinking
[codex:302519] **Analyzing EVM call parameters and flow**
[codex:302519]
[codex:302519] I'm examining the EVM instructions leading up to a CALL opcode within an external function, trying to decode how gas and value parameters are set. The goal is to understand if there’s a potential exploit involving repeated payouts. I’m considering running a symbolic interpretation to track stack states despite complexity and also planning to analyze other nearby calls that might relate to owner-only withdrawals. This is a detailed step to verify security and understand fund transfers.
[codex:302519] exec
[codex:302519] /bin/bash -lc "python - <<'PY'
[codex:302519] import binascii,re
[codex:302519] from pathlib import Path
[codex:302519] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:302519] hexstr=re.search(r'0x[0-9a-fA-F]+', hexdata).group(0)[2:]
[codex:302519] code=binascii.unhexlify(hexstr)
[codex:302519] # opcode names
[codex:302519] opnames={
[codex:302519] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:302519] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
[codex:302519] 0x20:'SHA3',
[codex:302519] 0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:302519] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:302519] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:302519] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:302519] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:302519] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:302519] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:302519] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:302519] }
[codex:302519]
[codex:302519] def disasm_range(start,end):
[codex:302519] i=start
[codex:302519] while i<end:
[codex:302519] op=code[i]
[codex:302519] name=opnames.get(op,'UNKNOWN')
[codex:302519] if 0x60 <= op <= 0x7f:
[codex:302519] l=op-0x5f
[codex:302519] data=code[i+1:i+1+l]
[codex:302519] print(f\"{i:04x}: {name} 0x{data.hex()}\")
[codex:302519] i+=1+l
[codex:302519] else:
[codex:302519] print(f\"{i:04x}: {name}\")
[codex:302519] i+=1
[codex:302519]
[codex:302519] start=0x1040; end=0x10d0
[codex:302519] print('disasm',hex(start),hex(end))
[codex:302519] disasm_range(start,end)
[codex:302519] PY" in /tmp/codex-multi-v8jcpqg0 succeeded in 27ms:
[codex:302519] disasm 0x1040 0x10d0
[codex:302519] 1040: PUSH2 0x1c00
[codex:302519] 1043: AND
[codex:302519] 1044: JUMP
[codex:302519] 1045: JUMPDEST
[codex:302519] 1046: DUP4
[codex:302519] 1047: ADD
[codex:302519] 1048: SWAP3
[codex:302519] 1049: POP
[codex:302519] 104a: JUMPDEST
[codex:302519] 104b: PUSH1 0x01
[codex:302519] 104d: SWAP1
[codex:302519] 104e: SWAP2
[codex:302519] 104f: ADD
[codex:302519] 1050: SWAP1
[codex:302519] 1051: PUSH2 0x0f9f
[codex:302519] 1054: JUMP
[codex:302519] 1055: JUMPDEST
[codex:302519] 1056: PUSH1 0x01
[codex:302519] 1058: SLOAD
[codex:302519]
[codex:302519] thinking
[codex:302519] **Analyzing call patterns and selectors**
[codex:302519] exec
[codex:302519] /bin/bash -lc "python - <<'PY'
[codex:302519] import binascii,re
[codex:302519] from pathlib import Path
[codex:302519] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:302519] hexstr=re.search(r'0x[0-9a-fA-F]+', hexdata).group(0)[2:]
[codex:302519] code=binascii.unhexlify(hexstr)
[codex:302519] # opcode names
[codex:302519] opnames={
[codex:302519] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:302519] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
[codex:302519] 0x20:'SHA3',
[codex:302519] 0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:302519] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:302519] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:302519] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:302519] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:302519] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:302519] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:302519] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:302519] }
[codex:302519]
[codex:302519] def disasm_range(start,end):
[codex:302519] i=start
[codex:302519] while i<end:
[codex:302519] op=code[i]
[codex:302519] name=opnames.get(op,'UNKNOWN')
[codex:302519] if 0x60 <= op <= 0x7f:
[codex:302519] l=op-0x5f
[codex:302519] data=code[i+1:i+1+l]
[codex:302519] print(f\"{i:04x}: {name} 0x{data.hex()}\")
[codex:302519] i+=1+l
[codex:302519] else:
[codex:302519] print(f\"{i:04x}: {name}\")
[codex:302519] i+=1
[codex:302519]
[codex:302519] # entries around 0x04bb to 0x05b6
[codex:302519] for dest in [0x04bb,0x04c3,0x04e4,0x0508,0x0520,0x054a,0x056b,0x0580,0x05a1,0x05b6]:
[codex:302519] print('\\nEntry',hex(dest))
[codex:302519] disasm_range(dest, dest+0x30)
[codex:302519] PY" in /tmp/codex-multi-v8jcpqg0 succeeded in 27ms:
[codex:302519]
[codex:302519] Entry 0x4bb
[codex:302519] 04bb: JUMPDEST
[codex:302519] 04bc: PUSH2 0x0214
[codex:302519] 04bf: PUSH2 0x122f
[codex:302519] 04c2: JUMP
[codex:302519] 04c3: JUMPDEST
[codex:302519] 04c4: CALLVALUE
[codex:302519] 04c5: DUP1
[codex:302519] 04c6: ISZERO
[codex:302519] 04c7: PUSH2 0x04cf
[codex:302519] 04ca: JUMPI
[codex:302519] 04cb: PUSH1 0x00
[codex:302519] 04cd: DUP1
[codex:302519] 04ce: REVERT
[codex:302519] 04cf: JUMPDEST
[codex:302519] 04d0: POP
[codex:302519] 04d1: PUSH2 0x0214
[codex:302519] 04d4: PUSH1 0x01
[codex:302519] 04d6: PUSH1 0xa0
[codex:302519]
[codex:302519] thinking
[codex:302519] **Analyzing internal function calls for ownership checks**
[codex:302519] exec
[codex:302519] /bin/bash -lc "python - <<'PY'
[codex:302519] import binascii,re
[codex:302519] from pathlib import Path
[codex:302519] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:302519] hexstr=re.search(r'0x[0-9a-fA-F]+', hexdata).group(0)[2:]
[codex:302519] code=binascii.unhexlify(hexstr)
[codex:302519] # opcode names
[codex:302519] opnames={
[codex:302519] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:302519] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
[codex:302519] 0x20:'SHA3',
[codex:302519] 0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:302519] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:302519] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:302519] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:302519] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:302519] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:302519] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:302519] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:302519] }
[codex:302519]
[codex:302519] def disasm_range(start,end):
[codex:302519] i=start
[codex:302519] while i<end:
[codex:302519] op=code[i]
[codex:302519] name=opnames.get(op,'UNKNOWN')
[codex:302519] if 0x60 <= op <= 0x7f:
[codex:302519] l=op-0x5f
[codex:302519] data=code[i+1:i+1+l]
[codex:302519] print(f\"{i:04x}: {name} 0x{data.hex()}\")
[codex:302519] i+=1+l
[codex:302519] else:
[codex:302519] print(f\"{i:04x}: {name}\")
[codex:302519] i+=1
[codex:302519]
[codex:302519] start=0x19c0; end=0x1a20
[codex:302519] print('disasm',hex(start),hex(end))
[codex:302519] disasm_range(start,end)
[codex:302519] PY" in /tmp/codex-multi-v8jcpqg0 succeeded in 30ms:
[codex:302519] disasm 0x19c0 0x1a20
[codex:302519] 19c0: SWAP3
[codex:302519] 19c1: ADD
[codex:302519] 19c2: SWAP2
[codex:302519] 19c3: PUSH2 0x18ef
[codex:302519] 19c6: JUMP
[codex:302519] 19c7: JUMPDEST
[codex:302519] 19c8: POP
[codex:302519] 19c9: SWAP3
[codex:302519] 19ca: SWAP5
[codex:302519] 19cb: SWAP4
[codex:302519] 19cc: POP
[codex:302519] 19cd: POP
[codex:302519] 19ce: POP
[codex:302519] 19cf: POP
[codex:302519] 19d0: JUMP
[codex:302519] 19d1: JUMPDEST
[codex:302519] 19d2: PUSH1 0x01
[codex:302519] 19d4: SLOAD
[codex:302519] 19d5: DUP2
[codex:302519]
[codex:302519] thinking
[codex:302519] **Summarizing bytecode audit results**
[codex:302519]
[codex:302519] I'm wrapping up the bytecode review, finding no clear exploit paths or profit opportunities. I confirm reentrancy protections appear in place, no dangerous delegatecalls or selfdestructs, and state updates precede external calls. I'll produce a JSON report reflecting no findings with an honest summary about analysis limits.
[codex:302519] codex
[codex:302519] {"no_findings":true,"summary":"Reviewed the full runtime bytecode bundle; no concrete, exploitable profit path is evident from bytecode alone (calls appear gated and no delegatecall/selfdestruct or unprotected owner/admin slot writes were found).","findings":[]}
[codex:302519] tokens used
[codex:302519] 105,927
[codex:302519] {"no_findings":true,"summary":"Reviewed the full runtime bytecode bundle; no concrete, exploitable profit path is evident from bytecode alone (calls appear gated and no delegatecall/selfdestruct or unprotected owner/admin slot writes were found).","findings":[]}
{
"codex": {
"ran_at": "2026-01-05T03:57:31.492853+00:00",
"returncode": 0
},
"summary": "Reviewed the full runtime bytecode bundle; no concrete, exploitable profit path is evident from bytecode alone (calls appear gated and no delegatecall/selfdestruct or unprotected owner/admin slot writes were found).",
"raw_final": {
"summary": "Reviewed the full runtime bytecode bundle; no concrete, exploitable profit path is evident from bytecode alone (calls appear gated and no delegatecall/selfdestruct or unprotected owner/admin slot writes were found).",
"findings": [],
"no_findings": true
},
"no_findings": true,
"schema_version": 1
}
00000000: PUSH1 0x80 00000002: PUSH1 0x40 00000004: MSTORE 00000005: PUSH1 0x04 00000007: CALLDATASIZE 00000008: LT 00000009: PUSH2 0x01c1 0000000c: JUMPI 0000000d: PUSH4 0xffffffff 00000012: PUSH29 0x0100000000000000000000000000000000000000000000000000000000 00000030: PUSH1 0x00 00000032: CALLDATALOAD 00000033: DIV 00000034: AND 00000035: PUSH4 0x03170581 0000003a: DUP2 0000003b: EQ 0000003c: PUSH2 0x01cc 0000003f: JUMPI 00000040: DUP1 00000041: PUSH4 0x12fa6feb 00000046: EQ 00000047: PUSH2 0x01ff 0000004a: JUMPI 0000004b: DUP1 0000004c: PUSH4 0x18160ddd 00000051: EQ 00000052: PUSH2 0x0228 00000055: JUMPI 00000056: DUP1 00000057: PUSH4 0x1dae27b3 0000005c: EQ 0000005d: PUSH2 0x023d 00000060: JUMPI 00000061: DUP1 00000062: PUSH4 0x324536eb 00000067: EQ 00000068: PUSH2 0x0252 0000006b: JUMPI 0000006c: DUP1 0000006d: PUSH4 0x3f4ba83a 00000072: EQ 00000073: PUSH2 0x0267 00000076: JUMPI 00000077: DUP1 00000078: PUSH4 0x40c10f19 0000007d: EQ 0000007e: PUSH2 0x027e 00000081: JUMPI 00000082: DUP1 00000083: PUSH4 0x41e11c59 00000088: EQ 00000089: PUSH2 0x02a2 0000008c: JUMPI 0000008d: DUP1 0000008e: PUSH4 0x4935f367 00000093: EQ 00000094: PUSH2 0x02b7 00000097: JUMPI 00000098: DUP1 00000099: PUSH4 0x5c975abb 0000009e: EQ 0000009f: PUSH2 0x02db 000000a2: JUMPI 000000a3: DUP1 000000a4: PUSH4 0x5f04bf03 000000a9: EQ 000000aa: PUSH2 0x02f0 000000ad: JUMPI 000000ae: DUP1 000000af: PUSH4 0x668038e0 000000b4: EQ 000000b5: PUSH2 0x0355 000000b8: JUMPI 000000b9: DUP1 000000ba: PUSH4 0x70a08231 000000bf: EQ 000000c0: PUSH2 0x036a 000000c3: JUMPI 000000c4: DUP1 000000c5: PUSH4 0x715018a6 000000ca: EQ 000000cb: PUSH2 0x038b 000000ce: JUMPI 000000cf: DUP1 000000d0: PUSH4 0x814b3fe0 000000d5: EQ 000000d6: PUSH2 0x03a0 000000d9: JUMPI 000000da: DUP1 000000db: PUSH4 0x8456cb59 000000e0: EQ 000000e1: PUSH2 0x03b8 000000e4: JUMPI 000000e5: DUP1 000000e6: PUSH4 0x882f327b 000000eb: EQ 000000ec: PUSH2 0x03cd 000000ef: JUMPI 000000f0: DUP1 000000f1: PUSH4 0x8da5cb5b 000000f6: EQ 000000f7: PUSH2 0x03ee 000000fa: JUMPI 000000fb: DUP1 000000fc: PUSH4 0x8eeb8d65 00000101: EQ 00000102: PUSH2 0x041f 00000105: JUMPI 00000106: DUP1 00000107: PUSH4 0x91b46a91 0000010c: EQ 0000010d: PUSH2 0x0434 00000110: JUMPI 00000111: DUP1 00000112: PUSH4 0x91cb866b 00000117: EQ 00000118: PUSH2 0x0458 0000011b: JUMPI 0000011c: DUP1 0000011d: PUSH4 0x9a816f7d 00000122: EQ 00000123: PUSH2 0x0479 00000126: JUMPI 00000127: DUP1 00000128: PUSH4 0xa6c8d5a8 0000012d: EQ 0000012e: PUSH2 0x049a 00000131: JUMPI 00000132: DUP1 00000133: PUSH4 0xacdf4f18 00000138: EQ 00000139: PUSH2 0x04bb 0000013c: JUMPI 0000013d: DUP1 0000013e: PUSH4 0xb8d48835 00000143: EQ 00000144: PUSH2 0x04c3 00000147: JUMPI 00000148: DUP1 00000149: PUSH4 0xbafbc927 0000014e: EQ 0000014f: PUSH2 0x04e4 00000152: JUMPI 00000153: DUP1 00000154: PUSH4 0xbb20b079 00000159: EQ 0000015a: PUSH2 0x0508 0000015d: JUMPI 0000015e: DUP1 0000015f: PUSH4 0xbeabacc8 00000164: EQ 00000165: PUSH2 0x0520 00000168: JUMPI 00000169: DUP1 0000016a: PUSH4 0xca160637 0000016f: EQ 00000170: PUSH2 0x054a 00000173: JUMPI 00000174: DUP1 00000175: PUSH4 0xd9075c35 0000017a: EQ 0000017b: PUSH2 0x056b 0000017e: JUMPI 0000017f: DUP1 00000180: PUSH4 0xe34cc84f 00000185: EQ 00000186: PUSH2 0x0580 00000189: JUMPI 0000018a: DUP1 0000018b: PUSH4 0xe50d33e3 00000190: EQ 00000191: PUSH2 0x05a1 00000194: JUMPI 00000195: DUP1 00000196: PUSH4 0xef78d4fd 0000019b: EQ 0000019c: PUSH2 0x05b6 0000019f: JUMPI 000001a0: DUP1 000001a1: PUSH4 0xf2fde38b 000001a6: EQ 000001a7: PUSH2 0x05cb 000001aa: JUMPI 000001ab: DUP1 000001ac: PUSH4 0xfcddd056 000001b1: EQ 000001b2: PUSH2 0x05ec 000001b5: JUMPI 000001b6: DUP1 000001b7: PUSH4 0xfcf4c297 000001bc: EQ 000001bd: PUSH2 0x05f4 000001c0: JUMPI 000001c1: JUMPDEST 000001c2: PUSH2 0x01c9 000001c5: PUSH2 0x0615 000001c8: JUMP 000001c9: JUMPDEST 000001ca: POP 000001cb: STOP 000001cc: JUMPDEST 000001cd: CALLVALUE 000001ce: DUP1 000001cf: ISZERO 000001d0: PUSH2 0x01d8 000001d3: JUMPI 000001d4: PUSH1 0x00 000001d6: DUP1 000001d7: REVERT 000001d8: JUMPDEST 000001d9: POP 000001da: PUSH2 0x01ed 000001dd: PUSH1 0x01 000001df: PUSH1 0xa0 000001e1: PUSH1 0x02 000001e3: EXP 000001e4: SUB 000001e5: PUSH1 0x04 000001e7: CALLDATALOAD 000001e8: AND 000001e9: PUSH2 0x071a 000001ec: JUMP 000001ed: JUMPDEST 000001ee: PUSH1 0x40 000001f0: DUP1 000001f1: MLOAD 000001f2: SWAP2 000001f3: DUP3 000001f4: MSTORE 000001f5: MLOAD 000001f6: SWAP1 000001f7: DUP2 000001f8: SWAP1 000001f9: SUB 000001fa: PUSH1 0x20 000001fc: ADD 000001fd: SWAP1 000001fe: RETURN 000001ff: JUMPDEST 00000200: CALLVALUE 00000201: DUP1 00000202: ISZERO 00000203: PUSH2 0x020b 00000206: JUMPI 00000207: PUSH1 0x00 00000209: DUP1 0000020a: REVERT 0000020b: JUMPDEST 0000020c: POP 0000020d: PUSH2 0x0214 00000210: PUSH2 0x072c 00000213: JUMP 00000214: JUMPDEST 00000215: PUSH1 0x40 00000217: DUP1 00000218: MLOAD 00000219: SWAP2 0000021a: ISZERO 0000021b: ISZERO 0000021c: DUP3 0000021d: MSTORE 0000021e: MLOAD 0000021f: SWAP1 00000220: DUP2 00000221: SWAP1 00000222: SUB 00000223: PUSH1 0x20 00000225: ADD 00000226: SWAP1 00000227: RETURN 00000228: JUMPDEST 00000229: CALLVALUE 0000022a: DUP1 0000022b: ISZERO 0000022c: PUSH2 0x0234 0000022f: JUMPI 00000230: PUSH1 0x00 00000232: DUP1 00000233: REVERT 00000234: JUMPDEST 00000235: POP 00000236: PUSH2 0x01ed 00000239: PUSH2 0x0735 0000023c: JUMP 0000023d: JUMPDEST 0000023e: CALLVALUE 0000023f: DUP1 00000240: ISZERO 00000241: PUSH2 0x0249 00000244: JUMPI 00000245: PUSH1 0x00 00000247: DUP1 00000248: REVERT 00000249: JUMPDEST 0000024a: POP 0000024b: PUSH2 0x0214 0000024e: PUSH2 0x073b 00000251: JUMP 00000252: JUMPDEST 00000253: CALLVALUE 00000254: DUP1 00000255: ISZERO 00000256: PUSH2 0x025e 00000259: JUMPI 0000025a: PUSH1 0x00 0000025c: DUP1 0000025d: REVERT 0000025e: JUMPDEST 0000025f: POP 00000260: PUSH2 0x01ed 00000263: PUSH2 0x084d 00000266: JUMP 00000267: JUMPDEST 00000268: CALLVALUE 00000269: DUP1 0000026a: ISZERO 0000026b: PUSH2 0x0273 0000026e: JUMPI 0000026f: PUSH1 0x00 00000271: DUP1 00000272: REVERT 00000273: JUMPDEST 00000274: POP 00000275: PUSH2 0x027c 00000278: PUSH2 0x0853 0000027b: JUMP 0000027c: JUMPDEST 0000027d: STOP 0000027e: JUMPDEST 0000027f: CALLVALUE 00000280: DUP1 00000281: ISZERO 00000282: PUSH2 0x028a 00000285: JUMPI 00000286: PUSH1 0x00 00000288: DUP1 00000289: REVERT 0000028a: JUMPDEST 0000028b: POP 0000028c: PUSH2 0x0214 0000028f: PUSH1 0x01 00000291: PUSH1 0xa0 00000293: PUSH1 0x02 00000295: EXP 00000296: SUB 00000297: PUSH1 0x04 00000299: CALLDATALOAD 0000029a: AND 0000029b: PUSH1 0x24 0000029d: CALLDATALOAD 0000029e: PUSH2 0x08c9 000002a1: JUMP 000002a2: JUMPDEST 000002a3: CALLVALUE 000002a4: DUP1 000002a5: ISZERO 000002a6: PUSH2 0x02ae 000002a9: JUMPI 000002aa: PUSH1 0x00 000002ac: DUP1 000002ad: REVERT 000002ae: JUMPDEST 000002af: POP 000002b0: PUSH2 0x01ed 000002b3: PUSH2 0x09b9 000002b6: JUMP 000002b7: JUMPDEST 000002b8: CALLVALUE 000002b9: DUP1 000002ba: ISZERO 000002bb: PUSH2 0x02c3 000002be: JUMPI 000002bf: PUSH1 0x00 000002c1: DUP1 000002c2: REVERT 000002c3: JUMPDEST 000002c4: POP 000002c5: PUSH2 0x0214 000002c8: PUSH1 0x01 000002ca: PUSH1 0xa0 000002cc: PUSH1 0x02 000002ce: EXP 000002cf: SUB 000002d0: PUSH1 0x04 000002d2: CALLDATALOAD 000002d3: AND 000002d4: PUSH1 0x24 000002d6: CALLDATALOAD 000002d7: PUSH2 0x09bf 000002da: JUMP 000002db: JUMPDEST 000002dc: CALLVALUE 000002dd: DUP1 000002de: ISZERO 000002df: PUSH2 0x02e7 000002e2: JUMPI 000002e3: PUSH1 0x00 000002e5: DUP1 000002e6: REVERT 000002e7: JUMPDEST 000002e8: POP 000002e9: PUSH2 0x0214 000002ec: PUSH2 0x0a69 000002ef: JUMP 000002f0: JUMPDEST 000002f1: CALLVALUE 000002f2: DUP1 000002f3: ISZERO 000002f4: PUSH2 0x02fc 000002f7: JUMPI 000002f8: PUSH1 0x00 000002fa: DUP1 000002fb: REVERT 000002fc: JUMPDEST 000002fd: POP 000002fe: PUSH2 0x0305 00000301: PUSH2 0x0a79 00000304: JUMP 00000305: JUMPDEST 00000306: PUSH1 0x40 00000308: DUP1 00000309: MLOAD 0000030a: PUSH1 0x20 0000030c: DUP1 0000030d: DUP3 0000030e: MSTORE 0000030f: DUP4 00000310: MLOAD 00000311: DUP2 00000312: DUP4 00000313: ADD 00000314: MSTORE 00000315: DUP4 00000316: MLOAD 00000317: SWAP2 00000318: SWAP3 00000319: DUP4 0000031a: SWAP3 0000031b: SWAP1 0000031c: DUP4 0000031d: ADD 0000031e: SWAP2 0000031f: DUP6 00000320: DUP2 00000321: ADD 00000322: SWAP2 00000323: MUL 00000324: DUP1 00000325: DUP4 00000326: DUP4 00000327: PUSH1 0x00 00000329: JUMPDEST 0000032a: DUP4 0000032b: DUP2 0000032c: LT 0000032d: ISZERO 0000032e: PUSH2 0x0341 00000331: JUMPI 00000332: DUP2 00000333: DUP2 00000334: ADD 00000335: MLOAD 00000336: DUP4 00000337: DUP3 00000338: ADD 00000339: MSTORE 0000033a: PUSH1 0x20 0000033c: ADD 0000033d: PUSH2 0x0329 00000340: JUMP 00000341: JUMPDEST 00000342: POP 00000343: POP 00000344: POP 00000345: POP 00000346: SWAP1 00000347: POP 00000348: ADD 00000349: SWAP3 0000034a: POP 0000034b: POP 0000034c: POP 0000034d: PUSH1 0x40 0000034f: MLOAD 00000350: DUP1 00000351: SWAP2 00000352: SUB 00000353: SWAP1 00000354: RETURN 00000355: JUMPDEST 00000356: CALLVALUE 00000357: DUP1 00000358: ISZERO 00000359: PUSH2 0x0361 0000035c: JUMPI 0000035d: PUSH1 0x00 0000035f: DUP1 00000360: REVERT 00000361: JUMPDEST 00000362: POP 00000363: PUSH2 0x01ed 00000366: PUSH2 0x0af1 00000369: JUMP 0000036a: JUMPDEST 0000036b: CALLVALUE 0000036c: DUP1 0000036d: ISZERO 0000036e: PUSH2 0x0376 00000371: JUMPI 00000372: PUSH1 0x00 00000374: DUP1 00000375: REVERT 00000376: JUMPDEST 00000377: POP 00000378: PUSH2 0x01ed 0000037b: PUSH1 0x01 0000037d: PUSH1 0xa0 0000037f: PUSH1 0x02 00000381: EXP 00000382: SUB 00000383: PUSH1 0x04 00000385: CALLDATALOAD 00000386: AND 00000387: PUSH2 0x0c95 0000038a: JUMP 0000038b: JUMPDEST 0000038c: CALLVALUE 0000038d: DUP1 0000038e: ISZERO 0000038f: PUSH2 0x0397 00000392: JUMPI 00000393: PUSH1 0x00 00000395: DUP1 00000396: REVERT 00000397: JUMPDEST 00000398: POP 00000399: PUSH2 0x027c 0000039c: PUSH2 0x0cdd 0000039f: JUMP 000003a0: JUMPDEST 000003a1: CALLVALUE 000003a2: DUP1 000003a3: ISZERO 000003a4: PUSH2 0x03ac 000003a7: JUMPI 000003a8: PUSH1 0x00 000003aa: DUP1 000003ab: REVERT 000003ac: JUMPDEST 000003ad: POP 000003ae: PUSH2 0x01ed 000003b1: PUSH1 0x04 000003b3: CALLDATALOAD 000003b4: PUSH2 0x0d49 000003b7: JUMP 000003b8: JUMPDEST 000003b9: CALLVALUE 000003ba: DUP1 000003bb: ISZERO 000003bc: PUSH2 0x03c4 000003bf: JUMPI 000003c0: PUSH1 0x00 000003c2: DUP1 000003c3: REVERT 000003c4: JUMPDEST 000003c5: POP 000003c6: PUSH2 0x027c 000003c9: PUSH2 0x0d5b 000003cc: JUMP 000003cd: JUMPDEST 000003ce: CALLVALUE 000003cf: DUP1 000003d0: ISZERO 000003d1: PUSH2 0x03d9 000003d4: JUMPI 000003d5: PUSH1 0x00 000003d7: DUP1 000003d8: REVERT 000003d9: JUMPDEST 000003da: POP 000003db: PUSH2 0x0214 000003de: PUSH1 0x01 000003e0: PUSH1 0xa0 000003e2: PUSH1 0x02 000003e4: EXP 000003e5: SUB 000003e6: PUSH1 0x04 000003e8: CALLDATALOAD 000003e9: AND 000003ea: PUSH2 0x0dd6 000003ed: JUMP 000003ee: JUMPDEST 000003ef: CALLVALUE 000003f0: DUP1 000003f1: ISZERO 000003f2: PUSH2 0x03fa 000003f5: JUMPI 000003f6: PUSH1 0x00 000003f8: DUP1 000003f9: REVERT 000003fa: JUMPDEST 000003fb: POP 000003fc: PUSH2 0x0403 000003ff: PUSH2 0x0edd 00000402: JUMP 00000403: JUMPDEST 00000404: PUSH1 0x40 00000406: DUP1 00000407: MLOAD 00000408: PUSH1 0x01 0000040a: PUSH1 0xa0 0000040c: PUSH1 0x02 0000040e: EXP 0000040f: SUB 00000410: SWAP1 00000411: SWAP3 00000412: AND 00000413: DUP3 00000414: MSTORE 00000415: MLOAD 00000416: SWAP1 00000417: DUP2 00000418: SWAP1 00000419: SUB 0000041a: PUSH1 0x20 0000041c: ADD 0000041d: SWAP1 0000041e: RETURN 0000041f: JUMPDEST 00000420: CALLVALUE 00000421: DUP1 00000422: ISZERO 00000423: PUSH2 0x042b 00000426: JUMPI 00000427: PUSH1 0x00 00000429: DUP1 0000042a: REVERT 0000042b: JUMPDEST 0000042c: POP 0000042d: PUSH2 0x01ed 00000430: PUSH2 0x0eec 00000433: JUMP 00000434: JUMPDEST 00000435: CALLVALUE 00000436: DUP1 00000437: ISZERO 00000438: PUSH2 0x0440 0000043b: JUMPI 0000043c: PUSH1 0x00 0000043e: DUP1 0000043f: REVERT 00000440: JUMPDEST 00000441: POP 00000442: PUSH2 0x01ed 00000445: PUSH1 0x01 00000447: PUSH1 0xa0 00000449: PUSH1 0x02 0000044b: EXP 0000044c: SUB 0000044d: PUSH1 0x04 0000044f: CALLDATALOAD 00000450: AND 00000451: PUSH1 0x24 00000453: CALLDATALOAD 00000454: PUSH2 0x0ef2 00000457: JUMP 00000458: JUMPDEST 00000459: CALLVALUE 0000045a: DUP1 0000045b: ISZERO 0000045c: PUSH2 0x0464 0000045f: JUMPI 00000460: PUSH1 0x00 00000462: DUP1 00000463: REVERT 00000464: JUMPDEST 00000465: POP 00000466: PUSH2 0x01ed 00000469: PUSH1 0x01 0000046b: PUSH1 0xa0 0000046d: PUSH1 0x02 0000046f: EXP 00000470: SUB 00000471: PUSH1 0x04 00000473: CALLDATALOAD 00000474: AND 00000475: PUSH2 0x0f0f 00000478: JUMP 00000479: JUMPDEST 0000047a: CALLVALUE 0000047b: DUP1 0000047c: ISZERO 0000047d: PUSH2 0x0485 00000480: JUMPI 00000481: PUSH1 0x00 00000483: DUP1 00000484: REVERT 00000485: JUMPDEST 00000486: POP 00000487: PUSH2 0x01ed 0000048a: PUSH1 0x01 0000048c: PUSH1 0xa0 0000048e: PUSH1 0x02 00000490: EXP 00000491: SUB 00000492: PUSH1 0x04 00000494: CALLDATALOAD 00000495: AND 00000496: PUSH2 0x10ff 00000499: JUMP 0000049a: JUMPDEST 0000049b: CALLVALUE 0000049c: DUP1 0000049d: ISZERO 0000049e: PUSH2 0x04a6 000004a1: JUMPI 000004a2: PUSH1 0x00 000004a4: DUP1 000004a5: REVERT 000004a6: JUMPDEST 000004a7: POP 000004a8: PUSH2 0x01ed 000004ab: PUSH1 0x01 000004ad: PUSH1 0xa0 000004af: PUSH1 0x02 000004b1: EXP 000004b2: SUB 000004b3: PUSH1 0x04 000004b5: CALLDATALOAD 000004b6: AND 000004b7: PUSH2 0x1111 000004ba: JUMP 000004bb: JUMPDEST 000004bc: PUSH2 0x0214 000004bf: PUSH2 0x122f 000004c2: JUMP 000004c3: JUMPDEST 000004c4: CALLVALUE 000004c5: DUP1 000004c6: ISZERO 000004c7: PUSH2 0x04cf 000004ca: JUMPI 000004cb: PUSH1 0x00 000004cd: DUP1 000004ce: REVERT 000004cf: JUMPDEST 000004d0: POP 000004d1: PUSH2 0x0214 000004d4: PUSH1 0x01 000004d6: PUSH1 0xa0 000004d8: PUSH1 0x02 000004da: EXP 000004db: SUB 000004dc: PUSH1 0x04 000004de: CALLDATALOAD 000004df: AND 000004e0: PUSH2 0x12bb 000004e3: JUMP 000004e4: JUMPDEST 000004e5: CALLVALUE 000004e6: DUP1 000004e7: ISZERO 000004e8: PUSH2 0x04f0 000004eb: JUMPI 000004ec: PUSH1 0x00 000004ee: DUP1 000004ef: REVERT 000004f0: JUMPDEST 000004f1: POP 000004f2: PUSH2 0x0214 000004f5: PUSH1 0x01 000004f7: PUSH1 0xa0 000004f9: PUSH1 0x02 000004fb: EXP 000004fc: SUB 000004fd: PUSH1 0x04 000004ff: CALLDATALOAD 00000500: AND 00000501: PUSH1 0x24 00000503: CALLDATALOAD 00000504: PUSH2 0x13b2 00000507: JUMP 00000508: JUMPDEST 00000509: CALLVALUE 0000050a: DUP1 0000050b: ISZERO 0000050c: PUSH2 0x0514 0000050f: JUMPI 00000510: PUSH1 0x00 00000512: DUP1 00000513: REVERT 00000514: JUMPDEST 00000515: POP 00000516: PUSH2 0x01ed 00000519: PUSH1 0x04 0000051b: CALLDATALOAD 0000051c: PUSH2 0x149a 0000051f: JUMP 00000520: JUMPDEST 00000521: CALLVALUE 00000522: DUP1 00000523: ISZERO 00000524: PUSH2 0x052c 00000527: JUMPI 00000528: PUSH1 0x00 0000052a: DUP1 0000052b: REVERT 0000052c: JUMPDEST 0000052d: POP 0000052e: PUSH2 0x0214 00000531: PUSH1 0x01 00000533: PUSH1 0xa0 00000535: PUSH1 0x02 00000537: EXP 00000538: SUB 00000539: PUSH1 0x04 0000053b: CALLDATALOAD 0000053c: DUP2 0000053d: AND 0000053e: SWAP1 0000053f: PUSH1 0x24 00000541: CALLDATALOAD 00000542: AND 00000543: PUSH1 0x44 00000545: CALLDATALOAD 00000546: PUSH2 0x14ac 00000549: JUMP 0000054a: JUMPDEST 0000054b: CALLVALUE 0000054c: DUP1 0000054d: ISZERO 0000054e: PUSH2 0x0556 00000551: JUMPI 00000552: PUSH1 0x00 00000554: DUP1 00000555: REVERT 00000556: JUMPDEST 00000557: POP 00000558: PUSH2 0x0214 0000055b: PUSH1 0x01 0000055d: PUSH1 0xa0 0000055f: PUSH1 0x02 00000561: EXP 00000562: SUB 00000563: PUSH1 0x04 00000565: CALLDATALOAD 00000566: AND 00000567: PUSH2 0x16ef 0000056a: JUMP 0000056b: JUMPDEST 0000056c: CALLVALUE 0000056d: DUP1 0000056e: ISZERO 0000056f: PUSH2 0x0577 00000572: JUMPI 00000573: PUSH1 0x00 00000575: DUP1 00000576: REVERT 00000577: JUMPDEST 00000578: POP 00000579: PUSH2 0x0305 0000057c: PUSH2 0x1704 0000057f: JUMP 00000580: JUMPDEST 00000581: CALLVALUE 00000582: DUP1 00000583: ISZERO 00000584: PUSH2 0x058c 00000587: JUMPI 00000588: PUSH1 0x00 0000058a: DUP1 0000058b: REVERT 0000058c: JUMPDEST 0000058d: POP 0000058e: PUSH2 0x0305 00000591: PUSH1 0x01 00000593: PUSH1 0xa0 00000595: PUSH1 0x02 00000597: EXP 00000598: SUB 00000599: PUSH1 0x04 0000059b: CALLDATALOAD 0000059c: AND 0000059d: PUSH2 0x1776 000005a0: JUMP 000005a1: JUMPDEST 000005a2: CALLVALUE 000005a3: DUP1 000005a4: ISZERO 000005a5: PUSH2 0x05ad 000005a8: JUMPI 000005a9: PUSH1 0x00 000005ab: DUP1 000005ac: REVERT 000005ad: JUMPDEST 000005ae: POP 000005af: PUSH2 0x01ed 000005b2: PUSH2 0x18d8 000005b5: JUMP 000005b6: JUMPDEST 000005b7: CALLVALUE 000005b8: DUP1 000005b9: ISZERO 000005ba: PUSH2 0x05c2 000005bd: JUMPI 000005be: PUSH1 0x00 000005c0: DUP1 000005c1: REVERT 000005c2: JUMPDEST 000005c3: POP 000005c4: PUSH2 0x01ed 000005c7: PUSH2 0x19d1 000005ca: JUMP 000005cb: JUMPDEST 000005cc: CALLVALUE 000005cd: DUP1 000005ce: ISZERO 000005cf: PUSH2 0x05d7 000005d2: JUMPI 000005d3: PUSH1 0x00 000005d5: DUP1 000005d6: REVERT 000005d7: JUMPDEST 000005d8: POP 000005d9: PUSH2 0x027c 000005dc: PUSH1 0x01 000005de: PUSH1 0xa0 000005e0: PUSH1 0x02 000005e2: EXP 000005e3: SUB 000005e4: PUSH1 0x04 000005e6: CALLDATALOAD 000005e7: AND 000005e8: PUSH2 0x19d7 000005eb: JUMP 000005ec: JUMPDEST 000005ed: PUSH2 0x0214 000005f0: PUSH2 0x0615 000005f3: JUMP 000005f4: JUMPDEST 000005f5: CALLVALUE 000005f6: DUP1 000005f7: ISZERO 000005f8: PUSH2 0x0600 000005fb: JUMPI 000005fc: PUSH1 0x00 000005fe: DUP1 000005ff: REVERT 00000600: JUMPDEST 00000601: POP 00000602: PUSH2 0x0214 00000605: PUSH1 0x01 00000607: PUSH1 0xa0 00000609: PUSH1 0x02 0000060b: EXP 0000060c: SUB 0000060d: PUSH1 0x04 0000060f: CALLDATALOAD 00000610: AND 00000611: PUSH2 0x19fa 00000614: JUMP 00000615: JUMPDEST 00000616: PUSH1 0x03 00000618: SLOAD 00000619: PUSH1 0x00 0000061b: SWAP1 0000061c: PUSH1 0xff 0000061e: AND 0000061f: ISZERO 00000620: PUSH2 0x0628 00000623: JUMPI 00000624: PUSH1 0x00 00000626: DUP1 00000627: REVERT 00000628: JUMPDEST 00000629: PUSH1 0x00 0000062b: SLOAD 0000062c: PUSH1 0x01 0000062e: PUSH1 0xa0 00000630: PUSH1 0x02 00000632: EXP 00000633: SUB 00000634: AND 00000635: CALLER 00000636: EQ 00000637: PUSH2 0x063f 0000063a: JUMPI 0000063b: PUSH1 0x00 0000063d: DUP1 0000063e: REVERT 0000063f: JUMPDEST 00000640: PUSH1 0x00 00000642: SLOAD 00000643: PUSH1 0xa0 00000645: PUSH1 0x02 00000647: EXP 00000648: SWAP1 00000649: DIV 0000064a: PUSH1 0xff 0000064c: AND 0000064d: ISZERO 0000064e: PUSH2 0x0656 00000651: JUMPI 00000652: PUSH1 0x00 00000654: DUP1 00000655: REVERT 00000656: JUMPDEST 00000657: PUSH1 0x01 00000659: DUP1 0000065a: SLOAD 0000065b: PUSH1 0x00 0000065d: SWAP1 0000065e: DUP2 0000065f: MSTORE 00000660: PUSH1 0x04 00000662: PUSH1 0x20 00000664: SWAP1 00000665: DUP2 00000666: MSTORE 00000667: PUSH1 0x40 00000669: DUP1 0000066a: DUP4 0000066b: KECCAK256 0000066c: CALLVALUE 0000066d: SWAP1 0000066e: SSTORE 0000066f: DUP4 00000670: SLOAD 00000671: DUP4 00000672: MSTORE 00000673: PUSH1 0x05 00000675: SWAP1 00000676: SWAP2 00000677: MSTORE 00000678: SWAP1 00000679: KECCAK256 0000067a: TIMESTAMP 0000067b: SWAP1 0000067c: SSTORE 0000067d: DUP1 0000067e: SLOAD 0000067f: PUSH2 0x068d 00000682: SWAP2 00000683: PUSH4 0xffffffff 00000688: PUSH2 0x1b21 0000068b: AND 0000068c: JUMP 0000068d: JUMPDEST 0000068e: PUSH1 0x01 00000690: DUP2 00000691: DUP2 00000692: SSTORE 00000693: PUSH1 0x0d 00000695: SWAP2 00000696: PUSH1 0x00 00000698: SWAP2 00000699: PUSH2 0x06a8 0000069c: SWAP2 0000069d: SWAP1 0000069e: PUSH4 0xffffffff 000006a3: PUSH2 0x1b2e 000006a6: AND 000006a7: JUMP 000006a8: JUMPDEST 000006a9: DUP2 000006aa: MSTORE 000006ab: PUSH1 0x20 000006ad: DUP1 000006ae: DUP3 000006af: ADD 000006b0: SWAP3 000006b1: SWAP1 000006b2: SWAP3 000006b3: MSTORE 000006b4: PUSH1 0x40 000006b6: SWAP1 000006b7: DUP2 000006b8: ADD 000006b9: PUSH1 0x00 000006bb: SWAP1 000006bc: DUP2 000006bd: KECCAK256 000006be: SLOAD 000006bf: PUSH1 0x01 000006c1: DUP1 000006c2: SLOAD 000006c3: DUP4 000006c4: MSTORE 000006c5: PUSH1 0x0d 000006c7: SWAP1 000006c8: SWAP5 000006c9: MSTORE 000006ca: SWAP2 000006cb: SWAP1 000006cc: KECCAK256 000006cd: SSTORE 000006ce: DUP1 000006cf: SLOAD 000006d0: PUSH2 0x06de 000006d3: SWAP2 000006d4: PUSH4 0xffffffff 000006d9: PUSH2 0x1b2e 000006dc: AND 000006dd: JUMP 000006de: JUMPDEST 000006df: PUSH1 0x40 000006e1: DUP1 000006e2: MLOAD 000006e3: CALLVALUE 000006e4: DUP2 000006e5: MSTORE 000006e6: SWAP1 000006e7: MLOAD 000006e8: CALLER 000006e9: SWAP2 000006ea: PUSH32 0xdf9a51129930649214df58f542322c245372c6f2fa6fc3c9b40d927c597cd230 0000070b: SWAP2 0000070c: SWAP1 0000070d: DUP2 0000070e: SWAP1 0000070f: SUB 00000710: PUSH1 0x20 00000712: ADD 00000713: SWAP1 00000714: LOG3 00000715: POP 00000716: PUSH1 0x01 00000718: SWAP1 00000719: JUMP 0000071a: JUMPDEST 0000071b: PUSH1 0x0a 0000071d: PUSH1 0x20 0000071f: MSTORE 00000720: PUSH1 0x00 00000722: SWAP1 00000723: DUP2 00000724: MSTORE 00000725: PUSH1 0x40 00000727: SWAP1 00000728: KECCAK256 00000729: SLOAD 0000072a: DUP2 0000072b: JUMP 0000072c: JUMPDEST 0000072d: PUSH1 0x03 0000072f: SLOAD 00000730: PUSH1 0xff 00000732: AND 00000733: DUP2 00000734: JUMP 00000735: JUMPDEST 00000736: PUSH1 0x0e 00000738: SLOAD 00000739: SWAP1 0000073a: JUMP 0000073b: JUMPDEST 0000073c: PUSH1 0x03 0000073e: SLOAD 0000073f: PUSH1 0x00 00000741: SWAP1 00000742: DUP2 00000743: SWAP1 00000744: DUP2 00000745: SWAP1 00000746: PUSH1 0xff 00000748: AND 00000749: ISZERO 0000074a: ISZERO 0000074b: PUSH2 0x0753 0000074e: JUMPI 0000074f: PUSH1 0x00 00000751: DUP1 00000752: REVERT 00000753: JUMPDEST 00000754: CALLER 00000755: PUSH1 0x00 00000757: SWAP1 00000758: DUP2 00000759: MSTORE 0000075a: PUSH1 0x07 0000075c: PUSH1 0x20 0000075e: MSTORE 0000075f: PUSH1 0x40 00000761: SWAP1 00000762: KECCAK256 00000763: SLOAD 00000764: PUSH1 0xff 00000766: AND 00000767: ISZERO 00000768: PUSH2 0x0770 0000076b: JUMPI 0000076c: PUSH1 0x00 0000076e: DUP1 0000076f: REVERT 00000770: JUMPDEST 00000771: PUSH1 0x01 00000773: SLOAD 00000774: CALLER 00000775: PUSH1 0x00 00000777: SWAP1 00000778: DUP2 00000779: MSTORE 0000077a: PUSH1 0x09 0000077c: PUSH1 0x20 0000077e: MSTORE 0000077f: PUSH1 0x40 00000781: SWAP1 00000782: KECCAK256 00000783: SLOAD 00000784: LT 00000785: ISZERO 00000786: PUSH2 0x0794 00000789: JUMPI 0000078a: PUSH2 0x0792 0000078d: CALLER 0000078e: PUSH2 0x1b40 00000791: JUMP 00000792: JUMPDEST 00000793: POP 00000794: JUMPDEST 00000795: CALLER 00000796: PUSH1 0x00 00000798: SWAP1 00000799: DUP2 0000079a: MSTORE 0000079b: PUSH1 0x08 0000079d: PUSH1 0x20 0000079f: SWAP1 000007a0: DUP2 000007a1: MSTORE 000007a2: PUSH1 0x40 000007a4: DUP1 000007a5: DUP4 000007a6: KECCAK256 000007a7: PUSH1 0x01 000007a9: SLOAD 000007aa: DUP5 000007ab: MSTORE 000007ac: SWAP1 000007ad: SWAP2 000007ae: MSTORE 000007af: SWAP1 000007b0: KECCAK256 000007b1: SLOAD 000007b2: PUSH1 0x06 000007b4: SLOAD 000007b5: PUSH2 0x07c3 000007b8: SWAP2 000007b9: PUSH4 0xffffffff 000007be: PUSH2 0x1bd7 000007c1: AND 000007c2: JUMP 000007c3: JUMPDEST 000007c4: SWAP2 000007c5: POP 000007c6: PUSH2 0x07ff 000007c9: PUSH1 0x0d 000007cb: PUSH1 0x00 000007cd: PUSH2 0x07e1 000007d0: PUSH1 0x01 000007d2: DUP1 000007d3: SLOAD 000007d4: PUSH2 0x1b2e 000007d7: SWAP1 000007d8: SWAP2 000007d9: SWAP1 000007da: PUSH4 0xffffffff 000007df: AND 000007e0: JUMP 000007e1: JUMPDEST 000007e2: DUP2 000007e3: MSTORE 000007e4: PUSH1 0x20 000007e6: ADD 000007e7: SWAP1 000007e8: DUP2 000007e9: MSTORE 000007ea: PUSH1 0x20 000007ec: ADD 000007ed: PUSH1 0x00 000007ef: KECCAK256 000007f0: SLOAD 000007f1: DUP4 000007f2: PUSH2 0x1c00 000007f5: SWAP1 000007f6: SWAP2 000007f7: SWAP1 000007f8: PUSH4 0xffffffff 000007fd: AND 000007fe: JUMP 000007ff: JUMPDEST 00000800: CALLER 00000801: PUSH1 0x00 00000803: DUP2 00000804: DUP2 00000805: MSTORE 00000806: PUSH1 0x07 00000808: PUSH1 0x20 0000080a: MSTORE 0000080b: PUSH1 0x40 0000080d: DUP1 0000080e: DUP3 0000080f: KECCAK256 00000810: DUP1 00000811: SLOAD 00000812: PUSH1 0xff 00000814: NOT 00000815: AND 00000816: PUSH1 0x01 00000818: OR 00000819: SWAP1 0000081a: SSTORE 0000081b: MLOAD 0000081c: SWAP3 0000081d: SWAP4 0000081e: POP 0000081f: SWAP1 00000820: SWAP2 00000821: DUP4 00000822: ISZERO 00000823: PUSH2 0x08fc 00000826: MUL 00000827: SWAP2 00000828: DUP5 00000829: SWAP2 0000082a: SWAP1 0000082b: DUP2 0000082c: DUP2 0000082d: DUP2 0000082e: DUP6 0000082f: DUP9 00000830: DUP9 00000831: CALL 00000832: SWAP4 00000833: POP 00000834: POP 00000835: POP 00000836: POP 00000837: ISZERO 00000838: DUP1 00000839: ISZERO 0000083a: PUSH2 0x0847 0000083d: JUMPI 0000083e: RETURNDATASIZE 0000083f: PUSH1 0x00 00000841: DUP1 00000842: RETURNDATACOPY 00000843: RETURNDATASIZE 00000844: PUSH1 0x00 00000846: REVERT 00000847: JUMPDEST 00000848: POP 00000849: POP 0000084a: POP 0000084b: SWAP1 0000084c: JUMP 0000084d: JUMPDEST 0000084e: PUSH1 0x0e 00000850: SLOAD 00000851: DUP2 00000852: JUMP 00000853: JUMPDEST 00000854: PUSH1 0x00 00000856: SLOAD 00000857: PUSH1 0x01 00000859: PUSH1 0xa0 0000085b: PUSH1 0x02 0000085d: EXP 0000085e: SUB 0000085f: AND 00000860: CALLER 00000861: EQ 00000862: PUSH2 0x086a 00000865: JUMPI 00000866: PUSH1 0x00 00000868: DUP1 00000869: REVERT 0000086a: JUMPDEST 0000086b: PUSH1 0x00 0000086d: SLOAD 0000086e: PUSH1 0xa0 00000870: PUSH1 0x02 00000872: EXP 00000873: SWAP1 00000874: DIV 00000875: PUSH1 0xff 00000877: AND 00000878: ISZERO 00000879: ISZERO 0000087a: PUSH2 0x0882 0000087d: JUMPI 0000087e: PUSH1 0x00 00000880: DUP1 00000881: REVERT 00000882: JUMPDEST 00000883: PUSH1 0x00 00000885: DUP1 00000886: SLOAD 00000887: PUSH21 0xff0000000000000000000000000000000000000000 0000089d: NOT 0000089e: AND 0000089f: DUP2 000008a0: SSTORE 000008a1: PUSH1 0x40 000008a3: MLOAD 000008a4: PUSH32 0x7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b33 000008c5: SWAP2 000008c6: SWAP1 000008c7: LOG1 000008c8: JUMP 000008c9: JUMPDEST 000008ca: PUSH1 0x00 000008cc: DUP1 000008cd: SLOAD 000008ce: PUSH1 0x01 000008d0: PUSH1 0xa0 000008d2: PUSH1 0x02 000008d4: EXP 000008d5: SUB 000008d6: AND 000008d7: CALLER 000008d8: EQ 000008d9: PUSH2 0x08e1 000008dc: JUMPI 000008dd: PUSH1 0x00 000008df: DUP1 000008e0: REVERT 000008e1: JUMPDEST 000008e2: PUSH1 0x01 000008e4: SLOAD 000008e5: ISZERO 000008e6: PUSH2 0x08ee 000008e9: JUMPI 000008ea: PUSH1 0x00 000008ec: DUP1 000008ed: REVERT 000008ee: JUMPDEST 000008ef: PUSH1 0x01 000008f1: PUSH1 0xa0 000008f3: PUSH1 0x02 000008f5: EXP 000008f6: SUB 000008f7: DUP4 000008f8: AND 000008f9: PUSH1 0x00 000008fb: SWAP1 000008fc: DUP2 000008fd: MSTORE 000008fe: PUSH1 0x08 00000900: PUSH1 0x20 00000902: SWAP1 00000903: DUP2 00000904: MSTORE 00000905: PUSH1 0x40 00000907: DUP1 00000908: DUP4 00000909: KECCAK256 0000090a: DUP4 0000090b: DUP1 0000090c: MSTORE 0000090d: SWAP1 0000090e: SWAP2 0000090f: MSTORE 00000910: SWAP1 00000911: KECCAK256 00000912: SLOAD 00000913: PUSH2 0x0922 00000916: SWAP1 00000917: DUP4 00000918: PUSH4 0xffffffff 0000091d: PUSH2 0x1b21 00000920: AND 00000921: JUMP 00000922: JUMPDEST 00000923: PUSH1 0x01 00000925: PUSH1 0xa0 00000927: PUSH1 0x02 00000929: EXP 0000092a: SUB 0000092b: DUP5 0000092c: AND 0000092d: PUSH1 0x00 0000092f: SWAP1 00000930: DUP2 00000931: MSTORE 00000932: PUSH1 0x08 00000934: PUSH1 0x20 00000936: SWAP1 00000937: DUP2 00000938: MSTORE 00000939: PUSH1 0x40 0000093b: DUP1 0000093c: DUP4 0000093d: KECCAK256 0000093e: DUP4 0000093f: DUP1 00000940: MSTORE 00000941: DUP3 00000942: MSTORE 00000943: SWAP1 00000944: SWAP2 00000945: KECCAK256 00000946: SWAP2 00000947: SWAP1 00000948: SWAP2 00000949: SSTORE 0000094a: PUSH1 0x0d 0000094c: SWAP1 0000094d: MSTORE 0000094e: PUSH32 0x81955a0a11e65eac625c29e8882660bae4e165a75d72780094acae8ece9a29ee 0000096f: SLOAD 00000970: PUSH2 0x097f 00000973: SWAP1 00000974: DUP4 00000975: PUSH4 0xffffffff 0000097a: PUSH2 0x1b21 0000097d: AND 0000097e: JUMP 0000097f: JUMPDEST 00000980: PUSH1 0x00 00000982: DUP1 00000983: MSTORE 00000984: PUSH1 0x0d 00000986: PUSH1 0x20 00000988: MSTORE 00000989: PUSH32 0x81955a0a11e65eac625c29e8882660bae4e165a75d72780094acae8ece9a29ee 000009aa: DUP2 000009ab: SWAP1 000009ac: SSTORE 000009ad: PUSH1 0x0e 000009af: SSTORE 000009b0: POP 000009b1: PUSH1 0x01 000009b3: JUMPDEST 000009b4: SWAP3 000009b5: SWAP2 000009b6: POP 000009b7: POP 000009b8: JUMP 000009b9: JUMPDEST 000009ba: PUSH1 0x02 000009bc: SLOAD 000009bd: DUP2 000009be: JUMP 000009bf: JUMPDEST 000009c0: PUSH1 0x01 000009c2: PUSH1 0xa0 000009c4: PUSH1 0x02 000009c6: EXP 000009c7: SUB 000009c8: DUP3 000009c9: AND 000009ca: PUSH1 0x00 000009cc: SWAP1 000009cd: DUP2 000009ce: MSTORE 000009cf: PUSH1 0x0b 000009d1: PUSH1 0x20 000009d3: MSTORE 000009d4: PUSH1 0x40 000009d6: DUP2 000009d7: KECCAK256 000009d8: SLOAD 000009d9: DUP2 000009da: SWAP1 000009db: DUP2 000009dc: SWAP1 000009dd: PUSH1 0xff 000009df: AND 000009e0: ISZERO 000009e1: ISZERO 000009e2: PUSH2 0x09ee 000009e5: JUMPI 000009e6: PUSH1 0x00 000009e8: SWAP3 000009e9: POP 000009ea: PUSH2 0x0a61 000009ed: JUMP 000009ee: JUMPDEST 000009ef: POP 000009f0: PUSH1 0x00 000009f2: SWAP1 000009f3: POP 000009f4: DUP1 000009f5: JUMPDEST 000009f6: PUSH1 0x01 000009f8: PUSH1 0xa0 000009fa: PUSH1 0x02 000009fc: EXP 000009fd: SUB 000009fe: DUP6 000009ff: AND 00000a00: PUSH1 0x00 00000a02: SWAP1 00000a03: DUP2 00000a04: MSTORE 00000a05: PUSH1 0x0c 00000a07: PUSH1 0x20 00000a09: MSTORE 00000a0a: PUSH1 0x40 00000a0c: SWAP1 00000a0d: KECCAK256 00000a0e: SLOAD 00000a0f: DUP2 00000a10: LT 00000a11: ISZERO 00000a12: PUSH2 0x0a5d 00000a15: JUMPI 00000a16: PUSH1 0x01 00000a18: PUSH1 0xa0 00000a1a: PUSH1 0x02 00000a1c: EXP 00000a1d: SUB 00000a1e: DUP6 00000a1f: AND 00000a20: PUSH1 0x00 00000a22: SWAP1 00000a23: DUP2 00000a24: MSTORE 00000a25: PUSH1 0x0c 00000a27: PUSH1 0x20 00000a29: MSTORE 00000a2a: PUSH1 0x40 00000a2c: SWAP1 00000a2d: KECCAK256 00000a2e: DUP1 00000a2f: SLOAD 00000a30: DUP6 00000a31: SWAP2 00000a32: SWAP1 00000a33: DUP4 00000a34: SWAP1 00000a35: DUP2 00000a36: LT 00000a37: PUSH2 0x0a3c 00000a3a: JUMPI 00000a3b: INVALID 00000a3c: JUMPDEST 00000a3d: SWAP1 00000a3e: PUSH1 0x00 00000a40: MSTORE 00000a41: PUSH1 0x20 00000a43: PUSH1 0x00 00000a45: KECCAK256 00000a46: ADD 00000a47: SLOAD 00000a48: GT 00000a49: ISZERO 00000a4a: PUSH2 0x0a52 00000a4d: JUMPI 00000a4e: PUSH2 0x0a5d 00000a51: JUMP 00000a52: JUMPDEST 00000a53: SWAP1 00000a54: ISZERO 00000a55: SWAP1 00000a56: PUSH1 0x01 00000a58: ADD 00000a59: PUSH2 0x09f5 00000a5c: JUMP 00000a5d: JUMPDEST 00000a5e: DUP2 00000a5f: SWAP3 00000a60: POP 00000a61: JUMPDEST 00000a62: POP 00000a63: POP 00000a64: SWAP3 00000a65: SWAP2 00000a66: POP 00000a67: POP 00000a68: JUMP 00000a69: JUMPDEST 00000a6a: PUSH1 0x00 00000a6c: SLOAD 00000a6d: PUSH1 0xa0 00000a6f: PUSH1 0x02 00000a71: EXP 00000a72: SWAP1 00000a73: DIV 00000a74: PUSH1 0xff 00000a76: AND 00000a77: DUP2 00000a78: JUMP 00000a79: JUMPDEST 00000a7a: PUSH1 0x60 00000a7c: DUP1 00000a7d: PUSH1 0x00 00000a7f: PUSH1 0x01 00000a81: SLOAD 00000a82: PUSH1 0x40 00000a84: MLOAD 00000a85: SWAP1 00000a86: DUP1 00000a87: DUP3 00000a88: MSTORE 00000a89: DUP1 00000a8a: PUSH1 0x20 00000a8c: MUL 00000a8d: PUSH1 0x20 00000a8f: ADD 00000a90: DUP3 00000a91: ADD 00000a92: PUSH1 0x40 00000a94: MSTORE 00000a95: DUP1 00000a96: ISZERO 00000a97: PUSH2 0x0aaa 00000a9a: JUMPI 00000a9b: DUP2 00000a9c: PUSH1 0x20 00000a9e: ADD 00000a9f: PUSH1 0x20 00000aa1: DUP3 00000aa2: MUL 00000aa3: DUP1 00000aa4: CODESIZE 00000aa5: DUP4 00000aa6: CODECOPY 00000aa7: ADD 00000aa8: SWAP1 00000aa9: POP 00000aaa: JUMPDEST 00000aab: POP 00000aac: SWAP2 00000aad: POP 00000aae: PUSH1 0x00 00000ab0: SWAP1 00000ab1: POP 00000ab2: JUMPDEST 00000ab3: PUSH1 0x01 00000ab5: SLOAD 00000ab6: DUP2 00000ab7: LT 00000ab8: ISZERO 00000ab9: PUSH2 0x0aeb 00000abc: JUMPI 00000abd: PUSH1 0x00 00000abf: DUP2 00000ac0: DUP2 00000ac1: MSTORE 00000ac2: PUSH1 0x04 00000ac4: PUSH1 0x20 00000ac6: MSTORE 00000ac7: PUSH1 0x40 00000ac9: SWAP1 00000aca: KECCAK256 00000acb: SLOAD 00000acc: DUP3 00000acd: MLOAD 00000ace: DUP4 00000acf: SWAP1 00000ad0: DUP4 00000ad1: SWAP1 00000ad2: DUP2 00000ad3: LT 00000ad4: PUSH2 0x0ad9 00000ad7: JUMPI 00000ad8: INVALID 00000ad9: JUMPDEST 00000ada: PUSH1 0x20 00000adc: SWAP1 00000add: DUP2 00000ade: MUL 00000adf: SWAP1 00000ae0: SWAP2 00000ae1: ADD 00000ae2: ADD 00000ae3: MSTORE 00000ae4: PUSH1 0x01 00000ae6: ADD 00000ae7: PUSH2 0x0ab2 00000aea: JUMP 00000aeb: JUMPDEST 00000aec: POP 00000aed: SWAP2 00000aee: SWAP1 00000aef: POP 00000af0: JUMP 00000af1: JUMPDEST 00000af2: PUSH1 0x00 00000af4: DUP1 00000af5: SLOAD 00000af6: DUP2 00000af7: SWAP1 00000af8: DUP2 00000af9: SWAP1 00000afa: DUP2 00000afb: SWAP1 00000afc: PUSH1 0xa0 00000afe: PUSH1 0x02 00000b00: EXP 00000b01: SWAP1 00000b02: DIV 00000b03: PUSH1 0xff 00000b05: AND 00000b06: ISZERO 00000b07: PUSH2 0x0b0f 00000b0a: JUMPI 00000b0b: PUSH1 0x00 00000b0d: DUP1 00000b0e: REVERT 00000b0f: JUMPDEST 00000b10: PUSH1 0x01 00000b12: SLOAD 00000b13: CALLER 00000b14: PUSH1 0x00 00000b16: SWAP1 00000b17: DUP2 00000b18: MSTORE 00000b19: PUSH1 0x0a 00000b1b: PUSH1 0x20 00000b1d: MSTORE 00000b1e: PUSH1 0x40 00000b20: SWAP1 00000b21: KECCAK256 00000b22: SLOAD 00000b23: LT 00000b24: PUSH2 0x0b2c 00000b27: JUMPI 00000b28: PUSH1 0x00 00000b2a: DUP1 00000b2b: REVERT 00000b2c: JUMPDEST 00000b2d: PUSH1 0x01 00000b2f: SLOAD 00000b30: CALLER 00000b31: PUSH1 0x00 00000b33: SWAP1 00000b34: DUP2 00000b35: MSTORE 00000b36: PUSH1 0x09 00000b38: PUSH1 0x20 00000b3a: MSTORE 00000b3b: PUSH1 0x40 00000b3d: DUP2 00000b3e: KECCAK256 00000b3f: SLOAD 00000b40: SWAP1 00000b41: SWAP5 00000b42: POP 00000b43: LT 00000b44: ISZERO 00000b45: PUSH2 0x0b53 00000b48: JUMPI 00000b49: PUSH2 0x0b51 00000b4c: CALLER 00000b4d: PUSH2 0x1b40 00000b50: JUMP 00000b51: JUMPDEST 00000b52: POP 00000b53: JUMPDEST 00000b54: CALLER 00000b55: PUSH1 0x00 00000b57: SWAP1 00000b58: DUP2 00000b59: MSTORE 00000b5a: PUSH1 0x0a 00000b5c: PUSH1 0x20 00000b5e: MSTORE 00000b5f: PUSH1 0x40 00000b61: SWAP1 00000b62: KECCAK256 00000b63: SLOAD 00000b64: SWAP2 00000b65: POP 00000b66: JUMPDEST 00000b67: PUSH1 0x01 00000b69: SLOAD 00000b6a: DUP3 00000b6b: LT 00000b6c: ISZERO 00000b6d: PUSH2 0x0c0a 00000b70: JUMPI 00000b71: CALLER 00000b72: PUSH1 0x00 00000b74: SWAP1 00000b75: DUP2 00000b76: MSTORE 00000b77: PUSH1 0x08 00000b79: PUSH1 0x20 00000b7b: SWAP1 00000b7c: DUP2 00000b7d: MSTORE 00000b7e: PUSH1 0x40 00000b80: DUP1 00000b81: DUP4 00000b82: KECCAK256 00000b83: DUP6 00000b84: DUP5 00000b85: MSTORE 00000b86: SWAP1 00000b87: SWAP2 00000b88: MSTORE 00000b89: DUP2 00000b8a: KECCAK256 00000b8b: SLOAD 00000b8c: GT 00000b8d: DUP1 00000b8e: ISZERO 00000b8f: PUSH2 0x0b9f 00000b92: JUMPI 00000b93: POP 00000b94: PUSH2 0x0b9d 00000b97: CALLER 00000b98: DUP4 00000b99: PUSH2 0x09bf 00000b9c: JUMP 00000b9d: JUMPDEST 00000b9e: ISZERO 00000b9f: JUMPDEST 00000ba0: ISZERO 00000ba1: PUSH2 0x0bff 00000ba4: JUMPI 00000ba5: CALLER 00000ba6: PUSH1 0x00 00000ba8: SWAP1 00000ba9: DUP2 00000baa: MSTORE 00000bab: PUSH1 0x08 00000bad: PUSH1 0x20 00000baf: SWAP1 00000bb0: DUP2 00000bb1: MSTORE 00000bb2: PUSH1 0x40 00000bb4: DUP1 00000bb5: DUP4 00000bb6: KECCAK256 00000bb7: DUP6 00000bb8: DUP5 00000bb9: MSTORE 00000bba: DUP3 00000bbb: MSTORE 00000bbc: DUP1 00000bbd: DUP4 00000bbe: KECCAK256 00000bbf: SLOAD 00000bc0: PUSH1 0x04 00000bc2: SWAP1 00000bc3: SWAP3 00000bc4: MSTORE 00000bc5: SWAP1 00000bc6: SWAP2 00000bc7: KECCAK256 00000bc8: SLOAD 00000bc9: PUSH2 0x0bd7 00000bcc: SWAP2 00000bcd: PUSH4 0xffffffff 00000bd2: PUSH2 0x1bd7 00000bd5: AND 00000bd6: JUMP 00000bd7: JUMPDEST 00000bd8: PUSH1 0x00 00000bda: DUP4 00000bdb: DUP2 00000bdc: MSTORE 00000bdd: PUSH1 0x0d 00000bdf: PUSH1 0x20 00000be1: MSTORE 00000be2: PUSH1 0x40 00000be4: SWAP1 00000be5: KECCAK256 00000be6: SLOAD 00000be7: SWAP1 00000be8: SWAP2 00000be9: POP 00000bea: PUSH2 0x0bfa 00000bed: SWAP1 00000bee: DUP3 00000bef: SWAP1 00000bf0: PUSH4 0xffffffff 00000bf5: PUSH2 0x1c00 00000bf8: AND 00000bf9: JUMP 00000bfa: JUMPDEST 00000bfb: DUP4 00000bfc: ADD 00000bfd: SWAP3 00000bfe: POP 00000bff: JUMPDEST 00000c00: PUSH1 0x01 00000c02: SWAP1 00000c03: SWAP2 00000c04: ADD 00000c05: SWAP1 00000c06: PUSH2 0x0b66 00000c09: JUMP 00000c0a: JUMPDEST 00000c0b: PUSH1 0x01 00000c0d: SLOAD 00000c0e: CALLER 00000c0f: PUSH1 0x00 00000c11: SWAP1 00000c12: DUP2 00000c13: MSTORE 00000c14: PUSH1 0x0a 00000c16: PUSH1 0x20 00000c18: MSTORE 00000c19: PUSH1 0x40 00000c1b: DUP2 00000c1c: KECCAK256 00000c1d: SWAP2 00000c1e: SWAP1 00000c1f: SWAP2 00000c20: SSTORE 00000c21: DUP4 00000c22: GT 00000c23: ISZERO 00000c24: PUSH2 0x0c8d 00000c27: JUMPI 00000c28: PUSH1 0x40 00000c2a: MLOAD 00000c2b: CALLER 00000c2c: SWAP1 00000c2d: DUP5 00000c2e: ISZERO 00000c2f: PUSH2 0x08fc 00000c32: MUL 00000c33: SWAP1 00000c34: DUP6 00000c35: SWAP1 00000c36: PUSH1 0x00 00000c38: DUP2 00000c39: DUP2 00000c3a: DUP2 00000c3b: DUP6 00000c3c: DUP9 00000c3d: DUP9 00000c3e: CALL 00000c3f: SWAP4 00000c40: POP 00000c41: POP 00000c42: POP 00000c43: POP 00000c44: ISZERO 00000c45: DUP1 00000c46: ISZERO 00000c47: PUSH2 0x0c54 00000c4a: JUMPI 00000c4b: RETURNDATASIZE 00000c4c: PUSH1 0x00 00000c4e: DUP1 00000c4f: RETURNDATACOPY 00000c50: RETURNDATASIZE 00000c51: PUSH1 0x00 00000c53: REVERT 00000c54: JUMPDEST 00000c55: POP 00000c56: PUSH1 0x40 00000c58: DUP1 00000c59: MLOAD 00000c5a: DUP5 00000c5b: DUP2 00000c5c: MSTORE 00000c5d: SWAP1 00000c5e: MLOAD 00000c5f: DUP4 00000c60: SWAP2 00000c61: CALLER 00000c62: SWAP2 00000c63: PUSH32 0x987d620f307ff6b94d58743cb7a7509f24071586a77759b77c2d4e29f75a2f9a 00000c84: SWAP2 00000c85: DUP2 00000c86: SWAP1 00000c87: SUB 00000c88: PUSH1 0x20 00000c8a: ADD 00000c8b: SWAP1 00000c8c: LOG3 00000c8d: JUMPDEST 00000c8e: POP 00000c8f: SWAP1 00000c90: SWAP3 00000c91: SWAP2 00000c92: POP 00000c93: POP 00000c94: JUMP 00000c95: JUMPDEST 00000c96: PUSH1 0x03 00000c98: SLOAD 00000c99: PUSH1 0x00 00000c9b: SWAP1 00000c9c: PUSH1 0xff 00000c9e: AND 00000c9f: ISZERO 00000ca0: PUSH2 0x0cab 00000ca3: JUMPI 00000ca4: POP 00000ca5: PUSH1 0x00 00000ca7: PUSH2 0x0cd8 00000caa: JUMP 00000cab: JUMPDEST 00000cac: POP 00000cad: PUSH1 0x01 00000caf: PUSH1 0xa0 00000cb1: PUSH1 0x02 00000cb3: EXP 00000cb4: SUB 00000cb5: DUP2 00000cb6: AND 00000cb7: PUSH1 0x00 00000cb9: SWAP1 00000cba: DUP2 00000cbb: MSTORE 00000cbc: PUSH1 0x08 00000cbe: PUSH1 0x20 00000cc0: SWAP1 00000cc1: DUP2 00000cc2: MSTORE 00000cc3: PUSH1 0x40 00000cc5: DUP1 00000cc6: DUP4 00000cc7: KECCAK256 00000cc8: PUSH1 0x09 00000cca: DUP4 00000ccb: MSTORE 00000ccc: DUP2 00000ccd: DUP5 00000cce: KECCAK256 00000ccf: SLOAD 00000cd0: DUP5 00000cd1: MSTORE 00000cd2: SWAP1 00000cd3: SWAP2 00000cd4: MSTORE 00000cd5: SWAP1 00000cd6: KECCAK256 00000cd7: SLOAD 00000cd8: JUMPDEST 00000cd9: SWAP2 00000cda: SWAP1 00000cdb: POP 00000cdc: JUMP 00000cdd: JUMPDEST 00000cde: PUSH1 0x00 00000ce0: SLOAD 00000ce1: PUSH1 0x01 00000ce3: PUSH1 0xa0 00000ce5: PUSH1 0x02 00000ce7: EXP 00000ce8: SUB 00000ce9: AND 00000cea: CALLER 00000ceb: EQ 00000cec: PUSH2 0x0cf4 00000cef: JUMPI 00000cf0: PUSH1 0x00 00000cf2: DUP1 00000cf3: REVERT 00000cf4: JUMPDEST 00000cf5: PUSH1 0x00 00000cf7: DUP1 00000cf8: SLOAD 00000cf9: PUSH1 0x40 00000cfb: MLOAD 00000cfc: PUSH1 0x01 00000cfe: PUSH1 0xa0 00000d00: PUSH1 0x02 00000d02: EXP 00000d03: SUB 00000d04: SWAP1 00000d05: SWAP2 00000d06: AND 00000d07: SWAP2 00000d08: PUSH32 0xf8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c64820 00000d29: SWAP2 00000d2a: LOG2 00000d2b: PUSH1 0x00 00000d2d: DUP1 00000d2e: SLOAD 00000d2f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000d44: NOT 00000d45: AND 00000d46: SWAP1 00000d47: SSTORE 00000d48: JUMP 00000d49: JUMPDEST 00000d4a: PUSH1 0x04 00000d4c: PUSH1 0x20 00000d4e: MSTORE 00000d4f: PUSH1 0x00 00000d51: SWAP1 00000d52: DUP2 00000d53: MSTORE 00000d54: PUSH1 0x40 00000d56: SWAP1 00000d57: KECCAK256 00000d58: SLOAD 00000d59: DUP2 00000d5a: JUMP 00000d5b: JUMPDEST 00000d5c: PUSH1 0x00 00000d5e: SLOAD 00000d5f: PUSH1 0x01 00000d61: PUSH1 0xa0 00000d63: PUSH1 0x02 00000d65: EXP 00000d66: SUB 00000d67: AND 00000d68: CALLER 00000d69: EQ 00000d6a: PUSH2 0x0d72 00000d6d: JUMPI 00000d6e: PUSH1 0x00 00000d70: DUP1 00000d71: REVERT 00000d72: JUMPDEST 00000d73: PUSH1 0x00 00000d75: SLOAD 00000d76: PUSH1 0xa0 00000d78: PUSH1 0x02 00000d7a: EXP 00000d7b: SWAP1 00000d7c: DIV 00000d7d: PUSH1 0xff 00000d7f: AND 00000d80: ISZERO 00000d81: PUSH2 0x0d89 00000d84: JUMPI 00000d85: PUSH1 0x00 00000d87: DUP1 00000d88: REVERT 00000d89: JUMPDEST 00000d8a: PUSH1 0x00 00000d8c: DUP1 00000d8d: SLOAD 00000d8e: PUSH21 0xff0000000000000000000000000000000000000000 00000da4: NOT 00000da5: AND 00000da6: PUSH1 0xa0 00000da8: PUSH1 0x02 00000daa: EXP 00000dab: OR 00000dac: DUP2 00000dad: SSTORE 00000dae: PUSH1 0x40 00000db0: MLOAD 00000db1: PUSH32 0x6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff625 00000dd2: SWAP2 00000dd3: SWAP1 00000dd4: LOG1 00000dd5: JUMP 00000dd6: JUMPDEST 00000dd7: PUSH1 0x00 00000dd9: DUP1 00000dda: SLOAD 00000ddb: PUSH1 0x01 00000ddd: PUSH1 0xa0 00000ddf: PUSH1 0x02 00000de1: EXP 00000de2: SUB 00000de3: AND 00000de4: CALLER 00000de5: EQ 00000de6: PUSH2 0x0dee 00000de9: JUMPI 00000dea: PUSH1 0x00 00000dec: DUP1 00000ded: REVERT 00000dee: JUMPDEST 00000def: PUSH2 0x0dfa 00000df2: DUP3 00000df3: PUSH1 0x01 00000df5: SLOAD 00000df6: PUSH2 0x09bf 00000df9: JUMP 00000dfa: JUMPDEST 00000dfb: ISZERO 00000dfc: PUSH2 0x0e04 00000dff: JUMPI 00000e00: PUSH1 0x00 00000e02: DUP1 00000e03: REVERT 00000e04: JUMPDEST 00000e05: PUSH1 0x01 00000e07: SLOAD 00000e08: PUSH1 0x01 00000e0a: PUSH1 0xa0 00000e0c: PUSH1 0x02 00000e0e: EXP 00000e0f: SUB 00000e10: DUP4 00000e11: AND 00000e12: PUSH1 0x00 00000e14: SWAP1 00000e15: DUP2 00000e16: MSTORE 00000e17: PUSH1 0x09 00000e19: PUSH1 0x20 00000e1b: MSTORE 00000e1c: PUSH1 0x40 00000e1e: SWAP1 00000e1f: KECCAK256 00000e20: SLOAD 00000e21: LT 00000e22: ISZERO 00000e23: PUSH2 0x0e31 00000e26: JUMPI 00000e27: PUSH2 0x0e2f 00000e2a: DUP3 00000e2b: PUSH2 0x1b40 00000e2e: JUMP 00000e2f: JUMPDEST 00000e30: POP 00000e31: JUMPDEST 00000e32: PUSH2 0x0e5b 00000e35: PUSH2 0x0e3d 00000e38: DUP4 00000e39: PUSH2 0x0c95 00000e3c: JUMP 00000e3d: JUMPDEST 00000e3e: PUSH1 0x01 00000e40: SLOAD 00000e41: PUSH1 0x00 00000e43: SWAP1 00000e44: DUP2 00000e45: MSTORE 00000e46: PUSH1 0x0d 00000e48: PUSH1 0x20 00000e4a: MSTORE 00000e4b: PUSH1 0x40 00000e4d: SWAP1 00000e4e: KECCAK256 00000e4f: SLOAD 00000e50: SWAP1 00000e51: PUSH4 0xffffffff 00000e56: PUSH2 0x1b2e 00000e59: AND 00000e5a: JUMP 00000e5b: JUMPDEST 00000e5c: PUSH1 0x01 00000e5e: DUP1 00000e5f: SLOAD 00000e60: PUSH1 0x00 00000e62: SWAP1 00000e63: DUP2 00000e64: MSTORE 00000e65: PUSH1 0x0d 00000e67: PUSH1 0x20 00000e69: SWAP1 00000e6a: DUP2 00000e6b: MSTORE 00000e6c: PUSH1 0x40 00000e6e: DUP1 00000e6f: DUP4 00000e70: KECCAK256 00000e71: SWAP5 00000e72: SWAP1 00000e73: SWAP5 00000e74: SSTORE 00000e75: PUSH1 0x01 00000e77: PUSH1 0xa0 00000e79: PUSH1 0x02 00000e7b: EXP 00000e7c: SUB 00000e7d: DUP7 00000e7e: AND 00000e7f: DUP1 00000e80: DUP4 00000e81: MSTORE 00000e82: PUSH1 0x0b 00000e84: DUP3 00000e85: MSTORE 00000e86: DUP5 00000e87: DUP4 00000e88: KECCAK256 00000e89: DUP1 00000e8a: SLOAD 00000e8b: PUSH1 0xff 00000e8d: NOT 00000e8e: AND 00000e8f: DUP6 00000e90: OR 00000e91: SWAP1 00000e92: SSTORE 00000e93: PUSH1 0x0c 00000e95: DUP3 00000e96: MSTORE 00000e97: DUP5 00000e98: DUP4 00000e99: KECCAK256 00000e9a: DUP5 00000e9b: SLOAD 00000e9c: DUP2 00000e9d: SLOAD 00000e9e: DUP1 00000e9f: DUP8 00000ea0: ADD 00000ea1: DUP4 00000ea2: SSTORE 00000ea3: SWAP2 00000ea4: DUP6 00000ea5: MSTORE 00000ea6: SWAP3 00000ea7: DUP5 00000ea8: KECCAK256 00000ea9: ADD 00000eaa: SWAP2 00000eab: SWAP1 00000eac: SWAP2 00000ead: SSTORE 00000eae: SWAP2 00000eaf: SLOAD 00000eb0: SWAP3 00000eb1: MLOAD 00000eb2: PUSH32 0x9f1ec8c880f76798e7b793325d625e9b60e4082a553c98f42b6cda368dd60008 00000ed3: SWAP2 00000ed4: SWAP1 00000ed5: LOG3 00000ed6: POP 00000ed7: PUSH1 0x01 00000ed9: SWAP2 00000eda: SWAP1 00000edb: POP 00000edc: JUMP 00000edd: JUMPDEST 00000ede: PUSH1 0x00 00000ee0: SLOAD 00000ee1: PUSH1 0x01 00000ee3: PUSH1 0xa0 00000ee5: PUSH1 0x02 00000ee7: EXP 00000ee8: SUB 00000ee9: AND 00000eea: DUP2 00000eeb: JUMP 00000eec: JUMPDEST 00000eed: PUSH1 0x06 00000eef: SLOAD 00000ef0: DUP2 00000ef1: JUMP 00000ef2: JUMPDEST 00000ef3: PUSH1 0x08 00000ef5: PUSH1 0x20 00000ef7: SWAP1 00000ef8: DUP2 00000ef9: MSTORE 00000efa: PUSH1 0x00 00000efc: SWAP3 00000efd: DUP4 00000efe: MSTORE 00000eff: PUSH1 0x40 00000f01: DUP1 00000f02: DUP5 00000f03: KECCAK256 00000f04: SWAP1 00000f05: SWAP2 00000f06: MSTORE 00000f07: SWAP1 00000f08: DUP3 00000f09: MSTORE 00000f0a: SWAP1 00000f0b: KECCAK256 00000f0c: SLOAD 00000f0d: DUP2 00000f0e: JUMP 00000f0f: JUMPDEST 00000f10: PUSH1 0x00 00000f12: DUP1 00000f13: SLOAD 00000f14: DUP2 00000f15: SWAP1 00000f16: DUP2 00000f17: SWAP1 00000f18: DUP2 00000f19: SWAP1 00000f1a: PUSH1 0x01 00000f1c: PUSH1 0xa0 00000f1e: PUSH1 0x02 00000f20: EXP 00000f21: SUB 00000f22: AND 00000f23: CALLER 00000f24: EQ 00000f25: PUSH2 0x0f2d 00000f28: JUMPI 00000f29: PUSH1 0x00 00000f2b: DUP1 00000f2c: REVERT 00000f2d: JUMPDEST 00000f2e: PUSH1 0x01 00000f30: SLOAD 00000f31: PUSH1 0x01 00000f33: PUSH1 0xa0 00000f35: PUSH1 0x02 00000f37: EXP 00000f38: SUB 00000f39: DUP7 00000f3a: AND 00000f3b: PUSH1 0x00 00000f3d: SWAP1 00000f3e: DUP2 00000f3f: MSTORE 00000f40: PUSH1 0x0a 00000f42: PUSH1 0x20 00000f44: MSTORE 00000f45: PUSH1 0x40 00000f47: SWAP1 00000f48: KECCAK256 00000f49: SLOAD 00000f4a: LT 00000f4b: PUSH2 0x0f53 00000f4e: JUMPI 00000f4f: PUSH1 0x00 00000f51: DUP1 00000f52: REVERT 00000f53: JUMPDEST 00000f54: PUSH1 0x01 00000f56: SLOAD 00000f57: PUSH1 0x01 00000f59: PUSH1 0xa0 00000f5b: PUSH1 0x02 00000f5d: EXP 00000f5e: SUB 00000f5f: DUP7 00000f60: AND 00000f61: PUSH1 0x00 00000f63: SWAP1 00000f64: DUP2 00000f65: MSTORE 00000f66: PUSH1 0x09 00000f68: PUSH1 0x20 00000f6a: MSTORE 00000f6b: PUSH1 0x40 00000f6d: DUP2 00000f6e: KECCAK256 00000f6f: SLOAD 00000f70: SWAP1 00000f71: SWAP5 00000f72: POP 00000f73: LT 00000f74: ISZERO 00000f75: PUSH2 0x0f83 00000f78: JUMPI 00000f79: PUSH2 0x0f81 00000f7c: DUP6 00000f7d: PUSH2 0x1b40 00000f80: JUMP 00000f81: JUMPDEST 00000f82: POP 00000f83: JUMPDEST 00000f84: PUSH1 0x01 00000f86: PUSH1 0xa0 00000f88: PUSH1 0x02 00000f8a: EXP 00000f8b: SUB 00000f8c: DUP6 00000f8d: AND 00000f8e: PUSH1 0x00 00000f90: SWAP1 00000f91: DUP2 00000f92: MSTORE 00000f93: PUSH1 0x0a 00000f95: PUSH1 0x20 00000f97: MSTORE 00000f98: PUSH1 0x40 00000f9a: SWAP1 00000f9b: KECCAK256 00000f9c: SLOAD 00000f9d: SWAP2 00000f9e: POP 00000f9f: JUMPDEST 00000fa0: PUSH1 0x01 00000fa2: SLOAD 00000fa3: DUP3 00000fa4: LT 00000fa5: ISZERO 00000fa6: PUSH2 0x1055 00000fa9: JUMPI 00000faa: PUSH1 0x01 00000fac: PUSH1 0xa0 00000fae: PUSH1 0x02 00000fb0: EXP 00000fb1: SUB 00000fb2: DUP6 00000fb3: AND 00000fb4: PUSH1 0x00 00000fb6: SWAP1 00000fb7: DUP2 00000fb8: MSTORE 00000fb9: PUSH1 0x08 00000fbb: PUSH1 0x20 00000fbd: SWAP1 00000fbe: DUP2 00000fbf: MSTORE 00000fc0: PUSH1 0x40 00000fc2: DUP1 00000fc3: DUP4 00000fc4: KECCAK256 00000fc5: DUP6 00000fc6: DUP5 00000fc7: MSTORE 00000fc8: SWAP1 00000fc9: SWAP2 00000fca: MSTORE 00000fcb: DUP2 00000fcc: KECCAK256 00000fcd: SLOAD 00000fce: GT 00000fcf: DUP1 00000fd0: ISZERO 00000fd1: PUSH2 0x0fe1 00000fd4: JUMPI 00000fd5: POP 00000fd6: PUSH2 0x0fdf 00000fd9: DUP6 00000fda: DUP4 00000fdb: PUSH2 0x09bf 00000fde: JUMP 00000fdf: JUMPDEST 00000fe0: ISZERO 00000fe1: JUMPDEST 00000fe2: ISZERO 00000fe3: PUSH2 0x104a 00000fe6: JUMPI 00000fe7: PUSH1 0x01 00000fe9: PUSH1 0xa0 00000feb: PUSH1 0x02 00000fed: EXP 00000fee: SUB 00000fef: DUP6 00000ff0: AND 00000ff1: PUSH1 0x00 00000ff3: SWAP1 00000ff4: DUP2 00000ff5: MSTORE 00000ff6: PUSH1 0x08 00000ff8: PUSH1 0x20 00000ffa: SWAP1 00000ffb: DUP2 00000ffc: MSTORE 00000ffd: PUSH1 0x40 00000fff: DUP1 00001000: DUP4 00001001: KECCAK256 00001002: DUP6 00001003: DUP5 00001004: MSTORE 00001005: DUP3 00001006: MSTORE 00001007: DUP1 00001008: DUP4 00001009: KECCAK256 0000100a: SLOAD 0000100b: PUSH1 0x04 0000100d: SWAP1 0000100e: SWAP3 0000100f: MSTORE 00001010: SWAP1 00001011: SWAP2 00001012: KECCAK256 00001013: SLOAD 00001014: PUSH2 0x1022 00001017: SWAP2 00001018: PUSH4 0xffffffff 0000101d: PUSH2 0x1bd7 00001020: AND 00001021: JUMP 00001022: JUMPDEST 00001023: PUSH1 0x00 00001025: DUP4 00001026: DUP2 00001027: MSTORE 00001028: PUSH1 0x0d 0000102a: PUSH1 0x20 0000102c: MSTORE 0000102d: PUSH1 0x40 0000102f: SWAP1 00001030: KECCAK256 00001031: SLOAD 00001032: SWAP1 00001033: SWAP2 00001034: POP 00001035: PUSH2 0x1045 00001038: SWAP1 00001039: DUP3 0000103a: SWAP1 0000103b: PUSH4 0xffffffff 00001040: PUSH2 0x1c00 00001043: AND 00001044: JUMP 00001045: JUMPDEST 00001046: DUP4 00001047: ADD 00001048: SWAP3 00001049: POP 0000104a: JUMPDEST 0000104b: PUSH1 0x01 0000104d: SWAP1 0000104e: SWAP2 0000104f: ADD 00001050: SWAP1 00001051: PUSH2 0x0f9f 00001054: JUMP 00001055: JUMPDEST 00001056: PUSH1 0x01 00001058: SLOAD 00001059: PUSH1 0x01 0000105b: PUSH1 0xa0 0000105d: PUSH1 0x02 0000105f: EXP 00001060: SUB 00001061: DUP7 00001062: AND 00001063: PUSH1 0x00 00001065: SWAP1 00001066: DUP2 00001067: MSTORE 00001068: PUSH1 0x0a 0000106a: PUSH1 0x20 0000106c: MSTORE 0000106d: PUSH1 0x40 0000106f: DUP2 00001070: KECCAK256 00001071: SWAP2 00001072: SWAP1 00001073: SWAP2 00001074: SSTORE 00001075: DUP4 00001076: GT 00001077: ISZERO 00001078: PUSH2 0x10f3 0000107b: JUMPI 0000107c: PUSH1 0x40 0000107e: MLOAD 0000107f: PUSH1 0x01 00001081: PUSH1 0xa0 00001083: PUSH1 0x02 00001085: EXP 00001086: SUB 00001087: DUP7 00001088: AND 00001089: SWAP1 0000108a: DUP5 0000108b: ISZERO 0000108c: PUSH2 0x08fc 0000108f: MUL 00001090: SWAP1 00001091: DUP6 00001092: SWAP1 00001093: PUSH1 0x00 00001095: DUP2 00001096: DUP2 00001097: DUP2 00001098: DUP6 00001099: DUP9 0000109a: DUP9 0000109b: CALL 0000109c: SWAP4 0000109d: POP 0000109e: POP 0000109f: POP 000010a0: POP 000010a1: ISZERO 000010a2: DUP1 000010a3: ISZERO 000010a4: PUSH2 0x10b1 000010a7: JUMPI 000010a8: RETURNDATASIZE 000010a9: PUSH1 0x00 000010ab: DUP1 000010ac: RETURNDATACOPY 000010ad: RETURNDATASIZE 000010ae: PUSH1 0x00 000010b0: REVERT 000010b1: JUMPDEST 000010b2: POP 000010b3: PUSH1 0x40 000010b5: DUP1 000010b6: MLOAD 000010b7: DUP5 000010b8: DUP2 000010b9: MSTORE 000010ba: SWAP1 000010bb: MLOAD 000010bc: DUP4 000010bd: SWAP2 000010be: PUSH1 0x01 000010c0: PUSH1 0xa0 000010c2: PUSH1 0x02 000010c4: EXP 000010c5: SUB 000010c6: DUP9 000010c7: AND 000010c8: SWAP2 000010c9: PUSH32 0x987d620f307ff6b94d58743cb7a7509f24071586a77759b77c2d4e29f75a2f9a 000010ea: SWAP2 000010eb: DUP2 000010ec: SWAP1 000010ed: SUB 000010ee: PUSH1 0x20 000010f0: ADD 000010f1: SWAP1 000010f2: LOG3 000010f3: JUMPDEST 000010f4: DUP3 000010f5: SWAP4 000010f6: POP 000010f7: JUMPDEST 000010f8: POP 000010f9: POP 000010fa: POP 000010fb: SWAP2 000010fc: SWAP1 000010fd: POP 000010fe: JUMP 000010ff: JUMPDEST 00001100: PUSH1 0x09 00001102: PUSH1 0x20 00001104: MSTORE 00001105: PUSH1 0x00 00001107: SWAP1 00001108: DUP2 00001109: MSTORE 0000110a: PUSH1 0x40 0000110c: SWAP1 0000110d: KECCAK256 0000110e: SLOAD 0000110f: DUP2 00001110: JUMP 00001111: JUMPDEST 00001112: PUSH1 0x01 00001114: PUSH1 0xa0 00001116: PUSH1 0x02 00001118: EXP 00001119: SUB 0000111a: DUP2 0000111b: AND 0000111c: PUSH1 0x00 0000111e: SWAP1 0000111f: DUP2 00001120: MSTORE 00001121: PUSH1 0x0a 00001123: PUSH1 0x20 00001125: MSTORE 00001126: PUSH1 0x40 00001128: DUP2 00001129: KECCAK256 0000112a: SLOAD 0000112b: DUP2 0000112c: SWAP1 0000112d: DUP2 0000112e: SWAP1 0000112f: DUP2 00001130: DUP1 00001131: JUMPDEST 00001132: PUSH1 0x01 00001134: SLOAD 00001135: DUP4 00001136: LT 00001137: ISZERO 00001138: PUSH2 0x1224 0000113b: JUMPI 0000113c: PUSH1 0x01 0000113e: PUSH1 0xa0 00001140: PUSH1 0x02 00001142: EXP 00001143: SUB 00001144: DUP8 00001145: AND 00001146: PUSH1 0x00 00001148: SWAP1 00001149: DUP2 0000114a: MSTORE 0000114b: PUSH1 0x09 0000114d: PUSH1 0x20 0000114f: MSTORE 00001150: PUSH1 0x40 00001152: SWAP1 00001153: KECCAK256 00001154: SLOAD 00001155: DUP4 00001156: GT 00001157: ISZERO 00001158: PUSH2 0x118d 0000115b: JUMPI 0000115c: PUSH1 0x01 0000115e: PUSH1 0xa0 00001160: PUSH1 0x02 00001162: EXP 00001163: SUB 00001164: DUP8 00001165: AND 00001166: PUSH1 0x00 00001168: SWAP1 00001169: DUP2 0000116a: MSTORE 0000116b: PUSH1 0x08 0000116d: PUSH1 0x20 0000116f: SWAP1 00001170: DUP2 00001171: MSTORE 00001172: PUSH1 0x40 00001174: DUP1 00001175: DUP4 00001176: KECCAK256 00001177: PUSH1 0x09 00001179: DUP4 0000117a: MSTORE 0000117b: DUP2 0000117c: DUP5 0000117d: KECCAK256 0000117e: SLOAD 0000117f: DUP5 00001180: MSTORE 00001181: SWAP1 00001182: SWAP2 00001183: MSTORE 00001184: SWAP1 00001185: KECCAK256 00001186: SLOAD 00001187: SWAP4 00001188: POP 00001189: PUSH2 0x11b4 0000118c: JUMP 0000118d: JUMPDEST 0000118e: PUSH1 0x01 00001190: PUSH1 0xa0 00001192: PUSH1 0x02 00001194: EXP 00001195: SUB 00001196: DUP8 00001197: AND 00001198: PUSH1 0x00 0000119a: SWAP1 0000119b: DUP2 0000119c: MSTORE 0000119d: PUSH1 0x08 0000119f: PUSH1 0x20 000011a1: SWAP1 000011a2: DUP2 000011a3: MSTORE 000011a4: PUSH1 0x40 000011a6: DUP1 000011a7: DUP4 000011a8: KECCAK256 000011a9: DUP7 000011aa: DUP5 000011ab: MSTORE 000011ac: SWAP1 000011ad: SWAP2 000011ae: MSTORE 000011af: SWAP1 000011b0: KECCAK256 000011b1: SLOAD 000011b2: SWAP4 000011b3: POP 000011b4: JUMPDEST 000011b5: PUSH1 0x00 000011b7: DUP5 000011b8: GT 000011b9: DUP1 000011ba: ISZERO 000011bb: PUSH2 0x11cb 000011be: JUMPI 000011bf: POP 000011c0: PUSH2 0x11c9 000011c3: DUP8 000011c4: DUP5 000011c5: PUSH2 0x09bf 000011c8: JUMP 000011c9: JUMPDEST 000011ca: ISZERO 000011cb: JUMPDEST 000011cc: ISZERO 000011cd: PUSH2 0x1219 000011d0: JUMPI 000011d1: PUSH1 0x00 000011d3: DUP4 000011d4: DUP2 000011d5: MSTORE 000011d6: PUSH1 0x04 000011d8: PUSH1 0x20 000011da: MSTORE 000011db: PUSH1 0x40 000011dd: SWAP1 000011de: KECCAK256 000011df: SLOAD 000011e0: PUSH2 0x11ef 000011e3: SWAP1 000011e4: DUP6 000011e5: PUSH4 0xffffffff 000011ea: PUSH2 0x1bd7 000011ed: AND 000011ee: JUMP 000011ef: JUMPDEST 000011f0: PUSH1 0x00 000011f2: DUP5 000011f3: DUP2 000011f4: MSTORE 000011f5: PUSH1 0x0d 000011f7: PUSH1 0x20 000011f9: MSTORE 000011fa: PUSH1 0x40 000011fc: SWAP1 000011fd: KECCAK256 000011fe: SLOAD 000011ff: SWAP1 00001200: SWAP3 00001201: POP 00001202: PUSH2 0x1212 00001205: SWAP1 00001206: DUP4 00001207: SWAP1 00001208: PUSH4 0xffffffff 0000120d: PUSH2 0x1c00 00001210: AND 00001211: JUMP 00001212: JUMPDEST 00001213: SWAP5 00001214: DUP6 00001215: ADD 00001216: SWAP5 00001217: SWAP1 00001218: POP 00001219: JUMPDEST 0000121a: PUSH1 0x01 0000121c: SWAP1 0000121d: SWAP3 0000121e: ADD 0000121f: SWAP2 00001220: PUSH2 0x1131 00001223: JUMP 00001224: JUMPDEST 00001225: POP 00001226: SWAP3 00001227: SWAP6 00001228: SWAP5 00001229: POP 0000122a: POP 0000122b: POP 0000122c: POP 0000122d: POP 0000122e: JUMP 0000122f: JUMPDEST 00001230: PUSH1 0x00 00001232: DUP1 00001233: SLOAD 00001234: PUSH1 0x01 00001236: PUSH1 0xa0 00001238: PUSH1 0x02 0000123a: EXP 0000123b: SUB 0000123c: AND 0000123d: CALLER 0000123e: EQ 0000123f: PUSH2 0x1247 00001242: JUMPI 00001243: PUSH1 0x00 00001245: DUP1 00001246: REVERT 00001247: JUMPDEST 00001248: PUSH1 0x03 0000124a: SLOAD 0000124b: PUSH1 0xff 0000124d: AND 0000124e: ISZERO 0000124f: PUSH2 0x1257 00001252: JUMPI 00001253: PUSH1 0x00 00001255: DUP1 00001256: REVERT 00001257: JUMPDEST 00001258: PUSH1 0x02 0000125a: SLOAD 0000125b: TIMESTAMP 0000125c: GT 0000125d: PUSH2 0x1265 00001260: JUMPI 00001261: PUSH1 0x00 00001263: DUP1 00001264: REVERT 00001265: JUMPDEST 00001266: CALLVALUE 00001267: PUSH1 0x06 00001269: DUP2 0000126a: SWAP1 0000126b: SSTORE 0000126c: PUSH1 0x01 0000126e: DUP1 0000126f: SLOAD 00001270: DUP1 00001271: DUP3 00001272: ADD 00001273: SWAP1 00001274: SWAP2 00001275: SSTORE 00001276: PUSH1 0x40 00001278: DUP1 00001279: MLOAD 0000127a: SWAP3 0000127b: DUP4 0000127c: MSTORE 0000127d: MLOAD 0000127e: SWAP1 0000127f: SWAP2 00001280: CALLER 00001281: SWAP2 00001282: PUSH32 0xdf9a51129930649214df58f542322c245372c6f2fa6fc3c9b40d927c597cd230 000012a3: SWAP2 000012a4: DUP2 000012a5: SWAP1 000012a6: SUB 000012a7: PUSH1 0x20 000012a9: ADD 000012aa: SWAP1 000012ab: LOG3 000012ac: PUSH1 0x03 000012ae: DUP1 000012af: SLOAD 000012b0: PUSH1 0xff 000012b2: NOT 000012b3: AND 000012b4: PUSH1 0x01 000012b6: OR 000012b7: SWAP1 000012b8: SSTORE 000012b9: SWAP1 000012ba: JUMP 000012bb: JUMPDEST 000012bc: PUSH1 0x00 000012be: DUP1 000012bf: SLOAD 000012c0: PUSH1 0x01 000012c2: PUSH1 0xa0 000012c4: PUSH1 0x02 000012c6: EXP 000012c7: SUB 000012c8: AND 000012c9: CALLER 000012ca: EQ 000012cb: PUSH2 0x12d3 000012ce: JUMPI 000012cf: PUSH1 0x00 000012d1: DUP1 000012d2: REVERT 000012d3: JUMPDEST 000012d4: PUSH2 0x12df 000012d7: DUP3 000012d8: PUSH1 0x01 000012da: SLOAD 000012db: PUSH2 0x09bf 000012de: JUMP 000012df: JUMPDEST 000012e0: ISZERO 000012e1: ISZERO 000012e2: PUSH2 0x12ea 000012e5: JUMPI 000012e6: PUSH1 0x00 000012e8: DUP1 000012e9: REVERT 000012ea: JUMPDEST 000012eb: PUSH1 0x01 000012ed: SLOAD 000012ee: PUSH1 0x01 000012f0: PUSH1 0xa0 000012f2: PUSH1 0x02 000012f4: EXP 000012f5: SUB 000012f6: DUP4 000012f7: AND 000012f8: PUSH1 0x00 000012fa: SWAP1 000012fb: DUP2 000012fc: MSTORE 000012fd: PUSH1 0x09 000012ff: PUSH1 0x20 00001301: MSTORE 00001302: PUSH1 0x40 00001304: SWAP1 00001305: KECCAK256 00001306: SLOAD 00001307: LT 00001308: ISZERO 00001309: PUSH2 0x1317 0000130c: JUMPI 0000130d: PUSH2 0x1315 00001310: DUP3 00001311: PUSH2 0x1b40 00001314: JUMP 00001315: JUMPDEST 00001316: POP 00001317: JUMPDEST 00001318: PUSH2 0x1341 0000131b: PUSH2 0x1323 0000131e: DUP4 0000131f: PUSH2 0x0c95 00001322: JUMP 00001323: JUMPDEST 00001324: PUSH1 0x01 00001326: SLOAD 00001327: PUSH1 0x00 00001329: SWAP1 0000132a: DUP2 0000132b: MSTORE 0000132c: PUSH1 0x0d 0000132e: PUSH1 0x20 00001330: MSTORE 00001331: PUSH1 0x40 00001333: SWAP1 00001334: KECCAK256 00001335: SLOAD 00001336: SWAP1 00001337: PUSH4 0xffffffff 0000133c: PUSH2 0x1b21 0000133f: AND 00001340: JUMP 00001341: JUMPDEST 00001342: PUSH1 0x01 00001344: DUP1 00001345: SLOAD 00001346: PUSH1 0x00 00001348: SWAP1 00001349: DUP2 0000134a: MSTORE 0000134b: PUSH1 0x0d 0000134d: PUSH1 0x20 0000134f: SWAP1 00001350: DUP2 00001351: MSTORE 00001352: PUSH1 0x40 00001354: DUP1 00001355: DUP4 00001356: KECCAK256 00001357: SWAP5 00001358: SWAP1 00001359: SWAP5 0000135a: SSTORE 0000135b: PUSH1 0x01 0000135d: PUSH1 0xa0 0000135f: PUSH1 0x02 00001361: EXP 00001362: SUB 00001363: DUP7 00001364: AND 00001365: DUP1 00001366: DUP4 00001367: MSTORE 00001368: PUSH1 0x0c 0000136a: DUP3 0000136b: MSTORE 0000136c: DUP5 0000136d: DUP4 0000136e: KECCAK256 0000136f: DUP5 00001370: SLOAD 00001371: DUP2 00001372: SLOAD 00001373: DUP1 00001374: DUP8 00001375: ADD 00001376: DUP4 00001377: SSTORE 00001378: SWAP2 00001379: DUP6 0000137a: MSTORE 0000137b: SWAP3 0000137c: DUP5 0000137d: KECCAK256 0000137e: ADD 0000137f: SWAP2 00001380: SWAP1 00001381: SWAP2 00001382: SSTORE 00001383: SWAP2 00001384: SLOAD 00001385: SWAP3 00001386: MLOAD 00001387: PUSH32 0x0f0bc5b519ddefdd8e5f9e6423433aa2b869738de2ae34d58ebc796fc749fa0d 000013a8: SWAP2 000013a9: SWAP1 000013aa: LOG3 000013ab: POP 000013ac: PUSH1 0x01 000013ae: SWAP2 000013af: SWAP1 000013b0: POP 000013b1: JUMP 000013b2: JUMPDEST 000013b3: PUSH1 0x00 000013b5: DUP1 000013b6: SLOAD 000013b7: DUP2 000013b8: SWAP1 000013b9: DUP2 000013ba: SWAP1 000013bb: DUP2 000013bc: SWAP1 000013bd: PUSH1 0xa0 000013bf: PUSH1 0x02 000013c1: EXP 000013c2: SWAP1 000013c3: DIV 000013c4: PUSH1 0xff 000013c6: AND 000013c7: ISZERO 000013c8: PUSH2 0x13d0 000013cb: JUMPI 000013cc: PUSH1 0x00 000013ce: DUP1 000013cf: REVERT 000013d0: JUMPDEST 000013d1: PUSH1 0x01 000013d3: PUSH1 0xa0 000013d5: PUSH1 0x02 000013d7: EXP 000013d8: SUB 000013d9: DUP7 000013da: AND 000013db: PUSH1 0x00 000013dd: SWAP1 000013de: DUP2 000013df: MSTORE 000013e0: PUSH1 0x09 000013e2: PUSH1 0x20 000013e4: MSTORE 000013e5: PUSH1 0x40 000013e7: SWAP1 000013e8: KECCAK256 000013e9: SLOAD 000013ea: DUP6 000013eb: GT 000013ec: PUSH2 0x13f4 000013ef: JUMPI 000013f0: PUSH1 0x00 000013f2: DUP1 000013f3: REVERT 000013f4: JUMPDEST 000013f5: PUSH1 0x01 000013f7: SLOAD 000013f8: DUP6 000013f9: GT 000013fa: ISZERO 000013fb: PUSH2 0x1403 000013fe: JUMPI 000013ff: PUSH1 0x00 00001401: DUP1 00001402: REVERT 00001403: JUMPDEST 00001404: PUSH1 0x01 00001406: PUSH1 0xa0 00001408: PUSH1 0x02 0000140a: EXP 0000140b: SUB 0000140c: DUP7 0000140d: AND 0000140e: PUSH1 0x00 00001410: SWAP1 00001411: DUP2 00001412: MSTORE 00001413: PUSH1 0x09 00001415: PUSH1 0x20 00001417: SWAP1 00001418: DUP2 00001419: MSTORE 0000141a: PUSH1 0x40 0000141c: DUP1 0000141d: DUP4 0000141e: KECCAK256 0000141f: SLOAD 00001420: PUSH1 0x08 00001422: DUP4 00001423: MSTORE 00001424: DUP2 00001425: DUP5 00001426: KECCAK256 00001427: DUP2 00001428: DUP6 00001429: MSTORE 0000142a: SWAP1 0000142b: SWAP3 0000142c: MSTORE 0000142d: SWAP1 0000142e: SWAP2 0000142f: KECCAK256 00001430: SLOAD 00001431: SWAP1 00001432: SWAP4 00001433: POP 00001434: SWAP2 00001435: POP 00001436: DUP2 00001437: ISZERO 00001438: PUSH2 0x1476 0000143b: JUMPI 0000143c: POP 0000143d: PUSH1 0x01 0000143f: DUP3 00001440: ADD 00001441: JUMPDEST 00001442: DUP5 00001443: DUP2 00001444: GT 00001445: PUSH2 0x1476 00001448: JUMPI 00001449: PUSH1 0x01 0000144b: PUSH1 0xa0 0000144d: PUSH1 0x02 0000144f: EXP 00001450: SUB 00001451: DUP7 00001452: AND 00001453: PUSH1 0x00 00001455: SWAP1 00001456: DUP2 00001457: MSTORE 00001458: PUSH1 0x08 0000145a: PUSH1 0x20 0000145c: SWAP1 0000145d: DUP2 0000145e: MSTORE 0000145f: PUSH1 0x40 00001461: DUP1 00001462: DUP4 00001463: KECCAK256 00001464: DUP5 00001465: DUP5 00001466: MSTORE 00001467: SWAP1 00001468: SWAP2 00001469: MSTORE 0000146a: SWAP1 0000146b: KECCAK256 0000146c: DUP3 0000146d: SWAP1 0000146e: SSTORE 0000146f: PUSH1 0x01 00001471: ADD 00001472: PUSH2 0x1441 00001475: JUMP 00001476: JUMPDEST 00001477: POP 00001478: POP 00001479: POP 0000147a: POP 0000147b: PUSH1 0x01 0000147d: PUSH1 0xa0 0000147f: PUSH1 0x02 00001481: EXP 00001482: SUB 00001483: SWAP2 00001484: SWAP1 00001485: SWAP2 00001486: AND 00001487: PUSH1 0x00 00001489: SWAP1 0000148a: DUP2 0000148b: MSTORE 0000148c: PUSH1 0x09 0000148e: PUSH1 0x20 00001490: MSTORE 00001491: PUSH1 0x40 00001493: SWAP1 00001494: KECCAK256 00001495: SSTORE 00001496: PUSH1 0x01 00001498: SWAP1 00001499: JUMP 0000149a: JUMPDEST 0000149b: PUSH1 0x05 0000149d: PUSH1 0x20 0000149f: MSTORE 000014a0: PUSH1 0x00 000014a2: SWAP1 000014a3: DUP2 000014a4: MSTORE 000014a5: PUSH1 0x40 000014a7: SWAP1 000014a8: KECCAK256 000014a9: SLOAD 000014aa: DUP2 000014ab: JUMP 000014ac: JUMPDEST 000014ad: PUSH1 0x03 000014af: SLOAD 000014b0: PUSH1 0x00 000014b2: SWAP1 000014b3: DUP2 000014b4: SWAP1 000014b5: DUP2 000014b6: SWAP1 000014b7: DUP2 000014b8: SWAP1 000014b9: PUSH1 0xff 000014bb: AND 000014bc: ISZERO 000014bd: PUSH2 0x14c5 000014c0: JUMPI 000014c1: PUSH1 0x00 000014c3: DUP1 000014c4: REVERT 000014c5: JUMPDEST 000014c6: PUSH1 0x00 000014c8: SLOAD 000014c9: PUSH1 0x01 000014cb: PUSH1 0xa0 000014cd: PUSH1 0x02 000014cf: EXP 000014d0: SUB 000014d1: AND 000014d2: CALLER 000014d3: EQ 000014d4: PUSH2 0x14dc 000014d7: JUMPI 000014d8: PUSH1 0x00 000014da: DUP1 000014db: REVERT 000014dc: JUMPDEST 000014dd: PUSH1 0x00 000014df: SLOAD 000014e0: PUSH1 0xa0 000014e2: PUSH1 0x02 000014e4: EXP 000014e5: SWAP1 000014e6: DIV 000014e7: PUSH1 0xff 000014e9: AND 000014ea: ISZERO 000014eb: PUSH2 0x14f3 000014ee: JUMPI 000014ef: PUSH1 0x00 000014f1: DUP1 000014f2: REVERT 000014f3: JUMPDEST 000014f4: PUSH1 0x01 000014f6: PUSH1 0xa0 000014f8: PUSH1 0x02 000014fa: EXP 000014fb: SUB 000014fc: DUP7 000014fd: AND 000014fe: ISZERO 000014ff: ISZERO 00001500: PUSH2 0x1508 00001503: JUMPI 00001504: PUSH1 0x00 00001506: DUP1 00001507: REVERT 00001508: JUMPDEST 00001509: PUSH1 0x01 0000150b: PUSH1 0xa0 0000150d: PUSH1 0x02 0000150f: EXP 00001510: SUB 00001511: DUP8 00001512: AND 00001513: PUSH1 0x00 00001515: SWAP1 00001516: DUP2 00001517: MSTORE 00001518: PUSH1 0x09 0000151a: PUSH1 0x20 0000151c: SWAP1 0000151d: DUP2 0000151e: MSTORE 0000151f: PUSH1 0x40 00001521: DUP1 00001522: DUP4 00001523: KECCAK256 00001524: SLOAD 00001525: PUSH1 0x08 00001527: DUP4 00001528: MSTORE 00001529: DUP2 0000152a: DUP5 0000152b: KECCAK256 0000152c: DUP2 0000152d: DUP6 0000152e: MSTORE 0000152f: SWAP1 00001530: SWAP3 00001531: MSTORE 00001532: SWAP1 00001533: SWAP2 00001534: KECCAK256 00001535: SLOAD 00001536: SWAP1 00001537: SWAP4 00001538: POP 00001539: DUP6 0000153a: GT 0000153b: ISZERO 0000153c: PUSH2 0x1544 0000153f: JUMPI 00001540: PUSH1 0x00 00001542: DUP1 00001543: REVERT 00001544: JUMPDEST 00001545: PUSH1 0x01 00001547: SLOAD 00001548: DUP4 00001549: LT 0000154a: ISZERO 0000154b: PUSH2 0x1559 0000154e: JUMPI 0000154f: PUSH2 0x1557 00001552: DUP8 00001553: PUSH2 0x1b40 00001556: JUMP 00001557: JUMPDEST 00001558: POP 00001559: JUMPDEST 0000155a: PUSH1 0x01 0000155c: SLOAD 0000155d: PUSH1 0x01 0000155f: PUSH1 0xa0 00001561: PUSH1 0x02 00001563: EXP 00001564: SUB 00001565: DUP8 00001566: AND 00001567: PUSH1 0x00 00001569: SWAP1 0000156a: DUP2 0000156b: MSTORE 0000156c: PUSH1 0x09 0000156e: PUSH1 0x20 00001570: MSTORE 00001571: PUSH1 0x40 00001573: SWAP1 00001574: KECCAK256 00001575: SLOAD 00001576: LT 00001577: ISZERO 00001578: PUSH2 0x1586 0000157b: JUMPI 0000157c: PUSH2 0x1584 0000157f: DUP7 00001580: PUSH2 0x1b40 00001583: JUMP 00001584: JUMPDEST 00001585: POP 00001586: JUMPDEST 00001587: PUSH1 0x01 00001589: PUSH1 0xa0 0000158b: PUSH1 0x02 0000158d: EXP 0000158e: SUB 0000158f: DUP8 00001590: AND 00001591: PUSH1 0x00 00001593: SWAP1 00001594: DUP2 00001595: MSTORE 00001596: PUSH1 0x08 00001598: PUSH1 0x20 0000159a: SWAP1 0000159b: DUP2 0000159c: MSTORE 0000159d: PUSH1 0x40 0000159f: DUP1 000015a0: DUP4 000015a1: KECCAK256 000015a2: PUSH1 0x01 000015a4: SLOAD 000015a5: DUP5 000015a6: MSTORE 000015a7: SWAP1 000015a8: SWAP2 000015a9: MSTORE 000015aa: SWAP1 000015ab: KECCAK256 000015ac: SLOAD 000015ad: PUSH2 0x15bc 000015b0: SWAP1 000015b1: DUP7 000015b2: PUSH4 0xffffffff 000015b7: PUSH2 0x1b2e 000015ba: AND 000015bb: JUMP 000015bc: JUMPDEST 000015bd: PUSH1 0x01 000015bf: PUSH1 0xa0 000015c1: PUSH1 0x02 000015c3: EXP 000015c4: SUB 000015c5: DUP1 000015c6: DUP10 000015c7: AND 000015c8: PUSH1 0x00 000015ca: SWAP1 000015cb: DUP2 000015cc: MSTORE 000015cd: PUSH1 0x08 000015cf: PUSH1 0x20 000015d1: DUP2 000015d2: DUP2 000015d3: MSTORE 000015d4: PUSH1 0x40 000015d6: DUP1 000015d7: DUP5 000015d8: KECCAK256 000015d9: PUSH1 0x01 000015db: DUP1 000015dc: SLOAD 000015dd: DUP7 000015de: MSTORE 000015df: SWAP1 000015e0: DUP4 000015e1: MSTORE 000015e2: DUP2 000015e3: DUP6 000015e4: KECCAK256 000015e5: SWAP7 000015e6: SWAP1 000015e7: SWAP7 000015e8: SSTORE 000015e9: SWAP4 000015ea: DUP12 000015eb: AND 000015ec: DUP4 000015ed: MSTORE 000015ee: SWAP1 000015ef: DUP2 000015f0: MSTORE 000015f1: DUP3 000015f2: DUP3 000015f3: KECCAK256 000015f4: SWAP4 000015f5: SLOAD 000015f6: DUP3 000015f7: MSTORE 000015f8: SWAP3 000015f9: SWAP1 000015fa: SWAP3 000015fb: MSTORE 000015fc: SWAP1 000015fd: KECCAK256 000015fe: SLOAD 000015ff: PUSH2 0x160e 00001602: SWAP1 00001603: DUP7 00001604: PUSH4 0xffffffff 00001609: PUSH2 0x1b21 0000160c: AND 0000160d: JUMP 0000160e: JUMPDEST 0000160f: PUSH1 0x01 00001611: PUSH1 0xa0 00001613: PUSH1 0x02 00001615: EXP 00001616: SUB 00001617: DUP8 00001618: AND 00001619: PUSH1 0x00 0000161b: SWAP1 0000161c: DUP2 0000161d: MSTORE 0000161e: PUSH1 0x08 00001620: PUSH1 0x20 00001622: SWAP1 00001623: DUP2 00001624: MSTORE 00001625: PUSH1 0x40 00001627: DUP1 00001628: DUP4 00001629: KECCAK256 0000162a: PUSH1 0x01 0000162c: DUP1 0000162d: SLOAD 0000162e: DUP6 0000162f: MSTORE 00001630: SWAP3 00001631: MSTORE 00001632: SWAP1 00001633: SWAP2 00001634: KECCAK256 00001635: SWAP2 00001636: SWAP1 00001637: SWAP2 00001638: SSTORE 00001639: SLOAD 0000163a: PUSH2 0x1644 0000163d: SWAP1 0000163e: DUP9 0000163f: SWAP1 00001640: PUSH2 0x09bf 00001643: JUMP 00001644: JUMPDEST 00001645: SWAP2 00001646: POP 00001647: PUSH2 0x1652 0000164a: DUP7 0000164b: PUSH1 0x01 0000164d: SLOAD 0000164e: PUSH2 0x09bf 00001651: JUMP 00001652: JUMPDEST 00001653: SWAP1 00001654: POP 00001655: DUP2 00001656: DUP1 00001657: ISZERO 00001658: PUSH2 0x165f 0000165b: JUMPI 0000165c: POP 0000165d: DUP1 0000165e: ISZERO 0000165f: JUMPDEST 00001660: ISZERO 00001661: PUSH2 0x169d 00001664: JUMPI 00001665: PUSH1 0x01 00001667: SLOAD 00001668: PUSH1 0x00 0000166a: SWAP1 0000166b: DUP2 0000166c: MSTORE 0000166d: PUSH1 0x0d 0000166f: PUSH1 0x20 00001671: MSTORE 00001672: PUSH1 0x40 00001674: SWAP1 00001675: KECCAK256 00001676: SLOAD 00001677: PUSH2 0x1686 0000167a: SWAP1 0000167b: DUP7 0000167c: PUSH4 0xffffffff 00001681: PUSH2 0x1b21 00001684: AND 00001685: JUMP 00001686: JUMPDEST 00001687: PUSH1 0x01 00001689: SLOAD 0000168a: PUSH1 0x00 0000168c: SWAP1 0000168d: DUP2 0000168e: MSTORE 0000168f: PUSH1 0x0d 00001691: PUSH1 0x20 00001693: MSTORE 00001694: PUSH1 0x40 00001696: SWAP1 00001697: KECCAK256 00001698: SSTORE 00001699: PUSH2 0x16e2 0000169c: JUMP 0000169d: JUMPDEST 0000169e: DUP2 0000169f: ISZERO 000016a0: DUP1 000016a1: ISZERO 000016a2: PUSH2 0x16a8 000016a5: JUMPI 000016a6: POP 000016a7: DUP1 000016a8: JUMPDEST 000016a9: ISZERO 000016aa: PUSH2 0x16e2 000016ad: JUMPI 000016ae: PUSH1 0x01 000016b0: SLOAD 000016b1: PUSH1 0x00 000016b3: SWAP1 000016b4: DUP2 000016b5: MSTORE 000016b6: PUSH1 0x0d 000016b8: PUSH1 0x20 000016ba: MSTORE 000016bb: PUSH1 0x40 000016bd: SWAP1 000016be: KECCAK256 000016bf: SLOAD 000016c0: PUSH2 0x16cf 000016c3: SWAP1 000016c4: DUP7 000016c5: PUSH4 0xffffffff 000016ca: PUSH2 0x1b2e 000016cd: AND 000016ce: JUMP 000016cf: JUMPDEST 000016d0: PUSH1 0x01 000016d2: SLOAD 000016d3: PUSH1 0x00 000016d5: SWAP1 000016d6: DUP2 000016d7: MSTORE 000016d8: PUSH1 0x0d 000016da: PUSH1 0x20 000016dc: MSTORE 000016dd: PUSH1 0x40 000016df: SWAP1 000016e0: KECCAK256 000016e1: SSTORE 000016e2: JUMPDEST 000016e3: POP 000016e4: PUSH1 0x01 000016e6: SWAP7 000016e7: SWAP6 000016e8: POP 000016e9: POP 000016ea: POP 000016eb: POP 000016ec: POP 000016ed: POP 000016ee: JUMP 000016ef: JUMPDEST 000016f0: PUSH1 0x07 000016f2: PUSH1 0x20 000016f4: MSTORE 000016f5: PUSH1 0x00 000016f7: SWAP1 000016f8: DUP2 000016f9: MSTORE 000016fa: PUSH1 0x40 000016fc: SWAP1 000016fd: KECCAK256 000016fe: SLOAD 000016ff: PUSH1 0xff 00001701: AND 00001702: DUP2 00001703: JUMP 00001704: JUMPDEST 00001705: PUSH1 0x60 00001707: DUP1 00001708: PUSH1 0x00 0000170a: PUSH1 0x01 0000170c: SLOAD 0000170d: PUSH1 0x40 0000170f: MLOAD 00001710: SWAP1 00001711: DUP1 00001712: DUP3 00001713: MSTORE 00001714: DUP1 00001715: PUSH1 0x20 00001717: MUL 00001718: PUSH1 0x20 0000171a: ADD 0000171b: DUP3 0000171c: ADD 0000171d: PUSH1 0x40 0000171f: MSTORE 00001720: DUP1 00001721: ISZERO 00001722: PUSH2 0x1735 00001725: JUMPI 00001726: DUP2 00001727: PUSH1 0x20 00001729: ADD 0000172a: PUSH1 0x20 0000172c: DUP3 0000172d: MUL 0000172e: DUP1 0000172f: CODESIZE 00001730: DUP4 00001731: CODECOPY 00001732: ADD 00001733: SWAP1 00001734: POP 00001735: JUMPDEST 00001736: POP 00001737: SWAP2 00001738: POP 00001739: PUSH1 0x00 0000173b: SWAP1 0000173c: POP 0000173d: JUMPDEST 0000173e: PUSH1 0x01 00001740: SLOAD 00001741: DUP2 00001742: LT 00001743: ISZERO 00001744: PUSH2 0x0aeb 00001747: JUMPI 00001748: PUSH1 0x00 0000174a: DUP2 0000174b: DUP2 0000174c: MSTORE 0000174d: PUSH1 0x05 0000174f: PUSH1 0x20 00001751: MSTORE 00001752: PUSH1 0x40 00001754: SWAP1 00001755: KECCAK256 00001756: SLOAD 00001757: DUP3 00001758: MLOAD 00001759: DUP4 0000175a: SWAP1 0000175b: DUP4 0000175c: SWAP1 0000175d: DUP2 0000175e: LT 0000175f: PUSH2 0x1764 00001762: JUMPI 00001763: INVALID 00001764: JUMPDEST 00001765: PUSH1 0x20 00001767: SWAP1 00001768: DUP2 00001769: MUL 0000176a: SWAP1 0000176b: SWAP2 0000176c: ADD 0000176d: ADD 0000176e: MSTORE 0000176f: PUSH1 0x01 00001771: ADD 00001772: PUSH2 0x173d 00001775: JUMP 00001776: JUMPDEST 00001777: PUSH1 0x60 00001779: DUP1 0000177a: PUSH1 0x00 0000177c: DUP1 0000177d: PUSH1 0x01 0000177f: SLOAD 00001780: PUSH1 0x40 00001782: MLOAD 00001783: SWAP1 00001784: DUP1 00001785: DUP3 00001786: MSTORE 00001787: DUP1 00001788: PUSH1 0x20 0000178a: MUL 0000178b: PUSH1 0x20 0000178d: ADD 0000178e: DUP3 0000178f: ADD 00001790: PUSH1 0x40 00001792: MSTORE 00001793: DUP1 00001794: ISZERO 00001795: PUSH2 0x17a8 00001798: JUMPI 00001799: DUP2 0000179a: PUSH1 0x20 0000179c: ADD 0000179d: PUSH1 0x20 0000179f: DUP3 000017a0: MUL 000017a1: DUP1 000017a2: CODESIZE 000017a3: DUP4 000017a4: CODECOPY 000017a5: ADD 000017a6: SWAP1 000017a7: POP 000017a8: JUMPDEST 000017a9: POP 000017aa: SWAP3 000017ab: POP 000017ac: PUSH1 0x00 000017ae: SWAP2 000017af: POP 000017b0: JUMPDEST 000017b1: PUSH1 0x01 000017b3: SLOAD 000017b4: DUP3 000017b5: LT 000017b6: ISZERO 000017b7: PUSH2 0x10f3 000017ba: JUMPI 000017bb: PUSH1 0x01 000017bd: PUSH1 0xa0 000017bf: PUSH1 0x02 000017c1: EXP 000017c2: SUB 000017c3: DUP6 000017c4: AND 000017c5: PUSH1 0x00 000017c7: SWAP1 000017c8: DUP2 000017c9: MSTORE 000017ca: PUSH1 0x09 000017cc: PUSH1 0x20 000017ce: MSTORE 000017cf: PUSH1 0x40 000017d1: SWAP1 000017d2: KECCAK256 000017d3: SLOAD 000017d4: DUP3 000017d5: GT 000017d6: ISZERO 000017d7: PUSH2 0x181d 000017da: JUMPI 000017db: PUSH1 0x01 000017dd: PUSH1 0xa0 000017df: PUSH1 0x02 000017e1: EXP 000017e2: SUB 000017e3: DUP6 000017e4: AND 000017e5: PUSH1 0x00 000017e7: SWAP1 000017e8: DUP2 000017e9: MSTORE 000017ea: PUSH1 0x08 000017ec: PUSH1 0x20 000017ee: SWAP1 000017ef: DUP2 000017f0: MSTORE 000017f1: PUSH1 0x40 000017f3: DUP1 000017f4: DUP4 000017f5: KECCAK256 000017f6: DUP6 000017f7: DUP5 000017f8: MSTORE 000017f9: DUP3 000017fa: MSTORE 000017fb: DUP1 000017fc: DUP4 000017fd: KECCAK256 000017fe: SLOAD 000017ff: PUSH1 0x04 00001801: SWAP1 00001802: SWAP3 00001803: MSTORE 00001804: SWAP1 00001805: SWAP2 00001806: KECCAK256 00001807: SLOAD 00001808: PUSH2 0x1816 0000180b: SWAP2 0000180c: PUSH4 0xffffffff 00001811: PUSH2 0x1bd7 00001814: AND 00001815: JUMP 00001816: JUMPDEST 00001817: SWAP1 00001818: POP 00001819: PUSH2 0x1866 0000181c: JUMP 0000181d: JUMPDEST 0000181e: PUSH1 0x01 00001820: PUSH1 0xa0 00001822: PUSH1 0x02 00001824: EXP 00001825: SUB 00001826: DUP6 00001827: AND 00001828: PUSH1 0x00 0000182a: SWAP1 0000182b: DUP2 0000182c: MSTORE 0000182d: PUSH1 0x08 0000182f: PUSH1 0x20 00001831: SWAP1 00001832: DUP2 00001833: MSTORE 00001834: PUSH1 0x40 00001836: DUP1 00001837: DUP4 00001838: KECCAK256 00001839: PUSH1 0x09 0000183b: DUP4 0000183c: MSTORE 0000183d: DUP2 0000183e: DUP5 0000183f: KECCAK256 00001840: SLOAD 00001841: DUP5 00001842: MSTORE 00001843: DUP3 00001844: MSTORE 00001845: DUP1 00001846: DUP4 00001847: KECCAK256 00001848: SLOAD 00001849: DUP6 0000184a: DUP5 0000184b: MSTORE 0000184c: PUSH1 0x04 0000184e: SWAP1 0000184f: SWAP3 00001850: MSTORE 00001851: SWAP1 00001852: SWAP2 00001853: KECCAK256 00001854: SLOAD 00001855: PUSH2 0x1863 00001858: SWAP2 00001859: PUSH4 0xffffffff 0000185e: PUSH2 0x1bd7 00001861: AND 00001862: JUMP 00001863: JUMPDEST 00001864: SWAP1 00001865: POP 00001866: JUMPDEST 00001867: PUSH2 0x1870 0000186a: DUP6 0000186b: DUP4 0000186c: PUSH2 0x09bf 0000186f: JUMP 00001870: JUMPDEST 00001871: ISZERO 00001872: PUSH2 0x1894 00001875: JUMPI 00001876: PUSH1 0x00 00001878: DUP4 00001879: DUP4 0000187a: DUP2 0000187b: MLOAD 0000187c: DUP2 0000187d: LT 0000187e: ISZERO 0000187f: ISZERO 00001880: PUSH2 0x1885 00001883: JUMPI 00001884: INVALID 00001885: JUMPDEST 00001886: PUSH1 0x20 00001888: SWAP1 00001889: DUP2 0000188a: MUL 0000188b: SWAP1 0000188c: SWAP2 0000188d: ADD 0000188e: ADD 0000188f: MSTORE 00001890: PUSH2 0x18cd 00001893: JUMP 00001894: JUMPDEST 00001895: PUSH1 0x00 00001897: DUP3 00001898: DUP2 00001899: MSTORE 0000189a: PUSH1 0x0d 0000189c: PUSH1 0x20 0000189e: MSTORE 0000189f: PUSH1 0x40 000018a1: SWAP1 000018a2: KECCAK256 000018a3: SLOAD 000018a4: PUSH2 0x18b4 000018a7: SWAP1 000018a8: DUP3 000018a9: SWAP1 000018aa: PUSH4 0xffffffff 000018af: PUSH2 0x1c00 000018b2: AND 000018b3: JUMP 000018b4: JUMPDEST 000018b5: DUP4 000018b6: DUP4 000018b7: DUP2 000018b8: MLOAD 000018b9: DUP2 000018ba: LT 000018bb: ISZERO 000018bc: ISZERO 000018bd: PUSH2 0x18c2 000018c0: JUMPI 000018c1: INVALID 000018c2: JUMPDEST 000018c3: PUSH1 0x20 000018c5: SWAP1 000018c6: DUP2 000018c7: MUL 000018c8: SWAP1 000018c9: SWAP2 000018ca: ADD 000018cb: ADD 000018cc: MSTORE 000018cd: JUMPDEST 000018ce: PUSH1 0x01 000018d0: SWAP1 000018d1: SWAP2 000018d2: ADD 000018d3: SWAP1 000018d4: PUSH2 0x17b0 000018d7: JUMP 000018d8: JUMPDEST 000018d9: CALLER 000018da: PUSH1 0x00 000018dc: SWAP1 000018dd: DUP2 000018de: MSTORE 000018df: PUSH1 0x0a 000018e1: PUSH1 0x20 000018e3: MSTORE 000018e4: PUSH1 0x40 000018e6: DUP2 000018e7: KECCAK256 000018e8: SLOAD 000018e9: DUP2 000018ea: SWAP1 000018eb: DUP2 000018ec: SWAP1 000018ed: DUP2 000018ee: DUP1 000018ef: JUMPDEST 000018f0: PUSH1 0x01 000018f2: SLOAD 000018f3: DUP4 000018f4: LT 000018f5: ISZERO 000018f6: PUSH2 0x19c7 000018f9: JUMPI 000018fa: CALLER 000018fb: PUSH1 0x00 000018fd: SWAP1 000018fe: DUP2 000018ff: MSTORE 00001900: PUSH1 0x09 00001902: PUSH1 0x20 00001904: MSTORE 00001905: PUSH1 0x40 00001907: SWAP1 00001908: KECCAK256 00001909: SLOAD 0000190a: DUP4 0000190b: GT 0000190c: ISZERO 0000190d: PUSH2 0x1939 00001910: JUMPI 00001911: CALLER 00001912: PUSH1 0x00 00001914: SWAP1 00001915: DUP2 00001916: MSTORE 00001917: PUSH1 0x08 00001919: PUSH1 0x20 0000191b: SWAP1 0000191c: DUP2 0000191d: MSTORE 0000191e: PUSH1 0x40 00001920: DUP1 00001921: DUP4 00001922: KECCAK256 00001923: PUSH1 0x09 00001925: DUP4 00001926: MSTORE 00001927: DUP2 00001928: DUP5 00001929: KECCAK256 0000192a: SLOAD 0000192b: DUP5 0000192c: MSTORE 0000192d: SWAP1 0000192e: SWAP2 0000192f: MSTORE 00001930: SWAP1 00001931: KECCAK256 00001932: SLOAD 00001933: SWAP4 00001934: POP 00001935: PUSH2 0x1957 00001938: JUMP 00001939: JUMPDEST 0000193a: CALLER 0000193b: PUSH1 0x00 0000193d: SWAP1 0000193e: DUP2 0000193f: MSTORE 00001940: PUSH1 0x08 00001942: PUSH1 0x20 00001944: SWAP1 00001945: DUP2 00001946: MSTORE 00001947: PUSH1 0x40 00001949: DUP1 0000194a: DUP4 0000194b: KECCAK256 0000194c: DUP7 0000194d: DUP5 0000194e: MSTORE 0000194f: SWAP1 00001950: SWAP2 00001951: MSTORE 00001952: SWAP1 00001953: KECCAK256 00001954: SLOAD 00001955: SWAP4 00001956: POP 00001957: JUMPDEST 00001958: PUSH1 0x00 0000195a: DUP5 0000195b: GT 0000195c: DUP1 0000195d: ISZERO 0000195e: PUSH2 0x196e 00001961: JUMPI 00001962: POP 00001963: PUSH2 0x196c 00001966: CALLER 00001967: DUP5 00001968: PUSH2 0x09bf 0000196b: JUMP 0000196c: JUMPDEST 0000196d: ISZERO 0000196e: JUMPDEST 0000196f: ISZERO 00001970: PUSH2 0x19bc 00001973: JUMPI 00001974: PUSH1 0x00 00001976: DUP4 00001977: DUP2 00001978: MSTORE 00001979: PUSH1 0x04 0000197b: PUSH1 0x20 0000197d: MSTORE 0000197e: PUSH1 0x40 00001980: SWAP1 00001981: KECCAK256 00001982: SLOAD 00001983: PUSH2 0x1992 00001986: SWAP1 00001987: DUP6 00001988: PUSH4 0xffffffff 0000198d: PUSH2 0x1bd7 00001990: AND 00001991: JUMP 00001992: JUMPDEST 00001993: PUSH1 0x00 00001995: DUP5 00001996: DUP2 00001997: MSTORE 00001998: PUSH1 0x0d 0000199a: PUSH1 0x20 0000199c: MSTORE 0000199d: PUSH1 0x40 0000199f: SWAP1 000019a0: KECCAK256 000019a1: SLOAD 000019a2: SWAP1 000019a3: SWAP3 000019a4: POP 000019a5: PUSH2 0x19b5 000019a8: SWAP1 000019a9: DUP4 000019aa: SWAP1 000019ab: PUSH4 0xffffffff 000019b0: PUSH2 0x1c00 000019b3: AND 000019b4: JUMP 000019b5: JUMPDEST 000019b6: SWAP5 000019b7: DUP6 000019b8: ADD 000019b9: SWAP5 000019ba: SWAP1 000019bb: POP 000019bc: JUMPDEST 000019bd: PUSH1 0x01 000019bf: SWAP1 000019c0: SWAP3 000019c1: ADD 000019c2: SWAP2 000019c3: PUSH2 0x18ef 000019c6: JUMP 000019c7: JUMPDEST 000019c8: POP 000019c9: SWAP3 000019ca: SWAP5 000019cb: SWAP4 000019cc: POP 000019cd: POP 000019ce: POP 000019cf: POP 000019d0: JUMP 000019d1: JUMPDEST 000019d2: PUSH1 0x01 000019d4: SLOAD 000019d5: DUP2 000019d6: JUMP 000019d7: JUMPDEST 000019d8: PUSH1 0x00 000019da: SLOAD 000019db: PUSH1 0x01 000019dd: PUSH1 0xa0 000019df: PUSH1 0x02 000019e1: EXP 000019e2: SUB 000019e3: AND 000019e4: CALLER 000019e5: EQ 000019e6: PUSH2 0x19ee 000019e9: JUMPI 000019ea: PUSH1 0x00 000019ec: DUP1 000019ed: REVERT 000019ee: JUMPDEST 000019ef: PUSH2 0x19f7 000019f2: DUP2 000019f3: PUSH2 0x1c15 000019f6: JUMP 000019f7: JUMPDEST 000019f8: POP 000019f9: JUMP 000019fa: JUMPDEST 000019fb: PUSH1 0x00 000019fd: DUP1 000019fe: SLOAD 000019ff: DUP2 00001a00: SWAP1 00001a01: DUP2 00001a02: SWAP1 00001a03: PUSH1 0x01 00001a05: PUSH1 0xa0 00001a07: PUSH1 0x02 00001a09: EXP 00001a0a: SUB 00001a0b: AND 00001a0c: CALLER 00001a0d: EQ 00001a0e: PUSH2 0x1a16 00001a11: JUMPI 00001a12: PUSH1 0x00 00001a14: DUP1 00001a15: REVERT 00001a16: JUMPDEST 00001a17: PUSH1 0x03 00001a19: SLOAD 00001a1a: PUSH1 0xff 00001a1c: AND 00001a1d: ISZERO 00001a1e: ISZERO 00001a1f: PUSH2 0x1a27 00001a22: JUMPI 00001a23: PUSH1 0x00 00001a25: DUP1 00001a26: REVERT 00001a27: JUMPDEST 00001a28: PUSH1 0x01 00001a2a: PUSH1 0xa0 00001a2c: PUSH1 0x02 00001a2e: EXP 00001a2f: SUB 00001a30: DUP5 00001a31: AND 00001a32: PUSH1 0x00 00001a34: SWAP1 00001a35: DUP2 00001a36: MSTORE 00001a37: PUSH1 0x07 00001a39: PUSH1 0x20 00001a3b: MSTORE 00001a3c: PUSH1 0x40 00001a3e: SWAP1 00001a3f: KECCAK256 00001a40: SLOAD 00001a41: PUSH1 0xff 00001a43: AND 00001a44: ISZERO 00001a45: PUSH2 0x1a4d 00001a48: JUMPI 00001a49: PUSH1 0x00 00001a4b: DUP1 00001a4c: REVERT 00001a4d: JUMPDEST 00001a4e: PUSH1 0x01 00001a50: SLOAD 00001a51: PUSH1 0x01 00001a53: PUSH1 0xa0 00001a55: PUSH1 0x02 00001a57: EXP 00001a58: SUB 00001a59: DUP6 00001a5a: AND 00001a5b: PUSH1 0x00 00001a5d: SWAP1 00001a5e: DUP2 00001a5f: MSTORE 00001a60: PUSH1 0x09 00001a62: PUSH1 0x20 00001a64: MSTORE 00001a65: PUSH1 0x40 00001a67: SWAP1 00001a68: KECCAK256 00001a69: SLOAD 00001a6a: LT 00001a6b: ISZERO 00001a6c: PUSH2 0x1a7a 00001a6f: JUMPI 00001a70: PUSH2 0x1a78 00001a73: DUP5 00001a74: PUSH2 0x1b40 00001a77: JUMP 00001a78: JUMPDEST 00001a79: POP 00001a7a: JUMPDEST 00001a7b: PUSH1 0x01 00001a7d: PUSH1 0xa0 00001a7f: PUSH1 0x02 00001a81: EXP 00001a82: SUB 00001a83: DUP5 00001a84: AND 00001a85: PUSH1 0x00 00001a87: SWAP1 00001a88: DUP2 00001a89: MSTORE 00001a8a: PUSH1 0x08 00001a8c: PUSH1 0x20 00001a8e: SWAP1 00001a8f: DUP2 00001a90: MSTORE 00001a91: PUSH1 0x40 00001a93: DUP1 00001a94: DUP4 00001a95: KECCAK256 00001a96: PUSH1 0x01 00001a98: SLOAD 00001a99: DUP5 00001a9a: MSTORE 00001a9b: SWAP1 00001a9c: SWAP2 00001a9d: MSTORE 00001a9e: SWAP1 00001a9f: KECCAK256 00001aa0: SLOAD 00001aa1: PUSH1 0x06 00001aa3: SLOAD 00001aa4: PUSH2 0x1ab2 00001aa7: SWAP2 00001aa8: PUSH4 0xffffffff 00001aad: PUSH2 0x1bd7 00001ab0: AND 00001ab1: JUMP 00001ab2: JUMPDEST 00001ab3: SWAP2 00001ab4: POP 00001ab5: PUSH2 0x1ad0 00001ab8: PUSH1 0x0d 00001aba: PUSH1 0x00 00001abc: PUSH2 0x07e1 00001abf: PUSH1 0x01 00001ac1: DUP1 00001ac2: SLOAD 00001ac3: PUSH2 0x1b2e 00001ac6: SWAP1 00001ac7: SWAP2 00001ac8: SWAP1 00001ac9: PUSH4 0xffffffff 00001ace: AND 00001acf: JUMP 00001ad0: JUMPDEST 00001ad1: PUSH1 0x01 00001ad3: PUSH1 0xa0 00001ad5: PUSH1 0x02 00001ad7: EXP 00001ad8: SUB 00001ad9: DUP6 00001ada: AND 00001adb: PUSH1 0x00 00001add: DUP2 00001ade: DUP2 00001adf: MSTORE 00001ae0: PUSH1 0x07 00001ae2: PUSH1 0x20 00001ae4: MSTORE 00001ae5: PUSH1 0x40 00001ae7: DUP1 00001ae8: DUP3 00001ae9: KECCAK256 00001aea: DUP1 00001aeb: SLOAD 00001aec: PUSH1 0xff 00001aee: NOT 00001aef: AND 00001af0: PUSH1 0x01 00001af2: OR 00001af3: SWAP1 00001af4: SSTORE 00001af5: MLOAD 00001af6: SWAP3 00001af7: SWAP4 00001af8: POP 00001af9: SWAP1 00001afa: SWAP2 00001afb: DUP4 00001afc: ISZERO 00001afd: PUSH2 0x08fc 00001b00: MUL 00001b01: SWAP2 00001b02: DUP5 00001b03: SWAP2 00001b04: SWAP1 00001b05: DUP2 00001b06: DUP2 00001b07: DUP2 00001b08: DUP6 00001b09: DUP9 00001b0a: DUP9 00001b0b: CALL 00001b0c: SWAP4 00001b0d: POP 00001b0e: POP 00001b0f: POP 00001b10: POP 00001b11: ISZERO 00001b12: DUP1 00001b13: ISZERO 00001b14: PUSH2 0x10f7 00001b17: JUMPI 00001b18: RETURNDATASIZE 00001b19: PUSH1 0x00 00001b1b: DUP1 00001b1c: RETURNDATACOPY 00001b1d: RETURNDATASIZE 00001b1e: PUSH1 0x00 00001b20: REVERT 00001b21: JUMPDEST 00001b22: DUP2 00001b23: DUP2 00001b24: ADD 00001b25: DUP3 00001b26: DUP2 00001b27: LT 00001b28: ISZERO 00001b29: PUSH2 0x09b3 00001b2c: JUMPI 00001b2d: INVALID 00001b2e: JUMPDEST 00001b2f: PUSH1 0x00 00001b31: DUP3 00001b32: DUP3 00001b33: GT 00001b34: ISZERO 00001b35: PUSH2 0x1b3a 00001b38: JUMPI 00001b39: INVALID 00001b3a: JUMPDEST 00001b3b: POP 00001b3c: SWAP1 00001b3d: SUB 00001b3e: SWAP1 00001b3f: JUMP 00001b40: JUMPDEST 00001b41: PUSH1 0x01 00001b43: PUSH1 0xa0 00001b45: PUSH1 0x02 00001b47: EXP 00001b48: SUB 00001b49: DUP2 00001b4a: AND 00001b4b: PUSH1 0x00 00001b4d: SWAP1 00001b4e: DUP2 00001b4f: MSTORE 00001b50: PUSH1 0x09 00001b52: PUSH1 0x20 00001b54: SWAP1 00001b55: DUP2 00001b56: MSTORE 00001b57: PUSH1 0x40 00001b59: DUP1 00001b5a: DUP4 00001b5b: KECCAK256 00001b5c: SLOAD 00001b5d: PUSH1 0x08 00001b5f: DUP4 00001b60: MSTORE 00001b61: DUP2 00001b62: DUP5 00001b63: KECCAK256 00001b64: DUP2 00001b65: DUP6 00001b66: MSTORE 00001b67: SWAP1 00001b68: SWAP3 00001b69: MSTORE 00001b6a: DUP3 00001b6b: KECCAK256 00001b6c: SLOAD 00001b6d: DUP3 00001b6e: DUP2 00001b6f: ISZERO 00001b70: PUSH2 0x1bb0 00001b73: JUMPI 00001b74: POP 00001b75: PUSH1 0x01 00001b77: DUP3 00001b78: ADD 00001b79: JUMPDEST 00001b7a: PUSH1 0x01 00001b7c: SLOAD 00001b7d: DUP2 00001b7e: GT 00001b7f: PUSH2 0x1bb0 00001b82: JUMPI 00001b83: PUSH1 0x01 00001b85: PUSH1 0xa0 00001b87: PUSH1 0x02 00001b89: EXP 00001b8a: SUB 00001b8b: DUP6 00001b8c: AND 00001b8d: PUSH1 0x00 00001b8f: SWAP1 00001b90: DUP2 00001b91: MSTORE 00001b92: PUSH1 0x08 00001b94: PUSH1 0x20 00001b96: SWAP1 00001b97: DUP2 00001b98: MSTORE 00001b99: PUSH1 0x40 00001b9b: DUP1 00001b9c: DUP4 00001b9d: KECCAK256 00001b9e: DUP5 00001b9f: DUP5 00001ba0: MSTORE 00001ba1: SWAP1 00001ba2: SWAP2 00001ba3: MSTORE 00001ba4: SWAP1 00001ba5: KECCAK256 00001ba6: DUP3 00001ba7: SWAP1 00001ba8: SSTORE 00001ba9: PUSH1 0x01 00001bab: ADD 00001bac: PUSH2 0x1b79 00001baf: JUMP 00001bb0: JUMPDEST 00001bb1: PUSH1 0x01 00001bb3: DUP1 00001bb4: SLOAD 00001bb5: PUSH1 0x01 00001bb7: PUSH1 0xa0 00001bb9: PUSH1 0x02 00001bbb: EXP 00001bbc: SUB 00001bbd: DUP8 00001bbe: AND 00001bbf: PUSH1 0x00 00001bc1: SWAP1 00001bc2: DUP2 00001bc3: MSTORE 00001bc4: PUSH1 0x09 00001bc6: PUSH1 0x20 00001bc8: MSTORE 00001bc9: PUSH1 0x40 00001bcb: SWAP1 00001bcc: KECCAK256 00001bcd: SSTORE 00001bce: SWAP4 00001bcf: POP 00001bd0: POP 00001bd1: POP 00001bd2: POP 00001bd3: SWAP2 00001bd4: SWAP1 00001bd5: POP 00001bd6: JUMP 00001bd7: JUMPDEST 00001bd8: PUSH1 0x00 00001bda: DUP3 00001bdb: ISZERO 00001bdc: ISZERO 00001bdd: PUSH2 0x1be8 00001be0: JUMPI 00001be1: POP 00001be2: PUSH1 0x00 00001be4: PUSH2 0x09b3 00001be7: JUMP 00001be8: JUMPDEST 00001be9: POP 00001bea: DUP2 00001beb: DUP2 00001bec: MUL 00001bed: DUP2 00001bee: DUP4 00001bef: DUP3 00001bf0: DUP2 00001bf1: ISZERO 00001bf2: ISZERO 00001bf3: PUSH2 0x1bf8 00001bf6: JUMPI 00001bf7: INVALID 00001bf8: JUMPDEST 00001bf9: DIV 00001bfa: EQ 00001bfb: PUSH2 0x09b3 00001bfe: JUMPI 00001bff: INVALID 00001c00: JUMPDEST 00001c01: PUSH1 0x00 00001c03: DUP2 00001c04: DUP4 00001c05: DUP2 00001c06: ISZERO 00001c07: ISZERO 00001c08: PUSH2 0x1c0d 00001c0b: JUMPI 00001c0c: INVALID 00001c0d: JUMPDEST 00001c0e: DIV 00001c0f: SWAP4 00001c10: SWAP3 00001c11: POP 00001c12: POP 00001c13: POP 00001c14: JUMP 00001c15: JUMPDEST 00001c16: PUSH1 0x01 00001c18: PUSH1 0xa0 00001c1a: PUSH1 0x02 00001c1c: EXP 00001c1d: SUB 00001c1e: DUP2 00001c1f: AND 00001c20: ISZERO 00001c21: ISZERO 00001c22: PUSH2 0x1c2a 00001c25: JUMPI 00001c26: PUSH1 0x00 00001c28: DUP1 00001c29: REVERT 00001c2a: JUMPDEST 00001c2b: PUSH1 0x00 00001c2d: DUP1 00001c2e: SLOAD 00001c2f: PUSH1 0x40 00001c31: MLOAD 00001c32: PUSH1 0x01 00001c34: PUSH1 0xa0 00001c36: PUSH1 0x02 00001c38: EXP 00001c39: SUB 00001c3a: DUP1 00001c3b: DUP6 00001c3c: AND 00001c3d: SWAP4 00001c3e: SWAP3 00001c3f: AND 00001c40: SWAP2 00001c41: PUSH32 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0 00001c62: SWAP2 00001c63: LOG3 00001c64: PUSH1 0x00 00001c66: DUP1 00001c67: SLOAD 00001c68: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001c7d: NOT 00001c7e: AND 00001c7f: PUSH1 0x01 00001c81: PUSH1 0xa0 00001c83: PUSH1 0x02 00001c85: EXP 00001c86: SUB 00001c87: SWAP3 00001c88: SWAP1 00001c89: SWAP3 00001c8a: AND 00001c8b: SWAP2 00001c8c: SWAP1 00001c8d: SWAP2 00001c8e: OR 00001c8f: SWAP1 00001c90: SSTORE 00001c91: JUMP 00001c92: STOP 00001c93: LOG1 00001c94: PUSH6 0x627a7a723058 00001c9b: KECCAK256 00001c9c: UNKNOWN(0x25) 00001c9d: UNKNOWN(0xD1) 00001c9e: MUL 00001c9f: MSTORE8 00001ca0: LOG2 00001ca1: UNKNOWN(0xB9) 00001ca2: UNKNOWN(0xD4) 00001ca3: PUSH29
| Severity | Category | Tool | Title | Confidence | Validated | Confirmed | Details |
|---|---|---|---|---|---|---|---|
| high | other | detector | Untrusted CALL target/value reachable | 60 | no | no |
viewtrace_id: 0x366fbc6c55e165a990b2e92c2ef51089eb01bfc8c6601851008c56426f6b924d
call_targets:
0xfab13ff1654d3dab5df238c2dd3a3be92bac39b5
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0x366fbc6c55e165a990b2e92c2ef51089eb01bfc8c6601851008c56426f6b924d",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0xfab13ff1654d3dab5df238c2dd3a3be92bac39b5"
],
"matched_probe": null,
"target_varies": false,
"classification": "constant_target"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0x03170581",
"selector": "0x03170581",
"calldata_variants": [
"0x03170581",
"0x031705810000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x12fa6feb",
"selector": "0x12fa6feb",
"calldata_variants": [
"0x12fa6feb",
"0x12fa6feb0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x18160ddd",
"selector": "0x18160ddd",
"calldata_variants": [
"0x18160ddd",
"0x18160ddd0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x1dae27b3",
"selector": "0x1dae27b3",
"calldata_variants": [
"0x1dae27b3",
"0x1dae27b30000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x324536eb",
"selector": "0x324536eb",
"calldata_variants": [
"0x324536eb",
"0x324536eb0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x3f4ba83a",
"selector": "0x3f4ba83a",
"calldata_variants": [
"0x3f4ba83a",
"0x3f4ba83a0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x40c10f19",
"selector": "0x40c10f19",
"calldata_variants": [
"0x40c10f19",
"0x40c10f190000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x41e11c59",
"selector": "0x41e11c59",
"calldata_variants": [
"0x41e11c59",
"0x41e11c590000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 2097,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 3134,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 4251,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"call_count": 4,
"guards_detected": [],
"untrusted_call_count": 4
}
|
| high | other | detector | ETH value transfer possible | 55 | no | no |
viewtrace_id: 0x366fbc6c55e165a990b2e92c2ef51089eb01bfc8c6601851008c56426f6b924d
call_targets:
0xfab13ff1654d3dab5df238c2dd3a3be92bac39b5
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0x366fbc6c55e165a990b2e92c2ef51089eb01bfc8c6601851008c56426f6b924d",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0xfab13ff1654d3dab5df238c2dd3a3be92bac39b5"
],
"matched_probe": null,
"target_varies": false,
"classification": "constant_target"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0x03170581",
"selector": "0x03170581",
"calldata_variants": [
"0x03170581",
"0x031705810000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x12fa6feb",
"selector": "0x12fa6feb",
"calldata_variants": [
"0x12fa6feb",
"0x12fa6feb0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x18160ddd",
"selector": "0x18160ddd",
"calldata_variants": [
"0x18160ddd",
"0x18160ddd0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x1dae27b3",
"selector": "0x1dae27b3",
"calldata_variants": [
"0x1dae27b3",
"0x1dae27b30000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x324536eb",
"selector": "0x324536eb",
"calldata_variants": [
"0x324536eb",
"0x324536eb0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x3f4ba83a",
"selector": "0x3f4ba83a",
"calldata_variants": [
"0x3f4ba83a",
"0x3f4ba83a0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x40c10f19",
"selector": "0x40c10f19",
"calldata_variants": [
"0x40c10f19",
"0x40c10f190000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x41e11c59",
"selector": "0x41e11c59",
"calldata_variants": [
"0x41e11c59",
"0x41e11c590000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 2097,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 3134,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 4251,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"eth_value_calls": 4,
"guards_detected": []
}
|