TW
Tripwire
Find contracts. Test them. Review real vulns.

Analysis Run

019ba9a5-c80f-73bd-a762-fe496feaf9d2

complete
Chain ID
1
Address
Block Number
Created
Sat, Jan 10, 2026 8:42 PM
Review Summary

What survived the funnel

Open this run to answer one question: is this real attacker-relevant behavior with real impact, or just normal contract plumbing?

Confirmed
2
Validated
2
Source
Verified
Review Backing
Present
Best current signal
Untrusted CALL target/value reachable
crit 0 high 2 direct contract
Review Checklist
1. Read the findings table first. Ignore raw jobs until the result looks real.
2. Confirm attacker control, not just the existence of a sink.
3. Confirm money or privilege impact.
4. Keep it if the behavior is real. Kill it if this is normal proxy, admin, or upgrade plumbing.

Processing Jobs

Status & attempts
ID Type Status Attempts Heartbeat
37549 artifact.fetch complete 1 / 3 3 months ago
37550 proxy.resolve complete 1 / 3 3 months ago
37551 tool.cast_disasm complete 1 / 3 3 months ago
37552 analysis.bundle complete 1 / 3 3 months ago
37553 capability.graph complete 1 / 3 3 months ago
37554 detector.run complete 1 / 3 3 months ago
37555 validation.fork complete 1 / 3 3 months ago
37704 report.consolidate complete 1 / 6 3 months ago

Artifact

Runtime bytecode: available
Creation TX:
Deployer:
Proxy: no not_proxy
Implementation:
Verified Source: yes
Proxy evidence
{
    "status": "not_proxy"
}

Slither

tool.slither

No slither job recorded yet.

Codex

report.consolidate
Job Status
complete
Attempts
1 / 6
Findings
3
No findings?
no
Summary
Found 3 issues: earlyResolve signatures are reusable/not amount-bound, signatures lack domain separation, and regularTransfer ignores expirationTime.
View stdout
{"no_findings":false,"summary":"Found 3 issues: earlyResolve signatures are reusable/not amount-bound, signatures lack domain separation, and regularTransfer ignores expirationTime.","findings":[{"severity":"medium","category":"auth","title":"earlyResolve signatures are reusable and not bound to withdrawal amount or updated deposit","exploit_scenario":"An authority signs the msigId once to approve a small early withdrawal. The owner can then call earlyResolve repeatedly with any amount (including newly added deposits) because the signature only covers msigId and never includes the amount or a nonce.","recommendation":"Include `amount`, a monotonic nonce, and `address(this)` in the signed payload. Store and consume the nonce to prevent replay. If partial withdrawals are intended, require a fresh signature per withdrawal amount.","evidence":"msigId is computed once from initial parameters and never updated when deposits increase, while earlyResolve only verifies a signature over msigId and allows a free `amount` parameter.","locations":["contracts/Contract.sol:208","contracts/Contract.sol:232","contracts/Contract.sol:251","contracts/Contract.sol:263"]},{"severity":"low","category":"auth","title":"Signatures are not domain separated (contract/chain replay possible)","exploit_scenario":"A signature over msigId is valid on any contract or chain where the same msigId exists. An attacker can reuse a signature collected for one deployment on another deployment or chain fork to trigger earlyResolve without new consent.","recommendation":"Add `address(this)` and chain ID to the signed data (e.g., EIP-712 domain separator) so signatures are only valid for a specific contract and chain.","evidence":"toEthSignedMessageHash hashes only the provided hash, and earlyResolve recovers the signer from msigId alone without including contract or chain context.","locations":["contracts/Contract.sol:53","contracts/Contract.sol:60","contracts/Contract.sol:263"]},{"severity":"low","category":"other","title":"regularTransfer does not enforce expirationTime","exploit_scenario":"Even after the swap has expired, the beneficiary can still call regularTransfer and claim funds as long as the owner/authority has not yet reclaimed the swap. This weakens the expected time-lock guarantees of the HTLC.","recommendation":"Add `require(now <= atomicswaps[swapId].expirationTime);` in regularTransfer (or clearly document the intended race semantics).","evidence":"regularTransfer only checks the secret and does not verify the current time against expirationTime.","locations":["contracts/Contract.sol:364","contracts/Contract.sol:368"]}]}
View stderr
OpenAI Codex v0.77.0 (research preview)
--------
workdir: /tmp/codex-9p_sjgwr
model: gpt-5.2-codex
provider: openai
approval: never
sandbox: read-only
reasoning effort: xhigh
reasoning summaries: auto
session id: 019ba9af-a6cf-7e00-8355-8bf3c1150443
--------
user
You are a security auditor. Audit this Solidity codebase for exploitable vulnerabilities.
Focus on: reentrancy, access control, upgradeability/proxy issues, signature validation, oracle manipulation,
accounting/invariant breaks, external call patterns, unchecked return values, and dangerous delegatecall.

Scope rules:
- You MUST fully read `AUDIT_BUNDLE.txt` before concluding. It contains the complete contents of all first-party Solidity sources in this workspace.
- Treat `lib/` and `@openzeppelin/` as third-party dependencies; skip them unless there is a concrete misuse angle in first-party code.
- If there are only dependency files and no first-party sources, set no_findings=true and explain in summary.

Output MUST be valid JSON matching the provided schema.
- If you find nothing meaningful: set no_findings=true and findings=[].
- Otherwise: set no_findings=false and include findings with severity/category/title and file/line locations when possible.

Output constraints (IMPORTANT):
- severity MUST be exactly one of: info, low, medium, high, critical (lowercase).
- category MUST be exactly one of: access_control, reentrancy, math, oracle, upgradeability, auth, other.
Keep summary short and concrete.
mcp startup: no servers

thinking
**Checking for skill instructions**
exec
/bin/bash -lc ls in /tmp/codex-9p_sjgwr succeeded in 8ms:
AUDIT_BUNDLE.txt
codex-output-schema.json
contracts
exec
/bin/bash -lc 'cat AUDIT_BUNDLE.txt' in /tmp/codex-9p_sjgwr succeeded in 9ms:
This file concatenates the full contents of first-party Solidity sources for auditing.
Do not treat dependency code under lib/ or @openzeppelin/ as first-party.

================================================================================
FILE: contracts/Contract.sol
================================================================================
pragma solidity ^0.4.13;

