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

Analysis Run

f575c00d-7d47-4453-9d78-7ca636dc5e53

complete
Chain ID
1
Address
Block Number
Created
Sun, Dec 28, 2025 1:38 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
0
Validated
0
Source
Verified
Review Backing
Present
Best current signal
MintableToken allows unrestricted mint/burn, enabling collateral drain if used as the app-chain token
crit 0 high 0 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
30297 report.consolidate complete 1 / 1 3 months ago
73966 artifact.fetch complete 1 / 3 1 week ago
73967 tool.cast_disasm complete 1 / 3 1 week ago
73968 analysis.bundle complete 1 / 3 1 week ago
73969 capability.graph complete 1 / 3 1 week ago
73970 detector.run complete 1 / 3 1 week ago
73971 validation.fork complete 1 / 3 1 week ago

Artifact

Runtime bytecode: available
Creation TX:
Deployer:
Proxy: no
Implementation:
Verified Source: yes

Slither

tool.slither

No slither job recorded yet.

Codex

report.consolidate
Job Status
complete
Attempts
1 / 1
Findings
2
No findings?
no
Summary
Found 2 issues: unrestricted mint/burn in MintableToken and collateral accounting mismatch for fee-on-transfer tokens in the deposit/mint flow.
View stderr
[codex:1017446] OpenAI Codex v0.77.0 (research preview)
[codex:1017446] --------
[codex:1017446] workdir: /tmp/codex-multi-prldcs5y
[codex:1017446] model: gpt-5.2-codex
[codex:1017446] provider: openai
[codex:1017446] approval: never
[codex:1017446] sandbox: read-only
[codex:1017446] reasoning effort: xhigh
[codex:1017446] reasoning summaries: auto
[codex:1017446] session id: 019b6525-b16a-7930-b8f8-86a0e5c97ff6
[codex:1017446] --------
[codex:1017446] user
[codex:1017446] You are a security auditor. Audit this Solidity codebase for exploitable vulnerabilities.
[codex:1017446] Focus on: reentrancy, access control, upgradeability/proxy issues, signature validation, oracle manipulation,
[codex:1017446] accounting/invariant breaks, external call patterns, unchecked return values, and dangerous delegatecall.
[codex:1017446] 
[codex:1017446] Scope rules:
[codex:1017446] - You MUST fully read `AUDIT_BUNDLE.txt` before concluding. It contains the complete contents of all first-party `contracts/**/*.sol` files.
[codex:1017446] - Treat `lib/` and `@openzeppelin/` as third-party dependencies; skip them unless there is a concrete misuse angle in first-party code.
[codex:1017446] 
[codex:1017446] Output MUST be valid JSON matching the provided schema.
[codex:1017446] - If you find nothing meaningful: set no_findings=true and findings=[].
[codex:1017446] - Otherwise: set no_findings=false and include findings with severity/category/title and file/line locations when possible.
[codex:1017446] 
[codex:1017446] Output constraints (IMPORTANT):
[codex:1017446] - severity MUST be exactly one of: info, low, medium, high, critical (lowercase).
[codex:1017446] - category MUST be exactly one of: access_control, reentrancy, math, oracle, upgradeability, auth, other.
[codex:1017446] mcp startup: no servers
[codex:1017446] 
[codex:1017446] thinking
[codex:1017446] **Planning to review instructions files**
[codex:1017446] exec
[codex:1017446] /bin/bash -lc ls in /tmp/codex-multi-prldcs5y succeeded in 5ms:
[codex:1017446] AUDIT_BUNDLE.txt
[codex:1017446] codex-output-schema.json
[codex:1017446] contracts
[codex:1017446] 
[codex:1017446] thinking
[codex:1017446] **Checking for AGENTS file and reading AUDIT_BUNDLE.txt**
[codex:1017446] exec
[codex:1017446] /bin/bash -lc 'cat AUDIT_BUNDLE.txt' in /tmp/codex-multi-prldcs5y succeeded in 5ms:
[codex:1017446] This file concatenates the full contents of first-party Solidity sources for auditing.
[codex:1017446] 
[codex:1017446] ================================================================================
[codex:1017446] FILE: contracts/contracts/interfaces/IPlug.sol
[codex:1017446] ================================================================================
[codex:1017446] // SPDX-License-Identifier: GPL-3.0-only
[codex:1017446] pragma solidity 0.8.13;
[codex:1017446] 
[codex:1017446] /**
[codex:1017446]  * @title IPlug
[codex:1017446]  * @notice Interface for a plug contract that executes the message received from a source chain.
[codex:1017446]  */
[codex:1017446] interface IPlug {
[codex:1017446]     /**
[codex:1017446]      * @dev this should be only executable by socket
[codex:1017446]      * @notice executes the message received from source chain
[codex:1017446]      * @notice It is expected to have original sender checks in the destination plugs using payload
[codex:1017446]      * @param srcChainSlug_ chain slug of source
[codex:1017446]      * @param payload_ the data which is needed by plug at inbound call on remote
[codex:1017446]      */
[codex:1017446] 
[codex:1017446] thinking
[codex:1017446] **Verifying complete AUDIT_BUNDLE content**
[codex:1017446] 
[codex:1017446] I’m making sure the entire AUDIT_BUNDLE is fully read despite display truncation, planning to use line-range commands and rg to confirm no parts are missing before analyzing. I'll cross-check by listing files inside the bundle to proceed confidently with the audit.
[codex:1017446] exec
[codex:1017446] /bin/bash -lc 'rg -n "''^FILE:" AUDIT_BUNDLE.txt' in /tmp/codex-multi-prldcs5y succeeded in 6ms:
[codex:1017446] 4:FILE: contracts/contracts/interfaces/IPlug.sol
[codex:1017446] 28:FILE: contracts/contracts/interfaces/ISocket.sol
[codex:1017446] 219:FILE: contracts/contracts/superbridge/ConnectorPlug.sol
[codex:1017446] 345:FILE: contracts/contracts/superbridge/Controller.sol
[codex:1017446] 603:FILE: contracts/contracts/superbridge/ExchangeRate.sol
[codex:1017446] 656:FILE: contracts/contracts/superbridge/Gauge.sol
[codex:1017446] 715:FILE: contracts/contracts/superbridge/MintableToken.sol
[codex:1017446] 745:FILE: contracts/contracts/superbridge/NonMintableToken.sol
[codex:1017446] 764:FILE: contracts/contracts/superbridge/RescueFundsLib.sol
[codex:1017446] 813:FILE: contracts/contracts/superbridge/Vault.sol
[codex:1017446] 1025:FILE: contracts/lib/openzeppelin-contracts/contracts/access/Ownable.sol
[codex:1017446] 1112:FILE: contracts/lib/openzeppelin-contracts/contracts/access/Ownable2Step.sol
[codex:1017446] 1173:FILE: contracts/lib/openzeppelin-contracts/contracts/utils/Context.sol
[codex:1017446] 1201:FILE: contracts/lib/solmate/src/tokens/ERC20.sol
[codex:1017446] 1411:FILE: contracts/lib/solmate/src/utils/SafeTransferLib.sol
[codex:1017446] 
[codex:1017446] thinking
[codex:1017446] **Extracting contract code sections**
[codex:1017446] exec
[codex:1017446] /bin/bash -lc "sed -n '603,740p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-prldcs5y succeeded in 5ms:
[codex:1017446] FILE: contracts/contracts/superbridge/ExchangeRate.sol
[codex:1017446] ================================================================================
[codex:1017446] pragma solidity 0.8.13;
[codex:1017446] 
[codex:1017446] import "lib/openzeppelin-contracts/contracts/access/Ownable2Step.sol";
[codex:1017446] import {RescueFundsLib} from "./RescueFundsLib.sol";
[codex:1017446] 
[codex:1017446] interface IExchangeRate {
[codex:1017446]     // not marked pure, may involve state interactions in future
[codex:1017446]     function getMintAmount(
[codex:1017446]         uint256 lockAmount,
[codex:1017446]         uint256 totalLockedAmount
[codex:1017446]     ) external returns (uint256 mintAmount);
[codex:1017446] 
[codex:1017446]     // not marked pure, may involve state interactions in future
[codex:1017446]     function getUnlockAmount(
[codex:1017446]         uint256 burnAmount,
[codex:1017446]         uint256 totalLockedAmount
[codex:1017446]     ) external returns (uint256 unlockAmount);
[codex:1017446] }
[codex:1017446] 
[codex:1017446] thinking
[codex:1017446] **Continuing exploration**
[codex:1017446] exec
[codex:1017446] /bin/bash -lc "sed -n '740,840p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-prldcs5y succeeded in 5ms:
[codex:1017446]         _burn(burner_, amount_);
[codex:1017446]     }
[codex:1017446] }
[codex:1017446] 
[codex:1017446] ================================================================================
[codex:1017446] FILE: contracts/contracts/superbridge/NonMintableToken.sol
[codex:1017446] ================================================================================
[codex:1017446] pragma solidity 0.8.13;
[codex:1017446] 
[codex:1017446] import "lib/solmate/src/tokens/ERC20.sol";
[codex:1017446] 
[codex:1017446] contract NonMintableToken is ERC20 {
[codex:1017446]     // this is a mock token used in tests, other projects' token to be used here
[codex:1017446]     constructor(
[codex:1017446]         string memory name_,
[codex:1017446]         string memory symbol_,
[codex:1017446]         uint8 decimals_,
[codex:1017446]         uint256 totalSupply_
[codex:1017446]     ) ERC20(name_, symbol_, decimals_) {
[codex:1017446]         _mint(msg.sender, totalSupply_);
[codex:1017446] 
[codex:1017446] thinking
[codex:1017446] **Requesting remaining Vault content**
[codex:1017446] exec
[codex:1017446] /bin/bash -lc "sed -n '840,980p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-prldcs5y succeeded in 6ms:
[codex:1017446] 
[codex:1017446]     // connector => lockLimitParams
[codex:1017446]     mapping(address => LimitParams) _lockLimitParams;
[codex:1017446] 
[codex:1017446]     // connector => unlockLimitParams
[codex:1017446]     mapping(address => LimitParams) _unlockLimitParams;
[codex:1017446] 
[codex:1017446]     error ConnectorUnavailable();
[codex:1017446]     error ZeroAmount();
[codex:1017446] 
[codex:1017446]     event LimitParamsUpdated(UpdateLimitParams[] updates);
[codex:1017446]     event TokensDeposited(
[codex:1017446]         address connector,
[codex:1017446]         address depositor,
[codex:1017446]         address receiver,
[codex:1017446]         uint256 depositAmount
[codex:1017446]     );
[codex:1017446]     event PendingTokensTransferred(
[codex:1017446]         address connector,
[codex:1017446]         address receiver,
[codex:1017446] 
[codex:1017446] thinking
[codex:1017446] **Continuing exploration**
[codex:1017446] exec
[codex:1017446] /bin/bash -lc "sed -n '980,1045p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-prldcs5y succeeded in 5ms:
[codex:1017446]         uint256 msgGasLimit_
[codex:1017446]     ) external view returns (uint256 totalFees) {
[codex:1017446]         return IConnector(connector_).getMinFees(msgGasLimit_);
[codex:1017446]     }
[codex:1017446] 
[codex:1017446]     function getCurrentLockLimit(
[codex:1017446]         address connector_
[codex:1017446]     ) external view returns (uint256) {
[codex:1017446]         return _getCurrentLimit(_lockLimitParams[connector_]);
[codex:1017446]     }
[codex:1017446] 
[codex:1017446]     function getCurrentUnlockLimit(
[codex:1017446]         address connector_
[codex:1017446]     ) external view returns (uint256) {
[codex:1017446]         return _getCurrentLimit(_unlockLimitParams[connector_]);
[codex:1017446]     }
[codex:1017446] 
[codex:1017446]     function getLockLimitParams(
[codex:1017446]         address connector_
[codex:1017446]     ) external view returns (LimitParams memory) {
[codex:1017446] 
[codex:1017446] 
[codex:1017446] thinking
[codex:1017446] **Analyzing contract interaction vulnerabilities**
[codex:1017446] thinking
[codex:1017446] **Examining array length consistency and accounting logic**
[codex:1017446] 
[codex:1017446] I'm reviewing array length checks to confirm no out-of-bounds access and scrutinizing the accounting between locked amounts, minted totals, and exchange rate calculations to spot any inconsistencies or potential double-mint scenarios. I'm also considering how external calls and owner-controlled parameters might affect behavior but see owner control limits some risks.
[codex:1017446] exec
[codex:1017446] /bin/bash -lc "sed -n '345,603p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-prldcs5y succeeded in 6ms:
[codex:1017446] FILE: contracts/contracts/superbridge/Controller.sol
[codex:1017446] ================================================================================
[codex:1017446] pragma solidity 0.8.13;
[codex:1017446] 
[codex:1017446] import "lib/solmate/src/utils/SafeTransferLib.sol";
[codex:1017446] import "lib/openzeppelin-contracts/contracts/access/Ownable2Step.sol";
[codex:1017446] import {IExchangeRate} from "./ExchangeRate.sol";
[codex:1017446] import {Gauge} from "./Gauge.sol";
[codex:1017446] import {IConnector, IHub} from "./ConnectorPlug.sol";
[codex:1017446] import {IMintableERC20} from "./MintableToken.sol";
[codex:1017446] import {RescueFundsLib} from "./RescueFundsLib.sol";
[codex:1017446] 
[codex:1017446] contract Controller is IHub, Gauge, Ownable2Step {
[codex:1017446]     using SafeTransferLib for IMintableERC20;
[codex:1017446]     IMintableERC20 public immutable token__;
[codex:1017446]     IExchangeRate public exchangeRate__;
[codex:1017446] 
[codex:1017446]     struct UpdateLimitParams {
[codex:1017446]         bool isMint;
[codex:1017446]         address connector;
[codex:1017446] 
[codex:1017446] 
[codex:1017446] Reconnecting... 1/5
[codex:1017446] 
[codex:1017446] Reconnecting... 2/5
[codex:1017446] 
[codex:1017446] 
[codex:1017446] thinking
[codex:1017446] **Analyzing potential vulnerabilities and architectural risks**
[codex:1017446] 
[codex:1017446] I’m carefully examining the contract set for possible security issues, focusing on access control gaps, reentrancy risks, unchecked returns, and validation problems. I’m noting that the MintableToken’s open mint/burn is risky if used beyond testing, potential replay attacks in cross-chain message handling due to missing deduplication, and subtle reentrancy concerns around token burns in Controller.withdrawFromAppChain. I’m also considering oracle manipulation, improper validation of connectors, and bridging token transfer quirks that might cause under-collateralization in certain token types. Overall, I’m identifying several medium- to high-severity flags mainly tied to design assumptions and reliance on correct external contract behavior.
[codex:1017446] thinking
[codex:1017446] **Highlighting bridging accounting and access control concerns**
[codex:1017446] 
[codex:1017446] I’m focusing on two main issues: first, the deposit mechanism trusts the nominal token amount without verifying actual transferred tokens, risking over-minting with fee-on-transfer tokens; second, the MintableToken contract’s unrestricted minting presents a critical risk if deployed beyond tests, potentially allowing drain of locked funds. I’m also considering minor concerns like message source validation in ConnectorPlug and subtle rate-limit nuances, aiming to provide clear, evidence-backed findings focused on accounting integrity and access control.
[codex:1017446] exec
[codex:1017446] /bin/bash -lc 'nl -ba contracts/contracts/superbridge/MintableToken.sol' in /tmp/codex-multi-prldcs5y succeeded in 7ms:
[codex:1017446]      1	pragma solidity 0.8.13;
[codex:1017446]      2	
[codex:1017446]      3	import "lib/solmate/src/tokens/ERC20.sol";
[codex:1017446]      4	
[codex:1017446]      5	abstract contract IMintableERC20 is ERC20 {
[codex:1017446]      6	    function mint(address receiver_, uint256 amount_) external virtual;
[codex:1017446]      7	
[codex:1017446]      8	    function burn(address burner_, uint256 amount_) external virtual;
[codex:1017446]      9	}
[codex:1017446]     10	
[codex:1017446]     11	// this is a mock token used in tests, other projects' token to be used here
[codex:1017446]     12	contract MintableToken is IMintableERC20 {
[codex:1017446]     13	    constructor(
[codex:1017446]     14	        string memory name_,
[codex:1017446]     15	        string memory symbol_,
[codex:1017446]     16	        uint8 decimals_
[codex:1017446]     17	    ) ERC20(name_, symbol_, decimals_) {}
[codex:1017446]     18	
[codex:1017446]     19	    function mint(address receiver_, uint256 amount_) external override {
[codex:1017446]     20	        _mint(receiver_, amount_);
[codex:1017446] 
[codex:1017446] thinking
[codex:1017446] **Preparing to reference lines in Vault.depositToAppChain**
[codex:1017446] exec
[codex:1017446] /bin/bash -lc "nl -ba contracts/contracts/superbridge/Vault.sol | sed -n '40,160p'" in /tmp/codex-multi-prldcs5y succeeded in 6ms:
[codex:1017446]     40	        address receiver,
[codex:1017446]     41	        uint256 depositAmount
[codex:1017446]     42	    );
[codex:1017446]     43	    event PendingTokensTransferred(
[codex:1017446]     44	        address connector,
[codex:1017446]     45	        address receiver,
[codex:1017446]     46	        uint256 unlockedAmount,
[codex:1017446]     47	        uint256 pendingAmount
[codex:1017446]     48	    );
[codex:1017446]     49	    event TokensPending(
[codex:1017446]     50	        address connector,
[codex:1017446]     51	        address receiver,
[codex:1017446]     52	        uint256 pendingAmount,
[codex:1017446]     53	        uint256 totalPendingAmount
[codex:1017446]     54	    );
[codex:1017446]     55	    event TokensUnlocked(
[codex:1017446]     56	        address connector,
[codex:1017446]     57	        address receiver,
[codex:1017446]     58	        uint256 unlockedAmount
[codex:1017446]     59	    );
[codex:1017446] 
[codex:1017446] thinking
[codex:1017446] **Analyzing smart contract security issues**
[codex:1017446] 
[codex:1017446] I'll examine key functions around deposit, withdrawal, and minting to identify vulnerabilities, focusing on how token amounts are handled versus actual transfers, access controls—or lack thereof—in MintableToken, and potential authorization gaps in message handling, aiming to build clear findings with severity, evidence, and exploit scenarios.
[codex:1017446] exec
[codex:1017446] /bin/bash -lc "nl -ba contracts/contracts/superbridge/Controller.sol | sed -n '100,200p'" in /tmp/codex-multi-prldcs5y succeeded in 6ms:
[codex:1017446]    100	                    .ratePerSecond = updates_[i].ratePerSecond;
[codex:1017446]    101	            } else {
[codex:1017446]    102	                _consumePartLimit(0, _burnLimitParams[updates_[i].connector]); // to keep current limit in sync
[codex:1017446]    103	                _burnLimitParams[updates_[i].connector].maxLimit = updates_[i]
[codex:1017446]    104	                    .maxLimit;
[codex:1017446]    105	                _burnLimitParams[updates_[i].connector]
[codex:1017446]    106	                    .ratePerSecond = updates_[i].ratePerSecond;
[codex:1017446]    107	            }
[codex:1017446]    108	        }
[codex:1017446]    109	
[codex:1017446]    110	        emit LimitParamsUpdated(updates_);
[codex:1017446]    111	    }
[codex:1017446]    112	
[codex:1017446]    113	    // do we throttle burn amount or unlock amount? burn for now
[codex:1017446]    114	    function withdrawFromAppChain(
[codex:1017446]    115	        address receiver_,
[codex:1017446]    116	        uint256 burnAmount_,
[codex:1017446]    117	        uint256 msgGasLimit_,
[codex:1017446]    118	        address connector_
[codex:1017446]    119	    ) external payable {
[codex:1017446] 
[codex:1017446] thinking
[codex:1017446] **Reviewing potential vulnerabilities and line references**
[codex:1017446] exec
[codex:1017446] /bin/bash -lc 'nl -ba contracts/contracts/superbridge/ConnectorPlug.sol' in /tmp/codex-multi-prldcs5y succeeded in 6ms:
[codex:1017446]      1	pragma solidity 0.8.13;
[codex:1017446]      2	
[codex:1017446]      3	import "lib/openzeppelin-contracts/contracts/access/Ownable2Step.sol";
[codex:1017446]      4	import {ISocket} from "../interfaces/ISocket.sol";
[codex:1017446]      5	import {IPlug} from "../interfaces/IPlug.sol";
[codex:1017446]      6	import {RescueFundsLib} from "./RescueFundsLib.sol";
[codex:1017446]      7	
[codex:1017446]      8	interface IHub {
[codex:1017446]      9	    function receiveInbound(bytes memory payload_) external;
[codex:1017446]     10	}
[codex:1017446]     11	
[codex:1017446]     12	interface IConnector {
[codex:1017446]     13	    function outbound(
[codex:1017446]     14	        uint256 msgGasLimit_,
[codex:1017446]     15	        bytes memory payload_
[codex:1017446]     16	    ) external payable;
[codex:1017446]     17	
[codex:1017446]     18	    function siblingChainSlug() external view returns (uint32);
[codex:1017446]     19	
[codex:1017446]     20	    function getMinFees(
[codex:1017446] 
[codex:1017446] thinking
[codex:1017446] **Analyzing potential vulnerabilities and summarizing findings**
[codex:1017446] 
[codex:1017446] I’m reviewing various contracts for vulnerabilities related to signature validation, access control, reentrancy, and exchange rate manipulations. I identified two main issues: unrestricted mint/burn functions in MintableToken allowing collateral drain if misused, and accounting mismatches with fee-on-transfer tokens that can break collateral integrity during deposits. I’m compiling detailed findings with severity, impact, recommendations, evidence, and file locations, making sure the final JSON output is valid and comprehensive.
[codex:1017446] codex
[codex:1017446] {"no_findings":false,"summary":"Found 2 issues: unrestricted mint/burn in MintableToken and collateral accounting mismatch for fee-on-transfer tokens in the deposit/mint flow.","findings":[{"severity":"high","category":"access_control","title":"MintableToken allows unrestricted mint/burn, enabling collateral drain if used as the app-chain token","exploit_scenario":"If the system is deployed using MintableToken as the bridge-minted asset, any attacker can call mint() to create arbitrary tokens, then call Controller.withdrawFromAppChain() to burn those tokens and unlock real assets from the Vault on the other chain, draining collateral without providing any locked backing.","recommendation":"Restrict mint/burn to the Controller (or a dedicated minter role) and ensure MintableToken is never deployed in production. Prefer a mintable token with explicit access control and an allowlisted minter.","evidence":"MintableToken.mint() and MintableToken.burn() are external and lack any access control modifiers.","locations":["contracts/contracts/superbridge/MintableToken.sol:19","contracts/contracts/superbridge/MintableToken.sol:23"]},{"severity":"medium","category":"math","title":"Deposit path assumes full transfer amount; fee-on-transfer tokens cause under-collateralized minting","exploit_scenario":"With a fee-on-transfer or deflationary token, Vault.depositToAppChain() forwards the user-supplied amount_ in the payload even if the Vault receives fewer tokens. The Controller mints based on this reported lockAmount, allowing an attacker to mint more on the app chain than was actually locked and later redeem the full amount, extracting value from the Vault.","recommendation":"Compute the actual received amount via balance-before/balance-after and send that amount in the payload. Alternatively, explicitly reject fee-on-transfer tokens and enforce that the Vault’s balance increases by amount_.","evidence":"Vault.depositToAppChain() transfers amount_ and forwards amount_ in the outbound payload without checking the actual received amount; Controller.receiveInbound() trusts lockAmount from the payload for accounting and minting.","locations":["contracts/contracts/superbridge/Vault.sol:87","contracts/contracts/superbridge/Vault.sol:100","contracts/contracts/superbridge/Vault.sol:102","contracts/contracts/superbridge/Controller.sol:175","contracts/contracts/superbridge/Controller.sol:181"]}]}
[codex:1017446] tokens used
[codex:1017446] 39,694
[codex:1017446] {"no_findings":false,"summary":"Found 2 issues: unrestricted mint/burn in MintableToken and collateral accounting mismatch for fee-on-transfer tokens in the deposit/mint flow.","findings":[{"severity":"high","category":"access_control","title":"MintableToken allows unrestricted mint/burn, enabling collateral drain if used as the app-chain token","exploit_scenario":"If the system is deployed using MintableToken as the bridge-minted asset, any attacker can call mint() to create arbitrary tokens, then call Controller.withdrawFromAppChain() to burn those tokens and unlock real assets from the Vault on the other chain, draining collateral without providing any locked backing.","recommendation":"Restrict mint/burn to the Controller (or a dedicated minter role) and ensure MintableToken is never deployed in production. Prefer a mintable token with explicit access control and an allowlisted minter.","evidence":"MintableToken.mint() and MintableToken.burn() are external and lack any access control modifiers.","locations":["contracts/contracts/superbridge/MintableToken.sol:19","contracts/contracts/superbridge/MintableToken.sol:23"]},{"severity":"medium","category":"math","title":"Deposit path assumes full transfer amount; fee-on-transfer tokens cause under-collateralized minting","exploit_scenario":"With a fee-on-transfer or deflationary token, Vault.depositToAppChain() forwards the user-supplied amount_ in the payload even if the Vault receives fewer tokens. The Controller mints based on this reported lockAmount, allowing an attacker to mint more on the app chain than was actually locked and later redeem the full amount, extracting value from the Vault.","recommendation":"Compute the actual received amount via balance-before/balance-after and send that amount in the payload. Alternatively, explicitly reject fee-on-transfer tokens and enforce that the Vault’s balance increases by amount_.","evidence":"Vault.depositToAppChain() transfers amount_ and forwards amount_ in the outbound payload without checking the actual received amount; Controller.receiveInbound() trusts lockAmount from the payload for accounting and minting.","locations":["contracts/contracts/superbridge/Vault.sol:87","contracts/contracts/superbridge/Vault.sol:100","contracts/contracts/superbridge/Vault.sol:102","contracts/contracts/superbridge/Controller.sol:175","contracts/contracts/superbridge/Controller.sol:181"]}]}
Metadata
{
    "codex": {
        "ran_at": "2025-12-28T13:38:38.540098+00:00",
        "returncode": 0
    },
    "summary": "Found 2 issues: unrestricted mint/burn in MintableToken and collateral accounting mismatch for fee-on-transfer tokens in the deposit/mint flow.",
    "raw_final": {
        "summary": "Found 2 issues: unrestricted mint/burn in MintableToken and collateral accounting mismatch for fee-on-transfer tokens in the deposit/mint flow.",
        "findings": [
            {
                "title": "MintableToken allows unrestricted mint/burn, enabling collateral drain if used as the app-chain token",
                "category": "access_control",
                "evidence": "MintableToken.mint() and MintableToken.burn() are external and lack any access control modifiers.",
                "severity": "high",
                "locations": [
                    "contracts/contracts/superbridge/MintableToken.sol:19",
                    "contracts/contracts/superbridge/MintableToken.sol:23"
                ],
                "recommendation": "Restrict mint/burn to the Controller (or a dedicated minter role) and ensure MintableToken is never deployed in production. Prefer a mintable token with explicit access control and an allowlisted minter.",
                "exploit_scenario": "If the system is deployed using MintableToken as the bridge-minted asset, any attacker can call mint() to create arbitrary tokens, then call Controller.withdrawFromAppChain() to burn those tokens and unlock real assets from the Vault on the other chain, draining collateral without providing any locked backing."
            },
            {
                "title": "Deposit path assumes full transfer amount; fee-on-transfer tokens cause under-collateralized minting",
                "category": "math",
                "evidence": "Vault.depositToAppChain() transfers amount_ and forwards amount_ in the outbound payload without checking the actual received amount; Controller.receiveInbound() trusts lockAmount from the payload for accounting and minting.",
                "severity": "medium",
                "locations": [
                    "contracts/contracts/superbridge/Vault.sol:87",
                    "contracts/contracts/superbridge/Vault.sol:100",
                    "contracts/contracts/superbridge/Vault.sol:102",
                    "contracts/contracts/superbridge/Controller.sol:175",
                    "contracts/contracts/superbridge/Controller.sol:181"
                ],
                "recommendation": "Compute the actual received amount via balance-before/balance-after and send that amount in the payload. Alternatively, explicitly reject fee-on-transfer tokens and enforce that the Vault\u2019s balance increases by amount_.",
                "exploit_scenario": "With a fee-on-transfer or deflationary token, Vault.depositToAppChain() forwards the user-supplied amount_ in the payload even if the Vault receives fewer tokens. The Controller mints based on this reported lockAmount, allowing an attacker to mint more on the app chain than was actually locked and later redeem the full amount, extracting value from the Vault."
            }
        ],
        "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
2
Total opcodes
3479
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 0x0129
0000000c: JUMPI
0000000d: PUSH1 0x00
0000000f: CALLDATALOAD
00000010: PUSH1 0xe0
00000012: SHR
00000013: DUP1
00000014: PUSH4 0x79ba5097
00000019: GT
0000001a: PUSH2 0x00a5
0000001d: JUMPI
0000001e: DUP1
0000001f: PUSH4 0x8da5cb5b
00000024: GT
00000025: PUSH2 0x0074
00000028: JUMPI
00000029: DUP1
0000002a: PUSH4 0xe30c3978
0000002f: GT
00000030: PUSH2 0x0059
00000033: JUMPI
00000034: DUP1
00000035: PUSH4 0xe30c3978
0000003a: EQ
0000003b: PUSH2 0x039c
0000003e: JUMPI
0000003f: DUP1
00000040: PUSH4 0xf2b7c5cd
00000045: EQ
00000046: PUSH2 0x03c7
00000049: JUMPI
0000004a: DUP1
0000004b: PUSH4 0xf2fde38b
00000050: EQ
00000051: PUSH2 0x03e7
00000054: JUMPI
00000055: PUSH1 0x00
00000057: DUP1
00000058: REVERT
00000059: JUMPDEST
0000005a: DUP1
0000005b: PUSH4 0x8da5cb5b
00000060: EQ
00000061: PUSH2 0x0351
00000064: JUMPI
00000065: DUP1
00000066: PUSH4 0x9b4cd940
0000006b: EQ
0000006c: PUSH2 0x037c
0000006f: JUMPI
00000070: PUSH1 0x00
00000072: DUP1
00000073: REVERT
00000074: JUMPDEST
00000075: DUP1
00000076: PUSH4 0x79ba5097
0000007b: EQ
0000007c: PUSH2 0x02e9
0000007f: JUMPI
00000080: DUP1
00000081: PUSH4 0x8367080f
00000086: EQ
00000087: PUSH2 0x02fe
0000008a: JUMPI
0000008b: DUP1
0000008c: PUSH4 0x84f289cc
00000091: EQ
00000092: PUSH2 0x031e
00000095: JUMPI
00000096: DUP1
00000097: PUSH4 0x864f6a7a
0000009c: EQ
0000009d: PUSH2 0x033e
000000a0: JUMPI
000000a1: PUSH1 0x00
000000a3: DUP1
000000a4: REVERT
000000a5: JUMPDEST
000000a6: DUP1
000000a7: PUSH4 0x4603f9f4
000000ac: GT
000000ad: PUSH2 0x00fc
000000b0: JUMPI
000000b1: DUP1
000000b2: PUSH4 0x6ccae054
000000b7: GT
000000b8: PUSH2 0x00e1
000000bb: JUMPI
000000bc: DUP1
000000bd: PUSH4 0x6ccae054
000000c2: EQ
000000c3: PUSH2 0x0261
000000c6: JUMPI
000000c7: DUP1
000000c8: PUSH4 0x715018a6
000000cd: EQ
000000ce: PUSH2 0x0281
000000d1: JUMPI
000000d2: DUP1
000000d3: PUSH4 0x755e1e24
000000d8: EQ
000000d9: PUSH2 0x0296
000000dc: JUMPI
000000dd: PUSH1 0x00
000000df: DUP1
000000e0: REVERT
000000e1: JUMPDEST
000000e2: DUP1
000000e3: PUSH4 0x4603f9f4
000000e8: EQ
000000e9: PUSH2 0x01e8
000000ec: JUMPI
000000ed: DUP1
000000ee: PUSH4 0x49eec51e
000000f3: EQ
000000f4: PUSH2 0x0208
000000f7: JUMPI
000000f8: PUSH1 0x00
000000fa: DUP1
000000fb: REVERT
000000fc: JUMPDEST
000000fd: DUP1
000000fe: PUSH4 0x10c56ed9
00000103: EQ
00000104: PUSH2 0x012e
00000107: JUMPI
00000108: DUP1
00000109: PUSH4 0x186669e8
0000010e: EQ
0000010f: PUSH2 0x0150
00000112: JUMPI
00000113: DUP1
00000114: PUSH4 0x2bc9c08a
00000119: EQ
0000011a: PUSH2 0x019b
0000011d: JUMPI
0000011e: DUP1
0000011f: PUSH4 0x2fef4a8b
00000124: EQ
00000125: PUSH2 0x01bb
00000128: JUMPI
00000129: JUMPDEST
0000012a: PUSH1 0x00
0000012c: DUP1
0000012d: REVERT
0000012e: JUMPDEST
0000012f: CALLVALUE
00000130: DUP1
00000131: ISZERO
00000132: PUSH2 0x013a
00000135: JUMPI
00000136: PUSH1 0x00
00000138: DUP1
00000139: REVERT
0000013a: JUMPDEST
0000013b: POP
0000013c: PUSH2 0x014e
0000013f: PUSH2 0x0149
00000142: CALLDATASIZE
00000143: PUSH1 0x04
00000145: PUSH2 0x1619
00000148: JUMP
00000149: JUMPDEST
0000014a: PUSH2 0x0407
0000014d: JUMP
0000014e: JUMPDEST
0000014f: STOP
00000150: JUMPDEST
00000151: CALLVALUE
00000152: DUP1
00000153: ISZERO
00000154: PUSH2 0x015c
00000157: JUMPI
00000158: PUSH1 0x00
0000015a: DUP1
0000015b: REVERT
0000015c: JUMPDEST
0000015d: POP
0000015e: PUSH2 0x0188
00000161: PUSH2 0x016b
00000164: CALLDATASIZE
00000165: PUSH1 0x04
00000167: PUSH2 0x170a
0000016a: JUMP
0000016b: JUMPDEST
0000016c: PUSH1 0x02
0000016e: PUSH1 0x20
00000170: SWAP1
00000171: DUP2
00000172: MSTORE
00000173: PUSH1 0x00
00000175: SWAP3
00000176: DUP4
00000177: MSTORE
00000178: PUSH1 0x40
0000017a: DUP1
0000017b: DUP5
0000017c: KECCAK256
0000017d: SWAP1
0000017e: SWAP2
0000017f: MSTORE
00000180: SWAP1
00000181: DUP3
00000182: MSTORE
00000183: SWAP1
00000184: KECCAK256
00000185: SLOAD
00000186: DUP2
00000187: JUMP
00000188: JUMPDEST
00000189: PUSH1 0x40
0000018b: MLOAD
0000018c: SWAP1
0000018d: DUP2
0000018e: MSTORE
0000018f: PUSH1 0x20
00000191: ADD
00000192: JUMPDEST
00000193: PUSH1 0x40
00000195: MLOAD
00000196: DUP1
00000197: SWAP2
00000198: SUB
00000199: SWAP1
0000019a: RETURN
0000019b: JUMPDEST
0000019c: CALLVALUE
0000019d: DUP1
0000019e: ISZERO
0000019f: PUSH2 0x01a7
000001a2: JUMPI
000001a3: PUSH1 0x00
000001a5: DUP1
000001a6: REVERT
000001a7: JUMPDEST
000001a8: POP
000001a9: PUSH2 0x014e
000001ac: PUSH2 0x01b6
000001af: CALLDATASIZE
000001b0: PUSH1 0x04
000001b2: PUSH2 0x1743
000001b5: JUMP
000001b6: JUMPDEST
000001b7: PUSH2 0x0616
000001ba: JUMP
000001bb: JUMPDEST
000001bc: CALLVALUE
000001bd: DUP1
000001be: ISZERO
000001bf: PUSH2 0x01c7
000001c2: JUMPI
000001c3: PUSH1 0x00
000001c5: DUP1
000001c6: REVERT
000001c7: JUMPDEST
000001c8: POP
000001c9: PUSH2 0x0188
000001cc: PUSH2 0x01d6
000001cf: CALLDATASIZE
000001d0: PUSH1 0x04
000001d2: PUSH2 0x17b8
000001d5: JUMP
000001d6: JUMPDEST
000001d7: PUSH1 0x03
000001d9: PUSH1 0x20
000001db: MSTORE
000001dc: PUSH1 0x00
000001de: SWAP1
000001df: DUP2
000001e0: MSTORE
000001e1: PUSH1 0x40
000001e3: SWAP1
000001e4: KECCAK256
000001e5: SLOAD
000001e6: DUP2
000001e7: JUMP
000001e8: JUMPDEST
000001e9: CALLVALUE
000001ea: DUP1
000001eb: ISZERO
000001ec: PUSH2 0x01f4
000001ef: JUMPI
000001f0: PUSH1 0x00
000001f2: DUP1
000001f3: REVERT
000001f4: JUMPDEST
000001f5: POP
000001f6: PUSH2 0x0188
000001f9: PUSH2 0x0203
000001fc: CALLDATASIZE
000001fd: PUSH1 0x04
000001ff: PUSH2 0x17b8
00000202: JUMP
00000203: JUMPDEST
00000204: PUSH2 0x090d
00000207: JUMP
00000208: JUMPDEST
00000209: CALLVALUE
0000020a: DUP1
0000020b: ISZERO
0000020c: PUSH2 0x0214
0000020f: JUMPI
00000210: PUSH1 0x00
00000212: DUP1
00000213: REVERT
00000214: JUMPDEST
00000215: POP
00000216: PUSH2 0x023c
00000219: PUSH32 0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
0000023a: DUP2
0000023b: JUMP
0000023c: JUMPDEST
0000023d: PUSH1 0x40
0000023f: MLOAD
00000240: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000255: SWAP1
00000256: SWAP2
00000257: AND
00000258: DUP2
00000259: MSTORE
0000025a: PUSH1 0x20
0000025c: ADD
0000025d: PUSH2 0x0192
00000260: JUMP
00000261: JUMPDEST
00000262: CALLVALUE
00000263: DUP1
00000264: ISZERO
00000265: PUSH2 0x026d
00000268: JUMPI
00000269: PUSH1 0x00
0000026b: DUP1
0000026c: REVERT
0000026d: JUMPDEST
0000026e: POP
0000026f: PUSH2 0x014e
00000272: PUSH2 0x027c
00000275: CALLDATASIZE
00000276: PUSH1 0x04
00000278: PUSH2 0x17d5
0000027b: JUMP
0000027c: JUMPDEST
0000027d: PUSH2 0x0941
00000280: JUMP
00000281: JUMPDEST
00000282: CALLVALUE
00000283: DUP1
00000284: ISZERO
00000285: PUSH2 0x028d
00000288: JUMPI
00000289: PUSH1 0x00
0000028b: DUP1
0000028c: REVERT
0000028d: JUMPDEST
0000028e: POP
0000028f: PUSH2 0x014e
00000292: PUSH2 0x0959
00000295: JUMP
00000296: JUMPDEST
00000297: CALLVALUE
00000298: DUP1
00000299: ISZERO
0000029a: PUSH2 0x02a2
0000029d: JUMPI
0000029e: PUSH1 0x00
000002a0: DUP1
000002a1: REVERT
000002a2: JUMPDEST
000002a3: POP
000002a4: PUSH2 0x02b6
000002a7: PUSH2 0x02b1
000002aa: CALLDATASIZE
000002ab: PUSH1 0x04
000002ad: PUSH2 0x17b8
000002b0: JUMP
000002b1: JUMPDEST
000002b2: PUSH2 0x096d
000002b5: JUMP
000002b6: JUMPDEST
000002b7: PUSH1 0x40
000002b9: MLOAD
000002ba: PUSH2 0x0192
000002bd: SWAP2
000002be: SWAP1
000002bf: DUP2
000002c0: MLOAD
000002c1: DUP2
000002c2: MSTORE
000002c3: PUSH1 0x20
000002c5: DUP1
000002c6: DUP4
000002c7: ADD
000002c8: MLOAD
000002c9: SWAP1
000002ca: DUP3
000002cb: ADD
000002cc: MSTORE
000002cd: PUSH1 0x40
000002cf: DUP1
000002d0: DUP4
000002d1: ADD
000002d2: MLOAD
000002d3: SWAP1
000002d4: DUP3
000002d5: ADD
000002d6: MSTORE
000002d7: PUSH1 0x60
000002d9: SWAP2
000002da: DUP3
000002db: ADD
000002dc: MLOAD
000002dd: SWAP2
000002de: DUP2
000002df: ADD
000002e0: SWAP2
000002e1: SWAP1
000002e2: SWAP2
000002e3: MSTORE
000002e4: PUSH1 0x80
000002e6: ADD
000002e7: SWAP1
000002e8: JUMP
000002e9: JUMPDEST
000002ea: CALLVALUE
000002eb: DUP1
000002ec: ISZERO
000002ed: PUSH2 0x02f5
000002f0: JUMPI
000002f1: PUSH1 0x00
000002f3: DUP1
000002f4: REVERT
000002f5: JUMPDEST
000002f6: POP
000002f7: PUSH2 0x014e
000002fa: PUSH2 0x09f3
000002fd: JUMP
000002fe: JUMPDEST
000002ff: CALLVALUE
00000300: DUP1
00000301: ISZERO
00000302: PUSH2 0x030a
00000305: JUMPI
00000306: PUSH1 0x00
00000308: DUP1
00000309: REVERT
0000030a: JUMPDEST
0000030b: POP
0000030c: PUSH2 0x0188
0000030f: PUSH2 0x0319
00000312: CALLDATASIZE
00000313: PUSH1 0x04
00000315: PUSH2 0x1816
00000318: JUMP
00000319: JUMPDEST
0000031a: PUSH2 0x0aad
0000031d: JUMP
0000031e: JUMPDEST
0000031f: CALLVALUE
00000320: DUP1
00000321: ISZERO
00000322: PUSH2 0x032a
00000325: JUMPI
00000326: PUSH1 0x00
00000328: DUP1
00000329: REVERT
0000032a: JUMPDEST
0000032b: POP
0000032c: PUSH2 0x0188
0000032f: PUSH2 0x0339
00000332: CALLDATASIZE
00000333: PUSH1 0x04
00000335: PUSH2 0x17b8
00000338: JUMP
00000339: JUMPDEST
0000033a: PUSH2 0x0b46
0000033d: JUMP
0000033e: JUMPDEST
0000033f: PUSH2 0x014e
00000342: PUSH2 0x034c
00000345: CALLDATASIZE
00000346: PUSH1 0x04
00000348: PUSH2 0x1842
0000034b: JUMP
0000034c: JUMPDEST
0000034d: PUSH2 0x0b74
00000350: JUMP
00000351: JUMPDEST
00000352: CALLVALUE
00000353: DUP1
00000354: ISZERO
00000355: PUSH2 0x035d
00000358: JUMPI
00000359: PUSH1 0x00
0000035b: DUP1
0000035c: REVERT
0000035d: JUMPDEST
0000035e: POP
0000035f: PUSH1 0x00
00000361: SLOAD
00000362: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000377: AND
00000378: PUSH2 0x023c
0000037b: JUMP
0000037c: JUMPDEST
0000037d: CALLVALUE
0000037e: DUP1
0000037f: ISZERO
00000380: PUSH2 0x0388
00000383: JUMPI
00000384: PUSH1 0x00
00000386: DUP1
00000387: REVERT
00000388: JUMPDEST
00000389: POP
0000038a: PUSH2 0x02b6
0000038d: PUSH2 0x0397
00000390: CALLDATASIZE
00000391: PUSH1 0x04
00000393: PUSH2 0x17b8
00000396: JUMP
00000397: JUMPDEST
00000398: PUSH2 0x0d9f
0000039b: JUMP
0000039c: JUMPDEST
0000039d: CALLVALUE
0000039e: DUP1
0000039f: ISZERO
000003a0: PUSH2 0x03a8
000003a3: JUMPI
000003a4: PUSH1 0x00
000003a6: DUP1
000003a7: REVERT
000003a8: JUMPDEST
000003a9: POP
000003aa: PUSH1 0x01
000003ac: SLOAD
000003ad: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000003c2: AND
000003c3: PUSH2 0x023c
000003c6: JUMP
000003c7: JUMPDEST
000003c8: CALLVALUE
000003c9: DUP1
000003ca: ISZERO
000003cb: PUSH2 0x03d3
000003ce: JUMPI
000003cf: PUSH1 0x00
000003d1: DUP1
000003d2: REVERT
000003d3: JUMPDEST
000003d4: POP
000003d5: PUSH2 0x014e
000003d8: PUSH2 0x03e2
000003db: CALLDATASIZE
000003dc: PUSH1 0x04
000003de: PUSH2 0x170a
000003e1: JUMP
000003e2: JUMPDEST
000003e3: PUSH2 0x0e25
000003e6: JUMP
000003e7: JUMPDEST
000003e8: CALLVALUE
000003e9: DUP1
000003ea: ISZERO
000003eb: PUSH2 0x03f3
000003ee: JUMPI
000003ef: PUSH1 0x00
000003f1: DUP1
000003f2: REVERT
000003f3: JUMPDEST
000003f4: POP
000003f5: PUSH2 0x014e
000003f8: PUSH2 0x0402
000003fb: CALLDATASIZE
000003fc: PUSH1 0x04
000003fe: PUSH2 0x17b8
00000401: JUMP
00000402: JUMPDEST
00000403: PUSH2 0x0fcf
00000406: JUMP
00000407: JUMPDEST
00000408: CALLER
00000409: PUSH1 0x00
0000040b: SWAP1
0000040c: DUP2
0000040d: MSTORE
0000040e: PUSH1 0x05
00000410: PUSH1 0x20
00000412: MSTORE
00000413: PUSH1 0x40
00000415: DUP2
00000416: KECCAK256
00000417: PUSH1 0x02
00000419: ADD
0000041a: SLOAD
0000041b: SWAP1
0000041c: SUB
0000041d: PUSH2 0x0452
00000420: JUMPI
00000421: PUSH1 0x40
00000423: MLOAD
00000424: PUSH32 0xb1efb84a00000000000000000000000000000000000000000000000000000000
00000445: DUP2
00000446: MSTORE
00000447: PUSH1 0x04
00000449: ADD
0000044a: PUSH1 0x40
0000044c: MLOAD
0000044d: DUP1
0000044e: SWAP2
0000044f: SUB
00000450: SWAP1
00000451: REVERT
00000452: JUMPDEST
00000453: PUSH1 0x00
00000455: DUP1
00000456: DUP3
00000457: DUP1
00000458: PUSH1 0x20
0000045a: ADD
0000045b: SWAP1
0000045c: MLOAD
0000045d: DUP2
0000045e: ADD
0000045f: SWAP1
00000460: PUSH2 0x0469
00000463: SWAP2
00000464: SWAP1
00000465: PUSH2 0x188c
00000468: JUMP
00000469: JUMPDEST
0000046a: CALLER
0000046b: PUSH1 0x00
0000046d: SWAP1
0000046e: DUP2
0000046f: MSTORE
00000470: PUSH1 0x05
00000472: PUSH1 0x20
00000474: MSTORE
00000475: PUSH1 0x40
00000477: DUP2
00000478: KECCAK256
00000479: SWAP3
0000047a: SWAP5
0000047b: POP
0000047c: SWAP1
0000047d: SWAP3
0000047e: POP
0000047f: SWAP1
00000480: DUP2
00000481: SWAP1
00000482: PUSH2 0x048c
00000485: SWAP1
00000486: DUP5
00000487: SWAP1
00000488: PUSH2 0x10f4
0000048b: JUMP
0000048c: JUMPDEST
0000048d: SWAP1
0000048e: SWAP3
0000048f: POP
00000490: SWAP1
00000491: POP
00000492: DUP1
00000493: ISZERO
00000494: PUSH2 0x0577
00000497: JUMPI
00000498: CALLER
00000499: PUSH1 0x00
0000049b: SWAP1
0000049c: DUP2
0000049d: MSTORE
0000049e: PUSH1 0x02
000004a0: PUSH1 0x20
000004a2: SWAP1
000004a3: DUP2
000004a4: MSTORE
000004a5: PUSH1 0x40
000004a7: DUP1
000004a8: DUP4
000004a9: KECCAK256
000004aa: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000004bf: DUP9
000004c0: AND
000004c1: DUP5
000004c2: MSTORE
000004c3: SWAP1
000004c4: SWAP2
000004c5: MSTORE
000004c6: DUP2
000004c7: KECCAK256
000004c8: DUP1
000004c9: SLOAD
000004ca: DUP4
000004cb: SWAP3
000004cc: SWAP1
000004cd: PUSH2 0x04d7
000004d0: SWAP1
000004d1: DUP5
000004d2: SWAP1
000004d3: PUSH2 0x18e9
000004d6: JUMP
000004d7: JUMPDEST
000004d8: SWAP1
000004d9: SWAP2
000004da: SSTORE
000004db: POP
000004dc: POP
000004dd: CALLER
000004de: PUSH1 0x00
000004e0: SWAP1
000004e1: DUP2
000004e2: MSTORE
000004e3: PUSH1 0x03
000004e5: PUSH1 0x20
000004e7: MSTORE
000004e8: PUSH1 0x40
000004ea: DUP2
000004eb: KECCAK256
000004ec: DUP1
000004ed: SLOAD
000004ee: DUP4
000004ef: SWAP3
000004f0: SWAP1
000004f1: PUSH2 0x04fb
000004f4: SWAP1
000004f5: DUP5
000004f6: SWAP1
000004f7: PUSH2 0x18e9
000004fa: JUMP
000004fb: JUMPDEST
000004fc: SWAP1
000004fd: SWAP2
000004fe: SSTORE
000004ff: POP
00000500: POP
00000501: CALLER
00000502: PUSH1 0x00
00000504: DUP2
00000505: DUP2
00000506: MSTORE
00000507: PUSH1 0x02
00000509: PUSH1 0x20
0000050b: SWAP1
0000050c: DUP2
0000050d: MSTORE
0000050e: PUSH1 0x40
00000510: DUP1
00000511: DUP4
00000512: KECCAK256
00000513: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000528: DUP10
00000529: AND
0000052a: DUP1
0000052b: DUP6
0000052c: MSTORE
0000052d: SWAP1
0000052e: DUP4
0000052f: MSTORE
00000530: SWAP3
00000531: DUP2
00000532: SWAP1
00000533: KECCAK256
00000534: SLOAD
00000535: DUP2
00000536: MLOAD
00000537: SWAP5
00000538: DUP6
00000539: MSTORE
0000053a: SWAP2
0000053b: DUP5
0000053c: ADD
0000053d: SWAP3
0000053e: SWAP1
0000053f: SWAP3
00000540: MSTORE
00000541: DUP3
00000542: DUP3
00000543: ADD
00000544: DUP5
00000545: SWAP1
00000546: MSTORE
00000547: PUSH1 0x60
00000549: DUP4
0000054a: ADD
0000054b: MSTORE
0000054c: MLOAD
0000054d: PUSH32 0xfef75efa635291b302f2c3dfcc6ec92874e699d186cee8bd68c36c86ad35232c
0000056e: SWAP2
0000056f: DUP2
00000570: SWAP1
00000571: SUB
00000572: PUSH1 0x80
00000574: ADD
00000575: SWAP1
00000576: LOG1
00000577: JUMPDEST
00000578: PUSH2 0x05b8
0000057b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000590: PUSH32 0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
000005b1: AND
000005b2: DUP6
000005b3: DUP5
000005b4: PUSH2 0x1148
000005b7: JUMP
000005b8: JUMPDEST
000005b9: PUSH1 0x40
000005bb: DUP1
000005bc: MLOAD
000005bd: CALLER
000005be: DUP2
000005bf: MSTORE
000005c0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000005d5: DUP7
000005d6: AND
000005d7: PUSH1 0x20
000005d9: DUP3
000005da: ADD
000005db: MSTORE
000005dc: SWAP1
000005dd: DUP2
000005de: ADD
000005df: DUP4
000005e0: SWAP1
000005e1: MSTORE
000005e2: PUSH32 0xece684e11f49f06d351439e63189ad1703238b8040d90cf994901ca2b3da8d44
00000603: SWAP1
00000604: PUSH1 0x60
00000606: ADD
00000607: JUMPDEST
00000608: PUSH1 0x40
0000060a: MLOAD
0000060b: DUP1
0000060c: SWAP2
0000060d: SUB
0000060e: SWAP1
0000060f: LOG1
00000610: POP
00000611: POP
00000612: POP
00000613: POP
00000614: POP
00000615: JUMP
00000616: JUMPDEST
00000617: PUSH2 0x061e
0000061a: PUSH2 0x121d
0000061d: JUMP
0000061e: JUMPDEST
0000061f: PUSH1 0x00
00000621: JUMPDEST
00000622: DUP2
00000623: DUP2
00000624: LT
00000625: ISZERO
00000626: PUSH2 0x08cf
00000629: JUMPI
0000062a: DUP3
0000062b: DUP3
0000062c: DUP3
0000062d: DUP2
0000062e: DUP2
0000062f: LT
00000630: PUSH2 0x063b
00000633: JUMPI
00000634: PUSH2 0x063b
00000637: PUSH2 0x1901
0000063a: JUMP
0000063b: JUMPDEST
0000063c: PUSH2 0x0651
0000063f: SWAP3
00000640: PUSH1 0x20
00000642: PUSH1 0x80
00000644: SWAP1
00000645: SWAP3
00000646: MUL
00000647: ADD
00000648: SWAP1
00000649: DUP2
0000064a: ADD
0000064b: SWAP2
0000064c: POP
0000064d: PUSH2 0x1945
00000650: JUMP
00000651: JUMPDEST
00000652: ISZERO
00000653: PUSH2 0x07b7
00000656: JUMPI
00000657: PUSH2 0x06c8
0000065a: PUSH1 0x00
0000065c: PUSH1 0x04
0000065e: PUSH1 0x00
00000660: DUP7
00000661: DUP7
00000662: DUP7
00000663: DUP2
00000664: DUP2
00000665: LT
00000666: PUSH2 0x0671
00000669: JUMPI
0000066a: PUSH2 0x0671
0000066d: PUSH2 0x1901
00000670: JUMP
00000671: JUMPDEST
00000672: SWAP1
00000673: POP
00000674: PUSH1 0x80
00000676: MUL
00000677: ADD
00000678: PUSH1 0x20
0000067a: ADD
0000067b: PUSH1 0x20
0000067d: DUP2
0000067e: ADD
0000067f: SWAP1
00000680: PUSH2 0x0689
00000683: SWAP2
00000684: SWAP1
00000685: PUSH2 0x17b8
00000688: JUMP
00000689: JUMPDEST
0000068a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000069f: AND
000006a0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000006b5: AND
000006b6: DUP2
000006b7: MSTORE
000006b8: PUSH1 0x20
000006ba: ADD
000006bb: SWAP1
000006bc: DUP2
000006bd: MSTORE
000006be: PUSH1 0x20
000006c0: ADD
000006c1: PUSH1 0x00
000006c3: KECCAK256
000006c4: PUSH2 0x10f4
000006c7: JUMP
000006c8: JUMPDEST
000006c9: POP
000006ca: POP
000006cb: DUP3
000006cc: DUP3
000006cd: DUP3
000006ce: DUP2
000006cf: DUP2
000006d0: LT
000006d1: PUSH2 0x06dc
000006d4: JUMPI
000006d5: PUSH2 0x06dc
000006d8: PUSH2 0x1901
000006db: JUMP
000006dc: JUMPDEST
000006dd: SWAP1
000006de: POP
000006df: PUSH1 0x80
000006e1: MUL
000006e2: ADD
000006e3: PUSH1 0x40
000006e5: ADD
000006e6: CALLDATALOAD
000006e7: PUSH1 0x04
000006e9: PUSH1 0x00
000006eb: DUP6
000006ec: DUP6
000006ed: DUP6
000006ee: DUP2
000006ef: DUP2
000006f0: LT
000006f1: PUSH2 0x06fc
000006f4: JUMPI
000006f5: PUSH2 0x06fc
000006f8: PUSH2 0x1901
000006fb: JUMP
000006fc: JUMPDEST
000006fd: SWAP1
000006fe: POP
000006ff: PUSH1 0x80
00000701: MUL
00000702: ADD
00000703: PUSH1 0x20
00000705: ADD
00000706: PUSH1 0x20
00000708: DUP2
00000709: ADD
0000070a: SWAP1
0000070b: PUSH2 0x0714
0000070e: SWAP2
0000070f: SWAP1
00000710: PUSH2 0x17b8
00000713: JUMP
00000714: JUMPDEST
00000715: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000072a: AND
0000072b: DUP2
0000072c: MSTORE
0000072d: PUSH1 0x20
0000072f: DUP2
00000730: ADD
00000731: SWAP2
00000732: SWAP1
00000733: SWAP2
00000734: MSTORE
00000735: PUSH1 0x40
00000737: ADD
00000738: PUSH1 0x00
0000073a: KECCAK256
0000073b: PUSH1 0x02
0000073d: ADD
0000073e: SSTORE
0000073f: DUP3
00000740: DUP3
00000741: DUP3
00000742: DUP2
00000743: DUP2
00000744: LT
00000745: PUSH2 0x0750
00000748: JUMPI
00000749: PUSH2 0x0750
0000074c: PUSH2 0x1901
0000074f: JUMP
00000750: JUMPDEST
00000751: SWAP1
00000752: POP
00000753: PUSH1 0x80
00000755: MUL
00000756: ADD
00000757: PUSH1 0x60
00000759: ADD
0000075a: CALLDATALOAD
0000075b: PUSH1 0x04
0000075d: PUSH1 0x00
0000075f: DUP6
00000760: DUP6
00000761: DUP6
00000762: DUP2
00000763: DUP2
00000764: LT
00000765: PUSH2 0x0770
00000768: JUMPI
00000769: PUSH2 0x0770
0000076c: PUSH2 0x1901
0000076f: JUMP
00000770: JUMPDEST
00000771: SWAP1
00000772: POP
00000773: PUSH1 0x80
00000775: MUL
00000776: ADD
00000777: PUSH1 0x20
00000779: ADD
0000077a: PUSH1 0x20
0000077c: DUP2
0000077d: ADD
0000077e: SWAP1
0000077f: PUSH2 0x0788
00000782: SWAP2
00000783: SWAP1
00000784: PUSH2 0x17b8
00000787: JUMP
00000788: JUMPDEST
00000789: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000079e: AND
0000079f: DUP2
000007a0: MSTORE
000007a1: PUSH1 0x20
000007a3: DUP2
000007a4: ADD
000007a5: SWAP2
000007a6: SWAP1
000007a7: SWAP2
000007a8: MSTORE
000007a9: PUSH1 0x40
000007ab: ADD
000007ac: PUSH1 0x00
000007ae: KECCAK256
000007af: PUSH1 0x01
000007b1: ADD
000007b2: SSTORE
000007b3: PUSH2 0x08bd
000007b6: JUMP
000007b7: JUMPDEST
000007b8: PUSH2 0x07d2
000007bb: PUSH1 0x00
000007bd: PUSH1 0x05
000007bf: PUSH1 0x00
000007c1: DUP7
000007c2: DUP7
000007c3: DUP7
000007c4: DUP2
000007c5: DUP2
000007c6: LT
000007c7: PUSH2 0x0671
000007ca: JUMPI
000007cb: PUSH2 0x0671
000007ce: PUSH2 0x1901
000007d1: JUMP
000007d2: JUMPDEST
000007d3: POP
000007d4: POP
000007d5: DUP3
000007d6: DUP3
000007d7: DUP3
000007d8: DUP2
000007d9: DUP2
000007da: LT
000007db: PUSH2 0x07e6
000007de: JUMPI
000007df: PUSH2 0x07e6
000007e2: PUSH2 0x1901
000007e5: JUMP
000007e6: JUMPDEST
000007e7: SWAP1
000007e8: POP
000007e9: PUSH1 0x80
000007eb: MUL
000007ec: ADD
000007ed: PUSH1 0x40
000007ef: ADD
000007f0: CALLDATALOAD
000007f1: PUSH1 0x05
000007f3: PUSH1 0x00
000007f5: DUP6
000007f6: DUP6
000007f7: DUP6
000007f8: DUP2
000007f9: DUP2
000007fa: LT
000007fb: PUSH2 0x0806
000007fe: JUMPI
000007ff: PUSH2 0x0806
00000802: PUSH2 0x1901
00000805: JUMP
00000806: JUMPDEST
00000807: SWAP1
00000808: POP
00000809: PUSH1 0x80
0000080b: MUL
0000080c: ADD
0000080d: PUSH1 0x20
0000080f: ADD
00000810: PUSH1 0x20
00000812: DUP2
00000813: ADD
00000814: SWAP1
00000815: PUSH2 0x081e
00000818: SWAP2
00000819: SWAP1
0000081a: PUSH2 0x17b8
0000081d: JUMP
0000081e: JUMPDEST
0000081f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000834: AND
00000835: DUP2
00000836: MSTORE
00000837: PUSH1 0x20
00000839: DUP2
0000083a: ADD
0000083b: SWAP2
0000083c: SWAP1
0000083d: SWAP2
0000083e: MSTORE
0000083f: PUSH1 0x40
00000841: ADD
00000842: PUSH1 0x00
00000844: KECCAK256
00000845: PUSH1 0x02
00000847: ADD
00000848: SSTORE
00000849: DUP3
0000084a: DUP3
0000084b: DUP3
0000084c: DUP2
0000084d: DUP2
0000084e: LT
0000084f: PUSH2 0x085a
00000852: JUMPI
00000853: PUSH2 0x085a
00000856: PUSH2 0x1901
00000859: JUMP
0000085a: JUMPDEST
0000085b: SWAP1
0000085c: POP
0000085d: PUSH1 0x80
0000085f: MUL
00000860: ADD
00000861: PUSH1 0x60
00000863: ADD
00000864: CALLDATALOAD
00000865: PUSH1 0x05
00000867: PUSH1 0x00
00000869: DUP6
0000086a: DUP6
0000086b: DUP6
0000086c: DUP2
0000086d: DUP2
0000086e: LT
0000086f: PUSH2 0x087a
00000872: JUMPI
00000873: PUSH2 0x087a
00000876: PUSH2 0x1901
00000879: JUMP
0000087a: JUMPDEST
0000087b: SWAP1
0000087c: POP
0000087d: PUSH1 0x80
0000087f: MUL
00000880: ADD
00000881: PUSH1 0x20
00000883: ADD
00000884: PUSH1 0x20
00000886: DUP2
00000887: ADD
00000888: SWAP1
00000889: PUSH2 0x0892
0000088c: SWAP2
0000088d: SWAP1
0000088e: PUSH2 0x17b8
00000891: JUMP
00000892: JUMPDEST
00000893: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000008a8: AND
000008a9: DUP2
000008aa: MSTORE
000008ab: PUSH1 0x20
000008ad: DUP2
000008ae: ADD
000008af: SWAP2
000008b0: SWAP1
000008b1: SWAP2
000008b2: MSTORE
000008b3: PUSH1 0x40
000008b5: ADD
000008b6: PUSH1 0x00
000008b8: KECCAK256
000008b9: PUSH1 0x01
000008bb: ADD
000008bc: SSTORE
000008bd: JUMPDEST
000008be: DUP1
000008bf: PUSH2 0x08c7
000008c2: DUP2
000008c3: PUSH2 0x1960
000008c6: JUMP
000008c7: JUMPDEST
000008c8: SWAP2
000008c9: POP
000008ca: POP
000008cb: PUSH2 0x0621
000008ce: JUMP
000008cf: JUMPDEST
000008d0: POP
000008d1: PUSH32 0x19863caed14ed012a54f927e56250018b7ac3c04fd197e0edf23369f75a6ccd4
000008f2: DUP3
000008f3: DUP3
000008f4: PUSH1 0x40
000008f6: MLOAD
000008f7: PUSH2 0x0901
000008fa: SWAP3
000008fb: SWAP2
000008fc: SWAP1
000008fd: PUSH2 0x1998
00000900: JUMP
00000901: JUMPDEST
00000902: PUSH1 0x40
00000904: MLOAD
00000905: DUP1
00000906: SWAP2
00000907: SUB
00000908: SWAP1
00000909: LOG1
0000090a: POP
0000090b: POP
0000090c: JUMP
0000090d: JUMPDEST
0000090e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000923: DUP2
00000924: AND
00000925: PUSH1 0x00
00000927: SWAP1
00000928: DUP2
00000929: MSTORE
0000092a: PUSH1 0x04
0000092c: PUSH1 0x20
0000092e: MSTORE
0000092f: PUSH1 0x40
00000931: DUP2
00000932: KECCAK256
00000933: PUSH2 0x093b
00000936: SWAP1
00000937: PUSH2 0x129e
0000093a: JUMP
0000093b: JUMPDEST
0000093c: SWAP3
0000093d: SWAP2
0000093e: POP
0000093f: POP
00000940: JUMP
00000941: JUMPDEST
00000942: PUSH2 0x0949
00000945: PUSH2 0x121d
00000948: JUMP
00000949: JUMPDEST
0000094a: PUSH2 0x0954
0000094d: DUP4
0000094e: DUP4
0000094f: DUP4
00000950: PUSH2 0x1305
00000953: JUMP
00000954: JUMPDEST
00000955: POP
00000956: POP
00000957: POP
00000958: JUMP
00000959: JUMPDEST
0000095a: PUSH2 0x0961
0000095d: PUSH2 0x121d
00000960: JUMP
00000961: JUMPDEST
00000962: PUSH2 0x096b
00000965: PUSH1 0x00
00000967: PUSH2 0x13f5
0000096a: JUMP
0000096b: JUMPDEST
0000096c: JUMP
0000096d: JUMPDEST
0000096e: PUSH2 0x0998
00000971: PUSH1 0x40
00000973: MLOAD
00000974: DUP1
00000975: PUSH1 0x80
00000977: ADD
00000978: PUSH1 0x40
0000097a: MSTORE
0000097b: DUP1
0000097c: PUSH1 0x00
0000097e: DUP2
0000097f: MSTORE
00000980: PUSH1 0x20
00000982: ADD
00000983: PUSH1 0x00
00000985: DUP2
00000986: MSTORE
00000987: PUSH1 0x20
00000989: ADD
0000098a: PUSH1 0x00
0000098c: DUP2
0000098d: MSTORE
0000098e: PUSH1 0x20
00000990: ADD
00000991: PUSH1 0x00
00000993: DUP2
00000994: MSTORE
00000995: POP
00000996: SWAP1
00000997: JUMP
00000998: JUMPDEST
00000999: POP
0000099a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000009af: AND
000009b0: PUSH1 0x00
000009b2: SWAP1
000009b3: DUP2
000009b4: MSTORE
000009b5: PUSH1 0x04
000009b7: PUSH1 0x20
000009b9: SWAP1
000009ba: DUP2
000009bb: MSTORE
000009bc: PUSH1 0x40
000009be: SWAP2
000009bf: DUP3
000009c0: SWAP1
000009c1: KECCAK256
000009c2: DUP3
000009c3: MLOAD
000009c4: PUSH1 0x80
000009c6: DUP2
000009c7: ADD
000009c8: DUP5
000009c9: MSTORE
000009ca: DUP2
000009cb: SLOAD
000009cc: DUP2
000009cd: MSTORE
000009ce: PUSH1 0x01
000009d0: DUP3
000009d1: ADD
000009d2: SLOAD
000009d3: SWAP3
000009d4: DUP2
000009d5: ADD
000009d6: SWAP3
000009d7: SWAP1
000009d8: SWAP3
000009d9: MSTORE
000009da: PUSH1 0x02
000009dc: DUP2
000009dd: ADD
000009de: SLOAD
000009df: SWAP3
000009e0: DUP3
000009e1: ADD
000009e2: SWAP3
000009e3: SWAP1
000009e4: SWAP3
000009e5: MSTORE
000009e6: PUSH1 0x03
000009e8: SWAP1
000009e9: SWAP2
000009ea: ADD
000009eb: SLOAD
000009ec: PUSH1 0x60
000009ee: DUP3
000009ef: ADD
000009f0: MSTORE
000009f1: SWAP1
000009f2: JUMP
000009f3: JUMPDEST
000009f4: PUSH1 0x01
000009f6: SLOAD
000009f7: CALLER
000009f8: SWAP1
000009f9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000a0e: AND
00000a0f: DUP2
00000a10: EQ
00000a11: PUSH2 0x0aa1
00000a14: JUMPI
00000a15: PUSH1 0x40
00000a17: MLOAD
00000a18: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00000a39: DUP2
00000a3a: MSTORE
00000a3b: PUSH1 0x20
00000a3d: PUSH1 0x04
00000a3f: DUP3
00000a40: ADD
00000a41: MSTORE
00000a42: PUSH1 0x29
00000a44: PUSH1 0x24
00000a46: DUP3
00000a47: ADD
00000a48: MSTORE
00000a49: PUSH32 0x4f776e61626c6532537465703a2063616c6c6572206973206e6f742074686520
00000a6a: PUSH1 0x44
00000a6c: DUP3
00000a6d: ADD
00000a6e: MSTORE
00000a6f: PUSH32 0x6e6577206f776e65720000000000000000000000000000000000000000000000
00000a90: PUSH1 0x64
00000a92: DUP3
00000a93: ADD
00000a94: MSTORE
00000a95: PUSH1 0x84
00000a97: ADD
00000a98: JUMPDEST
00000a99: PUSH1 0x40
00000a9b: MLOAD
00000a9c: DUP1
00000a9d: SWAP2
00000a9e: SUB
00000a9f: SWAP1
00000aa0: REVERT
00000aa1: JUMPDEST
00000aa2: PUSH2 0x0aaa
00000aa5: DUP2
00000aa6: PUSH2 0x13f5
00000aa9: JUMP
00000aaa: JUMPDEST
00000aab: POP
00000aac: JUMP
00000aad: JUMPDEST
00000aae: PUSH1 0x40
00000ab0: MLOAD
00000ab1: PUSH32 0x89c1cf9a00000000000000000000000000000000000000000000000000000000
00000ad2: DUP2
00000ad3: MSTORE
00000ad4: PUSH1 0x04
00000ad6: DUP2
00000ad7: ADD
00000ad8: DUP3
00000ad9: SWAP1
00000ada: MSTORE
00000adb: PUSH1 0x00
00000add: SWAP1
00000ade: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000af3: DUP5
00000af4: AND
00000af5: SWAP1
00000af6: PUSH4 0x89c1cf9a
00000afb: SWAP1
00000afc: PUSH1 0x24
00000afe: ADD
00000aff: PUSH1 0x20
00000b01: PUSH1 0x40
00000b03: MLOAD
00000b04: DUP1
00000b05: DUP4
00000b06: SUB
00000b07: DUP2
00000b08: DUP7
00000b09: GAS
00000b0a: STATICCALL
00000b0b: ISZERO
00000b0c: DUP1
00000b0d: ISZERO
00000b0e: PUSH2 0x0b1b
00000b11: JUMPI
00000b12: RETURNDATASIZE
00000b13: PUSH1 0x00
00000b15: DUP1
00000b16: RETURNDATACOPY
00000b17: RETURNDATASIZE
00000b18: PUSH1 0x00
00000b1a: REVERT
00000b1b: JUMPDEST
00000b1c: POP
00000b1d: POP
00000b1e: POP
00000b1f: POP
00000b20: PUSH1 0x40
00000b22: MLOAD
00000b23: RETURNDATASIZE
00000b24: PUSH1 0x1f
00000b26: NOT
00000b27: PUSH1 0x1f
00000b29: DUP3
00000b2a: ADD
00000b2b: AND
00000b2c: DUP3
00000b2d: ADD
00000b2e: DUP1
00000b2f: PUSH1 0x40
00000b31: MSTORE
00000b32: POP
00000b33: DUP2
00000b34: ADD
00000b35: SWAP1
00000b36: PUSH2 0x0b3f
00000b39: SWAP2
00000b3a: SWAP1
00000b3b: PUSH2 0x1a1b
00000b3e: JUMP
00000b3f: JUMPDEST
00000b40: SWAP4
00000b41: SWAP3
00000b42: POP
00000b43: POP
00000b44: POP
00000b45: JUMP
00000b46: JUMPDEST
00000b47: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000b5c: DUP2
00000b5d: AND
00000b5e: PUSH1 0x00
00000b60: SWAP1
00000b61: DUP2
00000b62: MSTORE
00000b63: PUSH1 0x05
00000b65: PUSH1 0x20
00000b67: MSTORE
00000b68: PUSH1 0x40
00000b6a: DUP2
00000b6b: KECCAK256
00000b6c: PUSH2 0x093b
00000b6f: SWAP1
00000b70: PUSH2 0x129e
00000b73: JUMP
00000b74: JUMPDEST
00000b75: DUP3
00000b76: PUSH1 0x00
00000b78: SUB
00000b79: PUSH2 0x0bae
00000b7c: JUMPI
00000b7d: PUSH1 0x40
00000b7f: MLOAD
00000b80: PUSH32 0x1f2a200500000000000000000000000000000000000000000000000000000000
00000ba1: DUP2
00000ba2: MSTORE
00000ba3: PUSH1 0x04
00000ba5: ADD
00000ba6: PUSH1 0x40
00000ba8: MLOAD
00000ba9: DUP1
00000baa: SWAP2
00000bab: SUB
00000bac: SWAP1
00000bad: REVERT
00000bae: JUMPDEST
00000baf: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000bc4: DUP2
00000bc5: AND
00000bc6: PUSH1 0x00
00000bc8: SWAP1
00000bc9: DUP2
00000bca: MSTORE
00000bcb: PUSH1 0x04
00000bcd: PUSH1 0x20
00000bcf: MSTORE
00000bd0: PUSH1 0x40
00000bd2: DUP2
00000bd3: KECCAK256
00000bd4: PUSH1 0x02
00000bd6: ADD
00000bd7: SLOAD
00000bd8: SWAP1
00000bd9: SUB
00000bda: PUSH2 0x0c0f
00000bdd: JUMPI
00000bde: PUSH1 0x40
00000be0: MLOAD
00000be1: PUSH32 0xb1efb84a00000000000000000000000000000000000000000000000000000000
00000c02: DUP2
00000c03: MSTORE
00000c04: PUSH1 0x04
00000c06: ADD
00000c07: PUSH1 0x40
00000c09: MLOAD
00000c0a: DUP1
00000c0b: SWAP2
00000c0c: SUB
00000c0d: SWAP1
00000c0e: REVERT
00000c0f: JUMPDEST
00000c10: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000c25: DUP2
00000c26: AND
00000c27: PUSH1 0x00
00000c29: SWAP1
00000c2a: DUP2
00000c2b: MSTORE
00000c2c: PUSH1 0x04
00000c2e: PUSH1 0x20
00000c30: MSTORE
00000c31: PUSH1 0x40
00000c33: SWAP1
00000c34: KECCAK256
00000c35: PUSH2 0x0c3f
00000c38: SWAP1
00000c39: DUP5
00000c3a: SWAP1
00000c3b: PUSH2 0x1426
00000c3e: JUMP
00000c3f: JUMPDEST
00000c40: PUSH2 0x0c81
00000c43: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000c58: PUSH32 0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
00000c79: AND
00000c7a: CALLER
00000c7b: ADDRESS
00000c7c: DUP7
00000c7d: PUSH2 0x1483
00000c80: JUMP
00000c81: JUMPDEST
00000c82: DUP1
00000c83: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000c98: AND
00000c99: PUSH4 0x1cbdf12b
00000c9e: CALLVALUE
00000c9f: DUP5
00000ca0: DUP8
00000ca1: DUP8
00000ca2: PUSH1 0x40
00000ca4: MLOAD
00000ca5: PUSH1 0x20
00000ca7: ADD
00000ca8: PUSH2 0x0cd3
00000cab: SWAP3
00000cac: SWAP2
00000cad: SWAP1
00000cae: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000cc3: SWAP3
00000cc4: SWAP1
00000cc5: SWAP3
00000cc6: AND
00000cc7: DUP3
00000cc8: MSTORE
00000cc9: PUSH1 0x20
00000ccb: DUP3
00000ccc: ADD
00000ccd: MSTORE
00000cce: PUSH1 0x40
00000cd0: ADD
00000cd1: SWAP1
00000cd2: JUMP
00000cd3: JUMPDEST
00000cd4: PUSH1 0x40
00000cd6: MLOAD
00000cd7: PUSH1 0x20
00000cd9: DUP2
00000cda: DUP4
00000cdb: SUB
00000cdc: SUB
00000cdd: DUP2
00000cde: MSTORE
00000cdf: SWAP1
00000ce0: PUSH1 0x40
00000ce2: MSTORE
00000ce3: PUSH1 0x40
00000ce5: MLOAD
00000ce6: DUP5
00000ce7: PUSH4 0xffffffff
00000cec: AND
00000ced: PUSH1 0xe0
00000cef: SHL
00000cf0: DUP2
00000cf1: MSTORE
00000cf2: PUSH1 0x04
00000cf4: ADD
00000cf5: PUSH2 0x0cff
00000cf8: SWAP3
00000cf9: SWAP2
00000cfa: SWAP1
00000cfb: PUSH2 0x1a34
00000cfe: JUMP
00000cff: JUMPDEST
00000d00: PUSH1 0x00
00000d02: PUSH1 0x40
00000d04: MLOAD
00000d05: DUP1
00000d06: DUP4
00000d07: SUB
00000d08: DUP2
00000d09: DUP6
00000d0a: DUP9
00000d0b: DUP1
00000d0c: EXTCODESIZE
00000d0d: ISZERO
00000d0e: DUP1
00000d0f: ISZERO
00000d10: PUSH2 0x0d18
00000d13: JUMPI
00000d14: PUSH1 0x00
00000d16: DUP1
00000d17: REVERT
00000d18: JUMPDEST
00000d19: POP
00000d1a: GAS
00000d1b: CALL
00000d1c: ISZERO
00000d1d: DUP1
00000d1e: ISZERO
00000d1f: PUSH2 0x0d2c
00000d22: JUMPI
00000d23: RETURNDATASIZE
00000d24: PUSH1 0x00
00000d26: DUP1
00000d27: RETURNDATACOPY
00000d28: RETURNDATASIZE
00000d29: PUSH1 0x00
00000d2b: REVERT
00000d2c: JUMPDEST
00000d2d: POP
00000d2e: POP
00000d2f: PUSH1 0x40
00000d31: DUP1
00000d32: MLOAD
00000d33: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000d48: DUP1
00000d49: DUP8
00000d4a: AND
00000d4b: DUP3
00000d4c: MSTORE
00000d4d: CALLER
00000d4e: PUSH1 0x20
00000d50: DUP4
00000d51: ADD
00000d52: MSTORE
00000d53: DUP10
00000d54: AND
00000d55: SWAP2
00000d56: DUP2
00000d57: ADD
00000d58: SWAP2
00000d59: SWAP1
00000d5a: SWAP2
00000d5b: MSTORE
00000d5c: PUSH1 0x60
00000d5e: DUP2
00000d5f: ADD
00000d60: DUP8
00000d61: SWAP1
00000d62: MSTORE
00000d63: PUSH32 0x9474e087d8a0e83962ac44e292b4aba027426203ea66adfb1dd9f65795ff599a
00000d84: SWAP4
00000d85: POP
00000d86: PUSH1 0x80
00000d88: ADD
00000d89: SWAP2
00000d8a: POP
00000d8b: PUSH2 0x0d91
00000d8e: SWAP1
00000d8f: POP
00000d90: JUMP
00000d91: JUMPDEST
00000d92: PUSH1 0x40
00000d94: MLOAD
00000d95: DUP1
00000d96: SWAP2
00000d97: SUB
00000d98: SWAP1
00000d99: LOG1
00000d9a: POP
00000d9b: POP
00000d9c: POP
00000d9d: POP
00000d9e: JUMP
00000d9f: JUMPDEST
00000da0: PUSH2 0x0dca
00000da3: PUSH1 0x40
00000da5: MLOAD
00000da6: DUP1
00000da7: PUSH1 0x80
00000da9: ADD
00000daa: PUSH1 0x40
00000dac: MSTORE
00000dad: DUP1
00000dae: PUSH1 0x00
00000db0: DUP2
00000db1: MSTORE
00000db2: PUSH1 0x20
00000db4: ADD
00000db5: PUSH1 0x00
00000db7: DUP2
00000db8: MSTORE
00000db9: PUSH1 0x20
00000dbb: ADD
00000dbc: PUSH1 0x00
00000dbe: DUP2
00000dbf: MSTORE
00000dc0: PUSH1 0x20
00000dc2: ADD
00000dc3: PUSH1 0x00
00000dc5: DUP2
00000dc6: MSTORE
00000dc7: POP
00000dc8: SWAP1
00000dc9: JUMP
00000dca: JUMPDEST
00000dcb: POP
00000dcc: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000de1: AND
00000de2: PUSH1 0x00
00000de4: SWAP1
00000de5: DUP2
00000de6: MSTORE
00000de7: PUSH1 0x05
00000de9: PUSH1 0x20
00000deb: SWAP1
00000dec: DUP2
00000ded: MSTORE
00000dee: PUSH1 0x40
00000df0: SWAP2
00000df1: DUP3
00000df2: SWAP1
00000df3: KECCAK256
00000df4: DUP3
00000df5: MLOAD
00000df6: PUSH1 0x80
00000df8: DUP2
00000df9: ADD
00000dfa: DUP5
00000dfb: MSTORE
00000dfc: DUP2
00000dfd: SLOAD
00000dfe: DUP2
00000dff: MSTORE
00000e00: PUSH1 0x01
00000e02: DUP3
00000e03: ADD
00000e04: SLOAD
00000e05: SWAP3
00000e06: DUP2
00000e07: ADD
00000e08: SWAP3
00000e09: SWAP1
00000e0a: SWAP3
00000e0b: MSTORE
00000e0c: PUSH1 0x02
00000e0e: DUP2
00000e0f: ADD
00000e10: SLOAD
00000e11: SWAP3
00000e12: DUP3
00000e13: ADD
00000e14: SWAP3
00000e15: SWAP1
00000e16: SWAP3
00000e17: MSTORE
00000e18: PUSH1 0x03
00000e1a: SWAP1
00000e1b: SWAP2
00000e1c: ADD
00000e1d: SLOAD
00000e1e: PUSH1 0x60
00000e20: DUP3
00000e21: ADD
00000e22: MSTORE
00000e23: SWAP1
00000e24: JUMP
00000e25: JUMPDEST
00000e26: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000e3b: DUP2
00000e3c: AND
00000e3d: PUSH1 0x00
00000e3f: SWAP1
00000e40: DUP2
00000e41: MSTORE
00000e42: PUSH1 0x05
00000e44: PUSH1 0x20
00000e46: MSTORE
00000e47: PUSH1 0x40
00000e49: DUP2
00000e4a: KECCAK256
00000e4b: PUSH1 0x02
00000e4d: ADD
00000e4e: SLOAD
00000e4f: SWAP1
00000e50: SUB
00000e51: PUSH2 0x0e86
00000e54: JUMPI
00000e55: PUSH1 0x40
00000e57: MLOAD
00000e58: PUSH32 0xb1efb84a00000000000000000000000000000000000000000000000000000000
00000e79: DUP2
00000e7a: MSTORE
00000e7b: PUSH1 0x04
00000e7d: ADD
00000e7e: PUSH1 0x40
00000e80: MLOAD
00000e81: DUP1
00000e82: SWAP2
00000e83: SUB
00000e84: SWAP1
00000e85: REVERT
00000e86: JUMPDEST
00000e87: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000e9c: DUP1
00000e9d: DUP3
00000e9e: AND
00000e9f: PUSH1 0x00
00000ea1: DUP2
00000ea2: DUP2
00000ea3: MSTORE
00000ea4: PUSH1 0x02
00000ea6: PUSH1 0x20
00000ea8: SWAP1
00000ea9: DUP2
00000eaa: MSTORE
00000eab: PUSH1 0x40
00000ead: DUP1
00000eae: DUP4
00000eaf: KECCAK256
00000eb0: SWAP5
00000eb1: DUP8
00000eb2: AND
00000eb3: DUP4
00000eb4: MSTORE
00000eb5: SWAP4
00000eb6: DUP2
00000eb7: MSTORE
00000eb8: DUP4
00000eb9: DUP3
00000eba: KECCAK256
00000ebb: SLOAD
00000ebc: SWAP3
00000ebd: DUP3
00000ebe: MSTORE
00000ebf: PUSH1 0x05
00000ec1: SWAP1
00000ec2: MSTORE
00000ec3: SWAP2
00000ec4: DUP3
00000ec5: KECCAK256
00000ec6: SWAP1
00000ec7: SWAP2
00000ec8: SWAP1
00000ec9: DUP2
00000eca: SWAP1
00000ecb: PUSH2 0x0ed5
00000ece: SWAP1
00000ecf: DUP5
00000ed0: SWAP1
00000ed1: PUSH2 0x10f4
00000ed4: JUMP
00000ed5: JUMPDEST
00000ed6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000eeb: DUP1
00000eec: DUP8
00000eed: AND
00000eee: PUSH1 0x00
00000ef0: DUP2
00000ef1: DUP2
00000ef2: MSTORE
00000ef3: PUSH1 0x02
00000ef5: PUSH1 0x20
00000ef7: SWAP1
00000ef8: DUP2
00000ef9: MSTORE
00000efa: PUSH1 0x40
00000efc: DUP1
00000efd: DUP4
00000efe: KECCAK256
00000eff: SWAP5
00000f00: DUP13
00000f01: AND
00000f02: DUP4
00000f03: MSTORE
00000f04: SWAP4
00000f05: DUP2
00000f06: MSTORE
00000f07: DUP4
00000f08: DUP3
00000f09: KECCAK256
00000f0a: DUP6
00000f0b: SWAP1
00000f0c: SSTORE
00000f0d: SWAP2
00000f0e: DUP2
00000f0f: MSTORE
00000f10: PUSH1 0x03
00000f12: SWAP1
00000f13: SWAP2
00000f14: MSTORE
00000f15: SWAP1
00000f16: DUP2
00000f17: KECCAK256
00000f18: DUP1
00000f19: SLOAD
00000f1a: SWAP4
00000f1b: SWAP6
00000f1c: POP
00000f1d: SWAP2
00000f1e: SWAP4
00000f1f: POP
00000f20: DUP5
00000f21: SWAP3
00000f22: PUSH2 0x0f2c
00000f25: SWAP1
00000f26: DUP5
00000f27: SWAP1
00000f28: PUSH2 0x1aaf
00000f2b: JUMP
00000f2c: JUMPDEST
00000f2d: SWAP1
00000f2e: SWAP2
00000f2f: SSTORE
00000f30: POP
00000f31: PUSH2 0x0f73
00000f34: SWAP1
00000f35: POP
00000f36: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000f4b: PUSH32 0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
00000f6c: AND
00000f6d: DUP7
00000f6e: DUP5
00000f6f: PUSH2 0x1148
00000f72: JUMP
00000f73: JUMPDEST
00000f74: PUSH1 0x40
00000f76: DUP1
00000f77: MLOAD
00000f78: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000f8d: DUP1
00000f8e: DUP8
00000f8f: AND
00000f90: DUP3
00000f91: MSTORE
00000f92: DUP8
00000f93: AND
00000f94: PUSH1 0x20
00000f96: DUP3
00000f97: ADD
00000f98: MSTORE
00000f99: SWAP1
00000f9a: DUP2
00000f9b: ADD
00000f9c: DUP4
00000f9d: SWAP1
00000f9e: MSTORE
00000f9f: PUSH1 0x60
00000fa1: DUP2
00000fa2: ADD
00000fa3: DUP3
00000fa4: SWAP1
00000fa5: MSTORE
00000fa6: PUSH32 0xc77b48bb4899bc689b5733d1b7b8bfc0f70e7660295ad5f94841902db16ddae2
00000fc7: SWAP1
00000fc8: PUSH1 0x80
00000fca: ADD
00000fcb: PUSH2 0x0607
00000fce: JUMP
00000fcf: JUMPDEST
00000fd0: PUSH2 0x0fd7
00000fd3: PUSH2 0x121d
00000fd6: JUMP
00000fd7: JUMPDEST
00000fd8: PUSH1 0x01
00000fda: DUP1
00000fdb: SLOAD
00000fdc: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000ff1: DUP4
00000ff2: AND
00000ff3: PUSH32 0xffffffffffffffffffffffff0000000000000000000000000000000000000000
00001014: SWAP1
00001015: SWAP2
00001016: AND
00001017: DUP2
00001018: OR
00001019: SWAP1
0000101a: SWAP2
0000101b: SSTORE
0000101c: PUSH2 0x103a
0000101f: PUSH1 0x00
00001021: SLOAD
00001022: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001037: AND
00001038: SWAP1
00001039: JUMP
0000103a: JUMPDEST
0000103b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001050: AND
00001051: PUSH32 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700
00001072: PUSH1 0x40
00001074: MLOAD
00001075: PUSH1 0x40
00001077: MLOAD
00001078: DUP1
00001079: SWAP2
0000107a: SUB
0000107b: SWAP1
0000107c: LOG3
0000107d: POP
0000107e: JUMP
0000107f: JUMPDEST
00001080: PUSH1 0x00
00001082: DUP1
00001083: SLOAD
00001084: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001099: DUP4
0000109a: DUP2
0000109b: AND
0000109c: PUSH32 0xffffffffffffffffffffffff0000000000000000000000000000000000000000
000010bd: DUP4
000010be: AND
000010bf: DUP2
000010c0: OR
000010c1: DUP5
000010c2: SSTORE
000010c3: PUSH1 0x40
000010c5: MLOAD
000010c6: SWAP2
000010c7: SWAP1
000010c8: SWAP3
000010c9: AND
000010ca: SWAP3
000010cb: DUP4
000010cc: SWAP2
000010cd: PUSH32 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0
000010ee: SWAP2
000010ef: SWAP1
000010f0: LOG3
000010f1: POP
000010f2: POP
000010f3: JUMP
000010f4: JUMPDEST
000010f5: PUSH1 0x00
000010f7: DUP1
000010f8: PUSH1 0x00
000010fa: PUSH2 0x1102
000010fd: DUP5
000010fe: PUSH2 0x129e
00001101: JUMP
00001102: JUMPDEST
00001103: TIMESTAMP
00001104: DUP6
00001105: SSTORE
00001106: SWAP1
00001107: POP
00001108: DUP5
00001109: DUP2
0000110a: LT
0000110b: PUSH2 0x1129
0000110e: JUMPI
0000110f: PUSH2 0x1118
00001112: DUP6
00001113: DUP3
00001114: PUSH2 0x1aaf
00001117: JUMP
00001118: JUMPDEST
00001119: PUSH1 0x03
0000111b: DUP6
0000111c: ADD
0000111d: SSTORE
0000111e: DUP5
0000111f: SWAP3
00001120: POP
00001121: PUSH1 0x00
00001123: SWAP2
00001124: POP
00001125: PUSH2 0x1140
00001128: JUMP
00001129: JUMPDEST
0000112a: PUSH1 0x00
0000112c: PUSH1 0x03
0000112e: DUP6
0000112f: ADD
00001130: SSTORE
00001131: SWAP2
00001132: POP
00001133: DUP2
00001134: PUSH2 0x113d
00001137: DUP2
00001138: DUP7
00001139: PUSH2 0x1aaf
0000113c: JUMP
0000113d: JUMPDEST
0000113e: SWAP2
0000113f: POP
00001140: JUMPDEST
00001141: POP
00001142: SWAP3
00001143: POP
00001144: SWAP3
00001145: SWAP1
00001146: POP
00001147: JUMP
00001148: JUMPDEST
00001149: PUSH1 0x00
0000114b: PUSH1 0x40
0000114d: MLOAD
0000114e: PUSH32 0xa9059cbb00000000000000000000000000000000000000000000000000000000
0000116f: DUP2
00001170: MSTORE
00001171: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001186: DUP5
00001187: AND
00001188: PUSH1 0x04
0000118a: DUP3
0000118b: ADD
0000118c: MSTORE
0000118d: DUP3
0000118e: PUSH1 0x24
00001190: DUP3
00001191: ADD
00001192: MSTORE
00001193: PUSH1 0x20
00001195: PUSH1 0x00
00001197: PUSH1 0x44
00001199: DUP4
0000119a: PUSH1 0x00
0000119c: DUP10
0000119d: GAS
0000119e: CALL
0000119f: RETURNDATASIZE
000011a0: ISZERO
000011a1: PUSH1 0x1f
000011a3: RETURNDATASIZE
000011a4: GT
000011a5: PUSH1 0x01
000011a7: PUSH1 0x00
000011a9: MLOAD
000011aa: EQ
000011ab: AND
000011ac: OR
000011ad: AND
000011ae: SWAP2
000011af: POP
000011b0: POP
000011b1: DUP1
000011b2: PUSH2 0x1217
000011b5: JUMPI
000011b6: PUSH1 0x40
000011b8: MLOAD
000011b9: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
000011da: DUP2
000011db: MSTORE
000011dc: PUSH1 0x20
000011de: PUSH1 0x04
000011e0: DUP3
000011e1: ADD
000011e2: MSTORE
000011e3: PUSH1 0x0f
000011e5: PUSH1 0x24
000011e7: DUP3
000011e8: ADD
000011e9: MSTORE
000011ea: PUSH32 0x5452414e534645525f4641494c45440000000000000000000000000000000000
0000120b: PUSH1 0x44
0000120d: DUP3
0000120e: ADD
0000120f: MSTORE
00001210: PUSH1 0x64
00001212: ADD
00001213: PUSH2 0x0a98
00001216: JUMP
00001217: JUMPDEST
00001218: POP
00001219: POP
0000121a: POP
0000121b: POP
0000121c: JUMP
0000121d: JUMPDEST
0000121e: PUSH1 0x00
00001220: SLOAD
00001221: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001236: AND
00001237: CALLER
00001238: EQ
00001239: PUSH2 0x096b
0000123c: JUMPI
0000123d: PUSH1 0x40
0000123f: MLOAD
00001240: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00001261: DUP2
00001262: MSTORE
00001263: PUSH1 0x20
00001265: PUSH1 0x04
00001267: DUP3
00001268: ADD
00001269: DUP2
0000126a: SWAP1
0000126b: MSTORE
0000126c: PUSH1 0x24
0000126e: DUP3
0000126f: ADD
00001270: MSTORE
00001271: PUSH32 0x4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572
00001292: PUSH1 0x44
00001294: DUP3
00001295: ADD
00001296: MSTORE
00001297: PUSH1 0x64
00001299: ADD
0000129a: PUSH2 0x0a98
0000129d: JUMP
0000129e: JUMPDEST
0000129f: DUP1
000012a0: SLOAD
000012a1: PUSH1 0x00
000012a3: SWAP1
000012a4: DUP2
000012a5: SWAP1
000012a6: PUSH2 0x12af
000012a9: SWAP1
000012aa: TIMESTAMP
000012ab: PUSH2 0x1aaf
000012ae: JUMP
000012af: JUMPDEST
000012b0: SWAP1
000012b1: POP
000012b2: PUSH1 0x00
000012b4: DUP4
000012b5: PUSH1 0x01
000012b7: ADD
000012b8: SLOAD
000012b9: DUP3
000012ba: PUSH2 0x12c3
000012bd: SWAP2
000012be: SWAP1
000012bf: PUSH2 0x1ac6
000012c2: JUMP
000012c3: JUMPDEST
000012c4: SWAP1
000012c5: POP
000012c6: DUP4
000012c7: PUSH1 0x02
000012c9: ADD
000012ca: SLOAD
000012cb: DUP5
000012cc: PUSH1 0x03
000012ce: ADD
000012cf: SLOAD
000012d0: DUP3
000012d1: PUSH2 0x12da
000012d4: SWAP2
000012d5: SWAP1
000012d6: PUSH2 0x18e9
000012d9: JUMP
000012da: JUMPDEST
000012db: GT
000012dc: ISZERO
000012dd: PUSH2 0x12ec
000012e0: JUMPI
000012e1: DUP4
000012e2: PUSH1 0x02
000012e4: ADD
000012e5: SLOAD
000012e6: SWAP3
000012e7: POP
000012e8: PUSH2 0x12fe
000012eb: JUMP
000012ec: JUMPDEST
000012ed: PUSH1 0x03
000012ef: DUP5
000012f0: ADD
000012f1: SLOAD
000012f2: PUSH2 0x12fb
000012f5: SWAP1
000012f6: DUP3
000012f7: PUSH2 0x18e9
000012fa: JUMP
000012fb: JUMPDEST
000012fc: SWAP3
000012fd: POP
000012fe: JUMPDEST
000012ff: POP
00001300: POP
00001301: SWAP2
00001302: SWAP1
00001303: POP
00001304: JUMP
00001305: JUMPDEST
00001306: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000131b: DUP3
0000131c: AND
0000131d: PUSH2 0x1352
00001320: JUMPI
00001321: PUSH1 0x40
00001323: MLOAD
00001324: PUSH32 0xd92e233d00000000000000000000000000000000000000000000000000000000
00001345: DUP2
00001346: MSTORE
00001347: PUSH1 0x04
00001349: ADD
0000134a: PUSH1 0x40
0000134c: MLOAD
0000134d: DUP1
0000134e: SWAP2
0000134f: SUB
00001350: SWAP1
00001351: REVERT
00001352: JUMPDEST
00001353: PUSH32 0xffffffffffffffffffffffff1111111111111111111111111111111111111112
00001374: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001389: DUP5
0000138a: AND
0000138b: ADD
0000138c: PUSH2 0x1399
0000138f: JUMPI
00001390: PUSH2 0x0954
00001393: DUP3
00001394: DUP3
00001395: PUSH2 0x1575
00001398: JUMP
00001399: JUMPDEST
0000139a: DUP3
0000139b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000013b0: AND
000013b1: EXTCODESIZE
000013b2: PUSH1 0x00
000013b4: SUB
000013b5: PUSH2 0x13ea
000013b8: JUMPI
000013b9: PUSH1 0x40
000013bb: MLOAD
000013bc: PUSH32 0x1eb00b0600000000000000000000000000000000000000000000000000000000
000013dd: DUP2
000013de: MSTORE
000013df: PUSH1 0x04
000013e1: ADD
000013e2: PUSH1 0x40
000013e4: MLOAD
000013e5: DUP1
000013e6: SWAP2
000013e7: SUB
000013e8: SWAP1
000013e9: REVERT
000013ea: JUMPDEST
000013eb: PUSH2 0x0954
000013ee: DUP4
000013ef: DUP4
000013f0: DUP4
000013f1: PUSH2 0x1148
000013f4: JUMP
000013f5: JUMPDEST
000013f6: PUSH1 0x01
000013f8: DUP1
000013f9: SLOAD
000013fa: PUSH32 0xffffffffffffffffffffffff0000000000000000000000000000000000000000
0000141b: AND
0000141c: SWAP1
0000141d: SSTORE
0000141e: PUSH2 0x0aaa
00001421: DUP2
00001422: PUSH2 0x107f
00001425: JUMP
00001426: JUMPDEST
00001427: PUSH1 0x00
00001429: PUSH2 0x1431
0000142c: DUP3
0000142d: PUSH2 0x129e
00001430: JUMP
00001431: JUMPDEST
00001432: SWAP1
00001433: POP
00001434: DUP3
00001435: DUP2
00001436: LT
00001437: PUSH2 0x1451
0000143a: JUMPI
0000143b: TIMESTAMP
0000143c: DUP3
0000143d: SSTORE
0000143e: PUSH2 0x1447
00001441: DUP4
00001442: DUP3
00001443: PUSH2 0x1aaf
00001446: JUMP
00001447: JUMPDEST
00001448: PUSH1 0x03
0000144a: DUP4
0000144b: ADD
0000144c: SSTORE
0000144d: POP
0000144e: POP
0000144f: POP
00001450: JUMP
00001451: JUMPDEST
00001452: PUSH1 0x40
00001454: MLOAD
00001455: PUSH32 0x47ebad2000000000000000000000000000000000000000000000000000000000
00001476: DUP2
00001477: MSTORE
00001478: PUSH1 0x04
0000147a: ADD
0000147b: PUSH1 0x40
0000147d: MLOAD
0000147e: DUP1
0000147f: SWAP2
00001480: SUB
00001481: SWAP1
00001482: REVERT
00001483: JUMPDEST
00001484: PUSH1 0x00
00001486: PUSH1 0x40
00001488: MLOAD
00001489: PUSH32 0x23b872dd00000000000000000000000000000000000000000000000000000000
000014aa: DUP2
000014ab: MSTORE
000014ac: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000014c1: DUP6
000014c2: AND
000014c3: PUSH1 0x04
000014c5: DUP3
000014c6: ADD
000014c7: MSTORE
000014c8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000014dd: DUP5
000014de: AND
000014df: PUSH1 0x24
000014e1: DUP3
000014e2: ADD
000014e3: MSTORE
000014e4: DUP3
000014e5: PUSH1 0x44
000014e7: DUP3
000014e8: ADD
000014e9: MSTORE
000014ea: PUSH1 0x20
000014ec: PUSH1 0x00
000014ee: PUSH1 0x64
000014f0: DUP4
000014f1: PUSH1 0x00
000014f3: DUP11
000014f4: GAS
000014f5: CALL
000014f6: RETURNDATASIZE
000014f7: ISZERO
000014f8: PUSH1 0x1f
000014fa: RETURNDATASIZE
000014fb: GT
000014fc: PUSH1 0x01
000014fe: PUSH1 0x00
00001500: MLOAD
00001501: EQ
00001502: AND
00001503: OR
00001504: AND
00001505: SWAP2
00001506: POP
00001507: POP
00001508: DUP1
00001509: PUSH2 0x156e
0000150c: JUMPI
0000150d: PUSH1 0x40
0000150f: MLOAD
00001510: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00001531: DUP2
00001532: MSTORE
00001533: PUSH1 0x20
00001535: PUSH1 0x04
00001537: DUP3
00001538: ADD
00001539: MSTORE
0000153a: PUSH1 0x14
0000153c: PUSH1 0x24
0000153e: DUP3
0000153f: ADD
00001540: MSTORE
00001541: PUSH32 0x5452414e534645525f46524f4d5f4641494c4544000000000000000000000000
00001562: PUSH1 0x44
00001564: DUP3
00001565: ADD
00001566: MSTORE
00001567: PUSH1 0x64
00001569: ADD
0000156a: PUSH2 0x0a98
0000156d: JUMP
0000156e: JUMPDEST
0000156f: POP
00001570: POP
00001571: POP
00001572: POP
00001573: POP
00001574: JUMP
00001575: JUMPDEST
00001576: PUSH1 0x00
00001578: DUP1
00001579: PUSH1 0x00
0000157b: DUP1
0000157c: PUSH1 0x00
0000157e: DUP6
0000157f: DUP8
00001580: GAS
00001581: CALL
00001582: SWAP1
00001583: POP
00001584: DUP1
00001585: PUSH2 0x0954
00001588: JUMPI
00001589: PUSH1 0x40
0000158b: MLOAD
0000158c: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
000015ad: DUP2
000015ae: MSTORE
000015af: PUSH1 0x20
000015b1: PUSH1 0x04
000015b3: DUP3
000015b4: ADD
000015b5: MSTORE
000015b6: PUSH1 0x13
000015b8: PUSH1 0x24
000015ba: DUP3
000015bb: ADD
000015bc: MSTORE
000015bd: PUSH32 0x4554485f5452414e534645525f4641494c454400000000000000000000000000
000015de: PUSH1 0x44
000015e0: DUP3
000015e1: ADD
000015e2: MSTORE
000015e3: PUSH1 0x64
000015e5: ADD
000015e6: PUSH2 0x0a98
000015e9: JUMP
000015ea: JUMPDEST
000015eb: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000
0000160c: PUSH1 0x00
0000160e: MSTORE
0000160f: PUSH1 0x41
00001611: PUSH1 0x04
00001613: MSTORE
00001614: PUSH1 0x24
00001616: PUSH1 0x00
00001618: REVERT
00001619: JUMPDEST
0000161a: PUSH1 0x00
0000161c: PUSH1 0x20
0000161e: DUP3
0000161f: DUP5
00001620: SUB
00001621: SLT
00001622: ISZERO
00001623: PUSH2 0x162b
00001626: JUMPI
00001627: PUSH1 0x00
00001629: DUP1
0000162a: REVERT
0000162b: JUMPDEST
0000162c: DUP2
0000162d: CALLDATALOAD
0000162e: PUSH8 0xffffffffffffffff
00001637: DUP1
00001638: DUP3
00001639: GT
0000163a: ISZERO
0000163b: PUSH2 0x1643
0000163e: JUMPI
0000163f: PUSH1 0x00
00001641: DUP1
00001642: REVERT
00001643: JUMPDEST
00001644: DUP2
00001645: DUP5
00001646: ADD
00001647: SWAP2
00001648: POP
00001649: DUP5
0000164a: PUSH1 0x1f
0000164c: DUP4
0000164d: ADD
0000164e: SLT
0000164f: PUSH2 0x1657
00001652: JUMPI
00001653: PUSH1 0x00
00001655: DUP1
00001656: REVERT
00001657: JUMPDEST
00001658: DUP2
00001659: CALLDATALOAD
0000165a: DUP2
0000165b: DUP2
0000165c: GT
0000165d: ISZERO
0000165e: PUSH2 0x1669
00001661: JUMPI
00001662: PUSH2 0x1669
00001665: PUSH2 0x15ea
00001668: JUMP
00001669: JUMPDEST
0000166a: PUSH1 0x40
0000166c: MLOAD
0000166d: PUSH1 0x1f
0000166f: DUP3
00001670: ADD
00001671: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0
00001692: SWAP1
00001693: DUP2
00001694: AND
00001695: PUSH1 0x3f
00001697: ADD
00001698: AND
00001699: DUP2
0000169a: ADD
0000169b: SWAP1
0000169c: DUP4
0000169d: DUP3
0000169e: GT
0000169f: DUP2
000016a0: DUP4
000016a1: LT
000016a2: OR
000016a3: ISZERO
000016a4: PUSH2 0x16af
000016a7: JUMPI
000016a8: PUSH2 0x16af
000016ab: PUSH2 0x15ea
000016ae: JUMP
000016af: JUMPDEST
000016b0: DUP2
000016b1: PUSH1 0x40
000016b3: MSTORE
000016b4: DUP3
000016b5: DUP2
000016b6: MSTORE
000016b7: DUP8
000016b8: PUSH1 0x20
000016ba: DUP5
000016bb: DUP8
000016bc: ADD
000016bd: ADD
000016be: GT
000016bf: ISZERO
000016c0: PUSH2 0x16c8
000016c3: JUMPI
000016c4: PUSH1 0x00
000016c6: DUP1
000016c7: REVERT
000016c8: JUMPDEST
000016c9: DUP3
000016ca: PUSH1 0x20
000016cc: DUP7
000016cd: ADD
000016ce: PUSH1 0x20
000016d0: DUP4
000016d1: ADD
000016d2: CALLDATACOPY
000016d3: PUSH1 0x00
000016d5: SWAP3
000016d6: DUP2
000016d7: ADD
000016d8: PUSH1 0x20
000016da: ADD
000016db: SWAP3
000016dc: SWAP1
000016dd: SWAP3
000016de: MSTORE
000016df: POP
000016e0: SWAP6
000016e1: SWAP5
000016e2: POP
000016e3: POP
000016e4: POP
000016e5: POP
000016e6: POP
000016e7: JUMP
000016e8: JUMPDEST
000016e9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000016fe: DUP2
000016ff: AND
00001700: DUP2
00001701: EQ
00001702: PUSH2 0x0aaa
00001705: JUMPI
00001706: PUSH1 0x00
00001708: DUP1
00001709: REVERT
0000170a: JUMPDEST
0000170b: PUSH1 0x00
0000170d: DUP1
0000170e: PUSH1 0x40
00001710: DUP4
00001711: DUP6
00001712: SUB
00001713: SLT
00001714: ISZERO
00001715: PUSH2 0x171d
00001718: JUMPI
00001719: PUSH1 0x00
0000171b: DUP1
0000171c: REVERT
0000171d: JUMPDEST
0000171e: DUP3
0000171f: CALLDATALOAD
00001720: PUSH2 0x1728
00001723: DUP2
00001724: PUSH2 0x16e8
00001727: JUMP
00001728: JUMPDEST
00001729: SWAP2
0000172a: POP
0000172b: PUSH1 0x20
0000172d: DUP4
0000172e: ADD
0000172f: CALLDATALOAD
00001730: PUSH2 0x1738
00001733: DUP2
00001734: PUSH2 0x16e8
00001737: JUMP
00001738: JUMPDEST
00001739: DUP1
0000173a: SWAP2
0000173b: POP
0000173c: POP
0000173d: SWAP3
0000173e: POP
0000173f: SWAP3
00001740: SWAP1
00001741: POP
00001742: JUMP
00001743: JUMPDEST
00001744: PUSH1 0x00
00001746: DUP1
00001747: PUSH1 0x20
00001749: DUP4
0000174a: DUP6
0000174b: SUB
0000174c: SLT
0000174d: ISZERO
0000174e: PUSH2 0x1756
00001751: JUMPI
00001752: PUSH1 0x00
00001754: DUP1
00001755: REVERT
00001756: JUMPDEST
00001757: DUP3
00001758: CALLDATALOAD
00001759: PUSH8 0xffffffffffffffff
00001762: DUP1
00001763: DUP3
00001764: GT
00001765: ISZERO
00001766: PUSH2 0x176e
00001769: JUMPI
0000176a: PUSH1 0x00
0000176c: DUP1
0000176d: REVERT
0000176e: JUMPDEST
0000176f: DUP2
00001770: DUP6
00001771: ADD
00001772: SWAP2
00001773: POP
00001774: DUP6
00001775: PUSH1 0x1f
00001777: DUP4
00001778: ADD
00001779: SLT
0000177a: PUSH2 0x1782
0000177d: JUMPI
0000177e: PUSH1 0x00
00001780: DUP1
00001781: REVERT
00001782: JUMPDEST
00001783: DUP2
00001784: CALLDATALOAD
00001785: DUP2
00001786: DUP2
00001787: GT
00001788: ISZERO
00001789: PUSH2 0x1791
0000178c: JUMPI
0000178d: PUSH1 0x00
0000178f: DUP1
00001790: REVERT
00001791: JUMPDEST
00001792: DUP7
00001793: PUSH1 0x20
00001795: DUP3
00001796: PUSH1 0x07
00001798: SHL
00001799: DUP6
0000179a: ADD
0000179b: ADD
0000179c: GT
0000179d: ISZERO
0000179e: PUSH2 0x17a6
000017a1: JUMPI
000017a2: PUSH1 0x00
000017a4: DUP1
000017a5: REVERT
000017a6: JUMPDEST
000017a7: PUSH1 0x20
000017a9: SWAP3
000017aa: SWAP1
000017ab: SWAP3
000017ac: ADD
000017ad: SWAP7
000017ae: SWAP2
000017af: SWAP6
000017b0: POP
000017b1: SWAP1
000017b2: SWAP4
000017b3: POP
000017b4: POP
000017b5: POP
000017b6: POP
000017b7: JUMP
000017b8: JUMPDEST
000017b9: PUSH1 0x00
000017bb: PUSH1 0x20
000017bd: DUP3
000017be: DUP5
000017bf: SUB
000017c0: SLT
000017c1: ISZERO
000017c2: PUSH2 0x17ca
000017c5: JUMPI
000017c6: PUSH1 0x00
000017c8: DUP1
000017c9: REVERT
000017ca: JUMPDEST
000017cb: DUP2
000017cc: CALLDATALOAD
000017cd: PUSH2 0x0b3f
000017d0: DUP2
000017d1: PUSH2 0x16e8
000017d4: JUMP
000017d5: JUMPDEST
000017d6: PUSH1 0x00
000017d8: DUP1
000017d9: PUSH1 0x00
000017db: PUSH1 0x60
000017dd: DUP5
000017de: DUP7
000017df: SUB
000017e0: SLT
000017e1: ISZERO
000017e2: PUSH2 0x17ea
000017e5: JUMPI
000017e6: PUSH1 0x00
000017e8: DUP1
000017e9: REVERT
000017ea: JUMPDEST
000017eb: DUP4
000017ec: CALLDATALOAD
000017ed: PUSH2 0x17f5
000017f0: DUP2
000017f1: PUSH2 0x16e8
000017f4: JUMP
000017f5: JUMPDEST
000017f6: SWAP3
000017f7: POP
000017f8: PUSH1 0x20
000017fa: DUP5
000017fb: ADD
000017fc: CALLDATALOAD
000017fd: PUSH2 0x1805
00001800: DUP2
00001801: PUSH2 0x16e8
00001804: JUMP
00001805: JUMPDEST
00001806: SWAP3
00001807: SWAP6
00001808: SWAP3
00001809: SWAP5
0000180a: POP
0000180b: POP
0000180c: POP
0000180d: PUSH1 0x40
0000180f: SWAP2
00001810: SWAP1
00001811: SWAP2
00001812: ADD
00001813: CALLDATALOAD
00001814: SWAP1
00001815: JUMP
00001816: JUMPDEST
00001817: PUSH1 0x00
00001819: DUP1
0000181a: PUSH1 0x40
0000181c: DUP4
0000181d: DUP6
0000181e: SUB
0000181f: SLT
00001820: ISZERO
00001821: PUSH2 0x1829
00001824: JUMPI
00001825: PUSH1 0x00
00001827: DUP1
00001828: REVERT
00001829: JUMPDEST
0000182a: DUP3
0000182b: CALLDATALOAD
0000182c: PUSH2 0x1834
0000182f: DUP2
00001830: PUSH2 0x16e8
00001833: JUMP
00001834: JUMPDEST
00001835: SWAP5
00001836: PUSH1 0x20
00001838: SWAP4
00001839: SWAP1
0000183a: SWAP4
0000183b: ADD
0000183c: CALLDATALOAD
0000183d: SWAP4
0000183e: POP
0000183f: POP
00001840: POP
00001841: JUMP
00001842: JUMPDEST
00001843: PUSH1 0x00
00001845: DUP1
00001846: PUSH1 0x00
00001848: DUP1
00001849: PUSH1 0x80
0000184b: DUP6
0000184c: DUP8
0000184d: SUB
0000184e: SLT
0000184f: ISZERO
00001850: PUSH2 0x1858
00001853: JUMPI
00001854: PUSH1 0x00
00001856: DUP1
00001857: REVERT
00001858: JUMPDEST
00001859: DUP5
0000185a: CALLDATALOAD
0000185b: PUSH2 0x1863
0000185e: DUP2
0000185f: PUSH2 0x16e8
00001862: JUMP
00001863: JUMPDEST
00001864: SWAP4
00001865: POP
00001866: PUSH1 0x20
00001868: DUP6
00001869: ADD
0000186a: CALLDATALOAD
0000186b: SWAP3
0000186c: POP
0000186d: PUSH1 0x40
0000186f: DUP6
00001870: ADD
00001871: CALLDATALOAD
00001872: SWAP2
00001873: POP
00001874: PUSH1 0x60
00001876: DUP6
00001877: ADD
00001878: CALLDATALOAD
00001879: PUSH2 0x1881
0000187c: DUP2
0000187d: PUSH2 0x16e8
00001880: JUMP
00001881: JUMPDEST
00001882: SWAP4
00001883: SWAP7
00001884: SWAP3
00001885: SWAP6
00001886: POP
00001887: SWAP1
00001888: SWAP4
00001889: POP
0000188a: POP
0000188b: JUMP
0000188c: JUMPDEST
0000188d: PUSH1 0x00
0000188f: DUP1
00001890: PUSH1 0x40
00001892: DUP4
00001893: DUP6
00001894: SUB
00001895: SLT
00001896: ISZERO
00001897: PUSH2 0x189f
0000189a: JUMPI
0000189b: PUSH1 0x00
0000189d: DUP1
0000189e: REVERT
0000189f: JUMPDEST
000018a0: DUP3
000018a1: MLOAD
000018a2: PUSH2 0x18aa
000018a5: DUP2
000018a6: PUSH2 0x16e8
000018a9: JUMP
000018aa: JUMPDEST
000018ab: PUSH1 0x20
000018ad: SWAP4
000018ae: SWAP1
000018af: SWAP4
000018b0: ADD
000018b1: MLOAD
000018b2: SWAP3
000018b3: SWAP5
000018b4: SWAP3
000018b5: SWAP4
000018b6: POP
000018b7: POP
000018b8: POP
000018b9: JUMP
000018ba: JUMPDEST
000018bb: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000
000018dc: PUSH1 0x00
000018de: MSTORE
000018df: PUSH1 0x11
000018e1: PUSH1 0x04
000018e3: MSTORE
000018e4: PUSH1 0x24
000018e6: PUSH1 0x00
000018e8: REVERT
000018e9: JUMPDEST
000018ea: PUSH1 0x00
000018ec: DUP3
000018ed: NOT
000018ee: DUP3
000018ef: GT
000018f0: ISZERO
000018f1: PUSH2 0x18fc
000018f4: JUMPI
000018f5: PUSH2 0x18fc
000018f8: PUSH2 0x18ba
000018fb: JUMP
000018fc: JUMPDEST
000018fd: POP
000018fe: ADD
000018ff: SWAP1
00001900: JUMP
00001901: JUMPDEST
00001902: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000
00001923: PUSH1 0x00
00001925: MSTORE
00001926: PUSH1 0x32
00001928: PUSH1 0x04
0000192a: MSTORE
0000192b: PUSH1 0x24
0000192d: PUSH1 0x00
0000192f: REVERT
00001930: JUMPDEST
00001931: DUP1
00001932: CALLDATALOAD
00001933: DUP1
00001934: ISZERO
00001935: ISZERO
00001936: DUP2
00001937: EQ
00001938: PUSH2 0x1940
0000193b: JUMPI
0000193c: PUSH1 0x00
0000193e: DUP1
0000193f: REVERT
00001940: JUMPDEST
00001941: SWAP2
00001942: SWAP1
00001943: POP
00001944: JUMP
00001945: JUMPDEST
00001946: PUSH1 0x00
00001948: PUSH1 0x20
0000194a: DUP3
0000194b: DUP5
0000194c: SUB
0000194d: SLT
0000194e: ISZERO
0000194f: PUSH2 0x1957
00001952: JUMPI
00001953: PUSH1 0x00
00001955: DUP1
00001956: REVERT
00001957: JUMPDEST
00001958: PUSH2 0x0b3f
0000195b: DUP3
0000195c: PUSH2 0x1930
0000195f: JUMP
00001960: JUMPDEST
00001961: PUSH1 0x00
00001963: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
00001984: DUP3
00001985: SUB
00001986: PUSH2 0x1991
00001989: JUMPI
0000198a: PUSH2 0x1991
0000198d: PUSH2 0x18ba
00001990: JUMP
00001991: JUMPDEST
00001992: POP
00001993: PUSH1 0x01
00001995: ADD
00001996: SWAP1
00001997: JUMP
00001998: JUMPDEST
00001999: PUSH1 0x20
0000199b: DUP1
0000199c: DUP3
0000199d: MSTORE
0000199e: DUP2
0000199f: DUP2
000019a0: ADD
000019a1: DUP4
000019a2: SWAP1
000019a3: MSTORE
000019a4: PUSH1 0x00
000019a6: SWAP1
000019a7: PUSH1 0x40
000019a9: DUP1
000019aa: DUP5
000019ab: ADD
000019ac: DUP7
000019ad: DUP5
000019ae: JUMPDEST
000019af: DUP8
000019b0: DUP2
000019b1: LT
000019b2: ISZERO
000019b3: PUSH2 0x1a0e
000019b6: JUMPI
000019b7: PUSH2 0x19bf
000019ba: DUP3
000019bb: PUSH2 0x1930
000019be: JUMP
000019bf: JUMPDEST
000019c0: ISZERO
000019c1: ISZERO
000019c2: DUP4
000019c3: MSTORE
000019c4: DUP5
000019c5: DUP3
000019c6: ADD
000019c7: CALLDATALOAD
000019c8: PUSH2 0x19d0
000019cb: DUP2
000019cc: PUSH2 0x16e8
000019cf: JUMP
000019d0: JUMPDEST
000019d1: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000019e6: AND
000019e7: DUP4
000019e8: DUP7
000019e9: ADD
000019ea: MSTORE
000019eb: DUP2
000019ec: DUP5
000019ed: ADD
000019ee: CALLDATALOAD
000019ef: DUP5
000019f0: DUP5
000019f1: ADD
000019f2: MSTORE
000019f3: PUSH1 0x60
000019f5: DUP1
000019f6: DUP4
000019f7: ADD
000019f8: CALLDATALOAD
000019f9: SWAP1
000019fa: DUP5
000019fb: ADD
000019fc: MSTORE
000019fd: PUSH1 0x80
000019ff: SWAP3
00001a00: DUP4
00001a01: ADD
00001a02: SWAP3
00001a03: SWAP1
00001a04: SWAP2
00001a05: ADD
00001a06: SWAP1
00001a07: PUSH1 0x01
00001a09: ADD
00001a0a: PUSH2 0x19ae
00001a0d: JUMP
00001a0e: JUMPDEST
00001a0f: POP
00001a10: SWAP1
00001a11: SWAP8
00001a12: SWAP7
00001a13: POP
00001a14: POP
00001a15: POP
00001a16: POP
00001a17: POP
00001a18: POP
00001a19: POP
00001a1a: JUMP
00001a1b: JUMPDEST
00001a1c: PUSH1 0x00
00001a1e: PUSH1 0x20
00001a20: DUP3
00001a21: DUP5
00001a22: SUB
00001a23: SLT
00001a24: ISZERO
00001a25: PUSH2 0x1a2d
00001a28: JUMPI
00001a29: PUSH1 0x00
00001a2b: DUP1
00001a2c: REVERT
00001a2d: JUMPDEST
00001a2e: POP
00001a2f: MLOAD
00001a30: SWAP2
00001a31: SWAP1
00001a32: POP
00001a33: JUMP
00001a34: JUMPDEST
00001a35: DUP3
00001a36: DUP2
00001a37: MSTORE
00001a38: PUSH1 0x00
00001a3a: PUSH1 0x20
00001a3c: PUSH1 0x40
00001a3e: DUP2
00001a3f: DUP5
00001a40: ADD
00001a41: MSTORE
00001a42: DUP4
00001a43: MLOAD
00001a44: DUP1
00001a45: PUSH1 0x40
00001a47: DUP6
00001a48: ADD
00001a49: MSTORE
00001a4a: PUSH1 0x00
00001a4c: JUMPDEST
00001a4d: DUP2
00001a4e: DUP2
00001a4f: LT
00001a50: ISZERO
00001a51: PUSH2 0x1a68
00001a54: JUMPI
00001a55: DUP6
00001a56: DUP2
00001a57: ADD
00001a58: DUP4
00001a59: ADD
00001a5a: MLOAD
00001a5b: DUP6
00001a5c: DUP3
00001a5d: ADD
00001a5e: PUSH1 0x60
00001a60: ADD
00001a61: MSTORE
00001a62: DUP3
00001a63: ADD
00001a64: PUSH2 0x1a4c
00001a67: JUMP
00001a68: JUMPDEST
00001a69: DUP2
00001a6a: DUP2
00001a6b: GT
00001a6c: ISZERO
00001a6d: PUSH2 0x1a7a
00001a70: JUMPI
00001a71: PUSH1 0x00
00001a73: PUSH1 0x60
00001a75: DUP4
00001a76: DUP8
00001a77: ADD
00001a78: ADD
00001a79: MSTORE
00001a7a: JUMPDEST
00001a7b: POP
00001a7c: PUSH1 0x1f
00001a7e: ADD
00001a7f: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0
00001aa0: AND
00001aa1: SWAP3
00001aa2: SWAP1
00001aa3: SWAP3
00001aa4: ADD
00001aa5: PUSH1 0x60
00001aa7: ADD
00001aa8: SWAP5
00001aa9: SWAP4
00001aaa: POP
00001aab: POP
00001aac: POP
00001aad: POP
00001aae: JUMP
00001aaf: JUMPDEST
00001ab0: PUSH1 0x00
00001ab2: DUP3
00001ab3: DUP3
00001ab4: LT
00001ab5: ISZERO
00001ab6: PUSH2 0x1ac1
00001ab9: JUMPI
00001aba: PUSH2 0x1ac1
00001abd: PUSH2 0x18ba
00001ac0: JUMP
00001ac1: JUMPDEST
00001ac2: POP
00001ac3: SUB
00001ac4: SWAP1
00001ac5: JUMP
00001ac6: JUMPDEST
00001ac7: PUSH1 0x00
00001ac9: DUP2
00001aca: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
00001aeb: DIV
00001aec: DUP4
00001aed: GT
00001aee: DUP3
00001aef: ISZERO
00001af0: ISZERO
00001af1: AND
00001af2: ISZERO
00001af3: PUSH2 0x1afe
00001af6: JUMPI
00001af7: PUSH2 0x1afe
00001afa: PUSH2 0x18ba
00001afd: JUMP
00001afe: JUMPDEST
00001aff: POP
00001b00: MUL
00001b01: SWAP1
00001b02: JUMP
00001b03: INVALID
00001b04: LOG2
00001b05: PUSH5 0x6970667358
00001b0b: UNKNOWN(0x22)
00001b0c: SLT
00001b0d: KECCAK256
00001b0e: UNKNOWN(0xB7)
00001b0f: KECCAK256
00001b10: CODECOPY
00001b11: UNKNOWN(0xDC)
00001b12: UNKNOWN(0xD3)
00001b13: UNKNOWN(0xAE)
00001b14: UNKNOWN(0xCA)
00001b15: UNKNOWN(0xD4)
00001b16: UNKNOWN(0x22)
00001b17: UNKNOWN(0xBF)
00001b18: UNKNOWN(0x4F)
00001b19: PUSH0
00001b1a: DUP14
00001b1b: PUSH3 0x6e8d46
00001b1f: LOG4
00001b20: UNKNOWN(0xD5)
00001b21: UNKNOWN(0xDC)
00001b22: PUSH24

Findings

validated = confirmed for call sinks; sink observed for others
Severity Category Tool Title Confidence Validated Confirmed Details
high access_control codex MintableToken allows unrestricted mint/burn, enabling collateral drain if used as the app-chain token 85 no
view
evidence_json
{
    "evidence": "MintableToken.mint() and MintableToken.burn() are external and lack any access control modifiers.",
    "locations": [
        "contracts/contracts/superbridge/MintableToken.sol:19",
        "contracts/contracts/superbridge/MintableToken.sol:23"
    ],
    "recommendation": "Restrict mint/burn to the Controller (or a dedicated minter role) and ensure MintableToken is never deployed in production. Prefer a mintable token with explicit access control and an allowlisted minter.",
    "exploit_scenario": "If the system is deployed using MintableToken as the bridge-minted asset, any attacker can call mint() to create arbitrary tokens, then call Controller.withdrawFromAppChain() to burn those tokens and unlock real assets from the Vault on the other chain, draining collateral without providing any locked backing."
}
medium math codex Deposit path assumes full transfer amount; fee-on-transfer tokens cause under-collateralized minting 75 no
view
evidence_json
{
    "evidence": "Vault.depositToAppChain() transfers amount_ and forwards amount_ in the outbound payload without checking the actual received amount; Controller.receiveInbound() trusts lockAmount from the payload for accounting and minting.",
    "locations": [
        "contracts/contracts/superbridge/Vault.sol:87",
        "contracts/contracts/superbridge/Vault.sol:100",
        "contracts/contracts/superbridge/Vault.sol:102",
        "contracts/contracts/superbridge/Controller.sol:175",
        "contracts/contracts/superbridge/Controller.sol:181"
    ],
    "recommendation": "Compute the actual received amount via balance-before/balance-after and send that amount in the payload. Alternatively, explicitly reject fee-on-transfer tokens and enforce that the Vault\u2019s balance increases by amount_.",
    "exploit_scenario": "With a fee-on-transfer or deflationary token, Vault.depositToAppChain() forwards the user-supplied amount_ in the payload even if the Vault receives fewer tokens. The Controller mints based on this reported lockAmount, allowing an attacker to mint more on the app chain than was actually locked and later redeem the full amount, extracting value from the Vault."
}
medium other detector Untrusted CALL target/value reachable 45 no no
view
trace_id: 0xbb2bf6361089f7d74f73d9620d5c8dcf52408ab436b54766f926b49ca0950ab4
call_targets: 0x6d303cee7959f814042d31e0624fb88ec6fbcc1d
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0xbb2bf6361089f7d74f73d9620d5c8dcf52408ab436b54766f926b49ca0950ab4",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0x6d303cee7959f814042d31e0624fb88ec6fbcc1d"
    ],
    "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": "0xe30c3978",
            "selector": "0xe30c3978",
            "calldata_variants": [
                "0xe30c3978",
                "0xe30c39780000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf2b7c5cd",
            "selector": "0xf2b7c5cd",
            "calldata_variants": [
                "0xf2b7c5cd",
                "0xf2b7c5cd0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf2fde38b",
            "selector": "0xf2fde38b",
            "calldata_variants": [
                "0xf2fde38b",
                "0xf2fde38b0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x8da5cb5b",
            "selector": "0x8da5cb5b",
            "calldata_variants": [
                "0x8da5cb5b",
                "0x8da5cb5b0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x9b4cd940",
            "selector": "0x9b4cd940",
            "calldata_variants": [
                "0x9b4cd940",
                "0x9b4cd9400000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x79ba5097",
            "selector": "0x79ba5097",
            "calldata_variants": [
                "0x79ba5097",
                "0x79ba50970000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x8367080f",
            "selector": "0x8367080f",
            "calldata_variants": [
                "0x8367080f",
                "0x8367080f0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x84f289cc",
            "selector": "0x84f289cc",
            "calldata_variants": [
                "0x84f289cc",
                "0x84f289cc0000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 3355,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 4510,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 5365,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "call_count": 4,
    "guards_detected": [
        {
            "pc": 2551,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        }
    ],
    "untrusted_call_count": 4
}
medium other detector ETH value transfer possible 40 no no
view
trace_id: 0xbb2bf6361089f7d74f73d9620d5c8dcf52408ab436b54766f926b49ca0950ab4
call_targets: 0x6d303cee7959f814042d31e0624fb88ec6fbcc1d
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0xbb2bf6361089f7d74f73d9620d5c8dcf52408ab436b54766f926b49ca0950ab4",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0x6d303cee7959f814042d31e0624fb88ec6fbcc1d"
    ],
    "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": "0xe30c3978",
            "selector": "0xe30c3978",
            "calldata_variants": [
                "0xe30c3978",
                "0xe30c39780000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf2b7c5cd",
            "selector": "0xf2b7c5cd",
            "calldata_variants": [
                "0xf2b7c5cd",
                "0xf2b7c5cd0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf2fde38b",
            "selector": "0xf2fde38b",
            "calldata_variants": [
                "0xf2fde38b",
                "0xf2fde38b0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x8da5cb5b",
            "selector": "0x8da5cb5b",
            "calldata_variants": [
                "0x8da5cb5b",
                "0x8da5cb5b0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x9b4cd940",
            "selector": "0x9b4cd940",
            "calldata_variants": [
                "0x9b4cd940",
                "0x9b4cd9400000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x79ba5097",
            "selector": "0x79ba5097",
            "calldata_variants": [
                "0x79ba5097",
                "0x79ba50970000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x8367080f",
            "selector": "0x8367080f",
            "calldata_variants": [
                "0x8367080f",
                "0x8367080f0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x84f289cc",
            "selector": "0x84f289cc",
            "calldata_variants": [
                "0x84f289cc",
                "0x84f289cc0000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 3355,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 4510,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 5365,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "eth_value_calls": 4,
    "guards_detected": [
        {
            "pc": 2551,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        }
    ]
}