8334cc4c-d376-4cae-a657-bd2812b2b250
Open this run to answer one question: is this real attacker-relevant behavior with real impact, or just normal contract plumbing?
| ID | Type | Status | Attempts | Heartbeat |
|---|---|---|---|---|
| 30347 | report.consolidate | complete | 1 / 1 | 3 months ago |
| 74266 | artifact.fetch | complete | 1 / 3 | 1 week ago |
| 74267 | tool.cast_disasm | complete | 1 / 3 | 1 week ago |
| 74268 | analysis.bundle | complete | 1 / 3 | 1 week ago |
| 74269 | capability.graph | complete | 1 / 3 | 1 week ago |
| 74270 | detector.run | complete | 1 / 3 | 1 week ago |
| 74271 | validation.fork | complete | 1 / 3 | 1 week ago |
No slither job recorded yet.
[codex:1133124] OpenAI Codex v0.77.0 (research preview)
[codex:1133124] --------
[codex:1133124] workdir: /tmp/codex-multi-nh1x7o2c
[codex:1133124] model: gpt-5.2-codex
[codex:1133124] provider: openai
[codex:1133124] approval: never
[codex:1133124] sandbox: read-only
[codex:1133124] reasoning effort: xhigh
[codex:1133124] reasoning summaries: auto
[codex:1133124] session id: 019b6615-6f8d-7753-a7b1-e4e0fc99bf05
[codex:1133124] --------
[codex:1133124] user
[codex:1133124] You are a security auditor. Audit this Solidity codebase for exploitable vulnerabilities.
[codex:1133124] Focus on: reentrancy, access control, upgradeability/proxy issues, signature validation, oracle manipulation,
[codex:1133124] accounting/invariant breaks, external call patterns, unchecked return values, and dangerous delegatecall.
[codex:1133124]
[codex:1133124] Scope rules:
[codex:1133124] - You MUST fully read `AUDIT_BUNDLE.txt` before concluding. It contains the complete contents of all first-party `contracts/**/*.sol` files.
[codex:1133124] - Treat `lib/` and `@openzeppelin/` as third-party dependencies; skip them unless there is a concrete misuse angle in first-party code.
[codex:1133124]
[codex:1133124] Output MUST be valid JSON matching the provided schema.
[codex:1133124] - If you find nothing meaningful: set no_findings=true and findings=[].
[codex:1133124] - Otherwise: set no_findings=false and include findings with severity/category/title and file/line locations when possible.
[codex:1133124]
[codex:1133124] Output constraints (IMPORTANT):
[codex:1133124] - severity MUST be exactly one of: info, low, medium, high, critical (lowercase).
[codex:1133124] - category MUST be exactly one of: access_control, reentrancy, math, oracle, upgradeability, auth, other.
[codex:1133124] mcp startup: no servers
[codex:1133124]
[codex:1133124] thinking
[codex:1133124] **Preparing to read audit file**
[codex:1133124] exec
[codex:1133124] /bin/bash -lc ls in /tmp/codex-multi-nh1x7o2c succeeded in 5ms:
[codex:1133124] AUDIT_BUNDLE.txt
[codex:1133124] codex-output-schema.json
[codex:1133124] contracts
[codex:1133124]
[codex:1133124] thinking
[codex:1133124] **Reading the bundle file**
[codex:1133124] exec
[codex:1133124] /bin/bash -lc 'cat AUDIT_BUNDLE.txt' in /tmp/codex-multi-nh1x7o2c succeeded in 5ms:
[codex:1133124] This file concatenates the full contents of first-party Solidity sources for auditing.
[codex:1133124]
[codex:1133124] ================================================================================
[codex:1133124] FILE: contracts/contracts/ConnectorPlug.sol
[codex:1133124] ================================================================================
[codex:1133124] // SPDX-License-Identifier: MIT
[codex:1133124] pragma solidity 0.8.13;
[codex:1133124]
[codex:1133124] import "./utils/RescueBase.sol";
[codex:1133124] import {ISocket} from "./interfaces/ISocket.sol";
[codex:1133124] import {IPlug} from "./interfaces/IPlug.sol";
[codex:1133124] import {IConnector} from "./interfaces/IConnector.sol";
[codex:1133124] import {IBridge} from "./interfaces/IBridge.sol";
[codex:1133124] import "./common/Errors.sol";
[codex:1133124]
[codex:1133124] contract ConnectorPlug is IConnector, IPlug, RescueBase {
[codex:1133124] IBridge public immutable bridge__;
[codex:1133124] ISocket public immutable socket__;
[codex:1133124] uint32 public immutable siblingChainSlug;
[codex:1133124] uint256 public messageIdPart;
[codex:1133124]
[codex:1133124] thinking
[codex:1133124] **Preparing to analyze large audit bundle**
[codex:1133124] exec
[codex:1133124] /bin/bash -lc 'rg --line-number "''^FILE:" AUDIT_BUNDLE.txt' in /tmp/codex-multi-nh1x7o2c succeeded in 7ms:
[codex:1133124] 4:FILE: contracts/contracts/ConnectorPlug.sol
[codex:1133124] 126:FILE: contracts/contracts/bridge/Base.sol
[codex:1133124] 466:FILE: contracts/contracts/bridge/BridgePermit.sol
[codex:1133124] 511:FILE: contracts/contracts/bridge/Controller.sol
[codex:1133124] 658:FILE: contracts/contracts/bridge/FiatTokenV2_1/FiatTokenV2_1_Controller.sol
[codex:1133124] 679:FILE: contracts/contracts/bridge/FiatTokenV2_1/IFiatTokenV2_1_Mintable.sol
[codex:1133124] 694:FILE: contracts/contracts/bridge/StakeEasy.sol
[codex:1133124] 846:FILE: contracts/contracts/bridge/UnWrapper.sol
[codex:1133124] 874:FILE: contracts/contracts/bridge/Vault.sol
[codex:1133124] 1036:FILE: contracts/contracts/common/Constants.sol
[codex:1133124] 1060:FILE: contracts/contracts/common/Errors.sol
[codex:1133124] 1091:FILE: contracts/contracts/common/Structs.sol
[codex:1133124] 1160:FILE: contracts/contracts/hooks/Controller_YieldLimitExecHook.sol
[codex:1133124] 1461:FILE: contracts/contracts/hooks/HookBase.sol
[codex:1133124] 1499:FILE: contracts/contracts/hooks/LimitExecutionHook.sol
[codex:1133124] 1755:FILE: contracts/contracts/hooks/LimitHook.sol
[codex:1133124] 1958:FILE: contracts/contracts/hooks/Vault_YieldLimitExecHook.sol
[codex:1133124] 2329:FILE: contracts/contracts/hooks/plugins/ConnectorPoolPlugin.sol
[codex:1133124] 2390:FILE: contracts/contracts/hooks/plugins/ExecutionHelper.sol
[codex:1133124] 2452:FILE: contracts/contracts/hooks/plugins/LimitPlugin.sol
[codex:1133124]
[codex:1133124] thinking
[codex:1133124] **Examining first-party core files**
[codex:1133124] exec
[codex:1133124] /bin/bash -lc "awk 'NR>=3572 && NR<3701 {print NR\":\""'$0}'"' AUDIT_BUNDLE.txt" in /tmp/codex-multi-nh1x7o2c succeeded in 10ms:
[codex:1133124] 3572:FILE: contracts/contracts/utils/AccessControl.sol
[codex:1133124] 3573:================================================================================
[codex:1133124] 3574:// SPDX-License-Identifier: GPL-3.0-only
[codex:1133124] 3575:pragma solidity 0.8.13;
[codex:1133124] 3576:
[codex:1133124] 3577:import "./Ownable.sol";
[codex:1133124] 3578:
[codex:1133124] 3579:/**
[codex:1133124] 3580: * @title AccessControl
[codex:1133124] 3581: * @dev This abstract contract implements access control mechanism based on roles.
[codex:1133124] 3582: * Each role can have one or more addresses associated with it, which are granted
[codex:1133124] 3583: * permission to execute functions with the onlyRole modifier.
[codex:1133124] 3584: */
[codex:1133124] 3585:abstract contract AccessControl is Ownable {
[codex:1133124] 3586: /**
[codex:1133124] 3587: * @dev A mapping of roles to a mapping of addresses to boolean values indicating whether or not they have the role.
[codex:1133124] 3588: */
[codex:1133124] 3589: mapping(bytes32 => mapping(address => bool)) private _permits;
[codex:1133124] 3590:
[codex:1133124] 3591: /**
[codex:1133124]
[codex:1133124] thinking
[codex:1133124] **Considering AccessControl and Ownable**
[codex:1133124] exec
[codex:1133124] /bin/bash -lc "awk 'NR>=3755 && NR<3839 {print NR\":\""'$0}'"' AUDIT_BUNDLE.txt" in /tmp/codex-multi-nh1x7o2c succeeded in 7ms:
[codex:1133124] 3755:FILE: contracts/contracts/utils/Ownable.sol
[codex:1133124] 3756:================================================================================
[codex:1133124] 3757:// SPDX-License-Identifier: GPL-3.0-only
[codex:1133124] 3758:pragma solidity 0.8.13;
[codex:1133124] 3759:
[codex:1133124] 3760:/**
[codex:1133124] 3761: * @title Ownable
[codex:1133124] 3762: * @dev The Ownable contract provides a simple way to manage ownership of a contract
[codex:1133124] 3763: * and allows for ownership to be transferred to a nominated address.
[codex:1133124] 3764: */
[codex:1133124] 3765:abstract contract Ownable {
[codex:1133124] 3766: address private _owner;
[codex:1133124] 3767: address private _nominee;
[codex:1133124] 3768:
[codex:1133124] 3769: event OwnerNominated(address indexed nominee);
[codex:1133124] 3770: event OwnerClaimed(address indexed claimer);
[codex:1133124] 3771:
[codex:1133124] 3772: error OnlyOwner();
[codex:1133124] 3773: error OnlyNominee();
[codex:1133124] 3774:
[codex:1133124]
[codex:1133124] thinking
[codex:1133124] **Considering Ownable standard and RescueBase**
[codex:1133124] exec
[codex:1133124] /bin/bash -lc "awk 'NR>=3839 && NR<3871 {print NR\":\""'$0}'"' AUDIT_BUNDLE.txt" in /tmp/codex-multi-nh1x7o2c succeeded in 7ms:
[codex:1133124] 3839:FILE: contracts/contracts/utils/RescueBase.sol
[codex:1133124] 3840:================================================================================
[codex:1133124] 3841:// SPDX-License-Identifier: MIT
[codex:1133124] 3842:pragma solidity 0.8.13;
[codex:1133124] 3843:import {RescueFundsLib} from "../libraries/RescueFundsLib.sol";
[codex:1133124] 3844:import {AccessControl} from "./AccessControl.sol";
[codex:1133124] 3845:
[codex:1133124] 3846:/**
[codex:1133124] 3847: * @title Base contract for super token and vault
[codex:1133124] 3848: * @notice It contains relevant execution payload storages.
[codex:1133124] 3849: * @dev This contract implements Socket's IPlug to enable message bridging and IMessageBridge
[codex:1133124] 3850: * to support any type of message bridge.
[codex:1133124] 3851: */
[codex:1133124] 3852:abstract contract RescueBase is AccessControl {
[codex:1133124] 3853: bytes32 constant RESCUE_ROLE = keccak256("RESCUE_ROLE");
[codex:1133124] 3854:
[codex:1133124] 3855: /**
[codex:1133124] 3856: * @notice Rescues funds from the contract if they are locked by mistake.
[codex:1133124] 3857: * @param token_ The address of the token contract.
[codex:1133124] 3858: * @param rescueTo_ The address where rescued tokens need to be sent.
[codex:1133124]
[codex:1133124] thinking
[codex:1133124] **Inspecting Vault contract for vulnerabilities**
[codex:1133124] exec
[codex:1133124] /bin/bash -lc "awk 'NR>=874 && NR<1036 {print NR\":\""'$0}'"' AUDIT_BUNDLE.txt" in /tmp/codex-multi-nh1x7o2c succeeded in 7ms:
[codex:1133124] 874:FILE: contracts/contracts/bridge/Vault.sol
[codex:1133124] 875:================================================================================
[codex:1133124] 876:pragma solidity 0.8.13;
[codex:1133124] 877:
[codex:1133124] 878:import "./Base.sol";
[codex:1133124] 879:import "../interfaces/IConnector.sol";
[codex:1133124] 880:import "lib/solmate/src/tokens/ERC20.sol";
[codex:1133124] 881:
[codex:1133124] 882:/**
[codex:1133124] 883: * @title SuperToken
[codex:1133124] 884: * @notice A contract which enables bridging a token to its sibling chains.
[codex:1133124] 885: * @dev This contract implements ISuperTokenOrVault to support message bridging through IMessageBridge compliant contracts.
[codex:1133124] 886: */
[codex:1133124] 887:contract Vault is Base {
[codex:1133124] 888: using SafeTransferLib for ERC20;
[codex:1133124] 889:
[codex:1133124] 890: // /**
[codex:1133124] 891: // * @notice constructor for creating a new SuperTokenVault.
[codex:1133124] 892: // * @param token_ token contract address which is to be bridged.
[codex:1133124] 893: // */
[codex:1133124]
[codex:1133124] thinking
[codex:1133124] **Reviewing full Controller code**
[codex:1133124] exec
[codex:1133124] /bin/bash -lc "awk 'NR>=511 && NR<658 {print NR\":\""'$0}'"' AUDIT_BUNDLE.txt" in /tmp/codex-multi-nh1x7o2c succeeded in 7ms:
[codex:1133124] 511:FILE: contracts/contracts/bridge/Controller.sol
[codex:1133124] 512:================================================================================
[codex:1133124] 513:pragma solidity 0.8.13;
[codex:1133124] 514:
[codex:1133124] 515:import "./Base.sol";
[codex:1133124] 516:
[codex:1133124] 517:contract Controller is Base {
[codex:1133124] 518: uint256 public totalMinted;
[codex:1133124] 519:
[codex:1133124] 520: constructor(address token_) Base(token_) {
[codex:1133124] 521: bridgeType = NORMAL_CONTROLLER;
[codex:1133124] 522: }
[codex:1133124] 523:
[codex:1133124] 524: /**
[codex:1133124] 525: * @notice Bridges tokens between chains.
[codex:1133124] 526: * @dev This function allows bridging tokens between different chains.
[codex:1133124] 527: * @param receiver_ The address to receive the bridged tokens.
[codex:1133124] 528: * @param amount_ The amount of tokens to bridge.
[codex:1133124] 529: * @param msgGasLimit_ The gas limit for the execution of the bridging process.
[codex:1133124] 530: * @param connector_ The address of the connector contract responsible for the bridge.
[codex:1133124]
[codex:1133124] thinking
[codex:1133124] **Inspecting token controller and upgradeability**
[codex:1133124] exec
[codex:1133124] /bin/bash -lc "awk 'NR>=658 && NR<694 {print NR\":\""'$0}'"' AUDIT_BUNDLE.txt" in /tmp/codex-multi-nh1x7o2c succeeded in 7ms:
[codex:1133124] 658:FILE: contracts/contracts/bridge/FiatTokenV2_1/FiatTokenV2_1_Controller.sol
[codex:1133124] 659:================================================================================
[codex:1133124] 660:pragma solidity 0.8.13;
[codex:1133124] 661:
[codex:1133124] 662:import {IFiatTokenV2_1_Mintable} from "./IFiatTokenV2_1_Mintable.sol";
[codex:1133124] 663:import "../Controller.sol";
[codex:1133124] 664:
[codex:1133124] 665:contract FiatTokenV2_1_Controller is Controller {
[codex:1133124] 666: using SafeTransferLib for ERC20;
[codex:1133124] 667:
[codex:1133124] 668: constructor(address token_) Controller(token_) {
[codex:1133124] 669: bridgeType = FIAT_TOKEN_CONTROLLER;
[codex:1133124] 670: }
[codex:1133124] 671:
[codex:1133124] 672: function _burn(address user_, uint256 burnAmount_) internal override {
[codex:1133124] 673: ERC20(token).safeTransferFrom(user_, address(this), burnAmount_);
[codex:1133124] 674: IFiatTokenV2_1_Mintable(address(token)).burn(burnAmount_);
[codex:1133124] 675: }
[codex:1133124] 676:}
[codex:1133124] 677:
[codex:1133124]
[codex:1133124] thinking
[codex:1133124] **Checking FiatToken transfer and burn flow**
[codex:1133124] exec
[codex:1133124] /bin/bash -lc "awk 'NR>=694 && NR<846 {print NR\":\""'$0}'"' AUDIT_BUNDLE.txt" in /tmp/codex-multi-nh1x7o2c succeeded in 7ms:
[codex:1133124] 694:FILE: contracts/contracts/bridge/StakeEasy.sol
[codex:1133124] 695:================================================================================
[codex:1133124] 696:pragma solidity 0.8.13;
[codex:1133124] 697:
[codex:1133124] 698:import "lib/solmate/src/tokens/ERC20.sol";
[codex:1133124] 699:
[codex:1133124] 700:interface IProxPolyCore {
[codex:1133124] 701: function createAccount() external returns (uint128 accountId);
[codex:1133124] 702: function deposit(uint128 accountId, address collateralType, uint256 tokenAmount) external;
[codex:1133124] 703: function grantPermission(uint128 accountId, bytes32 permission, address user) external;
[codex:1133124] 704:
[codex:1133124] 705:
[codex:1133124] 706: function delegateCollateral(
[codex:1133124] 707: uint128 accountId,
[codex:1133124] 708: uint128 poolId,
[codex:1133124] 709: address collateralType,
[codex:1133124] 710: uint256 amount,
[codex:1133124] 711: uint256 leverage
[codex:1133124] 712: ) external;
[codex:1133124] 713:
[codex:1133124]
[codex:1133124] thinking
[codex:1133124] **Evaluating permissionless risks and reentrancy**
[codex:1133124]
[codex:1133124] I’m carefully assessing StakeEasy's lack of access control and how it handles approvals, unwraps, and staking without slippage checks. I see potential risks from anyone spending contract-held tokens since createAccountAndStake is external and unprotected. I’m considering if this fits the intended bridging flow and planning to check related contracts to understand integration and safeguards.
[codex:1133124] exec
[codex:1133124] /bin/bash -lc "awk 'NR>=846 && NR<874 {print NR\":\""'$0}'"' AUDIT_BUNDLE.txt" in /tmp/codex-multi-nh1x7o2c succeeded in 7ms:
[codex:1133124] 846:FILE: contracts/contracts/bridge/UnWrapper.sol
[codex:1133124] 847:================================================================================
[codex:1133124] 848:pragma solidity 0.8.13;
[codex:1133124] 849:
[codex:1133124] 850:import "lib/solmate/src/tokens/ERC20.sol";
[codex:1133124] 851:
[codex:1133124] 852:contract Unwrapper {
[codex:1133124] 853: address public baseToken;
[codex:1133124] 854: address public wrappedToken;
[codex:1133124] 855:
[codex:1133124] 856: constructor(address _baseToken, address _wrappedToken) {
[codex:1133124] 857: baseToken = _baseToken;
[codex:1133124] 858: wrappedToken = _wrappedToken;
[codex:1133124] 859: }
[codex:1133124] 860:
[codex:1133124] 861: function wrap(uint256 amount) public {
[codex:1133124] 862: ERC20(baseToken).transferFrom(msg.sender, address(this), amount);
[codex:1133124] 863: ERC20(wrappedToken).transfer(msg.sender, amount);
[codex:1133124] 864: }
[codex:1133124] 865:
[codex:1133124]
[codex:1133124] thinking
[codex:1133124] **Analyzing Unwrapper token transfer risks**
[codex:1133124] exec
[codex:1133124] /bin/bash -lc "awk 'NR>=3189 && NR<3243 {print NR\":\""'$0}'"' AUDIT_BUNDLE.txt" in /tmp/codex-multi-nh1x7o2c succeeded in 8ms:
[codex:1133124] 3189:FILE: contracts/contracts/token/SuperToken.sol
[codex:1133124] 3190:================================================================================
[codex:1133124] 3191:pragma solidity 0.8.13;
[codex:1133124] 3192:
[codex:1133124] 3193:import "lib/solmate/src/tokens/ERC20.sol";
[codex:1133124] 3194:import "../utils/RescueBase.sol";
[codex:1133124] 3195:import "../interfaces/IHook.sol";
[codex:1133124] 3196:
[codex:1133124] 3197:/**
[codex:1133124] 3198: * @title SuperToken
[codex:1133124] 3199: * @notice An ERC20 contract which enables bridging a token to its sibling chains.
[codex:1133124] 3200: * @dev This contract implements ISuperTokenOrVault to support message bridging through IMessageBridge compliant contracts.
[codex:1133124] 3201: */
[codex:1133124] 3202:contract SuperToken is ERC20, RescueBase {
[codex:1133124] 3203: // for all controller access (mint, burn)
[codex:1133124] 3204: bytes32 constant CONTROLLER_ROLE = keccak256("CONTROLLER_ROLE");
[codex:1133124] 3205:
[codex:1133124] 3206: /**
[codex:1133124] 3207: * @notice constructor for creating a new SuperToken.
[codex:1133124] 3208: * @param name_ token name
[codex:1133124]
[codex:1133124] thinking
[codex:1133124] **Inspecting token contracts**
[codex:1133124] exec
[codex:1133124] /bin/bash -lc "awk 'NR>=3243 && NR<3314 {print NR\":\""'$0}'"' AUDIT_BUNDLE.txt" in /tmp/codex-multi-nh1x7o2c succeeded in 7ms:
[codex:1133124] 3243:FILE: contracts/contracts/token/yield-token/YieldToken.sol
[codex:1133124] 3244:================================================================================
[codex:1133124] 3245:// SPDX-License-Identifier: GPL-3.0-only
[codex:1133124] 3246:pragma solidity 0.8.13;
[codex:1133124] 3247:
[codex:1133124] 3248:import "./YieldTokenBase.sol";
[codex:1133124] 3249:import {IStrategy} from "../../interfaces/IStrategy.sol";
[codex:1133124] 3250:import {IConnector} from "../../interfaces/IConnector.sol";
[codex:1133124] 3251:import {IHook} from "../../interfaces/IHook.sol";
[codex:1133124] 3252:
[codex:1133124] 3253:// add shutdown
[codex:1133124] 3254:contract YieldToken is YieldTokenBase {
[codex:1133124] 3255: using FixedPointMathLib for uint256;
[codex:1133124] 3256:
[codex:1133124] 3257: bytes32 constant MINTER_ROLE = keccak256("MINTER_ROLE");
[codex:1133124] 3258: bytes32 constant HOOK_ROLE = keccak256("HOOK_ROLE");
[codex:1133124] 3259:
[codex:1133124] 3260: constructor(
[codex:1133124] 3261: string memory name_,
[codex:1133124] 3262: string memory symbol_,
[codex:1133124]
[codex:1133124] thinking
[codex:1133124] **Analyzing division safety in calculateMintAmount**
[codex:1133124] exec
[codex:1133124] /bin/bash -lc "awk 'NR>=3314 && NR<3572 {print NR\":\""'$0}'"' AUDIT_BUNDLE.txt" in /tmp/codex-multi-nh1x7o2c succeeded in 8ms:
[codex:1133124] 3314:FILE: contracts/contracts/token/yield-token/YieldTokenBase.sol
[codex:1133124] 3315:================================================================================
[codex:1133124] 3316:// SPDX-License-Identifier: AGPL-3.0-only
[codex:1133124] 3317:pragma solidity >=0.8.0;
[codex:1133124] 3318:
[codex:1133124] 3319:import "lib/openzeppelin-contracts/contracts/security/ReentrancyGuard.sol";
[codex:1133124] 3320:import {FixedPointMathLib} from "lib/solmate/src/utils/FixedPointMathLib.sol";
[codex:1133124] 3321:import "../../utils/RescueBase.sol";
[codex:1133124] 3322:import "lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol";
[codex:1133124] 3323:import {PermitDeadlineExpired, InvalidSigner} from "../../common/Errors.sol";
[codex:1133124] 3324:
[codex:1133124] 3325:abstract contract YieldTokenBase is RescueBase, ReentrancyGuard, IERC20 {
[codex:1133124] 3326: using FixedPointMathLib for uint256;
[codex:1133124] 3327:
[codex:1133124] 3328: /*//////////////////////////////////////////////////////////////
[codex:1133124] 3329: METADATA STORAGE
[codex:1133124] 3330: //////////////////////////////////////////////////////////////*/
[codex:1133124] 3331:
[codex:1133124] 3332: string public name;
[codex:1133124] 3333:
[codex:1133124]
[codex:1133124] thinking
[codex:1133124] **Analyzing share-to-asset conversion risks**
[codex:1133124]
[codex:1133124] I'm unraveling how YieldTokenBase converts assets to shares, especially in permits and allowances, to spot potential vulnerabilities related to shifting totalUnderlyingAssets and its effect on allowance accuracy. I want to check if the role controlling totalUnderlyingAssets updates could be exploited, so I'm moving on to inspect HookBase and other hooks for possible attack vectors.
[codex:1133124] exec
[codex:1133124] /bin/bash -lc "awk 'NR>=1461 && NR<1499 {print NR\":\""'$0}'"' AUDIT_BUNDLE.txt" in /tmp/codex-multi-nh1x7o2c succeeded in 7ms:
[codex:1133124] 1461:FILE: contracts/contracts/hooks/HookBase.sol
[codex:1133124] 1462:================================================================================
[codex:1133124] 1463:pragma solidity 0.8.13;
[codex:1133124] 1464:
[codex:1133124] 1465:import "lib/solmate/src/utils/ReentrancyGuard.sol";
[codex:1133124] 1466:import "../common/Errors.sol";
[codex:1133124] 1467:import "../common/Constants.sol";
[codex:1133124] 1468:import "../interfaces/IHook.sol";
[codex:1133124] 1469:import "../utils/RescueBase.sol";
[codex:1133124] 1470:
[codex:1133124] 1471:/**
[codex:1133124] 1472: * @title Base contract for super token and vault
[codex:1133124] 1473: * @notice It contains relevant execution payload storages.
[codex:1133124] 1474: * @dev This contract implements Socket's IPlug to enable message bridging and IMessageBridge
[codex:1133124] 1475: * to support any type of message bridge.
[codex:1133124] 1476: */
[codex:1133124] 1477:abstract contract HookBase is ReentrancyGuard, IHook, RescueBase {
[codex:1133124] 1478: address public immutable vaultOrController;
[codex:1133124] 1479: bytes32 public hookType;
[codex:1133124] 1480:
[codex:1133124]
[codex:1133124] thinking
[codex:1133124] **Inspecting hook implementations**
[codex:1133124] exec
[codex:1133124] /bin/bash -lc "awk 'NR>=1499 && NR<1755 {print NR\":\""'$0}'"' AUDIT_BUNDLE.txt" in /tmp/codex-multi-nh1x7o2c succeeded in 8ms:
[codex:1133124] 1499:FILE: contracts/contracts/hooks/LimitExecutionHook.sol
[codex:1133124] 1500:================================================================================
[codex:1133124] 1501:pragma solidity 0.8.13;
[codex:1133124] 1502:
[codex:1133124] 1503:import "./plugins/LimitPlugin.sol";
[codex:1133124] 1504:import "./plugins/ExecutionHelper.sol";
[codex:1133124] 1505:import "./plugins/ConnectorPoolPlugin.sol";
[codex:1133124] 1506:import "../interfaces/IController.sol";
[codex:1133124] 1507:
[codex:1133124] 1508:contract LimitExecutionHook is LimitPlugin, ConnectorPoolPlugin {
[codex:1133124] 1509: bool public useControllerPools;
[codex:1133124] 1510: ExecutionHelper executionHelper__;
[codex:1133124] 1511:
[codex:1133124] 1512: event MessageExecuted(bytes32 indexed messageId, address indexed receiver);
[codex:1133124] 1513:
[codex:1133124] 1514: /**
[codex:1133124] 1515: * @notice Constructor for creating a new SuperToken.
[codex:1133124] 1516: * @param owner_ Owner of this contract.
[codex:1133124] 1517: */
[codex:1133124] 1518: constructor(
[codex:1133124]
[codex:1133124] thinking
[codex:1133124] **Inspecting LimitHook and ExecutionHelper**
[codex:1133124] exec
[codex:1133124] /bin/bash -lc "awk 'NR>=1755 && NR<1958 {print NR\":\""'$0}'"' AUDIT_BUNDLE.txt" in /tmp/codex-multi-nh1x7o2c succeeded in 7ms:
[codex:1133124] 1755:FILE: contracts/contracts/hooks/LimitHook.sol
[codex:1133124] 1756:================================================================================
[codex:1133124] 1757:pragma solidity 0.8.13;
[codex:1133124] 1758:
[codex:1133124] 1759:import "./plugins/LimitPlugin.sol";
[codex:1133124] 1760:import "../interfaces/IController.sol";
[codex:1133124] 1761:import "./plugins/ConnectorPoolPlugin.sol";
[codex:1133124] 1762:
[codex:1133124] 1763:contract LimitHook is LimitPlugin, ConnectorPoolPlugin {
[codex:1133124] 1764: bool public immutable useControllerPools;
[codex:1133124] 1765:
[codex:1133124] 1766: /**
[codex:1133124] 1767: * @notice Constructor for creating a new SuperToken.
[codex:1133124] 1768: * @param owner_ Owner of this contract.
[codex:1133124] 1769: */
[codex:1133124] 1770: constructor(
[codex:1133124] 1771: address owner_,
[codex:1133124] 1772: address controller_,
[codex:1133124] 1773: bool useControllerPools_
[codex:1133124] 1774: ) HookBase(owner_, controller_) {
[codex:1133124]
[codex:1133124] thinking
[codex:1133124] **Investigating yield limit hooks**
[codex:1133124] exec
[codex:1133124] /bin/bash -lc "awk 'NR>=1160 && NR<1461 {print NR\":\""'$0}'"' AUDIT_BUNDLE.txt" in /tmp/codex-multi-nh1x7o2c succeeded in 8ms:
[codex:1133124] 1160:FILE: contracts/contracts/hooks/Controller_YieldLimitExecHook.sol
[codex:1133124] 1161:================================================================================
[codex:1133124] 1162:// // // SPDX-License-Identifier: GPL-3.0-only
[codex:1133124] 1163:pragma solidity 0.8.13;
[codex:1133124] 1164:
[codex:1133124] 1165:import "lib/openzeppelin-contracts/contracts/utils/math/Math.sol";
[codex:1133124] 1166:import {FixedPointMathLib} from "lib/solmate/src/utils/FixedPointMathLib.sol";
[codex:1133124] 1167:import {IStrategy} from "../interfaces/IStrategy.sol";
[codex:1133124] 1168:import {IMintableERC20} from "../interfaces/IMintableERC20.sol";
[codex:1133124] 1169:import "lib/solmate/src/utils/SafeTransferLib.sol";
[codex:1133124] 1170:import {IConnector} from "../ConnectorPlug.sol";
[codex:1133124] 1171:import "./LimitExecutionHook.sol";
[codex:1133124] 1172:
[codex:1133124] 1173:interface IYieldToken {
[codex:1133124] 1174: function updateTotalUnderlyingAssets(uint256 amount_) external;
[codex:1133124] 1175:
[codex:1133124] 1176: function calculateMintAmount(uint256 amount_) external returns (uint256);
[codex:1133124] 1177:
[codex:1133124] 1178: function convertToShares(
[codex:1133124] 1179: uint256 underlyingAssets
[codex:1133124]
[codex:1133124] thinking
[codex:1133124] **Analyzing yield token hook logic and potential inconsistencies**
[codex:1133124] exec
[codex:1133124] /bin/bash -lc "awk 'NR>=1958 && NR<2329 {print NR\":\""'$0}'"' AUDIT_BUNDLE.txt" in /tmp/codex-multi-nh1x7o2c succeeded in 8ms:
[codex:1133124] 1958:FILE: contracts/contracts/hooks/Vault_YieldLimitExecHook.sol
[codex:1133124] 1959:================================================================================
[codex:1133124] 1960:// // // SPDX-License-Identifier: GPL-3.0-only
[codex:1133124] 1961:pragma solidity 0.8.13;
[codex:1133124] 1962:
[codex:1133124] 1963:import "lib/openzeppelin-contracts/contracts/utils/math/Math.sol";
[codex:1133124] 1964:import {FixedPointMathLib} from "lib/solmate/src/utils/FixedPointMathLib.sol";
[codex:1133124] 1965:import {IStrategy} from "../interfaces/IStrategy.sol";
[codex:1133124] 1966:import "lib/solmate/src/tokens/ERC20.sol";
[codex:1133124] 1967:
[codex:1133124] 1968:import "lib/solmate/src/utils/SafeTransferLib.sol";
[codex:1133124] 1969:import {IConnector} from "../ConnectorPlug.sol";
[codex:1133124] 1970:
[codex:1133124] 1971:import "./LimitExecutionHook.sol";
[codex:1133124] 1972:
[codex:1133124] 1973:contract Vault_YieldLimitExecHook is LimitExecutionHook {
[codex:1133124] 1974: using SafeTransferLib for ERC20;
[codex:1133124] 1975: using FixedPointMathLib for uint256;
[codex:1133124] 1976:
[codex:1133124] 1977: uint256 private constant MAX_BPS = 10_000;
[codex:1133124]
[codex:1133124] thinking
[codex:1133124] **Analyzing potential reentrancy and transfer risks in Vault_YieldLimitExecHook**
[codex:1133124]
[codex:1133124] I'm inspecting Vault_YieldLimitExecHook for reentrancy guards and safe transfer practices, noting it inherits nonReentrant via HookBase but some key functions lack explicit guards. The pattern of state updates before external calls might prevent some issues, but unguarded external calls to strategy could still enable exploits if the strategy is untrusted. I'm also wary of token transfers using solmate's ERC20, which may not handle non-standard tokens safely. Next, I plan to check ExecutionHelper to understand external call vulnerabilities better.
[codex:1133124] exec
[codex:1133124] /bin/bash -lc "awk 'NR>=2390 && NR<2452 {print NR\":\""'$0}'"' AUDIT_BUNDLE.txt" in /tmp/codex-multi-nh1x7o2c succeeded in 7ms:
[codex:1133124] 2390:FILE: contracts/contracts/hooks/plugins/ExecutionHelper.sol
[codex:1133124] 2391:================================================================================
[codex:1133124] 2392:// SPDX-License-Identifier: MIT
[codex:1133124] 2393:pragma solidity 0.8.13;
[codex:1133124] 2394:
[codex:1133124] 2395:import "../../libraries/ExcessivelySafeCall.sol";
[codex:1133124] 2396:import "../../utils/RescueBase.sol";
[codex:1133124] 2397:import "../../common/Errors.sol";
[codex:1133124] 2398:
[codex:1133124] 2399:/**
[codex:1133124] 2400: * @title ExecutionHelper
[codex:1133124] 2401: * @notice It is an untrusted contract used for payload execution by Super token and Vault.
[codex:1133124] 2402: */
[codex:1133124] 2403:contract ExecutionHelper is RescueBase {
[codex:1133124] 2404: using ExcessivelySafeCall for address;
[codex:1133124] 2405: uint16 private constant MAX_COPY_BYTES = 0;
[codex:1133124] 2406: address public hook;
[codex:1133124] 2407: bytes32 public messageId;
[codex:1133124] 2408: uint256 public bridgeAmount;
[codex:1133124] 2409:
[codex:1133124]
[codex:1133124] thinking
[codex:1133124] **Evaluating ExecutionHelper reentrancy and security**
[codex:1133124] exec
[codex:1133124] /bin/bash -lc "awk 'NR>=2329 && NR<2390 {print NR\":\""'$0}'"' AUDIT_BUNDLE.txt" in /tmp/codex-multi-nh1x7o2c succeeded in 7ms:
[codex:1133124] 2329:FILE: contracts/contracts/hooks/plugins/ConnectorPoolPlugin.sol
[codex:1133124] 2330:================================================================================
[codex:1133124] 2331:pragma solidity 0.8.13;
[codex:1133124] 2332:import "../HookBase.sol";
[codex:1133124] 2333:
[codex:1133124] 2334:abstract contract ConnectorPoolPlugin is HookBase {
[codex:1133124] 2335: // connectorPoolId => totalLockedAmount
[codex:1133124] 2336: mapping(uint256 => uint256) public poolLockedAmounts;
[codex:1133124] 2337:
[codex:1133124] 2338: // connector => connectorPoolId
[codex:1133124] 2339: mapping(address => uint256) public connectorPoolIds;
[codex:1133124] 2340:
[codex:1133124] 2341: event ConnectorPoolIdUpdated(address connector, uint256 poolId);
[codex:1133124] 2342: event PoolLockedAmountUpdated(uint256 poolId, uint256 amount);
[codex:1133124] 2343:
[codex:1133124] 2344: function updateConnectorPoolId(
[codex:1133124] 2345: address[] calldata connectors,
[codex:1133124] 2346: uint256[] calldata poolIds_
[codex:1133124] 2347: ) external onlyOwner {
[codex:1133124] 2348: uint256 length = connectors.length;
[codex:1133124]
[codex:1133124] thinking
[codex:1133124] **Considering plugin complexity**
[codex:1133124] exec
[codex:1133124] /bin/bash -lc "awk 'NR>=2452 && NR<2577 {print NR\":\""'$0}'"' AUDIT_BUNDLE.txt" in /tmp/codex-multi-nh1x7o2c succeeded in 7ms:
[codex:1133124] 2452:FILE: contracts/contracts/hooks/plugins/LimitPlugin.sol
[codex:1133124] 2453:================================================================================
[codex:1133124] 2454:pragma solidity 0.8.13;
[codex:1133124] 2455:
[codex:1133124] 2456:import "../HookBase.sol";
[codex:1133124] 2457:import {Gauge} from "../../utils/Gauge.sol";
[codex:1133124] 2458:
[codex:1133124] 2459:abstract contract LimitPlugin is Gauge, HookBase {
[codex:1133124] 2460: bytes32 constant LIMIT_UPDATER_ROLE = keccak256("LIMIT_UPDATER_ROLE");
[codex:1133124] 2461:
[codex:1133124] 2462: // connector => receivingLimitParams
[codex:1133124] 2463: mapping(address => LimitParams) _receivingLimitParams;
[codex:1133124] 2464:
[codex:1133124] 2465: // connector => sendingLimitParams
[codex:1133124] 2466: mapping(address => LimitParams) _sendingLimitParams;
[codex:1133124] 2467:
[codex:1133124] 2468: ////////////////////////////////////////////////////////
[codex:1133124] 2469: ////////////////////// EVENTS //////////////////////////
[codex:1133124] 2470: ////////////////////////////////////////////////////////
[codex:1133124] 2471:
[codex:1133124]
[codex:1133124] thinking
[codex:1133124] **Inspecting Gauge contract usage**
[codex:1133124] exec
[codex:1133124] /bin/bash -lc "awk 'NR>=3701 && NR<3755 {print NR\":\""'$0}'"' AUDIT_BUNDLE.txt" in /tmp/codex-multi-nh1x7o2c succeeded in 7ms:
[codex:1133124] 3701:FILE: contracts/contracts/utils/Gauge.sol
[codex:1133124] 3702:================================================================================
[codex:1133124] 3703:// SPDX-License-Identifier: MIT
[codex:1133124] 3704:pragma solidity 0.8.13;
[codex:1133124] 3705:import "../common/Structs.sol";
[codex:1133124] 3706:
[codex:1133124] 3707:abstract contract Gauge {
[codex:1133124] 3708: error AmountOutsideLimit();
[codex:1133124] 3709:
[codex:1133124] 3710: function _getCurrentLimit(
[codex:1133124] 3711: LimitParams storage _params
[codex:1133124] 3712: ) internal view returns (uint256 _limit) {
[codex:1133124] 3713: uint256 timeElapsed = block.timestamp - _params.lastUpdateTimestamp;
[codex:1133124] 3714: uint256 limitIncrease = timeElapsed * _params.ratePerSecond;
[codex:1133124] 3715:
[codex:1133124] 3716: if (limitIncrease + _params.lastUpdateLimit > _params.maxLimit) {
[codex:1133124] 3717: _limit = _params.maxLimit;
[codex:1133124] 3718: } else {
[codex:1133124] 3719: _limit = limitIncrease + _params.lastUpdateLimit;
[codex:1133124] 3720: }
[codex:1133124]
[codex:1133124] thinking
[codex:1133124] **Opening interface definitions**
[codex:1133124] exec
[codex:1133124] /bin/bash -lc "awk 'NR>=2577 && NR<2999 {print NR\":\""'$0}'"' AUDIT_BUNDLE.txt" in /tmp/codex-multi-nh1x7o2c succeeded in 8ms:
[codex:1133124] 2577:FILE: contracts/contracts/interfaces/IBridge.sol
[codex:1133124] 2578:================================================================================
[codex:1133124] 2579:pragma solidity ^0.8.3;
[codex:1133124] 2580:
[codex:1133124] 2581:interface IBridge {
[codex:1133124] 2582: function bridge(
[codex:1133124] 2583: address receiver_,
[codex:1133124] 2584: uint256 amount_,
[codex:1133124] 2585: uint256 msgGasLimit_,
[codex:1133124] 2586: address connector_,
[codex:1133124] 2587: bytes calldata execPayload_,
[codex:1133124] 2588: bytes calldata options_
[codex:1133124] 2589: ) external payable;
[codex:1133124] 2590:
[codex:1133124] 2591: function receiveInbound(
[codex:1133124] 2592: uint32 siblingChainSlug_,
[codex:1133124] 2593: bytes memory payload_
[codex:1133124] 2594: ) external payable;
[codex:1133124] 2595:
[codex:1133124] 2596: function retry(address connector_, bytes32 messageId_) external;
[codex:1133124]
[codex:1133124] thinking
[codex:1133124] **Inspecting critical libraries**
[codex:1133124] exec
[codex:1133124] /bin/bash -lc "awk 'NR>=2999 && NR<3189 {print NR\":\""'$0}'"' AUDIT_BUNDLE.txt" in /tmp/codex-multi-nh1x7o2c succeeded in 7ms:
[codex:1133124] 2999:FILE: contracts/contracts/libraries/ExcessivelySafeCall.sol
[codex:1133124] 3000:================================================================================
[codex:1133124] 3001:// SPDX-License-Identifier: MIT OR Apache-2.0
[codex:1133124] 3002:pragma solidity 0.8.13;
[codex:1133124] 3003:
[codex:1133124] 3004:library ExcessivelySafeCall {
[codex:1133124] 3005: uint constant LOW_28_MASK =
[codex:1133124] 3006: 0x00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff;
[codex:1133124] 3007:
[codex:1133124] 3008: /// @notice Use when you _really_ really _really_ don't trust the called
[codex:1133124] 3009: /// contract. This prevents the called contract from causing reversion of
[codex:1133124] 3010: /// the caller in as many ways as we can.
[codex:1133124] 3011: /// @dev The main difference between this and a solidity low-level call is
[codex:1133124] 3012: /// that we limit the number of bytes that the callee can cause to be
[codex:1133124] 3013: /// copied to caller memory. This prevents stupid things like malicious
[codex:1133124] 3014: /// contracts returning 10,000,000 bytes causing a local OOG when copying
[codex:1133124] 3015: /// to memory.
[codex:1133124] 3016: /// @param _target The address to call
[codex:1133124] 3017: /// @param _gas The amount of gas to forward to the remote contract
[codex:1133124] 3018: /// @param _maxCopy The maximum number of bytes of returndata to copy
[codex:1133124]
[codex:1133124] thinking
[codex:1133124] **Inspecting error constants**
[codex:1133124] exec
[codex:1133124] /bin/bash -lc "awk 'NR>=1036 && NR<1160 {print NR\":\""'$0}'"' AUDIT_BUNDLE.txt" in /tmp/codex-multi-nh1x7o2c succeeded in 7ms:
[codex:1133124] 1036:FILE: contracts/contracts/common/Constants.sol
[codex:1133124] 1037:================================================================================
[codex:1133124] 1038:pragma solidity 0.8.13;
[codex:1133124] 1039:
[codex:1133124] 1040:address constant ETH_ADDRESS = address(
[codex:1133124] 1041: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE
[codex:1133124] 1042:);
[codex:1133124] 1043:
[codex:1133124] 1044:bytes32 constant NORMAL_CONTROLLER = keccak256("NORMAL_CONTROLLER");
[codex:1133124] 1045:bytes32 constant FIAT_TOKEN_CONTROLLER = keccak256("FIAT_TOKEN_CONTROLLER");
[codex:1133124] 1046:
[codex:1133124] 1047:bytes32 constant LIMIT_HOOK = keccak256("LIMIT_HOOK");
[codex:1133124] 1048:bytes32 constant LIMIT_EXECUTION_HOOK = keccak256("LIMIT_EXECUTION_HOOK");
[codex:1133124] 1049:bytes32 constant LIMIT_EXECUTION_YIELD_HOOK = keccak256(
[codex:1133124] 1050: "LIMIT_EXECUTION_YIELD_HOOK"
[codex:1133124] 1051:);
[codex:1133124] 1052:bytes32 constant LIMIT_EXECUTION_YIELD_TOKEN_HOOK = keccak256(
[codex:1133124] 1053: "LIMIT_EXECUTION_YIELD_TOKEN_HOOK"
[codex:1133124] 1054:);
[codex:1133124] 1055:
[codex:1133124]
[codex:1133124] thinking
[codex:1133124] **Examining connectors and security concerns**
[codex:1133124] exec
[codex:1133124] /bin/bash -lc 'rg -n "delegatecall" AUDIT_BUNDLE.txt' in /tmp/codex-multi-nh1x7o2c exited 1 in 6ms:
[codex:1133124]
[codex:1133124]
[codex:1133124] thinking
[codex:1133124] **Analyzing contract call patterns and potential risks**
[codex:1133124]
[codex:1133124] I'm reviewing the use of external calls, permit signature handling, reentrancy protections, connector validations, unchecked ERC20 transfers, and bridging logic to spot inconsistencies or vulnerabilities; there are subtle points around signature timing, access control assumptions, unchecked token transfer returns, and hook call behaviors that could cause reverts or risks, so I'm systematically inspecting them.
[codex:1133124] exec
[codex:1133124] /bin/bash -lc "rg -n \"\\.transfer\\(|\\.transferFrom\\(|\\.approve\\(\" contracts/contracts" in /tmp/codex-multi-nh1x7o2c succeeded in 10ms:
[codex:1133124] contracts/contracts/bridge/BridgePermit.sol:37: ERC20(token).transferFrom(msg.sender, address(this), amount_);
[codex:1133124] contracts/contracts/bridge/BridgePermit.sol:38: ERC20(token).approve(address(vault), amount_);
[codex:1133124] contracts/contracts/bridge/StakeEasy.sol:105: EnumberableNft(nft).transferFrom(address(this), walletAddress, accountId);
[codex:1133124] contracts/contracts/bridge/StakeEasy.sol:123: ERC20(bridgedToken).approve(address(Unwrapper), amount);
[codex:1133124] contracts/contracts/bridge/StakeEasy.sol:127: ERC20(fUSDC).approve(address(spotMarket), amount);
[codex:1133124] contracts/contracts/bridge/StakeEasy.sol:132: ERC20(fxUSD).approve(address(polyCore), amountOut);
[codex:1133124] contracts/contracts/bridge/UnWrapper.sol:15: ERC20(baseToken).transferFrom(msg.sender, address(this), amount);
[codex:1133124] contracts/contracts/bridge/UnWrapper.sol:16: ERC20(wrappedToken).transfer(msg.sender, amount);
[codex:1133124] contracts/contracts/bridge/UnWrapper.sol:21: ERC20(wrappedToken).transferFrom(msg.sender, address(this), amount);
[codex:1133124] contracts/contracts/bridge/UnWrapper.sol:22: ERC20(baseToken).transfer(msg.sender, amount);
[codex:1133124] contracts/contracts/hooks/Controller_YieldLimitExecHook.sol:187: yieldToken__.transfer(receiver, consumedUnderlying);
[codex:1133124] contracts/contracts/hooks/Controller_YieldLimitExecHook.sol:270: yieldToken__.transfer(receiver, consumedUnderlying);
[codex:1133124] contracts/contracts/hooks/Vault_YieldLimitExecHook.sol:223: underlyingAsset__.transfer(vaultOrController, withdrawn);
[codex:1133124] contracts/contracts/hooks/Vault_YieldLimitExecHook.sol:235: underlyingAsset__.transfer(vaultOrController, withdrawn);
[codex:1133124]
[codex:1133124] thinking
[codex:1133124] **Preparing to extract accurate line numbers**
[codex:1133124] exec
[codex:1133124] /bin/bash -lc 'nl -ba contracts/contracts/bridge/BridgePermit.sol' in /tmp/codex-multi-nh1x7o2c succeeded in 5ms:
[codex:1133124] 1 pragma solidity 0.8.13;
[codex:1133124] 2
[codex:1133124] 3 import "lib/solmate/src/tokens/ERC20.sol";
[codex:1133124] 4 interface IVault {
[codex:1133124] 5 function bridge(
[codex:1133124] 6 address receiver_,
[codex:1133124] 7 uint256 amount_,
[codex:1133124] 8 uint256 msgGasLimit_,
[codex:1133124] 9 address connector_,
[codex:1133124] 10 bytes calldata execPayload_,
[codex:1133124] 11 bytes calldata options_
[codex:1133124] 12 ) external payable;
[codex:1133124] 13
[codex:1133124] 14 }
[codex:1133124] 15 contract BridgeWithPermit {
[codex:1133124] 16 IVault public vault;
[codex:1133124] 17 address public token;
[codex:1133124] 18
[codex:1133124] 19 constructor(address _vault, address _token) {
[codex:1133124] 20 token = _token;
[codex:1133124]
[codex:1133124]
[codex:1133124]
[codex:1133124]
[codex:1133124] thinking
[codex:1133124] **Analyzing unchecked token transfer risks**
[codex:1133124]
[codex:1133124] I’m unpacking how some contracts use ERC20 transfer functions without checking return values, risking silent failures—this can lead to mismatched accounting or unauthorized token minting, especially with non-standard tokens. I’m also exploring how a staking function allows anyone to stake contract-held tokens into arbitrary accounts, revealing a missing access control risk. Finally, I’m diving into complex yield token accounting logic where ABI encoding mismatches could cause serious calculation errors affecting share minting and pending amounts, potentially enabling exploit scenarios. There is a lot here! I’ll keep tracing these intricate flows to understand their impact better.
[codex:1133124] thinking
[codex:1133124] **Examining ABI encoding mismatches and accounting risks**
[codex:1133124]
[codex:1133124] I’m reviewing how inconsistent ABI encoding and decoding between source and destination hooks cause decoding errors or misinterpreted data, risking bridged funds getting stuck or accounting breaking. There’s also a deeper issue where yield token calculations rely on assumptions that may cause over-minting or denial-of-service if strategy asset values drop. Plus, I’m assessing how unchecked signature malleability and unrestricted staking calls further complicate security. It’s a lot to untangle!
[codex:1133124] thinking
[codex:1133124] **Analyzing token handling and reentrancy edge cases**
[codex:1133124]
[codex:1133124] I’m looking into how tokens can get stuck in StakeEasy after failed executions and how lack of access control on certain functions might allow misuse of those tokens. I’m also checking for unchecked ERC20 return values in Unwrapper that could cause issues and examining reentrancy protections around hooks and external calls. There’s quite a tangle of subtle contract behaviors around failures, allowances, and event semantics to sort through!
[codex:1133124] thinking
[codex:1133124] **Identifying key vulnerabilities and mismatches**
[codex:1133124]
[codex:1133124] I’m summarizing main issues such as unchecked ERC20 return values in Unwrapper and Vault hooks, missing access control in StakeEasy allowing misuse of contract-held tokens, and severe ABI encoding mismatches between source and destination hooks that can cause permanent fund locks. There’s also a critical pending share accounting bug that could enable exploit or denial of service. These highlight critical areas needing attention in this Solidity codebase.
[codex:1133124] exec
[codex:1133124] /bin/bash -lc "nl -ba contracts/contracts/hooks/Controller_YieldLimitExecHook.sol | sed -n '120,220p'" in /tmp/codex-multi-nh1x7o2c succeeded in 8ms:
[codex:1133124] 120
[codex:1133124] 121 if (params_.transferInfo.amount == 0)
[codex:1133124] 122 return (abi.encode(0, 0, 0, address(0)), transferInfo);
[codex:1133124] 123
[codex:1133124] 124 (uint256 consumedUnderlying, uint256 pendingUnderlying) = _limitDstHook(
[codex:1133124] 125 params_.connector,
[codex:1133124] 126 params_.transferInfo.amount
[codex:1133124] 127 );
[codex:1133124] 128 uint256 sharesToMint = yieldToken__.calculateMintAmount(
[codex:1133124] 129 params_.transferInfo.amount
[codex:1133124] 130 );
[codex:1133124] 131
[codex:1133124] 132 postHookData = abi.encode(
[codex:1133124] 133 consumedUnderlying,
[codex:1133124] 134 pendingUnderlying,
[codex:1133124] 135 params_.transferInfo.amount,
[codex:1133124] 136 params_.transferInfo.receiver
[codex:1133124] 137 );
[codex:1133124] 138
[codex:1133124] 139 transferInfo = params_.transferInfo;
[codex:1133124]
[codex:1133124] thinking
[codex:1133124] **Checking hook call mismatches**
[codex:1133124] exec
[codex:1133124] /bin/bash -lc "nl -ba contracts/contracts/hooks/Controller_YieldLimitExecHook.sol | sed -n '60,130p'" in /tmp/codex-multi-nh1x7o2c succeeded in 6ms:
[codex:1133124] 60 SrcPreHookCallParams calldata params_
[codex:1133124] 61 )
[codex:1133124] 62 public
[codex:1133124] 63 override
[codex:1133124] 64 notShutdown
[codex:1133124] 65 returns (TransferInfo memory transferInfo, bytes memory postSrcHookData)
[codex:1133124] 66 {
[codex:1133124] 67 super.srcPreHookCall(params_);
[codex:1133124] 68 uint256 amount = params_.transferInfo.amount;
[codex:1133124] 69 postSrcHookData = abi.encode(amount);
[codex:1133124] 70
[codex:1133124] 71 totalUnderlyingAssets -= amount;
[codex:1133124] 72 transferInfo = params_.transferInfo;
[codex:1133124] 73 transferInfo.amount = yieldToken__.convertToShares(amount);
[codex:1133124] 74 }
[codex:1133124] 75
[codex:1133124] 76 function srcPostHookCall(
[codex:1133124] 77 SrcPostHookCallParams memory srcPostHookCallParams_
[codex:1133124] 78 )
[codex:1133124] 79 public
[codex:1133124]
[codex:1133124] thinking
[codex:1133124] **Reviewing encode/decode mismatch**
[codex:1133124] exec
[codex:1133124] /bin/bash -lc "nl -ba contracts/contracts/hooks/Vault_YieldLimitExecHook.sol | sed -n '40,140p'" in /tmp/codex-multi-nh1x7o2c succeeded in 6ms:
[codex:1133124] 40 uint256 debtOutstanding
[codex:1133124] 41 );
[codex:1133124] 42 event ShutdownStateUpdated(bool shutdownState);
[codex:1133124] 43 event DebtRatioUpdated(uint256 debtRatio);
[codex:1133124] 44 event StrategyUpdated(address strategy);
[codex:1133124] 45 event RebalanceDelayUpdated(uint128 rebalanceDelay);
[codex:1133124] 46
[codex:1133124] 47 modifier notShutdown() {
[codex:1133124] 48 if (emergencyShutdown) revert VaultShutdown();
[codex:1133124] 49 _;
[codex:1133124] 50 }
[codex:1133124] 51
[codex:1133124] 52 constructor(
[codex:1133124] 53 uint256 debtRatio_,
[codex:1133124] 54 uint128 rebalanceDelay_,
[codex:1133124] 55 address strategy_,
[codex:1133124] 56 address underlyingAsset_,
[codex:1133124] 57 address vault_,
[codex:1133124] 58 address executionHelper_,
[codex:1133124] 59 bool useControllerPools_
[codex:1133124]
[codex:1133124] thinking
[codex:1133124] **Analyzing potential underflow and sync issues**
[codex:1133124] exec
[codex:1133124] /bin/bash -lc "nl -ba contracts/contracts/bridge/StakeEasy.sol | sed -n '70,170p'" in /tmp/codex-multi-nh1x7o2c succeeded in 6ms:
[codex:1133124] 70 address _Unwrapper,
[codex:1133124] 71 address _bridgedToken,
[codex:1133124] 72 address _nft,
[codex:1133124] 73 address _fUSDC,
[codex:1133124] 74 address _fxUSD
[codex:1133124] 75 ) {
[codex:1133124] 76 polyCore = IProxPolyCore(_polyCore);
[codex:1133124] 77 spotMarket = ISpotMarket(_spotMarket);
[codex:1133124] 78 Unwrapper = IWrapper(_Unwrapper);
[codex:1133124] 79 bridgedToken = _bridgedToken;
[codex:1133124] 80 nft = _nft;
[codex:1133124] 81 fUSDC = _fUSDC;
[codex:1133124] 82 fxUSD = _fxUSD;
[codex:1133124] 83 }
[codex:1133124] 84
[codex:1133124] 85 function onERC721Received(address, address, uint256, bytes calldata) external pure returns (bytes4) {
[codex:1133124] 86 return 0x150b7a02;
[codex:1133124] 87 }
[codex:1133124] 88
[codex:1133124] 89 function createAccountAndStake(
[codex:1133124]
[codex:1133124] thinking
[codex:1133124] **Noting lack of access control**
[codex:1133124] exec
[codex:1133124] /bin/bash -lc 'nl -ba contracts/contracts/bridge/UnWrapper.sol' in /tmp/codex-multi-nh1x7o2c succeeded in 6ms:
[codex:1133124] 1 pragma solidity 0.8.13;
[codex:1133124] 2
[codex:1133124] 3 import "lib/solmate/src/tokens/ERC20.sol";
[codex:1133124] 4
[codex:1133124] 5 contract Unwrapper {
[codex:1133124] 6 address public baseToken;
[codex:1133124] 7 address public wrappedToken;
[codex:1133124] 8
[codex:1133124] 9 constructor(address _baseToken, address _wrappedToken) {
[codex:1133124] 10 baseToken = _baseToken;
[codex:1133124] 11 wrappedToken = _wrappedToken;
[codex:1133124] 12 }
[codex:1133124] 13
[codex:1133124] 14 function wrap(uint256 amount) public {
[codex:1133124] 15 ERC20(baseToken).transferFrom(msg.sender, address(this), amount);
[codex:1133124] 16 ERC20(wrappedToken).transfer(msg.sender, amount);
[codex:1133124] 17 }
[codex:1133124] 18
[codex:1133124] 19 function unwrap(uint256 amount) public {
[codex:1133124] 20
[codex:1133124]
[codex:1133124] thinking
[codex:1133124] **Investigating Vault_YieldLimitExecHook transfers**
[codex:1133124] exec
[codex:1133124] /bin/bash -lc "nl -ba contracts/contracts/hooks/Vault_YieldLimitExecHook.sol | sed -n '210,260p'" in /tmp/codex-multi-nh1x7o2c succeeded in 6ms:
[codex:1133124] 210 ) external onlyOwner returns (uint256) {
[codex:1133124] 211 return _withdrawFromStrategy(underlyingAsset_);
[codex:1133124] 212 }
[codex:1133124] 213
[codex:1133124] 214 function _withdrawFromStrategy(
[codex:1133124] 215 uint256 underlyingAsset_
[codex:1133124] 216 ) internal returns (uint256 withdrawn) {
[codex:1133124] 217 uint256 preBalance = underlyingAsset__.balanceOf(address(this));
[codex:1133124] 218 strategy.withdraw(underlyingAsset_);
[codex:1133124] 219 withdrawn = underlyingAsset__.balanceOf(address(this)) - preBalance;
[codex:1133124] 220 totalIdle += withdrawn;
[codex:1133124] 221 totalDebt -= withdrawn;
[codex:1133124] 222
[codex:1133124] 223 underlyingAsset__.transfer(vaultOrController, withdrawn);
[codex:1133124] 224 emit WithdrawFromStrategy(withdrawn);
[codex:1133124] 225 }
[codex:1133124] 226
[codex:1133124] 227 function _withdrawAllFromStrategy() internal returns (uint256) {
[codex:1133124] 228 uint256 preBalance = underlyingAsset__.balanceOf(address(this));
[codex:1133124] 229 strategy.withdrawAll();
[codex:1133124]
[codex:1133124] thinking
[codex:1133124] **Summarizing vulnerability findings and crafting JSON output**
[codex:1133124]
[codex:1133124] I’m gathering all relevant details about encoding mismatches, pending share bugs, access control gaps, and unchecked ERC20 transfers from multiple contracts, and preparing a concise summary and structured JSON with severity, categories, evidence, and recommendations for each issue. This will clearly communicate the problems and suggest mitigation steps following the required output schema.
[codex:1133124] codex
[codex:1133124] {"no_findings":false,"summary":"Found four issues: ABI encoding/decoding mismatches in yield hooks (can revert inbound bridging or corrupt accounting), a pending-share math bug, missing access control in StakeEasy, and unchecked ERC20 transfers.","findings":[{"severity":"high","category":"other","title":"YieldLimitExec hooks encode/decode mismatch can revert inbound mints and corrupt accounting","exploit_scenario":"When these hooks are enabled, the source hook encodes `transferInfo.data` as `(bytes, bytes)` (controller) or `(uint256, bytes)` (vault), but the destination hook decodes it as `(uint256, bytes)` (controller) or `(bytes, bytes)` (vault). This ABI mismatch causes `dstPreHookCall` to revert for most payloads (locking funds that were burned/locked on the source chain), or to misinterpret offsets as `increasedUnderlying`, skewing pool limits and totalUnderlyingAssets. A malicious sender can craft payloads to maximize the misdecode or guarantee reverts.","recommendation":"Make the encoding/decoding types consistent on both ends. Use a single struct or explicit `(uint256 increasedUnderlying, bytes payload)` in both `srcPostHookCall` and `dstPreHookCall`, and add cross-chain payload encoding/decoding tests to prevent regressions.","evidence":"Controller hook encodes bytes but destination decodes uint256; vault hook encodes uint256 but destination decodes bytes.","locations":["contracts/contracts/hooks/Controller_YieldLimitExecHook.sol:87","contracts/contracts/hooks/Controller_YieldLimitExecHook.sol:110","contracts/contracts/hooks/Vault_YieldLimitExecHook.sol:104","contracts/contracts/hooks/Vault_YieldLimitExecHook.sol:133"]},{"severity":"medium","category":"math","title":"Pending-share calculation uses pendingUnderlying instead of consumedUnderlying","exploit_scenario":"When a transfer exceeds the limit, `pendingUnderlying > 0` and shares are minted to the hook. The hook computes `consumedShares` using `pendingUnderlying`, which inverts the split and stores `pendingShares` larger than the remaining shares. An attacker can then call `retry` and attempt to withdraw more shares than the hook actually holds, potentially draining shares reserved for other pending transfers or permanently blocking retries due to insufficient balance.","recommendation":"Compute `consumedShares` from `consumedUnderlying` (or compute `pendingShares` directly from `pendingUnderlying`), and add invariants to ensure `pendingShares` equals the hook’s remaining share balance.","evidence":"`consumedShares` is calculated using `pendingUnderlying` instead of `consumedUnderlying`, flipping the pending/consumed split.","locations":["contracts/contracts/hooks/Controller_YieldLimitExecHook.sol:175","contracts/contracts/hooks/Controller_YieldLimitExecHook.sol:179"]},{"severity":"medium","category":"access_control","title":"StakeEasy lets any caller spend contract-held tokens","exploit_scenario":"`createAccountAndStake` is permissionless and uses the contract’s own balances (bridgedToken/fUSDC/fxUSD) without pulling funds from the caller. If StakeEasy ever receives tokens (e.g., failed execution payload or accidental transfer), any user can call this function with their own `walletAddress` and stake those tokens into their account, effectively stealing assets.","recommendation":"Restrict `createAccountAndStake` to a trusted caller (bridge/hook/execution helper) or require `msg.sender == walletAddress` and pull tokens from the caller with `transferFrom` before staking. Consider adding a rescue function for unexpected balances.","evidence":"No access control on `createAccountAndStake`, and `_wrapAndStake` uses the contract’s balances with approvals to external contracts.","locations":["contracts/contracts/bridge/StakeEasy.sol:89","contracts/contracts/bridge/StakeEasy.sol:122"]},{"severity":"low","category":"other","title":"Unchecked ERC20 transfer/transferFrom can enable free unwrap or silent accounting drift","exploit_scenario":"If `baseToken`/`wrappedToken` (or the vault’s underlying asset) return `false` without reverting, `Unwrapper.wrap/unwrap` can send tokens out even when `transferFrom` failed, letting users obtain tokens without paying. In `Vault_YieldLimitExecHook`, transfers back to the vault can silently fail while accounting is updated, leading to asset/ledger divergence.","recommendation":"Use `SafeTransferLib.safeTransfer`/`safeTransferFrom` (or check return values explicitly) for all external token transfers.","evidence":"Raw ERC20 `transfer/transferFrom` calls are made without checking return values.","locations":["contracts/contracts/bridge/UnWrapper.sol:14","contracts/contracts/bridge/UnWrapper.sol:19","contracts/contracts/hooks/Vault_YieldLimitExecHook.sol:223","contracts/contracts/hooks/Vault_YieldLimitExecHook.sol:235"]}]}
[codex:1133124] tokens used
[codex:1133124] 169,821
[codex:1133124] {"no_findings":false,"summary":"Found four issues: ABI encoding/decoding mismatches in yield hooks (can revert inbound bridging or corrupt accounting), a pending-share math bug, missing access control in StakeEasy, and unchecked ERC20 transfers.","findings":[{"severity":"high","category":"other","title":"YieldLimitExec hooks encode/decode mismatch can revert inbound mints and corrupt accounting","exploit_scenario":"When these hooks are enabled, the source hook encodes `transferInfo.data` as `(bytes, bytes)` (controller) or `(uint256, bytes)` (vault), but the destination hook decodes it as `(uint256, bytes)` (controller) or `(bytes, bytes)` (vault). This ABI mismatch causes `dstPreHookCall` to revert for most payloads (locking funds that were burned/locked on the source chain), or to misinterpret offsets as `increasedUnderlying`, skewing pool limits and totalUnderlyingAssets. A malicious sender can craft payloads to maximize the misdecode or guarantee reverts.","recommendation":"Make the encoding/decoding types consistent on both ends. Use a single struct or explicit `(uint256 increasedUnderlying, bytes payload)` in both `srcPostHookCall` and `dstPreHookCall`, and add cross-chain payload encoding/decoding tests to prevent regressions.","evidence":"Controller hook encodes bytes but destination decodes uint256; vault hook encodes uint256 but destination decodes bytes.","locations":["contracts/contracts/hooks/Controller_YieldLimitExecHook.sol:87","contracts/contracts/hooks/Controller_YieldLimitExecHook.sol:110","contracts/contracts/hooks/Vault_YieldLimitExecHook.sol:104","contracts/contracts/hooks/Vault_YieldLimitExecHook.sol:133"]},{"severity":"medium","category":"math","title":"Pending-share calculation uses pendingUnderlying instead of consumedUnderlying","exploit_scenario":"When a transfer exceeds the limit, `pendingUnderlying > 0` and shares are minted to the hook. The hook computes `consumedShares` using `pendingUnderlying`, which inverts the split and stores `pendingShares` larger than the remaining shares. An attacker can then call `retry` and attempt to withdraw more shares than the hook actually holds, potentially draining shares reserved for other pending transfers or permanently blocking retries due to insufficient balance.","recommendation":"Compute `consumedShares` from `consumedUnderlying` (or compute `pendingShares` directly from `pendingUnderlying`), and add invariants to ensure `pendingShares` equals the hook’s remaining share balance.","evidence":"`consumedShares` is calculated using `pendingUnderlying` instead of `consumedUnderlying`, flipping the pending/consumed split.","locations":["contracts/contracts/hooks/Controller_YieldLimitExecHook.sol:175","contracts/contracts/hooks/Controller_YieldLimitExecHook.sol:179"]},{"severity":"medium","category":"access_control","title":"StakeEasy lets any caller spend contract-held tokens","exploit_scenario":"`createAccountAndStake` is permissionless and uses the contract’s own balances (bridgedToken/fUSDC/fxUSD) without pulling funds from the caller. If StakeEasy ever receives tokens (e.g., failed execution payload or accidental transfer), any user can call this function with their own `walletAddress` and stake those tokens into their account, effectively stealing assets.","recommendation":"Restrict `createAccountAndStake` to a trusted caller (bridge/hook/execution helper) or require `msg.sender == walletAddress` and pull tokens from the caller with `transferFrom` before staking. Consider adding a rescue function for unexpected balances.","evidence":"No access control on `createAccountAndStake`, and `_wrapAndStake` uses the contract’s balances with approvals to external contracts.","locations":["contracts/contracts/bridge/StakeEasy.sol:89","contracts/contracts/bridge/StakeEasy.sol:122"]},{"severity":"low","category":"other","title":"Unchecked ERC20 transfer/transferFrom can enable free unwrap or silent accounting drift","exploit_scenario":"If `baseToken`/`wrappedToken` (or the vault’s underlying asset) return `false` without reverting, `Unwrapper.wrap/unwrap` can send tokens out even when `transferFrom` failed, letting users obtain tokens without paying. In `Vault_YieldLimitExecHook`, transfers back to the vault can silently fail while accounting is updated, leading to asset/ledger divergence.","recommendation":"Use `SafeTransferLib.safeTransfer`/`safeTransferFrom` (or check return values explicitly) for all external token transfers.","evidence":"Raw ERC20 `transfer/transferFrom` calls are made without checking return values.","locations":["contracts/contracts/bridge/UnWrapper.sol:14","contracts/contracts/bridge/UnWrapper.sol:19","contracts/contracts/hooks/Vault_YieldLimitExecHook.sol:223","contracts/contracts/hooks/Vault_YieldLimitExecHook.sol:235"]}]}
{
"codex": {
"ran_at": "2025-12-28T18:00:12.284398+00:00",
"returncode": 0
},
"summary": "Found four issues: ABI encoding/decoding mismatches in yield hooks (can revert inbound bridging or corrupt accounting), a pending-share math bug, missing access control in StakeEasy, and unchecked ERC20 transfers.",
"raw_final": {
"summary": "Found four issues: ABI encoding/decoding mismatches in yield hooks (can revert inbound bridging or corrupt accounting), a pending-share math bug, missing access control in StakeEasy, and unchecked ERC20 transfers.",
"findings": [
{
"title": "YieldLimitExec hooks encode/decode mismatch can revert inbound mints and corrupt accounting",
"category": "other",
"evidence": "Controller hook encodes bytes but destination decodes uint256; vault hook encodes uint256 but destination decodes bytes.",
"severity": "high",
"locations": [
"contracts/contracts/hooks/Controller_YieldLimitExecHook.sol:87",
"contracts/contracts/hooks/Controller_YieldLimitExecHook.sol:110",
"contracts/contracts/hooks/Vault_YieldLimitExecHook.sol:104",
"contracts/contracts/hooks/Vault_YieldLimitExecHook.sol:133"
],
"recommendation": "Make the encoding/decoding types consistent on both ends. Use a single struct or explicit `(uint256 increasedUnderlying, bytes payload)` in both `srcPostHookCall` and `dstPreHookCall`, and add cross-chain payload encoding/decoding tests to prevent regressions.",
"exploit_scenario": "When these hooks are enabled, the source hook encodes `transferInfo.data` as `(bytes, bytes)` (controller) or `(uint256, bytes)` (vault), but the destination hook decodes it as `(uint256, bytes)` (controller) or `(bytes, bytes)` (vault). This ABI mismatch causes `dstPreHookCall` to revert for most payloads (locking funds that were burned/locked on the source chain), or to misinterpret offsets as `increasedUnderlying`, skewing pool limits and totalUnderlyingAssets. A malicious sender can craft payloads to maximize the misdecode or guarantee reverts."
},
{
"title": "Pending-share calculation uses pendingUnderlying instead of consumedUnderlying",
"category": "math",
"evidence": "`consumedShares` is calculated using `pendingUnderlying` instead of `consumedUnderlying`, flipping the pending/consumed split.",
"severity": "medium",
"locations": [
"contracts/contracts/hooks/Controller_YieldLimitExecHook.sol:175",
"contracts/contracts/hooks/Controller_YieldLimitExecHook.sol:179"
],
"recommendation": "Compute `consumedShares` from `consumedUnderlying` (or compute `pendingShares` directly from `pendingUnderlying`), and add invariants to ensure `pendingShares` equals the hook\u2019s remaining share balance.",
"exploit_scenario": "When a transfer exceeds the limit, `pendingUnderlying > 0` and shares are minted to the hook. The hook computes `consumedShares` using `pendingUnderlying`, which inverts the split and stores `pendingShares` larger than the remaining shares. An attacker can then call `retry` and attempt to withdraw more shares than the hook actually holds, potentially draining shares reserved for other pending transfers or permanently blocking retries due to insufficient balance."
},
{
"title": "StakeEasy lets any caller spend contract-held tokens",
"category": "access_control",
"evidence": "No access control on `createAccountAndStake`, and `_wrapAndStake` uses the contract\u2019s balances with approvals to external contracts.",
"severity": "medium",
"locations": [
"contracts/contracts/bridge/StakeEasy.sol:89",
"contracts/contracts/bridge/StakeEasy.sol:122"
],
"recommendation": "Restrict `createAccountAndStake` to a trusted caller (bridge/hook/execution helper) or require `msg.sender == walletAddress` and pull tokens from the caller with `transferFrom` before staking. Consider adding a rescue function for unexpected balances.",
"exploit_scenario": "`createAccountAndStake` is permissionless and uses the contract\u2019s own balances (bridgedToken/fUSDC/fxUSD) without pulling funds from the caller. If StakeEasy ever receives tokens (e.g., failed execution payload or accidental transfer), any user can call this function with their own `walletAddress` and stake those tokens into their account, effectively stealing assets."
},
{
"title": "Unchecked ERC20 transfer/transferFrom can enable free unwrap or silent accounting drift",
"category": "other",
"evidence": "Raw ERC20 `transfer/transferFrom` calls are made without checking return values.",
"severity": "low",
"locations": [
"contracts/contracts/bridge/UnWrapper.sol:14",
"contracts/contracts/bridge/UnWrapper.sol:19",
"contracts/contracts/hooks/Vault_YieldLimitExecHook.sol:223",
"contracts/contracts/hooks/Vault_YieldLimitExecHook.sol:235"
],
"recommendation": "Use `SafeTransferLib.safeTransfer`/`safeTransferFrom` (or check return values explicitly) for all external token transfers.",
"exploit_scenario": "If `baseToken`/`wrappedToken` (or the vault\u2019s underlying asset) return `false` without reverting, `Unwrapper.wrap/unwrap` can send tokens out even when `transferFrom` failed, letting users obtain tokens without paying. In `Vault_YieldLimitExecHook`, transfers back to the vault can silently fail while accounting is updated, leading to asset/ledger divergence."
}
],
"no_findings": false
},
"no_findings": false,
"schema_version": 1
}
00000000: PUSH1 0x80 00000002: PUSH1 0x40 00000004: MSTORE 00000005: PUSH1 0x04 00000007: CALLDATASIZE 00000008: LT 00000009: PUSH2 0x016a 0000000c: JUMPI 0000000d: PUSH1 0x00 0000000f: CALLDATALOAD 00000010: PUSH1 0xe0 00000012: SHR 00000013: DUP1 00000014: PUSH4 0x8da5cb5b 00000019: GT 0000001a: PUSH2 0x00cb 0000001d: JUMPI 0000001e: DUP1 0000001f: PUSH4 0xd547741f 00000024: GT 00000025: PUSH2 0x007f 00000028: JUMPI 00000029: DUP1 0000002a: PUSH4 0xf290aafa 0000002f: GT 00000030: PUSH2 0x0059 00000033: JUMPI 00000034: DUP1 00000035: PUSH4 0xf290aafa 0000003a: EQ 0000003b: PUSH2 0x03f9 0000003e: JUMPI 0000003f: DUP1 00000040: PUSH4 0xfc0c546a 00000045: EQ 00000046: PUSH2 0x0419 00000049: JUMPI 0000004a: DUP1 0000004b: PUSH4 0xfc3a7b98 00000050: EQ 00000051: PUSH2 0x044d 00000054: JUMPI 00000055: PUSH1 0x00 00000057: DUP1 00000058: REVERT 00000059: JUMPDEST 0000005a: DUP1 0000005b: PUSH4 0xd547741f 00000060: EQ 00000061: PUSH2 0x0389 00000064: JUMPI 00000065: DUP1 00000066: PUSH4 0xe272ad3f 0000006b: EQ 0000006c: PUSH2 0x03a9 0000006f: JUMPI 00000070: DUP1 00000071: PUSH4 0xe9ee1eaf 00000076: EQ 00000077: PUSH2 0x03c9 0000007a: JUMPI 0000007b: PUSH1 0x00 0000007d: DUP1 0000007e: REVERT 0000007f: JUMPDEST 00000080: DUP1 00000081: PUSH4 0x9dc7b023 00000086: GT 00000087: PUSH2 0x00b0 0000008a: JUMPI 0000008b: DUP1 0000008c: PUSH4 0x9dc7b023 00000091: EQ 00000092: PUSH2 0x0336 00000095: JUMPI 00000096: DUP1 00000097: PUSH4 0xaad48d80 0000009c: EQ 0000009d: PUSH2 0x0356 000000a0: JUMPI 000000a1: DUP1 000000a2: PUSH4 0xb23d5436 000000a7: EQ 000000a8: PUSH2 0x0376 000000ab: JUMPI 000000ac: PUSH1 0x00 000000ae: DUP1 000000af: REVERT 000000b0: JUMPDEST 000000b1: DUP1 000000b2: PUSH4 0x8da5cb5b 000000b7: EQ 000000b8: PUSH2 0x02db 000000bb: JUMPI 000000bc: DUP1 000000bd: PUSH4 0x91d14854 000000c2: EQ 000000c3: PUSH2 0x0306 000000c6: JUMPI 000000c7: PUSH1 0x00 000000c9: DUP1 000000ca: REVERT 000000cb: JUMPDEST 000000cc: DUP1 000000cd: PUSH4 0x4b0a8854 000000d2: GT 000000d3: PUSH2 0x0122 000000d6: JUMPI 000000d7: DUP1 000000d8: PUSH4 0x6ccae054 000000dd: GT 000000de: PUSH2 0x0107 000000e1: JUMPI 000000e2: DUP1 000000e3: PUSH4 0x6ccae054 000000e8: EQ 000000e9: PUSH2 0x027b 000000ec: JUMPI 000000ed: DUP1 000000ee: PUSH4 0x70bab2c0 000000f3: EQ 000000f4: PUSH2 0x029b 000000f7: JUMPI 000000f8: DUP1 000000f9: PUSH4 0x873ea755 000000fe: EQ 000000ff: PUSH2 0x02c8 00000102: JUMPI 00000103: PUSH1 0x00 00000105: DUP1 00000106: REVERT 00000107: JUMPDEST 00000108: DUP1 00000109: PUSH4 0x4b0a8854 0000010e: EQ 0000010f: PUSH2 0x022e 00000112: JUMPI 00000113: DUP1 00000114: PUSH4 0x5b94db27 00000119: EQ 0000011a: PUSH2 0x025b 0000011d: JUMPI 0000011e: PUSH1 0x00 00000120: DUP1 00000121: REVERT 00000122: JUMPDEST 00000123: DUP1 00000124: PUSH4 0x2f2ff15d 00000129: GT 0000012a: PUSH2 0x0153 0000012d: JUMPI 0000012e: DUP1 0000012f: PUSH4 0x2f2ff15d 00000134: EQ 00000135: PUSH2 0x01e4 00000138: JUMPI 00000139: DUP1 0000013a: PUSH4 0x3bd1adec 0000013f: EQ 00000140: PUSH2 0x0206 00000143: JUMPI 00000144: DUP1 00000145: PUSH4 0x405e720a 0000014a: EQ 0000014b: PUSH2 0x021b 0000014e: JUMPI 0000014f: PUSH1 0x00 00000151: DUP1 00000152: REVERT 00000153: JUMPDEST 00000154: DUP1 00000155: PUSH4 0x20f99c0a 0000015a: EQ 0000015b: PUSH2 0x016f 0000015e: JUMPI 0000015f: DUP1 00000160: PUSH4 0x2421e155 00000165: EQ 00000166: PUSH2 0x01c0 00000169: JUMPI 0000016a: JUMPDEST 0000016b: PUSH1 0x00 0000016d: DUP1 0000016e: REVERT 0000016f: JUMPDEST 00000170: CALLVALUE 00000171: DUP1 00000172: ISZERO 00000173: PUSH2 0x017b 00000176: JUMPI 00000177: PUSH1 0x00 00000179: DUP1 0000017a: REVERT 0000017b: JUMPDEST 0000017c: POP 0000017d: PUSH1 0x02 0000017f: SLOAD 00000180: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000195: AND 00000196: JUMPDEST 00000197: PUSH1 0x40 00000199: MLOAD 0000019a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000001af: SWAP1 000001b0: SWAP2 000001b1: AND 000001b2: DUP2 000001b3: MSTORE 000001b4: PUSH1 0x20 000001b6: ADD 000001b7: JUMPDEST 000001b8: PUSH1 0x40 000001ba: MLOAD 000001bb: DUP1 000001bc: SWAP2 000001bd: SUB 000001be: SWAP1 000001bf: RETURN 000001c0: JUMPDEST 000001c1: CALLVALUE 000001c2: DUP1 000001c3: ISZERO 000001c4: PUSH2 0x01cc 000001c7: JUMPI 000001c8: PUSH1 0x00 000001ca: DUP1 000001cb: REVERT 000001cc: JUMPDEST 000001cd: POP 000001ce: PUSH2 0x01d6 000001d1: PUSH1 0x04 000001d3: SLOAD 000001d4: DUP2 000001d5: JUMP 000001d6: JUMPDEST 000001d7: PUSH1 0x40 000001d9: MLOAD 000001da: SWAP1 000001db: DUP2 000001dc: MSTORE 000001dd: PUSH1 0x20 000001df: ADD 000001e0: PUSH2 0x01b7 000001e3: JUMP 000001e4: JUMPDEST 000001e5: CALLVALUE 000001e6: DUP1 000001e7: ISZERO 000001e8: PUSH2 0x01f0 000001eb: JUMPI 000001ec: PUSH1 0x00 000001ee: DUP1 000001ef: REVERT 000001f0: JUMPDEST 000001f1: POP 000001f2: PUSH2 0x0204 000001f5: PUSH2 0x01ff 000001f8: CALLDATASIZE 000001f9: PUSH1 0x04 000001fb: PUSH2 0x2848 000001fe: JUMP 000001ff: JUMPDEST 00000200: PUSH2 0x046d 00000203: JUMP 00000204: JUMPDEST 00000205: STOP 00000206: JUMPDEST 00000207: CALLVALUE 00000208: DUP1 00000209: ISZERO 0000020a: PUSH2 0x0212 0000020d: JUMPI 0000020e: PUSH1 0x00 00000210: DUP1 00000211: REVERT 00000212: JUMPDEST 00000213: POP 00000214: PUSH2 0x0204 00000217: PUSH2 0x04cc 0000021a: JUMP 0000021b: JUMPDEST 0000021c: PUSH2 0x0204 0000021f: PUSH2 0x0229 00000222: CALLDATASIZE 00000223: PUSH1 0x04 00000225: PUSH2 0x28ba 00000228: JUMP 00000229: JUMPDEST 0000022a: PUSH2 0x0528 0000022d: JUMP 0000022e: JUMPDEST 0000022f: CALLVALUE 00000230: DUP1 00000231: ISZERO 00000232: PUSH2 0x023a 00000235: JUMPI 00000236: PUSH1 0x00 00000238: DUP1 00000239: REVERT 0000023a: JUMPDEST 0000023b: POP 0000023c: PUSH2 0x024e 0000023f: PUSH2 0x0249 00000242: CALLDATASIZE 00000243: PUSH1 0x04 00000245: PUSH2 0x2962 00000248: JUMP 00000249: JUMPDEST 0000024a: PUSH2 0x0679 0000024d: JUMP 0000024e: JUMPDEST 0000024f: PUSH1 0x40 00000251: MLOAD 00000252: PUSH2 0x01b7 00000255: SWAP2 00000256: SWAP1 00000257: PUSH2 0x29f5 0000025a: JUMP 0000025b: JUMPDEST 0000025c: CALLVALUE 0000025d: DUP1 0000025e: ISZERO 0000025f: PUSH2 0x0267 00000262: JUMPI 00000263: PUSH1 0x00 00000265: DUP1 00000266: REVERT 00000267: JUMPDEST 00000268: POP 00000269: PUSH2 0x0204 0000026c: PUSH2 0x0276 0000026f: CALLDATASIZE 00000270: PUSH1 0x04 00000272: PUSH2 0x2962 00000275: JUMP 00000276: JUMPDEST 00000277: PUSH2 0x0713 0000027a: JUMP 0000027b: JUMPDEST 0000027c: CALLVALUE 0000027d: DUP1 0000027e: ISZERO 0000027f: PUSH2 0x0287 00000282: JUMPI 00000283: PUSH1 0x00 00000285: DUP1 00000286: REVERT 00000287: JUMPDEST 00000288: POP 00000289: PUSH2 0x0204 0000028c: PUSH2 0x0296 0000028f: CALLDATASIZE 00000290: PUSH1 0x04 00000292: PUSH2 0x2a08 00000295: JUMP 00000296: JUMPDEST 00000297: PUSH2 0x07d3 0000029a: JUMP 0000029b: JUMPDEST 0000029c: CALLVALUE 0000029d: DUP1 0000029e: ISZERO 0000029f: PUSH2 0x02a7 000002a2: JUMPI 000002a3: PUSH1 0x00 000002a5: DUP1 000002a6: REVERT 000002a7: JUMPDEST 000002a8: POP 000002a9: PUSH1 0x05 000002ab: SLOAD 000002ac: PUSH2 0x0196 000002af: SWAP1 000002b0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000002c5: AND 000002c6: DUP2 000002c7: JUMP 000002c8: JUMPDEST 000002c9: PUSH2 0x0204 000002cc: PUSH2 0x02d6 000002cf: CALLDATASIZE 000002d0: PUSH1 0x04 000002d2: PUSH2 0x2b0d 000002d5: JUMP 000002d6: JUMPDEST 000002d7: PUSH2 0x0871 000002da: JUMP 000002db: JUMPDEST 000002dc: CALLVALUE 000002dd: DUP1 000002de: ISZERO 000002df: PUSH2 0x02e7 000002e2: JUMPI 000002e3: PUSH1 0x00 000002e5: DUP1 000002e6: REVERT 000002e7: JUMPDEST 000002e8: POP 000002e9: PUSH1 0x01 000002eb: SLOAD 000002ec: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000301: AND 00000302: PUSH2 0x0196 00000305: JUMP 00000306: JUMPDEST 00000307: CALLVALUE 00000308: DUP1 00000309: ISZERO 0000030a: PUSH2 0x0312 0000030d: JUMPI 0000030e: PUSH1 0x00 00000310: DUP1 00000311: REVERT 00000312: JUMPDEST 00000313: POP 00000314: PUSH2 0x0326 00000317: PUSH2 0x0321 0000031a: CALLDATASIZE 0000031b: PUSH1 0x04 0000031d: PUSH2 0x2848 00000320: JUMP 00000321: JUMPDEST 00000322: PUSH2 0x097a 00000325: JUMP 00000326: JUMPDEST 00000327: PUSH1 0x40 00000329: MLOAD 0000032a: SWAP1 0000032b: ISZERO 0000032c: ISZERO 0000032d: DUP2 0000032e: MSTORE 0000032f: PUSH1 0x20 00000331: ADD 00000332: PUSH2 0x01b7 00000335: JUMP 00000336: JUMPDEST 00000337: CALLVALUE 00000338: DUP1 00000339: ISZERO 0000033a: PUSH2 0x0342 0000033d: JUMPI 0000033e: PUSH1 0x00 00000340: DUP1 00000341: REVERT 00000342: JUMPDEST 00000343: POP 00000344: PUSH2 0x0204 00000347: PUSH2 0x0351 0000034a: CALLDATASIZE 0000034b: PUSH1 0x04 0000034d: PUSH2 0x2ba9 00000350: JUMP 00000351: JUMPDEST 00000352: PUSH2 0x09b5 00000355: JUMP 00000356: JUMPDEST 00000357: CALLVALUE 00000358: DUP1 00000359: ISZERO 0000035a: PUSH2 0x0362 0000035d: JUMPI 0000035e: PUSH1 0x00 00000360: DUP1 00000361: REVERT 00000362: JUMPDEST 00000363: POP 00000364: PUSH2 0x0204 00000367: PUSH2 0x0371 0000036a: CALLDATASIZE 0000036b: PUSH1 0x04 0000036d: PUSH2 0x2be5 00000370: JUMP 00000371: JUMPDEST 00000372: PUSH2 0x0a5f 00000375: JUMP 00000376: JUMPDEST 00000377: PUSH2 0x0204 0000037a: PUSH2 0x0384 0000037d: CALLDATASIZE 0000037e: PUSH1 0x04 00000380: PUSH2 0x2c2b 00000383: JUMP 00000384: JUMPDEST 00000385: PUSH2 0x0cd4 00000388: JUMP 00000389: JUMPDEST 0000038a: CALLVALUE 0000038b: DUP1 0000038c: ISZERO 0000038d: PUSH2 0x0395 00000390: JUMPI 00000391: PUSH1 0x00 00000393: DUP1 00000394: REVERT 00000395: JUMPDEST 00000396: POP 00000397: PUSH2 0x0204 0000039a: PUSH2 0x03a4 0000039d: CALLDATASIZE 0000039e: PUSH1 0x04 000003a0: PUSH2 0x2848 000003a3: JUMP 000003a4: JUMPDEST 000003a5: PUSH2 0x0dbc 000003a8: JUMP 000003a9: JUMPDEST 000003aa: CALLVALUE 000003ab: DUP1 000003ac: ISZERO 000003ad: PUSH2 0x03b5 000003b0: JUMPI 000003b1: PUSH1 0x00 000003b3: DUP1 000003b4: REVERT 000003b5: JUMPDEST 000003b6: POP 000003b7: PUSH2 0x0204 000003ba: PUSH2 0x03c4 000003bd: CALLDATASIZE 000003be: PUSH1 0x04 000003c0: PUSH2 0x2d4b 000003c3: JUMP 000003c4: JUMPDEST 000003c5: PUSH2 0x0e17 000003c8: JUMP 000003c9: JUMPDEST 000003ca: CALLVALUE 000003cb: DUP1 000003cc: ISZERO 000003cd: PUSH2 0x03d5 000003d0: JUMPI 000003d1: PUSH1 0x00 000003d3: DUP1 000003d4: REVERT 000003d5: JUMPDEST 000003d6: POP 000003d7: PUSH2 0x0326 000003da: PUSH2 0x03e4 000003dd: CALLDATASIZE 000003de: PUSH1 0x04 000003e0: PUSH2 0x2962 000003e3: JUMP 000003e4: JUMPDEST 000003e5: PUSH1 0x08 000003e7: PUSH1 0x20 000003e9: MSTORE 000003ea: PUSH1 0x00 000003ec: SWAP1 000003ed: DUP2 000003ee: MSTORE 000003ef: PUSH1 0x40 000003f1: SWAP1 000003f2: KECCAK256 000003f3: SLOAD 000003f4: PUSH1 0xff 000003f6: AND 000003f7: DUP2 000003f8: JUMP 000003f9: JUMPDEST 000003fa: CALLVALUE 000003fb: DUP1 000003fc: ISZERO 000003fd: PUSH2 0x0405 00000400: JUMPI 00000401: PUSH1 0x00 00000403: DUP1 00000404: REVERT 00000405: JUMPDEST 00000406: POP 00000407: PUSH2 0x024e 0000040a: PUSH2 0x0414 0000040d: CALLDATASIZE 0000040e: PUSH1 0x04 00000410: PUSH2 0x2db7 00000413: JUMP 00000414: JUMPDEST 00000415: PUSH2 0x0fd1 00000418: JUMP 00000419: JUMPDEST 0000041a: CALLVALUE 0000041b: DUP1 0000041c: ISZERO 0000041d: PUSH2 0x0425 00000420: JUMPI 00000421: PUSH1 0x00 00000423: DUP1 00000424: REVERT 00000425: JUMPDEST 00000426: POP 00000427: PUSH2 0x0196 0000042a: PUSH32 0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 0000044b: DUP2 0000044c: JUMP 0000044d: JUMPDEST 0000044e: CALLVALUE 0000044f: DUP1 00000450: ISZERO 00000451: PUSH2 0x0459 00000454: JUMPI 00000455: PUSH1 0x00 00000457: DUP1 00000458: REVERT 00000459: JUMPDEST 0000045a: POP 0000045b: PUSH2 0x01d6 0000045e: PUSH2 0x0468 00000461: CALLDATASIZE 00000462: PUSH1 0x04 00000464: PUSH2 0x2dd0 00000467: JUMP 00000468: JUMPDEST 00000469: PUSH2 0x0fea 0000046c: JUMP 0000046d: JUMPDEST 0000046e: PUSH1 0x01 00000470: SLOAD 00000471: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000486: AND 00000487: CALLER 00000488: EQ 00000489: PUSH2 0x04be 0000048c: JUMPI 0000048d: PUSH1 0x40 0000048f: MLOAD 00000490: PUSH32 0x5fc483c500000000000000000000000000000000000000000000000000000000 000004b1: DUP2 000004b2: MSTORE 000004b3: PUSH1 0x04 000004b5: ADD 000004b6: PUSH1 0x40 000004b8: MLOAD 000004b9: DUP1 000004ba: SWAP2 000004bb: SUB 000004bc: SWAP1 000004bd: REVERT 000004be: JUMPDEST 000004bf: PUSH2 0x04c8 000004c2: DUP3 000004c3: DUP3 000004c4: PUSH2 0x108b 000004c7: JUMP 000004c8: JUMPDEST 000004c9: POP 000004ca: POP 000004cb: JUMP 000004cc: JUMPDEST 000004cd: PUSH1 0x02 000004cf: SLOAD 000004d0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000004e5: AND 000004e6: CALLER 000004e7: EQ 000004e8: PUSH2 0x051d 000004eb: JUMPI 000004ec: PUSH1 0x40 000004ee: MLOAD 000004ef: PUSH32 0x7c91ccdd00000000000000000000000000000000000000000000000000000000 00000510: DUP2 00000511: MSTORE 00000512: PUSH1 0x04 00000514: ADD 00000515: PUSH1 0x40 00000517: MLOAD 00000518: DUP1 00000519: SWAP2 0000051a: SUB 0000051b: SWAP1 0000051c: REVERT 0000051d: JUMPDEST 0000051e: PUSH2 0x0526 00000521: CALLER 00000522: PUSH2 0x1111 00000525: JUMP 00000526: JUMPDEST 00000527: JUMP 00000528: JUMPDEST 00000529: PUSH1 0x00 0000052b: SLOAD 0000052c: PUSH1 0x01 0000052e: EQ 0000052f: PUSH2 0x0599 00000532: JUMPI 00000533: PUSH1 0x40 00000535: MLOAD 00000536: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00000557: DUP2 00000558: MSTORE 00000559: PUSH1 0x20 0000055b: PUSH1 0x04 0000055d: DUP3 0000055e: ADD 0000055f: MSTORE 00000560: PUSH1 0x0a 00000562: PUSH1 0x24 00000564: DUP3 00000565: ADD 00000566: MSTORE 00000567: PUSH32 0x5245454e5452414e435900000000000000000000000000000000000000000000 00000588: PUSH1 0x44 0000058a: DUP3 0000058b: ADD 0000058c: MSTORE 0000058d: PUSH1 0x64 0000058f: ADD 00000590: JUMPDEST 00000591: PUSH1 0x40 00000593: MLOAD 00000594: DUP1 00000595: SWAP2 00000596: SUB 00000597: SWAP1 00000598: REVERT 00000599: JUMPDEST 0000059a: PUSH1 0x02 0000059c: PUSH1 0x00 0000059e: DUP2 0000059f: SWAP1 000005a0: SSTORE 000005a1: POP 000005a2: PUSH1 0x00 000005a4: DUP1 000005a5: PUSH2 0x0612 000005a8: DUP8 000005a9: PUSH1 0x40 000005ab: MLOAD 000005ac: DUP1 000005ad: PUSH1 0x60 000005af: ADD 000005b0: PUSH1 0x40 000005b2: MSTORE 000005b3: DUP1 000005b4: DUP14 000005b5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000005ca: AND 000005cb: DUP2 000005cc: MSTORE 000005cd: PUSH1 0x20 000005cf: ADD 000005d0: DUP13 000005d1: DUP2 000005d2: MSTORE 000005d3: PUSH1 0x20 000005d5: ADD 000005d6: DUP10 000005d7: DUP10 000005d8: DUP1 000005d9: DUP1 000005da: PUSH1 0x1f 000005dc: ADD 000005dd: PUSH1 0x20 000005df: DUP1 000005e0: SWAP2 000005e1: DIV 000005e2: MUL 000005e3: PUSH1 0x20 000005e5: ADD 000005e6: PUSH1 0x40 000005e8: MLOAD 000005e9: SWAP1 000005ea: DUP2 000005eb: ADD 000005ec: PUSH1 0x40 000005ee: MSTORE 000005ef: DUP1 000005f0: SWAP4 000005f1: SWAP3 000005f2: SWAP2 000005f3: SWAP1 000005f4: DUP2 000005f5: DUP2 000005f6: MSTORE 000005f7: PUSH1 0x20 000005f9: ADD 000005fa: DUP4 000005fb: DUP4 000005fc: DUP1 000005fd: DUP3 000005fe: DUP5 000005ff: CALLDATACOPY 00000600: PUSH1 0x00 00000602: SWAP3 00000603: ADD 00000604: SWAP2 00000605: SWAP1 00000606: SWAP2 00000607: MSTORE 00000608: POP 00000609: POP 0000060a: POP 0000060b: SWAP2 0000060c: MSTORE 0000060d: POP 0000060e: PUSH2 0x118a 00000611: JUMP 00000612: JUMPDEST 00000613: SWAP2 00000614: POP 00000615: SWAP2 00000616: POP 00000617: PUSH2 0x0623 0000061a: DUP3 0000061b: PUSH1 0x20 0000061d: ADD 0000061e: MLOAD 0000061f: PUSH2 0x13e9 00000622: JUMP 00000623: JUMPDEST 00000624: PUSH2 0x0668 00000627: DUP9 00000628: DUP9 00000629: DUP7 0000062a: DUP7 0000062b: DUP1 0000062c: DUP1 0000062d: PUSH1 0x1f 0000062f: ADD 00000630: PUSH1 0x20 00000632: DUP1 00000633: SWAP2 00000634: DIV 00000635: MUL 00000636: PUSH1 0x20 00000638: ADD 00000639: PUSH1 0x40 0000063b: MLOAD 0000063c: SWAP1 0000063d: DUP2 0000063e: ADD 0000063f: PUSH1 0x40 00000641: MSTORE 00000642: DUP1 00000643: SWAP4 00000644: SWAP3 00000645: SWAP2 00000646: SWAP1 00000647: DUP2 00000648: DUP2 00000649: MSTORE 0000064a: PUSH1 0x20 0000064c: ADD 0000064d: DUP4 0000064e: DUP4 0000064f: DUP1 00000650: DUP3 00000651: DUP5 00000652: CALLDATACOPY 00000653: PUSH1 0x00 00000655: SWAP3 00000656: ADD 00000657: SWAP2 00000658: SWAP1 00000659: SWAP2 0000065a: MSTORE 0000065b: POP 0000065c: DUP8 0000065d: SWAP3 0000065e: POP 0000065f: DUP9 00000660: SWAP2 00000661: POP 00000662: PUSH2 0x148c 00000665: SWAP1 00000666: POP 00000667: JUMP 00000668: JUMPDEST 00000669: POP 0000066a: POP 0000066b: PUSH1 0x01 0000066d: PUSH1 0x00 0000066f: SSTORE 00000670: POP 00000671: POP 00000672: POP 00000673: POP 00000674: POP 00000675: POP 00000676: POP 00000677: POP 00000678: JUMP 00000679: JUMPDEST 0000067a: PUSH1 0x07 0000067c: PUSH1 0x20 0000067e: MSTORE 0000067f: PUSH1 0x00 00000681: SWAP1 00000682: DUP2 00000683: MSTORE 00000684: PUSH1 0x40 00000686: SWAP1 00000687: KECCAK256 00000688: DUP1 00000689: SLOAD 0000068a: PUSH2 0x0692 0000068d: SWAP1 0000068e: PUSH2 0x2e05 00000691: JUMP 00000692: JUMPDEST 00000693: DUP1 00000694: PUSH1 0x1f 00000696: ADD 00000697: PUSH1 0x20 00000699: DUP1 0000069a: SWAP2 0000069b: DIV 0000069c: MUL 0000069d: PUSH1 0x20 0000069f: ADD 000006a0: PUSH1 0x40 000006a2: MLOAD 000006a3: SWAP1 000006a4: DUP2 000006a5: ADD 000006a6: PUSH1 0x40 000006a8: MSTORE 000006a9: DUP1 000006aa: SWAP3 000006ab: SWAP2 000006ac: SWAP1 000006ad: DUP2 000006ae: DUP2 000006af: MSTORE 000006b0: PUSH1 0x20 000006b2: ADD 000006b3: DUP3 000006b4: DUP1 000006b5: SLOAD 000006b6: PUSH2 0x06be 000006b9: SWAP1 000006ba: PUSH2 0x2e05 000006bd: JUMP 000006be: JUMPDEST 000006bf: DUP1 000006c0: ISZERO 000006c1: PUSH2 0x070b 000006c4: JUMPI 000006c5: DUP1 000006c6: PUSH1 0x1f 000006c8: LT 000006c9: PUSH2 0x06e0 000006cc: JUMPI 000006cd: PUSH2 0x0100 000006d0: DUP1 000006d1: DUP4 000006d2: SLOAD 000006d3: DIV 000006d4: MUL 000006d5: DUP4 000006d6: MSTORE 000006d7: SWAP2 000006d8: PUSH1 0x20 000006da: ADD 000006db: SWAP2 000006dc: PUSH2 0x070b 000006df: JUMP 000006e0: JUMPDEST 000006e1: DUP3 000006e2: ADD 000006e3: SWAP2 000006e4: SWAP1 000006e5: PUSH1 0x00 000006e7: MSTORE 000006e8: PUSH1 0x20 000006ea: PUSH1 0x00 000006ec: KECCAK256 000006ed: SWAP1 000006ee: JUMPDEST 000006ef: DUP2 000006f0: SLOAD 000006f1: DUP2 000006f2: MSTORE 000006f3: SWAP1 000006f4: PUSH1 0x01 000006f6: ADD 000006f7: SWAP1 000006f8: PUSH1 0x20 000006fa: ADD 000006fb: DUP1 000006fc: DUP4 000006fd: GT 000006fe: PUSH2 0x06ee 00000701: JUMPI 00000702: DUP3 00000703: SWAP1 00000704: SUB 00000705: PUSH1 0x1f 00000707: AND 00000708: DUP3 00000709: ADD 0000070a: SWAP2 0000070b: JUMPDEST 0000070c: POP 0000070d: POP 0000070e: POP 0000070f: POP 00000710: POP 00000711: DUP2 00000712: JUMP 00000713: JUMPDEST 00000714: PUSH1 0x01 00000716: SLOAD 00000717: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000072c: AND 0000072d: CALLER 0000072e: EQ 0000072f: PUSH2 0x0764 00000732: JUMPI 00000733: PUSH1 0x40 00000735: MLOAD 00000736: PUSH32 0x5fc483c500000000000000000000000000000000000000000000000000000000 00000757: DUP2 00000758: MSTORE 00000759: PUSH1 0x04 0000075b: ADD 0000075c: PUSH1 0x40 0000075e: MLOAD 0000075f: DUP1 00000760: SWAP2 00000761: SUB 00000762: SWAP1 00000763: REVERT 00000764: JUMPDEST 00000765: PUSH1 0x02 00000767: DUP1 00000768: SLOAD 00000769: PUSH32 0xffffffffffffffffffffffff0000000000000000000000000000000000000000 0000078a: AND 0000078b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000007a0: DUP4 000007a1: AND 000007a2: SWAP1 000007a3: DUP2 000007a4: OR 000007a5: SWAP1 000007a6: SWAP2 000007a7: SSTORE 000007a8: PUSH1 0x40 000007aa: MLOAD 000007ab: PUSH32 0x906a1c6bd7e3091ea86693dd029a831c19049ce77f1dce2ce0bab1cacbabce22 000007cc: SWAP1 000007cd: PUSH1 0x00 000007cf: SWAP1 000007d0: LOG2 000007d1: POP 000007d2: JUMP 000007d3: JUMPDEST 000007d4: CALLER 000007d5: PUSH1 0x00 000007d7: SWAP1 000007d8: DUP2 000007d9: MSTORE 000007da: PUSH32 0x271b3e2292ab6fd3ff496cd98d6d375af02f11568a701741f48bba7789f13a70 000007fb: PUSH1 0x20 000007fd: MSTORE 000007fe: PUSH1 0x40 00000800: SWAP1 00000801: KECCAK256 00000802: SLOAD 00000803: PUSH32 0xc4c453d647953c0fd35db5a34ee76e60fb4abc3a8fb891a25936b70b38f29253 00000824: SWAP1 00000825: PUSH1 0xff 00000827: AND 00000828: PUSH2 0x0860 0000082b: JUMPI 0000082c: PUSH1 0x40 0000082e: MLOAD 0000082f: PUSH32 0x962f633300000000000000000000000000000000000000000000000000000000 00000850: DUP2 00000851: MSTORE 00000852: PUSH1 0x04 00000854: DUP2 00000855: ADD 00000856: DUP3 00000857: SWAP1 00000858: MSTORE 00000859: PUSH1 0x24 0000085b: ADD 0000085c: PUSH2 0x0590 0000085f: JUMP 00000860: JUMPDEST 00000861: PUSH2 0x086b 00000864: DUP5 00000865: DUP5 00000866: DUP5 00000867: PUSH2 0x17d1 0000086a: JUMP 0000086b: JUMPDEST 0000086c: POP 0000086d: POP 0000086e: POP 0000086f: POP 00000870: JUMP 00000871: JUMPDEST 00000872: PUSH1 0x00 00000874: SLOAD 00000875: PUSH1 0x01 00000877: EQ 00000878: PUSH2 0x08dd 0000087b: JUMPI 0000087c: PUSH1 0x40 0000087e: MLOAD 0000087f: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 000008a0: DUP2 000008a1: MSTORE 000008a2: PUSH1 0x20 000008a4: PUSH1 0x04 000008a6: DUP3 000008a7: ADD 000008a8: MSTORE 000008a9: PUSH1 0x0a 000008ab: PUSH1 0x24 000008ad: DUP3 000008ae: ADD 000008af: MSTORE 000008b0: PUSH32 0x5245454e5452414e435900000000000000000000000000000000000000000000 000008d1: PUSH1 0x44 000008d3: DUP3 000008d4: ADD 000008d5: MSTORE 000008d6: PUSH1 0x64 000008d8: ADD 000008d9: PUSH2 0x0590 000008dc: JUMP 000008dd: JUMPDEST 000008de: PUSH1 0x02 000008e0: PUSH1 0x00 000008e2: DUP2 000008e3: SWAP1 000008e4: SSTORE 000008e5: POP 000008e6: PUSH1 0x00 000008e8: DUP1 000008e9: PUSH1 0x00 000008eb: DUP1 000008ec: DUP5 000008ed: DUP1 000008ee: PUSH1 0x20 000008f0: ADD 000008f1: SWAP1 000008f2: MLOAD 000008f3: DUP2 000008f4: ADD 000008f5: SWAP1 000008f6: PUSH2 0x08ff 000008f9: SWAP2 000008fa: SWAP1 000008fb: PUSH2 0x2e9d 000008fe: JUMP 000008ff: JUMPDEST 00000900: SWAP4 00000901: POP 00000902: SWAP4 00000903: POP 00000904: SWAP4 00000905: POP 00000906: SWAP4 00000907: POP 00000908: PUSH1 0x00 0000090a: PUSH1 0x40 0000090c: MLOAD 0000090d: DUP1 0000090e: PUSH1 0x60 00000910: ADD 00000911: PUSH1 0x40 00000913: MSTORE 00000914: DUP1 00000915: DUP7 00000916: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000092b: AND 0000092c: DUP2 0000092d: MSTORE 0000092e: PUSH1 0x20 00000930: ADD 00000931: DUP6 00000932: DUP2 00000933: MSTORE 00000934: PUSH1 0x20 00000936: ADD 00000937: DUP4 00000938: DUP2 00000939: MSTORE 0000093a: POP 0000093b: SWAP1 0000093c: POP 0000093d: PUSH1 0x60 0000093f: PUSH2 0x0948 00000942: DUP9 00000943: DUP4 00000944: PUSH2 0x18c6 00000947: JUMP 00000948: JUMPDEST 00000949: DUP1 0000094a: MLOAD 0000094b: PUSH1 0x20 0000094d: DUP3 0000094e: ADD 0000094f: MLOAD 00000950: SWAP2 00000951: SWAP5 00000952: POP 00000953: SWAP2 00000954: SWAP3 00000955: POP 00000956: PUSH2 0x095f 00000959: SWAP2 0000095a: SWAP1 0000095b: PUSH2 0x1b49 0000095e: JUMP 0000095f: JUMPDEST 00000960: PUSH2 0x096b 00000963: DUP6 00000964: DUP6 00000965: DUP4 00000966: DUP6 00000967: PUSH2 0x1bfd 0000096a: JUMP 0000096b: JUMPDEST 0000096c: POP 0000096d: POP 0000096e: PUSH1 0x01 00000970: PUSH1 0x00 00000972: SSTORE 00000973: POP 00000974: POP 00000975: POP 00000976: POP 00000977: POP 00000978: POP 00000979: JUMP 0000097a: JUMPDEST 0000097b: PUSH1 0x00 0000097d: DUP3 0000097e: DUP2 0000097f: MSTORE 00000980: PUSH1 0x03 00000982: PUSH1 0x20 00000984: SWAP1 00000985: DUP2 00000986: MSTORE 00000987: PUSH1 0x40 00000989: DUP1 0000098a: DUP4 0000098b: KECCAK256 0000098c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000009a1: DUP6 000009a2: AND 000009a3: DUP5 000009a4: MSTORE 000009a5: SWAP1 000009a6: SWAP2 000009a7: MSTORE 000009a8: DUP2 000009a9: KECCAK256 000009aa: SLOAD 000009ab: PUSH1 0xff 000009ad: AND 000009ae: JUMPDEST 000009af: SWAP4 000009b0: SWAP3 000009b1: POP 000009b2: POP 000009b3: POP 000009b4: JUMP 000009b5: JUMPDEST 000009b6: PUSH1 0x00 000009b8: SLOAD 000009b9: PUSH1 0x01 000009bb: EQ 000009bc: PUSH2 0x0a21 000009bf: JUMPI 000009c0: PUSH1 0x40 000009c2: MLOAD 000009c3: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 000009e4: DUP2 000009e5: MSTORE 000009e6: PUSH1 0x20 000009e8: PUSH1 0x04 000009ea: DUP3 000009eb: ADD 000009ec: MSTORE 000009ed: PUSH1 0x0a 000009ef: PUSH1 0x24 000009f1: DUP3 000009f2: ADD 000009f3: MSTORE 000009f4: PUSH32 0x5245454e5452414e435900000000000000000000000000000000000000000000 00000a15: PUSH1 0x44 00000a17: DUP3 00000a18: ADD 00000a19: MSTORE 00000a1a: PUSH1 0x64 00000a1c: ADD 00000a1d: PUSH2 0x0590 00000a20: JUMP 00000a21: JUMPDEST 00000a22: PUSH1 0x02 00000a24: PUSH1 0x00 00000a26: SWAP1 00000a27: DUP2 00000a28: SSTORE 00000a29: DUP1 00000a2a: PUSH2 0x0a33 00000a2d: DUP5 00000a2e: DUP5 00000a2f: PUSH2 0x1e39 00000a32: JUMP 00000a33: JUMPDEST 00000a34: SWAP2 00000a35: POP 00000a36: SWAP2 00000a37: POP 00000a38: PUSH2 0x0a49 00000a3b: DUP2 00000a3c: PUSH1 0x00 00000a3e: ADD 00000a3f: MLOAD 00000a40: DUP3 00000a41: PUSH1 0x20 00000a43: ADD 00000a44: MLOAD 00000a45: PUSH2 0x1b49 00000a48: JUMP 00000a49: JUMPDEST 00000a4a: PUSH2 0x0a54 00000a4d: DUP5 00000a4e: DUP5 00000a4f: DUP5 00000a50: PUSH2 0x2141 00000a53: JUMP 00000a54: JUMPDEST 00000a55: POP 00000a56: POP 00000a57: PUSH1 0x01 00000a59: PUSH1 0x00 00000a5b: SSTORE 00000a5c: POP 00000a5d: POP 00000a5e: JUMP 00000a5f: JUMPDEST 00000a60: PUSH1 0x01 00000a62: SLOAD 00000a63: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000a78: AND 00000a79: CALLER 00000a7a: EQ 00000a7b: PUSH2 0x0ab0 00000a7e: JUMPI 00000a7f: PUSH1 0x40 00000a81: MLOAD 00000a82: PUSH32 0x5fc483c500000000000000000000000000000000000000000000000000000000 00000aa3: DUP2 00000aa4: MSTORE 00000aa5: PUSH1 0x04 00000aa7: ADD 00000aa8: PUSH1 0x40 00000aaa: MLOAD 00000aab: DUP1 00000aac: SWAP2 00000aad: SUB 00000aae: SWAP1 00000aaf: REVERT 00000ab0: JUMPDEST 00000ab1: PUSH32 0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 00000ad2: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000ae7: AND 00000ae8: PUSH20 0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee 00000afd: EQ 00000afe: PUSH2 0x0c5a 00000b01: JUMPI 00000b02: PUSH1 0x05 00000b04: SLOAD 00000b05: PUSH1 0x40 00000b07: MLOAD 00000b08: PUSH32 0xdd62ed3e00000000000000000000000000000000000000000000000000000000 00000b29: DUP2 00000b2a: MSTORE 00000b2b: ADDRESS 00000b2c: PUSH1 0x04 00000b2e: DUP3 00000b2f: ADD 00000b30: MSTORE 00000b31: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000b46: SWAP2 00000b47: DUP3 00000b48: AND 00000b49: PUSH1 0x24 00000b4b: DUP3 00000b4c: ADD 00000b4d: MSTORE 00000b4e: PUSH1 0x00 00000b50: SWAP2 00000b51: PUSH32 0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 00000b72: AND 00000b73: SWAP1 00000b74: PUSH4 0xdd62ed3e 00000b79: SWAP1 00000b7a: PUSH1 0x44 00000b7c: ADD 00000b7d: PUSH1 0x20 00000b7f: PUSH1 0x40 00000b81: MLOAD 00000b82: DUP1 00000b83: DUP4 00000b84: SUB 00000b85: DUP2 00000b86: DUP7 00000b87: GAS 00000b88: STATICCALL 00000b89: ISZERO 00000b8a: DUP1 00000b8b: ISZERO 00000b8c: PUSH2 0x0b99 00000b8f: JUMPI 00000b90: RETURNDATASIZE 00000b91: PUSH1 0x00 00000b93: DUP1 00000b94: RETURNDATACOPY 00000b95: RETURNDATASIZE 00000b96: PUSH1 0x00 00000b98: REVERT 00000b99: JUMPDEST 00000b9a: POP 00000b9b: POP 00000b9c: POP 00000b9d: POP 00000b9e: PUSH1 0x40 00000ba0: MLOAD 00000ba1: RETURNDATASIZE 00000ba2: PUSH1 0x1f 00000ba4: NOT 00000ba5: PUSH1 0x1f 00000ba7: DUP3 00000ba8: ADD 00000ba9: AND 00000baa: DUP3 00000bab: ADD 00000bac: DUP1 00000bad: PUSH1 0x40 00000baf: MSTORE 00000bb0: POP 00000bb1: DUP2 00000bb2: ADD 00000bb3: SWAP1 00000bb4: PUSH2 0x0bbd 00000bb7: SWAP2 00000bb8: SWAP1 00000bb9: PUSH2 0x2f02 00000bbc: JUMP 00000bbd: JUMPDEST 00000bbe: GT 00000bbf: ISZERO 00000bc0: PUSH2 0x0c09 00000bc3: JUMPI 00000bc4: PUSH1 0x05 00000bc6: SLOAD 00000bc7: PUSH2 0x0c09 00000bca: SWAP1 00000bcb: PUSH32 0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 00000bec: SWAP1 00000bed: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000c02: AND 00000c03: PUSH1 0x00 00000c05: PUSH2 0x23fc 00000c08: JUMP 00000c09: JUMPDEST 00000c0a: DUP1 00000c0b: ISZERO 00000c0c: PUSH2 0x0c5a 00000c0f: JUMPI 00000c10: PUSH2 0x0c5a 00000c13: PUSH32 0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 00000c34: DUP4 00000c35: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 00000c56: PUSH2 0x23fc 00000c59: JUMP 00000c5a: JUMPDEST 00000c5b: PUSH1 0x05 00000c5d: DUP1 00000c5e: SLOAD 00000c5f: PUSH32 0xffffffffffffffffffffffff0000000000000000000000000000000000000000 00000c80: AND 00000c81: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000c96: DUP5 00000c97: AND 00000c98: SWAP1 00000c99: DUP2 00000c9a: OR 00000c9b: SWAP1 00000c9c: SWAP2 00000c9d: SSTORE 00000c9e: PUSH1 0x40 00000ca0: MLOAD 00000ca1: SWAP1 00000ca2: DUP2 00000ca3: MSTORE 00000ca4: PUSH32 0xe816c20840d998c8612f9b624b91687a80510eeb293cb09f7637379f6d73342d 00000cc5: SWAP1 00000cc6: PUSH1 0x20 00000cc8: ADD 00000cc9: PUSH1 0x40 00000ccb: MLOAD 00000ccc: DUP1 00000ccd: SWAP2 00000cce: SUB 00000ccf: SWAP1 00000cd0: LOG1 00000cd1: POP 00000cd2: POP 00000cd3: JUMP 00000cd4: JUMPDEST 00000cd5: PUSH1 0x40 00000cd7: MLOAD 00000cd8: PUSH32 0xd505accf00000000000000000000000000000000000000000000000000000000 00000cf9: DUP2 00000cfa: MSTORE 00000cfb: CALLER 00000cfc: PUSH1 0x04 00000cfe: DUP3 00000cff: ADD 00000d00: MSTORE 00000d01: ADDRESS 00000d02: PUSH1 0x24 00000d04: DUP3 00000d05: ADD 00000d06: MSTORE 00000d07: PUSH1 0x44 00000d09: DUP2 00000d0a: ADD 00000d0b: DUP13 00000d0c: SWAP1 00000d0d: MSTORE 00000d0e: PUSH1 0x64 00000d10: DUP2 00000d11: ADD 00000d12: DUP6 00000d13: SWAP1 00000d14: MSTORE 00000d15: PUSH1 0xff 00000d17: DUP5 00000d18: AND 00000d19: PUSH1 0x84 00000d1b: DUP3 00000d1c: ADD 00000d1d: MSTORE 00000d1e: PUSH1 0xa4 00000d20: DUP2 00000d21: ADD 00000d22: DUP4 00000d23: SWAP1 00000d24: MSTORE 00000d25: PUSH1 0xc4 00000d27: DUP2 00000d28: ADD 00000d29: DUP3 00000d2a: SWAP1 00000d2b: MSTORE 00000d2c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000d41: PUSH32 0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 00000d62: AND 00000d63: SWAP1 00000d64: PUSH4 0xd505accf 00000d69: SWAP1 00000d6a: PUSH1 0xe4 00000d6c: ADD 00000d6d: PUSH1 0x00 00000d6f: PUSH1 0x40 00000d71: MLOAD 00000d72: DUP1 00000d73: DUP4 00000d74: SUB 00000d75: DUP2 00000d76: PUSH1 0x00 00000d78: DUP8 00000d79: DUP1 00000d7a: EXTCODESIZE 00000d7b: ISZERO 00000d7c: DUP1 00000d7d: ISZERO 00000d7e: PUSH2 0x0d86 00000d81: JUMPI 00000d82: PUSH1 0x00 00000d84: DUP1 00000d85: REVERT 00000d86: JUMPDEST 00000d87: POP 00000d88: GAS 00000d89: CALL 00000d8a: ISZERO 00000d8b: DUP1 00000d8c: ISZERO 00000d8d: PUSH2 0x0d9a 00000d90: JUMPI 00000d91: RETURNDATASIZE 00000d92: PUSH1 0x00 00000d94: DUP1 00000d95: RETURNDATACOPY 00000d96: RETURNDATASIZE 00000d97: PUSH1 0x00 00000d99: REVERT 00000d9a: JUMPDEST 00000d9b: POP 00000d9c: POP 00000d9d: POP 00000d9e: POP 00000d9f: PUSH2 0x0dae 00000da2: DUP13 00000da3: DUP13 00000da4: DUP13 00000da5: DUP13 00000da6: DUP13 00000da7: DUP13 00000da8: DUP13 00000da9: DUP13 00000daa: PUSH2 0x0528 00000dad: JUMP 00000dae: JUMPDEST 00000daf: POP 00000db0: POP 00000db1: POP 00000db2: POP 00000db3: POP 00000db4: POP 00000db5: POP 00000db6: POP 00000db7: POP 00000db8: POP 00000db9: POP 00000dba: POP 00000dbb: JUMP 00000dbc: JUMPDEST 00000dbd: PUSH1 0x01 00000dbf: SLOAD 00000dc0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000dd5: AND 00000dd6: CALLER 00000dd7: EQ 00000dd8: PUSH2 0x0e0d 00000ddb: JUMPI 00000ddc: PUSH1 0x40 00000dde: MLOAD 00000ddf: PUSH32 0x5fc483c500000000000000000000000000000000000000000000000000000000 00000e00: DUP2 00000e01: MSTORE 00000e02: PUSH1 0x04 00000e04: ADD 00000e05: PUSH1 0x40 00000e07: MLOAD 00000e08: DUP1 00000e09: SWAP2 00000e0a: SUB 00000e0b: SWAP1 00000e0c: REVERT 00000e0d: JUMPDEST 00000e0e: PUSH2 0x04c8 00000e11: DUP3 00000e12: DUP3 00000e13: PUSH2 0x24cb 00000e16: JUMP 00000e17: JUMPDEST 00000e18: PUSH1 0x01 00000e1a: SLOAD 00000e1b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000e30: AND 00000e31: CALLER 00000e32: EQ 00000e33: PUSH2 0x0e68 00000e36: JUMPI 00000e37: PUSH1 0x40 00000e39: MLOAD 00000e3a: PUSH32 0x5fc483c500000000000000000000000000000000000000000000000000000000 00000e5b: DUP2 00000e5c: MSTORE 00000e5d: PUSH1 0x04 00000e5f: ADD 00000e60: PUSH1 0x40 00000e62: MLOAD 00000e63: DUP1 00000e64: SWAP2 00000e65: SUB 00000e66: SWAP1 00000e67: REVERT 00000e68: JUMPDEST 00000e69: DUP3 00000e6a: PUSH1 0x00 00000e6c: JUMPDEST 00000e6d: DUP2 00000e6e: DUP2 00000e6f: LT 00000e70: ISZERO 00000e71: PUSH2 0x0fc9 00000e74: JUMPI 00000e75: DUP4 00000e76: DUP4 00000e77: DUP3 00000e78: DUP2 00000e79: DUP2 00000e7a: LT 00000e7b: PUSH2 0x0e86 00000e7e: JUMPI 00000e7f: PUSH2 0x0e86 00000e82: PUSH2 0x2f1b 00000e85: JUMP 00000e86: JUMPDEST 00000e87: SWAP1 00000e88: POP 00000e89: PUSH1 0x20 00000e8b: MUL 00000e8c: ADD 00000e8d: PUSH1 0x20 00000e8f: DUP2 00000e90: ADD 00000e91: SWAP1 00000e92: PUSH2 0x0e9b 00000e95: SWAP2 00000e96: SWAP1 00000e97: PUSH2 0x2f4a 00000e9a: JUMP 00000e9b: JUMPDEST 00000e9c: PUSH1 0x08 00000e9e: PUSH1 0x00 00000ea0: DUP9 00000ea1: DUP9 00000ea2: DUP6 00000ea3: DUP2 00000ea4: DUP2 00000ea5: LT 00000ea6: PUSH2 0x0eb1 00000ea9: JUMPI 00000eaa: PUSH2 0x0eb1 00000ead: PUSH2 0x2f1b 00000eb0: JUMP 00000eb1: JUMPDEST 00000eb2: SWAP1 00000eb3: POP 00000eb4: PUSH1 0x20 00000eb6: MUL 00000eb7: ADD 00000eb8: PUSH1 0x20 00000eba: DUP2 00000ebb: ADD 00000ebc: SWAP1 00000ebd: PUSH2 0x0ec6 00000ec0: SWAP2 00000ec1: SWAP1 00000ec2: PUSH2 0x2962 00000ec5: JUMP 00000ec6: JUMPDEST 00000ec7: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000edc: AND 00000edd: DUP2 00000ede: MSTORE 00000edf: PUSH1 0x20 00000ee1: DUP2 00000ee2: ADD 00000ee3: SWAP2 00000ee4: SWAP1 00000ee5: SWAP2 00000ee6: MSTORE 00000ee7: PUSH1 0x40 00000ee9: ADD 00000eea: PUSH1 0x00 00000eec: KECCAK256 00000eed: DUP1 00000eee: SLOAD 00000eef: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 00000f10: AND 00000f11: SWAP2 00000f12: ISZERO 00000f13: ISZERO 00000f14: SWAP2 00000f15: SWAP1 00000f16: SWAP2 00000f17: OR 00000f18: SWAP1 00000f19: SSTORE 00000f1a: PUSH32 0x857309f1a328784e9fc9749624be5d32fd8e7afab58e7fe9a218dd613a37f15c 00000f3b: DUP7 00000f3c: DUP7 00000f3d: DUP4 00000f3e: DUP2 00000f3f: DUP2 00000f40: LT 00000f41: PUSH2 0x0f4c 00000f44: JUMPI 00000f45: PUSH2 0x0f4c 00000f48: PUSH2 0x2f1b 00000f4b: JUMP 00000f4c: JUMPDEST 00000f4d: SWAP1 00000f4e: POP 00000f4f: PUSH1 0x20 00000f51: MUL 00000f52: ADD 00000f53: PUSH1 0x20 00000f55: DUP2 00000f56: ADD 00000f57: SWAP1 00000f58: PUSH2 0x0f61 00000f5b: SWAP2 00000f5c: SWAP1 00000f5d: PUSH2 0x2962 00000f60: JUMP 00000f61: JUMPDEST 00000f62: DUP6 00000f63: DUP6 00000f64: DUP5 00000f65: DUP2 00000f66: DUP2 00000f67: LT 00000f68: PUSH2 0x0f73 00000f6b: JUMPI 00000f6c: PUSH2 0x0f73 00000f6f: PUSH2 0x2f1b 00000f72: JUMP 00000f73: JUMPDEST 00000f74: SWAP1 00000f75: POP 00000f76: PUSH1 0x20 00000f78: MUL 00000f79: ADD 00000f7a: PUSH1 0x20 00000f7c: DUP2 00000f7d: ADD 00000f7e: SWAP1 00000f7f: PUSH2 0x0f88 00000f82: SWAP2 00000f83: SWAP1 00000f84: PUSH2 0x2f4a 00000f87: JUMP 00000f88: JUMPDEST 00000f89: PUSH1 0x40 00000f8b: DUP1 00000f8c: MLOAD 00000f8d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000fa2: SWAP1 00000fa3: SWAP4 00000fa4: AND 00000fa5: DUP4 00000fa6: MSTORE 00000fa7: SWAP1 00000fa8: ISZERO 00000fa9: ISZERO 00000faa: PUSH1 0x20 00000fac: DUP4 00000fad: ADD 00000fae: MSTORE 00000faf: ADD 00000fb0: PUSH1 0x40 00000fb2: MLOAD 00000fb3: DUP1 00000fb4: SWAP2 00000fb5: SUB 00000fb6: SWAP1 00000fb7: LOG1 00000fb8: DUP1 00000fb9: PUSH2 0x0fc1 00000fbc: DUP2 00000fbd: PUSH2 0x2f94 00000fc0: JUMP 00000fc1: JUMPDEST 00000fc2: SWAP2 00000fc3: POP 00000fc4: POP 00000fc5: PUSH2 0x0e6c 00000fc8: JUMP 00000fc9: JUMPDEST 00000fca: POP 00000fcb: POP 00000fcc: POP 00000fcd: POP 00000fce: POP 00000fcf: POP 00000fd0: JUMP 00000fd1: JUMPDEST 00000fd2: PUSH1 0x06 00000fd4: PUSH1 0x20 00000fd6: MSTORE 00000fd7: PUSH1 0x00 00000fd9: SWAP1 00000fda: DUP2 00000fdb: MSTORE 00000fdc: PUSH1 0x40 00000fde: SWAP1 00000fdf: KECCAK256 00000fe0: DUP1 00000fe1: SLOAD 00000fe2: PUSH2 0x0692 00000fe5: SWAP1 00000fe6: PUSH2 0x2e05 00000fe9: JUMP 00000fea: JUMPDEST 00000feb: PUSH1 0x40 00000fed: MLOAD 00000fee: PUSH32 0x666758ca00000000000000000000000000000000000000000000000000000000 0000100f: DUP2 00001010: MSTORE 00001011: PUSH1 0x04 00001013: DUP2 00001014: ADD 00001015: DUP4 00001016: SWAP1 00001017: MSTORE 00001018: PUSH1 0x24 0000101a: DUP2 0000101b: ADD 0000101c: DUP3 0000101d: SWAP1 0000101e: MSTORE 0000101f: PUSH1 0x00 00001021: SWAP1 00001022: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001037: DUP6 00001038: AND 00001039: SWAP1 0000103a: PUSH4 0x666758ca 0000103f: SWAP1 00001040: PUSH1 0x44 00001042: ADD 00001043: PUSH1 0x20 00001045: PUSH1 0x40 00001047: MLOAD 00001048: DUP1 00001049: DUP4 0000104a: SUB 0000104b: DUP2 0000104c: DUP7 0000104d: GAS 0000104e: STATICCALL 0000104f: ISZERO 00001050: DUP1 00001051: ISZERO 00001052: PUSH2 0x105f 00001055: JUMPI 00001056: RETURNDATASIZE 00001057: PUSH1 0x00 00001059: DUP1 0000105a: RETURNDATACOPY 0000105b: RETURNDATASIZE 0000105c: PUSH1 0x00 0000105e: REVERT 0000105f: JUMPDEST 00001060: POP 00001061: POP 00001062: POP 00001063: POP 00001064: PUSH1 0x40 00001066: MLOAD 00001067: RETURNDATASIZE 00001068: PUSH1 0x1f 0000106a: NOT 0000106b: PUSH1 0x1f 0000106d: DUP3 0000106e: ADD 0000106f: AND 00001070: DUP3 00001071: ADD 00001072: DUP1 00001073: PUSH1 0x40 00001075: MSTORE 00001076: POP 00001077: DUP2 00001078: ADD 00001079: SWAP1 0000107a: PUSH2 0x1083 0000107d: SWAP2 0000107e: SWAP1 0000107f: PUSH2 0x2f02 00001082: JUMP 00001083: JUMPDEST 00001084: SWAP5 00001085: SWAP4 00001086: POP 00001087: POP 00001088: POP 00001089: POP 0000108a: JUMP 0000108b: JUMPDEST 0000108c: PUSH1 0x00 0000108e: DUP3 0000108f: DUP2 00001090: MSTORE 00001091: PUSH1 0x03 00001093: PUSH1 0x20 00001095: SWAP1 00001096: DUP2 00001097: MSTORE 00001098: PUSH1 0x40 0000109a: DUP1 0000109b: DUP4 0000109c: KECCAK256 0000109d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000010b2: DUP6 000010b3: AND 000010b4: DUP1 000010b5: DUP6 000010b6: MSTORE 000010b7: SWAP3 000010b8: MSTORE 000010b9: DUP1 000010ba: DUP4 000010bb: KECCAK256 000010bc: DUP1 000010bd: SLOAD 000010be: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 000010df: AND 000010e0: PUSH1 0x01 000010e2: OR 000010e3: SWAP1 000010e4: SSTORE 000010e5: MLOAD 000010e6: SWAP1 000010e7: SWAP2 000010e8: DUP5 000010e9: SWAP2 000010ea: PUSH32 0x2ae6a113c0ed5b78a53413ffbb7679881f11145ccfba4fb92e863dfcd5a1d2f3 0000110b: SWAP2 0000110c: SWAP1 0000110d: LOG3 0000110e: POP 0000110f: POP 00001110: JUMP 00001111: JUMPDEST 00001112: PUSH1 0x01 00001114: DUP1 00001115: SLOAD 00001116: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000112b: DUP4 0000112c: AND 0000112d: PUSH32 0xffffffffffffffffffffffff0000000000000000000000000000000000000000 0000114e: SWAP2 0000114f: DUP3 00001150: AND 00001151: DUP2 00001152: OR 00001153: SWAP1 00001154: SWAP3 00001155: SSTORE 00001156: PUSH1 0x02 00001158: DUP1 00001159: SLOAD 0000115a: SWAP1 0000115b: SWAP2 0000115c: AND 0000115d: SWAP1 0000115e: SSTORE 0000115f: PUSH1 0x40 00001161: MLOAD 00001162: PUSH32 0xfbe19c9b601f5ee90b44c7390f3fa2319eba01762d34ee372aeafd59b25c7f87 00001183: SWAP1 00001184: PUSH1 0x00 00001186: SWAP1 00001187: LOG2 00001188: POP 00001189: JUMP 0000118a: JUMPDEST 0000118b: PUSH1 0x40 0000118d: DUP1 0000118e: MLOAD 0000118f: PUSH1 0x60 00001191: DUP1 00001192: DUP3 00001193: ADD 00001194: DUP4 00001195: MSTORE 00001196: PUSH1 0x00 00001198: DUP1 00001199: DUP4 0000119a: MSTORE 0000119b: PUSH1 0x20 0000119d: DUP4 0000119e: ADD 0000119f: MSTORE 000011a0: SWAP2 000011a1: DUP2 000011a2: ADD 000011a3: SWAP2 000011a4: SWAP1 000011a5: SWAP2 000011a6: MSTORE 000011a7: DUP2 000011a8: MLOAD 000011a9: PUSH1 0x60 000011ab: SWAP1 000011ac: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000011c1: AND 000011c2: PUSH2 0x11f7 000011c5: JUMPI 000011c6: PUSH1 0x40 000011c8: MLOAD 000011c9: PUSH32 0x96bbcf1e00000000000000000000000000000000000000000000000000000000 000011ea: DUP2 000011eb: MSTORE 000011ec: PUSH1 0x04 000011ee: ADD 000011ef: PUSH1 0x40 000011f1: MLOAD 000011f2: DUP1 000011f3: SWAP2 000011f4: SUB 000011f5: SWAP1 000011f6: REVERT 000011f7: JUMPDEST 000011f8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000120d: DUP5 0000120e: AND 0000120f: PUSH1 0x00 00001211: SWAP1 00001212: DUP2 00001213: MSTORE 00001214: PUSH1 0x08 00001216: PUSH1 0x20 00001218: MSTORE 00001219: PUSH1 0x40 0000121b: SWAP1 0000121c: KECCAK256 0000121d: SLOAD 0000121e: PUSH1 0xff 00001220: AND 00001221: PUSH2 0x1256 00001224: JUMPI 00001225: PUSH1 0x40 00001227: MLOAD 00001228: PUSH32 0x5b0a758300000000000000000000000000000000000000000000000000000000 00001249: DUP2 0000124a: MSTORE 0000124b: PUSH1 0x04 0000124d: ADD 0000124e: PUSH1 0x40 00001250: MLOAD 00001251: DUP1 00001252: SWAP2 00001253: SUB 00001254: SWAP1 00001255: REVERT 00001256: JUMPDEST 00001257: PUSH32 0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 00001278: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000128d: AND 0000128e: PUSH20 0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee 000012a3: EQ 000012a4: DUP1 000012a5: ISZERO 000012a6: PUSH2 0x12b2 000012a9: JUMPI 000012aa: POP 000012ab: DUP3 000012ac: PUSH1 0x20 000012ae: ADD 000012af: MLOAD 000012b0: CALLVALUE 000012b1: LT 000012b2: JUMPDEST 000012b3: ISZERO 000012b4: PUSH2 0x12e9 000012b7: JUMPI 000012b8: PUSH1 0x40 000012ba: MLOAD 000012bb: PUSH32 0x78f38f7600000000000000000000000000000000000000000000000000000000 000012dc: DUP2 000012dd: MSTORE 000012de: PUSH1 0x04 000012e0: ADD 000012e1: PUSH1 0x40 000012e3: MLOAD 000012e4: DUP1 000012e5: SWAP2 000012e6: SUB 000012e7: SWAP1 000012e8: REVERT 000012e9: JUMPDEST 000012ea: PUSH1 0x05 000012ec: SLOAD 000012ed: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001302: AND 00001303: ISZERO 00001304: PUSH2 0x13e2 00001307: JUMPI 00001308: PUSH1 0x05 0000130a: SLOAD 0000130b: PUSH1 0x40 0000130d: DUP1 0000130e: MLOAD 0000130f: PUSH1 0x60 00001311: DUP2 00001312: ADD 00001313: DUP3 00001314: MSTORE 00001315: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000132a: DUP8 0000132b: DUP2 0000132c: AND 0000132d: DUP3 0000132e: MSTORE 0000132f: CALLER 00001330: PUSH1 0x20 00001332: DUP4 00001333: ADD 00001334: MSTORE 00001335: DUP2 00001336: DUP4 00001337: ADD 00001338: DUP8 00001339: SWAP1 0000133a: MSTORE 0000133b: SWAP2 0000133c: MLOAD 0000133d: PUSH32 0xf59ad99000000000000000000000000000000000000000000000000000000000 0000135e: DUP2 0000135f: MSTORE 00001360: SWAP2 00001361: SWAP1 00001362: SWAP3 00001363: AND 00001364: SWAP2 00001365: PUSH4 0xf59ad990 0000136a: SWAP2 0000136b: PUSH2 0x1377 0000136e: SWAP2 0000136f: SWAP1 00001370: PUSH1 0x04 00001372: ADD 00001373: PUSH2 0x300b 00001376: JUMP 00001377: JUMPDEST 00001378: PUSH1 0x00 0000137a: PUSH1 0x40 0000137c: MLOAD 0000137d: DUP1 0000137e: DUP4 0000137f: SUB 00001380: DUP2 00001381: PUSH1 0x00 00001383: DUP8 00001384: GAS 00001385: CALL 00001386: ISZERO 00001387: DUP1 00001388: ISZERO 00001389: PUSH2 0x1396 0000138c: JUMPI 0000138d: RETURNDATASIZE 0000138e: PUSH1 0x00 00001390: DUP1 00001391: RETURNDATACOPY 00001392: RETURNDATASIZE 00001393: PUSH1 0x00 00001395: REVERT 00001396: JUMPDEST 00001397: POP 00001398: POP 00001399: POP 0000139a: POP 0000139b: PUSH1 0x40 0000139d: MLOAD 0000139e: RETURNDATASIZE 0000139f: PUSH1 0x00 000013a1: DUP3 000013a2: RETURNDATACOPY 000013a3: PUSH1 0x1f 000013a5: RETURNDATASIZE 000013a6: SWAP1 000013a7: DUP2 000013a8: ADD 000013a9: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 000013ca: AND 000013cb: DUP3 000013cc: ADD 000013cd: PUSH1 0x40 000013cf: MSTORE 000013d0: PUSH2 0x13dc 000013d3: SWAP2 000013d4: SWAP1 000013d5: DUP2 000013d6: ADD 000013d7: SWAP1 000013d8: PUSH2 0x30d9 000013db: JUMP 000013dc: JUMPDEST 000013dd: SWAP1 000013de: SWAP3 000013df: POP 000013e0: SWAP1 000013e1: POP 000013e2: JUMPDEST 000013e3: SWAP3 000013e4: POP 000013e5: SWAP3 000013e6: SWAP1 000013e7: POP 000013e8: JUMP 000013e9: JUMPDEST 000013ea: DUP1 000013eb: ISZERO 000013ec: DUP1 000013ed: PUSH2 0x143f 000013f0: JUMPI 000013f1: POP 000013f2: PUSH32 0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 00001413: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001428: AND 00001429: PUSH20 0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee 0000143e: EQ 0000143f: JUMPDEST 00001440: ISZERO 00001441: PUSH2 0x1447 00001444: JUMPI 00001445: POP 00001446: JUMP 00001447: JUMPDEST 00001448: PUSH2 0x1489 0000144b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001460: PUSH32 0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 00001481: AND 00001482: CALLER 00001483: ADDRESS 00001484: DUP5 00001485: PUSH2 0x254e 00001488: JUMP 00001489: JUMPDEST 0000148a: POP 0000148b: JUMP 0000148c: JUMPDEST 0000148d: PUSH1 0x05 0000148f: SLOAD 00001490: DUP2 00001491: SWAP1 00001492: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000014a7: AND 000014a8: ISZERO 000014a9: PUSH2 0x158c 000014ac: JUMPI 000014ad: PUSH1 0x05 000014af: SLOAD 000014b0: PUSH1 0x40 000014b2: DUP1 000014b3: MLOAD 000014b4: PUSH1 0x80 000014b6: DUP2 000014b7: ADD 000014b8: DUP3 000014b9: MSTORE 000014ba: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000014cf: DUP9 000014d0: DUP2 000014d1: AND 000014d2: DUP3 000014d3: MSTORE 000014d4: PUSH1 0x20 000014d6: DUP3 000014d7: ADD 000014d8: DUP9 000014d9: SWAP1 000014da: MSTORE 000014db: DUP2 000014dc: DUP4 000014dd: ADD 000014de: DUP8 000014df: SWAP1 000014e0: MSTORE 000014e1: PUSH1 0x60 000014e3: DUP3 000014e4: ADD 000014e5: DUP7 000014e6: SWAP1 000014e7: MSTORE 000014e8: SWAP2 000014e9: MLOAD 000014ea: PUSH32 0x62811bf200000000000000000000000000000000000000000000000000000000 0000150b: DUP2 0000150c: MSTORE 0000150d: SWAP2 0000150e: SWAP1 0000150f: SWAP3 00001510: AND 00001511: SWAP2 00001512: PUSH4 0x62811bf2 00001517: SWAP2 00001518: PUSH2 0x1524 0000151b: SWAP2 0000151c: SWAP1 0000151d: PUSH1 0x04 0000151f: ADD 00001520: PUSH2 0x313d 00001523: JUMP 00001524: JUMPDEST 00001525: PUSH1 0x00 00001527: PUSH1 0x40 00001529: MLOAD 0000152a: DUP1 0000152b: DUP4 0000152c: SUB 0000152d: DUP2 0000152e: PUSH1 0x00 00001530: DUP8 00001531: GAS 00001532: CALL 00001533: ISZERO 00001534: DUP1 00001535: ISZERO 00001536: PUSH2 0x1543 00001539: JUMPI 0000153a: RETURNDATASIZE 0000153b: PUSH1 0x00 0000153d: DUP1 0000153e: RETURNDATACOPY 0000153f: RETURNDATASIZE 00001540: PUSH1 0x00 00001542: REVERT 00001543: JUMPDEST 00001544: POP 00001545: POP 00001546: POP 00001547: POP 00001548: PUSH1 0x40 0000154a: MLOAD 0000154b: RETURNDATASIZE 0000154c: PUSH1 0x00 0000154e: DUP3 0000154f: RETURNDATACOPY 00001550: PUSH1 0x1f 00001552: RETURNDATASIZE 00001553: SWAP1 00001554: DUP2 00001555: ADD 00001556: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 00001577: AND 00001578: DUP3 00001579: ADD 0000157a: PUSH1 0x40 0000157c: MSTORE 0000157d: PUSH2 0x1589 00001580: SWAP2 00001581: SWAP1 00001582: DUP2 00001583: ADD 00001584: SWAP1 00001585: PUSH2 0x31dc 00001588: JUMP 00001589: JUMPDEST 0000158a: SWAP1 0000158b: POP 0000158c: JUMPDEST 0000158d: PUSH1 0x00 0000158f: PUSH32 0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 000015b0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000015c5: AND 000015c6: PUSH20 0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee 000015db: EQ 000015dc: PUSH2 0x15e5 000015df: JUMPI 000015e0: CALLVALUE 000015e1: PUSH2 0x15f4 000015e4: JUMP 000015e5: JUMPDEST 000015e6: PUSH1 0x20 000015e8: DUP3 000015e9: ADD 000015ea: MLOAD 000015eb: PUSH2 0x15f4 000015ee: SWAP1 000015ef: CALLVALUE 000015f0: PUSH2 0x3211 000015f3: JUMP 000015f4: JUMPDEST 000015f5: SWAP1 000015f6: POP 000015f7: PUSH1 0x00 000015f9: DUP7 000015fa: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000160f: AND 00001610: PUSH4 0x74fa24a6 00001615: PUSH1 0x40 00001617: MLOAD 00001618: DUP2 00001619: PUSH4 0xffffffff 0000161e: AND 0000161f: PUSH1 0xe0 00001621: SHL 00001622: DUP2 00001623: MSTORE 00001624: PUSH1 0x04 00001626: ADD 00001627: PUSH1 0x20 00001629: PUSH1 0x40 0000162b: MLOAD 0000162c: DUP1 0000162d: DUP4 0000162e: SUB 0000162f: DUP2 00001630: DUP7 00001631: GAS 00001632: STATICCALL 00001633: ISZERO 00001634: DUP1 00001635: ISZERO 00001636: PUSH2 0x1643 00001639: JUMPI 0000163a: RETURNDATASIZE 0000163b: PUSH1 0x00 0000163d: DUP1 0000163e: RETURNDATACOPY 0000163f: RETURNDATASIZE 00001640: PUSH1 0x00 00001642: REVERT 00001643: JUMPDEST 00001644: POP 00001645: POP 00001646: POP 00001647: POP 00001648: PUSH1 0x40 0000164a: MLOAD 0000164b: RETURNDATASIZE 0000164c: PUSH1 0x1f 0000164e: NOT 0000164f: PUSH1 0x1f 00001651: DUP3 00001652: ADD 00001653: AND 00001654: DUP3 00001655: ADD 00001656: DUP1 00001657: PUSH1 0x40 00001659: MSTORE 0000165a: POP 0000165b: DUP2 0000165c: ADD 0000165d: SWAP1 0000165e: PUSH2 0x1667 00001661: SWAP2 00001662: SWAP1 00001663: PUSH2 0x2f02 00001666: JUMP 00001667: JUMPDEST 00001668: SWAP1 00001669: POP 0000166a: PUSH1 0x00 0000166c: DUP8 0000166d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001682: AND 00001683: PUSH4 0xac0710cb 00001688: DUP5 00001689: DUP12 0000168a: DUP8 0000168b: PUSH1 0x00 0000168d: ADD 0000168e: MLOAD 0000168f: DUP9 00001690: PUSH1 0x20 00001692: ADD 00001693: MLOAD 00001694: DUP8 00001695: DUP11 00001696: PUSH1 0x40 00001698: ADD 00001699: MLOAD 0000169a: PUSH1 0x40 0000169c: MLOAD 0000169d: PUSH1 0x20 0000169f: ADD 000016a0: PUSH2 0x16ac 000016a3: SWAP5 000016a4: SWAP4 000016a5: SWAP3 000016a6: SWAP2 000016a7: SWAP1 000016a8: PUSH2 0x3228 000016ab: JUMP 000016ac: JUMPDEST 000016ad: PUSH1 0x40 000016af: MLOAD 000016b0: PUSH1 0x20 000016b2: DUP2 000016b3: DUP4 000016b4: SUB 000016b5: SUB 000016b6: DUP2 000016b7: MSTORE 000016b8: SWAP1 000016b9: PUSH1 0x40 000016bb: MSTORE 000016bc: DUP12 000016bd: PUSH1 0x40 000016bf: MLOAD 000016c0: DUP6 000016c1: PUSH4 0xffffffff 000016c6: AND 000016c7: PUSH1 0xe0 000016c9: SHL 000016ca: DUP2 000016cb: MSTORE 000016cc: PUSH1 0x04 000016ce: ADD 000016cf: PUSH2 0x16da 000016d2: SWAP4 000016d3: SWAP3 000016d4: SWAP2 000016d5: SWAP1 000016d6: PUSH2 0x326d 000016d9: JUMP 000016da: JUMPDEST 000016db: PUSH1 0x20 000016dd: PUSH1 0x40 000016df: MLOAD 000016e0: DUP1 000016e1: DUP4 000016e2: SUB 000016e3: DUP2 000016e4: DUP6 000016e5: DUP9 000016e6: GAS 000016e7: CALL 000016e8: ISZERO 000016e9: DUP1 000016ea: ISZERO 000016eb: PUSH2 0x16f8 000016ee: JUMPI 000016ef: RETURNDATASIZE 000016f0: PUSH1 0x00 000016f2: DUP1 000016f3: RETURNDATACOPY 000016f4: RETURNDATASIZE 000016f5: PUSH1 0x00 000016f7: REVERT 000016f8: JUMPDEST 000016f9: POP 000016fa: POP 000016fb: POP 000016fc: POP 000016fd: POP 000016fe: PUSH1 0x40 00001700: MLOAD 00001701: RETURNDATASIZE 00001702: PUSH1 0x1f 00001704: NOT 00001705: PUSH1 0x1f 00001707: DUP3 00001708: ADD 00001709: AND 0000170a: DUP3 0000170b: ADD 0000170c: DUP1 0000170d: PUSH1 0x40 0000170f: MSTORE 00001710: POP 00001711: DUP2 00001712: ADD 00001713: SWAP1 00001714: PUSH2 0x171d 00001717: SWAP2 00001718: SWAP1 00001719: PUSH2 0x2f02 0000171c: JUMP 0000171d: JUMPDEST 0000171e: SWAP1 0000171f: POP 00001720: DUP2 00001721: DUP2 00001722: EQ 00001723: PUSH2 0x1758 00001726: JUMPI 00001727: PUSH1 0x40 00001729: MLOAD 0000172a: PUSH32 0x7b7bbbe000000000000000000000000000000000000000000000000000000000 0000174b: DUP2 0000174c: MSTORE 0000174d: PUSH1 0x04 0000174f: ADD 00001750: PUSH1 0x40 00001752: MLOAD 00001753: DUP1 00001754: SWAP2 00001755: SUB 00001756: SWAP1 00001757: REVERT 00001758: JUMPDEST 00001759: DUP4 0000175a: MLOAD 0000175b: PUSH1 0x20 0000175d: DUP1 0000175e: DUP7 0000175f: ADD 00001760: MLOAD 00001761: PUSH1 0x40 00001763: DUP1 00001764: MLOAD 00001765: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000177a: DUP14 0000177b: DUP2 0000177c: AND 0000177d: DUP3 0000177e: MSTORE 0000177f: CALLER 00001780: SWAP5 00001781: DUP3 00001782: ADD 00001783: SWAP5 00001784: SWAP1 00001785: SWAP5 00001786: MSTORE 00001787: SWAP3 00001788: SWAP1 00001789: SWAP4 0000178a: AND 0000178b: DUP3 0000178c: DUP5 0000178d: ADD 0000178e: MSTORE 0000178f: PUSH1 0x60 00001791: DUP3 00001792: ADD 00001793: MSTORE 00001794: PUSH1 0x80 00001796: DUP2 00001797: ADD 00001798: DUP5 00001799: SWAP1 0000179a: MSTORE 0000179b: SWAP1 0000179c: MLOAD 0000179d: PUSH32 0xc74a00177d2c63e6eead5ea7936974ad9d0121f86140723b8909f8ec9662cc61 000017be: SWAP2 000017bf: DUP2 000017c0: SWAP1 000017c1: SUB 000017c2: PUSH1 0xa0 000017c4: ADD 000017c5: SWAP1 000017c6: LOG1 000017c7: POP 000017c8: POP 000017c9: POP 000017ca: POP 000017cb: POP 000017cc: POP 000017cd: POP 000017ce: POP 000017cf: POP 000017d0: JUMP 000017d1: JUMPDEST 000017d2: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000017e7: DUP3 000017e8: AND 000017e9: PUSH2 0x181e 000017ec: JUMPI 000017ed: PUSH1 0x40 000017ef: MLOAD 000017f0: PUSH32 0xd92e233d00000000000000000000000000000000000000000000000000000000 00001811: DUP2 00001812: MSTORE 00001813: PUSH1 0x04 00001815: ADD 00001816: PUSH1 0x40 00001818: MLOAD 00001819: DUP1 0000181a: SWAP2 0000181b: SUB 0000181c: SWAP1 0000181d: REVERT 0000181e: JUMPDEST 0000181f: PUSH32 0xffffffffffffffffffffffff1111111111111111111111111111111111111112 00001840: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001855: DUP5 00001856: AND 00001857: ADD 00001858: PUSH2 0x186a 0000185b: JUMPI 0000185c: PUSH2 0x1865 0000185f: DUP3 00001860: DUP3 00001861: PUSH2 0x2639 00001864: JUMP 00001865: JUMPDEST 00001866: POP 00001867: POP 00001868: POP 00001869: JUMP 0000186a: JUMPDEST 0000186b: DUP3 0000186c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001881: AND 00001882: EXTCODESIZE 00001883: PUSH1 0x00 00001885: SUB 00001886: PUSH2 0x18bb 00001889: JUMPI 0000188a: PUSH1 0x40 0000188c: MLOAD 0000188d: PUSH32 0x1eb00b0600000000000000000000000000000000000000000000000000000000 000018ae: DUP2 000018af: MSTORE 000018b0: PUSH1 0x04 000018b2: ADD 000018b3: PUSH1 0x40 000018b5: MLOAD 000018b6: DUP1 000018b7: SWAP2 000018b8: SUB 000018b9: SWAP1 000018ba: REVERT 000018bb: JUMPDEST 000018bc: PUSH2 0x1865 000018bf: DUP4 000018c0: DUP4 000018c1: DUP4 000018c2: PUSH2 0x26ae 000018c5: JUMP 000018c6: JUMPDEST 000018c7: PUSH1 0x40 000018c9: DUP1 000018ca: MLOAD 000018cb: PUSH1 0x60 000018cd: DUP2 000018ce: DUP2 000018cf: ADD 000018d0: DUP4 000018d1: MSTORE 000018d2: PUSH1 0x00 000018d4: DUP1 000018d5: DUP4 000018d6: MSTORE 000018d7: PUSH1 0x20 000018d9: DUP4 000018da: ADD 000018db: MSTORE 000018dc: SWAP2 000018dd: DUP2 000018de: ADD 000018df: DUP3 000018e0: SWAP1 000018e1: MSTORE 000018e2: CALLER 000018e3: PUSH1 0x00 000018e5: SWAP1 000018e6: DUP2 000018e7: MSTORE 000018e8: PUSH1 0x08 000018ea: PUSH1 0x20 000018ec: MSTORE 000018ed: PUSH1 0x40 000018ef: SWAP1 000018f0: KECCAK256 000018f1: SLOAD 000018f2: PUSH1 0xff 000018f4: AND 000018f5: PUSH2 0x192a 000018f8: JUMPI 000018f9: PUSH1 0x40 000018fb: MLOAD 000018fc: PUSH32 0x5b0a758300000000000000000000000000000000000000000000000000000000 0000191d: DUP2 0000191e: MSTORE 0000191f: PUSH1 0x04 00001921: ADD 00001922: PUSH1 0x40 00001924: MLOAD 00001925: DUP1 00001926: SWAP2 00001927: SUB 00001928: SWAP1 00001929: REVERT 0000192a: JUMPDEST 0000192b: DUP3 0000192c: MLOAD 0000192d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001942: AND 00001943: ADDRESS 00001944: EQ 00001945: DUP1 00001946: PUSH2 0x199e 00001949: JUMPI 0000194a: POP 0000194b: PUSH32 0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 0000196c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001981: AND 00001982: DUP4 00001983: PUSH1 0x00 00001985: ADD 00001986: MLOAD 00001987: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000199c: AND 0000199d: EQ 0000199e: JUMPDEST 0000199f: ISZERO 000019a0: PUSH2 0x19d5 000019a3: JUMPI 000019a4: PUSH1 0x40 000019a6: MLOAD 000019a7: PUSH32 0x285c601600000000000000000000000000000000000000000000000000000000 000019c8: DUP2 000019c9: MSTORE 000019ca: PUSH1 0x04 000019cc: ADD 000019cd: PUSH1 0x40 000019cf: MLOAD 000019d0: DUP1 000019d1: SWAP2 000019d2: SUB 000019d3: SWAP1 000019d4: REVERT 000019d5: JUMPDEST 000019d6: PUSH1 0x05 000019d8: SLOAD 000019d9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000019ee: AND 000019ef: ISZERO 000019f0: PUSH2 0x13e2 000019f3: JUMPI 000019f4: PUSH1 0x05 000019f6: SLOAD 000019f7: PUSH1 0x40 000019f9: DUP1 000019fa: MLOAD 000019fb: PUSH1 0x60 000019fd: DUP2 000019fe: ADD 000019ff: DUP3 00001a00: MSTORE 00001a01: CALLER 00001a02: DUP1 00001a03: DUP3 00001a04: MSTORE 00001a05: PUSH1 0x00 00001a07: SWAP1 00001a08: DUP2 00001a09: MSTORE 00001a0a: PUSH1 0x07 00001a0c: PUSH1 0x20 00001a0e: SWAP1 00001a0f: DUP2 00001a10: MSTORE 00001a11: SWAP3 00001a12: SWAP1 00001a13: KECCAK256 00001a14: DUP1 00001a15: SLOAD 00001a16: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001a2b: SWAP1 00001a2c: SWAP5 00001a2d: AND 00001a2e: SWAP4 00001a2f: PUSH4 0xcf36b917 00001a34: SWAP4 00001a35: DUP4 00001a36: ADD 00001a37: SWAP2 00001a38: SWAP1 00001a39: PUSH2 0x1a41 00001a3c: SWAP1 00001a3d: PUSH2 0x2e05 00001a40: JUMP 00001a41: JUMPDEST 00001a42: DUP1 00001a43: PUSH1 0x1f 00001a45: ADD 00001a46: PUSH1 0x20 00001a48: DUP1 00001a49: SWAP2 00001a4a: DIV 00001a4b: MUL 00001a4c: PUSH1 0x20 00001a4e: ADD 00001a4f: PUSH1 0x40 00001a51: MLOAD 00001a52: SWAP1 00001a53: DUP2 00001a54: ADD 00001a55: PUSH1 0x40 00001a57: MSTORE 00001a58: DUP1 00001a59: SWAP3 00001a5a: SWAP2 00001a5b: SWAP1 00001a5c: DUP2 00001a5d: DUP2 00001a5e: MSTORE 00001a5f: PUSH1 0x20 00001a61: ADD 00001a62: DUP3 00001a63: DUP1 00001a64: SLOAD 00001a65: PUSH2 0x1a6d 00001a68: SWAP1 00001a69: PUSH2 0x2e05 00001a6c: JUMP 00001a6d: JUMPDEST 00001a6e: DUP1 00001a6f: ISZERO 00001a70: PUSH2 0x1aba 00001a73: JUMPI 00001a74: DUP1 00001a75: PUSH1 0x1f 00001a77: LT 00001a78: PUSH2 0x1a8f 00001a7b: JUMPI 00001a7c: PUSH2 0x0100 00001a7f: DUP1 00001a80: DUP4 00001a81: SLOAD 00001a82: DIV 00001a83: MUL 00001a84: DUP4 00001a85: MSTORE 00001a86: SWAP2 00001a87: PUSH1 0x20 00001a89: ADD 00001a8a: SWAP2 00001a8b: PUSH2 0x1aba 00001a8e: JUMP 00001a8f: JUMPDEST 00001a90: DUP3 00001a91: ADD 00001a92: SWAP2 00001a93: SWAP1 00001a94: PUSH1 0x00 00001a96: MSTORE 00001a97: PUSH1 0x20 00001a99: PUSH1 0x00 00001a9b: KECCAK256 00001a9c: SWAP1 00001a9d: JUMPDEST 00001a9e: DUP2 00001a9f: SLOAD 00001aa0: DUP2 00001aa1: MSTORE 00001aa2: SWAP1 00001aa3: PUSH1 0x01 00001aa5: ADD 00001aa6: SWAP1 00001aa7: PUSH1 0x20 00001aa9: ADD 00001aaa: DUP1 00001aab: DUP4 00001aac: GT 00001aad: PUSH2 0x1a9d 00001ab0: JUMPI 00001ab1: DUP3 00001ab2: SWAP1 00001ab3: SUB 00001ab4: PUSH1 0x1f 00001ab6: AND 00001ab7: DUP3 00001ab8: ADD 00001ab9: SWAP2 00001aba: JUMPDEST 00001abb: POP 00001abc: POP 00001abd: POP 00001abe: POP 00001abf: POP 00001ac0: DUP2 00001ac1: MSTORE 00001ac2: PUSH1 0x20 00001ac4: ADD 00001ac5: DUP7 00001ac6: DUP2 00001ac7: MSTORE 00001ac8: POP 00001ac9: PUSH1 0x40 00001acb: MLOAD 00001acc: DUP3 00001acd: PUSH4 0xffffffff 00001ad2: AND 00001ad3: PUSH1 0xe0 00001ad5: SHL 00001ad6: DUP2 00001ad7: MSTORE 00001ad8: PUSH1 0x04 00001ada: ADD 00001adb: PUSH2 0x1ae4 00001ade: SWAP2 00001adf: SWAP1 00001ae0: PUSH2 0x3298 00001ae3: JUMP 00001ae4: JUMPDEST 00001ae5: PUSH1 0x00 00001ae7: PUSH1 0x40 00001ae9: MLOAD 00001aea: DUP1 00001aeb: DUP4 00001aec: SUB 00001aed: DUP2 00001aee: PUSH1 0x00 00001af0: DUP8 00001af1: GAS 00001af2: CALL 00001af3: ISZERO 00001af4: DUP1 00001af5: ISZERO 00001af6: PUSH2 0x1b03 00001af9: JUMPI 00001afa: RETURNDATASIZE 00001afb: PUSH1 0x00 00001afd: DUP1 00001afe: RETURNDATACOPY 00001aff: RETURNDATASIZE 00001b00: PUSH1 0x00 00001b02: REVERT 00001b03: JUMPDEST 00001b04: POP 00001b05: POP 00001b06: POP 00001b07: POP 00001b08: PUSH1 0x40 00001b0a: MLOAD 00001b0b: RETURNDATASIZE 00001b0c: PUSH1 0x00 00001b0e: DUP3 00001b0f: RETURNDATACOPY 00001b10: PUSH1 0x1f 00001b12: RETURNDATASIZE 00001b13: SWAP1 00001b14: DUP2 00001b15: ADD 00001b16: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 00001b37: AND 00001b38: DUP3 00001b39: ADD 00001b3a: PUSH1 0x40 00001b3c: MSTORE 00001b3d: PUSH2 0x13dc 00001b40: SWAP2 00001b41: SWAP1 00001b42: DUP2 00001b43: ADD 00001b44: SWAP1 00001b45: PUSH2 0x330f 00001b48: JUMP 00001b49: JUMPDEST 00001b4a: DUP1 00001b4b: PUSH1 0x00 00001b4d: SUB 00001b4e: PUSH2 0x1b55 00001b51: JUMPI 00001b52: POP 00001b53: POP 00001b54: JUMP 00001b55: JUMPDEST 00001b56: PUSH32 0xffffffffffffffffffffffff1111111111111111111111111111111111111112 00001b77: PUSH32 0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 00001b98: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001bad: AND 00001bae: ADD 00001baf: PUSH2 0x1bbc 00001bb2: JUMPI 00001bb3: PUSH2 0x04c8 00001bb6: DUP3 00001bb7: DUP3 00001bb8: PUSH2 0x2639 00001bbb: JUMP 00001bbc: JUMPDEST 00001bbd: PUSH2 0x04c8 00001bc0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001bd5: PUSH32 0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 00001bf6: AND 00001bf7: DUP4 00001bf8: DUP4 00001bf9: PUSH2 0x26ae 00001bfc: JUMP 00001bfd: JUMPDEST 00001bfe: PUSH1 0x05 00001c00: SLOAD 00001c01: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001c16: AND 00001c17: ISZERO 00001c18: PUSH2 0x1dcf 00001c1b: JUMPI 00001c1c: PUSH1 0x05 00001c1e: SLOAD 00001c1f: PUSH1 0x40 00001c21: DUP1 00001c22: MLOAD 00001c23: PUSH1 0xa0 00001c25: DUP2 00001c26: ADD 00001c27: DUP3 00001c28: MSTORE 00001c29: CALLER 00001c2a: DUP1 00001c2b: DUP3 00001c2c: MSTORE 00001c2d: PUSH1 0x20 00001c2f: DUP1 00001c30: DUP4 00001c31: ADD 00001c32: DUP9 00001c33: SWAP1 00001c34: MSTORE 00001c35: PUSH1 0x00 00001c37: SWAP2 00001c38: DUP3 00001c39: MSTORE 00001c3a: PUSH1 0x07 00001c3c: SWAP1 00001c3d: MSTORE 00001c3e: DUP3 00001c3f: DUP2 00001c40: KECCAK256 00001c41: DUP1 00001c42: SLOAD 00001c43: SWAP2 00001c44: SWAP5 00001c45: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001c5a: AND 00001c5b: SWAP4 00001c5c: PUSH4 0xdd19fe38 00001c61: SWAP4 00001c62: SWAP3 00001c63: SWAP1 00001c64: DUP4 00001c65: ADD 00001c66: SWAP2 00001c67: SWAP1 00001c68: PUSH2 0x1c70 00001c6b: SWAP1 00001c6c: PUSH2 0x2e05 00001c6f: JUMP 00001c70: JUMPDEST 00001c71: DUP1 00001c72: PUSH1 0x1f 00001c74: ADD 00001c75: PUSH1 0x20 00001c77: DUP1 00001c78: SWAP2 00001c79: DIV 00001c7a: MUL 00001c7b: PUSH1 0x20 00001c7d: ADD 00001c7e: PUSH1 0x40 00001c80: MLOAD 00001c81: SWAP1 00001c82: DUP2 00001c83: ADD 00001c84: PUSH1 0x40 00001c86: MSTORE 00001c87: DUP1 00001c88: SWAP3 00001c89: SWAP2 00001c8a: SWAP1 00001c8b: DUP2 00001c8c: DUP2 00001c8d: MSTORE 00001c8e: PUSH1 0x20 00001c90: ADD 00001c91: DUP3 00001c92: DUP1 00001c93: SLOAD 00001c94: PUSH2 0x1c9c 00001c97: SWAP1 00001c98: PUSH2 0x2e05 00001c9b: JUMP 00001c9c: JUMPDEST 00001c9d: DUP1 00001c9e: ISZERO 00001c9f: PUSH2 0x1ce9 00001ca2: JUMPI 00001ca3: DUP1 00001ca4: PUSH1 0x1f 00001ca6: LT 00001ca7: PUSH2 0x1cbe 00001caa: JUMPI 00001cab: PUSH2 0x0100 00001cae: DUP1 00001caf: DUP4 00001cb0: SLOAD 00001cb1: DIV 00001cb2: MUL 00001cb3: DUP4 00001cb4: MSTORE 00001cb5: SWAP2 00001cb6: PUSH1 0x20 00001cb8: ADD 00001cb9: SWAP2 00001cba: PUSH2 0x1ce9 00001cbd: JUMP 00001cbe: JUMPDEST 00001cbf: DUP3 00001cc0: ADD 00001cc1: SWAP2 00001cc2: SWAP1 00001cc3: PUSH1 0x00 00001cc5: MSTORE 00001cc6: PUSH1 0x20 00001cc8: PUSH1 0x00 00001cca: KECCAK256 00001ccb: SWAP1 00001ccc: JUMPDEST 00001ccd: DUP2 00001cce: SLOAD 00001ccf: DUP2 00001cd0: MSTORE 00001cd1: SWAP1 00001cd2: PUSH1 0x01 00001cd4: ADD 00001cd5: SWAP1 00001cd6: PUSH1 0x20 00001cd8: ADD 00001cd9: DUP1 00001cda: DUP4 00001cdb: GT 00001cdc: PUSH2 0x1ccc 00001cdf: JUMPI 00001ce0: DUP3 00001ce1: SWAP1 00001ce2: SUB 00001ce3: PUSH1 0x1f 00001ce5: AND 00001ce6: DUP3 00001ce7: ADD 00001ce8: SWAP2 00001ce9: JUMPDEST 00001cea: POP 00001ceb: POP 00001cec: POP 00001ced: POP 00001cee: POP 00001cef: DUP2 00001cf0: MSTORE 00001cf1: PUSH1 0x20 00001cf3: ADD 00001cf4: DUP7 00001cf5: DUP2 00001cf6: MSTORE 00001cf7: PUSH1 0x20 00001cf9: ADD 00001cfa: DUP6 00001cfb: DUP2 00001cfc: MSTORE 00001cfd: POP 00001cfe: PUSH1 0x40 00001d00: MLOAD 00001d01: DUP3 00001d02: PUSH4 0xffffffff 00001d07: AND 00001d08: PUSH1 0xe0 00001d0a: SHL 00001d0b: DUP2 00001d0c: MSTORE 00001d0d: PUSH1 0x04 00001d0f: ADD 00001d10: PUSH2 0x1d19 00001d13: SWAP2 00001d14: SWAP1 00001d15: PUSH2 0x3369 00001d18: JUMP 00001d19: JUMPDEST 00001d1a: PUSH1 0x00 00001d1c: PUSH1 0x40 00001d1e: MLOAD 00001d1f: DUP1 00001d20: DUP4 00001d21: SUB 00001d22: DUP2 00001d23: PUSH1 0x00 00001d25: DUP8 00001d26: GAS 00001d27: CALL 00001d28: ISZERO 00001d29: DUP1 00001d2a: ISZERO 00001d2b: PUSH2 0x1d38 00001d2e: JUMPI 00001d2f: RETURNDATASIZE 00001d30: PUSH1 0x00 00001d32: DUP1 00001d33: RETURNDATACOPY 00001d34: RETURNDATASIZE 00001d35: PUSH1 0x00 00001d37: REVERT 00001d38: JUMPDEST 00001d39: POP 00001d3a: POP 00001d3b: POP 00001d3c: POP 00001d3d: PUSH1 0x40 00001d3f: MLOAD 00001d40: RETURNDATASIZE 00001d41: PUSH1 0x00 00001d43: DUP3 00001d44: RETURNDATACOPY 00001d45: PUSH1 0x1f 00001d47: RETURNDATASIZE 00001d48: SWAP1 00001d49: DUP2 00001d4a: ADD 00001d4b: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 00001d6c: AND 00001d6d: DUP3 00001d6e: ADD 00001d6f: PUSH1 0x40 00001d71: MSTORE 00001d72: PUSH2 0x1d7e 00001d75: SWAP2 00001d76: SWAP1 00001d77: DUP2 00001d78: ADD 00001d79: SWAP1 00001d7a: PUSH2 0x3409 00001d7d: JUMP 00001d7e: JUMPDEST 00001d7f: DUP1 00001d80: MLOAD 00001d81: PUSH1 0x00 00001d83: DUP7 00001d84: DUP2 00001d85: MSTORE 00001d86: PUSH1 0x06 00001d88: PUSH1 0x20 00001d8a: SWAP1 00001d8b: DUP2 00001d8c: MSTORE 00001d8d: PUSH1 0x40 00001d8f: SWAP1 00001d90: SWAP2 00001d91: KECCAK256 00001d92: DUP3 00001d93: MLOAD 00001d94: SWAP4 00001d95: SWAP5 00001d96: POP 00001d97: PUSH2 0x1da6 00001d9a: SWAP4 00001d9b: SWAP1 00001d9c: SWAP3 00001d9d: SWAP2 00001d9e: SWAP1 00001d9f: SWAP2 00001da0: ADD 00001da1: SWAP1 00001da2: PUSH2 0x277d 00001da5: JUMP 00001da6: JUMPDEST 00001da7: POP 00001da8: PUSH1 0x20 00001daa: DUP1 00001dab: DUP3 00001dac: ADD 00001dad: MLOAD 00001dae: CALLER 00001daf: PUSH1 0x00 00001db1: SWAP1 00001db2: DUP2 00001db3: MSTORE 00001db4: PUSH1 0x07 00001db6: DUP4 00001db7: MSTORE 00001db8: PUSH1 0x40 00001dba: SWAP1 00001dbb: KECCAK256 00001dbc: DUP2 00001dbd: MLOAD 00001dbe: PUSH2 0x1dcc 00001dc1: SWAP4 00001dc2: SWAP2 00001dc3: SWAP3 00001dc4: SWAP1 00001dc5: SWAP2 00001dc6: ADD 00001dc7: SWAP1 00001dc8: PUSH2 0x277d 00001dcb: JUMP 00001dcc: JUMPDEST 00001dcd: POP 00001dce: POP 00001dcf: JUMPDEST 00001dd0: DUP1 00001dd1: MLOAD 00001dd2: PUSH1 0x20 00001dd4: DUP1 00001dd5: DUP4 00001dd6: ADD 00001dd7: MLOAD 00001dd8: PUSH1 0x40 00001dda: DUP1 00001ddb: MLOAD 00001ddc: CALLER 00001ddd: DUP2 00001dde: MSTORE 00001ddf: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001df4: SWAP1 00001df5: SWAP5 00001df6: AND 00001df7: SWAP3 00001df8: DUP5 00001df9: ADD 00001dfa: SWAP3 00001dfb: SWAP1 00001dfc: SWAP3 00001dfd: MSTORE 00001dfe: DUP3 00001dff: DUP3 00001e00: ADD 00001e01: MSTORE 00001e02: PUSH1 0x60 00001e04: DUP3 00001e05: ADD 00001e06: DUP6 00001e07: SWAP1 00001e08: MSTORE 00001e09: MLOAD 00001e0a: PUSH32 0x9afd47907e25028cdaca89d193518c302bbb128617d5a992c5abd45815526593 00001e2b: SWAP2 00001e2c: DUP2 00001e2d: SWAP1 00001e2e: SUB 00001e2f: PUSH1 0x80 00001e31: ADD 00001e32: SWAP1 00001e33: LOG1 00001e34: POP 00001e35: POP 00001e36: POP 00001e37: POP 00001e38: JUMP 00001e39: JUMPDEST 00001e3a: PUSH1 0x40 00001e3c: DUP1 00001e3d: MLOAD 00001e3e: PUSH1 0x60 00001e40: DUP2 00001e41: DUP2 00001e42: ADD 00001e43: DUP4 00001e44: MSTORE 00001e45: PUSH1 0x00 00001e47: DUP1 00001e48: DUP4 00001e49: MSTORE 00001e4a: PUSH1 0x20 00001e4c: DUP4 00001e4d: ADD 00001e4e: MSTORE 00001e4f: SWAP2 00001e50: DUP2 00001e51: ADD 00001e52: DUP3 00001e53: SWAP1 00001e54: MSTORE 00001e55: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001e6a: DUP5 00001e6b: AND 00001e6c: PUSH1 0x00 00001e6e: SWAP1 00001e6f: DUP2 00001e70: MSTORE 00001e71: PUSH1 0x08 00001e73: PUSH1 0x20 00001e75: MSTORE 00001e76: PUSH1 0x40 00001e78: SWAP1 00001e79: KECCAK256 00001e7a: SLOAD 00001e7b: PUSH1 0xff 00001e7d: AND 00001e7e: PUSH2 0x1eb3 00001e81: JUMPI 00001e82: PUSH1 0x40 00001e84: MLOAD 00001e85: PUSH32 0x5b0a758300000000000000000000000000000000000000000000000000000000 00001ea6: DUP2 00001ea7: MSTORE 00001ea8: PUSH1 0x04 00001eaa: ADD 00001eab: PUSH1 0x40 00001ead: MLOAD 00001eae: DUP1 00001eaf: SWAP2 00001eb0: SUB 00001eb1: SWAP1 00001eb2: REVERT 00001eb3: JUMPDEST 00001eb4: PUSH1 0x40 00001eb6: DUP1 00001eb7: MLOAD 00001eb8: DUP1 00001eb9: DUP3 00001eba: ADD 00001ebb: DUP3 00001ebc: MSTORE 00001ebd: PUSH1 0x00 00001ebf: DUP6 00001ec0: DUP2 00001ec1: MSTORE 00001ec2: PUSH1 0x06 00001ec4: PUSH1 0x20 00001ec6: MSTORE 00001ec7: SWAP2 00001ec8: DUP3 00001ec9: KECCAK256 00001eca: DUP1 00001ecb: SLOAD 00001ecc: DUP3 00001ecd: SWAP2 00001ece: SWAP1 00001ecf: PUSH2 0x1ed7 00001ed2: SWAP1 00001ed3: PUSH2 0x2e05 00001ed6: JUMP 00001ed7: JUMPDEST 00001ed8: DUP1 00001ed9: PUSH1 0x1f 00001edb: ADD 00001edc: PUSH1 0x20 00001ede: DUP1 00001edf: SWAP2 00001ee0: DIV 00001ee1: MUL 00001ee2: PUSH1 0x20 00001ee4: ADD 00001ee5: PUSH1 0x40 00001ee7: MLOAD 00001ee8: SWAP1 00001ee9: DUP2 00001eea: ADD 00001eeb: PUSH1 0x40 00001eed: MSTORE 00001eee: DUP1 00001eef: SWAP3 00001ef0: SWAP2 00001ef1: SWAP1 00001ef2: DUP2 00001ef3: DUP2 00001ef4: MSTORE 00001ef5: PUSH1 0x20 00001ef7: ADD 00001ef8: DUP3 00001ef9: DUP1 00001efa: SLOAD 00001efb: PUSH2 0x1f03 00001efe: SWAP1 00001eff: PUSH2 0x2e05 00001f02: JUMP 00001f03: JUMPDEST 00001f04: DUP1 00001f05: ISZERO 00001f06: PUSH2 0x1f50 00001f09: JUMPI 00001f0a: DUP1 00001f0b: PUSH1 0x1f 00001f0d: LT 00001f0e: PUSH2 0x1f25 00001f11: JUMPI 00001f12: PUSH2 0x0100 00001f15: DUP1 00001f16: DUP4 00001f17: SLOAD 00001f18: DIV 00001f19: MUL 00001f1a: DUP4 00001f1b: MSTORE 00001f1c: SWAP2 00001f1d: PUSH1 0x20 00001f1f: ADD 00001f20: SWAP2 00001f21: PUSH2 0x1f50 00001f24: JUMP 00001f25: JUMPDEST 00001f26: DUP3 00001f27: ADD 00001f28: SWAP2 00001f29: SWAP1 00001f2a: PUSH1 0x00 00001f2c: MSTORE 00001f2d: PUSH1 0x20 00001f2f: PUSH1 0x00 00001f31: KECCAK256 00001f32: SWAP1 00001f33: JUMPDEST 00001f34: DUP2 00001f35: SLOAD 00001f36: DUP2 00001f37: MSTORE 00001f38: SWAP1 00001f39: PUSH1 0x01 00001f3b: ADD 00001f3c: SWAP1 00001f3d: PUSH1 0x20 00001f3f: ADD 00001f40: DUP1 00001f41: DUP4 00001f42: GT 00001f43: PUSH2 0x1f33 00001f46: JUMPI 00001f47: DUP3 00001f48: SWAP1 00001f49: SUB 00001f4a: PUSH1 0x1f 00001f4c: AND 00001f4d: DUP3 00001f4e: ADD 00001f4f: SWAP2 00001f50: JUMPDEST 00001f51: POP 00001f52: POP 00001f53: POP 00001f54: POP 00001f55: POP 00001f56: DUP2 00001f57: MSTORE 00001f58: PUSH1 0x20 00001f5a: ADD 00001f5b: PUSH1 0x07 00001f5d: PUSH1 0x00 00001f5f: DUP9 00001f60: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001f75: AND 00001f76: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001f8b: AND 00001f8c: DUP2 00001f8d: MSTORE 00001f8e: PUSH1 0x20 00001f90: ADD 00001f91: SWAP1 00001f92: DUP2 00001f93: MSTORE 00001f94: PUSH1 0x20 00001f96: ADD 00001f97: PUSH1 0x00 00001f99: KECCAK256 00001f9a: DUP1 00001f9b: SLOAD 00001f9c: PUSH2 0x1fa4 00001f9f: SWAP1 00001fa0: PUSH2 0x2e05 00001fa3: JUMP 00001fa4: JUMPDEST 00001fa5: DUP1 00001fa6: PUSH1 0x1f 00001fa8: ADD 00001fa9: PUSH1 0x20 00001fab: DUP1 00001fac: SWAP2 00001fad: DIV 00001fae: MUL 00001faf: PUSH1 0x20 00001fb1: ADD 00001fb2: PUSH1 0x40 00001fb4: MLOAD 00001fb5: SWAP1 00001fb6: DUP2 00001fb7: ADD 00001fb8: PUSH1 0x40 00001fba: MSTORE 00001fbb: DUP1 00001fbc: SWAP3 00001fbd: SWAP2 00001fbe: SWAP1 00001fbf: DUP2 00001fc0: DUP2 00001fc1: MSTORE 00001fc2: PUSH1 0x20 00001fc4: ADD 00001fc5: DUP3 00001fc6: DUP1 00001fc7: SLOAD 00001fc8: PUSH2 0x1fd0 00001fcb: SWAP1 00001fcc: PUSH2 0x2e05 00001fcf: JUMP 00001fd0: JUMPDEST 00001fd1: DUP1 00001fd2: ISZERO 00001fd3: PUSH2 0x201d 00001fd6: JUMPI 00001fd7: DUP1 00001fd8: PUSH1 0x1f 00001fda: LT 00001fdb: PUSH2 0x1ff2 00001fde: JUMPI 00001fdf: PUSH2 0x0100 00001fe2: DUP1 00001fe3: DUP4 00001fe4: SLOAD 00001fe5: DIV 00001fe6: MUL 00001fe7: DUP4 00001fe8: MSTORE 00001fe9: SWAP2 00001fea: PUSH1 0x20 00001fec: ADD 00001fed: SWAP2 00001fee: PUSH2 0x201d 00001ff1: JUMP 00001ff2: JUMPDEST 00001ff3: DUP3 00001ff4: ADD 00001ff5: SWAP2 00001ff6: SWAP1 00001ff7: PUSH1 0x00 00001ff9: MSTORE 00001ffa: PUSH1 0x20 00001ffc: PUSH1 0x00 00001ffe: KECCAK256 00001fff: SWAP1 00002000: JUMPDEST 00002001: DUP2 00002002: SLOAD 00002003: DUP2 00002004: MSTORE 00002005: SWAP1 00002006: PUSH1 0x01 00002008: ADD 00002009: SWAP1 0000200a: PUSH1 0x20 0000200c: ADD 0000200d: DUP1 0000200e: DUP4 0000200f: GT 00002010: PUSH2 0x2000 00002013: JUMPI 00002014: DUP3 00002015: SWAP1 00002016: SUB 00002017: PUSH1 0x1f 00002019: AND 0000201a: DUP3 0000201b: ADD 0000201c: SWAP2 0000201d: JUMPDEST 0000201e: POP 0000201f: POP 00002020: POP 00002021: POP 00002022: POP 00002023: DUP2 00002024: MSTORE 00002025: POP 00002026: SWAP1 00002027: POP 00002028: DUP1 00002029: PUSH1 0x00 0000202b: ADD 0000202c: MLOAD 0000202d: MLOAD 0000202e: PUSH1 0x00 00002030: SUB 00002031: PUSH2 0x2066 00002034: JUMPI 00002035: PUSH1 0x40 00002037: MLOAD 00002038: PUSH32 0xd3d38f6800000000000000000000000000000000000000000000000000000000 00002059: DUP2 0000205a: MSTORE 0000205b: PUSH1 0x04 0000205d: ADD 0000205e: PUSH1 0x40 00002060: MLOAD 00002061: DUP1 00002062: SWAP2 00002063: SUB 00002064: SWAP1 00002065: REVERT 00002066: JUMPDEST 00002067: PUSH1 0x05 00002069: SLOAD 0000206a: PUSH1 0x40 0000206c: DUP1 0000206d: MLOAD 0000206e: DUP1 0000206f: DUP3 00002070: ADD 00002071: DUP3 00002072: MSTORE 00002073: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002088: DUP9 00002089: DUP2 0000208a: AND 0000208b: DUP3 0000208c: MSTORE 0000208d: PUSH1 0x20 0000208f: DUP3 00002090: ADD 00002091: DUP6 00002092: SWAP1 00002093: MSTORE 00002094: SWAP2 00002095: MLOAD 00002096: PUSH32 0x7afb995300000000000000000000000000000000000000000000000000000000 000020b7: DUP2 000020b8: MSTORE 000020b9: SWAP2 000020ba: SWAP1 000020bb: SWAP3 000020bc: AND 000020bd: SWAP2 000020be: PUSH4 0x7afb9953 000020c3: SWAP2 000020c4: PUSH2 0x20d0 000020c7: SWAP2 000020c8: SWAP1 000020c9: PUSH1 0x04 000020cb: ADD 000020cc: PUSH2 0x34de 000020cf: JUMP 000020d0: JUMPDEST 000020d1: PUSH1 0x00 000020d3: PUSH1 0x40 000020d5: MLOAD 000020d6: DUP1 000020d7: DUP4 000020d8: SUB 000020d9: DUP2 000020da: PUSH1 0x00 000020dc: DUP8 000020dd: GAS 000020de: CALL 000020df: ISZERO 000020e0: DUP1 000020e1: ISZERO 000020e2: PUSH2 0x20ef 000020e5: JUMPI 000020e6: RETURNDATASIZE 000020e7: PUSH1 0x00 000020e9: DUP1 000020ea: RETURNDATACOPY 000020eb: RETURNDATASIZE 000020ec: PUSH1 0x00 000020ee: REVERT 000020ef: JUMPDEST 000020f0: POP 000020f1: POP 000020f2: POP 000020f3: POP 000020f4: PUSH1 0x40 000020f6: MLOAD 000020f7: RETURNDATASIZE 000020f8: PUSH1 0x00 000020fa: DUP3 000020fb: RETURNDATACOPY 000020fc: PUSH1 0x1f 000020fe: RETURNDATASIZE 000020ff: SWAP1 00002100: DUP2 00002101: ADD 00002102: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 00002123: AND 00002124: DUP3 00002125: ADD 00002126: PUSH1 0x40 00002128: MSTORE 00002129: PUSH2 0x2135 0000212c: SWAP2 0000212d: SWAP1 0000212e: DUP2 0000212f: ADD 00002130: SWAP1 00002131: PUSH2 0x330f 00002134: JUMP 00002135: JUMPDEST 00002136: SWAP1 00002137: SWAP7 00002138: SWAP1 00002139: SWAP6 0000213a: POP 0000213b: SWAP4 0000213c: POP 0000213d: POP 0000213e: POP 0000213f: POP 00002140: JUMP 00002141: JUMPDEST 00002142: PUSH1 0x40 00002144: DUP1 00002145: MLOAD 00002146: DUP1 00002147: DUP3 00002148: ADD 00002149: DUP3 0000214a: MSTORE 0000214b: PUSH1 0x00 0000214d: DUP5 0000214e: DUP2 0000214f: MSTORE 00002150: PUSH1 0x06 00002152: PUSH1 0x20 00002154: MSTORE 00002155: SWAP2 00002156: DUP3 00002157: KECCAK256 00002158: DUP1 00002159: SLOAD 0000215a: DUP3 0000215b: SWAP2 0000215c: SWAP1 0000215d: PUSH2 0x2165 00002160: SWAP1 00002161: PUSH2 0x2e05 00002164: JUMP 00002165: JUMPDEST 00002166: DUP1 00002167: PUSH1 0x1f 00002169: ADD 0000216a: PUSH1 0x20 0000216c: DUP1 0000216d: SWAP2 0000216e: DIV 0000216f: MUL 00002170: PUSH1 0x20 00002172: ADD 00002173: PUSH1 0x40 00002175: MLOAD 00002176: SWAP1 00002177: DUP2 00002178: ADD 00002179: PUSH1 0x40 0000217b: MSTORE 0000217c: DUP1 0000217d: SWAP3 0000217e: SWAP2 0000217f: SWAP1 00002180: DUP2 00002181: DUP2 00002182: MSTORE 00002183: PUSH1 0x20 00002185: ADD 00002186: DUP3 00002187: DUP1 00002188: SLOAD 00002189: PUSH2 0x2191 0000218c: SWAP1 0000218d: PUSH2 0x2e05 00002190: JUMP 00002191: JUMPDEST 00002192: DUP1 00002193: ISZERO 00002194: PUSH2 0x21de 00002197: JUMPI 00002198: DUP1 00002199: PUSH1 0x1f 0000219b: LT 0000219c: PUSH2 0x21b3 0000219f: JUMPI 000021a0: PUSH2 0x0100 000021a3: DUP1 000021a4: DUP4 000021a5: SLOAD 000021a6: DIV 000021a7: MUL 000021a8: DUP4 000021a9: MSTORE 000021aa: SWAP2 000021ab: PUSH1 0x20 000021ad: ADD 000021ae: SWAP2 000021af: PUSH2 0x21de 000021b2: JUMP 000021b3: JUMPDEST 000021b4: DUP3 000021b5: ADD 000021b6: SWAP2 000021b7: SWAP1 000021b8: PUSH1 0x00 000021ba: MSTORE 000021bb: PUSH1 0x20 000021bd: PUSH1 0x00 000021bf: KECCAK256 000021c0: SWAP1 000021c1: JUMPDEST 000021c2: DUP2 000021c3: SLOAD 000021c4: DUP2 000021c5: MSTORE 000021c6: SWAP1 000021c7: PUSH1 0x01 000021c9: ADD 000021ca: SWAP1 000021cb: PUSH1 0x20 000021cd: ADD 000021ce: DUP1 000021cf: DUP4 000021d0: GT 000021d1: PUSH2 0x21c1 000021d4: JUMPI 000021d5: DUP3 000021d6: SWAP1 000021d7: SUB 000021d8: PUSH1 0x1f 000021da: AND 000021db: DUP3 000021dc: ADD 000021dd: SWAP2 000021de: JUMPDEST 000021df: POP 000021e0: POP 000021e1: POP 000021e2: POP 000021e3: POP 000021e4: DUP2 000021e5: MSTORE 000021e6: PUSH1 0x20 000021e8: ADD 000021e9: PUSH1 0x07 000021eb: PUSH1 0x00 000021ed: DUP8 000021ee: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002203: AND 00002204: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002219: AND 0000221a: DUP2 0000221b: MSTORE 0000221c: PUSH1 0x20 0000221e: ADD 0000221f: SWAP1 00002220: DUP2 00002221: MSTORE 00002222: PUSH1 0x20 00002224: ADD 00002225: PUSH1 0x00 00002227: KECCAK256 00002228: DUP1 00002229: SLOAD 0000222a: PUSH2 0x2232 0000222d: SWAP1 0000222e: PUSH2 0x2e05 00002231: JUMP 00002232: JUMPDEST 00002233: DUP1 00002234: PUSH1 0x1f 00002236: ADD 00002237: PUSH1 0x20 00002239: DUP1 0000223a: SWAP2 0000223b: DIV 0000223c: MUL 0000223d: PUSH1 0x20 0000223f: ADD 00002240: PUSH1 0x40 00002242: MLOAD 00002243: SWAP1 00002244: DUP2 00002245: ADD 00002246: PUSH1 0x40 00002248: MSTORE 00002249: DUP1 0000224a: SWAP3 0000224b: SWAP2 0000224c: SWAP1 0000224d: DUP2 0000224e: DUP2 0000224f: MSTORE 00002250: PUSH1 0x20 00002252: ADD 00002253: DUP3 00002254: DUP1 00002255: SLOAD 00002256: PUSH2 0x225e 00002259: SWAP1 0000225a: PUSH2 0x2e05 0000225d: JUMP 0000225e: JUMPDEST 0000225f: DUP1 00002260: ISZERO 00002261: PUSH2 0x22ab 00002264: JUMPI 00002265: DUP1 00002266: PUSH1 0x1f 00002268: LT 00002269: PUSH2 0x2280 0000226c: JUMPI 0000226d: PUSH2 0x0100 00002270: DUP1 00002271: DUP4 00002272: SLOAD 00002273: DIV 00002274: MUL 00002275: DUP4 00002276: MSTORE 00002277: SWAP2 00002278: PUSH1 0x20 0000227a: ADD 0000227b: SWAP2 0000227c: PUSH2 0x22ab 0000227f: JUMP 00002280: JUMPDEST 00002281: DUP3 00002282: ADD 00002283: SWAP2 00002284: SWAP1 00002285: PUSH1 0x00 00002287: MSTORE 00002288: PUSH1 0x20 0000228a: PUSH1 0x00 0000228c: KECCAK256 0000228d: SWAP1 0000228e: JUMPDEST 0000228f: DUP2 00002290: SLOAD 00002291: DUP2 00002292: MSTORE 00002293: SWAP1 00002294: PUSH1 0x01 00002296: ADD 00002297: SWAP1 00002298: PUSH1 0x20 0000229a: ADD 0000229b: DUP1 0000229c: DUP4 0000229d: GT 0000229e: PUSH2 0x228e 000022a1: JUMPI 000022a2: DUP3 000022a3: SWAP1 000022a4: SUB 000022a5: PUSH1 0x1f 000022a7: AND 000022a8: DUP3 000022a9: ADD 000022aa: SWAP2 000022ab: JUMPDEST 000022ac: POP 000022ad: POP 000022ae: POP 000022af: SWAP2 000022b0: SWAP1 000022b1: SWAP3 000022b2: MSTORE 000022b3: POP 000022b4: POP 000022b5: PUSH1 0x05 000022b7: SLOAD 000022b8: PUSH1 0x40 000022ba: DUP1 000022bb: MLOAD 000022bc: PUSH1 0x80 000022be: DUP2 000022bf: ADD 000022c0: DUP3 000022c1: MSTORE 000022c2: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000022d7: DUP9 000022d8: DUP2 000022d9: AND 000022da: DUP3 000022db: MSTORE 000022dc: PUSH1 0x20 000022de: DUP3 000022df: ADD 000022e0: DUP9 000022e1: SWAP1 000022e2: MSTORE 000022e3: DUP2 000022e4: DUP4 000022e5: ADD 000022e6: DUP8 000022e7: SWAP1 000022e8: MSTORE 000022e9: PUSH1 0x60 000022eb: DUP3 000022ec: ADD 000022ed: DUP6 000022ee: SWAP1 000022ef: MSTORE 000022f0: SWAP2 000022f1: MLOAD 000022f2: PUSH32 0x1306ac3b00000000000000000000000000000000000000000000000000000000 00002313: DUP2 00002314: MSTORE 00002315: SWAP4 00002316: SWAP5 00002317: POP 00002318: SWAP2 00002319: AND 0000231a: SWAP2 0000231b: PUSH4 0x1306ac3b 00002320: SWAP2 00002321: PUSH2 0x232c 00002324: SWAP2 00002325: PUSH1 0x04 00002327: ADD 00002328: PUSH2 0x3519 0000232b: JUMP 0000232c: JUMPDEST 0000232d: PUSH1 0x00 0000232f: PUSH1 0x40 00002331: MLOAD 00002332: DUP1 00002333: DUP4 00002334: SUB 00002335: DUP2 00002336: PUSH1 0x00 00002338: DUP8 00002339: GAS 0000233a: CALL 0000233b: ISZERO 0000233c: DUP1 0000233d: ISZERO 0000233e: PUSH2 0x234b 00002341: JUMPI 00002342: RETURNDATASIZE 00002343: PUSH1 0x00 00002345: DUP1 00002346: RETURNDATACOPY 00002347: RETURNDATASIZE 00002348: PUSH1 0x00 0000234a: REVERT 0000234b: JUMPDEST 0000234c: POP 0000234d: POP 0000234e: POP 0000234f: POP 00002350: PUSH1 0x40 00002352: MLOAD 00002353: RETURNDATASIZE 00002354: PUSH1 0x00 00002356: DUP3 00002357: RETURNDATACOPY 00002358: PUSH1 0x1f 0000235a: RETURNDATASIZE 0000235b: SWAP1 0000235c: DUP2 0000235d: ADD 0000235e: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 0000237f: AND 00002380: DUP3 00002381: ADD 00002382: PUSH1 0x40 00002384: MSTORE 00002385: PUSH2 0x2391 00002388: SWAP2 00002389: SWAP1 0000238a: DUP2 0000238b: ADD 0000238c: SWAP1 0000238d: PUSH2 0x3409 00002390: JUMP 00002391: JUMPDEST 00002392: DUP1 00002393: MLOAD 00002394: PUSH1 0x00 00002396: DUP6 00002397: DUP2 00002398: MSTORE 00002399: PUSH1 0x06 0000239b: PUSH1 0x20 0000239d: SWAP1 0000239e: DUP2 0000239f: MSTORE 000023a0: PUSH1 0x40 000023a2: SWAP1 000023a3: SWAP2 000023a4: KECCAK256 000023a5: DUP3 000023a6: MLOAD 000023a7: SWAP4 000023a8: SWAP5 000023a9: POP 000023aa: PUSH2 0x23b9 000023ad: SWAP4 000023ae: SWAP1 000023af: SWAP3 000023b0: SWAP2 000023b1: SWAP1 000023b2: SWAP2 000023b3: ADD 000023b4: SWAP1 000023b5: PUSH2 0x277d 000023b8: JUMP 000023b9: JUMPDEST 000023ba: POP 000023bb: PUSH1 0x20 000023bd: DUP1 000023be: DUP3 000023bf: ADD 000023c0: MLOAD 000023c1: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000023d6: DUP7 000023d7: AND 000023d8: PUSH1 0x00 000023da: SWAP1 000023db: DUP2 000023dc: MSTORE 000023dd: PUSH1 0x07 000023df: DUP4 000023e0: MSTORE 000023e1: PUSH1 0x40 000023e3: SWAP1 000023e4: KECCAK256 000023e5: DUP2 000023e6: MLOAD 000023e7: PUSH2 0x23f5 000023ea: SWAP4 000023eb: SWAP2 000023ec: SWAP3 000023ed: SWAP1 000023ee: SWAP2 000023ef: ADD 000023f0: SWAP1 000023f1: PUSH2 0x277d 000023f4: JUMP 000023f5: JUMPDEST 000023f6: POP 000023f7: POP 000023f8: POP 000023f9: POP 000023fa: POP 000023fb: JUMP 000023fc: JUMPDEST 000023fd: PUSH1 0x00 000023ff: PUSH1 0x40 00002401: MLOAD 00002402: PUSH32 0x095ea7b300000000000000000000000000000000000000000000000000000000 00002423: DUP2 00002424: MSTORE 00002425: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000243a: DUP5 0000243b: AND 0000243c: PUSH1 0x04 0000243e: DUP3 0000243f: ADD 00002440: MSTORE 00002441: DUP3 00002442: PUSH1 0x24 00002444: DUP3 00002445: ADD 00002446: MSTORE 00002447: PUSH1 0x20 00002449: PUSH1 0x00 0000244b: PUSH1 0x44 0000244d: DUP4 0000244e: PUSH1 0x00 00002450: DUP10 00002451: GAS 00002452: CALL 00002453: RETURNDATASIZE 00002454: ISZERO 00002455: PUSH1 0x1f 00002457: RETURNDATASIZE 00002458: GT 00002459: PUSH1 0x01 0000245b: PUSH1 0x00 0000245d: MLOAD 0000245e: EQ 0000245f: AND 00002460: OR 00002461: AND 00002462: SWAP2 00002463: POP 00002464: POP 00002465: DUP1 00002466: PUSH2 0x086b 00002469: JUMPI 0000246a: PUSH1 0x40 0000246c: MLOAD 0000246d: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 0000248e: DUP2 0000248f: MSTORE 00002490: PUSH1 0x20 00002492: PUSH1 0x04 00002494: DUP3 00002495: ADD 00002496: MSTORE 00002497: PUSH1 0x0e 00002499: PUSH1 0x24 0000249b: DUP3 0000249c: ADD 0000249d: MSTORE 0000249e: PUSH32 0x415050524f56455f4641494c4544000000000000000000000000000000000000 000024bf: PUSH1 0x44 000024c1: DUP3 000024c2: ADD 000024c3: MSTORE 000024c4: PUSH1 0x64 000024c6: ADD 000024c7: PUSH2 0x0590 000024ca: JUMP 000024cb: JUMPDEST 000024cc: PUSH1 0x00 000024ce: DUP3 000024cf: DUP2 000024d0: MSTORE 000024d1: PUSH1 0x03 000024d3: PUSH1 0x20 000024d5: SWAP1 000024d6: DUP2 000024d7: MSTORE 000024d8: PUSH1 0x40 000024da: DUP1 000024db: DUP4 000024dc: KECCAK256 000024dd: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000024f2: DUP6 000024f3: AND 000024f4: DUP1 000024f5: DUP6 000024f6: MSTORE 000024f7: SWAP3 000024f8: MSTORE 000024f9: DUP1 000024fa: DUP4 000024fb: KECCAK256 000024fc: DUP1 000024fd: SLOAD 000024fe: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 0000251f: AND 00002520: SWAP1 00002521: SSTORE 00002522: MLOAD 00002523: SWAP1 00002524: SWAP2 00002525: DUP5 00002526: SWAP2 00002527: PUSH32 0x155aaafb6329a2098580462df33ec4b7441b19729b9601c5fc17ae1cf99a8a52 00002548: SWAP2 00002549: SWAP1 0000254a: LOG3 0000254b: POP 0000254c: POP 0000254d: JUMP 0000254e: JUMPDEST 0000254f: PUSH1 0x00 00002551: PUSH1 0x40 00002553: MLOAD 00002554: PUSH32 0x23b872dd00000000000000000000000000000000000000000000000000000000 00002575: DUP2 00002576: MSTORE 00002577: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000258c: DUP6 0000258d: AND 0000258e: PUSH1 0x04 00002590: DUP3 00002591: ADD 00002592: MSTORE 00002593: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000025a8: DUP5 000025a9: AND 000025aa: PUSH1 0x24 000025ac: DUP3 000025ad: ADD 000025ae: MSTORE 000025af: DUP3 000025b0: PUSH1 0x44 000025b2: DUP3 000025b3: ADD 000025b4: MSTORE 000025b5: PUSH1 0x20 000025b7: PUSH1 0x00 000025b9: PUSH1 0x64 000025bb: DUP4 000025bc: PUSH1 0x00 000025be: DUP11 000025bf: GAS 000025c0: CALL 000025c1: RETURNDATASIZE 000025c2: ISZERO 000025c3: PUSH1 0x1f 000025c5: RETURNDATASIZE 000025c6: GT 000025c7: PUSH1 0x01 000025c9: PUSH1 0x00 000025cb: MLOAD 000025cc: EQ 000025cd: AND 000025ce: OR 000025cf: AND 000025d0: SWAP2 000025d1: POP 000025d2: POP 000025d3: DUP1 000025d4: PUSH2 0x23f5 000025d7: JUMPI 000025d8: PUSH1 0x40 000025da: MLOAD 000025db: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 000025fc: DUP2 000025fd: MSTORE 000025fe: PUSH1 0x20 00002600: PUSH1 0x04 00002602: DUP3 00002603: ADD 00002604: MSTORE 00002605: PUSH1 0x14 00002607: PUSH1 0x24 00002609: DUP3 0000260a: ADD 0000260b: MSTORE 0000260c: PUSH32 0x5452414e534645525f46524f4d5f4641494c4544000000000000000000000000 0000262d: PUSH1 0x44 0000262f: DUP3 00002630: ADD 00002631: MSTORE 00002632: PUSH1 0x64 00002634: ADD 00002635: PUSH2 0x0590 00002638: JUMP 00002639: JUMPDEST 0000263a: PUSH1 0x00 0000263c: DUP1 0000263d: PUSH1 0x00 0000263f: DUP1 00002640: PUSH1 0x00 00002642: DUP6 00002643: DUP8 00002644: GAS 00002645: CALL 00002646: SWAP1 00002647: POP 00002648: DUP1 00002649: PUSH2 0x1865 0000264c: JUMPI 0000264d: PUSH1 0x40 0000264f: MLOAD 00002650: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00002671: DUP2 00002672: MSTORE 00002673: PUSH1 0x20 00002675: PUSH1 0x04 00002677: DUP3 00002678: ADD 00002679: MSTORE 0000267a: PUSH1 0x13 0000267c: PUSH1 0x24 0000267e: DUP3 0000267f: ADD 00002680: MSTORE 00002681: PUSH32 0x4554485f5452414e534645525f4641494c454400000000000000000000000000 000026a2: PUSH1 0x44 000026a4: DUP3 000026a5: ADD 000026a6: MSTORE 000026a7: PUSH1 0x64 000026a9: ADD 000026aa: PUSH2 0x0590 000026ad: JUMP 000026ae: JUMPDEST 000026af: PUSH1 0x00 000026b1: PUSH1 0x40 000026b3: MLOAD 000026b4: PUSH32 0xa9059cbb00000000000000000000000000000000000000000000000000000000 000026d5: DUP2 000026d6: MSTORE 000026d7: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000026ec: DUP5 000026ed: AND 000026ee: PUSH1 0x04 000026f0: DUP3 000026f1: ADD 000026f2: MSTORE 000026f3: DUP3 000026f4: PUSH1 0x24 000026f6: DUP3 000026f7: ADD 000026f8: MSTORE 000026f9: PUSH1 0x20 000026fb: PUSH1 0x00 000026fd: PUSH1 0x44 000026ff: DUP4 00002700: PUSH1 0x00 00002702: DUP10 00002703: GAS 00002704: CALL 00002705: RETURNDATASIZE 00002706: ISZERO 00002707: PUSH1 0x1f 00002709: RETURNDATASIZE 0000270a: GT 0000270b: PUSH1 0x01 0000270d: PUSH1 0x00 0000270f: MLOAD 00002710: EQ 00002711: AND 00002712: OR 00002713: AND 00002714: SWAP2 00002715: POP 00002716: POP 00002717: DUP1 00002718: PUSH2 0x086b 0000271b: JUMPI 0000271c: PUSH1 0x40 0000271e: MLOAD 0000271f: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00002740: DUP2 00002741: MSTORE 00002742: PUSH1 0x20 00002744: PUSH1 0x04 00002746: DUP3 00002747: ADD 00002748: MSTORE 00002749: PUSH1 0x0f 0000274b: PUSH1 0x24 0000274d: DUP3 0000274e: ADD 0000274f: MSTORE 00002750: PUSH32 0x5452414e534645525f4641494c45440000000000000000000000000000000000 00002771: PUSH1 0x44 00002773: DUP3 00002774: ADD 00002775: MSTORE 00002776: PUSH1 0x64 00002778: ADD 00002779: PUSH2 0x0590 0000277c: JUMP 0000277d: JUMPDEST 0000277e: DUP3 0000277f: DUP1 00002780: SLOAD 00002781: PUSH2 0x2789 00002784: SWAP1 00002785: PUSH2 0x2e05 00002788: JUMP 00002789: JUMPDEST 0000278a: SWAP1 0000278b: PUSH1 0x00 0000278d: MSTORE 0000278e: PUSH1 0x20 00002790: PUSH1 0x00 00002792: KECCAK256 00002793: SWAP1 00002794: PUSH1 0x1f 00002796: ADD 00002797: PUSH1 0x20 00002799: SWAP1 0000279a: DIV 0000279b: DUP2 0000279c: ADD 0000279d: SWAP3 0000279e: DUP3 0000279f: PUSH2 0x27ab 000027a2: JUMPI 000027a3: PUSH1 0x00 000027a5: DUP6 000027a6: SSTORE 000027a7: PUSH2 0x27f1 000027aa: JUMP 000027ab: JUMPDEST 000027ac: DUP3 000027ad: PUSH1 0x1f 000027af: LT 000027b0: PUSH2 0x27c4 000027b3: JUMPI 000027b4: DUP1 000027b5: MLOAD 000027b6: PUSH1 0xff 000027b8: NOT 000027b9: AND 000027ba: DUP4 000027bb: DUP1 000027bc: ADD 000027bd: OR 000027be: DUP6 000027bf: SSTORE 000027c0: PUSH2 0x27f1 000027c3: JUMP 000027c4: JUMPDEST 000027c5: DUP3 000027c6: DUP1 000027c7: ADD 000027c8: PUSH1 0x01 000027ca: ADD 000027cb: DUP6 000027cc: SSTORE 000027cd: DUP3 000027ce: ISZERO 000027cf: PUSH2 0x27f1 000027d2: JUMPI 000027d3: SWAP2 000027d4: DUP3 000027d5: ADD 000027d6: JUMPDEST 000027d7: DUP3 000027d8: DUP2 000027d9: GT 000027da: ISZERO 000027db: PUSH2 0x27f1 000027de: JUMPI 000027df: DUP3 000027e0: MLOAD 000027e1: DUP3 000027e2: SSTORE 000027e3: SWAP2 000027e4: PUSH1 0x20 000027e6: ADD 000027e7: SWAP2 000027e8: SWAP1 000027e9: PUSH1 0x01 000027eb: ADD 000027ec: SWAP1 000027ed: PUSH2 0x27d6 000027f0: JUMP 000027f1: JUMPDEST 000027f2: POP 000027f3: PUSH2 0x27fd 000027f6: SWAP3 000027f7: SWAP2 000027f8: POP 000027f9: PUSH2 0x2801 000027fc: JUMP 000027fd: JUMPDEST 000027fe: POP 000027ff: SWAP1 00002800: JUMP 00002801: JUMPDEST 00002802: JUMPDEST 00002803: DUP1 00002804: DUP3 00002805: GT 00002806: ISZERO 00002807: PUSH2 0x27fd 0000280a: JUMPI 0000280b: PUSH1 0x00 0000280d: DUP2 0000280e: SSTORE 0000280f: PUSH1 0x01 00002811: ADD 00002812: PUSH2 0x2802 00002815: JUMP 00002816: JUMPDEST 00002817: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000282c: DUP2 0000282d: AND 0000282e: DUP2 0000282f: EQ 00002830: PUSH2 0x1489 00002833: JUMPI 00002834: PUSH1 0x00 00002836: DUP1 00002837: REVERT 00002838: JUMPDEST 00002839: DUP1 0000283a: CALLDATALOAD 0000283b: PUSH2 0x2843 0000283e: DUP2 0000283f: PUSH2 0x2816 00002842: JUMP 00002843: JUMPDEST 00002844: SWAP2 00002845: SWAP1 00002846: POP 00002847: JUMP 00002848: JUMPDEST 00002849: PUSH1 0x00 0000284b: DUP1 0000284c: PUSH1 0x40 0000284e: DUP4 0000284f: DUP6 00002850: SUB 00002851: SLT 00002852: ISZERO 00002853: PUSH2 0x285b 00002856: JUMPI 00002857: PUSH1 0x00 00002859: DUP1 0000285a: REVERT 0000285b: JUMPDEST 0000285c: DUP3 0000285d: CALLDATALOAD 0000285e: SWAP2 0000285f: POP 00002860: PUSH1 0x20 00002862: DUP4 00002863: ADD 00002864: CALLDATALOAD 00002865: PUSH2 0x286d 00002868: DUP2 00002869: PUSH2 0x2816 0000286c: JUMP 0000286d: JUMPDEST 0000286e: DUP1 0000286f: SWAP2 00002870: POP 00002871: POP 00002872: SWAP3 00002873: POP 00002874: SWAP3 00002875: SWAP1 00002876: POP 00002877: JUMP 00002878: JUMPDEST 00002879: PUSH1 0x00 0000287b: DUP1 0000287c: DUP4 0000287d: PUSH1 0x1f 0000287f: DUP5 00002880: ADD 00002881: SLT 00002882: PUSH2 0x288a 00002885: JUMPI 00002886: PUSH1 0x00 00002888: DUP1 00002889: REVERT 0000288a: JUMPDEST 0000288b: POP 0000288c: DUP2 0000288d: CALLDATALOAD 0000288e: PUSH8 0xffffffffffffffff 00002897: DUP2 00002898: GT 00002899: ISZERO 0000289a: PUSH2 0x28a2 0000289d: JUMPI 0000289e: PUSH1 0x00 000028a0: DUP1 000028a1: REVERT 000028a2: JUMPDEST 000028a3: PUSH1 0x20 000028a5: DUP4 000028a6: ADD 000028a7: SWAP2 000028a8: POP 000028a9: DUP4 000028aa: PUSH1 0x20 000028ac: DUP3 000028ad: DUP6 000028ae: ADD 000028af: ADD 000028b0: GT 000028b1: ISZERO 000028b2: PUSH2 0x13e2 000028b5: JUMPI 000028b6: PUSH1 0x00 000028b8: DUP1 000028b9: REVERT 000028ba: JUMPDEST 000028bb: PUSH1 0x00 000028bd: DUP1 000028be: PUSH1 0x00 000028c0: DUP1 000028c1: PUSH1 0x00 000028c3: DUP1 000028c4: PUSH1 0x00 000028c6: DUP1 000028c7: PUSH1 0xc0 000028c9: DUP10 000028ca: DUP12 000028cb: SUB 000028cc: SLT 000028cd: ISZERO 000028ce: PUSH2 0x28d6 000028d1: JUMPI 000028d2: PUSH1 0x00 000028d4: DUP1 000028d5: REVERT 000028d6: JUMPDEST 000028d7: DUP9 000028d8: CALLDATALOAD 000028d9: PUSH2 0x28e1 000028dc: DUP2 000028dd: PUSH2 0x2816 000028e0: JUMP 000028e1: JUMPDEST 000028e2: SWAP8 000028e3: POP 000028e4: PUSH1 0x20 000028e6: DUP10 000028e7: ADD 000028e8: CALLDATALOAD 000028e9: SWAP7 000028ea: POP 000028eb: PUSH1 0x40 000028ed: DUP10 000028ee: ADD 000028ef: CALLDATALOAD 000028f0: SWAP6 000028f1: POP 000028f2: PUSH1 0x60 000028f4: DUP10 000028f5: ADD 000028f6: CALLDATALOAD 000028f7: PUSH2 0x28ff 000028fa: DUP2 000028fb: PUSH2 0x2816 000028fe: JUMP 000028ff: JUMPDEST 00002900: SWAP5 00002901: POP 00002902: PUSH1 0x80 00002904: DUP10 00002905: ADD 00002906: CALLDATALOAD 00002907: PUSH8 0xffffffffffffffff 00002910: DUP1 00002911: DUP3 00002912: GT 00002913: ISZERO 00002914: PUSH2 0x291c 00002917: JUMPI 00002918: PUSH1 0x00 0000291a: DUP1 0000291b: REVERT 0000291c: JUMPDEST 0000291d: PUSH2 0x2928 00002920: DUP13 00002921: DUP4 00002922: DUP14 00002923: ADD 00002924: PUSH2 0x2878 00002927: JUMP 00002928: JUMPDEST 00002929: SWAP1 0000292a: SWAP7 0000292b: POP 0000292c: SWAP5 0000292d: POP 0000292e: PUSH1 0xa0 00002930: DUP12 00002931: ADD 00002932: CALLDATALOAD 00002933: SWAP2 00002934: POP 00002935: DUP1 00002936: DUP3 00002937: GT 00002938: ISZERO 00002939: PUSH2 0x2941 0000293c: JUMPI 0000293d: PUSH1 0x00 0000293f: DUP1 00002940: REVERT 00002941: JUMPDEST 00002942: POP 00002943: PUSH2 0x294e 00002946: DUP12 00002947: DUP3 00002948: DUP13 00002949: ADD 0000294a: PUSH2 0x2878 0000294d: JUMP 0000294e: JUMPDEST 0000294f: SWAP10 00002950: SWAP13 00002951: SWAP9 00002952: SWAP12 00002953: POP 00002954: SWAP7 00002955: SWAP10 00002956: POP 00002957: SWAP5 00002958: SWAP8 00002959: SWAP4 0000295a: SWAP7 0000295b: SWAP3 0000295c: SWAP6 0000295d: SWAP5 0000295e: POP 0000295f: POP 00002960: POP 00002961: JUMP 00002962: JUMPDEST 00002963: PUSH1 0x00 00002965: PUSH1 0x20 00002967: DUP3 00002968: DUP5 00002969: SUB 0000296a: SLT 0000296b: ISZERO 0000296c: PUSH2 0x2974 0000296f: JUMPI 00002970: PUSH1 0x00 00002972: DUP1 00002973: REVERT 00002974: JUMPDEST 00002975: DUP2 00002976: CALLDATALOAD 00002977: PUSH2 0x09ae 0000297a: DUP2 0000297b: PUSH2 0x2816 0000297e: JUMP 0000297f: JUMPDEST 00002980: PUSH1 0x00 00002982: JUMPDEST 00002983: DUP4 00002984: DUP2 00002985: LT 00002986: ISZERO 00002987: PUSH2 0x299a 0000298a: JUMPI 0000298b: DUP2 0000298c: DUP2 0000298d: ADD 0000298e: MLOAD 0000298f: DUP4 00002990: DUP3 00002991: ADD 00002992: MSTORE 00002993: PUSH1 0x20 00002995: ADD 00002996: PUSH2 0x2982 00002999: JUMP 0000299a: JUMPDEST 0000299b: DUP4 0000299c: DUP2 0000299d: GT 0000299e: ISZERO 0000299f: PUSH2 0x086b 000029a2: JUMPI 000029a3: POP 000029a4: POP 000029a5: PUSH1 0x00 000029a7: SWAP2 000029a8: ADD 000029a9: MSTORE 000029aa: JUMP 000029ab: JUMPDEST 000029ac: PUSH1 0x00 000029ae: DUP2 000029af: MLOAD 000029b0: DUP1 000029b1: DUP5 000029b2: MSTORE 000029b3: PUSH2 0x29c3 000029b6: DUP2 000029b7: PUSH1 0x20 000029b9: DUP7 000029ba: ADD 000029bb: PUSH1 0x20 000029bd: DUP7 000029be: ADD 000029bf: PUSH2 0x297f 000029c2: JUMP 000029c3: JUMPDEST 000029c4: PUSH1 0x1f 000029c6: ADD 000029c7: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 000029e8: AND 000029e9: SWAP3 000029ea: SWAP1 000029eb: SWAP3 000029ec: ADD 000029ed: PUSH1 0x20 000029ef: ADD 000029f0: SWAP3 000029f1: SWAP2 000029f2: POP 000029f3: POP 000029f4: JUMP 000029f5: JUMPDEST 000029f6: PUSH1 0x20 000029f8: DUP2 000029f9: MSTORE 000029fa: PUSH1 0x00 000029fc: PUSH2 0x09ae 000029ff: PUSH1 0x20 00002a01: DUP4 00002a02: ADD 00002a03: DUP5 00002a04: PUSH2 0x29ab 00002a07: JUMP 00002a08: JUMPDEST 00002a09: PUSH1 0x00 00002a0b: DUP1 00002a0c: PUSH1 0x00 00002a0e: PUSH1 0x60 00002a10: DUP5 00002a11: DUP7 00002a12: SUB 00002a13: SLT 00002a14: ISZERO 00002a15: PUSH2 0x2a1d 00002a18: JUMPI 00002a19: PUSH1 0x00 00002a1b: DUP1 00002a1c: REVERT 00002a1d: JUMPDEST 00002a1e: DUP4 00002a1f: CALLDATALOAD 00002a20: PUSH2 0x2a28 00002a23: DUP2 00002a24: PUSH2 0x2816 00002a27: JUMP 00002a28: JUMPDEST 00002a29: SWAP3 00002a2a: POP 00002a2b: PUSH1 0x20 00002a2d: DUP5 00002a2e: ADD 00002a2f: CALLDATALOAD 00002a30: PUSH2 0x2a38 00002a33: DUP2 00002a34: PUSH2 0x2816 00002a37: JUMP 00002a38: JUMPDEST 00002a39: SWAP3 00002a3a: SWAP6 00002a3b: SWAP3 00002a3c: SWAP5 00002a3d: POP 00002a3e: POP 00002a3f: POP 00002a40: PUSH1 0x40 00002a42: SWAP2 00002a43: SWAP1 00002a44: SWAP2 00002a45: ADD 00002a46: CALLDATALOAD 00002a47: SWAP1 00002a48: JUMP 00002a49: JUMPDEST 00002a4a: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000 00002a6b: PUSH1 0x00 00002a6d: MSTORE 00002a6e: PUSH1 0x41 00002a70: PUSH1 0x04 00002a72: MSTORE 00002a73: PUSH1 0x24 00002a75: PUSH1 0x00 00002a77: REVERT 00002a78: JUMPDEST 00002a79: PUSH1 0x40 00002a7b: MLOAD 00002a7c: PUSH1 0x1f 00002a7e: DUP3 00002a7f: ADD 00002a80: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 00002aa1: AND 00002aa2: DUP2 00002aa3: ADD 00002aa4: PUSH8 0xffffffffffffffff 00002aad: DUP2 00002aae: GT 00002aaf: DUP3 00002ab0: DUP3 00002ab1: LT 00002ab2: OR 00002ab3: ISZERO 00002ab4: PUSH2 0x2abf 00002ab7: JUMPI 00002ab8: PUSH2 0x2abf 00002abb: PUSH2 0x2a49 00002abe: JUMP 00002abf: JUMPDEST 00002ac0: PUSH1 0x40 00002ac2: MSTORE 00002ac3: SWAP2 00002ac4: SWAP1 00002ac5: POP 00002ac6: JUMP 00002ac7: JUMPDEST 00002ac8: PUSH1 0x00 00002aca: PUSH8 0xffffffffffffffff 00002ad3: DUP3 00002ad4: GT 00002ad5: ISZERO 00002ad6: PUSH2 0x2ae1 00002ad9: JUMPI 00002ada: PUSH2 0x2ae1 00002add: PUSH2 0x2a49 00002ae0: JUMP 00002ae1: JUMPDEST 00002ae2: POP 00002ae3: PUSH1 0x1f 00002ae5: ADD 00002ae6: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 00002b07: AND 00002b08: PUSH1 0x20 00002b0a: ADD 00002b0b: SWAP1 00002b0c: JUMP 00002b0d: JUMPDEST 00002b0e: PUSH1 0x00 00002b10: DUP1 00002b11: PUSH1 0x40 00002b13: DUP4 00002b14: DUP6 00002b15: SUB 00002b16: SLT 00002b17: ISZERO 00002b18: PUSH2 0x2b20 00002b1b: JUMPI 00002b1c: PUSH1 0x00 00002b1e: DUP1 00002b1f: REVERT 00002b20: JUMPDEST 00002b21: DUP3 00002b22: CALLDATALOAD 00002b23: PUSH4 0xffffffff 00002b28: DUP2 00002b29: AND 00002b2a: DUP2 00002b2b: EQ 00002b2c: PUSH2 0x2b34 00002b2f: JUMPI 00002b30: PUSH1 0x00 00002b32: DUP1 00002b33: REVERT 00002b34: JUMPDEST 00002b35: SWAP2 00002b36: POP 00002b37: PUSH1 0x20 00002b39: DUP4 00002b3a: ADD 00002b3b: CALLDATALOAD 00002b3c: PUSH8 0xffffffffffffffff 00002b45: DUP2 00002b46: GT 00002b47: ISZERO 00002b48: PUSH2 0x2b50 00002b4b: JUMPI 00002b4c: PUSH1 0x00 00002b4e: DUP1 00002b4f: REVERT 00002b50: JUMPDEST 00002b51: DUP4 00002b52: ADD 00002b53: PUSH1 0x1f 00002b55: DUP2 00002b56: ADD 00002b57: DUP6 00002b58: SGT 00002b59: PUSH2 0x2b61 00002b5c: JUMPI 00002b5d: PUSH1 0x00 00002b5f: DUP1 00002b60: REVERT 00002b61: JUMPDEST 00002b62: DUP1 00002b63: CALLDATALOAD 00002b64: PUSH2 0x2b74 00002b67: PUSH2 0x2b6f 00002b6a: DUP3 00002b6b: PUSH2 0x2ac7 00002b6e: JUMP 00002b6f: JUMPDEST 00002b70: PUSH2 0x2a78 00002b73: JUMP 00002b74: JUMPDEST 00002b75: DUP2 00002b76: DUP2 00002b77: MSTORE 00002b78: DUP7 00002b79: PUSH1 0x20 00002b7b: DUP4 00002b7c: DUP6 00002b7d: ADD 00002b7e: ADD 00002b7f: GT 00002b80: ISZERO 00002b81: PUSH2 0x2b89 00002b84: JUMPI 00002b85: PUSH1 0x00 00002b87: DUP1 00002b88: REVERT 00002b89: JUMPDEST 00002b8a: DUP2 00002b8b: PUSH1 0x20 00002b8d: DUP5 00002b8e: ADD 00002b8f: PUSH1 0x20 00002b91: DUP4 00002b92: ADD 00002b93: CALLDATACOPY 00002b94: PUSH1 0x00 00002b96: PUSH1 0x20 00002b98: DUP4 00002b99: DUP4 00002b9a: ADD 00002b9b: ADD 00002b9c: MSTORE 00002b9d: DUP1 00002b9e: SWAP4 00002b9f: POP 00002ba0: POP 00002ba1: POP 00002ba2: POP 00002ba3: SWAP3 00002ba4: POP 00002ba5: SWAP3 00002ba6: SWAP1 00002ba7: POP 00002ba8: JUMP 00002ba9: JUMPDEST 00002baa: PUSH1 0x00 00002bac: DUP1 00002bad: PUSH1 0x40 00002baf: DUP4 00002bb0: DUP6 00002bb1: SUB 00002bb2: SLT 00002bb3: ISZERO 00002bb4: PUSH2 0x2bbc 00002bb7: JUMPI 00002bb8: PUSH1 0x00 00002bba: DUP1 00002bbb: REVERT 00002bbc: JUMPDEST 00002bbd: DUP3 00002bbe: CALLDATALOAD 00002bbf: PUSH2 0x2bc7 00002bc2: DUP2 00002bc3: PUSH2 0x2816 00002bc6: JUMP 00002bc7: JUMPDEST 00002bc8: SWAP5 00002bc9: PUSH1 0x20 00002bcb: SWAP4 00002bcc: SWAP1 00002bcd: SWAP4 00002bce: ADD 00002bcf: CALLDATALOAD 00002bd0: SWAP4 00002bd1: POP 00002bd2: POP 00002bd3: POP 00002bd4: JUMP 00002bd5: JUMPDEST 00002bd6: DUP1 00002bd7: CALLDATALOAD 00002bd8: DUP1 00002bd9: ISZERO 00002bda: ISZERO 00002bdb: DUP2 00002bdc: EQ 00002bdd: PUSH2 0x2843 00002be0: JUMPI 00002be1: PUSH1 0x00 00002be3: DUP1 00002be4: REVERT 00002be5: JUMPDEST 00002be6: PUSH1 0x00 00002be8: DUP1 00002be9: PUSH1 0x40 00002beb: DUP4 00002bec: DUP6 00002bed: SUB 00002bee: SLT 00002bef: ISZERO 00002bf0: PUSH2 0x2bf8 00002bf3: JUMPI 00002bf4: PUSH1 0x00 00002bf6: DUP1 00002bf7: REVERT 00002bf8: JUMPDEST 00002bf9: DUP3 00002bfa: CALLDATALOAD 00002bfb: PUSH2 0x2c03 00002bfe: DUP2 00002bff: PUSH2 0x2816 00002c02: JUMP 00002c03: JUMPDEST 00002c04: SWAP2 00002c05: POP 00002c06: PUSH2 0x2c11 00002c09: PUSH1 0x20 00002c0b: DUP5 00002c0c: ADD 00002c0d: PUSH2 0x2bd5 00002c10: JUMP 00002c11: JUMPDEST 00002c12: SWAP1 00002c13: POP 00002c14: SWAP3 00002c15: POP 00002c16: SWAP3 00002c17: SWAP1 00002c18: POP 00002c19: JUMP 00002c1a: JUMPDEST 00002c1b: DUP1 00002c1c: CALLDATALOAD 00002c1d: PUSH1 0xff 00002c1f: DUP2 00002c20: AND 00002c21: DUP2 00002c22: EQ 00002c23: PUSH2 0x2843 00002c26: JUMPI 00002c27: PUSH1 0x00 00002c29: DUP1 00002c2a: REVERT 00002c2b: JUMPDEST 00002c2c: PUSH1 0x00 00002c2e: DUP1 00002c2f: PUSH1 0x00 00002c31: DUP1 00002c32: PUSH1 0x00 00002c34: DUP1 00002c35: PUSH1 0x00 00002c37: DUP1 00002c38: PUSH1 0x00 00002c3a: DUP1 00002c3b: PUSH1 0x00 00002c3d: DUP1 00002c3e: PUSH2 0x0140 00002c41: DUP14 00002c42: DUP16 00002c43: SUB 00002c44: SLT 00002c45: ISZERO 00002c46: PUSH2 0x2c4e 00002c49: JUMPI 00002c4a: PUSH1 0x00 00002c4c: DUP1 00002c4d: REVERT 00002c4e: JUMPDEST 00002c4f: PUSH2 0x2c57 00002c52: DUP14 00002c53: PUSH2 0x2838 00002c56: JUMP 00002c57: JUMPDEST 00002c58: SWAP12 00002c59: POP 00002c5a: PUSH1 0x20 00002c5c: DUP14 00002c5d: ADD 00002c5e: CALLDATALOAD 00002c5f: SWAP11 00002c60: POP 00002c61: PUSH1 0x40 00002c63: DUP14 00002c64: ADD 00002c65: CALLDATALOAD 00002c66: SWAP10 00002c67: POP 00002c68: PUSH2 0x2c73 00002c6b: PUSH1 0x60 00002c6d: DUP15 00002c6e: ADD 00002c6f: PUSH2 0x2838 00002c72: JUMP 00002c73: JUMPDEST 00002c74: SWAP9 00002c75: POP 00002c76: PUSH8 0xffffffffffffffff 00002c7f: PUSH1 0x80 00002c81: DUP15 00002c82: ADD 00002c83: CALLDATALOAD 00002c84: GT 00002c85: ISZERO 00002c86: PUSH2 0x2c8e 00002c89: JUMPI 00002c8a: PUSH1 0x00 00002c8c: DUP1 00002c8d: REVERT 00002c8e: JUMPDEST 00002c8f: PUSH2 0x2c9e 00002c92: DUP15 00002c93: PUSH1 0x80 00002c95: DUP16 00002c96: ADD 00002c97: CALLDATALOAD 00002c98: DUP16 00002c99: ADD 00002c9a: PUSH2 0x2878 00002c9d: JUMP 00002c9e: JUMPDEST 00002c9f: SWAP1 00002ca0: SWAP9 00002ca1: POP 00002ca2: SWAP7 00002ca3: POP 00002ca4: PUSH8 0xffffffffffffffff 00002cad: PUSH1 0xa0 00002caf: DUP15 00002cb0: ADD 00002cb1: CALLDATALOAD 00002cb2: GT 00002cb3: ISZERO 00002cb4: PUSH2 0x2cbc 00002cb7: JUMPI 00002cb8: PUSH1 0x00 00002cba: DUP1 00002cbb: REVERT 00002cbc: JUMPDEST 00002cbd: PUSH2 0x2ccc 00002cc0: DUP15 00002cc1: PUSH1 0xa0 00002cc3: DUP16 00002cc4: ADD 00002cc5: CALLDATALOAD 00002cc6: DUP16 00002cc7: ADD 00002cc8: PUSH2 0x2878 00002ccb: JUMP 00002ccc: JUMPDEST 00002ccd: SWAP1 00002cce: SWAP7 00002ccf: POP 00002cd0: SWAP5 00002cd1: POP 00002cd2: PUSH1 0xc0 00002cd4: DUP14 00002cd5: ADD 00002cd6: CALLDATALOAD 00002cd7: SWAP4 00002cd8: POP 00002cd9: PUSH2 0x2ce4 00002cdc: PUSH1 0xe0 00002cde: DUP15 00002cdf: ADD 00002ce0: PUSH2 0x2c1a 00002ce3: JUMP 00002ce4: JUMPDEST 00002ce5: SWAP3 00002ce6: POP 00002ce7: PUSH2 0x0100 00002cea: DUP14 00002ceb: ADD 00002cec: CALLDATALOAD 00002ced: SWAP2 00002cee: POP 00002cef: PUSH2 0x0120 00002cf2: DUP14 00002cf3: ADD 00002cf4: CALLDATALOAD 00002cf5: SWAP1 00002cf6: POP 00002cf7: SWAP3 00002cf8: SWAP6 00002cf9: SWAP9 00002cfa: SWAP12 00002cfb: POP 00002cfc: SWAP3 00002cfd: SWAP6 00002cfe: SWAP9 00002cff: SWAP12 00002d00: POP 00002d01: SWAP3 00002d02: SWAP6 00002d03: SWAP9 00002d04: SWAP12 00002d05: JUMP 00002d06: JUMPDEST 00002d07: PUSH1 0x00 00002d09: DUP1 00002d0a: DUP4 00002d0b: PUSH1 0x1f 00002d0d: DUP5 00002d0e: ADD 00002d0f: SLT 00002d10: PUSH2 0x2d18 00002d13: JUMPI 00002d14: PUSH1 0x00 00002d16: DUP1 00002d17: REVERT 00002d18: JUMPDEST 00002d19: POP 00002d1a: DUP2 00002d1b: CALLDATALOAD 00002d1c: PUSH8 0xffffffffffffffff 00002d25: DUP2 00002d26: GT 00002d27: ISZERO 00002d28: PUSH2 0x2d30 00002d2b: JUMPI 00002d2c: PUSH1 0x00 00002d2e: DUP1 00002d2f: REVERT 00002d30: JUMPDEST 00002d31: PUSH1 0x20 00002d33: DUP4 00002d34: ADD 00002d35: SWAP2 00002d36: POP 00002d37: DUP4 00002d38: PUSH1 0x20 00002d3a: DUP3 00002d3b: PUSH1 0x05 00002d3d: SHL 00002d3e: DUP6 00002d3f: ADD 00002d40: ADD 00002d41: GT 00002d42: ISZERO 00002d43: PUSH2 0x13e2 00002d46: JUMPI 00002d47: PUSH1 0x00 00002d49: DUP1 00002d4a: REVERT 00002d4b: JUMPDEST 00002d4c: PUSH1 0x00 00002d4e: DUP1 00002d4f: PUSH1 0x00 00002d51: DUP1 00002d52: PUSH1 0x40 00002d54: DUP6 00002d55: DUP8 00002d56: SUB 00002d57: SLT 00002d58: ISZERO 00002d59: PUSH2 0x2d61 00002d5c: JUMPI 00002d5d: PUSH1 0x00 00002d5f: DUP1 00002d60: REVERT 00002d61: JUMPDEST 00002d62: DUP5 00002d63: CALLDATALOAD 00002d64: PUSH8 0xffffffffffffffff 00002d6d: DUP1 00002d6e: DUP3 00002d6f: GT 00002d70: ISZERO 00002d71: PUSH2 0x2d79 00002d74: JUMPI 00002d75: PUSH1 0x00 00002d77: DUP1 00002d78: REVERT 00002d79: JUMPDEST 00002d7a: PUSH2 0x2d85 00002d7d: DUP9 00002d7e: DUP4 00002d7f: DUP10 00002d80: ADD 00002d81: PUSH2 0x2d06 00002d84: JUMP 00002d85: JUMPDEST 00002d86: SWAP1 00002d87: SWAP7 00002d88: POP 00002d89: SWAP5 00002d8a: POP 00002d8b: PUSH1 0x20 00002d8d: DUP8 00002d8e: ADD 00002d8f: CALLDATALOAD 00002d90: SWAP2 00002d91: POP 00002d92: DUP1 00002d93: DUP3 00002d94: GT 00002d95: ISZERO 00002d96: PUSH2 0x2d9e 00002d99: JUMPI 00002d9a: PUSH1 0x00 00002d9c: DUP1 00002d9d: REVERT 00002d9e: JUMPDEST 00002d9f: POP 00002da0: PUSH2 0x2dab 00002da3: DUP8 00002da4: DUP3 00002da5: DUP9 00002da6: ADD 00002da7: PUSH2 0x2d06 00002daa: JUMP 00002dab: JUMPDEST 00002dac: SWAP6 00002dad: SWAP9 00002dae: SWAP5 00002daf: SWAP8 00002db0: POP 00002db1: SWAP6 00002db2: POP 00002db3: POP 00002db4: POP 00002db5: POP 00002db6: JUMP 00002db7: JUMPDEST 00002db8: PUSH1 0x00 00002dba: PUSH1 0x20 00002dbc: DUP3 00002dbd: DUP5 00002dbe: SUB 00002dbf: SLT 00002dc0: ISZERO 00002dc1: PUSH2 0x2dc9 00002dc4: JUMPI 00002dc5: PUSH1 0x00 00002dc7: DUP1 00002dc8: REVERT 00002dc9: JUMPDEST 00002dca: POP 00002dcb: CALLDATALOAD 00002dcc: SWAP2 00002dcd: SWAP1 00002dce: POP 00002dcf: JUMP 00002dd0: JUMPDEST 00002dd1: PUSH1 0x00 00002dd3: DUP1 00002dd4: PUSH1 0x00 00002dd6: PUSH1 0x60 00002dd8: DUP5 00002dd9: DUP7 00002dda: SUB 00002ddb: SLT 00002ddc: ISZERO 00002ddd: PUSH2 0x2de5 00002de0: JUMPI 00002de1: PUSH1 0x00 00002de3: DUP1 00002de4: REVERT 00002de5: JUMPDEST 00002de6: DUP4 00002de7: CALLDATALOAD 00002de8: PUSH2 0x2df0 00002deb: DUP2 00002dec: PUSH2 0x2816 00002def: JUMP 00002df0: JUMPDEST 00002df1: SWAP6 00002df2: PUSH1 0x20 00002df4: DUP6 00002df5: ADD 00002df6: CALLDATALOAD 00002df7: SWAP6 00002df8: POP 00002df9: PUSH1 0x40 00002dfb: SWAP1 00002dfc: SWAP5 00002dfd: ADD 00002dfe: CALLDATALOAD 00002dff: SWAP4 00002e00: SWAP3 00002e01: POP 00002e02: POP 00002e03: POP 00002e04: JUMP 00002e05: JUMPDEST 00002e06: PUSH1 0x01 00002e08: DUP2 00002e09: DUP2 00002e0a: SHR 00002e0b: SWAP1 00002e0c: DUP3 00002e0d: AND 00002e0e: DUP1 00002e0f: PUSH2 0x2e19 00002e12: JUMPI 00002e13: PUSH1 0x7f 00002e15: DUP3 00002e16: AND 00002e17: SWAP2 00002e18: POP 00002e19: JUMPDEST 00002e1a: PUSH1 0x20 00002e1c: DUP3 00002e1d: LT 00002e1e: DUP2 00002e1f: SUB 00002e20: PUSH2 0x2e52 00002e23: JUMPI 00002e24: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000 00002e45: PUSH1 0x00 00002e47: MSTORE 00002e48: PUSH1 0x22 00002e4a: PUSH1 0x04 00002e4c: MSTORE 00002e4d: PUSH1 0x24 00002e4f: PUSH1 0x00 00002e51: REVERT 00002e52: JUMPDEST 00002e53: POP 00002e54: SWAP2 00002e55: SWAP1 00002e56: POP 00002e57: JUMP 00002e58: JUMPDEST 00002e59: PUSH1 0x00 00002e5b: DUP3 00002e5c: PUSH1 0x1f 00002e5e: DUP4 00002e5f: ADD 00002e60: SLT 00002e61: PUSH2 0x2e69 00002e64: JUMPI 00002e65: PUSH1 0x00 00002e67: DUP1 00002e68: REVERT 00002e69: JUMPDEST 00002e6a: DUP2 00002e6b: MLOAD 00002e6c: PUSH2 0x2e77 00002e6f: PUSH2 0x2b6f 00002e72: DUP3 00002e73: PUSH2 0x2ac7 00002e76: JUMP 00002e77: JUMPDEST 00002e78: DUP2 00002e79: DUP2 00002e7a: MSTORE 00002e7b: DUP5 00002e7c: PUSH1 0x20 00002e7e: DUP4 00002e7f: DUP7 00002e80: ADD 00002e81: ADD 00002e82: GT 00002e83: ISZERO 00002e84: PUSH2 0x2e8c 00002e87: JUMPI 00002e88: PUSH1 0x00 00002e8a: DUP1 00002e8b: REVERT 00002e8c: JUMPDEST 00002e8d: PUSH2 0x1083 00002e90: DUP3 00002e91: PUSH1 0x20 00002e93: DUP4 00002e94: ADD 00002e95: PUSH1 0x20 00002e97: DUP8 00002e98: ADD 00002e99: PUSH2 0x297f 00002e9c: JUMP 00002e9d: JUMPDEST 00002e9e: PUSH1 0x00 00002ea0: DUP1 00002ea1: PUSH1 0x00 00002ea3: DUP1 00002ea4: PUSH1 0x80 00002ea6: DUP6 00002ea7: DUP8 00002ea8: SUB 00002ea9: SLT 00002eaa: ISZERO 00002eab: PUSH2 0x2eb3 00002eae: JUMPI 00002eaf: PUSH1 0x00 00002eb1: DUP1 00002eb2: REVERT 00002eb3: JUMPDEST 00002eb4: DUP5 00002eb5: MLOAD 00002eb6: PUSH2 0x2ebe 00002eb9: DUP2 00002eba: PUSH2 0x2816 00002ebd: JUMP 00002ebe: JUMPDEST 00002ebf: DUP1 00002ec0: SWAP5 00002ec1: POP 00002ec2: POP 00002ec3: PUSH1 0x20 00002ec5: DUP6 00002ec6: ADD 00002ec7: MLOAD 00002ec8: SWAP3 00002ec9: POP 00002eca: PUSH1 0x40 00002ecc: DUP6 00002ecd: ADD 00002ece: MLOAD 00002ecf: SWAP2 00002ed0: POP 00002ed1: PUSH1 0x60 00002ed3: DUP6 00002ed4: ADD 00002ed5: MLOAD 00002ed6: PUSH8 0xffffffffffffffff 00002edf: DUP2 00002ee0: GT 00002ee1: ISZERO 00002ee2: PUSH2 0x2eea 00002ee5: JUMPI 00002ee6: PUSH1 0x00 00002ee8: DUP1 00002ee9: REVERT 00002eea: JUMPDEST 00002eeb: PUSH2 0x2ef6 00002eee: DUP8 00002eef: DUP3 00002ef0: DUP9 00002ef1: ADD 00002ef2: PUSH2 0x2e58 00002ef5: JUMP 00002ef6: JUMPDEST 00002ef7: SWAP2 00002ef8: POP 00002ef9: POP 00002efa: SWAP3 00002efb: SWAP6 00002efc: SWAP2 00002efd: SWAP5 00002efe: POP 00002eff: SWAP3 00002f00: POP 00002f01: JUMP 00002f02: JUMPDEST 00002f03: PUSH1 0x00 00002f05: PUSH1 0x20 00002f07: DUP3 00002f08: DUP5 00002f09: SUB 00002f0a: SLT 00002f0b: ISZERO 00002f0c: PUSH2 0x2f14 00002f0f: JUMPI 00002f10: PUSH1 0x00 00002f12: DUP1 00002f13: REVERT 00002f14: JUMPDEST 00002f15: POP 00002f16: MLOAD 00002f17: SWAP2 00002f18: SWAP1 00002f19: POP 00002f1a: JUMP 00002f1b: JUMPDEST 00002f1c: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000 00002f3d: PUSH1 0x00 00002f3f: MSTORE 00002f40: PUSH1 0x32 00002f42: PUSH1 0x04 00002f44: MSTORE 00002f45: PUSH1 0x24 00002f47: PUSH1 0x00 00002f49: REVERT 00002f4a: JUMPDEST 00002f4b: PUSH1 0x00 00002f4d: PUSH1 0x20 00002f4f: DUP3 00002f50: DUP5 00002f51: SUB 00002f52: SLT 00002f53: ISZERO 00002f54: PUSH2 0x2f5c 00002f57: JUMPI 00002f58: PUSH1 0x00 00002f5a: DUP1 00002f5b: REVERT 00002f5c: JUMPDEST 00002f5d: PUSH2 0x09ae 00002f60: DUP3 00002f61: PUSH2 0x2bd5 00002f64: JUMP 00002f65: JUMPDEST 00002f66: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000 00002f87: PUSH1 0x00 00002f89: MSTORE 00002f8a: PUSH1 0x11 00002f8c: PUSH1 0x04 00002f8e: MSTORE 00002f8f: PUSH1 0x24 00002f91: PUSH1 0x00 00002f93: REVERT 00002f94: JUMPDEST 00002f95: PUSH1 0x00 00002f97: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 00002fb8: DUP3 00002fb9: SUB 00002fba: PUSH2 0x2fc5 00002fbd: JUMPI 00002fbe: PUSH2 0x2fc5 00002fc1: PUSH2 0x2f65 00002fc4: JUMP 00002fc5: JUMPDEST 00002fc6: POP 00002fc7: PUSH1 0x01 00002fc9: ADD 00002fca: SWAP1 00002fcb: JUMP 00002fcc: JUMPDEST 00002fcd: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002fe2: DUP2 00002fe3: MLOAD 00002fe4: AND 00002fe5: DUP3 00002fe6: MSTORE 00002fe7: PUSH1 0x20 00002fe9: DUP2 00002fea: ADD 00002feb: MLOAD 00002fec: PUSH1 0x20 00002fee: DUP4 00002fef: ADD 00002ff0: MSTORE 00002ff1: PUSH1 0x00 00002ff3: PUSH1 0x40 00002ff5: DUP3 00002ff6: ADD 00002ff7: MLOAD 00002ff8: PUSH1 0x60 00002ffa: PUSH1 0x40 00002ffc: DUP6 00002ffd: ADD 00002ffe: MSTORE 00002fff: PUSH2 0x1083 00003002: PUSH1 0x60 00003004: DUP6 00003005: ADD 00003006: DUP3 00003007: PUSH2 0x29ab 0000300a: JUMP 0000300b: JUMPDEST 0000300c: PUSH1 0x20 0000300e: DUP2 0000300f: MSTORE 00003010: PUSH1 0x00 00003012: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00003027: DUP1 00003028: DUP5 00003029: MLOAD 0000302a: AND 0000302b: PUSH1 0x20 0000302d: DUP5 0000302e: ADD 0000302f: MSTORE 00003030: DUP1 00003031: PUSH1 0x20 00003033: DUP6 00003034: ADD 00003035: MLOAD 00003036: AND 00003037: PUSH1 0x40 00003039: DUP5 0000303a: ADD 0000303b: MSTORE 0000303c: POP 0000303d: PUSH1 0x40 0000303f: DUP4 00003040: ADD 00003041: MLOAD 00003042: PUSH1 0x60 00003044: DUP1 00003045: DUP5 00003046: ADD 00003047: MSTORE 00003048: PUSH2 0x1083 0000304b: PUSH1 0x80 0000304d: DUP5 0000304e: ADD 0000304f: DUP3 00003050: PUSH2 0x2fcc 00003053: JUMP 00003054: JUMPDEST 00003055: PUSH1 0x00 00003057: PUSH1 0x60 00003059: DUP3 0000305a: DUP5 0000305b: SUB 0000305c: SLT 0000305d: ISZERO 0000305e: PUSH2 0x3066 00003061: JUMPI 00003062: PUSH1 0x00 00003064: DUP1 00003065: REVERT 00003066: JUMPDEST 00003067: PUSH1 0x40 00003069: MLOAD 0000306a: PUSH1 0x60 0000306c: DUP2 0000306d: ADD 0000306e: PUSH8 0xffffffffffffffff 00003077: DUP3 00003078: DUP3 00003079: LT 0000307a: DUP2 0000307b: DUP4 0000307c: GT 0000307d: OR 0000307e: ISZERO 0000307f: PUSH2 0x308a 00003082: JUMPI 00003083: PUSH2 0x308a 00003086: PUSH2 0x2a49 00003089: JUMP 0000308a: JUMPDEST 0000308b: DUP2 0000308c: PUSH1 0x40 0000308e: MSTORE 0000308f: DUP3 00003090: SWAP4 00003091: POP 00003092: DUP5 00003093: MLOAD 00003094: SWAP2 00003095: POP 00003096: PUSH2 0x309e 00003099: DUP3 0000309a: PUSH2 0x2816 0000309d: JUMP 0000309e: JUMPDEST 0000309f: DUP2 000030a0: DUP4 000030a1: MSTORE 000030a2: PUSH1 0x20 000030a4: DUP6 000030a5: ADD 000030a6: MLOAD 000030a7: PUSH1 0x20 000030a9: DUP5 000030aa: ADD 000030ab: MSTORE 000030ac: PUSH1 0x40 000030ae: DUP6 000030af: ADD 000030b0: MLOAD 000030b1: SWAP2 000030b2: POP 000030b3: DUP1 000030b4: DUP3 000030b5: GT 000030b6: ISZERO 000030b7: PUSH2 0x30bf 000030ba: JUMPI 000030bb: PUSH1 0x00 000030bd: DUP1 000030be: REVERT 000030bf: JUMPDEST 000030c0: POP 000030c1: PUSH2 0x30cc 000030c4: DUP6 000030c5: DUP3 000030c6: DUP7 000030c7: ADD 000030c8: PUSH2 0x2e58 000030cb: JUMP 000030cc: JUMPDEST 000030cd: PUSH1 0x40 000030cf: DUP4 000030d0: ADD 000030d1: MSTORE 000030d2: POP 000030d3: POP 000030d4: SWAP3 000030d5: SWAP2 000030d6: POP 000030d7: POP 000030d8: JUMP 000030d9: JUMPDEST 000030da: PUSH1 0x00 000030dc: DUP1 000030dd: PUSH1 0x40 000030df: DUP4 000030e0: DUP6 000030e1: SUB 000030e2: SLT 000030e3: ISZERO 000030e4: PUSH2 0x30ec 000030e7: JUMPI 000030e8: PUSH1 0x00 000030ea: DUP1 000030eb: REVERT 000030ec: JUMPDEST 000030ed: DUP3 000030ee: MLOAD 000030ef: PUSH8 0xffffffffffffffff 000030f8: DUP1 000030f9: DUP3 000030fa: GT 000030fb: ISZERO 000030fc: PUSH2 0x3104 000030ff: JUMPI 00003100: PUSH1 0x00 00003102: DUP1 00003103: REVERT 00003104: JUMPDEST 00003105: PUSH2 0x3110 00003108: DUP7 00003109: DUP4 0000310a: DUP8 0000310b: ADD 0000310c: PUSH2 0x3054 0000310f: JUMP 00003110: JUMPDEST 00003111: SWAP4 00003112: POP 00003113: PUSH1 0x20 00003115: DUP6 00003116: ADD 00003117: MLOAD 00003118: SWAP2 00003119: POP 0000311a: DUP1 0000311b: DUP3 0000311c: GT 0000311d: ISZERO 0000311e: PUSH2 0x3126 00003121: JUMPI 00003122: PUSH1 0x00 00003124: DUP1 00003125: REVERT 00003126: JUMPDEST 00003127: POP 00003128: PUSH2 0x3133 0000312b: DUP6 0000312c: DUP3 0000312d: DUP7 0000312e: ADD 0000312f: PUSH2 0x2e58 00003132: JUMP 00003133: JUMPDEST 00003134: SWAP2 00003135: POP 00003136: POP 00003137: SWAP3 00003138: POP 00003139: SWAP3 0000313a: SWAP1 0000313b: POP 0000313c: JUMP 0000313d: JUMPDEST 0000313e: PUSH1 0x20 00003140: DUP2 00003141: MSTORE 00003142: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00003157: DUP3 00003158: MLOAD 00003159: AND 0000315a: PUSH1 0x20 0000315c: DUP3 0000315d: ADD 0000315e: MSTORE 0000315f: PUSH1 0x00 00003161: PUSH1 0x20 00003163: DUP4 00003164: ADD 00003165: MLOAD 00003166: PUSH1 0x80 00003168: PUSH1 0x40 0000316a: DUP5 0000316b: ADD 0000316c: MSTORE 0000316d: PUSH2 0x3179 00003170: PUSH1 0xa0 00003172: DUP5 00003173: ADD 00003174: DUP3 00003175: PUSH2 0x29ab 00003178: JUMP 00003179: JUMPDEST 0000317a: SWAP1 0000317b: POP 0000317c: PUSH1 0x40 0000317e: DUP5 0000317f: ADD 00003180: MLOAD 00003181: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 000031a2: DUP1 000031a3: DUP6 000031a4: DUP5 000031a5: SUB 000031a6: ADD 000031a7: PUSH1 0x60 000031a9: DUP7 000031aa: ADD 000031ab: MSTORE 000031ac: PUSH2 0x31b5 000031af: DUP4 000031b0: DUP4 000031b1: PUSH2 0x29ab 000031b4: JUMP 000031b5: JUMPDEST 000031b6: SWAP3 000031b7: POP 000031b8: PUSH1 0x60 000031ba: DUP7 000031bb: ADD 000031bc: MLOAD 000031bd: SWAP2 000031be: POP 000031bf: DUP1 000031c0: DUP6 000031c1: DUP5 000031c2: SUB 000031c3: ADD 000031c4: PUSH1 0x80 000031c6: DUP7 000031c7: ADD 000031c8: MSTORE 000031c9: POP 000031ca: PUSH2 0x31d3 000031cd: DUP3 000031ce: DUP3 000031cf: PUSH2 0x2fcc 000031d2: JUMP 000031d3: JUMPDEST 000031d4: SWAP6 000031d5: SWAP5 000031d6: POP 000031d7: POP 000031d8: POP 000031d9: POP 000031da: POP 000031db: JUMP 000031dc: JUMPDEST 000031dd: PUSH1 0x00 000031df: PUSH1 0x20 000031e1: DUP3 000031e2: DUP5 000031e3: SUB 000031e4: SLT 000031e5: ISZERO 000031e6: PUSH2 0x31ee 000031e9: JUMPI 000031ea: PUSH1 0x00 000031ec: DUP1 000031ed: REVERT 000031ee: JUMPDEST 000031ef: DUP2 000031f0: MLOAD 000031f1: PUSH8 0xffffffffffffffff 000031fa: DUP2 000031fb: GT 000031fc: ISZERO 000031fd: PUSH2 0x3205 00003200: JUMPI 00003201: PUSH1 0x00 00003203: DUP1 00003204: REVERT 00003205: JUMPDEST 00003206: PUSH2 0x1083 00003209: DUP5 0000320a: DUP3 0000320b: DUP6 0000320c: ADD 0000320d: PUSH2 0x3054 00003210: JUMP 00003211: JUMPDEST 00003212: PUSH1 0x00 00003214: DUP3 00003215: DUP3 00003216: LT 00003217: ISZERO 00003218: PUSH2 0x3223 0000321b: JUMPI 0000321c: PUSH2 0x3223 0000321f: PUSH2 0x2f65 00003222: JUMP 00003223: JUMPDEST 00003224: POP 00003225: SUB 00003226: SWAP1 00003227: JUMP 00003228: JUMPDEST 00003229: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000323e: DUP6 0000323f: AND 00003240: DUP2 00003241: MSTORE 00003242: DUP4 00003243: PUSH1 0x20 00003245: DUP3 00003246: ADD 00003247: MSTORE 00003248: DUP3 00003249: PUSH1 0x40 0000324b: DUP3 0000324c: ADD 0000324d: MSTORE 0000324e: PUSH1 0x80 00003250: PUSH1 0x60 00003252: DUP3 00003253: ADD 00003254: MSTORE 00003255: PUSH1 0x00 00003257: PUSH2 0x3263 0000325a: PUSH1 0x80 0000325c: DUP4 0000325d: ADD 0000325e: DUP5 0000325f: PUSH2 0x29ab 00003262: JUMP 00003263: JUMPDEST 00003264: SWAP7 00003265: SWAP6 00003266: POP 00003267: POP 00003268: POP 00003269: POP 0000326a: POP 0000326b: POP 0000326c: JUMP 0000326d: JUMPDEST 0000326e: DUP4 0000326f: DUP2 00003270: MSTORE 00003271: PUSH1 0x60 00003273: PUSH1 0x20 00003275: DUP3 00003276: ADD 00003277: MSTORE 00003278: PUSH1 0x00 0000327a: PUSH2 0x3286 0000327d: PUSH1 0x60 0000327f: DUP4 00003280: ADD 00003281: DUP6 00003282: PUSH2 0x29ab 00003285: JUMP 00003286: JUMPDEST 00003287: DUP3 00003288: DUP2 00003289: SUB 0000328a: PUSH1 0x40 0000328c: DUP5 0000328d: ADD 0000328e: MSTORE 0000328f: PUSH2 0x3263 00003292: DUP2 00003293: DUP6 00003294: PUSH2 0x29ab 00003297: JUMP 00003298: JUMPDEST 00003299: PUSH1 0x20 0000329b: DUP2 0000329c: MSTORE 0000329d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000032b2: DUP3 000032b3: MLOAD 000032b4: AND 000032b5: PUSH1 0x20 000032b7: DUP3 000032b8: ADD 000032b9: MSTORE 000032ba: PUSH1 0x00 000032bc: PUSH1 0x20 000032be: DUP4 000032bf: ADD 000032c0: MLOAD 000032c1: PUSH1 0x60 000032c3: PUSH1 0x40 000032c5: DUP5 000032c6: ADD 000032c7: MSTORE 000032c8: PUSH2 0x32d4 000032cb: PUSH1 0x80 000032cd: DUP5 000032ce: ADD 000032cf: DUP3 000032d0: PUSH2 0x29ab 000032d3: JUMP 000032d4: JUMPDEST 000032d5: SWAP1 000032d6: POP 000032d7: PUSH1 0x40 000032d9: DUP5 000032da: ADD 000032db: MLOAD 000032dc: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 000032fd: DUP5 000032fe: DUP4 000032ff: SUB 00003300: ADD 00003301: PUSH1 0x60 00003303: DUP6 00003304: ADD 00003305: MSTORE 00003306: PUSH2 0x31d3 00003309: DUP3 0000330a: DUP3 0000330b: PUSH2 0x2fcc 0000330e: JUMP 0000330f: JUMPDEST 00003310: PUSH1 0x00 00003312: DUP1 00003313: PUSH1 0x40 00003315: DUP4 00003316: DUP6 00003317: SUB 00003318: SLT 00003319: ISZERO 0000331a: PUSH2 0x3322 0000331d: JUMPI 0000331e: PUSH1 0x00 00003320: DUP1 00003321: REVERT 00003322: JUMPDEST 00003323: DUP3 00003324: MLOAD 00003325: PUSH8 0xffffffffffffffff 0000332e: DUP1 0000332f: DUP3 00003330: GT 00003331: ISZERO 00003332: PUSH2 0x333a 00003335: JUMPI 00003336: PUSH1 0x00 00003338: DUP1 00003339: REVERT 0000333a: JUMPDEST 0000333b: PUSH2 0x3346 0000333e: DUP7 0000333f: DUP4 00003340: DUP8 00003341: ADD 00003342: PUSH2 0x2e58 00003345: JUMP 00003346: JUMPDEST 00003347: SWAP4 00003348: POP 00003349: PUSH1 0x20 0000334b: DUP6 0000334c: ADD 0000334d: MLOAD 0000334e: SWAP2 0000334f: POP 00003350: DUP1 00003351: DUP3 00003352: GT 00003353: ISZERO 00003354: PUSH2 0x335c 00003357: JUMPI 00003358: PUSH1 0x00 0000335a: DUP1 0000335b: REVERT 0000335c: JUMPDEST 0000335d: POP 0000335e: PUSH2 0x3133 00003361: DUP6 00003362: DUP3 00003363: DUP7 00003364: ADD 00003365: PUSH2 0x3054 00003368: JUMP 00003369: JUMPDEST 0000336a: PUSH1 0x20 0000336c: DUP2 0000336d: MSTORE 0000336e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00003383: DUP3 00003384: MLOAD 00003385: AND 00003386: PUSH1 0x20 00003388: DUP3 00003389: ADD 0000338a: MSTORE 0000338b: PUSH1 0x20 0000338d: DUP3 0000338e: ADD 0000338f: MLOAD 00003390: PUSH1 0x40 00003392: DUP3 00003393: ADD 00003394: MSTORE 00003395: PUSH1 0x00 00003397: PUSH1 0x40 00003399: DUP4 0000339a: ADD 0000339b: MLOAD 0000339c: PUSH1 0xa0 0000339e: PUSH1 0x60 000033a0: DUP5 000033a1: ADD 000033a2: MSTORE 000033a3: PUSH2 0x33af 000033a6: PUSH1 0xc0 000033a8: DUP5 000033a9: ADD 000033aa: DUP3 000033ab: PUSH2 0x29ab 000033ae: JUMP 000033af: JUMPDEST 000033b0: SWAP1 000033b1: POP 000033b2: PUSH1 0x60 000033b4: DUP5 000033b5: ADD 000033b6: MLOAD 000033b7: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 000033d8: DUP1 000033d9: DUP6 000033da: DUP5 000033db: SUB 000033dc: ADD 000033dd: PUSH1 0x80 000033df: DUP7 000033e0: ADD 000033e1: MSTORE 000033e2: PUSH2 0x33eb 000033e5: DUP4 000033e6: DUP4 000033e7: PUSH2 0x29ab 000033ea: JUMP 000033eb: JUMPDEST 000033ec: SWAP3 000033ed: POP 000033ee: PUSH1 0x80 000033f0: DUP7 000033f1: ADD 000033f2: MLOAD 000033f3: SWAP2 000033f4: POP 000033f5: DUP1 000033f6: DUP6 000033f7: DUP5 000033f8: SUB 000033f9: ADD 000033fa: PUSH1 0xa0 000033fc: DUP7 000033fd: ADD 000033fe: MSTORE 000033ff: POP 00003400: PUSH2 0x31d3 00003403: DUP3 00003404: DUP3 00003405: PUSH2 0x2fcc 00003408: JUMP 00003409: JUMPDEST 0000340a: PUSH1 0x00 0000340c: PUSH1 0x20 0000340e: DUP3 0000340f: DUP5 00003410: SUB 00003411: SLT 00003412: ISZERO 00003413: PUSH2 0x341b 00003416: JUMPI 00003417: PUSH1 0x00 00003419: DUP1 0000341a: REVERT 0000341b: JUMPDEST 0000341c: DUP2 0000341d: MLOAD 0000341e: PUSH8 0xffffffffffffffff 00003427: DUP1 00003428: DUP3 00003429: GT 0000342a: ISZERO 0000342b: PUSH2 0x3433 0000342e: JUMPI 0000342f: PUSH1 0x00 00003431: DUP1 00003432: REVERT 00003433: JUMPDEST 00003434: SWAP1 00003435: DUP4 00003436: ADD 00003437: SWAP1 00003438: PUSH1 0x40 0000343a: DUP3 0000343b: DUP7 0000343c: SUB 0000343d: SLT 0000343e: ISZERO 0000343f: PUSH2 0x3447 00003442: JUMPI 00003443: PUSH1 0x00 00003445: DUP1 00003446: REVERT 00003447: JUMPDEST 00003448: PUSH1 0x40 0000344a: MLOAD 0000344b: PUSH1 0x40 0000344d: DUP2 0000344e: ADD 0000344f: DUP2 00003450: DUP2 00003451: LT 00003452: DUP4 00003453: DUP3 00003454: GT 00003455: OR 00003456: ISZERO 00003457: PUSH2 0x3462 0000345a: JUMPI 0000345b: PUSH2 0x3462 0000345e: PUSH2 0x2a49 00003461: JUMP 00003462: JUMPDEST 00003463: PUSH1 0x40 00003465: MSTORE 00003466: DUP3 00003467: MLOAD 00003468: DUP3 00003469: DUP2 0000346a: GT 0000346b: ISZERO 0000346c: PUSH2 0x3474 0000346f: JUMPI 00003470: PUSH1 0x00 00003472: DUP1 00003473: REVERT 00003474: JUMPDEST 00003475: PUSH2 0x3480 00003478: DUP8 00003479: DUP3 0000347a: DUP7 0000347b: ADD 0000347c: PUSH2 0x2e58 0000347f: JUMP 00003480: JUMPDEST 00003481: DUP3 00003482: MSTORE 00003483: POP 00003484: PUSH1 0x20 00003486: DUP4 00003487: ADD 00003488: MLOAD 00003489: DUP3 0000348a: DUP2 0000348b: GT 0000348c: ISZERO 0000348d: PUSH2 0x3495 00003490: JUMPI 00003491: PUSH1 0x00 00003493: DUP1 00003494: REVERT 00003495: JUMPDEST 00003496: PUSH2 0x34a1 00003499: DUP8 0000349a: DUP3 0000349b: DUP7 0000349c: ADD 0000349d: PUSH2 0x2e58 000034a0: JUMP 000034a1: JUMPDEST 000034a2: PUSH1 0x20 000034a4: DUP4 000034a5: ADD 000034a6: MSTORE 000034a7: POP 000034a8: SWAP6 000034a9: SWAP5 000034aa: POP 000034ab: POP 000034ac: POP 000034ad: POP 000034ae: POP 000034af: JUMP 000034b0: JUMPDEST 000034b1: PUSH1 0x00 000034b3: DUP2 000034b4: MLOAD 000034b5: PUSH1 0x40 000034b7: DUP5 000034b8: MSTORE 000034b9: PUSH2 0x34c5 000034bc: PUSH1 0x40 000034be: DUP6 000034bf: ADD 000034c0: DUP3 000034c1: PUSH2 0x29ab 000034c4: JUMP 000034c5: JUMPDEST 000034c6: SWAP1 000034c7: POP 000034c8: PUSH1 0x20 000034ca: DUP4 000034cb: ADD 000034cc: MLOAD 000034cd: DUP5 000034ce: DUP3 000034cf: SUB 000034d0: PUSH1 0x20 000034d2: DUP7 000034d3: ADD 000034d4: MSTORE 000034d5: PUSH2 0x31d3 000034d8: DUP3 000034d9: DUP3 000034da: PUSH2 0x29ab 000034dd: JUMP 000034de: JUMPDEST 000034df: PUSH1 0x20 000034e1: DUP2 000034e2: MSTORE 000034e3: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000034f8: DUP3 000034f9: MLOAD 000034fa: AND 000034fb: PUSH1 0x20 000034fd: DUP3 000034fe: ADD 000034ff: MSTORE 00003500: PUSH1 0x00 00003502: PUSH1 0x20 00003504: DUP4 00003505: ADD 00003506: MLOAD 00003507: PUSH1 0x40 00003509: DUP1 0000350a: DUP5 0000350b: ADD 0000350c: MSTORE 0000350d: PUSH2 0x1083 00003510: PUSH1 0x60 00003512: DUP5 00003513: ADD 00003514: DUP3 00003515: PUSH2 0x34b0 00003518: JUMP 00003519: JUMPDEST 0000351a: PUSH1 0x20 0000351c: DUP2 0000351d: MSTORE 0000351e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00003533: DUP3 00003534: MLOAD 00003535: AND 00003536: PUSH1 0x20 00003538: DUP3 00003539: ADD 0000353a: MSTORE 0000353b: PUSH1 0x20 0000353d: DUP3 0000353e: ADD 0000353f: MLOAD 00003540: PUSH1 0x40 00003542: DUP3 00003543: ADD 00003544: MSTORE 00003545: PUSH1 0x00 00003547: PUSH1 0x40 00003549: DUP4 0000354a: ADD 0000354b: MLOAD 0000354c: PUSH1 0x80 0000354e: PUSH1 0x60 00003550: DUP5 00003551: ADD 00003552: MSTORE 00003553: PUSH2 0x355f 00003556: PUSH1 0xa0 00003558: DUP5 00003559: ADD 0000355a: DUP3 0000355b: PUSH2 0x29ab 0000355e: JUMP 0000355f: JUMPDEST 00003560: SWAP1 00003561: POP 00003562: PUSH1 0x60 00003564: DUP5 00003565: ADD 00003566: MLOAD 00003567: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 00003588: DUP5 00003589: DUP4 0000358a: SUB 0000358b: ADD 0000358c: PUSH1 0x80 0000358e: DUP6 0000358f: ADD 00003590: MSTORE 00003591: PUSH2 0x31d3 00003594: DUP3 00003595: DUP3 00003596: PUSH2 0x34b0 00003599: JUMP 0000359a: INVALID 0000359b: LOG2 0000359c: PUSH5 0x6970667358 000035a2: UNKNOWN(0x22) 000035a3: SLT 000035a4: KECCAK256 000035a5: UNKNOWN(0xAB) 000035a6: UNKNOWN(0xD9) 000035a7: UNKNOWN(0x4E) 000035a8: PUSH5 0x85cdaf8fdd 000035ae: UNKNOWN(0xEE) 000035af: UNKNOWN(0xF7) 000035b0: UNKNOWN(0xAD) 000035b1: SWAP9 000035b2: UNKNOWN(0xBC) 000035b3: UNKNOWN(0xDF) 000035b4: DUP11 000035b5: MSTORE 000035b6: SWAP9 000035b7: UNKNOWN(0x2E) 000035b8: UNKNOWN(0x2A) 000035b9: REVERT 000035ba: UNKNOWN(0xD2) 000035bb: UNKNOWN(0xA7) 000035bc: PUSH30
| Severity | Category | Tool | Title | Confidence | Validated | Confirmed | Details |
|---|---|---|---|---|---|---|---|
| high | other | detector | Untrusted CALL target/value reachable | 60 | no | no |
viewtrace_id: 0x1d760b6d6faaca21bd53196246261e408ab9dfa00336e59d98b7d1681d5d5a70
call_targets:
0xde1617ddb7c8a250a409d986930001985cfad76f
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0x1d760b6d6faaca21bd53196246261e408ab9dfa00336e59d98b7d1681d5d5a70",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0xde1617ddb7c8a250a409d986930001985cfad76f"
],
"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": "0xf290aafa",
"selector": "0xf290aafa",
"calldata_variants": [
"0xf290aafa",
"0xf290aafa0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xfc0c546a",
"selector": "0xfc0c546a",
"calldata_variants": [
"0xfc0c546a",
"0xfc0c546a0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xfc3a7b98",
"selector": "0xfc3a7b98",
"calldata_variants": [
"0xfc3a7b98",
"0xfc3a7b980000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xd547741f",
"selector": "0xd547741f",
"calldata_variants": [
"0xd547741f",
"0xd547741f0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe272ad3f",
"selector": "0xe272ad3f",
"calldata_variants": [
"0xe272ad3f",
"0xe272ad3f0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe9ee1eaf",
"selector": "0xe9ee1eaf",
"calldata_variants": [
"0xe9ee1eaf",
"0xe9ee1eaf0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x9dc7b023",
"selector": "0x9dc7b023",
"calldata_variants": [
"0x9dc7b023",
"0x9dc7b0230000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xaad48d80",
"selector": "0xaad48d80",
"calldata_variants": [
"0xaad48d80",
"0xaad48d800000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 3465,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 4997,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 5426,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"call_count": 12,
"guards_detected": [],
"untrusted_call_count": 12
}
|
| high | other | detector | ETH value transfer possible | 55 | no | no |
viewtrace_id: 0x1d760b6d6faaca21bd53196246261e408ab9dfa00336e59d98b7d1681d5d5a70
call_targets:
0xde1617ddb7c8a250a409d986930001985cfad76f
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0x1d760b6d6faaca21bd53196246261e408ab9dfa00336e59d98b7d1681d5d5a70",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0xde1617ddb7c8a250a409d986930001985cfad76f"
],
"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": "0xf290aafa",
"selector": "0xf290aafa",
"calldata_variants": [
"0xf290aafa",
"0xf290aafa0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xfc0c546a",
"selector": "0xfc0c546a",
"calldata_variants": [
"0xfc0c546a",
"0xfc0c546a0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xfc3a7b98",
"selector": "0xfc3a7b98",
"calldata_variants": [
"0xfc3a7b98",
"0xfc3a7b980000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xd547741f",
"selector": "0xd547741f",
"calldata_variants": [
"0xd547741f",
"0xd547741f0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe272ad3f",
"selector": "0xe272ad3f",
"calldata_variants": [
"0xe272ad3f",
"0xe272ad3f0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe9ee1eaf",
"selector": "0xe9ee1eaf",
"calldata_variants": [
"0xe9ee1eaf",
"0xe9ee1eaf0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x9dc7b023",
"selector": "0x9dc7b023",
"calldata_variants": [
"0x9dc7b023",
"0x9dc7b0230000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xaad48d80",
"selector": "0xaad48d80",
"calldata_variants": [
"0xaad48d80",
"0xaad48d800000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 3465,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 4997,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 5426,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"eth_value_calls": 12,
"guards_detected": []
}
|
| high | other | codex | YieldLimitExec hooks encode/decode mismatch can revert inbound mints and corrupt accounting | 85 | no | — |
viewevidence_json{
"evidence": "Controller hook encodes bytes but destination decodes uint256; vault hook encodes uint256 but destination decodes bytes.",
"locations": [
"contracts/contracts/hooks/Controller_YieldLimitExecHook.sol:87",
"contracts/contracts/hooks/Controller_YieldLimitExecHook.sol:110",
"contracts/contracts/hooks/Vault_YieldLimitExecHook.sol:104",
"contracts/contracts/hooks/Vault_YieldLimitExecHook.sol:133"
],
"recommendation": "Make the encoding/decoding types consistent on both ends. Use a single struct or explicit `(uint256 increasedUnderlying, bytes payload)` in both `srcPostHookCall` and `dstPreHookCall`, and add cross-chain payload encoding/decoding tests to prevent regressions.",
"exploit_scenario": "When these hooks are enabled, the source hook encodes `transferInfo.data` as `(bytes, bytes)` (controller) or `(uint256, bytes)` (vault), but the destination hook decodes it as `(uint256, bytes)` (controller) or `(bytes, bytes)` (vault). This ABI mismatch causes `dstPreHookCall` to revert for most payloads (locking funds that were burned/locked on the source chain), or to misinterpret offsets as `increasedUnderlying`, skewing pool limits and totalUnderlyingAssets. A malicious sender can craft payloads to maximize the misdecode or guarantee reverts."
}
|
| medium | access_control | codex | StakeEasy lets any caller spend contract-held tokens | 75 | no | — |
viewevidence_json{
"evidence": "No access control on `createAccountAndStake`, and `_wrapAndStake` uses the contract\u2019s balances with approvals to external contracts.",
"locations": [
"contracts/contracts/bridge/StakeEasy.sol:89",
"contracts/contracts/bridge/StakeEasy.sol:122"
],
"recommendation": "Restrict `createAccountAndStake` to a trusted caller (bridge/hook/execution helper) or require `msg.sender == walletAddress` and pull tokens from the caller with `transferFrom` before staking. Consider adding a rescue function for unexpected balances.",
"exploit_scenario": "`createAccountAndStake` is permissionless and uses the contract\u2019s own balances (bridgedToken/fUSDC/fxUSD) without pulling funds from the caller. If StakeEasy ever receives tokens (e.g., failed execution payload or accidental transfer), any user can call this function with their own `walletAddress` and stake those tokens into their account, effectively stealing assets."
}
|
| medium | math | codex | Pending-share calculation uses pendingUnderlying instead of consumedUnderlying | 75 | no | — |
viewevidence_json{
"evidence": "`consumedShares` is calculated using `pendingUnderlying` instead of `consumedUnderlying`, flipping the pending/consumed split.",
"locations": [
"contracts/contracts/hooks/Controller_YieldLimitExecHook.sol:175",
"contracts/contracts/hooks/Controller_YieldLimitExecHook.sol:179"
],
"recommendation": "Compute `consumedShares` from `consumedUnderlying` (or compute `pendingShares` directly from `pendingUnderlying`), and add invariants to ensure `pendingShares` equals the hook\u2019s remaining share balance.",
"exploit_scenario": "When a transfer exceeds the limit, `pendingUnderlying > 0` and shares are minted to the hook. The hook computes `consumedShares` using `pendingUnderlying`, which inverts the split and stores `pendingShares` larger than the remaining shares. An attacker can then call `retry` and attempt to withdraw more shares than the hook actually holds, potentially draining shares reserved for other pending transfers or permanently blocking retries due to insufficient balance."
}
|
| low | other | codex | Unchecked ERC20 transfer/transferFrom can enable free unwrap or silent accounting drift | 65 | no | — |
viewevidence_json{
"evidence": "Raw ERC20 `transfer/transferFrom` calls are made without checking return values.",
"locations": [
"contracts/contracts/bridge/UnWrapper.sol:14",
"contracts/contracts/bridge/UnWrapper.sol:19",
"contracts/contracts/hooks/Vault_YieldLimitExecHook.sol:223",
"contracts/contracts/hooks/Vault_YieldLimitExecHook.sol:235"
],
"recommendation": "Use `SafeTransferLib.safeTransfer`/`safeTransferFrom` (or check return values explicitly) for all external token transfers.",
"exploit_scenario": "If `baseToken`/`wrappedToken` (or the vault\u2019s underlying asset) return `false` without reverting, `Unwrapper.wrap/unwrap` can send tokens out even when `transferFrom` failed, letting users obtain tokens without paying. In `Vault_YieldLimitExecHook`, transfers back to the vault can silently fail while accounting is updated, leading to asset/ledger divergence."
}
|
| info | other | cast | Heavy CALL-family usage | 55 | no | — |
viewevidence_json{
"notes": "large number of CALL/CALLCODE/STATICCALL opcodes; review external call patterns",
"call_family_count": 15
}
|