library ECRecovery {

    /**
     * @dev Recover signer address from a message by using their signature
     * @param hash bytes32 message, the hash is the signed message. What is recovered is the signer address.
     * @param sig bytes signature, the signature is generated using web3.eth.sign()
     */
    function recover(bytes32 hash, bytes sig)
        internal
        pure
        returns (address)
    {


thinking
**Performing detailed security audit**

I’m carefully examining the entire contract’s functions for vulnerabilities like reentrancy, access control flaws, and signature validation issues. There’s a lot to unpack especially around multisig initialization, signature replay risks, and subtle authorization concerns that might allow unintended fund withdrawals or denial-of-service scenarios. Let’s explore the balances between design intention and possible exploit paths.
thinking
**Evaluating advanced edge cases**

There is a lot here involving subtle underflow/overflow checks, transfer gas limits, and signature domain separation concerns. I’m parsing complex interactions like owner-set authority at zero address enabling single-sig, unprotected timeoutResolve callable by anyone, unchecked addition before DSMath safety, and how missing domain separation could let signatures replay across contracts. These nuances will shape the audit report with categorized findings and severity assessments.
exec
/bin/bash -lc 'rg -n "earlyResolve|regularTransfer|toEthSignedMessageHash" contracts/Contract.sol' in /tmp/codex-9p_sjgwr succeeded in 16ms:
49:     * toEthSignedMessageHash
53:    function toEthSignedMessageHash(bytes32 hash)
141:    struct Multisig { // Locked by authority approval (earlyResolve), time (timoutResolve) or conversion into an atomic swap
143:        address authority; // Can approve earlyResolve of funds out of multisig
148:    struct AtomicSwap { // Locked by secret (regularTransfer) or time (reclaimExpiredSwaps)
251:    function earlyResolve(bytes32 msigId, uint amount, bytes sig)
263:        require(otherAuthority == msigId.toEthSignedMessageHash().recover(sig));
364:    function regularTransfer(bytes32 swapId, bytes32 secret)
378:    @notice Batch exection of regularTransfer() function
385:            regularTransfer(swapIds[i], secrets[i]); // Gas estimate `infinite`

thinking
**Checking code lines around earlyResolve**
exec
/bin/bash -lc "nl -ba contracts/Contract.sol | sed -n '240,290p'" in /tmp/codex-9p_sjgwr succeeded in 7ms:
   240	        multisig.unlockTime = unlockTime;
   241	        emit MultisigReparametrized(msigId);
   242	    }
   243	
   244	    /**
   245	    @notice Withdraw ether from the multisig. Equivalent to EARLY_RESOLVE in Nimiq
   246	    @dev the signature is generated using web3.eth.sign() over the unique msigId
   247	    @param msigId Unique (owner, authority, balance != 0) multisig identifier
   248	    @param amount Return this amount from this contract to owner
   249	    @param sig bytes signature of the not transaction sending Authority
   250	    */
   251	    function earlyResolve(bytes32 msigId, uint amount, bytes sig)
   252	        public
   253	    {
   254	        // Require: msg.sender == (owner or authority)
   255	        require(
   256	            multisigs[msigId].owner == msg.sender ||
   257	            multisigs[msigId].authority == msg.sender
   258	        );
   259	        // Require: valid signature from not msg.sending authority

thinking
**Searching for regularTransfer usage**
exec
/bin/bash -lc "nl -ba contracts/Contract.sol | sed -n '350,410p'" in /tmp/codex-9p_sjgwr succeeded in 13ms:
   350	                beneficiaries[i],
   351	                amounts[i],
   352	                fees[i],
   353	                expirationTimes[i],
   354	                hashedSecrets[i]
   355	            ); // Gas estimate `infinite`
   356	    }
   357	
   358	    /**
   359	    @notice Withdraw ether and delete the htlc swap. Equivalent to REGULAR_TRANSFER in Nimiq
   360	    @dev Transfer swap amount to beneficiary of swap and fee to authority
   361	    @param swapId Unique (initiator, beneficiary, amount, fee, expirationTime, hashedSecret) swap identifier
   362	    @param secret Hashed secret of htlc swap
   363	    */
   364	    function regularTransfer(bytes32 swapId, bytes32 secret)
   365	        public
   366	    {
   367	        // Require valid secret provided
   368	        require(sha256(secret) == atomicswaps[swapId].hashedSecret);
   369	        uint amount = atomicswaps[swapId].amount;

thinking
**Preparing lines for signature hash**
exec
/bin/bash -lc "nl -ba contracts/Contract.sol | sed -n '40,80p'" in /tmp/codex-9p_sjgwr succeeded in 6ms:
    40	        if (v != 27 && v != 28) {
    41	            return (address(0));
    42	        } else {
    43	            // solium-disable-next-line arg-overflow
    44	            return ecrecover(hash, v, r, s);
    45	        }
    46	    }
    47	
    48	    /**
    49	     * toEthSignedMessageHash
    50	     * @dev prefix a bytes32 value with "\x19Ethereum Signed Message:"
    51	     * @dev and hash the result
    52	     */
    53	    function toEthSignedMessageHash(bytes32 hash)
    54	        internal
    55	        pure
    56	        returns (bytes32)
    57	    {
    58	        // 32 is the length in bytes of hash,
    59	        // enforced by the type signature above

thinking
**Searching for msigId creation**
exec
/bin/bash -lc "nl -ba contracts/Contract.sol | sed -n '180,230p'" in /tmp/codex-9p_sjgwr succeeded in 14ms:
   180	    */
   181	    function spendFromMultisig(bytes32 msigId, uint amount, address recipient)
   182	        internal
   183	    {
   184	        multisigs[msigId].deposit = sub(multisigs[msigId].deposit, amount);
   185	        if (multisigs[msigId].deposit == 0)
   186	            delete multisigs[msigId];
   187	        recipient.transfer(amount);
   188	    }
   189	
   190	    // PUBLIC METHODS
   191	
   192	    /**
   193	    @notice Initialise and reparametrize Multisig
   194	    @dev Uses msg.value to fund Multisig
   195	    @param authority Second multisig Authority. Usually this is the Exchange.
   196	    @param unlockTime Lock Ether until unlockTime in seconds.
   197	    @return msigId Unique (owner, authority, balance != 0) multisig identifier
   198	    */
   199	    function initialiseMultisig(address authority, uint unlockTime)

thinking
**Summarizing multisig authorization findings**

I’m gathering detailed notes on multisig issues like signature scope, missing domain separation causing replay risks, and expiration enforcement weaknesses, planning to back each point with code line references around earlyResolve, msigId creation, and reparametrize deposit updates.
exec
/bin/bash -lc "nl -ba contracts/Contract.sol | sed -n '226,245p'" in /tmp/codex-9p_sjgwr succeeded in 29ms:
   226	    /**
   227	    @notice Inititate/extend multisig unlockTime and/or initiate/refund multisig deposit
   228	    @dev Can increase deposit and/or unlockTime but not owner or authority
   229	    @param msigId Unique (owner, authority, balance != 0) multisig identifier
   230	    @param unlockTime Lock Ether until unlockTime in seconds.
   231	    */
   232	    function reparametrizeMultisig(bytes32 msigId, uint unlockTime)
   233	        public
   234	        payable
   235	    {
   236	        require(multisigs[msigId].owner == msg.sender);
   237	        Multisig storage multisig = multisigs[msigId];
   238	        multisig.deposit = add(multisig.deposit, msg.value);
   239	        assert(multisig.unlockTime <= unlockTime); // Can only increase unlockTime
   240	        multisig.unlockTime = unlockTime;
   241	        emit MultisigReparametrized(msigId);
   242	    }
   243	
   244	    /**
   245	    @notice Withdraw ether from the multisig. Equivalent to EARLY_RESOLVE in Nimiq

thinking
**Preparing detailed audit findings JSON**

I'll create a structured JSON report summarizing three security findings with clear severity, category, scenarios, recommendations, evidence, and code locations, ensuring JSON validity and adherence to the specified schema for the audit bundle.
codex
{"no_findings":false,"summary":"Found 3 issues: earlyResolve signatures are reusable/not amount-bound, signatures lack domain separation, and regularTransfer ignores expirationTime.","findings":[{"severity":"medium","category":"auth","title":"earlyResolve signatures are reusable and not bound to withdrawal amount or updated deposit","exploit_scenario":"An authority signs the msigId once to approve a small early withdrawal. The owner can then call earlyResolve repeatedly with any amount (including newly added deposits) because the signature only covers msigId and never includes the amount or a nonce.","recommendation":"Include `amount`, a monotonic nonce, and `address(this)` in the signed payload. Store and consume the nonce to prevent replay. If partial withdrawals are intended, require a fresh signature per withdrawal amount.","evidence":"msigId is computed once from initial parameters and never updated when deposits increase, while earlyResolve only verifies a signature over msigId and allows a free `amount` parameter.","locations":["contracts/Contract.sol:208","contracts/Contract.sol:232","contracts/Contract.sol:251","contracts/Contract.sol:263"]},{"severity":"low","category":"auth","title":"Signatures are not domain separated (contract/chain replay possible)","exploit_scenario":"A signature over msigId is valid on any contract or chain where the same msigId exists. An attacker can reuse a signature collected for one deployment on another deployment or chain fork to trigger earlyResolve without new consent.","recommendation":"Add `address(this)` and chain ID to the signed data (e.g., EIP-712 domain separator) so signatures are only valid for a specific contract and chain.","evidence":"toEthSignedMessageHash hashes only the provided hash, and earlyResolve recovers the signer from msigId alone without including contract or chain context.","locations":["contracts/Contract.sol:53","contracts/Contract.sol:60","contracts/Contract.sol:263"]},{"severity":"low","category":"other","title":"regularTransfer does not enforce expirationTime","exploit_scenario":"Even after the swap has expired, the beneficiary can still call regularTransfer and claim funds as long as the owner/authority has not yet reclaimed the swap. This weakens the expected time-lock guarantees of the HTLC.","recommendation":"Add `require(now <= atomicswaps[swapId].expirationTime);` in regularTransfer (or clearly document the intended race semantics).","evidence":"regularTransfer only checks the secret and does not verify the current time against expirationTime.","locations":["contracts/Contract.sol:364","contracts/Contract.sol:368"]}]}
tokens used
25,289
Metadata
{
    "codex": {
        "ran_at": "2026-01-10T20:57:02.392612+00:00",
        "returncode": 0
    },
    "project": {
        "mode": "source",
        "file_count": 1,
        "import_count": 0,
        "first_party_contracts_count": 1
    },
    "summary": "Found 3 issues: earlyResolve signatures are reusable/not amount-bound, signatures lack domain separation, and regularTransfer ignores expirationTime.",
    "raw_final": {
        "summary": "Found 3 issues: earlyResolve signatures are reusable/not amount-bound, signatures lack domain separation, and regularTransfer ignores expirationTime.",
        "findings": [
            {
                "title": "earlyResolve signatures are reusable and not bound to withdrawal amount or updated deposit",
                "category": "auth",
                "evidence": "msigId is computed once from initial parameters and never updated when deposits increase, while earlyResolve only verifies a signature over msigId and allows a free `amount` parameter.",
                "severity": "medium",
                "locations": [
                    "contracts/Contract.sol:208",
                    "contracts/Contract.sol:232",
                    "contracts/Contract.sol:251",
                    "contracts/Contract.sol:263"
                ],
                "recommendation": "Include `amount`, a monotonic nonce, and `address(this)` in the signed payload. Store and consume the nonce to prevent replay. If partial withdrawals are intended, require a fresh signature per withdrawal amount.",
                "exploit_scenario": "An authority signs the msigId once to approve a small early withdrawal. The owner can then call earlyResolve repeatedly with any amount (including newly added deposits) because the signature only covers msigId and never includes the amount or a nonce."
            },
            {
                "title": "Signatures are not domain separated (contract/chain replay possible)",
                "category": "auth",
                "evidence": "toEthSignedMessageHash hashes only the provided hash, and earlyResolve recovers the signer from msigId alone without including contract or chain context.",
                "severity": "low",
                "locations": [
                    "contracts/Contract.sol:53",
                    "contracts/Contract.sol:60",
                    "contracts/Contract.sol:263"
                ],
                "recommendation": "Add `address(this)` and chain ID to the signed data (e.g., EIP-712 domain separator) so signatures are only valid for a specific contract and chain.",
                "exploit_scenario": "A signature over msigId is valid on any contract or chain where the same msigId exists. An attacker can reuse a signature collected for one deployment on another deployment or chain fork to trigger earlyResolve without new consent."
            },
            {
                "title": "regularTransfer does not enforce expirationTime",
                "category": "other",
                "evidence": "regularTransfer only checks the secret and does not verify the current time against expirationTime.",
                "severity": "low",
                "locations": [
                    "contracts/Contract.sol:364",
                    "contracts/Contract.sol:368"
                ],
                "recommendation": "Add `require(now <= atomicswaps[swapId].expirationTime);` in regularTransfer (or clearly document the intended race semantics).",
                "exploit_scenario": "Even after the swap has expired, the beneficiary can still call regularTransfer and claim funds as long as the owner/authority has not yet reclaimed the swap. This weakens the expected time-lock guarantees of the HTLC."
            }
        ],
        "no_findings": false
    },
    "no_findings": false,
    "schema_version": 1
}

Opcode Heuristics

tool.cast_disasm
Delegatecall
0
Selfdestruct
0
CREATE2
0
CALL-family (heavy)
5
EXT*/BALANCE
0
Total opcodes
3176
Flags
No heuristic flags raised.
View cast disassembly output
00000000: PUSH1 0x80
00000002: PUSH1 0x40
00000004: MSTORE
00000005: PUSH1 0x04
00000007: CALLDATASIZE
00000008: LT
00000009: PUSH2 0x00c4
0000000c: JUMPI
0000000d: PUSH4 0xffffffff
00000012: PUSH29 0x0100000000000000000000000000000000000000000000000000000000
00000030: PUSH1 0x00
00000032: CALLDATALOAD
00000033: DIV
00000034: AND
00000035: PUSH4 0x0c4f8f6f
0000003a: DUP2
0000003b: EQ
0000003c: PUSH2 0x00c9
0000003f: JUMPI
00000040: DUP1
00000041: PUSH4 0x48e7a100
00000046: EQ
00000047: PUSH2 0x00e6
0000004a: JUMPI
0000004b: DUP1
0000004c: PUSH4 0x4f55f292
00000051: EQ
00000052: PUSH2 0x00f4
00000055: JUMPI
00000056: DUP1
00000057: PUSH4 0x59391a67
0000005c: EQ
0000005d: PUSH2 0x0136
00000060: JUMPI
00000061: DUP1
00000062: PUSH4 0x77699a06
00000067: EQ
00000068: PUSH2 0x0196
0000006b: JUMPI
0000006c: DUP1
0000006d: PUSH4 0x89b898b8
00000072: EQ
00000073: PUSH2 0x01b1
00000076: JUMPI
00000077: DUP1
00000078: PUSH4 0x8b555789
0000007d: EQ
0000007e: PUSH2 0x0373
00000081: JUMPI
00000082: DUP1
00000083: PUSH4 0xb6f9fda5
00000088: EQ
00000089: PUSH2 0x03bd
0000008c: JUMPI
0000008d: DUP1
0000008e: PUSH4 0xd79c1f7f
00000093: EQ
00000094: PUSH2 0x03d8
00000097: JUMPI
00000098: DUP1
00000099: PUSH4 0xe56c8155
0000009e: EQ
0000009f: PUSH2 0x0432
000000a2: JUMPI
000000a3: DUP1
000000a4: PUSH4 0xee5e4159
000000a9: EQ
000000aa: PUSH2 0x0449
000000ad: JUMPI
000000ae: DUP1
000000af: PUSH4 0xf02fc78f
000000b4: EQ
000000b5: PUSH2 0x04a5
000000b8: JUMPI
000000b9: DUP1
000000ba: PUSH4 0xf71d0669
000000bf: EQ
000000c0: PUSH2 0x0533
000000c3: JUMPI
000000c4: JUMPDEST
000000c5: PUSH1 0x00
000000c7: DUP1
000000c8: REVERT
000000c9: JUMPDEST
000000ca: CALLVALUE
000000cb: DUP1
000000cc: ISZERO
000000cd: PUSH2 0x00d5
000000d0: JUMPI
000000d1: PUSH1 0x00
000000d3: DUP1
000000d4: REVERT
000000d5: JUMPDEST
000000d6: POP
000000d7: PUSH2 0x00e4
000000da: PUSH1 0x04
000000dc: CALLDATALOAD
000000dd: PUSH1 0x24
000000df: CALLDATALOAD
000000e0: PUSH2 0x055f
000000e3: JUMP
000000e4: JUMPDEST
000000e5: STOP
000000e6: JUMPDEST
000000e7: PUSH2 0x00e4
000000ea: PUSH1 0x04
000000ec: CALLDATALOAD
000000ed: PUSH1 0x24
000000ef: CALLDATALOAD
000000f0: PUSH2 0x0665
000000f3: JUMP
000000f4: JUMPDEST
000000f5: CALLVALUE
000000f6: DUP1
000000f7: ISZERO
000000f8: PUSH2 0x0100
000000fb: JUMPI
000000fc: PUSH1 0x00
000000fe: DUP1
000000ff: REVERT
00000100: JUMPDEST
00000101: POP
00000102: PUSH2 0x0124
00000105: PUSH1 0x04
00000107: CALLDATALOAD
00000108: PUSH1 0x01
0000010a: PUSH1 0xa0
0000010c: PUSH1 0x02
0000010e: EXP
0000010f: SUB
00000110: PUSH1 0x24
00000112: CALLDATALOAD
00000113: AND
00000114: PUSH1 0x44
00000116: CALLDATALOAD
00000117: PUSH1 0x64
00000119: CALLDATALOAD
0000011a: PUSH1 0x84
0000011c: CALLDATALOAD
0000011d: PUSH1 0xa4
0000011f: CALLDATALOAD
00000120: PUSH2 0x06f8
00000123: JUMP
00000124: JUMPDEST
00000125: PUSH1 0x40
00000127: DUP1
00000128: MLOAD
00000129: SWAP2
0000012a: DUP3
0000012b: MSTORE
0000012c: MLOAD
0000012d: SWAP1
0000012e: DUP2
0000012f: SWAP1
00000130: SUB
00000131: PUSH1 0x20
00000133: ADD
00000134: SWAP1
00000135: RETURN
00000136: JUMPDEST
00000137: CALLVALUE
00000138: DUP1
00000139: ISZERO
0000013a: PUSH2 0x0142
0000013d: JUMPI
0000013e: PUSH1 0x00
00000140: DUP1
00000141: REVERT
00000142: JUMPDEST
00000143: POP
00000144: PUSH1 0x40
00000146: DUP1
00000147: MLOAD
00000148: PUSH1 0x20
0000014a: PUSH1 0x04
0000014c: PUSH1 0x44
0000014e: CALLDATALOAD
0000014f: DUP2
00000150: DUP2
00000151: ADD
00000152: CALLDATALOAD
00000153: PUSH1 0x1f
00000155: DUP2
00000156: ADD
00000157: DUP5
00000158: SWAP1
00000159: DIV
0000015a: DUP5
0000015b: MUL
0000015c: DUP6
0000015d: ADD
0000015e: DUP5
0000015f: ADD
00000160: SWAP1
00000161: SWAP6
00000162: MSTORE
00000163: DUP5
00000164: DUP5
00000165: MSTORE
00000166: PUSH2 0x00e4
00000169: SWAP5
0000016a: DUP3
0000016b: CALLDATALOAD
0000016c: SWAP5
0000016d: PUSH1 0x24
0000016f: DUP1
00000170: CALLDATALOAD
00000171: SWAP6
00000172: CALLDATASIZE
00000173: SWAP6
00000174: SWAP5
00000175: PUSH1 0x64
00000177: SWAP5
00000178: SWAP3
00000179: ADD
0000017a: SWAP2
0000017b: SWAP1
0000017c: DUP2
0000017d: SWAP1
0000017e: DUP5
0000017f: ADD
00000180: DUP4
00000181: DUP3
00000182: DUP1
00000183: DUP3
00000184: DUP5
00000185: CALLDATACOPY
00000186: POP
00000187: SWAP5
00000188: SWAP8
00000189: POP
0000018a: PUSH2 0x092c
0000018d: SWAP7
0000018e: POP
0000018f: POP
00000190: POP
00000191: POP
00000192: POP
00000193: POP
00000194: POP
00000195: JUMP
00000196: JUMPDEST
00000197: CALLVALUE
00000198: DUP1
00000199: ISZERO
0000019a: PUSH2 0x01a2
0000019d: JUMPI
0000019e: PUSH1 0x00
000001a0: DUP1
000001a1: REVERT
000001a2: JUMPDEST
000001a3: POP
000001a4: PUSH2 0x00e4
000001a7: PUSH1 0x04
000001a9: CALLDATALOAD
000001aa: PUSH1 0x24
000001ac: CALLDATALOAD
000001ad: PUSH2 0x0a29
000001b0: JUMP
000001b1: JUMPDEST
000001b2: CALLVALUE
000001b3: DUP1
000001b4: ISZERO
000001b5: PUSH2 0x01bd
000001b8: JUMPI
000001b9: PUSH1 0x00
000001bb: DUP1
000001bc: REVERT
000001bd: JUMPDEST
000001be: POP
000001bf: PUSH1 0x40
000001c1: DUP1
000001c2: MLOAD
000001c3: PUSH1 0x20
000001c5: PUSH1 0x04
000001c7: DUP1
000001c8: CALLDATALOAD
000001c9: DUP1
000001ca: DUP3
000001cb: ADD
000001cc: CALLDATALOAD
000001cd: DUP4
000001ce: DUP2
000001cf: MUL
000001d0: DUP1
000001d1: DUP7
000001d2: ADD
000001d3: DUP6
000001d4: ADD
000001d5: SWAP1
000001d6: SWAP7
000001d7: MSTORE
000001d8: DUP1
000001d9: DUP6
000001da: MSTORE
000001db: PUSH2 0x0323
000001de: SWAP6
000001df: CALLDATASIZE
000001e0: SWAP6
000001e1: SWAP4
000001e2: SWAP5
000001e3: PUSH1 0x24
000001e5: SWAP5
000001e6: SWAP4
000001e7: DUP6
000001e8: ADD
000001e9: SWAP3
000001ea: SWAP2
000001eb: DUP3
000001ec: SWAP2
000001ed: DUP6
000001ee: ADD
000001ef: SWAP1
000001f0: DUP5
000001f1: SWAP1
000001f2: DUP1
000001f3: DUP3
000001f4: DUP5
000001f5: CALLDATACOPY
000001f6: POP
000001f7: POP
000001f8: PUSH1 0x40
000001fa: DUP1
000001fb: MLOAD
000001fc: DUP8
000001fd: CALLDATALOAD
000001fe: DUP10
000001ff: ADD
00000200: DUP1
00000201: CALLDATALOAD
00000202: PUSH1 0x20
00000204: DUP2
00000205: DUP2
00000206: MUL
00000207: DUP5
00000208: DUP2
00000209: ADD
0000020a: DUP3
0000020b: ADD
0000020c: SWAP1
0000020d: SWAP6
0000020e: MSTORE
0000020f: DUP2
00000210: DUP5
00000211: MSTORE
00000212: SWAP9
00000213: SWAP12
00000214: SWAP11
00000215: SWAP10
00000216: DUP10
00000217: ADD
00000218: SWAP9
00000219: SWAP3
0000021a: SWAP8
0000021b: POP
0000021c: SWAP1
0000021d: DUP3
0000021e: ADD
0000021f: SWAP6
00000220: POP
00000221: SWAP4
00000222: POP
00000223: DUP4
00000224: SWAP3
00000225: POP
00000226: DUP6
00000227: ADD
00000228: SWAP1
00000229: DUP5
0000022a: SWAP1
0000022b: DUP1
0000022c: DUP3
0000022d: DUP5
0000022e: CALLDATACOPY
0000022f: POP
00000230: POP
00000231: PUSH1 0x40
00000233: DUP1
00000234: MLOAD
00000235: DUP8
00000236: CALLDATALOAD
00000237: DUP10
00000238: ADD
00000239: DUP1
0000023a: CALLDATALOAD
0000023b: PUSH1 0x20
0000023d: DUP2
0000023e: DUP2
0000023f: MUL
00000240: DUP5
00000241: DUP2
00000242: ADD
00000243: DUP3
00000244: ADD
00000245: SWAP1
00000246: SWAP6
00000247: MSTORE
00000248: DUP2
00000249: DUP5
0000024a: MSTORE
0000024b: SWAP9
0000024c: SWAP12
0000024d: SWAP11
0000024e: SWAP10
0000024f: DUP10
00000250: ADD
00000251: SWAP9
00000252: SWAP3
00000253: SWAP8
00000254: POP
00000255: SWAP1
00000256: DUP3
00000257: ADD
00000258: SWAP6
00000259: POP
0000025a: SWAP4
0000025b: POP
0000025c: DUP4
0000025d: SWAP3
0000025e: POP
0000025f: DUP6
00000260: ADD
00000261: SWAP1
00000262: DUP5
00000263: SWAP1
00000264: DUP1
00000265: DUP3
00000266: DUP5
00000267: CALLDATACOPY
00000268: POP
00000269: POP
0000026a: PUSH1 0x40
0000026c: DUP1
0000026d: MLOAD
0000026e: DUP8
0000026f: CALLDATALOAD
00000270: DUP10
00000271: ADD
00000272: DUP1
00000273: CALLDATALOAD
00000274: PUSH1 0x20
00000276: DUP2
00000277: DUP2
00000278: MUL
00000279: DUP5
0000027a: DUP2
0000027b: ADD
0000027c: DUP3
0000027d: ADD
0000027e: SWAP1
0000027f: SWAP6
00000280: MSTORE
00000281: DUP2
00000282: DUP5
00000283: MSTORE
00000284: SWAP9
00000285: SWAP12
00000286: SWAP11
00000287: SWAP10
00000288: DUP10
00000289: ADD
0000028a: SWAP9
0000028b: SWAP3
0000028c: SWAP8
0000028d: POP
0000028e: SWAP1
0000028f: DUP3
00000290: ADD
00000291: SWAP6
00000292: POP
00000293: SWAP4
00000294: POP
00000295: DUP4
00000296: SWAP3
00000297: POP
00000298: DUP6
00000299: ADD
0000029a: SWAP1
0000029b: DUP5
0000029c: SWAP1
0000029d: DUP1
0000029e: DUP3
0000029f: DUP5
000002a0: CALLDATACOPY
000002a1: POP
000002a2: POP
000002a3: PUSH1 0x40
000002a5: DUP1
000002a6: MLOAD
000002a7: DUP8
000002a8: CALLDATALOAD
000002a9: DUP10
000002aa: ADD
000002ab: DUP1
000002ac: CALLDATALOAD
000002ad: PUSH1 0x20
000002af: DUP2
000002b0: DUP2
000002b1: MUL
000002b2: DUP5
000002b3: DUP2
000002b4: ADD
000002b5: DUP3
000002b6: ADD
000002b7: SWAP1
000002b8: SWAP6
000002b9: MSTORE
000002ba: DUP2
000002bb: DUP5
000002bc: MSTORE
000002bd: SWAP9
000002be: SWAP12
000002bf: SWAP11
000002c0: SWAP10
000002c1: DUP10
000002c2: ADD
000002c3: SWAP9
000002c4: SWAP3
000002c5: SWAP8
000002c6: POP
000002c7: SWAP1
000002c8: DUP3
000002c9: ADD
000002ca: SWAP6
000002cb: POP
000002cc: SWAP4
000002cd: POP
000002ce: DUP4
000002cf: SWAP3
000002d0: POP
000002d1: DUP6
000002d2: ADD
000002d3: SWAP1
000002d4: DUP5
000002d5: SWAP1
000002d6: DUP1
000002d7: DUP3
000002d8: DUP5
000002d9: CALLDATACOPY
000002da: POP
000002db: POP
000002dc: PUSH1 0x40
000002de: DUP1
000002df: MLOAD
000002e0: DUP8
000002e1: CALLDATALOAD
000002e2: DUP10
000002e3: ADD
000002e4: DUP1
000002e5: CALLDATALOAD
000002e6: PUSH1 0x20
000002e8: DUP2
000002e9: DUP2
000002ea: MUL
000002eb: DUP5
000002ec: DUP2
000002ed: ADD
000002ee: DUP3
000002ef: ADD
000002f0: SWAP1
000002f1: SWAP6
000002f2: MSTORE
000002f3: DUP2
000002f4: DUP5
000002f5: MSTORE
000002f6: SWAP9
000002f7: SWAP12
000002f8: SWAP11
000002f9: SWAP10
000002fa: DUP10
000002fb: ADD
000002fc: SWAP9
000002fd: SWAP3
000002fe: SWAP8
000002ff: POP
00000300: SWAP1
00000301: DUP3
00000302: ADD
00000303: SWAP6
00000304: POP
00000305: SWAP4
00000306: POP
00000307: DUP4
00000308: SWAP3
00000309: POP
0000030a: DUP6
0000030b: ADD
0000030c: SWAP1
0000030d: DUP5
0000030e: SWAP1
0000030f: DUP1
00000310: DUP3
00000311: DUP5
00000312: CALLDATACOPY
00000313: POP
00000314: SWAP5
00000315: SWAP8
00000316: POP
00000317: PUSH2 0x0b3f
0000031a: SWAP7
0000031b: POP
0000031c: POP
0000031d: POP
0000031e: POP
0000031f: POP
00000320: POP
00000321: POP
00000322: JUMP
00000323: JUMPDEST
00000324: PUSH1 0x40
00000326: DUP1
00000327: MLOAD
00000328: PUSH1 0x20
0000032a: DUP1
0000032b: DUP3
0000032c: MSTORE
0000032d: DUP4
0000032e: MLOAD
0000032f: DUP2
00000330: DUP4
00000331: ADD
00000332: MSTORE
00000333: DUP4
00000334: MLOAD
00000335: SWAP2
00000336: SWAP3
00000337: DUP4
00000338: SWAP3
00000339: SWAP1
0000033a: DUP4
0000033b: ADD
0000033c: SWAP2
0000033d: DUP6
0000033e: DUP2
0000033f: ADD
00000340: SWAP2
00000341: MUL
00000342: DUP1
00000343: DUP4
00000344: DUP4
00000345: PUSH1 0x00
00000347: JUMPDEST
00000348: DUP4
00000349: DUP2
0000034a: LT
0000034b: ISZERO
0000034c: PUSH2 0x035f
0000034f: JUMPI
00000350: DUP2
00000351: DUP2
00000352: ADD
00000353: MLOAD
00000354: DUP4
00000355: DUP3
00000356: ADD
00000357: MSTORE
00000358: PUSH1 0x20
0000035a: ADD
0000035b: PUSH2 0x0347
0000035e: JUMP
0000035f: JUMPDEST
00000360: POP
00000361: POP
00000362: POP
00000363: POP
00000364: SWAP1
00000365: POP
00000366: ADD
00000367: SWAP3
00000368: POP
00000369: POP
0000036a: POP
0000036b: PUSH1 0x40
0000036d: MLOAD
0000036e: DUP1
0000036f: SWAP2
00000370: SUB
00000371: SWAP1
00000372: RETURN
00000373: JUMPDEST
00000374: CALLVALUE
00000375: DUP1
00000376: ISZERO
00000377: PUSH2 0x037f
0000037a: JUMPI
0000037b: PUSH1 0x00
0000037d: DUP1
0000037e: REVERT
0000037f: JUMPDEST
00000380: POP
00000381: PUSH2 0x038b
00000384: PUSH1 0x04
00000386: CALLDATALOAD
00000387: PUSH2 0x0c0d
0000038a: JUMP
0000038b: JUMPDEST
0000038c: PUSH1 0x40
0000038e: DUP1
0000038f: MLOAD
00000390: PUSH1 0x01
00000392: PUSH1 0xa0
00000394: PUSH1 0x02
00000396: EXP
00000397: SUB
00000398: SWAP6
00000399: DUP7
0000039a: AND
0000039b: DUP2
0000039c: MSTORE
0000039d: SWAP4
0000039e: SWAP1
0000039f: SWAP5
000003a0: AND
000003a1: PUSH1 0x20
000003a3: DUP5
000003a4: ADD
000003a5: MSTORE
000003a6: DUP3
000003a7: DUP5
000003a8: ADD
000003a9: SWAP2
000003aa: SWAP1
000003ab: SWAP2
000003ac: MSTORE
000003ad: PUSH1 0x60
000003af: DUP3
000003b0: ADD
000003b1: MSTORE
000003b2: SWAP1
000003b3: MLOAD
000003b4: SWAP1
000003b5: DUP2
000003b6: SWAP1
000003b7: SUB
000003b8: PUSH1 0x80
000003ba: ADD
000003bb: SWAP1
000003bc: RETURN
000003bd: JUMPDEST
000003be: CALLVALUE
000003bf: DUP1
000003c0: ISZERO
000003c1: PUSH2 0x03c9
000003c4: JUMPI
000003c5: PUSH1 0x00
000003c7: DUP1
000003c8: REVERT
000003c9: JUMPDEST
000003ca: POP
000003cb: PUSH2 0x00e4
000003ce: PUSH1 0x04
000003d0: CALLDATALOAD
000003d1: PUSH1 0x24
000003d3: CALLDATALOAD
000003d4: PUSH2 0x0c41
000003d7: JUMP
000003d8: JUMPDEST
000003d9: CALLVALUE
000003da: DUP1
000003db: ISZERO
000003dc: PUSH2 0x03e4
000003df: JUMPI
000003e0: PUSH1 0x00
000003e2: DUP1
000003e3: REVERT
000003e4: JUMPDEST
000003e5: POP
000003e6: PUSH1 0x40
000003e8: DUP1
000003e9: MLOAD
000003ea: PUSH1 0x20
000003ec: PUSH1 0x04
000003ee: PUSH1 0x24
000003f0: DUP1
000003f1: CALLDATALOAD
000003f2: DUP3
000003f3: DUP2
000003f4: ADD
000003f5: CALLDATALOAD
000003f6: DUP5
000003f7: DUP2
000003f8: MUL
000003f9: DUP1
000003fa: DUP8
000003fb: ADD
000003fc: DUP7
000003fd: ADD
000003fe: SWAP1
000003ff: SWAP8
00000400: MSTORE
00000401: DUP1
00000402: DUP7
00000403: MSTORE
00000404: PUSH2 0x00e4
00000407: SWAP7
00000408: DUP5
00000409: CALLDATALOAD
0000040a: SWAP7
0000040b: CALLDATASIZE
0000040c: SWAP7
0000040d: PUSH1 0x44
0000040f: SWAP6
00000410: SWAP2
00000411: SWAP5
00000412: SWAP1
00000413: SWAP2
00000414: ADD
00000415: SWAP3
00000416: SWAP2
00000417: DUP3
00000418: SWAP2
00000419: DUP6
0000041a: ADD
0000041b: SWAP1
0000041c: DUP5
0000041d: SWAP1
0000041e: DUP1
0000041f: DUP3
00000420: DUP5
00000421: CALLDATACOPY
00000422: POP
00000423: SWAP5
00000424: SWAP8
00000425: POP
00000426: PUSH2 0x0c88
00000429: SWAP7
0000042a: POP
0000042b: POP
0000042c: POP
0000042d: POP
0000042e: POP
0000042f: POP
00000430: POP
00000431: JUMP
00000432: JUMPDEST
00000433: PUSH2 0x0124
00000436: PUSH1 0x01
00000438: PUSH1 0xa0
0000043a: PUSH1 0x02
0000043c: EXP
0000043d: SUB
0000043e: PUSH1 0x04
00000440: CALLDATALOAD
00000441: AND
00000442: PUSH1 0x24
00000444: CALLDATALOAD
00000445: PUSH2 0x0cd6
00000448: JUMP
00000449: JUMPDEST
0000044a: CALLVALUE
0000044b: DUP1
0000044c: ISZERO
0000044d: PUSH2 0x0455
00000450: JUMPI
00000451: PUSH1 0x00
00000453: DUP1
00000454: REVERT
00000455: JUMPDEST
00000456: POP
00000457: PUSH2 0x0461
0000045a: PUSH1 0x04
0000045c: CALLDATALOAD
0000045d: PUSH2 0x0dcf
00000460: JUMP
00000461: JUMPDEST
00000462: PUSH1 0x40
00000464: DUP1
00000465: MLOAD
00000466: SWAP8
00000467: DUP9
00000468: MSTORE
00000469: PUSH1 0x01
0000046b: PUSH1 0xa0
0000046d: PUSH1 0x02
0000046f: EXP
00000470: SUB
00000471: SWAP7
00000472: DUP8
00000473: AND
00000474: PUSH1 0x20
00000476: DUP10
00000477: ADD
00000478: MSTORE
00000479: SWAP5
0000047a: SWAP1
0000047b: SWAP6
0000047c: AND
0000047d: DUP7
0000047e: DUP6
0000047f: ADD
00000480: MSTORE
00000481: PUSH1 0x60
00000483: DUP7
00000484: ADD
00000485: SWAP3
00000486: SWAP1
00000487: SWAP3
00000488: MSTORE
00000489: PUSH1 0x80
0000048b: DUP6
0000048c: ADD
0000048d: MSTORE
0000048e: PUSH1 0xa0
00000490: DUP5
00000491: ADD
00000492: MSTORE
00000493: PUSH1 0xc0
00000495: DUP4
00000496: ADD
00000497: SWAP2
00000498: SWAP1
00000499: SWAP2
0000049a: MSTORE
0000049b: MLOAD
0000049c: SWAP1
0000049d: DUP2
0000049e: SWAP1
0000049f: SUB
000004a0: PUSH1 0xe0
000004a2: ADD
000004a3: SWAP1
000004a4: RETURN
000004a5: JUMPDEST
000004a6: CALLVALUE
000004a7: DUP1
000004a8: ISZERO
000004a9: PUSH2 0x04b1
000004ac: JUMPI
000004ad: PUSH1 0x00
000004af: DUP1
000004b0: REVERT
000004b1: JUMPDEST
000004b2: POP
000004b3: PUSH1 0x40
000004b5: DUP1
000004b6: MLOAD
000004b7: PUSH1 0x20
000004b9: PUSH1 0x04
000004bb: DUP1
000004bc: CALLDATALOAD
000004bd: DUP1
000004be: DUP3
000004bf: ADD
000004c0: CALLDATALOAD
000004c1: DUP4
000004c2: DUP2
000004c3: MUL
000004c4: DUP1
000004c5: DUP7
000004c6: ADD
000004c7: DUP6
000004c8: ADD
000004c9: SWAP1
000004ca: SWAP7
000004cb: MSTORE
000004cc: DUP1
000004cd: DUP6
000004ce: MSTORE
000004cf: PUSH2 0x00e4
000004d2: SWAP6
000004d3: CALLDATASIZE
000004d4: SWAP6
000004d5: SWAP4
000004d6: SWAP5
000004d7: PUSH1 0x24
000004d9: SWAP5
000004da: SWAP4
000004db: DUP6
000004dc: ADD
000004dd: SWAP3
000004de: SWAP2
000004df: DUP3
000004e0: SWAP2
000004e1: DUP6
000004e2: ADD
000004e3: SWAP1
000004e4: DUP5
000004e5: SWAP1
000004e6: DUP1
000004e7: DUP3
000004e8: DUP5
000004e9: CALLDATACOPY
000004ea: POP
000004eb: POP
000004ec: PUSH1 0x40
000004ee: DUP1
000004ef: MLOAD
000004f0: DUP8
000004f1: CALLDATALOAD
000004f2: DUP10
000004f3: ADD
000004f4: DUP1
000004f5: CALLDATALOAD
000004f6: PUSH1 0x20
000004f8: DUP2
000004f9: DUP2
000004fa: MUL
000004fb: DUP5
000004fc: DUP2
000004fd: ADD
000004fe: DUP3
000004ff: ADD
00000500: SWAP1
00000501: SWAP6
00000502: MSTORE
00000503: DUP2
00000504: DUP5
00000505: MSTORE
00000506: SWAP9
00000507: SWAP12
00000508: SWAP11
00000509: SWAP10
0000050a: DUP10
0000050b: ADD
0000050c: SWAP9
0000050d: SWAP3
0000050e: SWAP8
0000050f: POP
00000510: SWAP1
00000511: DUP3
00000512: ADD
00000513: SWAP6
00000514: POP
00000515: SWAP4
00000516: POP
00000517: DUP4
00000518: SWAP3
00000519: POP
0000051a: DUP6
0000051b: ADD
0000051c: SWAP1
0000051d: DUP5
0000051e: SWAP1
0000051f: DUP1
00000520: DUP3
00000521: DUP5
00000522: CALLDATACOPY
00000523: POP
00000524: SWAP5
00000525: SWAP8
00000526: POP
00000527: PUSH2 0x0e18
0000052a: SWAP7
0000052b: POP
0000052c: POP
0000052d: POP
0000052e: POP
0000052f: POP
00000530: POP
00000531: POP
00000532: JUMP
00000533: JUMPDEST
00000534: CALLVALUE
00000535: DUP1
00000536: ISZERO
00000537: PUSH2 0x053f
0000053a: JUMPI
0000053b: PUSH1 0x00
0000053d: DUP1
0000053e: REVERT
0000053f: JUMPDEST
00000540: POP
00000541: PUSH2 0x054b
00000544: PUSH1 0x04
00000546: CALLDATALOAD
00000547: PUSH2 0x0e78
0000054a: JUMP
0000054b: JUMPDEST
0000054c: PUSH1 0x40
0000054e: DUP1
0000054f: MLOAD
00000550: SWAP2
00000551: ISZERO
00000552: ISZERO
00000553: DUP3
00000554: MSTORE
00000555: MLOAD
00000556: SWAP1
00000557: DUP2
00000558: SWAP1
00000559: SUB
0000055a: PUSH1 0x20
0000055c: ADD
0000055d: SWAP1
0000055e: RETURN
0000055f: JUMPDEST
00000560: PUSH1 0x00
00000562: DUP3
00000563: DUP2
00000564: MSTORE
00000565: PUSH1 0x01
00000567: PUSH1 0x20
00000569: SWAP1
0000056a: DUP2
0000056b: MSTORE
0000056c: PUSH1 0x40
0000056e: DUP1
0000056f: DUP4
00000570: KECCAK256
00000571: PUSH1 0x06
00000573: ADD
00000574: SLOAD
00000575: DUP2
00000576: MLOAD
00000577: DUP6
00000578: DUP2
00000579: MSTORE
0000057a: SWAP2
0000057b: MLOAD
0000057c: DUP5
0000057d: SWAP4
0000057e: SWAP2
0000057f: SWAP3
00000580: PUSH1 0x02
00000582: SWAP3
00000583: DUP2
00000584: DUP2
00000585: ADD
00000586: SWAP3
00000587: SWAP1
00000588: SWAP2
00000589: DUP2
0000058a: SWAP1
0000058b: SUB
0000058c: DUP3
0000058d: ADD
0000058e: DUP2
0000058f: DUP8
00000590: DUP7
00000591: GAS
00000592: CALL
00000593: ISZERO
00000594: DUP1
00000595: ISZERO
00000596: PUSH2 0x05a3
00000599: JUMPI
0000059a: RETURNDATASIZE
0000059b: PUSH1 0x00
0000059d: DUP1
0000059e: RETURNDATACOPY
0000059f: RETURNDATASIZE
000005a0: PUSH1 0x00
000005a2: REVERT
000005a3: JUMPDEST
000005a4: POP
000005a5: POP
000005a6: POP
000005a7: PUSH1 0x40
000005a9: MLOAD
000005aa: RETURNDATASIZE
000005ab: PUSH1 0x20
000005ad: DUP2
000005ae: LT
000005af: ISZERO
000005b0: PUSH2 0x05b8
000005b3: JUMPI
000005b4: PUSH1 0x00
000005b6: DUP1
000005b7: REVERT
000005b8: JUMPDEST
000005b9: POP
000005ba: MLOAD
000005bb: EQ
000005bc: PUSH2 0x05c4
000005bf: JUMPI
000005c0: PUSH1 0x00
000005c2: DUP1
000005c3: REVERT
000005c4: JUMPDEST
000005c5: POP
000005c6: POP
000005c7: PUSH1 0x00
000005c9: DUP3
000005ca: DUP2
000005cb: MSTORE
000005cc: PUSH1 0x01
000005ce: PUSH1 0x20
000005d0: DUP2
000005d1: SWAP1
000005d2: MSTORE
000005d3: PUSH1 0x40
000005d5: DUP1
000005d6: DUP4
000005d7: KECCAK256
000005d8: PUSH1 0x03
000005da: DUP2
000005db: ADD
000005dc: DUP1
000005dd: SLOAD
000005de: PUSH1 0x02
000005e0: DUP4
000005e1: ADD
000005e2: DUP1
000005e3: SLOAD
000005e4: DUP8
000005e5: DUP6
000005e6: SSTORE
000005e7: SWAP6
000005e8: DUP5
000005e9: ADD
000005ea: DUP1
000005eb: SLOAD
000005ec: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000601: NOT
00000602: SWAP1
00000603: DUP2
00000604: AND
00000605: SWAP1
00000606: SWAP2
00000607: SSTORE
00000608: DUP7
00000609: AND
0000060a: SWAP1
0000060b: SSTORE
0000060c: SWAP1
0000060d: DUP6
0000060e: SWAP1
0000060f: SSTORE
00000610: PUSH1 0x04
00000612: DUP3
00000613: ADD
00000614: DUP6
00000615: SWAP1
00000616: SSTORE
00000617: PUSH1 0x05
00000619: DUP3
0000061a: ADD
0000061b: DUP6
0000061c: SWAP1
0000061d: SSTORE
0000061e: PUSH1 0x06
00000620: SWAP1
00000621: SWAP2
00000622: ADD
00000623: DUP5
00000624: SWAP1
00000625: SSTORE
00000626: SWAP1
00000627: MLOAD
00000628: SWAP1
00000629: SWAP3
0000062a: PUSH1 0x01
0000062c: PUSH1 0xa0
0000062e: PUSH1 0x02
00000630: EXP
00000631: SUB
00000632: SWAP1
00000633: SWAP3
00000634: AND
00000635: SWAP2
00000636: DUP3
00000637: SWAP2
00000638: DUP5
00000639: ISZERO
0000063a: PUSH2 0x08fc
0000063d: MUL
0000063e: SWAP2
0000063f: DUP6
00000640: SWAP2
00000641: SWAP1
00000642: DUP2
00000643: DUP2
00000644: DUP2
00000645: DUP6
00000646: DUP9
00000647: DUP9
00000648: CALL
00000649: SWAP4
0000064a: POP
0000064b: POP
0000064c: POP
0000064d: POP
0000064e: ISZERO
0000064f: DUP1
00000650: ISZERO
00000651: PUSH2 0x065e
00000654: JUMPI
00000655: RETURNDATASIZE
00000656: PUSH1 0x00
00000658: DUP1
00000659: RETURNDATACOPY
0000065a: RETURNDATASIZE
0000065b: PUSH1 0x00
0000065d: REVERT
0000065e: JUMPDEST
0000065f: POP
00000660: POP
00000661: POP
00000662: POP
00000663: POP
00000664: JUMP
00000665: JUMPDEST
00000666: PUSH1 0x00
00000668: DUP3
00000669: DUP2
0000066a: MSTORE
0000066b: PUSH1 0x20
0000066d: DUP2
0000066e: SWAP1
0000066f: MSTORE
00000670: PUSH1 0x40
00000672: DUP2
00000673: KECCAK256
00000674: SLOAD
00000675: PUSH1 0x01
00000677: PUSH1 0xa0
00000679: PUSH1 0x02
0000067b: EXP
0000067c: SUB
0000067d: AND
0000067e: CALLER
0000067f: EQ
00000680: PUSH2 0x0688
00000683: JUMPI
00000684: PUSH1 0x00
00000686: DUP1
00000687: REVERT
00000688: JUMPDEST
00000689: POP
0000068a: PUSH1 0x00
0000068c: DUP3
0000068d: DUP2
0000068e: MSTORE
0000068f: PUSH1 0x20
00000691: DUP2
00000692: SWAP1
00000693: MSTORE
00000694: PUSH1 0x40
00000696: SWAP1
00000697: KECCAK256
00000698: PUSH1 0x02
0000069a: DUP2
0000069b: ADD
0000069c: SLOAD
0000069d: PUSH2 0x06a6
000006a0: SWAP1
000006a1: CALLVALUE
000006a2: PUSH2 0x0e8d
000006a5: JUMP
000006a6: JUMPDEST
000006a7: PUSH1 0x02
000006a9: DUP3
000006aa: ADD
000006ab: SSTORE
000006ac: PUSH1 0x03
000006ae: DUP2
000006af: ADD
000006b0: SLOAD
000006b1: DUP3
000006b2: LT
000006b3: ISZERO
000006b4: PUSH2 0x06b9
000006b7: JUMPI
000006b8: INVALID
000006b9: JUMPDEST
000006ba: PUSH1 0x03
000006bc: DUP2
000006bd: ADD
000006be: DUP3
000006bf: SWAP1
000006c0: SSTORE
000006c1: PUSH1 0x40
000006c3: DUP1
000006c4: MLOAD
000006c5: DUP5
000006c6: DUP2
000006c7: MSTORE
000006c8: SWAP1
000006c9: MLOAD
000006ca: PUSH32 0xd38d2e55758d88ddc85725e6f35ada53c5c50d90a4f92140ac2b440b5516162e
000006eb: SWAP2
000006ec: DUP2
000006ed: SWAP1
000006ee: SUB
000006ef: PUSH1 0x20
000006f1: ADD
000006f2: SWAP1
000006f3: LOG1
000006f4: POP
000006f5: POP
000006f6: POP
000006f7: JUMP
000006f8: JUMPDEST
000006f9: PUSH1 0x00
000006fb: DUP7
000006fc: DUP2
000006fd: MSTORE
000006fe: PUSH1 0x20
00000700: DUP2
00000701: SWAP1
00000702: MSTORE
00000703: PUSH1 0x40
00000705: DUP2
00000706: KECCAK256
00000707: SLOAD
00000708: DUP2
00000709: SWAP1
0000070a: PUSH1 0x01
0000070c: PUSH1 0xa0
0000070e: PUSH1 0x02
00000710: EXP
00000711: SUB
00000712: AND
00000713: CALLER
00000714: EQ
00000715: PUSH2 0x071d
00000718: JUMPI
00000719: PUSH1 0x00
0000071b: DUP1
0000071c: REVERT
0000071d: JUMPDEST
0000071e: PUSH1 0x00
00000720: DUP9
00000721: DUP2
00000722: MSTORE
00000723: PUSH1 0x20
00000725: DUP2
00000726: SWAP1
00000727: MSTORE
00000728: PUSH1 0x40
0000072a: SWAP1
0000072b: KECCAK256
0000072c: PUSH1 0x02
0000072e: ADD
0000072f: SLOAD
00000730: DUP7
00000731: DUP7
00000732: ADD
00000733: GT
00000734: ISZERO
00000735: PUSH2 0x073d
00000738: JUMPI
00000739: PUSH1 0x00
0000073b: DUP1
0000073c: REVERT
0000073d: JUMPDEST
0000073e: DUP4
0000073f: TIMESTAMP
00000740: GT
00000741: ISZERO
00000742: DUP1
00000743: ISZERO
00000744: PUSH2 0x076e
00000747: JUMPI
00000748: POP
00000749: PUSH1 0x00
0000074b: DUP9
0000074c: DUP2
0000074d: MSTORE
0000074e: PUSH1 0x20
00000750: DUP2
00000751: SWAP1
00000752: MSTORE
00000753: PUSH1 0x40
00000755: SWAP1
00000756: KECCAK256
00000757: PUSH1 0x03
00000759: ADD
0000075a: SLOAD
0000075b: PUSH2 0x076a
0000075e: SWAP1
0000075f: PUSH3 0x015180
00000763: TIMESTAMP
00000764: ADD
00000765: SWAP1
00000766: PUSH2 0x0ea3
00000769: JUMP
0000076a: JUMPDEST
0000076b: DUP5
0000076c: GT
0000076d: ISZERO
0000076e: JUMPDEST
0000076f: ISZERO
00000770: ISZERO
00000771: PUSH2 0x0779
00000774: JUMPI
00000775: PUSH1 0x00
00000777: DUP1
00000778: REVERT
00000779: JUMPDEST
0000077a: PUSH1 0x00
0000077c: DUP7
0000077d: GT
0000077e: PUSH2 0x0786
00000781: JUMPI
00000782: PUSH1 0x00
00000784: DUP1
00000785: REVERT
00000786: JUMPDEST
00000787: PUSH1 0x00
00000789: DUP4
0000078a: DUP2
0000078b: MSTORE
0000078c: PUSH1 0x02
0000078e: PUSH1 0x20
00000790: MSTORE
00000791: PUSH1 0x40
00000793: SWAP1
00000794: KECCAK256
00000795: SLOAD
00000796: PUSH1 0xff
00000798: AND
00000799: ISZERO
0000079a: PUSH2 0x07a2
0000079d: JUMPI
0000079e: PUSH1 0x00
000007a0: DUP1
000007a1: REVERT
000007a2: JUMPDEST
000007a3: PUSH1 0x00
000007a5: DUP4
000007a6: DUP2
000007a7: MSTORE
000007a8: PUSH1 0x02
000007aa: PUSH1 0x20
000007ac: DUP2
000007ad: DUP2
000007ae: MSTORE
000007af: PUSH1 0x40
000007b1: DUP1
000007b2: DUP5
000007b3: KECCAK256
000007b4: DUP1
000007b5: SLOAD
000007b6: PUSH1 0xff
000007b8: NOT
000007b9: AND
000007ba: PUSH1 0x01
000007bc: OR
000007bd: SWAP1
000007be: SSTORE
000007bf: DUP12
000007c0: DUP5
000007c1: MSTORE
000007c2: SWAP1
000007c3: DUP4
000007c4: SWAP1
000007c5: MSTORE
000007c6: SWAP1
000007c7: SWAP2
000007c8: KECCAK256
000007c9: ADD
000007ca: SLOAD
000007cb: PUSH2 0x07dd
000007ce: SWAP1
000007cf: PUSH2 0x07d8
000007d2: DUP9
000007d3: DUP9
000007d4: PUSH2 0x0e8d
000007d7: JUMP
000007d8: JUMPDEST
000007d9: PUSH2 0x0ebc
000007dc: JUMP
000007dd: JUMPDEST
000007de: PUSH1 0x00
000007e0: DUP10
000007e1: DUP2
000007e2: MSTORE
000007e3: PUSH1 0x20
000007e5: DUP2
000007e6: DUP2
000007e7: MSTORE
000007e8: PUSH1 0x40
000007ea: SWAP2
000007eb: DUP3
000007ec: SWAP1
000007ed: KECCAK256
000007ee: PUSH1 0x02
000007f0: ADD
000007f1: SWAP3
000007f2: SWAP1
000007f3: SWAP3
000007f4: SSTORE
000007f5: DUP1
000007f6: MLOAD
000007f7: DUP11
000007f8: DUP2
000007f9: MSTORE
000007fa: PUSH13 0x01000000000000000000000000
00000808: CALLER
00000809: DUP2
0000080a: MUL
0000080b: DUP3
0000080c: DUP6
0000080d: ADD
0000080e: MSTORE
0000080f: PUSH1 0x01
00000811: PUSH1 0xa0
00000813: PUSH1 0x02
00000815: EXP
00000816: SUB
00000817: DUP12
00000818: AND
00000819: MUL
0000081a: PUSH1 0x34
0000081c: DUP3
0000081d: ADD
0000081e: MSTORE
0000081f: PUSH1 0x48
00000821: DUP2
00000822: ADD
00000823: DUP10
00000824: SWAP1
00000825: MSTORE
00000826: PUSH1 0x68
00000828: DUP2
00000829: ADD
0000082a: DUP9
0000082b: SWAP1
0000082c: MSTORE
0000082d: PUSH1 0x88
0000082f: DUP2
00000830: ADD
00000831: DUP8
00000832: SWAP1
00000833: MSTORE
00000834: PUSH1 0xa8
00000836: DUP2
00000837: ADD
00000838: DUP7
00000839: SWAP1
0000083a: MSTORE
0000083b: DUP2
0000083c: MLOAD
0000083d: SWAP1
0000083e: DUP2
0000083f: SWAP1
00000840: SUB
00000841: PUSH1 0xc8
00000843: ADD
00000844: DUP2
00000845: KECCAK256
00000846: DUP1
00000847: DUP3
00000848: MSTORE
00000849: SWAP2
0000084a: MLOAD
0000084b: SWAP2
0000084c: SWAP5
0000084d: POP
0000084e: PUSH32 0x234740a705c7294747290e3973b4c8d5810692061dfca7b2ec05344e3244fe30
0000086f: SWAP3
00000870: SWAP1
00000871: DUP3
00000872: SWAP1
00000873: SUB
00000874: ADD
00000875: SWAP1
00000876: LOG1
00000877: POP
00000878: PUSH1 0x00
0000087a: DUP2
0000087b: DUP2
0000087c: MSTORE
0000087d: PUSH1 0x01
0000087f: PUSH1 0x20
00000881: DUP2
00000882: SWAP1
00000883: MSTORE
00000884: PUSH1 0x40
00000886: DUP1
00000887: DUP4
00000888: KECCAK256
00000889: DUP11
0000088a: DUP2
0000088b: SSTORE
0000088c: SWAP2
0000088d: DUP3
0000088e: ADD
0000088f: DUP1
00000890: SLOAD
00000891: CALLER
00000892: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000008a7: NOT
000008a8: SWAP2
000008a9: DUP3
000008aa: AND
000008ab: OR
000008ac: SWAP1
000008ad: SWAP2
000008ae: SSTORE
000008af: PUSH1 0x02
000008b1: DUP4
000008b2: ADD
000008b3: DUP1
000008b4: SLOAD
000008b5: SWAP1
000008b6: SWAP2
000008b7: AND
000008b8: PUSH1 0x01
000008ba: PUSH1 0xa0
000008bc: PUSH1 0x02
000008be: EXP
000008bf: SUB
000008c0: DUP12
000008c1: AND
000008c2: OR
000008c3: SWAP1
000008c4: SSTORE
000008c5: PUSH1 0x03
000008c7: DUP3
000008c8: ADD
000008c9: DUP9
000008ca: SWAP1
000008cb: SSTORE
000008cc: PUSH1 0x04
000008ce: DUP3
000008cf: ADD
000008d0: DUP8
000008d1: SWAP1
000008d2: SSTORE
000008d3: PUSH1 0x05
000008d5: DUP3
000008d6: ADD
000008d7: DUP7
000008d8: SWAP1
000008d9: SSTORE
000008da: PUSH1 0x06
000008dc: DUP3
000008dd: ADD
000008de: DUP6
000008df: SWAP1
000008e0: SSTORE
000008e1: MLOAD
000008e2: SWAP1
000008e3: SWAP2
000008e4: PUSH20 0x478189a0af876598c8a70ce8896960500455a949
000008f9: SWAP2
000008fa: PUSH2 0x08fc
000008fd: DUP9
000008fe: ISZERO
000008ff: MUL
00000900: SWAP2
00000901: DUP9
00000902: SWAP2
00000903: SWAP1
00000904: DUP2
00000905: DUP2
00000906: DUP2
00000907: DUP6
00000908: DUP9
00000909: DUP9
0000090a: CALL
0000090b: SWAP4
0000090c: POP
0000090d: POP
0000090e: POP
0000090f: POP
00000910: ISZERO
00000911: DUP1
00000912: ISZERO
00000913: PUSH2 0x0920
00000916: JUMPI
00000917: RETURNDATASIZE
00000918: PUSH1 0x00
0000091a: DUP1
0000091b: RETURNDATACOPY
0000091c: RETURNDATASIZE
0000091d: PUSH1 0x00
0000091f: REVERT
00000920: JUMPDEST
00000921: POP
00000922: POP
00000923: SWAP7
00000924: SWAP6
00000925: POP
00000926: POP
00000927: POP
00000928: POP
00000929: POP
0000092a: POP
0000092b: JUMP
0000092c: JUMPDEST
0000092d: PUSH1 0x00
0000092f: DUP4
00000930: DUP2
00000931: MSTORE
00000932: PUSH1 0x20
00000934: DUP2
00000935: SWAP1
00000936: MSTORE
00000937: PUSH1 0x40
00000939: DUP2
0000093a: KECCAK256
0000093b: SLOAD
0000093c: PUSH1 0x01
0000093e: PUSH1 0xa0
00000940: PUSH1 0x02
00000942: EXP
00000943: SUB
00000944: AND
00000945: CALLER
00000946: EQ
00000947: DUP1
00000948: PUSH2 0x096a
0000094b: JUMPI
0000094c: POP
0000094d: PUSH1 0x00
0000094f: DUP5
00000950: DUP2
00000951: MSTORE
00000952: PUSH1 0x20
00000954: DUP2
00000955: SWAP1
00000956: MSTORE
00000957: PUSH1 0x40
00000959: SWAP1
0000095a: KECCAK256
0000095b: PUSH1 0x01
0000095d: ADD
0000095e: SLOAD
0000095f: PUSH1 0x01
00000961: PUSH1 0xa0
00000963: PUSH1 0x02
00000965: EXP
00000966: SUB
00000967: AND
00000968: CALLER
00000969: EQ
0000096a: JUMPDEST
0000096b: ISZERO
0000096c: ISZERO
0000096d: PUSH2 0x0975
00000970: JUMPI
00000971: PUSH1 0x00
00000973: DUP1
00000974: REVERT
00000975: JUMPDEST
00000976: PUSH1 0x00
00000978: DUP5
00000979: DUP2
0000097a: MSTORE
0000097b: PUSH1 0x20
0000097d: DUP2
0000097e: SWAP1
0000097f: MSTORE
00000980: PUSH1 0x40
00000982: SWAP1
00000983: KECCAK256
00000984: SLOAD
00000985: PUSH1 0x01
00000987: PUSH1 0xa0
00000989: PUSH1 0x02
0000098b: EXP
0000098c: SUB
0000098d: AND
0000098e: CALLER
0000098f: EQ
00000990: PUSH2 0x09b0
00000993: JUMPI
00000994: PUSH1 0x00
00000996: DUP5
00000997: DUP2
00000998: MSTORE
00000999: PUSH1 0x20
0000099b: DUP2
0000099c: SWAP1
0000099d: MSTORE
0000099e: PUSH1 0x40
000009a0: SWAP1
000009a1: KECCAK256
000009a2: SLOAD
000009a3: PUSH1 0x01
000009a5: PUSH1 0xa0
000009a7: PUSH1 0x02
000009a9: EXP
000009aa: SUB
000009ab: AND
000009ac: PUSH2 0x09cc
000009af: JUMP
000009b0: JUMPDEST
000009b1: PUSH1 0x00
000009b3: DUP5
000009b4: DUP2
000009b5: MSTORE
000009b6: PUSH1 0x20
000009b8: DUP2
000009b9: SWAP1
000009ba: MSTORE
000009bb: PUSH1 0x40
000009bd: SWAP1
000009be: KECCAK256
000009bf: PUSH1 0x01
000009c1: ADD
000009c2: SLOAD
000009c3: PUSH1 0x01
000009c5: PUSH1 0xa0
000009c7: PUSH1 0x02
000009c9: EXP
000009ca: SUB
000009cb: AND
000009cc: JUMPDEST
000009cd: SWAP1
000009ce: POP
000009cf: PUSH2 0x09e7
000009d2: DUP3
000009d3: PUSH2 0x09db
000009d6: DUP7
000009d7: PUSH2 0x0ecc
000009da: JUMP
000009db: JUMPDEST
000009dc: SWAP1
000009dd: PUSH4 0xffffffff
000009e2: PUSH2 0x0f0a
000009e5: AND
000009e6: JUMP
000009e7: JUMPDEST
000009e8: PUSH1 0x01
000009ea: PUSH1 0xa0
000009ec: PUSH1 0x02
000009ee: EXP
000009ef: SUB
000009f0: DUP3
000009f1: DUP2
000009f2: AND
000009f3: SWAP2
000009f4: AND
000009f5: EQ
000009f6: PUSH2 0x09fe
000009f9: JUMPI
000009fa: PUSH1 0x00
000009fc: DUP1
000009fd: REVERT
000009fe: JUMPDEST
000009ff: PUSH1 0x00
00000a01: DUP5
00000a02: DUP2
00000a03: MSTORE
00000a04: PUSH1 0x20
00000a06: DUP2
00000a07: SWAP1
00000a08: MSTORE
00000a09: PUSH1 0x40
00000a0b: SWAP1
00000a0c: KECCAK256
00000a0d: SLOAD
00000a0e: PUSH2 0x0a23
00000a11: SWAP1
00000a12: DUP6
00000a13: SWAP1
00000a14: DUP6
00000a15: SWAP1
00000a16: PUSH1 0x01
00000a18: PUSH1 0xa0
00000a1a: PUSH1 0x02
00000a1c: EXP
00000a1d: SUB
00000a1e: AND
00000a1f: PUSH2 0x0fdf
00000a22: JUMP
00000a23: JUMPDEST
00000a24: POP
00000a25: POP
00000a26: POP
00000a27: POP
00000a28: JUMP
00000a29: JUMPDEST
00000a2a: PUSH1 0x00
00000a2c: DUP3
00000a2d: DUP2
00000a2e: MSTORE
00000a2f: PUSH1 0x20
00000a31: DUP2
00000a32: SWAP1
00000a33: MSTORE
00000a34: PUSH1 0x40
00000a36: DUP2
00000a37: KECCAK256
00000a38: SLOAD
00000a39: PUSH1 0x01
00000a3b: PUSH1 0xa0
00000a3d: PUSH1 0x02
00000a3f: EXP
00000a40: SUB
00000a41: AND
00000a42: CALLER
00000a43: EQ
00000a44: DUP1
00000a45: PUSH2 0x0a67
00000a48: JUMPI
00000a49: POP
00000a4a: PUSH1 0x00
00000a4c: DUP4
00000a4d: DUP2
00000a4e: MSTORE
00000a4f: PUSH1 0x20
00000a51: DUP2
00000a52: SWAP1
00000a53: MSTORE
00000a54: PUSH1 0x40
00000a56: SWAP1
00000a57: KECCAK256
00000a58: PUSH1 0x01
00000a5a: ADD
00000a5b: SLOAD
00000a5c: PUSH1 0x01
00000a5e: PUSH1 0xa0
00000a60: PUSH1 0x02
00000a62: EXP
00000a63: SUB
00000a64: AND
00000a65: CALLER
00000a66: EQ
00000a67: JUMPDEST
00000a68: ISZERO
00000a69: ISZERO
00000a6a: PUSH2 0x0a72
00000a6d: JUMPI
00000a6e: PUSH1 0x00
00000a70: DUP1
00000a71: REVERT
00000a72: JUMPDEST
00000a73: PUSH1 0x00
00000a75: DUP3
00000a76: DUP2
00000a77: MSTORE
00000a78: PUSH1 0x01
00000a7a: PUSH1 0x20
00000a7c: MSTORE
00000a7d: PUSH1 0x40
00000a7f: SWAP1
00000a80: KECCAK256
00000a81: SLOAD
00000a82: DUP4
00000a83: EQ
00000a84: PUSH2 0x0a8c
00000a87: JUMPI
00000a88: PUSH1 0x00
00000a8a: DUP1
00000a8b: REVERT
00000a8c: JUMPDEST
00000a8d: PUSH1 0x00
00000a8f: DUP3
00000a90: DUP2
00000a91: MSTORE
00000a92: PUSH1 0x01
00000a94: PUSH1 0x20
00000a96: MSTORE
00000a97: PUSH1 0x40
00000a99: SWAP1
00000a9a: KECCAK256
00000a9b: PUSH1 0x05
00000a9d: ADD
00000a9e: SLOAD
00000a9f: TIMESTAMP
00000aa0: LT
00000aa1: ISZERO
00000aa2: PUSH2 0x0aaa
00000aa5: JUMPI
00000aa6: PUSH1 0x00
00000aa8: DUP1
00000aa9: REVERT
00000aaa: JUMPDEST
00000aab: POP
00000aac: PUSH1 0x00
00000aae: DUP2
00000aaf: DUP2
00000ab0: MSTORE
00000ab1: PUSH1 0x01
00000ab3: PUSH1 0x20
00000ab5: DUP2
00000ab6: DUP2
00000ab7: MSTORE
00000ab8: PUSH1 0x40
00000aba: DUP1
00000abb: DUP5
00000abc: KECCAK256
00000abd: PUSH1 0x03
00000abf: DUP2
00000ac0: ADD
00000ac1: DUP1
00000ac2: SLOAD
00000ac3: DUP7
00000ac4: DUP4
00000ac5: SSTORE
00000ac6: SWAP5
00000ac7: DUP3
00000ac8: ADD
00000ac9: DUP1
00000aca: SLOAD
00000acb: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000ae0: NOT
00000ae1: SWAP1
00000ae2: DUP2
00000ae3: AND
00000ae4: SWAP1
00000ae5: SWAP2
00000ae6: SSTORE
00000ae7: PUSH1 0x02
00000ae9: DUP1
00000aea: DUP5
00000aeb: ADD
00000aec: DUP1
00000aed: SLOAD
00000aee: SWAP1
00000aef: SWAP3
00000af0: AND
00000af1: SWAP1
00000af2: SWAP2
00000af3: SSTORE
00000af4: SWAP1
00000af5: DUP7
00000af6: SWAP1
00000af7: SSTORE
00000af8: PUSH1 0x04
00000afa: DUP3
00000afb: ADD
00000afc: DUP7
00000afd: SWAP1
00000afe: SSTORE
00000aff: PUSH1 0x05
00000b01: DUP3
00000b02: ADD
00000b03: DUP7
00000b04: SWAP1
00000b05: SSTORE
00000b06: PUSH1 0x06
00000b08: SWAP1
00000b09: SWAP2
00000b0a: ADD
00000b0b: DUP6
00000b0c: SWAP1
00000b0d: SSTORE
00000b0e: DUP7
00000b0f: DUP6
00000b10: MSTORE
00000b11: SWAP2
00000b12: DUP5
00000b13: SWAP1
00000b14: MSTORE
00000b15: SWAP1
00000b16: SWAP3
00000b17: KECCAK256
00000b18: SWAP1
00000b19: SWAP2
00000b1a: ADD
00000b1b: SLOAD
00000b1c: PUSH2 0x0b25
00000b1f: SWAP1
00000b20: DUP3
00000b21: PUSH2 0x0e8d
00000b24: JUMP
00000b25: JUMPDEST
00000b26: PUSH1 0x00
00000b28: SWAP4
00000b29: DUP5
00000b2a: MSTORE
00000b2b: PUSH1 0x20
00000b2d: DUP5
00000b2e: SWAP1
00000b2f: MSTORE
00000b30: PUSH1 0x40
00000b32: SWAP1
00000b33: SWAP4
00000b34: KECCAK256
00000b35: PUSH1 0x02
00000b37: ADD
00000b38: SWAP3
00000b39: SWAP1
00000b3a: SWAP3
00000b3b: SSTORE
00000b3c: POP
00000b3d: POP
00000b3e: JUMP
00000b3f: JUMPDEST
00000b40: PUSH1 0x60
00000b42: PUSH1 0x00
00000b44: PUSH1 0x19
00000b46: DUP9
00000b47: MLOAD
00000b48: GT
00000b49: ISZERO
00000b4a: ISZERO
00000b4b: ISZERO
00000b4c: PUSH2 0x0b54
00000b4f: JUMPI
00000b50: PUSH1 0x00
00000b52: DUP1
00000b53: REVERT
00000b54: JUMPDEST
00000b55: POP
00000b56: PUSH1 0x00
00000b58: JUMPDEST
00000b59: DUP8
00000b5a: MLOAD
00000b5b: DUP2
00000b5c: LT
00000b5d: ISZERO
00000b5e: PUSH2 0x0c02
00000b61: JUMPI
00000b62: PUSH2 0x0bf9
00000b65: DUP9
00000b66: DUP3
00000b67: DUP2
00000b68: MLOAD
00000b69: DUP2
00000b6a: LT
00000b6b: ISZERO
00000b6c: ISZERO
00000b6d: PUSH2 0x0b72
00000b70: JUMPI
00000b71: INVALID
00000b72: JUMPDEST
00000b73: SWAP1
00000b74: PUSH1 0x20
00000b76: ADD
00000b77: SWAP1
00000b78: PUSH1 0x20
00000b7a: MUL
00000b7b: ADD
00000b7c: MLOAD
00000b7d: DUP9
00000b7e: DUP4
00000b7f: DUP2
00000b80: MLOAD
00000b81: DUP2
00000b82: LT
00000b83: ISZERO
00000b84: ISZERO
00000b85: PUSH2 0x0b8a
00000b88: JUMPI
00000b89: INVALID
00000b8a: JUMPDEST
00000b8b: SWAP1
00000b8c: PUSH1 0x20
00000b8e: ADD
00000b8f: SWAP1
00000b90: PUSH1 0x20
00000b92: MUL
00000b93: ADD
00000b94: MLOAD
00000b95: DUP9
00000b96: DUP5
00000b97: DUP2
00000b98: MLOAD
00000b99: DUP2
00000b9a: LT
00000b9b: ISZERO
00000b9c: ISZERO
00000b9d: PUSH2 0x0ba2
00000ba0: JUMPI
00000ba1: INVALID
00000ba2: JUMPDEST
00000ba3: SWAP1
00000ba4: PUSH1 0x20
00000ba6: ADD
00000ba7: SWAP1
00000ba8: PUSH1 0x20
00000baa: MUL
00000bab: ADD
00000bac: MLOAD
00000bad: DUP9
00000bae: DUP6
00000baf: DUP2
00000bb0: MLOAD
00000bb1: DUP2
00000bb2: LT
00000bb3: ISZERO
00000bb4: ISZERO
00000bb5: PUSH2 0x0bba
00000bb8: JUMPI
00000bb9: INVALID
00000bba: JUMPDEST
00000bbb: SWAP1
00000bbc: PUSH1 0x20
00000bbe: ADD
00000bbf: SWAP1
00000bc0: PUSH1 0x20
00000bc2: MUL
00000bc3: ADD
00000bc4: MLOAD
00000bc5: DUP9
00000bc6: DUP7
00000bc7: DUP2
00000bc8: MLOAD
00000bc9: DUP2
00000bca: LT
00000bcb: ISZERO
00000bcc: ISZERO
00000bcd: PUSH2 0x0bd2
00000bd0: JUMPI
00000bd1: INVALID
00000bd2: JUMPDEST
00000bd3: SWAP1
00000bd4: PUSH1 0x20
00000bd6: ADD
00000bd7: SWAP1
00000bd8: PUSH1 0x20
00000bda: MUL
00000bdb: ADD
00000bdc: MLOAD
00000bdd: DUP9
00000bde: DUP8
00000bdf: DUP2
00000be0: MLOAD
00000be1: DUP2
00000be2: LT
00000be3: ISZERO
00000be4: ISZERO
00000be5: PUSH2 0x0bea
00000be8: JUMPI
00000be9: INVALID
00000bea: JUMPDEST
00000beb: SWAP1
00000bec: PUSH1 0x20
00000bee: ADD
00000bef: SWAP1
00000bf0: PUSH1 0x20
00000bf2: MUL
00000bf3: ADD
00000bf4: MLOAD
00000bf5: PUSH2 0x06f8
00000bf8: JUMP
00000bf9: JUMPDEST
00000bfa: POP
00000bfb: PUSH1 0x01
00000bfd: ADD
00000bfe: PUSH2 0x0b58
00000c01: JUMP
00000c02: JUMPDEST
00000c03: POP
00000c04: SWAP7
00000c05: SWAP6
00000c06: POP
00000c07: POP
00000c08: POP
00000c09: POP
00000c0a: POP
00000c0b: POP
00000c0c: JUMP
00000c0d: JUMPDEST
00000c0e: PUSH1 0x00
00000c10: PUSH1 0x20
00000c12: DUP2
00000c13: SWAP1
00000c14: MSTORE
00000c15: SWAP1
00000c16: DUP2
00000c17: MSTORE
00000c18: PUSH1 0x40
00000c1a: SWAP1
00000c1b: KECCAK256
00000c1c: DUP1
00000c1d: SLOAD
00000c1e: PUSH1 0x01
00000c20: DUP3
00000c21: ADD
00000c22: SLOAD
00000c23: PUSH1 0x02
00000c25: DUP4
00000c26: ADD
00000c27: SLOAD
00000c28: PUSH1 0x03
00000c2a: SWAP1
00000c2b: SWAP4
00000c2c: ADD
00000c2d: SLOAD
00000c2e: PUSH1 0x01
00000c30: PUSH1 0xa0
00000c32: PUSH1 0x02
00000c34: EXP
00000c35: SUB
00000c36: SWAP3
00000c37: DUP4
00000c38: AND
00000c39: SWAP4
00000c3a: SWAP2
00000c3b: SWAP1
00000c3c: SWAP3
00000c3d: AND
00000c3e: SWAP2
00000c3f: DUP5
00000c40: JUMP
00000c41: JUMPDEST
00000c42: PUSH1 0x00
00000c44: DUP3
00000c45: DUP2
00000c46: MSTORE
00000c47: PUSH1 0x20
00000c49: DUP2
00000c4a: SWAP1
00000c4b: MSTORE
00000c4c: PUSH1 0x40
00000c4e: SWAP1
00000c4f: KECCAK256
00000c50: PUSH1 0x03
00000c52: ADD
00000c53: SLOAD
00000c54: TIMESTAMP
00000c55: LT
00000c56: ISZERO
00000c57: PUSH2 0x0c5f
00000c5a: JUMPI
00000c5b: PUSH1 0x00
00000c5d: DUP1
00000c5e: REVERT
00000c5f: JUMPDEST
00000c60: PUSH1 0x00
00000c62: DUP3
00000c63: DUP2
00000c64: MSTORE
00000c65: PUSH1 0x20
00000c67: DUP2
00000c68: SWAP1
00000c69: MSTORE
00000c6a: PUSH1 0x40
00000c6c: SWAP1
00000c6d: KECCAK256
00000c6e: SLOAD
00000c6f: PUSH2 0x0c84
00000c72: SWAP1
00000c73: DUP4
00000c74: SWAP1
00000c75: DUP4
00000c76: SWAP1
00000c77: PUSH1 0x01
00000c79: PUSH1 0xa0
00000c7b: PUSH1 0x02
00000c7d: EXP
00000c7e: SUB
00000c7f: AND
00000c80: PUSH2 0x0fdf
00000c83: JUMP
00000c84: JUMPDEST
00000c85: POP
00000c86: POP
00000c87: JUMP
00000c88: JUMPDEST
00000c89: PUSH1 0x00
00000c8b: PUSH1 0x19
00000c8d: DUP3
00000c8e: MLOAD
00000c8f: GT
00000c90: ISZERO
00000c91: ISZERO
00000c92: ISZERO
00000c93: PUSH2 0x0c9b
00000c96: JUMPI
00000c97: PUSH1 0x00
00000c99: DUP1
00000c9a: REVERT
00000c9b: JUMPDEST
00000c9c: POP
00000c9d: PUSH1 0x00
00000c9f: JUMPDEST
00000ca0: DUP2
00000ca1: MLOAD
00000ca2: DUP2
00000ca3: LT
00000ca4: ISZERO
00000ca5: PUSH2 0x0cd1
00000ca8: JUMPI
00000ca9: PUSH2 0x0cc9
00000cac: DUP4
00000cad: DUP4
00000cae: DUP4
00000caf: DUP2
00000cb0: MLOAD
00000cb1: DUP2
00000cb2: LT
00000cb3: ISZERO
00000cb4: ISZERO
00000cb5: PUSH2 0x0cba
00000cb8: JUMPI
00000cb9: INVALID
00000cba: JUMPDEST
00000cbb: SWAP1
00000cbc: PUSH1 0x20
00000cbe: ADD
00000cbf: SWAP1
00000cc0: PUSH1 0x20
00000cc2: MUL
00000cc3: ADD
00000cc4: MLOAD
00000cc5: PUSH2 0x0a29
00000cc8: JUMP
00000cc9: JUMPDEST
00000cca: PUSH1 0x01
00000ccc: ADD
00000ccd: PUSH2 0x0c9f
00000cd0: JUMP
00000cd1: JUMPDEST
00000cd2: POP
00000cd3: POP
00000cd4: POP
00000cd5: JUMP
00000cd6: JUMPDEST
00000cd7: PUSH1 0x00
00000cd9: DUP1
00000cda: CALLER
00000cdb: PUSH1 0x01
00000cdd: PUSH1 0xa0
00000cdf: PUSH1 0x02
00000ce1: EXP
00000ce2: SUB
00000ce3: DUP6
00000ce4: AND
00000ce5: EQ
00000ce6: ISZERO
00000ce7: PUSH2 0x0cef
00000cea: JUMPI
00000ceb: PUSH1 0x00
00000ced: DUP1
00000cee: REVERT
00000cef: JUMPDEST
00000cf0: PUSH1 0x00
00000cf2: CALLVALUE
00000cf3: GT
00000cf4: PUSH2 0x0cfc
00000cf7: JUMPI
00000cf8: PUSH1 0x00
00000cfa: DUP1
00000cfb: REVERT
00000cfc: JUMPDEST
00000cfd: PUSH1 0x40
00000cff: DUP1
00000d00: MLOAD
00000d01: PUSH13 0x01000000000000000000000000
00000d0f: CALLER
00000d10: DUP2
00000d11: MUL
00000d12: DUP3
00000d13: MSTORE
00000d14: PUSH1 0x01
00000d16: PUSH1 0xa0
00000d18: PUSH1 0x02
00000d1a: EXP
00000d1b: SUB
00000d1c: DUP8
00000d1d: AND
00000d1e: MUL
00000d1f: PUSH1 0x14
00000d21: DUP3
00000d22: ADD
00000d23: MSTORE
00000d24: CALLVALUE
00000d25: PUSH1 0x28
00000d27: DUP3
00000d28: ADD
00000d29: MSTORE
00000d2a: PUSH1 0x48
00000d2c: DUP2
00000d2d: ADD
00000d2e: DUP6
00000d2f: SWAP1
00000d30: MSTORE
00000d31: DUP2
00000d32: MLOAD
00000d33: SWAP1
00000d34: DUP2
00000d35: SWAP1
00000d36: SUB
00000d37: PUSH1 0x68
00000d39: ADD
00000d3a: DUP2
00000d3b: KECCAK256
00000d3c: DUP1
00000d3d: DUP3
00000d3e: MSTORE
00000d3f: SWAP2
00000d40: MLOAD
00000d41: SWAP2
00000d42: SWAP4
00000d43: POP
00000d44: PUSH32 0x542f0adac9864069fdc036596079fadf5b1e3ab50311a5bf9ad6458de05ff80c
00000d65: SWAP2
00000d66: SWAP1
00000d67: DUP2
00000d68: SWAP1
00000d69: SUB
00000d6a: PUSH1 0x20
00000d6c: ADD
00000d6d: SWAP1
00000d6e: LOG1
00000d6f: POP
00000d70: PUSH1 0x00
00000d72: DUP2
00000d73: DUP2
00000d74: MSTORE
00000d75: PUSH1 0x20
00000d77: DUP2
00000d78: SWAP1
00000d79: MSTORE
00000d7a: PUSH1 0x40
00000d7c: SWAP1
00000d7d: KECCAK256
00000d7e: PUSH1 0x02
00000d80: DUP2
00000d81: ADD
00000d82: SLOAD
00000d83: ISZERO
00000d84: ISZERO
00000d85: PUSH2 0x0dbe
00000d88: JUMPI
00000d89: DUP1
00000d8a: SLOAD
00000d8b: CALLER
00000d8c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000da1: NOT
00000da2: SWAP2
00000da3: DUP3
00000da4: AND
00000da5: OR
00000da6: DUP3
00000da7: SSTORE
00000da8: PUSH1 0x01
00000daa: DUP3
00000dab: ADD
00000dac: DUP1
00000dad: SLOAD
00000dae: SWAP1
00000daf: SWAP2
00000db0: AND
00000db1: PUSH1 0x01
00000db3: PUSH1 0xa0
00000db5: PUSH1 0x02
00000db7: EXP
00000db8: SUB
00000db9: DUP7
00000dba: AND
00000dbb: OR
00000dbc: SWAP1
00000dbd: SSTORE
00000dbe: JUMPDEST
00000dbf: PUSH2 0x0dc8
00000dc2: DUP3
00000dc3: DUP5
00000dc4: PUSH2 0x0665
00000dc7: JUMP
00000dc8: JUMPDEST
00000dc9: POP
00000dca: SWAP3
00000dcb: SWAP2
00000dcc: POP
00000dcd: POP
00000dce: JUMP
00000dcf: JUMPDEST
00000dd0: PUSH1 0x01
00000dd2: PUSH1 0x20
00000dd4: DUP2
00000dd5: SWAP1
00000dd6: MSTORE
00000dd7: PUSH1 0x00
00000dd9: SWAP2
00000dda: DUP3
00000ddb: MSTORE
00000ddc: PUSH1 0x40
00000dde: SWAP1
00000ddf: SWAP2
00000de0: KECCAK256
00000de1: DUP1
00000de2: SLOAD
00000de3: SWAP2
00000de4: DUP2
00000de5: ADD
00000de6: SLOAD
00000de7: PUSH1 0x02
00000de9: DUP3
00000dea: ADD
00000deb: SLOAD
00000dec: PUSH1 0x03
00000dee: DUP4
00000def: ADD
00000df0: SLOAD
00000df1: PUSH1 0x04
00000df3: DUP5
00000df4: ADD
00000df5: SLOAD
00000df6: PUSH1 0x05
00000df8: DUP6
00000df9: ADD
00000dfa: SLOAD
00000dfb: PUSH1 0x06
00000dfd: SWAP1
00000dfe: SWAP6
00000dff: ADD
00000e00: SLOAD
00000e01: PUSH1 0x01
00000e03: PUSH1 0xa0
00000e05: PUSH1 0x02
00000e07: EXP
00000e08: SUB
00000e09: SWAP5
00000e0a: DUP6
00000e0b: AND
00000e0c: SWAP6
00000e0d: SWAP4
00000e0e: SWAP1
00000e0f: SWAP5
00000e10: AND
00000e11: SWAP4
00000e12: SWAP2
00000e13: SWAP3
00000e14: SWAP1
00000e15: SWAP2
00000e16: DUP8
00000e17: JUMP
00000e18: JUMPDEST
00000e19: PUSH1 0x00
00000e1b: PUSH1 0x19
00000e1d: DUP4
00000e1e: MLOAD
00000e1f: GT
00000e20: ISZERO
00000e21: ISZERO
00000e22: ISZERO
00000e23: PUSH2 0x0e2b
00000e26: JUMPI
00000e27: PUSH1 0x00
00000e29: DUP1
00000e2a: REVERT
00000e2b: JUMPDEST
00000e2c: POP
00000e2d: PUSH1 0x00
00000e2f: JUMPDEST
00000e30: DUP3
00000e31: MLOAD
00000e32: DUP2
00000e33: LT
00000e34: ISZERO
00000e35: PUSH2 0x0cd1
00000e38: JUMPI
00000e39: PUSH2 0x0e70
00000e3c: DUP4
00000e3d: DUP3
00000e3e: DUP2
00000e3f: MLOAD
00000e40: DUP2
00000e41: LT
00000e42: ISZERO
00000e43: ISZERO
00000e44: PUSH2 0x0e49
00000e47: JUMPI
00000e48: INVALID
00000e49: JUMPDEST
00000e4a: SWAP1
00000e4b: PUSH1 0x20
00000e4d: ADD
00000e4e: SWAP1
00000e4f: PUSH1 0x20
00000e51: MUL
00000e52: ADD
00000e53: MLOAD
00000e54: DUP4
00000e55: DUP4
00000e56: DUP2
00000e57: MLOAD
00000e58: DUP2
00000e59: LT
00000e5a: ISZERO
00000e5b: ISZERO
00000e5c: PUSH2 0x0e61
00000e5f: JUMPI
00000e60: INVALID
00000e61: JUMPDEST
00000e62: SWAP1
00000e63: PUSH1 0x20
00000e65: ADD
00000e66: SWAP1
00000e67: PUSH1 0x20
00000e69: MUL
00000e6a: ADD
00000e6b: MLOAD
00000e6c: PUSH2 0x055f
00000e6f: JUMP
00000e70: JUMPDEST
00000e71: PUSH1 0x01
00000e73: ADD
00000e74: PUSH2 0x0e2f
00000e77: JUMP
00000e78: JUMPDEST
00000e79: PUSH1 0x02
00000e7b: PUSH1 0x20
00000e7d: MSTORE
00000e7e: PUSH1 0x00
00000e80: SWAP1
00000e81: DUP2
00000e82: MSTORE
00000e83: PUSH1 0x40
00000e85: SWAP1
00000e86: KECCAK256
00000e87: SLOAD
00000e88: PUSH1 0xff
00000e8a: AND
00000e8b: DUP2
00000e8c: JUMP
00000e8d: JUMPDEST
00000e8e: DUP1
00000e8f: DUP3
00000e90: ADD
00000e91: DUP3
00000e92: DUP2
00000e93: LT
00000e94: ISZERO
00000e95: PUSH2 0x0e9d
00000e98: JUMPI
00000e99: PUSH1 0x00
00000e9b: DUP1
00000e9c: REVERT
00000e9d: JUMPDEST
00000e9e: SWAP3
00000e9f: SWAP2
00000ea0: POP
00000ea1: POP
00000ea2: JUMP
00000ea3: JUMPDEST
00000ea4: PUSH1 0x00
00000ea6: DUP2
00000ea7: DUP4
00000ea8: GT
00000ea9: ISZERO
00000eaa: PUSH2 0x0eb3
00000ead: JUMPI
00000eae: DUP2
00000eaf: PUSH2 0x0eb5
00000eb2: JUMP
00000eb3: JUMPDEST
00000eb4: DUP3
00000eb5: JUMPDEST
00000eb6: SWAP4
00000eb7: SWAP3
00000eb8: POP
00000eb9: POP
00000eba: POP
00000ebb: JUMP
00000ebc: JUMPDEST
00000ebd: DUP1
00000ebe: DUP3
00000ebf: SUB
00000ec0: DUP3
00000ec1: DUP2
00000ec2: GT
00000ec3: ISZERO
00000ec4: PUSH2 0x0e9d
00000ec7: JUMPI
00000ec8: PUSH1 0x00
00000eca: DUP1
00000ecb: REVERT
00000ecc: JUMPDEST
00000ecd: PUSH1 0x40
00000ecf: DUP1
00000ed0: MLOAD
00000ed1: PUSH32 0x19457468657265756d205369676e6564204d6573736167653a0a333200000000
00000ef2: DUP2
00000ef3: MSTORE
00000ef4: PUSH1 0x1c
00000ef6: DUP2
00000ef7: ADD
00000ef8: DUP4
00000ef9: SWAP1
00000efa: MSTORE
00000efb: SWAP1
00000efc: MLOAD
00000efd: SWAP1
00000efe: DUP2
00000eff: SWAP1
00000f00: SUB
00000f01: PUSH1 0x3c
00000f03: ADD
00000f04: SWAP1
00000f05: KECCAK256
00000f06: SWAP2
00000f07: SWAP1
00000f08: POP
00000f09: JUMP
00000f0a: JUMPDEST
00000f0b: PUSH1 0x00
00000f0d: DUP1
00000f0e: PUSH1 0x00
00000f10: DUP1
00000f11: DUP5
00000f12: MLOAD
00000f13: PUSH1 0x41
00000f15: EQ
00000f16: ISZERO
00000f17: ISZERO
00000f18: PUSH2 0x0f24
00000f1b: JUMPI
00000f1c: PUSH1 0x00
00000f1e: SWAP4
00000f1f: POP
00000f20: PUSH2 0x0fd6
00000f23: JUMP
00000f24: JUMPDEST
00000f25: POP
00000f26: POP
00000f27: POP
00000f28: PUSH1 0x20
00000f2a: DUP3
00000f2b: ADD
00000f2c: MLOAD
00000f2d: PUSH1 0x40
00000f2f: DUP4
00000f30: ADD
00000f31: MLOAD
00000f32: PUSH1 0x60
00000f34: DUP5
00000f35: ADD
00000f36: MLOAD
00000f37: PUSH1 0x00
00000f39: BYTE
00000f3a: PUSH1 0x1b
00000f3c: PUSH1 0xff
00000f3e: DUP3
00000f3f: AND
00000f40: LT
00000f41: ISZERO
00000f42: PUSH2 0x0f49
00000f45: JUMPI
00000f46: PUSH1 0x1b
00000f48: ADD
00000f49: JUMPDEST
00000f4a: DUP1
00000f4b: PUSH1 0xff
00000f4d: AND
00000f4e: PUSH1 0x1b
00000f50: EQ
00000f51: ISZERO
00000f52: DUP1
00000f53: ISZERO
00000f54: PUSH2 0x0f61
00000f57: JUMPI
00000f58: POP
00000f59: DUP1
00000f5a: PUSH1 0xff
00000f5c: AND
00000f5d: PUSH1 0x1c
00000f5f: EQ
00000f60: ISZERO
00000f61: JUMPDEST
00000f62: ISZERO
00000f63: PUSH2 0x0f6f
00000f66: JUMPI
00000f67: PUSH1 0x00
00000f69: SWAP4
00000f6a: POP
00000f6b: PUSH2 0x0fd6
00000f6e: JUMP
00000f6f: JUMPDEST
00000f70: PUSH1 0x40
00000f72: DUP1
00000f73: MLOAD
00000f74: PUSH1 0x00
00000f76: DUP1
00000f77: DUP3
00000f78: MSTORE
00000f79: PUSH1 0x20
00000f7b: DUP1
00000f7c: DUP4
00000f7d: ADD
00000f7e: DUP1
00000f7f: DUP6
00000f80: MSTORE
00000f81: DUP11
00000f82: SWAP1
00000f83: MSTORE
00000f84: PUSH1 0xff
00000f86: DUP6
00000f87: AND
00000f88: DUP4
00000f89: DUP6
00000f8a: ADD
00000f8b: MSTORE
00000f8c: PUSH1 0x60
00000f8e: DUP4
00000f8f: ADD
00000f90: DUP8
00000f91: SWAP1
00000f92: MSTORE
00000f93: PUSH1 0x80
00000f95: DUP4
00000f96: ADD
00000f97: DUP7
00000f98: SWAP1
00000f99: MSTORE
00000f9a: SWAP3
00000f9b: MLOAD
00000f9c: PUSH1 0x01
00000f9e: SWAP4
00000f9f: PUSH1 0xa0
00000fa1: DUP1
00000fa2: DUP6
00000fa3: ADD
00000fa4: SWAP5
00000fa5: SWAP2
00000fa6: SWAP4
00000fa7: PUSH1 0x1f
00000fa9: NOT
00000faa: DUP5
00000fab: ADD
00000fac: SWAP4
00000fad: SWAP3
00000fae: DUP4
00000faf: SWAP1
00000fb0: SUB
00000fb1: SWAP1
00000fb2: SWAP2
00000fb3: ADD
00000fb4: SWAP2
00000fb5: SWAP1
00000fb6: DUP7
00000fb7: GAS
00000fb8: CALL
00000fb9: ISZERO
00000fba: DUP1
00000fbb: ISZERO
00000fbc: PUSH2 0x0fc9
00000fbf: JUMPI
00000fc0: RETURNDATASIZE
00000fc1: PUSH1 0x00
00000fc3: DUP1
00000fc4: RETURNDATACOPY
00000fc5: RETURNDATASIZE
00000fc6: PUSH1 0x00
00000fc8: REVERT
00000fc9: JUMPDEST
00000fca: POP
00000fcb: POP
00000fcc: POP
00000fcd: PUSH1 0x20
00000fcf: PUSH1 0x40
00000fd1: MLOAD
00000fd2: SUB
00000fd3: MLOAD
00000fd4: SWAP4
00000fd5: POP
00000fd6: JUMPDEST
00000fd7: POP
00000fd8: POP
00000fd9: POP
00000fda: SWAP3
00000fdb: SWAP2
00000fdc: POP
00000fdd: POP
00000fde: JUMP
00000fdf: JUMPDEST
00000fe0: PUSH1 0x00
00000fe2: DUP4
00000fe3: DUP2
00000fe4: MSTORE
00000fe5: PUSH1 0x20
00000fe7: DUP2
00000fe8: SWAP1
00000fe9: MSTORE
00000fea: PUSH1 0x40
00000fec: SWAP1
00000fed: KECCAK256
00000fee: PUSH1 0x02
00000ff0: ADD
00000ff1: SLOAD
00000ff2: PUSH2 0x0ffb
00000ff5: SWAP1
00000ff6: DUP4
00000ff7: PUSH2 0x0ebc
00000ffa: JUMP
00000ffb: JUMPDEST
00000ffc: PUSH1 0x00
00000ffe: DUP5
00000fff: DUP2
00001000: MSTORE
00001001: PUSH1 0x20
00001003: DUP2
00001004: SWAP1
00001005: MSTORE
00001006: PUSH1 0x40
00001008: SWAP1
00001009: KECCAK256
0000100a: PUSH1 0x02
0000100c: ADD
0000100d: DUP2
0000100e: SWAP1
0000100f: SSTORE
00001010: ISZERO
00001011: ISZERO
00001012: PUSH2 0x1057
00001015: JUMPI
00001016: PUSH1 0x00
00001018: DUP4
00001019: DUP2
0000101a: MSTORE
0000101b: PUSH1 0x20
0000101d: DUP2
0000101e: SWAP1
0000101f: MSTORE
00001020: PUSH1 0x40
00001022: DUP2
00001023: KECCAK256
00001024: DUP1
00001025: SLOAD
00001026: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000103b: NOT
0000103c: SWAP1
0000103d: DUP2
0000103e: AND
0000103f: DUP3
00001040: SSTORE
00001041: PUSH1 0x01
00001043: DUP3
00001044: ADD
00001045: DUP1
00001046: SLOAD
00001047: SWAP1
00001048: SWAP2
00001049: AND
0000104a: SWAP1
0000104b: SSTORE
0000104c: PUSH1 0x02
0000104e: DUP2
0000104f: ADD
00001050: DUP3
00001051: SWAP1
00001052: SSTORE
00001053: PUSH1 0x03
00001055: ADD
00001056: SSTORE
00001057: JUMPDEST
00001058: PUSH1 0x40
0000105a: MLOAD
0000105b: PUSH1 0x01
0000105d: PUSH1 0xa0
0000105f: PUSH1 0x02
00001061: EXP
00001062: SUB
00001063: DUP3
00001064: AND
00001065: SWAP1
00001066: DUP4
00001067: ISZERO
00001068: PUSH2 0x08fc
0000106b: MUL
0000106c: SWAP1
0000106d: DUP5
0000106e: SWAP1
0000106f: PUSH1 0x00
00001071: DUP2
00001072: DUP2
00001073: DUP2
00001074: DUP6
00001075: DUP9
00001076: DUP9
00001077: CALL
00001078: SWAP4
00001079: POP
0000107a: POP
0000107b: POP
0000107c: POP
0000107d: ISZERO
0000107e: DUP1
0000107f: ISZERO
00001080: PUSH2 0x0a23
00001083: JUMPI
00001084: RETURNDATASIZE
00001085: PUSH1 0x00
00001087: DUP1
00001088: RETURNDATACOPY
00001089: RETURNDATASIZE
0000108a: PUSH1 0x00
0000108c: REVERT
0000108d: STOP
0000108e: LOG1
0000108f: PUSH6 0x627a7a723058
00001096: KECCAK256
00001097: UNKNOWN(0x2C)
00001098: CALLDATALOAD
00001099: AND
0000109a: STOP
0000109b: DUP7
0000109c: PUSH3 0x23ea46
000010a0: UNKNOWN(0x28)
000010a1: MUL
000010a2: UNKNOWN(0x0C)
000010a3: MULMOD
000010a4: UNKNOWN(0x4E)
000010a5: PUSH17 0xa60906db9a5bbbd1419710e1ac049cd452
000010b7: STOP
000010b8: UNKNOWN(0x29)

Findings

validated = confirmed for call sinks; sink observed for others
Severity Category Tool Title Confidence Validated Confirmed Details
high other detector Untrusted CALL target/value reachable 60 yes yes
view
trace_id: 0xfb8d3c2b9982d113960525ee1ab539c55eb10f61e808843879a3f01182ff11c5
call_targets: 0x0000000000000000000000000000000000000002, 0xe92fa4e3447a58753154364b329d2361b3b4cae4
target_varies: yes
classification: target_varies
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "confirmed",
    "attempts": 1,
    "trace_id": "0xfb8d3c2b9982d113960525ee1ab539c55eb10f61e808843879a3f01182ff11c5",
    "confirmed": true,
    "trace_mode": "callTracer",
    "call_targets": [
        "0x0000000000000000000000000000000000000002",
        "0xe92fa4e3447a58753154364b329d2361b3b4cae4"
    ],
    "matched_probe": null,
    "target_varies": true,
    "classification": "target_varies"
}
witness_json
{
    "notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
    "constraints": [],
    "entrypoints": [
        {
            "calldata": "0x0c4f8f6f",
            "selector": "0x0c4f8f6f",
            "calldata_variants": [
                "0x0c4f8f6f",
                "0x0c4f8f6f0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x48e7a100",
            "selector": "0x48e7a100",
            "calldata_variants": [
                "0x48e7a100",
                "0x48e7a1000000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x4f55f292",
            "selector": "0x4f55f292",
            "calldata_variants": [
                "0x4f55f292",
                "0x4f55f2920000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x59391a67",
            "selector": "0x59391a67",
            "calldata_variants": [
                "0x59391a67",
                "0x59391a670000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x77699a06",
            "selector": "0x77699a06",
            "calldata_variants": [
                "0x77699a06",
                "0x77699a060000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x89b898b8",
            "selector": "0x89b898b8",
            "calldata_variants": [
                "0x89b898b8",
                "0x89b898b80000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x8b555789",
            "selector": "0x8b555789",
            "calldata_variants": [
                "0x8b555789",
                "0x8b5557890000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xb6f9fda5",
            "selector": "0xb6f9fda5",
            "calldata_variants": [
                "0xb6f9fda5",
                "0xb6f9fda50000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 1426,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 1608,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 2314,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "call_count": 5,
    "guards_detected": [],
    "untrusted_call_count": 5
}
high other detector ETH value transfer possible 55 yes yes
view
trace_id: 0xfb8d3c2b9982d113960525ee1ab539c55eb10f61e808843879a3f01182ff11c5
call_targets: 0x0000000000000000000000000000000000000002, 0xe92fa4e3447a58753154364b329d2361b3b4cae4
target_varies: yes
classification: target_varies
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "confirmed",
    "attempts": 1,
    "trace_id": "0xfb8d3c2b9982d113960525ee1ab539c55eb10f61e808843879a3f01182ff11c5",
    "confirmed": true,
    "trace_mode": "callTracer",
    "call_targets": [
        "0x0000000000000000000000000000000000000002",
        "0xe92fa4e3447a58753154364b329d2361b3b4cae4"
    ],
    "matched_probe": null,
    "target_varies": true,
    "classification": "target_varies"
}
witness_json
{
    "notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
    "constraints": [],
    "entrypoints": [
        {
            "calldata": "0x0c4f8f6f",
            "selector": "0x0c4f8f6f",
            "calldata_variants": [
                "0x0c4f8f6f",
                "0x0c4f8f6f0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x48e7a100",
            "selector": "0x48e7a100",
            "calldata_variants": [
                "0x48e7a100",
                "0x48e7a1000000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x4f55f292",
            "selector": "0x4f55f292",
            "calldata_variants": [
                "0x4f55f292",
                "0x4f55f2920000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x59391a67",
            "selector": "0x59391a67",
            "calldata_variants": [
                "0x59391a67",
                "0x59391a670000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x77699a06",
            "selector": "0x77699a06",
            "calldata_variants": [
                "0x77699a06",
                "0x77699a060000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x89b898b8",
            "selector": "0x89b898b8",
            "calldata_variants": [
                "0x89b898b8",
                "0x89b898b80000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x8b555789",
            "selector": "0x8b555789",
            "calldata_variants": [
                "0x8b555789",
                "0x8b5557890000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xb6f9fda5",
            "selector": "0xb6f9fda5",
            "calldata_variants": [
                "0xb6f9fda5",
                "0xb6f9fda50000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 1426,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 1608,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 2314,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "eth_value_calls": 5,
    "guards_detected": []
}
medium auth codex earlyResolve signatures are reusable and not bound to withdrawal amount or updated deposit 75 no
view
evidence_json
{
    "evidence": "msigId is computed once from initial parameters and never updated when deposits increase, while earlyResolve only verifies a signature over msigId and allows a free `amount` parameter.",
    "locations": [
        "contracts/Contract.sol:208",
        "contracts/Contract.sol:232",
        "contracts/Contract.sol:251",
        "contracts/Contract.sol:263"
    ],
    "recommendation": "Include `amount`, a monotonic nonce, and `address(this)` in the signed payload. Store and consume the nonce to prevent replay. If partial withdrawals are intended, require a fresh signature per withdrawal amount.",
    "exploit_scenario": "An authority signs the msigId once to approve a small early withdrawal. The owner can then call earlyResolve repeatedly with any amount (including newly added deposits) because the signature only covers msigId and never includes the amount or a nonce."
}
low auth codex Signatures are not domain separated (contract/chain replay possible) 65 no
view
evidence_json
{
    "evidence": "toEthSignedMessageHash hashes only the provided hash, and earlyResolve recovers the signer from msigId alone without including contract or chain context.",
    "locations": [
        "contracts/Contract.sol:53",
        "contracts/Contract.sol:60",
        "contracts/Contract.sol:263"
    ],
    "recommendation": "Add `address(this)` and chain ID to the signed data (e.g., EIP-712 domain separator) so signatures are only valid for a specific contract and chain.",
    "exploit_scenario": "A signature over msigId is valid on any contract or chain where the same msigId exists. An attacker can reuse a signature collected for one deployment on another deployment or chain fork to trigger earlyResolve without new consent."
}
low other codex regularTransfer does not enforce expirationTime 65 no
view
evidence_json
{
    "evidence": "regularTransfer only checks the secret and does not verify the current time against expirationTime.",
    "locations": [
        "contracts/Contract.sol:364",
        "contracts/Contract.sol:368"
    ],
    "recommendation": "Add `require(now <= atomicswaps[swapId].expirationTime);` in regularTransfer (or clearly document the intended race semantics).",
    "exploit_scenario": "Even after the swap has expired, the beneficiary can still call regularTransfer and claim funds as long as the owner/authority has not yet reclaimed the swap. This weakens the expected time-lock guarantees of the HTLC."
}