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

Analysis Run

019d5667-1339-71d8-a320-f4112d024afe

failed
Chain ID
1
Address
Block Number
Created
Sat, Apr 4, 2026 2:51 AM
Review Summary

What survived the funnel

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

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

Processing Jobs

Status & attempts
ID Type Status Attempts Heartbeat
42993 artifact.fetch complete 1 / 3 1 week ago
42994 proxy.resolve complete 1 / 3 1 week ago
42995 tool.cast_disasm complete 1 / 3 1 week ago
42996 analysis.bundle complete 1 / 3 1 week ago
42997 capability.graph complete 1 / 3 1 week ago
42998 detector.run complete 1 / 3 1 week ago
42999 validation.fork complete 1 / 3 1 week ago
43013 report.consolidate complete 1 / 6 1 week ago
43014 tool.slither failed 2 / 2 1 week ago

Artifact

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

Slither

tool.slither
Status
failed slither failed (exit 1): 'forge clean' running (wd: /tmp/slither-v4qx8jav) 'forge config --json' running 'forge build --build-info --skip ./test/** ./script/** --force' running (wd: /tmp/slither-v4qx8jav) 'forge' returned non-zero exit code 1 Error: Encountered invalid solc version in lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol: No solc version exists that matches the version requirement: ^0.8.20 Traceback (most recent call last): File "/var/www/tripwire/.venv/bin/slither", line 10, in <module> sys.exit(main()) ~~~~^^ File "/var/www/tripwire/.venv/lib/python3.13/site-packages/slither/__main__.py", line 776, in main main_impl(all_detector_classes=detectors, all_printer_classes=printers) ~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/var/www/tripwire/.venv/lib/python3.13/site-packages/slither/__main__.py", line 882, in main_impl ) = process_all(filename, args, detector_classes, printer_classes) ~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/var/www/tripwire/.venv/lib/python3.13/site-packages/slither/__main__.py", line 96, in process_all compilations = compile_all(target, **vars(args)) File "/var/www/tripwire/.venv/lib/python3.13/site-packages/crytic_compile/crytic_compile.py", line 722, in compile_all compilations.append(CryticCompile(target, **kwargs)) ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^ File "/var/www/tripwire/.venv/lib/python3.13/site-packages/crytic_compile/crytic_compile.py", line 211, in __init__ self._compile(**kwargs) ~~~~~~~~~~~~~^^^^^^^^^^ File "/var/www/tripwire/.venv/lib/python3.13/site-packages/crytic_compile/crytic_compile.py", line 633, in _compile self._platform.compile(self, **kwargs) ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^ File "/var/www/tripwire/.venv/lib/python3.13/site-packages/crytic_compile/platform/foundry.py", line 102, in compile hardhat_like_parsing( ~~~~~~~~~~~~~~~~~~~~^ crytic_compile, str(self._target), build_directory, str(self._project_root) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "/var/www/tripwire/.venv/lib/python3.13/site-packages/crytic_compile/platform/hardhat.py", line 52, in hardhat_like_parsing raise InvalidCompilation(txt) crytic_compile.platform.exceptions.InvalidCompilation: Compilation failed. Can you run build command? /tmp/slither-v4qx8jav/out/build-info is not a directory.
Attempts
2 / 2
Findings
0
Solc
View stderr
Traceback (most recent call last):
  File "/var/www/tripwire/worker/worker.py", line 198, in main
    payload = dispatch_job(job_type, job_id, job_meta, run_data, config, laravel_client)
  File "/var/www/tripwire/worker/worker.py", line 114, in dispatch_job
    return slither_run.run(job_id, job_meta, run_data, config, log, laravel_client)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/var/www/tripwire/worker/jobs/slither_run.py", line 1084, in run
    stdout_text, stderr_text, result_json = _run_slither(
                                            ~~~~~~~~~~~~^
        workspace,
        ^^^^^^^^^^
    ...<4 lines>...
        target_path=target_path,
        ^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/var/www/tripwire/worker/jobs/slither_run.py", line 958, in _run_slither
    raise RuntimeError(f"slither failed (exit {result.returncode}): {stderr_text or stdout_text}")
RuntimeError: slither failed (exit 1): 'forge clean' running (wd: /tmp/slither-v4qx8jav)
'forge config --json' running
'forge build --build-info --skip ./test/** ./script/** --force' running (wd: /tmp/slither-v4qx8jav)
'forge' returned non-zero exit code 1
Error: Encountered invalid solc version in lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol: No solc version exists that matches the version requirement: ^0.8.20
Traceback (most recent call last):
  File "/var/www/tripwire/.venv/bin/slither", line 10, in <module>
    sys.exit(main())
             ~~~~^^
  File "/var/www/tripwire/.venv/lib/python3.13/site-packages/slither/__main__.py", line 776, in main
    main_impl(all_detector_classes=detectors, all_printer_classes=printers)
    ~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/var/www/tripwire/.venv/lib/python3.13/site-packages/slither/__main__.py", line 882, in main_impl
    ) = process_all(filename, args, detector_classes, printer_classes)
        ~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/var/www/tripwire/.venv/lib/python3.13/site-packages/slither/__main__.py", line 96, in process_all
    compilations = compile_all(target, **vars(args))
  File "/var/www/tripwire/.venv/lib/python3.13/site-packages/crytic_compile/crytic_compile.py", line 722, in compile_all
    compilations.append(CryticCompile(target, **kwargs))
                        ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^
  File "/var/www/tripwire/.venv/lib/python3.13/site-packages/crytic_compile/crytic_compile.py", line 211, in __init__
    self._compile(**kwargs)
    ~~~~~~~~~~~~~^^^^^^^^^^
  File "/var/www/tripwire/.venv/lib/python3.13/site-packages/crytic_compile/crytic_compile.py", line 633, in _compile
    self._platform.compile(self, **kwargs)
    ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^
  File "/var/www/tripwire/.venv/lib/python3.13/site-packages/crytic_compile/platform/foundry.py", line 102, in compile
    hardhat_like_parsing(
    ~~~~~~~~~~~~~~~~~~~~^
        crytic_compile, str(self._target), build_directory, str(self._project_root)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/var/www/tripwire/.venv/lib/python3.13/site-packages/crytic_compile/platform/hardhat.py", line 52, in hardhat_like_parsing
    raise InvalidCompilation(txt)
crytic_compile.platform.exceptions.InvalidCompilation: Compilation failed. Can you run build command?
/tmp/slither-v4qx8jav/out/build-info is not a directory.

Codex

report.consolidate
Job Status
complete
Attempts
1 / 6
Findings
2
No findings?
no
Summary
Two exploitable issues were identified in the first-party bridge predicate: incorrect ERC20 deposit accounting and missing domain separation in withdrawal signatures.
View stdout
{"no_findings":false,"summary":"Two exploitable issues were identified in the first-party bridge predicate: incorrect ERC20 deposit accounting and missing domain separation in withdrawal signatures.","findings":[{"severity":"high","category":"other","title":"Deposits credit the requested amount instead of the amount actually received","exploit_scenario":"If a mapped token charges transfer fees, rebases, or otherwise delivers less than `_amount`, a user can deposit 100 tokens while the contract only receives 90. The bridge still emits a deposit message for 100, so the remote side can mint/release 100. On withdrawal, the attacker can redeem the full 100 and drain 10 tokens from pooled collateral or make later withdrawals insolvent.","recommendation":"Track the bridge's balance before and after `safeTransferFrom` and use the actual received amount in the deposit message, or explicitly reject fee-on-transfer/rebasing tokens.","evidence":"`_initiateDeposit` transfers tokens in and then emits `DepositToken(..., _amount)` without checking the balance delta, so accounting assumes the full requested amount always arrived.","locations":["contracts/bridge/v2/core/L1/predicates/L1ERC20Predicate.sol:155","contracts/bridge/v2/core/L1/predicates/L1ERC20Predicate.sol:161","contracts/bridge/v2/core/L1/predicates/L1ERC20Predicate.sol:165"]},{"severity":"medium","category":"auth","title":"Withdrawal signatures are replayable across predicate instances on the same chain","exploit_scenario":"Validators sign `keccak256(block.chainid, _data)`. Because the signed payload does not include `address(this)` or any bridge-specific domain, the same signatures are valid for any other `L1ERC20Predicate` instance on the same chain that shares the validator registry and token mapping. A legitimate withdrawal approved for one predicate can therefore be replayed against a second funded predicate/proxy, draining its escrow because replay protection (`orderExecuted`) is only local to each contract.","recommendation":"Domain-separate signatures with `address(this)` and, preferably, a full EIP-712 domain that includes the bridge/proxy identity and explicit message type.","evidence":"`syncWithdraw` computes `messageHash = keccak256(abi.encodePacked(block.chainid, _data))` and uses that for signature recovery. The contract address is never bound into the signed message, while replay protection is only `orderExecuted[from][orderId]` in local storage.","locations":["contracts/bridge/v2/core/L1/predicates/L1ERC20Predicate.sol:82","contracts/bridge/v2/core/L1/predicates/L1ERC20Predicate.sol:86","contracts/bridge/v2/core/L1/predicates/L1ERC20Predicate.sol:97"]}]}
View stderr
OpenAI Codex v0.118.0 (research preview)
--------
workdir: /tmp/codex-wbg4av_k
model: gpt-5.4
provider: openai
approval: never
sandbox: read-only
reasoning effort: high
reasoning summaries: none
session id: 019d56c3-2754-7ff0-8e6f-992980984076
--------
user
You are a security auditor. Audit this Solidity codebase for exploitable vulnerabilities.
Focus on: reentrancy, access control, upgradeability/proxy issues, signature validation, oracle manipulation,
accounting/invariant breaks, external call patterns, unchecked return values, and dangerous delegatecall.

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

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

Output constraints (IMPORTANT):
- severity MUST be exactly one of: info, low, medium, high, critical (lowercase).
- category MUST be exactly one of: access_control, reentrancy, math, oracle, upgradeability, auth, other.
Keep summary short and concrete.
warning: Codex could not find system bubblewrap on PATH. Please install bubblewrap with your package manager. Codex will use the vendored bubblewrap in the meantime.
exec
/bin/bash -lc 'pwd && ls -la && rg --files' in /tmp/codex-wbg4av_k
 succeeded in 0ms:
/tmp/codex-wbg4av_k
total 64
drwx------   4 noahkuhn noahkuhn  4096 Apr  4 04:32 .
drwxrwxrwt 264 nobody   nogroup  24576 Apr  4 04:32 ..
-rw-rw-r--   1 noahkuhn noahkuhn 16455 Apr  4 04:32 AUDIT_BUNDLE.txt
-rw-rw-r--   1 noahkuhn noahkuhn   815 Apr  4 04:32 codex-output-schema.json
drwxrwxr-x   3 noahkuhn noahkuhn  4096 Apr  4 04:32 contracts
drwxrwxr-x   4 noahkuhn noahkuhn  4096 Apr  4 04:32 @openzeppelin
codex-output-schema.json
AUDIT_BUNDLE.txt
@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol
@openzeppelin/contracts-upgradeable/interfaces/draft-IERC1822Upgradeable.sol
@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol
@openzeppelin/contracts-upgradeable/utils/StorageSlotUpgradeable.sol
@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol
@openzeppelin/contracts-upgradeable/proxy/beacon/IBeaconUpgradeable.sol
@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol
contracts/bridge/v2/core/common/IBridgeRegistry.sol
@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol
contracts/bridge/v2/libs/ValidatorSet.sol
contracts/bridge/v2/libs/Create2.sol
@openzeppelin/contracts/utils/Strings.sol
@openzeppelin/contracts/utils/math/Math.sol
@openzeppelin/contracts/token/ERC20/IERC20.sol
@openzeppelin/contracts/utils/Context.sol
@openzeppelin/contracts/utils/Address.sol
@openzeppelin/contracts/token/ERC20/ERC20.sol
@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol
@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol
@openzeppelin/contracts/utils/cryptography/ECDSA.sol
contracts/bridge/v2/core/L1/predicates/IL1Predicate.sol
contracts/bridge/v2/core/L1/predicates/L1ERC20Predicate.sol
@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol

exec
/bin/bash -lc 'wc -l AUDIT_BUNDLE.txt' in /tmp/codex-wbg4av_k
 succeeded in 0ms:
436 AUDIT_BUNDLE.txt

exec
/bin/bash -lc "sed -n '1,220p' AUDIT_BUNDLE.txt" in /tmp/codex-wbg4av_k
 succeeded in 0ms:
This file concatenates the full contents of first-party Solidity sources for auditing.
Do not treat dependency code under lib/ or @openzeppelin/ as first-party.

================================================================================
FILE: contracts/bridge/v2/core/L1/predicates/IL1Predicate.sol
================================================================================
// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;

// LightLink 2023
interface IL1Predicate {
  /* Events */
  function l2TokenBytecodeHash() external view returns (bytes32);

  function mapToken(address _l1Token) external;
}

================================================================================
FILE: contracts/bridge/v2/core/L1/predicates/L1ERC20Predicate.sol
================================================================================
// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;

import "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol";
import "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol";
import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol";
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
import "../../../libs/Create2.sol";
import "./IL1Predicate.sol";
import "../../common/IBridgeRegistry.sol";

// LightLink 2023
contract L1ERC20Predicate is
  Initializable, //
  UUPSUpgradeable,
  ReentrancyGuardUpgradeable,
  IL1Predicate
{
  using ECDSA for bytes32;
  using SafeERC20 for IERC20;

  // variables
  bool public isPaused;
  address public bridgeRegistry;
  address public l2Predicate;
  bytes32 public l2TokenBytecodeHash;
  mapping(address => address) public l1ToL2Gateway;

  mapping(address => uint256) public counter;
  mapping(address => mapping(uint256 => bool)) public orderExecuted;
  mapping(address => mapping(uint256 => mapping(address => bool))) public isConfirmed;

  event TokenMapped(bytes message);
  event DepositToken(bytes message);
  event WithdrawToken(bytes32 messageHash);

  modifier requireMultisig() {
    require(msg.sender == IBridgeRegistry(bridgeRegistry).getMultisig(), "Multisig required");
    _;
  }

  modifier notPaused() {
    require(!isPaused, "Paused");
    _;
  }

  receive() external payable {
    revert("Not supported");
  }

  function recovery(address[] memory _tokens, address _to) external requireMultisig {
    for (uint256 i = 0; i < _tokens.length; i++) {
      address token = _tokens[i];
      uint256 _amount = IERC20(token).balanceOf(address(this));
      if (_amount > 0) {
        IERC20(token).safeTransfer(_to, _amount);
      }
    }
  }

  function deposit(address _l1Token, uint256 _amount) external virtual {
    _initiateDeposit(_l1Token, msg.sender, msg.sender, _amount);
  }

  // verified
  function depositTo(address _l1Token, address _to, uint256 _amount) external virtual {
    _initiateDeposit(_l1Token, msg.sender, _to, _amount);
  }

  function syncWithdraw(
    address[] memory _currentValidators,
    bytes[] memory _signatures,
    // transaction data
    bytes memory _data
  ) external nonReentrant notPaused {
    (address from, uint256 orderId, address l1Token, address l2Token, address to, uint256 amount) = abi.decode(_data, (address, uint256, address, address, address, uint256));
    require(l2Predicate != address(0), "Not implemented");
    require(amount > 0, "Not enough amount");
    require(to != address(0), "Invalid address");
    require(!orderExecuted[from][orderId], "Order already executed");
    require(_currentValidators.length == _signatures.length, "Input mismatch");
    require(l1ToL2Gateway[l1Token] == l2Token, "Invalid token gateway");

    bytes32 messageHash = keccak256(abi.encodePacked(block.chainid, _data));
    _checkValidatorSignatures(
      from,
      orderId,
      _currentValidators,
      _signatures,
      // Get hash of the transaction batch and checkpoint
      messageHash,
      IBridgeRegistry(bridgeRegistry).consensusPowerThreshold()
    );

    orderExecuted[from][orderId] = true;

    IERC20(l1Token).safeTransfer(to, amount);

    emit WithdrawToken(messageHash);
  }

  function initialize(address _registry, address _l2Predicate) public initializer {
    __ReentrancyGuard_init();
    __L1ERC20Predicate_init(_registry, _l2Predicate);
  }

  function modifyL2TokenBytecodeHash(bytes32 _l2TokenBytecodeHash) public requireMultisig {
    l2TokenBytecodeHash = _l2TokenBytecodeHash;
  }

  function toggleIsPaused(bool _status) public requireMultisig {
    isPaused = _status;
  }

  function modifyL2Predicate(address _l2Predicate) public requireMultisig {
    l2Predicate = _l2Predicate;
  }

  function mapToken(address _l1Token) public requireMultisig {
    // check if token is already mapped
    require(l2Predicate != address(0x0), "Invalid L2 pair");
    require(l1ToL2Gateway[_l1Token] == address(0x0), "Already mapped");

    string memory name;
    try ERC20(_l1Token).name() returns (string memory _name) {
      name = _name;
    } catch {}
    string memory symbol;
    try ERC20(_l1Token).symbol() returns (string memory _symbol) {
      symbol = _symbol;
    } catch {}
    uint8 decimals = ERC20(_l1Token).decimals();

    // compute child token address before deployment using create2
    bytes32 salt = keccak256(abi.encodePacked(_l1Token));
    address l2Token = Create2.computeAddress(salt, l2TokenBytecodeHash, l2Predicate);

    // add into mapped tokens
    l1ToL2Gateway[_l1Token] = l2Token;

    emit TokenMapped(abi.encode(msg.sender, counter[msg.sender], _l1Token, name, symbol, decimals));
    counter[msg.sender]++;
  }

  function __L1ERC20Predicate_init(address _registry, address _l2Predicate) internal {
    bridgeRegistry = _registry;
    l2Predicate = _l2Predicate;
    l2TokenBytecodeHash = 0xb9ae7ba14d826de669be54f7c79008181b430f21bd3ff90dac8cce1e60ae88a9;
  }

  function _authorizeUpgrade(address) internal override requireMultisig {}

  function _initiateDeposit(address _l1Token, address _from, address _to, uint256 _amount) internal notPaused {
    require(l2Predicate != address(0), "Not implemented");
    require(_amount > 0, "Not enough amount");
    require(_to != address(0), "Invalid address");
    require(l1ToL2Gateway[_l1Token] != address(0), "Not supported");

    IERC20(_l1Token).safeTransferFrom(_from, address(this), _amount);

    uint256 counter_ = counter[_from];

    emit DepositToken(abi.encode(_from, counter_, _l1Token, l1ToL2Gateway[_l1Token], _to, _amount));
    counter[_from]++;
  }

  function _checkValidatorSignatures(
    address _from, //
    uint256 _orderId,
    address[] memory _currentValidators,
    bytes[] memory _signatures,
    bytes32 _messageHash,
    uint256 _powerThreshold
  ) private {
    uint256 cumulativePower = 0;

    for (uint256 i = 0; i < _currentValidators.length; i++) {
      address signer = _messageHash.toEthSignedMessageHash().recover(_signatures[i]);
      require(signer == _currentValidators[i], "Validator signature does not match.");
      require(IBridgeRegistry(bridgeRegistry).validValidator(signer), "Invalid validator");
      require(!isConfirmed[_from][_orderId][signer], "No duplicate validator");

      // prevent double-signing attacks
      isConfirmed[_from][_orderId][signer] = true;

      // Sum up cumulative power
      cumulativePower += IBridgeRegistry(bridgeRegistry).getPower(signer);

      // Break early to avoid wasting gas
      if (cumulativePower > _powerThreshold) {
        break;
      }
    }

    // Check that there was enough power
    require(cumulativePower >= _powerThreshold, "Submitted validator set signatures do not have enough power.");
    // Success
  }

exec
/bin/bash -lc "sed -n '221,440p' AUDIT_BUNDLE.txt" in /tmp/codex-wbg4av_k
 succeeded in 0ms:
}

================================================================================
FILE: contracts/bridge/v2/core/common/IBridgeRegistry.sol
================================================================================
// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;
import "../../libs/ValidatorSet.sol";

// LightLink 2023
interface IBridgeRegistry {
  event ConsensusPowerThresholdModified(uint256 _amount);
  event ValidatorsModifed(address[] _accounts, uint256[] _powers);
  event ValidatorsRemoved(address[] _accounts);
  event MutisigModified(address _multisig);
  event SystemVerifierModified(address _systemVerifier);

  /* Views */
  function consensusPowerThreshold() external view returns (uint256);

  function validValidator(address) external view returns (bool);

  function getPower(address) external view returns (uint256);

  function getValidators() external view returns (ValidatorSet.Validator[] memory);

  function getMultisig() external view returns (address);

  function getSystemVerifier() external view returns (address);

  /* Actions */
  function modifyConsensusPowerThreshold(uint256 _amount) external;

  function modifyValidators(address[] memory _accounts, uint256[] memory _powers) external;

  function removeValidators(address[] memory _accounts) external;

  function modifySystemVerifier(address _systemVerifier) external;
}

================================================================================
FILE: contracts/bridge/v2/libs/Create2.sol
================================================================================
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (utils/Create2.sol)

pragma solidity 0.8.19;

// LightLink 2023
/**
 * @dev Helper to make usage of the `CREATE2` EVM opcode easier and safer.
 * `CREATE2` can be used to compute in advance the address where a smart
 * contract will be deployed, which allows for interesting new mechanisms known
 * as 'counterfactual interactions'.
 *
 * See the https://eips.ethereum.org/EIPS/eip-1014#motivation[EIP] for more
 * information.
 */
library Create2 {
  function createClone(bytes32 _salt, address _target) internal returns (address _result) {
    bytes20 _targetBytes = bytes20(_target);

    assembly {
      let clone := mload(0x40)
      mstore(clone, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)
      mstore(add(clone, 0x14), _targetBytes)
      mstore(add(clone, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)
      _result := create2(0, clone, 0x37, _salt)
    }

    require(_result != address(0), "Create2: Failed on minimal deploy");
  }

  function createClone2(bytes32 _salt, bytes memory _bytecode) internal returns (address _result) {
    assembly {
      _result := create2(0, add(_bytecode, 0x20), mload(_bytecode), _salt)

      if iszero(extcodesize(_result)) {
        revert(0, 0)
      }
    }

    require(_result != address(0), "Create2: Failed on deploy");
  }

  /**
   * @dev Deploys a contract using `CREATE2`. The address where the contract
   * will be deployed can be known in advance via {computeAddress}.
   *
   * The bytecode for a contract can be obtained from Solidity with
   * `type(contractName).creationCode`.
   *
   * Requirements:
   *
   * - `bytecode` must not be empty.
   * - `salt` must have not been used for `bytecode` already.
   * - the factory must have a balance of at least `amount`.
   * - if `amount` is non-zero, `bytecode` must have a `payable` constructor.
   */
  function deploy(uint256 amount, bytes32 salt, bytes memory bytecode) internal returns (address addr) {
    require(address(this).balance >= amount, "Create2: insufficient balance");
    require(bytecode.length != 0, "Create2: bytecode length is zero");
    /// @solidity memory-safe-assembly
    assembly {
      addr := create2(amount, add(bytecode, 0x20), mload(bytecode), salt)
    }
    require(addr != address(0), "Create2: Failed on deploy");
  }

  /**
   * @dev Returns the address where a contract will be stored if deployed via {deploy}. Any change in the
   * `bytecodeHash` or `salt` will result in a new destination address.
   */
  function computeAddress(bytes32 salt, bytes32 bytecodeHash) internal view returns (address) {
    return computeAddress(salt, bytecodeHash, address(this));
  }

  /**
   * @dev Returns the address where a contract will be stored if deployed via {deploy} from a contract located at
   * `deployer`. If `deployer` is this contract's address, returns the same value as {computeAddress}.
   */
  function computeAddress(bytes32 salt, bytes32 bytecodeHash, address deployer) internal pure returns (address addr) {
    /// @solidity memory-safe-assembly
    assembly {
      let ptr := mload(0x40) // Get free memory pointer

      // |                   | ↓ ptr ...  ↓ ptr + 0x0B (start) ...  ↓ ptr + 0x20 ...  ↓ ptr + 0x40 ...   |
      // |-------------------|---------------------------------------------------------------------------|
      // | bytecodeHash      |                                                        CCCCCCCCCCCCC...CC |
      // | salt              |                                      BBBBBBBBBBBBB...BB                   |
      // | deployer          | 000000...0000AAAAAAAAAAAAAAAAAAA...AA                                     |
      // | 0xFF              |            FF                                                             |
      // |-------------------|---------------------------------------------------------------------------|
      // | memory            | 000000...00FFAAAAAAAAAAAAAAAAAAA...AABBBBBBBBBBBBB...BBCCCCCCCCCCCCC...CC |
      // | keccak(start, 85) |            ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ |

      mstore(add(ptr, 0x40), bytecodeHash)
      mstore(add(ptr, 0x20), salt)
      mstore(ptr, deployer) // Right-aligned with 12 preceding garbage bytes
      let start := add(ptr, 0x0b) // The hashed data starts at the final garbage byte which we will set to 0xff
      mstore8(start, 0xff)
      addr := keccak256(start, 85)
    }
  }
}

================================================================================
FILE: contracts/bridge/v2/libs/ValidatorSet.sol
================================================================================
// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;

// LightLink 2023
library ValidatorSet {
  struct Validator {
    address addr;
    uint256 power;
  }

  struct Record {
    Validator[] values;
    mapping(address => uint256) indexes; // value to index
  }

  function add(Record storage _record, address _value, uint256 _power) internal {
    if (contains(_record, _value)) return; // exist
    _record.values.push(Validator(_value, _power));
    _record.indexes[_value] = _record.values.length;
  }

  function modify(Record storage _record, address _value, uint256 _power) internal {
    if (!contains(_record, _value)) {
      add(_record, _value, _power);
      return;
    }
    uint256 valueIndex = _record.indexes[_value];
    _record.values[valueIndex - 1].power = _power;
  }

  function remove(Record storage _record, address _value) internal {
    uint256 valueIndex = _record.indexes[_value];
    if (valueIndex == 0) return; // removed non-exist value
    uint256 toDeleteIndex = valueIndex - 1; // dealing with out of bounds
    uint256 lastIndex = _record.values.length - 1;
    if (lastIndex != toDeleteIndex) {
      Validator memory lastvalue = _record.values[lastIndex];
      _record.values[toDeleteIndex] = lastvalue;
      _record.indexes[lastvalue.addr] = valueIndex; // Replace lastvalue's index to valueIndex
    }
    _record.values.pop();
    _record.indexes[_value] = 0; // set to 0
  }

  function contains(Record storage _record, address _value) internal view returns (bool) {
    return _record.indexes[_value] != 0;
  }

  function size(Record storage _record) internal view returns (uint256) {
    return _record.values.length;
  }

  function at(Record storage _record, uint256 _index) internal view returns (Validator memory) {
    return _record.values[_index];
  }

  function indexOf(Record storage _record, address _value) internal view returns (bool, uint256) {
    if (!contains(_record, _value)) return (false, 0);
    return (true, _record.indexes[_value] - 1);
  }

  function getPower(Record storage _record, address _value) internal view returns (uint256) {
    if (!contains(_record, _value)) return 0;
    return _record.values[_record.indexes[_value] - 1].power;
  }
}


exec
/bin/bash -lc "nl -ba contracts/bridge/v2/core/L1/predicates/L1ERC20Predicate.sol | sed -n '1,240p'" in /tmp/codex-wbg4av_k
 succeeded in 0ms:
     1	// SPDX-License-Identifier: MIT
     2	pragma solidity 0.8.19;
     3	
     4	import "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol";
     5	import "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol";
     6	import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol";
     7	import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
     8	import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
     9	import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
    10	import "../../../libs/Create2.sol";
    11	import "./IL1Predicate.sol";
    12	import "../../common/IBridgeRegistry.sol";
    13	
    14	// LightLink 2023
    15	contract L1ERC20Predicate is
    16	  Initializable, //
    17	  UUPSUpgradeable,
    18	  ReentrancyGuardUpgradeable,
    19	  IL1Predicate
    20	{
    21	  using ECDSA for bytes32;
    22	  using SafeERC20 for IERC20;
    23	
    24	  // variables
    25	  bool public isPaused;
    26	  address public bridgeRegistry;
    27	  address public l2Predicate;
    28	  bytes32 public l2TokenBytecodeHash;
    29	  mapping(address => address) public l1ToL2Gateway;
    30	
    31	  mapping(address => uint256) public counter;
    32	  mapping(address => mapping(uint256 => bool)) public orderExecuted;
    33	  mapping(address => mapping(uint256 => mapping(address => bool))) public isConfirmed;
    34	
    35	  event TokenMapped(bytes message);
    36	  event DepositToken(bytes message);
    37	  event WithdrawToken(bytes32 messageHash);
    38	
    39	  modifier requireMultisig() {
    40	    require(msg.sender == IBridgeRegistry(bridgeRegistry).getMultisig(), "Multisig required");
    41	    _;
    42	  }
    43	
    44	  modifier notPaused() {
    45	    require(!isPaused, "Paused");
    46	    _;
    47	  }
    48	
    49	  receive() external payable {
    50	    revert("Not supported");
    51	  }
    52	
    53	  function recovery(address[] memory _tokens, address _to) external requireMultisig {
    54	    for (uint256 i = 0; i < _tokens.length; i++) {
    55	      address token = _tokens[i];
    56	      uint256 _amount = IERC20(token).balanceOf(address(this));
    57	      if (_amount > 0) {
    58	        IERC20(token).safeTransfer(_to, _amount);
    59	      }
    60	    }
    61	  }
    62	
    63	  function deposit(address _l1Token, uint256 _amount) external virtual {
    64	    _initiateDeposit(_l1Token, msg.sender, msg.sender, _amount);
    65	  }
    66	
    67	  // verified
    68	  function depositTo(address _l1Token, address _to, uint256 _amount) external virtual {
    69	    _initiateDeposit(_l1Token, msg.sender, _to, _amount);
    70	  }
    71	
    72	  function syncWithdraw(
    73	    address[] memory _currentValidators,
    74	    bytes[] memory _signatures,
    75	    // transaction data
    76	    bytes memory _data
    77	  ) external nonReentrant notPaused {
    78	    (address from, uint256 orderId, address l1Token, address l2Token, address to, uint256 amount) = abi.decode(_data, (address, uint256, address, address, address, uint256));
    79	    require(l2Predicate != address(0), "Not implemented");
    80	    require(amount > 0, "Not enough amount");
    81	    require(to != address(0), "Invalid address");
    82	    require(!orderExecuted[from][orderId], "Order already executed");
    83	    require(_currentValidators.length == _signatures.length, "Input mismatch");
    84	    require(l1ToL2Gateway[l1Token] == l2Token, "Invalid token gateway");
    85	
    86	    bytes32 messageHash = keccak256(abi.encodePacked(block.chainid, _data));
    87	    _checkValidatorSignatures(
    88	      from,
    89	      orderId,
    90	      _currentValidators,
    91	      _signatures,
    92	      // Get hash of the transaction batch and checkpoint
    93	      messageHash,
    94	      IBridgeRegistry(bridgeRegistry).consensusPowerThreshold()
    95	    );
    96	
    97	    orderExecuted[from][orderId] = true;
    98	
    99	    IERC20(l1Token).safeTransfer(to, amount);
   100	
   101	    emit WithdrawToken(messageHash);
   102	  }
   103	
   104	  function initialize(address _registry, address _l2Predicate) public initializer {
   105	    __ReentrancyGuard_init();
   106	    __L1ERC20Predicate_init(_registry, _l2Predicate);
   107	  }
   108	
   109	  function modifyL2TokenBytecodeHash(bytes32 _l2TokenBytecodeHash) public requireMultisig {
   110	    l2TokenBytecodeHash = _l2TokenBytecodeHash;
   111	  }
   112	
   113	  function toggleIsPaused(bool _status) public requireMultisig {
   114	    isPaused = _status;
   115	  }
   116	
   117	  function modifyL2Predicate(address _l2Predicate) public requireMultisig {
   118	    l2Predicate = _l2Predicate;
   119	  }
   120	
   121	  function mapToken(address _l1Token) public requireMultisig {
   122	    // check if token is already mapped
   123	    require(l2Predicate != address(0x0), "Invalid L2 pair");
   124	    require(l1ToL2Gateway[_l1Token] == address(0x0), "Already mapped");
   125	
   126	    string memory name;
   127	    try ERC20(_l1Token).name() returns (string memory _name) {
   128	      name = _name;
   129	    } catch {}
   130	    string memory symbol;
   131	    try ERC20(_l1Token).symbol() returns (string memory _symbol) {
   132	      symbol = _symbol;
   133	    } catch {}
   134	    uint8 decimals = ERC20(_l1Token).decimals();
   135	
   136	    // compute child token address before deployment using create2
   137	    bytes32 salt = keccak256(abi.encodePacked(_l1Token));
   138	    address l2Token = Create2.computeAddress(salt, l2TokenBytecodeHash, l2Predicate);
   139	
   140	    // add into mapped tokens
   141	    l1ToL2Gateway[_l1Token] = l2Token;
   142	
   143	    emit TokenMapped(abi.encode(msg.sender, counter[msg.sender], _l1Token, name, symbol, decimals));
   144	    counter[msg.sender]++;
   145	  }
   146	
   147	  function __L1ERC20Predicate_init(address _registry, address _l2Predicate) internal {
   148	    bridgeRegistry = _registry;
   149	    l2Predicate = _l2Predicate;
   150	    l2TokenBytecodeHash = 0xb9ae7ba14d826de669be54f7c79008181b430f21bd3ff90dac8cce1e60ae88a9;
   151	  }
   152	
   153	  function _authorizeUpgrade(address) internal override requireMultisig {}
   154	
   155	  function _initiateDeposit(address _l1Token, address _from, address _to, uint256 _amount) internal notPaused {
   156	    require(l2Predicate != address(0), "Not implemented");
   157	    require(_amount > 0, "Not enough amount");
   158	    require(_to != address(0), "Invalid address");
   159	    require(l1ToL2Gateway[_l1Token] != address(0), "Not supported");
   160	
   161	    IERC20(_l1Token).safeTransferFrom(_from, address(this), _amount);
   162	
   163	    uint256 counter_ = counter[_from];
   164	
   165	    emit DepositToken(abi.encode(_from, counter_, _l1Token, l1ToL2Gateway[_l1Token], _to, _amount));
   166	    counter[_from]++;
   167	  }
   168	
   169	  function _checkValidatorSignatures(
   170	    address _from, //
   171	    uint256 _orderId,
   172	    address[] memory _currentValidators,
   173	    bytes[] memory _signatures,
   174	    bytes32 _messageHash,
   175	    uint256 _powerThreshold
   176	  ) private {
   177	    uint256 cumulativePower = 0;
   178	
   179	    for (uint256 i = 0; i < _currentValidators.length; i++) {
   180	      address signer = _messageHash.toEthSignedMessageHash().recover(_signatures[i]);
   181	      require(signer == _currentValidators[i], "Validator signature does not match.");
   182	      require(IBridgeRegistry(bridgeRegistry).validValidator(signer), "Invalid validator");
   183	      require(!isConfirmed[_from][_orderId][signer], "No duplicate validator");
   184	
   185	      // prevent double-signing attacks
   186	      isConfirmed[_from][_orderId][signer] = true;
   187	
   188	      // Sum up cumulative power
   189	      cumulativePower += IBridgeRegistry(bridgeRegistry).getPower(signer);
   190	
   191	      // Break early to avoid wasting gas
   192	      if (cumulativePower > _powerThreshold) {
   193	        break;
   194	      }
   195	    }
   196	
   197	    // Check that there was enough power
   198	    require(cumulativePower >= _powerThreshold, "Submitted validator set signatures do not have enough power.");
   199	    // Success
   200	  }
   201	}

exec
/bin/bash -lc "nl -ba contracts/bridge/v2/core/common/IBridgeRegistry.sol | sed -n '1,200p'" in /tmp/codex-wbg4av_k
 succeeded in 0ms:
     1	// SPDX-License-Identifier: MIT
     2	pragma solidity 0.8.19;
     3	import "../../libs/ValidatorSet.sol";
     4	
     5	// LightLink 2023
     6	interface IBridgeRegistry {
     7	  event ConsensusPowerThresholdModified(uint256 _amount);
     8	  event ValidatorsModifed(address[] _accounts, uint256[] _powers);
     9	  event ValidatorsRemoved(address[] _accounts);
    10	  event MutisigModified(address _multisig);
    11	  event SystemVerifierModified(address _systemVerifier);
    12	
    13	  /* Views */
    14	  function consensusPowerThreshold() external view returns (uint256);
    15	
    16	  function validValidator(address) external view returns (bool);
    17	
    18	  function getPower(address) external view returns (uint256);
    19	
    20	  function getValidators() external view returns (ValidatorSet.Validator[] memory);
    21	
    22	  function getMultisig() external view returns (address);
    23	
    24	  function getSystemVerifier() external view returns (address);
    25	
    26	  /* Actions */
    27	  function modifyConsensusPowerThreshold(uint256 _amount) external;
    28	
    29	  function modifyValidators(address[] memory _accounts, uint256[] memory _powers) external;
    30	
    31	  function removeValidators(address[] memory _accounts) external;
    32	
    33	  function modifySystemVerifier(address _systemVerifier) external;
    34	}

exec
/bin/bash -lc "nl -ba contracts/bridge/v2/libs/ValidatorSet.sol | sed -n '1,220p'" in /tmp/codex-wbg4av_k
 succeeded in 0ms:
     1	// SPDX-License-Identifier: MIT
     2	pragma solidity 0.8.19;
     3	
     4	// LightLink 2023
     5	library ValidatorSet {
     6	  struct Validator {
     7	    address addr;
     8	    uint256 power;
     9	  }
    10	
    11	  struct Record {
    12	    Validator[] values;
    13	    mapping(address => uint256) indexes; // value to index
    14	  }
    15	
    16	  function add(Record storage _record, address _value, uint256 _power) internal {
    17	    if (contains(_record, _value)) return; // exist
    18	    _record.values.push(Validator(_value, _power));
    19	    _record.indexes[_value] = _record.values.length;
    20	  }
    21	
    22	  function modify(Record storage _record, address _value, uint256 _power) internal {
    23	    if (!contains(_record, _value)) {
    24	      add(_record, _value, _power);
    25	      return;
    26	    }
    27	    uint256 valueIndex = _record.indexes[_value];
    28	    _record.values[valueIndex - 1].power = _power;
    29	  }
    30	
    31	  function remove(Record storage _record, address _value) internal {
    32	    uint256 valueIndex = _record.indexes[_value];
    33	    if (valueIndex == 0) return; // removed non-exist value
    34	    uint256 toDeleteIndex = valueIndex - 1; // dealing with out of bounds
    35	    uint256 lastIndex = _record.values.length - 1;
    36	    if (lastIndex != toDeleteIndex) {
    37	      Validator memory lastvalue = _record.values[lastIndex];
    38	      _record.values[toDeleteIndex] = lastvalue;
    39	      _record.indexes[lastvalue.addr] = valueIndex; // Replace lastvalue's index to valueIndex
    40	    }
    41	    _record.values.pop();
    42	    _record.indexes[_value] = 0; // set to 0
    43	  }
    44	
    45	  function contains(Record storage _record, address _value) internal view returns (bool) {
    46	    return _record.indexes[_value] != 0;
    47	  }
    48	
    49	  function size(Record storage _record) internal view returns (uint256) {
    50	    return _record.values.length;
    51	  }
    52	
    53	  function at(Record storage _record, uint256 _index) internal view returns (Validator memory) {
    54	    return _record.values[_index];
    55	  }
    56	
    57	  function indexOf(Record storage _record, address _value) internal view returns (bool, uint256) {
    58	    if (!contains(_record, _value)) return (false, 0);
    59	    return (true, _record.indexes[_value] - 1);
    60	  }
    61	
    62	  function getPower(Record storage _record, address _value) internal view returns (uint256) {
    63	    if (!contains(_record, _value)) return 0;
    64	    return _record.values[_record.indexes[_value] - 1].power;
    65	  }
    66	}

exec
/bin/bash -lc "sed -n '1,260p' @openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol" in /tmp/codex-wbg4av_k
 succeeded in 0ms:
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (proxy/utils/UUPSUpgradeable.sol)

pragma solidity ^0.8.0;

import "../../interfaces/draft-IERC1822Upgradeable.sol";
import "../ERC1967/ERC1967UpgradeUpgradeable.sol";
import "./Initializable.sol";

/**
 * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an
 * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.
 *
 * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is
 * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing
 * `UUPSUpgradeable` with a custom implementation of upgrades.
 *
 * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.
 *
 * _Available since v4.1._
 */
abstract contract UUPSUpgradeable is Initializable, IERC1822ProxiableUpgradeable, ERC1967UpgradeUpgradeable {
    function __UUPSUpgradeable_init() internal onlyInitializing {
    }

    function __UUPSUpgradeable_init_unchained() internal onlyInitializing {
    }
    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment
    address private immutable __self = address(this);

    /**
     * @dev Check that the execution is being performed through a delegatecall call and that the execution context is
     * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case
     * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a
     * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to
     * fail.
     */
    modifier onlyProxy() {
        require(address(this) != __self, "Function must be called through delegatecall");
        require(_getImplementation() == __self, "Function must be called through active proxy");
        _;
    }

    /**
     * @dev Check that the execution is not being performed through a delegate call. This allows a function to be
     * callable on the implementing contract but not through proxies.
     */
    modifier notDelegated() {
        require(address(this) == __self, "UUPSUpgradeable: must not be called through delegatecall");
        _;
    }

    /**
     * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the
     * implementation. It is used to validate the implementation's compatibility when performing an upgrade.
     *
     * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks
     * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this
     * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.
     */
    function proxiableUUID() external view virtual override notDelegated returns (bytes32) {
        return _IMPLEMENTATION_SLOT;
    }

    /**
     * @dev Upgrade the implementation of the proxy to `newImplementation`.
     *
     * Calls {_authorizeUpgrade}.
     *
     * Emits an {Upgraded} event.
     */
    function upgradeTo(address newImplementation) external virtual onlyProxy {
        _authorizeUpgrade(newImplementation);
        _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);
    }

    /**
     * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call
     * encoded in `data`.
     *
     * Calls {_authorizeUpgrade}.
     *
     * Emits an {Upgraded} event.
     */
    function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {
        _authorizeUpgrade(newImplementation);
        _upgradeToAndCallUUPS(newImplementation, data, true);
    }

    /**
     * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by
     * {upgradeTo} and {upgradeToAndCall}.
     *
     * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.
     *
     * ```solidity
     * function _authorizeUpgrade(address) internal override onlyOwner {}
     * ```
     */
    function _authorizeUpgrade(address newImplementation) internal virtual;

    /**
     * @dev This empty reserved space is put in place to allow future versions to add new
     * variables without shifting down storage in the inheritance chain.
     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps
     */
    uint256[50] private __gap;
}

codex
{"no_findings":false,"summary":"Two exploitable issues were identified in the first-party bridge predicate: incorrect ERC20 deposit accounting and missing domain separation in withdrawal signatures.","findings":[{"severity":"high","category":"other","title":"Deposits credit the requested amount instead of the amount actually received","exploit_scenario":"If a mapped token charges transfer fees, rebases, or otherwise delivers less than `_amount`, a user can deposit 100 tokens while the contract only receives 90. The bridge still emits a deposit message for 100, so the remote side can mint/release 100. On withdrawal, the attacker can redeem the full 100 and drain 10 tokens from pooled collateral or make later withdrawals insolvent.","recommendation":"Track the bridge's balance before and after `safeTransferFrom` and use the actual received amount in the deposit message, or explicitly reject fee-on-transfer/rebasing tokens.","evidence":"`_initiateDeposit` transfers tokens in and then emits `DepositToken(..., _amount)` without checking the balance delta, so accounting assumes the full requested amount always arrived.","locations":["contracts/bridge/v2/core/L1/predicates/L1ERC20Predicate.sol:155","contracts/bridge/v2/core/L1/predicates/L1ERC20Predicate.sol:161","contracts/bridge/v2/core/L1/predicates/L1ERC20Predicate.sol:165"]},{"severity":"medium","category":"auth","title":"Withdrawal signatures are replayable across predicate instances on the same chain","exploit_scenario":"Validators sign `keccak256(block.chainid, _data)`. Because the signed payload does not include `address(this)` or any bridge-specific domain, the same signatures are valid for any other `L1ERC20Predicate` instance on the same chain that shares the validator registry and token mapping. A legitimate withdrawal approved for one predicate can therefore be replayed against a second funded predicate/proxy, draining its escrow because replay protection (`orderExecuted`) is only local to each contract.","recommendation":"Domain-separate signatures with `address(this)` and, preferably, a full EIP-712 domain that includes the bridge/proxy identity and explicit message type.","evidence":"`syncWithdraw` computes `messageHash = keccak256(abi.encodePacked(block.chainid, _data))` and uses that for signature recovery. The contract address is never bound into the signed message, while replay protection is only `orderExecuted[from][orderId]` in local storage.","locations":["contracts/bridge/v2/core/L1/predicates/L1ERC20Predicate.sol:82","contracts/bridge/v2/core/L1/predicates/L1ERC20Predicate.sol:86","contracts/bridge/v2/core/L1/predicates/L1ERC20Predicate.sol:97"]}]}
tokens used
16,191
Metadata
{
    "codex": {
        "ran_at": "2026-04-04T04:33:57.818346+00:00",
        "returncode": 0
    },
    "project": {
        "mode": "source",
        "file_count": 23,
        "import_count": 26,
        "first_party_contracts_count": 5
    },
    "summary": "Two exploitable issues were identified in the first-party bridge predicate: incorrect ERC20 deposit accounting and missing domain separation in withdrawal signatures.",
    "raw_final": {
        "summary": "Two exploitable issues were identified in the first-party bridge predicate: incorrect ERC20 deposit accounting and missing domain separation in withdrawal signatures.",
        "findings": [
            {
                "title": "Deposits credit the requested amount instead of the amount actually received",
                "category": "other",
                "evidence": "`_initiateDeposit` transfers tokens in and then emits `DepositToken(..., _amount)` without checking the balance delta, so accounting assumes the full requested amount always arrived.",
                "severity": "high",
                "locations": [
                    "contracts/bridge/v2/core/L1/predicates/L1ERC20Predicate.sol:155",
                    "contracts/bridge/v2/core/L1/predicates/L1ERC20Predicate.sol:161",
                    "contracts/bridge/v2/core/L1/predicates/L1ERC20Predicate.sol:165"
                ],
                "recommendation": "Track the bridge's balance before and after `safeTransferFrom` and use the actual received amount in the deposit message, or explicitly reject fee-on-transfer/rebasing tokens.",
                "exploit_scenario": "If a mapped token charges transfer fees, rebases, or otherwise delivers less than `_amount`, a user can deposit 100 tokens while the contract only receives 90. The bridge still emits a deposit message for 100, so the remote side can mint/release 100. On withdrawal, the attacker can redeem the full 100 and drain 10 tokens from pooled collateral or make later withdrawals insolvent."
            },
            {
                "title": "Withdrawal signatures are replayable across predicate instances on the same chain",
                "category": "auth",
                "evidence": "`syncWithdraw` computes `messageHash = keccak256(abi.encodePacked(block.chainid, _data))` and uses that for signature recovery. The contract address is never bound into the signed message, while replay protection is only `orderExecuted[from][orderId]` in local storage.",
                "severity": "medium",
                "locations": [
                    "contracts/bridge/v2/core/L1/predicates/L1ERC20Predicate.sol:82",
                    "contracts/bridge/v2/core/L1/predicates/L1ERC20Predicate.sol:86",
                    "contracts/bridge/v2/core/L1/predicates/L1ERC20Predicate.sol:97"
                ],
                "recommendation": "Domain-separate signatures with `address(this)` and, preferably, a full EIP-712 domain that includes the bridge/proxy identity and explicit message type.",
                "exploit_scenario": "Validators sign `keccak256(block.chainid, _data)`. Because the signed payload does not include `address(this)` or any bridge-specific domain, the same signatures are valid for any other `L1ERC20Predicate` instance on the same chain that shares the validator registry and token mapping. A legitimate withdrawal approved for one predicate can therefore be replayed against a second funded predicate/proxy, draining its escrow because replay protection (`orderExecuted`) is only local to each contract."
            }
        ],
        "no_findings": false
    },
    "no_findings": false,
    "schema_version": 1
}

Opcode Heuristics

tool.cast_disasm
Delegatecall
1
Selfdestruct
0
CREATE2
0
CALL-family (heavy)
16
EXT*/BALANCE
4
Total opcodes
6804
Flags
delegatecall_present call_family_heavy
View cast disassembly output
00000000: PUSH1 0x80
00000002: PUSH1 0x40
00000004: MSTORE
00000005: PUSH1 0x04
00000007: CALLDATASIZE
00000008: LT
00000009: PUSH2 0x0163
0000000c: JUMPI
0000000d: PUSH1 0x00
0000000f: CALLDATALOAD
00000010: PUSH1 0xe0
00000012: SHR
00000013: DUP1
00000014: PUSH4 0x804efd2e
00000019: GT
0000001a: PUSH2 0x00c0
0000001d: JUMPI
0000001e: DUP1
0000001f: PUSH4 0xbb6f2e06
00000024: GT
00000025: PUSH2 0x0074
00000028: JUMPI
00000029: DUP1
0000002a: PUSH4 0xc6c8788c
0000002f: GT
00000030: PUSH2 0x0059
00000033: JUMPI
00000034: DUP1
00000035: PUSH4 0xc6c8788c
0000003a: EQ
0000003b: PUSH2 0x0438
0000003e: JUMPI
0000003f: DUP1
00000040: PUSH4 0xf213159c
00000045: EQ
00000046: PUSH2 0x0473
00000049: JUMPI
0000004a: DUP1
0000004b: PUSH4 0xf4a120f7
00000050: EQ
00000051: PUSH2 0x0493
00000054: JUMPI
00000055: PUSH1 0x00
00000057: DUP1
00000058: REVERT
00000059: JUMPDEST
0000005a: DUP1
0000005b: PUSH4 0xbb6f2e06
00000060: EQ
00000061: PUSH2 0x03eb
00000064: JUMPI
00000065: DUP1
00000066: PUSH4 0xc12327b8
0000006b: EQ
0000006c: PUSH2 0x040b
0000006f: JUMPI
00000070: PUSH1 0x00
00000072: DUP1
00000073: REVERT
00000074: JUMPDEST
00000075: DUP1
00000076: PUSH4 0xb187bd26
0000007b: GT
0000007c: PUSH2 0x00a5
0000007f: JUMPI
00000080: DUP1
00000081: PUSH4 0xb187bd26
00000086: EQ
00000087: PUSH2 0x039b
0000008a: JUMPI
0000008b: DUP1
0000008c: PUSH4 0xb6e27136
00000091: EQ
00000092: PUSH2 0x03b5
00000095: JUMPI
00000096: DUP1
00000097: PUSH4 0xb78103e9
0000009c: EQ
0000009d: PUSH2 0x03d5
000000a0: JUMPI
000000a1: PUSH1 0x00
000000a3: DUP1
000000a4: REVERT
000000a5: JUMPDEST
000000a6: DUP1
000000a7: PUSH4 0x804efd2e
000000ac: EQ
000000ad: PUSH2 0x0345
000000b0: JUMPI
000000b1: DUP1
000000b2: PUSH4 0xa0d99b1c
000000b7: EQ
000000b8: PUSH2 0x0365
000000bb: JUMPI
000000bc: PUSH1 0x00
000000be: DUP1
000000bf: REVERT
000000c0: JUMPDEST
000000c1: DUP1
000000c2: PUSH4 0x401e68d4
000000c7: GT
000000c8: PUSH2 0x0117
000000cb: JUMPI
000000cc: DUP1
000000cd: PUSH4 0x485cc955
000000d2: GT
000000d3: PUSH2 0x00fc
000000d6: JUMPI
000000d7: DUP1
000000d8: PUSH4 0x485cc955
000000dd: EQ
000000de: PUSH2 0x02ef
000000e1: JUMPI
000000e2: DUP1
000000e3: PUSH4 0x4f1ef286
000000e8: EQ
000000e9: PUSH2 0x030f
000000ec: JUMPI
000000ed: DUP1
000000ee: PUSH4 0x52d1902d
000000f3: EQ
000000f4: PUSH2 0x0322
000000f7: JUMPI
000000f8: PUSH1 0x00
000000fa: DUP1
000000fb: REVERT
000000fc: JUMPDEST
000000fd: DUP1
000000fe: PUSH4 0x401e68d4
00000103: EQ
00000104: PUSH2 0x027e
00000107: JUMPI
00000108: DUP1
00000109: PUSH4 0x47e7ef24
0000010e: EQ
0000010f: PUSH2 0x02cf
00000112: JUMPI
00000113: PUSH1 0x00
00000115: DUP1
00000116: REVERT
00000117: JUMPDEST
00000118: DUP1
00000119: PUSH4 0x316be171
0000011e: GT
0000011f: PUSH2 0x0148
00000122: JUMPI
00000123: DUP1
00000124: PUSH4 0x316be171
00000129: EQ
0000012a: PUSH2 0x01fc
0000012d: JUMPI
0000012e: DUP1
0000012f: PUSH4 0x3659cfe6
00000134: EQ
00000135: PUSH2 0x023e
00000138: JUMPI
00000139: DUP1
0000013a: PUSH4 0x39cc1230
0000013f: EQ
00000140: PUSH2 0x025e
00000143: JUMPI
00000144: PUSH1 0x00
00000146: DUP1
00000147: REVERT
00000148: JUMPDEST
00000149: DUP1
0000014a: PUSH4 0x051d92bb
0000014f: EQ
00000150: PUSH2 0x01ba
00000153: JUMPI
00000154: DUP1
00000155: PUSH4 0x1b0c926f
0000015a: EQ
0000015b: PUSH2 0x01dc
0000015e: JUMPI
0000015f: PUSH1 0x00
00000161: DUP1
00000162: REVERT
00000163: JUMPDEST
00000164: CALLDATASIZE
00000165: PUSH2 0x01b5
00000168: JUMPI
00000169: PUSH1 0x40
0000016b: MLOAD
0000016c: PUSH3 0x461bcd
00000170: PUSH1 0xe5
00000172: SHL
00000173: DUP2
00000174: MSTORE
00000175: PUSH1 0x20
00000177: PUSH1 0x04
00000179: DUP3
0000017a: ADD
0000017b: MSTORE
0000017c: PUSH1 0x0d
0000017e: PUSH1 0x24
00000180: DUP3
00000181: ADD
00000182: MSTORE
00000183: PUSH32 0x4e6f7420737570706f7274656400000000000000000000000000000000000000
000001a4: PUSH1 0x44
000001a6: DUP3
000001a7: ADD
000001a8: MSTORE
000001a9: PUSH1 0x64
000001ab: ADD
000001ac: JUMPDEST
000001ad: PUSH1 0x40
000001af: MLOAD
000001b0: DUP1
000001b1: SWAP2
000001b2: SUB
000001b3: SWAP1
000001b4: REVERT
000001b5: JUMPDEST
000001b6: PUSH1 0x00
000001b8: DUP1
000001b9: REVERT
000001ba: JUMPDEST
000001bb: CALLVALUE
000001bc: DUP1
000001bd: ISZERO
000001be: PUSH2 0x01c6
000001c1: JUMPI
000001c2: PUSH1 0x00
000001c4: DUP1
000001c5: REVERT
000001c6: JUMPDEST
000001c7: POP
000001c8: PUSH2 0x01da
000001cb: PUSH2 0x01d5
000001ce: CALLDATASIZE
000001cf: PUSH1 0x04
000001d1: PUSH2 0x2c52
000001d4: JUMP
000001d5: JUMPDEST
000001d6: PUSH2 0x04b3
000001d9: JUMP
000001da: JUMPDEST
000001db: STOP
000001dc: JUMPDEST
000001dd: CALLVALUE
000001de: DUP1
000001df: ISZERO
000001e0: PUSH2 0x01e8
000001e3: JUMPI
000001e4: PUSH1 0x00
000001e6: DUP1
000001e7: REVERT
000001e8: JUMPDEST
000001e9: POP
000001ea: PUSH2 0x01da
000001ed: PUSH2 0x01f7
000001f0: CALLDATASIZE
000001f1: PUSH1 0x04
000001f3: PUSH2 0x2d49
000001f6: JUMP
000001f7: JUMPDEST
000001f8: PUSH2 0x08bd
000001fb: JUMP
000001fc: JUMPDEST
000001fd: CALLVALUE
000001fe: DUP1
000001ff: ISZERO
00000200: PUSH2 0x0208
00000203: JUMPI
00000204: PUSH1 0x00
00000206: DUP1
00000207: REVERT
00000208: JUMPDEST
00000209: POP
0000020a: PUSH1 0x97
0000020c: SLOAD
0000020d: PUSH2 0x0221
00000210: SWAP1
00000211: PUSH2 0x0100
00000214: SWAP1
00000215: DIV
00000216: PUSH1 0x01
00000218: PUSH1 0x01
0000021a: PUSH1 0xa0
0000021c: SHL
0000021d: SUB
0000021e: AND
0000021f: DUP2
00000220: JUMP
00000221: JUMPDEST
00000222: PUSH1 0x40
00000224: MLOAD
00000225: PUSH1 0x01
00000227: PUSH1 0x01
00000229: PUSH1 0xa0
0000022b: SHL
0000022c: SUB
0000022d: SWAP1
0000022e: SWAP2
0000022f: AND
00000230: DUP2
00000231: MSTORE
00000232: PUSH1 0x20
00000234: ADD
00000235: JUMPDEST
00000236: PUSH1 0x40
00000238: MLOAD
00000239: DUP1
0000023a: SWAP2
0000023b: SUB
0000023c: SWAP1
0000023d: RETURN
0000023e: JUMPDEST
0000023f: CALLVALUE
00000240: DUP1
00000241: ISZERO
00000242: PUSH2 0x024a
00000245: JUMPI
00000246: PUSH1 0x00
00000248: DUP1
00000249: REVERT
0000024a: JUMPDEST
0000024b: POP
0000024c: PUSH2 0x01da
0000024f: PUSH2 0x0259
00000252: CALLDATASIZE
00000253: PUSH1 0x04
00000255: PUSH2 0x2d62
00000258: JUMP
00000259: JUMPDEST
0000025a: PUSH2 0x0999
0000025d: JUMP
0000025e: JUMPDEST
0000025f: CALLVALUE
00000260: DUP1
00000261: ISZERO
00000262: PUSH2 0x026a
00000265: JUMPI
00000266: PUSH1 0x00
00000268: DUP1
00000269: REVERT
0000026a: JUMPDEST
0000026b: POP
0000026c: PUSH1 0x98
0000026e: SLOAD
0000026f: PUSH2 0x0221
00000272: SWAP1
00000273: PUSH1 0x01
00000275: PUSH1 0x01
00000277: PUSH1 0xa0
00000279: SHL
0000027a: SUB
0000027b: AND
0000027c: DUP2
0000027d: JUMP
0000027e: JUMPDEST
0000027f: CALLVALUE
00000280: DUP1
00000281: ISZERO
00000282: PUSH2 0x028a
00000285: JUMPI
00000286: PUSH1 0x00
00000288: DUP1
00000289: REVERT
0000028a: JUMPDEST
0000028b: POP
0000028c: PUSH2 0x02bf
0000028f: PUSH2 0x0299
00000292: CALLDATASIZE
00000293: PUSH1 0x04
00000295: PUSH2 0x2d7f
00000298: JUMP
00000299: JUMPDEST
0000029a: PUSH1 0x9d
0000029c: PUSH1 0x20
0000029e: SWAP1
0000029f: DUP2
000002a0: MSTORE
000002a1: PUSH1 0x00
000002a3: SWAP4
000002a4: DUP5
000002a5: MSTORE
000002a6: PUSH1 0x40
000002a8: DUP1
000002a9: DUP6
000002aa: KECCAK256
000002ab: DUP3
000002ac: MSTORE
000002ad: SWAP3
000002ae: DUP5
000002af: MSTORE
000002b0: DUP3
000002b1: DUP5
000002b2: KECCAK256
000002b3: SWAP1
000002b4: MSTORE
000002b5: DUP3
000002b6: MSTORE
000002b7: SWAP1
000002b8: KECCAK256
000002b9: SLOAD
000002ba: PUSH1 0xff
000002bc: AND
000002bd: DUP2
000002be: JUMP
000002bf: JUMPDEST
000002c0: PUSH1 0x40
000002c2: MLOAD
000002c3: SWAP1
000002c4: ISZERO
000002c5: ISZERO
000002c6: DUP2
000002c7: MSTORE
000002c8: PUSH1 0x20
000002ca: ADD
000002cb: PUSH2 0x0235
000002ce: JUMP
000002cf: JUMPDEST
000002d0: CALLVALUE
000002d1: DUP1
000002d2: ISZERO
000002d3: PUSH2 0x02db
000002d6: JUMPI
000002d7: PUSH1 0x00
000002d9: DUP1
000002da: REVERT
000002db: JUMPDEST
000002dc: POP
000002dd: PUSH2 0x01da
000002e0: PUSH2 0x02ea
000002e3: CALLDATASIZE
000002e4: PUSH1 0x04
000002e6: PUSH2 0x2dc1
000002e9: JUMP
000002ea: JUMPDEST
000002eb: PUSH2 0x0b36
000002ee: JUMP
000002ef: JUMPDEST
000002f0: CALLVALUE
000002f1: DUP1
000002f2: ISZERO
000002f3: PUSH2 0x02fb
000002f6: JUMPI
000002f7: PUSH1 0x00
000002f9: DUP1
000002fa: REVERT
000002fb: JUMPDEST
000002fc: POP
000002fd: PUSH2 0x01da
00000300: PUSH2 0x030a
00000303: CALLDATASIZE
00000304: PUSH1 0x04
00000306: PUSH2 0x2ded
00000309: JUMP
0000030a: JUMPDEST
0000030b: PUSH2 0x0b46
0000030e: JUMP
0000030f: JUMPDEST
00000310: PUSH2 0x01da
00000313: PUSH2 0x031d
00000316: CALLDATASIZE
00000317: PUSH1 0x04
00000319: PUSH2 0x2e26
0000031c: JUMP
0000031d: JUMPDEST
0000031e: PUSH2 0x0d53
00000321: JUMP
00000322: JUMPDEST
00000323: CALLVALUE
00000324: DUP1
00000325: ISZERO
00000326: PUSH2 0x032e
00000329: JUMPI
0000032a: PUSH1 0x00
0000032c: DUP1
0000032d: REVERT
0000032e: JUMPDEST
0000032f: POP
00000330: PUSH2 0x0337
00000333: PUSH2 0x0edd
00000336: JUMP
00000337: JUMPDEST
00000338: PUSH1 0x40
0000033a: MLOAD
0000033b: SWAP1
0000033c: DUP2
0000033d: MSTORE
0000033e: PUSH1 0x20
00000340: ADD
00000341: PUSH2 0x0235
00000344: JUMP
00000345: JUMPDEST
00000346: CALLVALUE
00000347: DUP1
00000348: ISZERO
00000349: PUSH2 0x0351
0000034c: JUMPI
0000034d: PUSH1 0x00
0000034f: DUP1
00000350: REVERT
00000351: JUMPDEST
00000352: POP
00000353: PUSH2 0x01da
00000356: PUSH2 0x0360
00000359: CALLDATASIZE
0000035a: PUSH1 0x04
0000035c: PUSH2 0x2e76
0000035f: JUMP
00000360: JUMPDEST
00000361: PUSH2 0x0fa2
00000364: JUMP
00000365: JUMPDEST
00000366: CALLVALUE
00000367: DUP1
00000368: ISZERO
00000369: PUSH2 0x0371
0000036c: JUMPI
0000036d: PUSH1 0x00
0000036f: DUP1
00000370: REVERT
00000371: JUMPDEST
00000372: POP
00000373: PUSH2 0x0221
00000376: PUSH2 0x0380
00000379: CALLDATASIZE
0000037a: PUSH1 0x04
0000037c: PUSH2 0x2d62
0000037f: JUMP
00000380: JUMPDEST
00000381: PUSH1 0x9a
00000383: PUSH1 0x20
00000385: MSTORE
00000386: PUSH1 0x00
00000388: SWAP1
00000389: DUP2
0000038a: MSTORE
0000038b: PUSH1 0x40
0000038d: SWAP1
0000038e: KECCAK256
0000038f: SLOAD
00000390: PUSH1 0x01
00000392: PUSH1 0x01
00000394: PUSH1 0xa0
00000396: SHL
00000397: SUB
00000398: AND
00000399: DUP2
0000039a: JUMP
0000039b: JUMPDEST
0000039c: CALLVALUE
0000039d: DUP1
0000039e: ISZERO
0000039f: PUSH2 0x03a7
000003a2: JUMPI
000003a3: PUSH1 0x00
000003a5: DUP1
000003a6: REVERT
000003a7: JUMPDEST
000003a8: POP
000003a9: PUSH1 0x97
000003ab: SLOAD
000003ac: PUSH2 0x02bf
000003af: SWAP1
000003b0: PUSH1 0xff
000003b2: AND
000003b3: DUP2
000003b4: JUMP
000003b5: JUMPDEST
000003b6: CALLVALUE
000003b7: DUP1
000003b8: ISZERO
000003b9: PUSH2 0x03c1
000003bc: JUMPI
000003bd: PUSH1 0x00
000003bf: DUP1
000003c0: REVERT
000003c1: JUMPDEST
000003c2: POP
000003c3: PUSH2 0x01da
000003c6: PUSH2 0x03d0
000003c9: CALLDATASIZE
000003ca: PUSH1 0x04
000003cc: PUSH2 0x2ecb
000003cf: JUMP
000003d0: JUMPDEST
000003d1: PUSH2 0x115c
000003d4: JUMP
000003d5: JUMPDEST
000003d6: CALLVALUE
000003d7: DUP1
000003d8: ISZERO
000003d9: PUSH2 0x03e1
000003dc: JUMPI
000003dd: PUSH1 0x00
000003df: DUP1
000003e0: REVERT
000003e1: JUMPDEST
000003e2: POP
000003e3: PUSH2 0x0337
000003e6: PUSH1 0x99
000003e8: SLOAD
000003e9: DUP2
000003ea: JUMP
000003eb: JUMPDEST
000003ec: CALLVALUE
000003ed: DUP1
000003ee: ISZERO
000003ef: PUSH2 0x03f7
000003f2: JUMPI
000003f3: PUSH1 0x00
000003f5: DUP1
000003f6: REVERT
000003f7: JUMPDEST
000003f8: POP
000003f9: PUSH2 0x01da
000003fc: PUSH2 0x0406
000003ff: CALLDATASIZE
00000400: PUSH1 0x04
00000402: PUSH2 0x2d62
00000405: JUMP
00000406: JUMPDEST
00000407: PUSH2 0x1264
0000040a: JUMP
0000040b: JUMPDEST
0000040c: CALLVALUE
0000040d: DUP1
0000040e: ISZERO
0000040f: PUSH2 0x0417
00000412: JUMPI
00000413: PUSH1 0x00
00000415: DUP1
00000416: REVERT
00000417: JUMPDEST
00000418: POP
00000419: PUSH2 0x0337
0000041c: PUSH2 0x0426
0000041f: CALLDATASIZE
00000420: PUSH1 0x04
00000422: PUSH2 0x2d62
00000425: JUMP
00000426: JUMPDEST
00000427: PUSH1 0x9b
00000429: PUSH1 0x20
0000042b: MSTORE
0000042c: PUSH1 0x00
0000042e: SWAP1
0000042f: DUP2
00000430: MSTORE
00000431: PUSH1 0x40
00000433: SWAP1
00000434: KECCAK256
00000435: SLOAD
00000436: DUP2
00000437: JUMP
00000438: JUMPDEST
00000439: CALLVALUE
0000043a: DUP1
0000043b: ISZERO
0000043c: PUSH2 0x0444
0000043f: JUMPI
00000440: PUSH1 0x00
00000442: DUP1
00000443: REVERT
00000444: JUMPDEST
00000445: POP
00000446: PUSH2 0x02bf
00000449: PUSH2 0x0453
0000044c: CALLDATASIZE
0000044d: PUSH1 0x04
0000044f: PUSH2 0x2dc1
00000452: JUMP
00000453: JUMPDEST
00000454: PUSH1 0x9c
00000456: PUSH1 0x20
00000458: SWAP1
00000459: DUP2
0000045a: MSTORE
0000045b: PUSH1 0x00
0000045d: SWAP3
0000045e: DUP4
0000045f: MSTORE
00000460: PUSH1 0x40
00000462: DUP1
00000463: DUP5
00000464: KECCAK256
00000465: SWAP1
00000466: SWAP2
00000467: MSTORE
00000468: SWAP1
00000469: DUP3
0000046a: MSTORE
0000046b: SWAP1
0000046c: KECCAK256
0000046d: SLOAD
0000046e: PUSH1 0xff
00000470: AND
00000471: DUP2
00000472: JUMP
00000473: JUMPDEST
00000474: CALLVALUE
00000475: DUP1
00000476: ISZERO
00000477: PUSH2 0x047f
0000047a: JUMPI
0000047b: PUSH1 0x00
0000047d: DUP1
0000047e: REVERT
0000047f: JUMPDEST
00000480: POP
00000481: PUSH2 0x01da
00000484: PUSH2 0x048e
00000487: CALLDATASIZE
00000488: PUSH1 0x04
0000048a: PUSH2 0x2ee8
0000048d: JUMP
0000048e: JUMPDEST
0000048f: PUSH2 0x1375
00000492: JUMP
00000493: JUMPDEST
00000494: CALLVALUE
00000495: DUP1
00000496: ISZERO
00000497: PUSH2 0x049f
0000049a: JUMPI
0000049b: PUSH1 0x00
0000049d: DUP1
0000049e: REVERT
0000049f: JUMPDEST
000004a0: POP
000004a1: PUSH2 0x01da
000004a4: PUSH2 0x04ae
000004a7: CALLDATASIZE
000004a8: PUSH1 0x04
000004aa: PUSH2 0x2d62
000004ad: JUMP
000004ae: JUMPDEST
000004af: PUSH2 0x1381
000004b2: JUMP
000004b3: JUMPDEST
000004b4: PUSH2 0x04bb
000004b7: PUSH2 0x1799
000004ba: JUMP
000004bb: JUMPDEST
000004bc: PUSH1 0x97
000004be: SLOAD
000004bf: PUSH1 0xff
000004c1: AND
000004c2: ISZERO
000004c3: PUSH2 0x050e
000004c6: JUMPI
000004c7: PUSH1 0x40
000004c9: MLOAD
000004ca: PUSH3 0x461bcd
000004ce: PUSH1 0xe5
000004d0: SHL
000004d1: DUP2
000004d2: MSTORE
000004d3: PUSH1 0x20
000004d5: PUSH1 0x04
000004d7: DUP3
000004d8: ADD
000004d9: MSTORE
000004da: PUSH1 0x06
000004dc: PUSH1 0x24
000004de: DUP3
000004df: ADD
000004e0: MSTORE
000004e1: PUSH32 0x5061757365640000000000000000000000000000000000000000000000000000
00000502: PUSH1 0x44
00000504: DUP3
00000505: ADD
00000506: MSTORE
00000507: PUSH1 0x64
00000509: ADD
0000050a: PUSH2 0x01ac
0000050d: JUMP
0000050e: JUMPDEST
0000050f: PUSH1 0x00
00000511: DUP1
00000512: PUSH1 0x00
00000514: DUP1
00000515: PUSH1 0x00
00000517: DUP1
00000518: DUP7
00000519: DUP1
0000051a: PUSH1 0x20
0000051c: ADD
0000051d: SWAP1
0000051e: MLOAD
0000051f: DUP2
00000520: ADD
00000521: SWAP1
00000522: PUSH2 0x052b
00000525: SWAP2
00000526: SWAP1
00000527: PUSH2 0x2f29
0000052a: JUMP
0000052b: JUMPDEST
0000052c: PUSH1 0x98
0000052e: SLOAD
0000052f: SWAP6
00000530: SWAP12
00000531: POP
00000532: SWAP4
00000533: SWAP10
00000534: POP
00000535: SWAP2
00000536: SWAP8
00000537: POP
00000538: SWAP6
00000539: POP
0000053a: SWAP4
0000053b: POP
0000053c: SWAP2
0000053d: POP
0000053e: PUSH1 0x01
00000540: PUSH1 0x01
00000542: PUSH1 0xa0
00000544: SHL
00000545: SUB
00000546: AND
00000547: PUSH2 0x0592
0000054a: JUMPI
0000054b: PUSH1 0x40
0000054d: MLOAD
0000054e: PUSH3 0x461bcd
00000552: PUSH1 0xe5
00000554: SHL
00000555: DUP2
00000556: MSTORE
00000557: PUSH1 0x20
00000559: PUSH1 0x04
0000055b: DUP3
0000055c: ADD
0000055d: MSTORE
0000055e: PUSH1 0x0f
00000560: PUSH1 0x24
00000562: DUP3
00000563: ADD
00000564: MSTORE
00000565: PUSH32 0x4e6f7420696d706c656d656e7465640000000000000000000000000000000000
00000586: PUSH1 0x44
00000588: DUP3
00000589: ADD
0000058a: MSTORE
0000058b: PUSH1 0x64
0000058d: ADD
0000058e: PUSH2 0x01ac
00000591: JUMP
00000592: JUMPDEST
00000593: PUSH1 0x00
00000595: DUP2
00000596: GT
00000597: PUSH2 0x05e2
0000059a: JUMPI
0000059b: PUSH1 0x40
0000059d: MLOAD
0000059e: PUSH3 0x461bcd
000005a2: PUSH1 0xe5
000005a4: SHL
000005a5: DUP2
000005a6: MSTORE
000005a7: PUSH1 0x20
000005a9: PUSH1 0x04
000005ab: DUP3
000005ac: ADD
000005ad: MSTORE
000005ae: PUSH1 0x11
000005b0: PUSH1 0x24
000005b2: DUP3
000005b3: ADD
000005b4: MSTORE
000005b5: PUSH32 0x4e6f7420656e6f75676820616d6f756e74000000000000000000000000000000
000005d6: PUSH1 0x44
000005d8: DUP3
000005d9: ADD
000005da: MSTORE
000005db: PUSH1 0x64
000005dd: ADD
000005de: PUSH2 0x01ac
000005e1: JUMP
000005e2: JUMPDEST
000005e3: PUSH1 0x01
000005e5: PUSH1 0x01
000005e7: PUSH1 0xa0
000005e9: SHL
000005ea: SUB
000005eb: DUP3
000005ec: AND
000005ed: PUSH2 0x0638
000005f0: JUMPI
000005f1: PUSH1 0x40
000005f3: MLOAD
000005f4: PUSH3 0x461bcd
000005f8: PUSH1 0xe5
000005fa: SHL
000005fb: DUP2
000005fc: MSTORE
000005fd: PUSH1 0x20
000005ff: PUSH1 0x04
00000601: DUP3
00000602: ADD
00000603: MSTORE
00000604: PUSH1 0x0f
00000606: PUSH1 0x24
00000608: DUP3
00000609: ADD
0000060a: MSTORE
0000060b: PUSH32 0x496e76616c696420616464726573730000000000000000000000000000000000
0000062c: PUSH1 0x44
0000062e: DUP3
0000062f: ADD
00000630: MSTORE
00000631: PUSH1 0x64
00000633: ADD
00000634: PUSH2 0x01ac
00000637: JUMP
00000638: JUMPDEST
00000639: PUSH1 0x01
0000063b: PUSH1 0x01
0000063d: PUSH1 0xa0
0000063f: SHL
00000640: SUB
00000641: DUP7
00000642: AND
00000643: PUSH1 0x00
00000645: SWAP1
00000646: DUP2
00000647: MSTORE
00000648: PUSH1 0x9c
0000064a: PUSH1 0x20
0000064c: SWAP1
0000064d: DUP2
0000064e: MSTORE
0000064f: PUSH1 0x40
00000651: DUP1
00000652: DUP4
00000653: KECCAK256
00000654: DUP9
00000655: DUP5
00000656: MSTORE
00000657: SWAP1
00000658: SWAP2
00000659: MSTORE
0000065a: SWAP1
0000065b: KECCAK256
0000065c: SLOAD
0000065d: PUSH1 0xff
0000065f: AND
00000660: ISZERO
00000661: PUSH2 0x06ac
00000664: JUMPI
00000665: PUSH1 0x40
00000667: MLOAD
00000668: PUSH3 0x461bcd
0000066c: PUSH1 0xe5
0000066e: SHL
0000066f: DUP2
00000670: MSTORE
00000671: PUSH1 0x20
00000673: PUSH1 0x04
00000675: DUP3
00000676: ADD
00000677: MSTORE
00000678: PUSH1 0x16
0000067a: PUSH1 0x24
0000067c: DUP3
0000067d: ADD
0000067e: MSTORE
0000067f: PUSH32 0x4f7264657220616c726561647920657865637574656400000000000000000000
000006a0: PUSH1 0x44
000006a2: DUP3
000006a3: ADD
000006a4: MSTORE
000006a5: PUSH1 0x64
000006a7: ADD
000006a8: PUSH2 0x01ac
000006ab: JUMP
000006ac: JUMPDEST
000006ad: DUP8
000006ae: MLOAD
000006af: DUP10
000006b0: MLOAD
000006b1: EQ
000006b2: PUSH2 0x06fd
000006b5: JUMPI
000006b6: PUSH1 0x40
000006b8: MLOAD
000006b9: PUSH3 0x461bcd
000006bd: PUSH1 0xe5
000006bf: SHL
000006c0: DUP2
000006c1: MSTORE
000006c2: PUSH1 0x20
000006c4: PUSH1 0x04
000006c6: DUP3
000006c7: ADD
000006c8: MSTORE
000006c9: PUSH1 0x0e
000006cb: PUSH1 0x24
000006cd: DUP3
000006ce: ADD
000006cf: MSTORE
000006d0: PUSH32 0x496e707574206d69736d61746368000000000000000000000000000000000000
000006f1: PUSH1 0x44
000006f3: DUP3
000006f4: ADD
000006f5: MSTORE
000006f6: PUSH1 0x64
000006f8: ADD
000006f9: PUSH2 0x01ac
000006fc: JUMP
000006fd: JUMPDEST
000006fe: PUSH1 0x01
00000700: PUSH1 0x01
00000702: PUSH1 0xa0
00000704: SHL
00000705: SUB
00000706: DUP5
00000707: DUP2
00000708: AND
00000709: PUSH1 0x00
0000070b: SWAP1
0000070c: DUP2
0000070d: MSTORE
0000070e: PUSH1 0x9a
00000710: PUSH1 0x20
00000712: MSTORE
00000713: PUSH1 0x40
00000715: SWAP1
00000716: KECCAK256
00000717: SLOAD
00000718: DUP2
00000719: AND
0000071a: SWAP1
0000071b: DUP5
0000071c: AND
0000071d: EQ
0000071e: PUSH2 0x0769
00000721: JUMPI
00000722: PUSH1 0x40
00000724: MLOAD
00000725: PUSH3 0x461bcd
00000729: PUSH1 0xe5
0000072b: SHL
0000072c: DUP2
0000072d: MSTORE
0000072e: PUSH1 0x20
00000730: PUSH1 0x04
00000732: DUP3
00000733: ADD
00000734: MSTORE
00000735: PUSH1 0x15
00000737: PUSH1 0x24
00000739: DUP3
0000073a: ADD
0000073b: MSTORE
0000073c: PUSH32 0x496e76616c696420746f6b656e20676174657761790000000000000000000000
0000075d: PUSH1 0x44
0000075f: DUP3
00000760: ADD
00000761: MSTORE
00000762: PUSH1 0x64
00000764: ADD
00000765: PUSH2 0x01ac
00000768: JUMP
00000769: JUMPDEST
0000076a: PUSH1 0x00
0000076c: CHAINID
0000076d: DUP9
0000076e: PUSH1 0x40
00000770: MLOAD
00000771: PUSH1 0x20
00000773: ADD
00000774: PUSH2 0x077e
00000777: SWAP3
00000778: SWAP2
00000779: SWAP1
0000077a: PUSH2 0x2fc0
0000077d: JUMP
0000077e: JUMPDEST
0000077f: PUSH1 0x40
00000781: MLOAD
00000782: PUSH1 0x20
00000784: DUP2
00000785: DUP4
00000786: SUB
00000787: SUB
00000788: DUP2
00000789: MSTORE
0000078a: SWAP1
0000078b: PUSH1 0x40
0000078d: MSTORE
0000078e: DUP1
0000078f: MLOAD
00000790: SWAP1
00000791: PUSH1 0x20
00000793: ADD
00000794: KECCAK256
00000795: SWAP1
00000796: POP
00000797: PUSH2 0x081a
0000079a: DUP8
0000079b: DUP8
0000079c: DUP13
0000079d: DUP13
0000079e: DUP6
0000079f: PUSH1 0x97
000007a1: PUSH1 0x01
000007a3: SWAP1
000007a4: SLOAD
000007a5: SWAP1
000007a6: PUSH2 0x0100
000007a9: EXP
000007aa: SWAP1
000007ab: DIV
000007ac: PUSH1 0x01
000007ae: PUSH1 0x01
000007b0: PUSH1 0xa0
000007b2: SHL
000007b3: SUB
000007b4: AND
000007b5: PUSH1 0x01
000007b7: PUSH1 0x01
000007b9: PUSH1 0xa0
000007bb: SHL
000007bc: SUB
000007bd: AND
000007be: PUSH4 0x65ee3557
000007c3: PUSH1 0x40
000007c5: MLOAD
000007c6: DUP2
000007c7: PUSH4 0xffffffff
000007cc: AND
000007cd: PUSH1 0xe0
000007cf: SHL
000007d0: DUP2
000007d1: MSTORE
000007d2: PUSH1 0x04
000007d4: ADD
000007d5: PUSH1 0x20
000007d7: PUSH1 0x40
000007d9: MLOAD
000007da: DUP1
000007db: DUP4
000007dc: SUB
000007dd: DUP2
000007de: DUP7
000007df: GAS
000007e0: STATICCALL
000007e1: ISZERO
000007e2: DUP1
000007e3: ISZERO
000007e4: PUSH2 0x07f1
000007e7: JUMPI
000007e8: RETURNDATASIZE
000007e9: PUSH1 0x00
000007eb: DUP1
000007ec: RETURNDATACOPY
000007ed: RETURNDATASIZE
000007ee: PUSH1 0x00
000007f0: REVERT
000007f1: JUMPDEST
000007f2: POP
000007f3: POP
000007f4: POP
000007f5: POP
000007f6: PUSH1 0x40
000007f8: MLOAD
000007f9: RETURNDATASIZE
000007fa: PUSH1 0x1f
000007fc: NOT
000007fd: PUSH1 0x1f
000007ff: DUP3
00000800: ADD
00000801: AND
00000802: DUP3
00000803: ADD
00000804: DUP1
00000805: PUSH1 0x40
00000807: MSTORE
00000808: POP
00000809: DUP2
0000080a: ADD
0000080b: SWAP1
0000080c: PUSH2 0x0815
0000080f: SWAP2
00000810: SWAP1
00000811: PUSH2 0x2fe6
00000814: JUMP
00000815: JUMPDEST
00000816: PUSH2 0x17f2
00000819: JUMP
0000081a: JUMPDEST
0000081b: PUSH1 0x01
0000081d: PUSH1 0x01
0000081f: PUSH1 0xa0
00000821: SHL
00000822: SUB
00000823: DUP1
00000824: DUP9
00000825: AND
00000826: PUSH1 0x00
00000828: SWAP1
00000829: DUP2
0000082a: MSTORE
0000082b: PUSH1 0x9c
0000082d: PUSH1 0x20
0000082f: SWAP1
00000830: DUP2
00000831: MSTORE
00000832: PUSH1 0x40
00000834: DUP1
00000835: DUP4
00000836: KECCAK256
00000837: DUP11
00000838: DUP5
00000839: MSTORE
0000083a: SWAP1
0000083b: SWAP2
0000083c: MSTORE
0000083d: SWAP1
0000083e: KECCAK256
0000083f: DUP1
00000840: SLOAD
00000841: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
00000862: AND
00000863: PUSH1 0x01
00000865: OR
00000866: SWAP1
00000867: SSTORE
00000868: PUSH2 0x0874
0000086b: SWAP1
0000086c: DUP7
0000086d: AND
0000086e: DUP5
0000086f: DUP5
00000870: PUSH2 0x1bfe
00000873: JUMP
00000874: JUMPDEST
00000875: PUSH1 0x40
00000877: MLOAD
00000878: DUP2
00000879: DUP2
0000087a: MSTORE
0000087b: PUSH32 0xdb8766dc7a4cbe0b9d514534307d6ed0bc09c930e535e9c61badb099479e13b6
0000089c: SWAP1
0000089d: PUSH1 0x20
0000089f: ADD
000008a0: PUSH1 0x40
000008a2: MLOAD
000008a3: DUP1
000008a4: SWAP2
000008a5: SUB
000008a6: SWAP1
000008a7: LOG1
000008a8: POP
000008a9: POP
000008aa: POP
000008ab: POP
000008ac: POP
000008ad: POP
000008ae: POP
000008af: PUSH2 0x08b8
000008b2: PUSH1 0x01
000008b4: PUSH1 0x65
000008b6: SSTORE
000008b7: JUMP
000008b8: JUMPDEST
000008b9: POP
000008ba: POP
000008bb: POP
000008bc: JUMP
000008bd: JUMPDEST
000008be: PUSH1 0x97
000008c0: PUSH1 0x01
000008c2: SWAP1
000008c3: SLOAD
000008c4: SWAP1
000008c5: PUSH2 0x0100
000008c8: EXP
000008c9: SWAP1
000008ca: DIV
000008cb: PUSH1 0x01
000008cd: PUSH1 0x01
000008cf: PUSH1 0xa0
000008d1: SHL
000008d2: SUB
000008d3: AND
000008d4: PUSH1 0x01
000008d6: PUSH1 0x01
000008d8: PUSH1 0xa0
000008da: SHL
000008db: SUB
000008dc: AND
000008dd: PUSH4 0x3c81df21
000008e2: PUSH1 0x40
000008e4: MLOAD
000008e5: DUP2
000008e6: PUSH4 0xffffffff
000008eb: AND
000008ec: PUSH1 0xe0
000008ee: SHL
000008ef: DUP2
000008f0: MSTORE
000008f1: PUSH1 0x04
000008f3: ADD
000008f4: PUSH1 0x20
000008f6: PUSH1 0x40
000008f8: MLOAD
000008f9: DUP1
000008fa: DUP4
000008fb: SUB
000008fc: DUP2
000008fd: DUP7
000008fe: GAS
000008ff: STATICCALL
00000900: ISZERO
00000901: DUP1
00000902: ISZERO
00000903: PUSH2 0x0910
00000906: JUMPI
00000907: RETURNDATASIZE
00000908: PUSH1 0x00
0000090a: DUP1
0000090b: RETURNDATACOPY
0000090c: RETURNDATASIZE
0000090d: PUSH1 0x00
0000090f: REVERT
00000910: JUMPDEST
00000911: POP
00000912: POP
00000913: POP
00000914: POP
00000915: PUSH1 0x40
00000917: MLOAD
00000918: RETURNDATASIZE
00000919: PUSH1 0x1f
0000091b: NOT
0000091c: PUSH1 0x1f
0000091e: DUP3
0000091f: ADD
00000920: AND
00000921: DUP3
00000922: ADD
00000923: DUP1
00000924: PUSH1 0x40
00000926: MSTORE
00000927: POP
00000928: DUP2
00000929: ADD
0000092a: SWAP1
0000092b: PUSH2 0x0934
0000092e: SWAP2
0000092f: SWAP1
00000930: PUSH2 0x2fff
00000933: JUMP
00000934: JUMPDEST
00000935: PUSH1 0x01
00000937: PUSH1 0x01
00000939: PUSH1 0xa0
0000093b: SHL
0000093c: SUB
0000093d: AND
0000093e: CALLER
0000093f: PUSH1 0x01
00000941: PUSH1 0x01
00000943: PUSH1 0xa0
00000945: SHL
00000946: SUB
00000947: AND
00000948: EQ
00000949: PUSH2 0x0994
0000094c: JUMPI
0000094d: PUSH1 0x40
0000094f: MLOAD
00000950: PUSH3 0x461bcd
00000954: PUSH1 0xe5
00000956: SHL
00000957: DUP2
00000958: MSTORE
00000959: PUSH1 0x20
0000095b: PUSH1 0x04
0000095d: DUP3
0000095e: ADD
0000095f: MSTORE
00000960: PUSH1 0x11
00000962: PUSH1 0x24
00000964: DUP3
00000965: ADD
00000966: MSTORE
00000967: PUSH32 0x4d756c7469736967207265717569726564000000000000000000000000000000
00000988: PUSH1 0x44
0000098a: DUP3
0000098b: ADD
0000098c: MSTORE
0000098d: PUSH1 0x64
0000098f: ADD
00000990: PUSH2 0x01ac
00000993: JUMP
00000994: JUMPDEST
00000995: PUSH1 0x99
00000997: SSTORE
00000998: JUMP
00000999: JUMPDEST
0000099a: PUSH1 0x01
0000099c: PUSH1 0x01
0000099e: PUSH1 0xa0
000009a0: SHL
000009a1: SUB
000009a2: PUSH32 0x000000000000000000000000a8372d6ff00d48a25baa1af16d6a86c936708f4e
000009c3: AND
000009c4: ADDRESS
000009c5: SUB
000009c6: PUSH2 0x0a37
000009c9: JUMPI
000009ca: PUSH1 0x40
000009cc: MLOAD
000009cd: PUSH3 0x461bcd
000009d1: PUSH1 0xe5
000009d3: SHL
000009d4: DUP2
000009d5: MSTORE
000009d6: PUSH1 0x20
000009d8: PUSH1 0x04
000009da: DUP3
000009db: ADD
000009dc: MSTORE
000009dd: PUSH1 0x2c
000009df: PUSH1 0x24
000009e1: DUP3
000009e2: ADD
000009e3: MSTORE
000009e4: PUSH32 0x46756e6374696f6e206d7573742062652063616c6c6564207468726f75676820
00000a05: PUSH1 0x44
00000a07: DUP3
00000a08: ADD
00000a09: MSTORE
00000a0a: PUSH32 0x64656c656761746563616c6c0000000000000000000000000000000000000000
00000a2b: PUSH1 0x64
00000a2d: DUP3
00000a2e: ADD
00000a2f: MSTORE
00000a30: PUSH1 0x84
00000a32: ADD
00000a33: PUSH2 0x01ac
00000a36: JUMP
00000a37: JUMPDEST
00000a38: PUSH32 0x000000000000000000000000a8372d6ff00d48a25baa1af16d6a86c936708f4e
00000a59: PUSH1 0x01
00000a5b: PUSH1 0x01
00000a5d: PUSH1 0xa0
00000a5f: SHL
00000a60: SUB
00000a61: AND
00000a62: PUSH2 0x0a92
00000a65: PUSH32 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc
00000a86: SLOAD
00000a87: PUSH1 0x01
00000a89: PUSH1 0x01
00000a8b: PUSH1 0xa0
00000a8d: SHL
00000a8e: SUB
00000a8f: AND
00000a90: SWAP1
00000a91: JUMP
00000a92: JUMPDEST
00000a93: PUSH1 0x01
00000a95: PUSH1 0x01
00000a97: PUSH1 0xa0
00000a99: SHL
00000a9a: SUB
00000a9b: AND
00000a9c: EQ
00000a9d: PUSH2 0x0b0e
00000aa0: JUMPI
00000aa1: PUSH1 0x40
00000aa3: MLOAD
00000aa4: PUSH3 0x461bcd
00000aa8: PUSH1 0xe5
00000aaa: SHL
00000aab: DUP2
00000aac: MSTORE
00000aad: PUSH1 0x20
00000aaf: PUSH1 0x04
00000ab1: DUP3
00000ab2: ADD
00000ab3: MSTORE
00000ab4: PUSH1 0x2c
00000ab6: PUSH1 0x24
00000ab8: DUP3
00000ab9: ADD
00000aba: MSTORE
00000abb: PUSH32 0x46756e6374696f6e206d7573742062652063616c6c6564207468726f75676820
00000adc: PUSH1 0x44
00000ade: DUP3
00000adf: ADD
00000ae0: MSTORE
00000ae1: PUSH32 0x6163746976652070726f78790000000000000000000000000000000000000000
00000b02: PUSH1 0x64
00000b04: DUP3
00000b05: ADD
00000b06: MSTORE
00000b07: PUSH1 0x84
00000b09: ADD
00000b0a: PUSH2 0x01ac
00000b0d: JUMP
00000b0e: JUMPDEST
00000b0f: PUSH2 0x0b17
00000b12: DUP2
00000b13: PUSH2 0x1cae
00000b16: JUMP
00000b17: JUMPDEST
00000b18: PUSH1 0x40
00000b1a: DUP1
00000b1b: MLOAD
00000b1c: PUSH1 0x00
00000b1e: DUP1
00000b1f: DUP3
00000b20: MSTORE
00000b21: PUSH1 0x20
00000b23: DUP3
00000b24: ADD
00000b25: SWAP1
00000b26: SWAP3
00000b27: MSTORE
00000b28: PUSH2 0x0b33
00000b2b: SWAP2
00000b2c: DUP4
00000b2d: SWAP2
00000b2e: SWAP1
00000b2f: PUSH2 0x1d85
00000b32: JUMP
00000b33: JUMPDEST
00000b34: POP
00000b35: JUMP
00000b36: JUMPDEST
00000b37: PUSH2 0x0b42
00000b3a: DUP3
00000b3b: CALLER
00000b3c: CALLER
00000b3d: DUP5
00000b3e: PUSH2 0x1f25
00000b41: JUMP
00000b42: JUMPDEST
00000b43: POP
00000b44: POP
00000b45: JUMP
00000b46: JUMPDEST
00000b47: PUSH1 0x00
00000b49: SLOAD
00000b4a: PUSH2 0x0100
00000b4d: SWAP1
00000b4e: DIV
00000b4f: PUSH1 0xff
00000b51: AND
00000b52: ISZERO
00000b53: DUP1
00000b54: DUP1
00000b55: ISZERO
00000b56: PUSH2 0x0b66
00000b59: JUMPI
00000b5a: POP
00000b5b: PUSH1 0x00
00000b5d: SLOAD
00000b5e: PUSH1 0x01
00000b60: PUSH1 0xff
00000b62: SWAP1
00000b63: SWAP2
00000b64: AND
00000b65: LT
00000b66: JUMPDEST
00000b67: DUP1
00000b68: PUSH2 0x0b80
00000b6b: JUMPI
00000b6c: POP
00000b6d: ADDRESS
00000b6e: EXTCODESIZE
00000b6f: ISZERO
00000b70: DUP1
00000b71: ISZERO
00000b72: PUSH2 0x0b80
00000b75: JUMPI
00000b76: POP
00000b77: PUSH1 0x00
00000b79: SLOAD
00000b7a: PUSH1 0xff
00000b7c: AND
00000b7d: PUSH1 0x01
00000b7f: EQ
00000b80: JUMPDEST
00000b81: PUSH2 0x0bf2
00000b84: JUMPI
00000b85: PUSH1 0x40
00000b87: MLOAD
00000b88: PUSH3 0x461bcd
00000b8c: PUSH1 0xe5
00000b8e: SHL
00000b8f: DUP2
00000b90: MSTORE
00000b91: PUSH1 0x20
00000b93: PUSH1 0x04
00000b95: DUP3
00000b96: ADD
00000b97: MSTORE
00000b98: PUSH1 0x2e
00000b9a: PUSH1 0x24
00000b9c: DUP3
00000b9d: ADD
00000b9e: MSTORE
00000b9f: PUSH32 0x496e697469616c697a61626c653a20636f6e747261637420697320616c726561
00000bc0: PUSH1 0x44
00000bc2: DUP3
00000bc3: ADD
00000bc4: MSTORE
00000bc5: PUSH32 0x647920696e697469616c697a6564000000000000000000000000000000000000
00000be6: PUSH1 0x64
00000be8: DUP3
00000be9: ADD
00000bea: MSTORE
00000beb: PUSH1 0x84
00000bed: ADD
00000bee: PUSH2 0x01ac
00000bf1: JUMP
00000bf2: JUMPDEST
00000bf3: PUSH1 0x00
00000bf5: DUP1
00000bf6: SLOAD
00000bf7: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
00000c18: AND
00000c19: PUSH1 0x01
00000c1b: OR
00000c1c: SWAP1
00000c1d: SSTORE
00000c1e: DUP1
00000c1f: ISZERO
00000c20: PUSH2 0x0c50
00000c23: JUMPI
00000c24: PUSH1 0x00
00000c26: DUP1
00000c27: SLOAD
00000c28: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff
00000c49: AND
00000c4a: PUSH2 0x0100
00000c4d: OR
00000c4e: SWAP1
00000c4f: SSTORE
00000c50: JUMPDEST
00000c51: PUSH2 0x0c58
00000c54: PUSH2 0x21c3
00000c57: JUMP
00000c58: JUMPDEST
00000c59: PUSH2 0x0cec
00000c5c: DUP4
00000c5d: DUP4
00000c5e: PUSH1 0x97
00000c60: DUP1
00000c61: SLOAD
00000c62: PUSH1 0x01
00000c64: PUSH1 0x01
00000c66: PUSH1 0xa0
00000c68: SHL
00000c69: SUB
00000c6a: SWAP4
00000c6b: DUP5
00000c6c: AND
00000c6d: PUSH2 0x0100
00000c70: MUL
00000c71: PUSH32 0xffffffffffffffffffffff0000000000000000000000000000000000000000ff
00000c92: SWAP1
00000c93: SWAP2
00000c94: AND
00000c95: OR
00000c96: SWAP1
00000c97: SSTORE
00000c98: PUSH1 0x98
00000c9a: DUP1
00000c9b: SLOAD
00000c9c: SWAP2
00000c9d: SWAP1
00000c9e: SWAP3
00000c9f: AND
00000ca0: PUSH32 0xffffffffffffffffffffffff0000000000000000000000000000000000000000
00000cc1: SWAP1
00000cc2: SWAP2
00000cc3: AND
00000cc4: OR
00000cc5: SWAP1
00000cc6: SSTORE
00000cc7: PUSH32 0xb9ae7ba14d826de669be54f7c79008181b430f21bd3ff90dac8cce1e60ae88a9
00000ce8: PUSH1 0x99
00000cea: SSTORE
00000ceb: JUMP
00000cec: JUMPDEST
00000ced: DUP1
00000cee: ISZERO
00000cef: PUSH2 0x08b8
00000cf2: JUMPI
00000cf3: PUSH1 0x00
00000cf5: DUP1
00000cf6: SLOAD
00000cf7: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff
00000d18: AND
00000d19: SWAP1
00000d1a: SSTORE
00000d1b: PUSH1 0x40
00000d1d: MLOAD
00000d1e: PUSH1 0x01
00000d20: DUP2
00000d21: MSTORE
00000d22: PUSH32 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498
00000d43: SWAP1
00000d44: PUSH1 0x20
00000d46: ADD
00000d47: PUSH1 0x40
00000d49: MLOAD
00000d4a: DUP1
00000d4b: SWAP2
00000d4c: SUB
00000d4d: SWAP1
00000d4e: LOG1
00000d4f: POP
00000d50: POP
00000d51: POP
00000d52: JUMP
00000d53: JUMPDEST
00000d54: PUSH1 0x01
00000d56: PUSH1 0x01
00000d58: PUSH1 0xa0
00000d5a: SHL
00000d5b: SUB
00000d5c: PUSH32 0x000000000000000000000000a8372d6ff00d48a25baa1af16d6a86c936708f4e
00000d7d: AND
00000d7e: ADDRESS
00000d7f: SUB
00000d80: PUSH2 0x0df1
00000d83: JUMPI
00000d84: PUSH1 0x40
00000d86: MLOAD
00000d87: PUSH3 0x461bcd
00000d8b: PUSH1 0xe5
00000d8d: SHL
00000d8e: DUP2
00000d8f: MSTORE
00000d90: PUSH1 0x20
00000d92: PUSH1 0x04
00000d94: DUP3
00000d95: ADD
00000d96: MSTORE
00000d97: PUSH1 0x2c
00000d99: PUSH1 0x24
00000d9b: DUP3
00000d9c: ADD
00000d9d: MSTORE
00000d9e: PUSH32 0x46756e6374696f6e206d7573742062652063616c6c6564207468726f75676820
00000dbf: PUSH1 0x44
00000dc1: DUP3
00000dc2: ADD
00000dc3: MSTORE
00000dc4: PUSH32 0x64656c656761746563616c6c0000000000000000000000000000000000000000
00000de5: PUSH1 0x64
00000de7: DUP3
00000de8: ADD
00000de9: MSTORE
00000dea: PUSH1 0x84
00000dec: ADD
00000ded: PUSH2 0x01ac
00000df0: JUMP
00000df1: JUMPDEST
00000df2: PUSH32 0x000000000000000000000000a8372d6ff00d48a25baa1af16d6a86c936708f4e
00000e13: PUSH1 0x01
00000e15: PUSH1 0x01
00000e17: PUSH1 0xa0
00000e19: SHL
00000e1a: SUB
00000e1b: AND
00000e1c: PUSH2 0x0e4c
00000e1f: PUSH32 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc
00000e40: SLOAD
00000e41: PUSH1 0x01
00000e43: PUSH1 0x01
00000e45: PUSH1 0xa0
00000e47: SHL
00000e48: SUB
00000e49: AND
00000e4a: SWAP1
00000e4b: JUMP
00000e4c: JUMPDEST
00000e4d: PUSH1 0x01
00000e4f: PUSH1 0x01
00000e51: PUSH1 0xa0
00000e53: SHL
00000e54: SUB
00000e55: AND
00000e56: EQ
00000e57: PUSH2 0x0ec8
00000e5a: JUMPI
00000e5b: PUSH1 0x40
00000e5d: MLOAD
00000e5e: PUSH3 0x461bcd
00000e62: PUSH1 0xe5
00000e64: SHL
00000e65: DUP2
00000e66: MSTORE
00000e67: PUSH1 0x20
00000e69: PUSH1 0x04
00000e6b: DUP3
00000e6c: ADD
00000e6d: MSTORE
00000e6e: PUSH1 0x2c
00000e70: PUSH1 0x24
00000e72: DUP3
00000e73: ADD
00000e74: MSTORE
00000e75: PUSH32 0x46756e6374696f6e206d7573742062652063616c6c6564207468726f75676820
00000e96: PUSH1 0x44
00000e98: DUP3
00000e99: ADD
00000e9a: MSTORE
00000e9b: PUSH32 0x6163746976652070726f78790000000000000000000000000000000000000000
00000ebc: PUSH1 0x64
00000ebe: DUP3
00000ebf: ADD
00000ec0: MSTORE
00000ec1: PUSH1 0x84
00000ec3: ADD
00000ec4: PUSH2 0x01ac
00000ec7: JUMP
00000ec8: JUMPDEST
00000ec9: PUSH2 0x0ed1
00000ecc: DUP3
00000ecd: PUSH2 0x1cae
00000ed0: JUMP
00000ed1: JUMPDEST
00000ed2: PUSH2 0x0b42
00000ed5: DUP3
00000ed6: DUP3
00000ed7: PUSH1 0x01
00000ed9: PUSH2 0x1d85
00000edc: JUMP
00000edd: JUMPDEST
00000ede: PUSH1 0x00
00000ee0: ADDRESS
00000ee1: PUSH1 0x01
00000ee3: PUSH1 0x01
00000ee5: PUSH1 0xa0
00000ee7: SHL
00000ee8: SUB
00000ee9: PUSH32 0x000000000000000000000000a8372d6ff00d48a25baa1af16d6a86c936708f4e
00000f0a: AND
00000f0b: EQ
00000f0c: PUSH2 0x0f7d
00000f0f: JUMPI
00000f10: PUSH1 0x40
00000f12: MLOAD
00000f13: PUSH3 0x461bcd
00000f17: PUSH1 0xe5
00000f19: SHL
00000f1a: DUP2
00000f1b: MSTORE
00000f1c: PUSH1 0x20
00000f1e: PUSH1 0x04
00000f20: DUP3
00000f21: ADD
00000f22: MSTORE
00000f23: PUSH1 0x38
00000f25: PUSH1 0x24
00000f27: DUP3
00000f28: ADD
00000f29: MSTORE
00000f2a: PUSH32 0x555550535570677261646561626c653a206d757374206e6f742062652063616c
00000f4b: PUSH1 0x44
00000f4d: DUP3
00000f4e: ADD
00000f4f: MSTORE
00000f50: PUSH32 0x6c6564207468726f7567682064656c656761746563616c6c0000000000000000
00000f71: PUSH1 0x64
00000f73: DUP3
00000f74: ADD
00000f75: MSTORE
00000f76: PUSH1 0x84
00000f78: ADD
00000f79: PUSH2 0x01ac
00000f7c: JUMP
00000f7d: JUMPDEST
00000f7e: POP
00000f7f: PUSH32 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc
00000fa0: SWAP1
00000fa1: JUMP
00000fa2: JUMPDEST
00000fa3: PUSH1 0x97
00000fa5: PUSH1 0x01
00000fa7: SWAP1
00000fa8: SLOAD
00000fa9: SWAP1
00000faa: PUSH2 0x0100
00000fad: EXP
00000fae: SWAP1
00000faf: DIV
00000fb0: PUSH1 0x01
00000fb2: PUSH1 0x01
00000fb4: PUSH1 0xa0
00000fb6: SHL
00000fb7: SUB
00000fb8: AND
00000fb9: PUSH1 0x01
00000fbb: PUSH1 0x01
00000fbd: PUSH1 0xa0
00000fbf: SHL
00000fc0: SUB
00000fc1: AND
00000fc2: PUSH4 0x3c81df21
00000fc7: PUSH1 0x40
00000fc9: MLOAD
00000fca: DUP2
00000fcb: PUSH4 0xffffffff
00000fd0: AND
00000fd1: PUSH1 0xe0
00000fd3: SHL
00000fd4: DUP2
00000fd5: MSTORE
00000fd6: PUSH1 0x04
00000fd8: ADD
00000fd9: PUSH1 0x20
00000fdb: PUSH1 0x40
00000fdd: MLOAD
00000fde: DUP1
00000fdf: DUP4
00000fe0: SUB
00000fe1: DUP2
00000fe2: DUP7
00000fe3: GAS
00000fe4: STATICCALL
00000fe5: ISZERO
00000fe6: DUP1
00000fe7: ISZERO
00000fe8: PUSH2 0x0ff5
00000feb: JUMPI
00000fec: RETURNDATASIZE
00000fed: PUSH1 0x00
00000fef: DUP1
00000ff0: RETURNDATACOPY
00000ff1: RETURNDATASIZE
00000ff2: PUSH1 0x00
00000ff4: REVERT
00000ff5: JUMPDEST
00000ff6: POP
00000ff7: POP
00000ff8: POP
00000ff9: POP
00000ffa: PUSH1 0x40
00000ffc: MLOAD
00000ffd: RETURNDATASIZE
00000ffe: PUSH1 0x1f
00001000: NOT
00001001: PUSH1 0x1f
00001003: DUP3
00001004: ADD
00001005: AND
00001006: DUP3
00001007: ADD
00001008: DUP1
00001009: PUSH1 0x40
0000100b: MSTORE
0000100c: POP
0000100d: DUP2
0000100e: ADD
0000100f: SWAP1
00001010: PUSH2 0x1019
00001013: SWAP2
00001014: SWAP1
00001015: PUSH2 0x2fff
00001018: JUMP
00001019: JUMPDEST
0000101a: PUSH1 0x01
0000101c: PUSH1 0x01
0000101e: PUSH1 0xa0
00001020: SHL
00001021: SUB
00001022: AND
00001023: CALLER
00001024: PUSH1 0x01
00001026: PUSH1 0x01
00001028: PUSH1 0xa0
0000102a: SHL
0000102b: SUB
0000102c: AND
0000102d: EQ
0000102e: PUSH2 0x1079
00001031: JUMPI
00001032: PUSH1 0x40
00001034: MLOAD
00001035: PUSH3 0x461bcd
00001039: PUSH1 0xe5
0000103b: SHL
0000103c: DUP2
0000103d: MSTORE
0000103e: PUSH1 0x20
00001040: PUSH1 0x04
00001042: DUP3
00001043: ADD
00001044: MSTORE
00001045: PUSH1 0x11
00001047: PUSH1 0x24
00001049: DUP3
0000104a: ADD
0000104b: MSTORE
0000104c: PUSH32 0x4d756c7469736967207265717569726564000000000000000000000000000000
0000106d: PUSH1 0x44
0000106f: DUP3
00001070: ADD
00001071: MSTORE
00001072: PUSH1 0x64
00001074: ADD
00001075: PUSH2 0x01ac
00001078: JUMP
00001079: JUMPDEST
0000107a: PUSH1 0x00
0000107c: JUMPDEST
0000107d: DUP3
0000107e: MLOAD
0000107f: DUP2
00001080: LT
00001081: ISZERO
00001082: PUSH2 0x08b8
00001085: JUMPI
00001086: PUSH1 0x00
00001088: DUP4
00001089: DUP3
0000108a: DUP2
0000108b: MLOAD
0000108c: DUP2
0000108d: LT
0000108e: PUSH2 0x1099
00001091: JUMPI
00001092: PUSH2 0x1099
00001095: PUSH2 0x301c
00001098: JUMP
00001099: JUMPDEST
0000109a: PUSH1 0x20
0000109c: SWAP1
0000109d: DUP2
0000109e: MUL
0000109f: SWAP2
000010a0: SWAP1
000010a1: SWAP2
000010a2: ADD
000010a3: ADD
000010a4: MLOAD
000010a5: PUSH1 0x40
000010a7: MLOAD
000010a8: PUSH32 0x70a0823100000000000000000000000000000000000000000000000000000000
000010c9: DUP2
000010ca: MSTORE
000010cb: ADDRESS
000010cc: PUSH1 0x04
000010ce: DUP3
000010cf: ADD
000010d0: MSTORE
000010d1: SWAP1
000010d2: SWAP2
000010d3: POP
000010d4: PUSH1 0x00
000010d6: SWAP1
000010d7: PUSH1 0x01
000010d9: PUSH1 0x01
000010db: PUSH1 0xa0
000010dd: SHL
000010de: SUB
000010df: DUP4
000010e0: AND
000010e1: SWAP1
000010e2: PUSH4 0x70a08231
000010e7: SWAP1
000010e8: PUSH1 0x24
000010ea: ADD
000010eb: PUSH1 0x20
000010ed: PUSH1 0x40
000010ef: MLOAD
000010f0: DUP1
000010f1: DUP4
000010f2: SUB
000010f3: DUP2
000010f4: DUP7
000010f5: GAS
000010f6: STATICCALL
000010f7: ISZERO
000010f8: DUP1
000010f9: ISZERO
000010fa: PUSH2 0x1107
000010fd: JUMPI
000010fe: RETURNDATASIZE
000010ff: PUSH1 0x00
00001101: DUP1
00001102: RETURNDATACOPY
00001103: RETURNDATASIZE
00001104: PUSH1 0x00
00001106: REVERT
00001107: JUMPDEST
00001108: POP
00001109: POP
0000110a: POP
0000110b: POP
0000110c: PUSH1 0x40
0000110e: MLOAD
0000110f: RETURNDATASIZE
00001110: PUSH1 0x1f
00001112: NOT
00001113: PUSH1 0x1f
00001115: DUP3
00001116: ADD
00001117: AND
00001118: DUP3
00001119: ADD
0000111a: DUP1
0000111b: PUSH1 0x40
0000111d: MSTORE
0000111e: POP
0000111f: DUP2
00001120: ADD
00001121: SWAP1
00001122: PUSH2 0x112b
00001125: SWAP2
00001126: SWAP1
00001127: PUSH2 0x2fe6
0000112a: JUMP
0000112b: JUMPDEST
0000112c: SWAP1
0000112d: POP
0000112e: DUP1
0000112f: ISZERO
00001130: PUSH2 0x1147
00001133: JUMPI
00001134: PUSH2 0x1147
00001137: PUSH1 0x01
00001139: PUSH1 0x01
0000113b: PUSH1 0xa0
0000113d: SHL
0000113e: SUB
0000113f: DUP4
00001140: AND
00001141: DUP6
00001142: DUP4
00001143: PUSH2 0x1bfe
00001146: JUMP
00001147: JUMPDEST
00001148: POP
00001149: POP
0000114a: DUP1
0000114b: DUP1
0000114c: PUSH2 0x1154
0000114f: SWAP1
00001150: PUSH2 0x307a
00001153: JUMP
00001154: JUMPDEST
00001155: SWAP2
00001156: POP
00001157: POP
00001158: PUSH2 0x107c
0000115b: JUMP
0000115c: JUMPDEST
0000115d: PUSH1 0x97
0000115f: PUSH1 0x01
00001161: SWAP1
00001162: SLOAD
00001163: SWAP1
00001164: PUSH2 0x0100
00001167: EXP
00001168: SWAP1
00001169: DIV
0000116a: PUSH1 0x01
0000116c: PUSH1 0x01
0000116e: PUSH1 0xa0
00001170: SHL
00001171: SUB
00001172: AND
00001173: PUSH1 0x01
00001175: PUSH1 0x01
00001177: PUSH1 0xa0
00001179: SHL
0000117a: SUB
0000117b: AND
0000117c: PUSH4 0x3c81df21
00001181: PUSH1 0x40
00001183: MLOAD
00001184: DUP2
00001185: PUSH4 0xffffffff
0000118a: AND
0000118b: PUSH1 0xe0
0000118d: SHL
0000118e: DUP2
0000118f: MSTORE
00001190: PUSH1 0x04
00001192: ADD
00001193: PUSH1 0x20
00001195: PUSH1 0x40
00001197: MLOAD
00001198: DUP1
00001199: DUP4
0000119a: SUB
0000119b: DUP2
0000119c: DUP7
0000119d: GAS
0000119e: STATICCALL
0000119f: ISZERO
000011a0: DUP1
000011a1: ISZERO
000011a2: PUSH2 0x11af
000011a5: JUMPI
000011a6: RETURNDATASIZE
000011a7: PUSH1 0x00
000011a9: DUP1
000011aa: RETURNDATACOPY
000011ab: RETURNDATASIZE
000011ac: PUSH1 0x00
000011ae: REVERT
000011af: JUMPDEST
000011b0: POP
000011b1: POP
000011b2: POP
000011b3: POP
000011b4: PUSH1 0x40
000011b6: MLOAD
000011b7: RETURNDATASIZE
000011b8: PUSH1 0x1f
000011ba: NOT
000011bb: PUSH1 0x1f
000011bd: DUP3
000011be: ADD
000011bf: AND
000011c0: DUP3
000011c1: ADD
000011c2: DUP1
000011c3: PUSH1 0x40
000011c5: MSTORE
000011c6: POP
000011c7: DUP2
000011c8: ADD
000011c9: SWAP1
000011ca: PUSH2 0x11d3
000011cd: SWAP2
000011ce: SWAP1
000011cf: PUSH2 0x2fff
000011d2: JUMP
000011d3: JUMPDEST
000011d4: PUSH1 0x01
000011d6: PUSH1 0x01
000011d8: PUSH1 0xa0
000011da: SHL
000011db: SUB
000011dc: AND
000011dd: CALLER
000011de: PUSH1 0x01
000011e0: PUSH1 0x01
000011e2: PUSH1 0xa0
000011e4: SHL
000011e5: SUB
000011e6: AND
000011e7: EQ
000011e8: PUSH2 0x1233
000011eb: JUMPI
000011ec: PUSH1 0x40
000011ee: MLOAD
000011ef: PUSH3 0x461bcd
000011f3: PUSH1 0xe5
000011f5: SHL
000011f6: DUP2
000011f7: MSTORE
000011f8: PUSH1 0x20
000011fa: PUSH1 0x04
000011fc: DUP3
000011fd: ADD
000011fe: MSTORE
000011ff: PUSH1 0x11
00001201: PUSH1 0x24
00001203: DUP3
00001204: ADD
00001205: MSTORE
00001206: PUSH32 0x4d756c7469736967207265717569726564000000000000000000000000000000
00001227: PUSH1 0x44
00001229: DUP3
0000122a: ADD
0000122b: MSTORE
0000122c: PUSH1 0x64
0000122e: ADD
0000122f: PUSH2 0x01ac
00001232: JUMP
00001233: JUMPDEST
00001234: PUSH1 0x97
00001236: DUP1
00001237: SLOAD
00001238: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
00001259: AND
0000125a: SWAP2
0000125b: ISZERO
0000125c: ISZERO
0000125d: SWAP2
0000125e: SWAP1
0000125f: SWAP2
00001260: OR
00001261: SWAP1
00001262: SSTORE
00001263: JUMP
00001264: JUMPDEST
00001265: PUSH1 0x97
00001267: PUSH1 0x01
00001269: SWAP1
0000126a: SLOAD
0000126b: SWAP1
0000126c: PUSH2 0x0100
0000126f: EXP
00001270: SWAP1
00001271: DIV
00001272: PUSH1 0x01
00001274: PUSH1 0x01
00001276: PUSH1 0xa0
00001278: SHL
00001279: SUB
0000127a: AND
0000127b: PUSH1 0x01
0000127d: PUSH1 0x01
0000127f: PUSH1 0xa0
00001281: SHL
00001282: SUB
00001283: AND
00001284: PUSH4 0x3c81df21
00001289: PUSH1 0x40
0000128b: MLOAD
0000128c: DUP2
0000128d: PUSH4 0xffffffff
00001292: AND
00001293: PUSH1 0xe0
00001295: SHL
00001296: DUP2
00001297: MSTORE
00001298: PUSH1 0x04
0000129a: ADD
0000129b: PUSH1 0x20
0000129d: PUSH1 0x40
0000129f: MLOAD
000012a0: DUP1
000012a1: DUP4
000012a2: SUB
000012a3: DUP2
000012a4: DUP7
000012a5: GAS
000012a6: STATICCALL
000012a7: ISZERO
000012a8: DUP1
000012a9: ISZERO
000012aa: PUSH2 0x12b7
000012ad: JUMPI
000012ae: RETURNDATASIZE
000012af: PUSH1 0x00
000012b1: DUP1
000012b2: RETURNDATACOPY
000012b3: RETURNDATASIZE
000012b4: PUSH1 0x00
000012b6: REVERT
000012b7: JUMPDEST
000012b8: POP
000012b9: POP
000012ba: POP
000012bb: POP
000012bc: PUSH1 0x40
000012be: MLOAD
000012bf: RETURNDATASIZE
000012c0: PUSH1 0x1f
000012c2: NOT
000012c3: PUSH1 0x1f
000012c5: DUP3
000012c6: ADD
000012c7: AND
000012c8: DUP3
000012c9: ADD
000012ca: DUP1
000012cb: PUSH1 0x40
000012cd: MSTORE
000012ce: POP
000012cf: DUP2
000012d0: ADD
000012d1: SWAP1
000012d2: PUSH2 0x12db
000012d5: SWAP2
000012d6: SWAP1
000012d7: PUSH2 0x2fff
000012da: JUMP
000012db: JUMPDEST
000012dc: PUSH1 0x01
000012de: PUSH1 0x01
000012e0: PUSH1 0xa0
000012e2: SHL
000012e3: SUB
000012e4: AND
000012e5: CALLER
000012e6: PUSH1 0x01
000012e8: PUSH1 0x01
000012ea: PUSH1 0xa0
000012ec: SHL
000012ed: SUB
000012ee: AND
000012ef: EQ
000012f0: PUSH2 0x133b
000012f3: JUMPI
000012f4: PUSH1 0x40
000012f6: MLOAD
000012f7: PUSH3 0x461bcd
000012fb: PUSH1 0xe5
000012fd: SHL
000012fe: DUP2
000012ff: MSTORE
00001300: PUSH1 0x20
00001302: PUSH1 0x04
00001304: DUP3
00001305: ADD
00001306: MSTORE
00001307: PUSH1 0x11
00001309: PUSH1 0x24
0000130b: DUP3
0000130c: ADD
0000130d: MSTORE
0000130e: PUSH32 0x4d756c7469736967207265717569726564000000000000000000000000000000
0000132f: PUSH1 0x44
00001331: DUP3
00001332: ADD
00001333: MSTORE
00001334: PUSH1 0x64
00001336: ADD
00001337: PUSH2 0x01ac
0000133a: JUMP
0000133b: JUMPDEST
0000133c: PUSH1 0x98
0000133e: DUP1
0000133f: SLOAD
00001340: PUSH32 0xffffffffffffffffffffffff0000000000000000000000000000000000000000
00001361: AND
00001362: PUSH1 0x01
00001364: PUSH1 0x01
00001366: PUSH1 0xa0
00001368: SHL
00001369: SUB
0000136a: SWAP3
0000136b: SWAP1
0000136c: SWAP3
0000136d: AND
0000136e: SWAP2
0000136f: SWAP1
00001370: SWAP2
00001371: OR
00001372: SWAP1
00001373: SSTORE
00001374: JUMP
00001375: JUMPDEST
00001376: PUSH2 0x08b8
00001379: DUP4
0000137a: CALLER
0000137b: DUP5
0000137c: DUP5
0000137d: PUSH2 0x1f25
00001380: JUMP
00001381: JUMPDEST
00001382: PUSH1 0x97
00001384: PUSH1 0x01
00001386: SWAP1
00001387: SLOAD
00001388: SWAP1
00001389: PUSH2 0x0100
0000138c: EXP
0000138d: SWAP1
0000138e: DIV
0000138f: PUSH1 0x01
00001391: PUSH1 0x01
00001393: PUSH1 0xa0
00001395: SHL
00001396: SUB
00001397: AND
00001398: PUSH1 0x01
0000139a: PUSH1 0x01
0000139c: PUSH1 0xa0
0000139e: SHL
0000139f: SUB
000013a0: AND
000013a1: PUSH4 0x3c81df21
000013a6: PUSH1 0x40
000013a8: MLOAD
000013a9: DUP2
000013aa: PUSH4 0xffffffff
000013af: AND
000013b0: PUSH1 0xe0
000013b2: SHL
000013b3: DUP2
000013b4: MSTORE
000013b5: PUSH1 0x04
000013b7: ADD
000013b8: PUSH1 0x20
000013ba: PUSH1 0x40
000013bc: MLOAD
000013bd: DUP1
000013be: DUP4
000013bf: SUB
000013c0: DUP2
000013c1: DUP7
000013c2: GAS
000013c3: STATICCALL
000013c4: ISZERO
000013c5: DUP1
000013c6: ISZERO
000013c7: PUSH2 0x13d4
000013ca: JUMPI
000013cb: RETURNDATASIZE
000013cc: PUSH1 0x00
000013ce: DUP1
000013cf: RETURNDATACOPY
000013d0: RETURNDATASIZE
000013d1: PUSH1 0x00
000013d3: REVERT
000013d4: JUMPDEST
000013d5: POP
000013d6: POP
000013d7: POP
000013d8: POP
000013d9: PUSH1 0x40
000013db: MLOAD
000013dc: RETURNDATASIZE
000013dd: PUSH1 0x1f
000013df: NOT
000013e0: PUSH1 0x1f
000013e2: DUP3
000013e3: ADD
000013e4: AND
000013e5: DUP3
000013e6: ADD
000013e7: DUP1
000013e8: PUSH1 0x40
000013ea: MSTORE
000013eb: POP
000013ec: DUP2
000013ed: ADD
000013ee: SWAP1
000013ef: PUSH2 0x13f8
000013f2: SWAP2
000013f3: SWAP1
000013f4: PUSH2 0x2fff
000013f7: JUMP
000013f8: JUMPDEST
000013f9: PUSH1 0x01
000013fb: PUSH1 0x01
000013fd: PUSH1 0xa0
000013ff: SHL
00001400: SUB
00001401: AND
00001402: CALLER
00001403: PUSH1 0x01
00001405: PUSH1 0x01
00001407: PUSH1 0xa0
00001409: SHL
0000140a: SUB
0000140b: AND
0000140c: EQ
0000140d: PUSH2 0x1458
00001410: JUMPI
00001411: PUSH1 0x40
00001413: MLOAD
00001414: PUSH3 0x461bcd
00001418: PUSH1 0xe5
0000141a: SHL
0000141b: DUP2
0000141c: MSTORE
0000141d: PUSH1 0x20
0000141f: PUSH1 0x04
00001421: DUP3
00001422: ADD
00001423: MSTORE
00001424: PUSH1 0x11
00001426: PUSH1 0x24
00001428: DUP3
00001429: ADD
0000142a: MSTORE
0000142b: PUSH32 0x4d756c7469736967207265717569726564000000000000000000000000000000
0000144c: PUSH1 0x44
0000144e: DUP3
0000144f: ADD
00001450: MSTORE
00001451: PUSH1 0x64
00001453: ADD
00001454: PUSH2 0x01ac
00001457: JUMP
00001458: JUMPDEST
00001459: PUSH1 0x98
0000145b: SLOAD
0000145c: PUSH1 0x01
0000145e: PUSH1 0x01
00001460: PUSH1 0xa0
00001462: SHL
00001463: SUB
00001464: AND
00001465: PUSH2 0x14b0
00001468: JUMPI
00001469: PUSH1 0x40
0000146b: MLOAD
0000146c: PUSH3 0x461bcd
00001470: PUSH1 0xe5
00001472: SHL
00001473: DUP2
00001474: MSTORE
00001475: PUSH1 0x20
00001477: PUSH1 0x04
00001479: DUP3
0000147a: ADD
0000147b: MSTORE
0000147c: PUSH1 0x0f
0000147e: PUSH1 0x24
00001480: DUP3
00001481: ADD
00001482: MSTORE
00001483: PUSH32 0x496e76616c6964204c3220706169720000000000000000000000000000000000
000014a4: PUSH1 0x44
000014a6: DUP3
000014a7: ADD
000014a8: MSTORE
000014a9: PUSH1 0x64
000014ab: ADD
000014ac: PUSH2 0x01ac
000014af: JUMP
000014b0: JUMPDEST
000014b1: PUSH1 0x01
000014b3: PUSH1 0x01
000014b5: PUSH1 0xa0
000014b7: SHL
000014b8: SUB
000014b9: DUP2
000014ba: DUP2
000014bb: AND
000014bc: PUSH1 0x00
000014be: SWAP1
000014bf: DUP2
000014c0: MSTORE
000014c1: PUSH1 0x9a
000014c3: PUSH1 0x20
000014c5: MSTORE
000014c6: PUSH1 0x40
000014c8: SWAP1
000014c9: KECCAK256
000014ca: SLOAD
000014cb: AND
000014cc: ISZERO
000014cd: PUSH2 0x1518
000014d0: JUMPI
000014d1: PUSH1 0x40
000014d3: MLOAD
000014d4: PUSH3 0x461bcd
000014d8: PUSH1 0xe5
000014da: SHL
000014db: DUP2
000014dc: MSTORE
000014dd: PUSH1 0x20
000014df: PUSH1 0x04
000014e1: DUP3
000014e2: ADD
000014e3: MSTORE
000014e4: PUSH1 0x0e
000014e6: PUSH1 0x24
000014e8: DUP3
000014e9: ADD
000014ea: MSTORE
000014eb: PUSH32 0x416c7265616479206d6170706564000000000000000000000000000000000000
0000150c: PUSH1 0x44
0000150e: DUP3
0000150f: ADD
00001510: MSTORE
00001511: PUSH1 0x64
00001513: ADD
00001514: PUSH2 0x01ac
00001517: JUMP
00001518: JUMPDEST
00001519: PUSH1 0x60
0000151b: DUP2
0000151c: PUSH1 0x01
0000151e: PUSH1 0x01
00001520: PUSH1 0xa0
00001522: SHL
00001523: SUB
00001524: AND
00001525: PUSH4 0x06fdde03
0000152a: PUSH1 0x40
0000152c: MLOAD
0000152d: DUP2
0000152e: PUSH4 0xffffffff
00001533: AND
00001534: PUSH1 0xe0
00001536: SHL
00001537: DUP2
00001538: MSTORE
00001539: PUSH1 0x04
0000153b: ADD
0000153c: PUSH1 0x00
0000153e: PUSH1 0x40
00001540: MLOAD
00001541: DUP1
00001542: DUP4
00001543: SUB
00001544: DUP2
00001545: DUP7
00001546: GAS
00001547: STATICCALL
00001548: SWAP3
00001549: POP
0000154a: POP
0000154b: POP
0000154c: DUP1
0000154d: ISZERO
0000154e: PUSH2 0x1579
00001551: JUMPI
00001552: POP
00001553: PUSH1 0x40
00001555: MLOAD
00001556: RETURNDATASIZE
00001557: PUSH1 0x00
00001559: DUP3
0000155a: RETURNDATACOPY
0000155b: PUSH1 0x1f
0000155d: RETURNDATASIZE
0000155e: SWAP1
0000155f: DUP2
00001560: ADD
00001561: PUSH1 0x1f
00001563: NOT
00001564: AND
00001565: DUP3
00001566: ADD
00001567: PUSH1 0x40
00001569: MSTORE
0000156a: PUSH2 0x1576
0000156d: SWAP2
0000156e: SWAP1
0000156f: DUP2
00001570: ADD
00001571: SWAP1
00001572: PUSH2 0x30b2
00001575: JUMP
00001576: JUMPDEST
00001577: PUSH1 0x01
00001579: JUMPDEST
0000157a: ISZERO
0000157b: PUSH2 0x1581
0000157e: JUMPI
0000157f: SWAP1
00001580: POP
00001581: JUMPDEST
00001582: PUSH1 0x60
00001584: DUP3
00001585: PUSH1 0x01
00001587: PUSH1 0x01
00001589: PUSH1 0xa0
0000158b: SHL
0000158c: SUB
0000158d: AND
0000158e: PUSH4 0x95d89b41
00001593: PUSH1 0x40
00001595: MLOAD
00001596: DUP2
00001597: PUSH4 0xffffffff
0000159c: AND
0000159d: PUSH1 0xe0
0000159f: SHL
000015a0: DUP2
000015a1: MSTORE
000015a2: PUSH1 0x04
000015a4: ADD
000015a5: PUSH1 0x00
000015a7: PUSH1 0x40
000015a9: MLOAD
000015aa: DUP1
000015ab: DUP4
000015ac: SUB
000015ad: DUP2
000015ae: DUP7
000015af: GAS
000015b0: STATICCALL
000015b1: SWAP3
000015b2: POP
000015b3: POP
000015b4: POP
000015b5: DUP1
000015b6: ISZERO
000015b7: PUSH2 0x15e2
000015ba: JUMPI
000015bb: POP
000015bc: PUSH1 0x40
000015be: MLOAD
000015bf: RETURNDATASIZE
000015c0: PUSH1 0x00
000015c2: DUP3
000015c3: RETURNDATACOPY
000015c4: PUSH1 0x1f
000015c6: RETURNDATASIZE
000015c7: SWAP1
000015c8: DUP2
000015c9: ADD
000015ca: PUSH1 0x1f
000015cc: NOT
000015cd: AND
000015ce: DUP3
000015cf: ADD
000015d0: PUSH1 0x40
000015d2: MSTORE
000015d3: PUSH2 0x15df
000015d6: SWAP2
000015d7: SWAP1
000015d8: DUP2
000015d9: ADD
000015da: SWAP1
000015db: PUSH2 0x30b2
000015de: JUMP
000015df: JUMPDEST
000015e0: PUSH1 0x01
000015e2: JUMPDEST
000015e3: ISZERO
000015e4: PUSH2 0x15ea
000015e7: JUMPI
000015e8: SWAP1
000015e9: POP
000015ea: JUMPDEST
000015eb: PUSH1 0x00
000015ed: DUP4
000015ee: PUSH1 0x01
000015f0: PUSH1 0x01
000015f2: PUSH1 0xa0
000015f4: SHL
000015f5: SUB
000015f6: AND
000015f7: PUSH4 0x313ce567
000015fc: PUSH1 0x40
000015fe: MLOAD
000015ff: DUP2
00001600: PUSH4 0xffffffff
00001605: AND
00001606: PUSH1 0xe0
00001608: SHL
00001609: DUP2
0000160a: MSTORE
0000160b: PUSH1 0x04
0000160d: ADD
0000160e: PUSH1 0x20
00001610: PUSH1 0x40
00001612: MLOAD
00001613: DUP1
00001614: DUP4
00001615: SUB
00001616: DUP2
00001617: DUP7
00001618: GAS
00001619: STATICCALL
0000161a: ISZERO
0000161b: DUP1
0000161c: ISZERO
0000161d: PUSH2 0x162a
00001620: JUMPI
00001621: RETURNDATASIZE
00001622: PUSH1 0x00
00001624: DUP1
00001625: RETURNDATACOPY
00001626: RETURNDATASIZE
00001627: PUSH1 0x00
00001629: REVERT
0000162a: JUMPDEST
0000162b: POP
0000162c: POP
0000162d: POP
0000162e: POP
0000162f: PUSH1 0x40
00001631: MLOAD
00001632: RETURNDATASIZE
00001633: PUSH1 0x1f
00001635: NOT
00001636: PUSH1 0x1f
00001638: DUP3
00001639: ADD
0000163a: AND
0000163b: DUP3
0000163c: ADD
0000163d: DUP1
0000163e: PUSH1 0x40
00001640: MSTORE
00001641: POP
00001642: DUP2
00001643: ADD
00001644: SWAP1
00001645: PUSH2 0x164e
00001648: SWAP2
00001649: SWAP1
0000164a: PUSH2 0x3120
0000164d: JUMP
0000164e: JUMPDEST
0000164f: PUSH1 0x40
00001651: MLOAD
00001652: PUSH32 0xffffffffffffffffffffffffffffffffffffffff000000000000000000000000
00001673: PUSH1 0x60
00001675: DUP8
00001676: SWAP1
00001677: SHL
00001678: AND
00001679: PUSH1 0x20
0000167b: DUP3
0000167c: ADD
0000167d: MSTORE
0000167e: SWAP1
0000167f: SWAP2
00001680: POP
00001681: PUSH1 0x00
00001683: SWAP1
00001684: PUSH1 0x34
00001686: ADD
00001687: PUSH1 0x40
00001689: DUP1
0000168a: MLOAD
0000168b: PUSH1 0x1f
0000168d: NOT
0000168e: DUP2
0000168f: DUP5
00001690: SUB
00001691: ADD
00001692: DUP2
00001693: MSTORE
00001694: SWAP2
00001695: SWAP1
00001696: MSTORE
00001697: DUP1
00001698: MLOAD
00001699: PUSH1 0x20
0000169b: SWAP1
0000169c: SWAP2
0000169d: ADD
0000169e: KECCAK256
0000169f: PUSH1 0x99
000016a1: SLOAD
000016a2: PUSH1 0x98
000016a4: SLOAD
000016a5: SWAP2
000016a6: SWAP3
000016a7: POP
000016a8: PUSH1 0x00
000016aa: SWAP2
000016ab: PUSH2 0x16be
000016ae: SWAP2
000016af: DUP5
000016b0: SWAP2
000016b1: PUSH1 0x01
000016b3: PUSH1 0x01
000016b5: PUSH1 0xa0
000016b7: SHL
000016b8: SUB
000016b9: AND
000016ba: PUSH2 0x224a
000016bd: JUMP
000016be: JUMPDEST
000016bf: PUSH1 0x01
000016c1: PUSH1 0x01
000016c3: PUSH1 0xa0
000016c5: SHL
000016c6: SUB
000016c7: DUP8
000016c8: DUP2
000016c9: AND
000016ca: PUSH1 0x00
000016cc: SWAP1
000016cd: DUP2
000016ce: MSTORE
000016cf: PUSH1 0x9a
000016d1: PUSH1 0x20
000016d3: SWAP1
000016d4: DUP2
000016d5: MSTORE
000016d6: PUSH1 0x40
000016d8: DUP1
000016d9: DUP4
000016da: KECCAK256
000016db: DUP1
000016dc: SLOAD
000016dd: PUSH32 0xffffffffffffffffffffffff0000000000000000000000000000000000000000
000016fe: AND
000016ff: SWAP5
00001700: DUP7
00001701: AND
00001702: SWAP5
00001703: SWAP1
00001704: SWAP5
00001705: OR
00001706: SWAP1
00001707: SWAP4
00001708: SSTORE
00001709: CALLER
0000170a: DUP1
0000170b: DUP4
0000170c: MSTORE
0000170d: PUSH1 0x9b
0000170f: DUP3
00001710: MSTORE
00001711: SWAP2
00001712: DUP4
00001713: SWAP1
00001714: KECCAK256
00001715: SLOAD
00001716: SWAP3
00001717: MLOAD
00001718: SWAP4
00001719: SWAP5
0000171a: POP
0000171b: PUSH32 0x1f6a77d013b627d23667409a96b7a68bff41621fe44b53ffc26b3b8da24fdb2f
0000173c: SWAP4
0000173d: PUSH2 0x174f
00001740: SWAP4
00001741: SWAP2
00001742: DUP12
00001743: SWAP2
00001744: DUP12
00001745: SWAP2
00001746: DUP12
00001747: SWAP2
00001748: DUP12
00001749: SWAP2
0000174a: ADD
0000174b: PUSH2 0x316f
0000174e: JUMP
0000174f: JUMPDEST
00001750: PUSH1 0x40
00001752: DUP1
00001753: MLOAD
00001754: PUSH1 0x1f
00001756: NOT
00001757: DUP2
00001758: DUP5
00001759: SUB
0000175a: ADD
0000175b: DUP2
0000175c: MSTORE
0000175d: SWAP1
0000175e: DUP3
0000175f: SWAP1
00001760: MSTORE
00001761: PUSH2 0x1769
00001764: SWAP2
00001765: PUSH2 0x31ca
00001768: JUMP
00001769: JUMPDEST
0000176a: PUSH1 0x40
0000176c: MLOAD
0000176d: DUP1
0000176e: SWAP2
0000176f: SUB
00001770: SWAP1
00001771: LOG1
00001772: CALLER
00001773: PUSH1 0x00
00001775: SWAP1
00001776: DUP2
00001777: MSTORE
00001778: PUSH1 0x9b
0000177a: PUSH1 0x20
0000177c: MSTORE
0000177d: PUSH1 0x40
0000177f: DUP2
00001780: KECCAK256
00001781: DUP1
00001782: SLOAD
00001783: SWAP2
00001784: PUSH2 0x178c
00001787: DUP4
00001788: PUSH2 0x307a
0000178b: JUMP
0000178c: JUMPDEST
0000178d: SWAP2
0000178e: SWAP1
0000178f: POP
00001790: SSTORE
00001791: POP
00001792: POP
00001793: POP
00001794: POP
00001795: POP
00001796: POP
00001797: POP
00001798: JUMP
00001799: JUMPDEST
0000179a: PUSH1 0x02
0000179c: PUSH1 0x65
0000179e: SLOAD
0000179f: SUB
000017a0: PUSH2 0x17eb
000017a3: JUMPI
000017a4: PUSH1 0x40
000017a6: MLOAD
000017a7: PUSH3 0x461bcd
000017ab: PUSH1 0xe5
000017ad: SHL
000017ae: DUP2
000017af: MSTORE
000017b0: PUSH1 0x20
000017b2: PUSH1 0x04
000017b4: DUP3
000017b5: ADD
000017b6: MSTORE
000017b7: PUSH1 0x1f
000017b9: PUSH1 0x24
000017bb: DUP3
000017bc: ADD
000017bd: MSTORE
000017be: PUSH32 0x5265656e7472616e637947756172643a207265656e7472616e742063616c6c00
000017df: PUSH1 0x44
000017e1: DUP3
000017e2: ADD
000017e3: MSTORE
000017e4: PUSH1 0x64
000017e6: ADD
000017e7: PUSH2 0x01ac
000017ea: JUMP
000017eb: JUMPDEST
000017ec: PUSH1 0x02
000017ee: PUSH1 0x65
000017f0: SSTORE
000017f1: JUMP
000017f2: JUMPDEST
000017f3: PUSH1 0x00
000017f5: DUP1
000017f6: JUMPDEST
000017f7: DUP6
000017f8: MLOAD
000017f9: DUP2
000017fa: LT
000017fb: ISZERO
000017fc: PUSH2 0x1b7e
000017ff: JUMPI
00001800: PUSH1 0x00
00001802: PUSH2 0x187b
00001805: DUP7
00001806: DUP4
00001807: DUP2
00001808: MLOAD
00001809: DUP2
0000180a: LT
0000180b: PUSH2 0x1816
0000180e: JUMPI
0000180f: PUSH2 0x1816
00001812: PUSH2 0x301c
00001815: JUMP
00001816: JUMPDEST
00001817: PUSH1 0x20
00001819: MUL
0000181a: PUSH1 0x20
0000181c: ADD
0000181d: ADD
0000181e: MLOAD
0000181f: PUSH2 0x1875
00001822: DUP8
00001823: PUSH1 0x40
00001825: MLOAD
00001826: PUSH32 0x19457468657265756d205369676e6564204d6573736167653a0a333200000000
00001847: PUSH1 0x20
00001849: DUP3
0000184a: ADD
0000184b: MSTORE
0000184c: PUSH1 0x3c
0000184e: DUP2
0000184f: ADD
00001850: DUP3
00001851: SWAP1
00001852: MSTORE
00001853: PUSH1 0x00
00001855: SWAP1
00001856: PUSH1 0x5c
00001858: ADD
00001859: PUSH1 0x40
0000185b: MLOAD
0000185c: PUSH1 0x20
0000185e: DUP2
0000185f: DUP4
00001860: SUB
00001861: SUB
00001862: DUP2
00001863: MSTORE
00001864: SWAP1
00001865: PUSH1 0x40
00001867: MSTORE
00001868: DUP1
00001869: MLOAD
0000186a: SWAP1
0000186b: PUSH1 0x20
0000186d: ADD
0000186e: KECCAK256
0000186f: SWAP1
00001870: POP
00001871: SWAP2
00001872: SWAP1
00001873: POP
00001874: JUMP
00001875: JUMPDEST
00001876: SWAP1
00001877: PUSH2 0x2274
0000187a: JUMP
0000187b: JUMPDEST
0000187c: SWAP1
0000187d: POP
0000187e: DUP7
0000187f: DUP3
00001880: DUP2
00001881: MLOAD
00001882: DUP2
00001883: LT
00001884: PUSH2 0x188f
00001887: JUMPI
00001888: PUSH2 0x188f
0000188b: PUSH2 0x301c
0000188e: JUMP
0000188f: JUMPDEST
00001890: PUSH1 0x20
00001892: MUL
00001893: PUSH1 0x20
00001895: ADD
00001896: ADD
00001897: MLOAD
00001898: PUSH1 0x01
0000189a: PUSH1 0x01
0000189c: PUSH1 0xa0
0000189e: SHL
0000189f: SUB
000018a0: AND
000018a1: DUP2
000018a2: PUSH1 0x01
000018a4: PUSH1 0x01
000018a6: PUSH1 0xa0
000018a8: SHL
000018a9: SUB
000018aa: AND
000018ab: EQ
000018ac: PUSH2 0x191d
000018af: JUMPI
000018b0: PUSH1 0x40
000018b2: MLOAD
000018b3: PUSH3 0x461bcd
000018b7: PUSH1 0xe5
000018b9: SHL
000018ba: DUP2
000018bb: MSTORE
000018bc: PUSH1 0x20
000018be: PUSH1 0x04
000018c0: DUP3
000018c1: ADD
000018c2: MSTORE
000018c3: PUSH1 0x23
000018c5: PUSH1 0x24
000018c7: DUP3
000018c8: ADD
000018c9: MSTORE
000018ca: PUSH32 0x56616c696461746f72207369676e617475726520646f6573206e6f74206d6174
000018eb: PUSH1 0x44
000018ed: DUP3
000018ee: ADD
000018ef: MSTORE
000018f0: PUSH32 0x63682e0000000000000000000000000000000000000000000000000000000000
00001911: PUSH1 0x64
00001913: DUP3
00001914: ADD
00001915: MSTORE
00001916: PUSH1 0x84
00001918: ADD
00001919: PUSH2 0x01ac
0000191c: JUMP
0000191d: JUMPDEST
0000191e: PUSH1 0x97
00001920: SLOAD
00001921: PUSH1 0x40
00001923: MLOAD
00001924: PUSH32 0x2a2e5e4200000000000000000000000000000000000000000000000000000000
00001945: DUP2
00001946: MSTORE
00001947: PUSH1 0x01
00001949: PUSH1 0x01
0000194b: PUSH1 0xa0
0000194d: SHL
0000194e: SUB
0000194f: DUP4
00001950: DUP2
00001951: AND
00001952: PUSH1 0x04
00001954: DUP4
00001955: ADD
00001956: MSTORE
00001957: PUSH2 0x0100
0000195a: SWAP1
0000195b: SWAP3
0000195c: DIV
0000195d: SWAP1
0000195e: SWAP2
0000195f: AND
00001960: SWAP1
00001961: PUSH4 0x2a2e5e42
00001966: SWAP1
00001967: PUSH1 0x24
00001969: ADD
0000196a: PUSH1 0x20
0000196c: PUSH1 0x40
0000196e: MLOAD
0000196f: DUP1
00001970: DUP4
00001971: SUB
00001972: DUP2
00001973: DUP7
00001974: GAS
00001975: STATICCALL
00001976: ISZERO
00001977: DUP1
00001978: ISZERO
00001979: PUSH2 0x1986
0000197c: JUMPI
0000197d: RETURNDATASIZE
0000197e: PUSH1 0x00
00001980: DUP1
00001981: RETURNDATACOPY
00001982: RETURNDATASIZE
00001983: PUSH1 0x00
00001985: REVERT
00001986: JUMPDEST
00001987: POP
00001988: POP
00001989: POP
0000198a: POP
0000198b: PUSH1 0x40
0000198d: MLOAD
0000198e: RETURNDATASIZE
0000198f: PUSH1 0x1f
00001991: NOT
00001992: PUSH1 0x1f
00001994: DUP3
00001995: ADD
00001996: AND
00001997: DUP3
00001998: ADD
00001999: DUP1
0000199a: PUSH1 0x40
0000199c: MSTORE
0000199d: POP
0000199e: DUP2
0000199f: ADD
000019a0: SWAP1
000019a1: PUSH2 0x19aa
000019a4: SWAP2
000019a5: SWAP1
000019a6: PUSH2 0x31dd
000019a9: JUMP
000019aa: JUMPDEST
000019ab: PUSH2 0x19f6
000019ae: JUMPI
000019af: PUSH1 0x40
000019b1: MLOAD
000019b2: PUSH3 0x461bcd
000019b6: PUSH1 0xe5
000019b8: SHL
000019b9: DUP2
000019ba: MSTORE
000019bb: PUSH1 0x20
000019bd: PUSH1 0x04
000019bf: DUP3
000019c0: ADD
000019c1: MSTORE
000019c2: PUSH1 0x11
000019c4: PUSH1 0x24
000019c6: DUP3
000019c7: ADD
000019c8: MSTORE
000019c9: PUSH32 0x496e76616c69642076616c696461746f72000000000000000000000000000000
000019ea: PUSH1 0x44
000019ec: DUP3
000019ed: ADD
000019ee: MSTORE
000019ef: PUSH1 0x64
000019f1: ADD
000019f2: PUSH2 0x01ac
000019f5: JUMP
000019f6: JUMPDEST
000019f7: PUSH1 0x01
000019f9: PUSH1 0x01
000019fb: PUSH1 0xa0
000019fd: SHL
000019fe: SUB
000019ff: DUP1
00001a00: DUP11
00001a01: AND
00001a02: PUSH1 0x00
00001a04: SWAP1
00001a05: DUP2
00001a06: MSTORE
00001a07: PUSH1 0x9d
00001a09: PUSH1 0x20
00001a0b: SWAP1
00001a0c: DUP2
00001a0d: MSTORE
00001a0e: PUSH1 0x40
00001a10: DUP1
00001a11: DUP4
00001a12: KECCAK256
00001a13: DUP13
00001a14: DUP5
00001a15: MSTORE
00001a16: DUP3
00001a17: MSTORE
00001a18: DUP1
00001a19: DUP4
00001a1a: KECCAK256
00001a1b: SWAP4
00001a1c: DUP6
00001a1d: AND
00001a1e: DUP4
00001a1f: MSTORE
00001a20: SWAP3
00001a21: SWAP1
00001a22: MSTORE
00001a23: KECCAK256
00001a24: SLOAD
00001a25: PUSH1 0xff
00001a27: AND
00001a28: ISZERO
00001a29: PUSH2 0x1a74
00001a2c: JUMPI
00001a2d: PUSH1 0x40
00001a2f: MLOAD
00001a30: PUSH3 0x461bcd
00001a34: PUSH1 0xe5
00001a36: SHL
00001a37: DUP2
00001a38: MSTORE
00001a39: PUSH1 0x20
00001a3b: PUSH1 0x04
00001a3d: DUP3
00001a3e: ADD
00001a3f: MSTORE
00001a40: PUSH1 0x16
00001a42: PUSH1 0x24
00001a44: DUP3
00001a45: ADD
00001a46: MSTORE
00001a47: PUSH32 0x4e6f206475706c69636174652076616c696461746f7200000000000000000000
00001a68: PUSH1 0x44
00001a6a: DUP3
00001a6b: ADD
00001a6c: MSTORE
00001a6d: PUSH1 0x64
00001a6f: ADD
00001a70: PUSH2 0x01ac
00001a73: JUMP
00001a74: JUMPDEST
00001a75: PUSH1 0x01
00001a77: PUSH1 0x01
00001a79: PUSH1 0xa0
00001a7b: SHL
00001a7c: SUB
00001a7d: DUP10
00001a7e: DUP2
00001a7f: AND
00001a80: PUSH1 0x00
00001a82: SWAP1
00001a83: DUP2
00001a84: MSTORE
00001a85: PUSH1 0x9d
00001a87: PUSH1 0x20
00001a89: SWAP1
00001a8a: DUP2
00001a8b: MSTORE
00001a8c: PUSH1 0x40
00001a8e: DUP1
00001a8f: DUP4
00001a90: KECCAK256
00001a91: DUP13
00001a92: DUP5
00001a93: MSTORE
00001a94: DUP3
00001a95: MSTORE
00001a96: DUP1
00001a97: DUP4
00001a98: KECCAK256
00001a99: DUP6
00001a9a: DUP6
00001a9b: AND
00001a9c: DUP1
00001a9d: DUP6
00001a9e: MSTORE
00001a9f: SWAP3
00001aa0: MSTORE
00001aa1: SWAP2
00001aa2: DUP3
00001aa3: SWAP1
00001aa4: KECCAK256
00001aa5: DUP1
00001aa6: SLOAD
00001aa7: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
00001ac8: AND
00001ac9: PUSH1 0x01
00001acb: OR
00001acc: SWAP1
00001acd: SSTORE
00001ace: PUSH1 0x97
00001ad0: SLOAD
00001ad1: SWAP2
00001ad2: MLOAD
00001ad3: PUSH32 0x5dd9147c00000000000000000000000000000000000000000000000000000000
00001af4: DUP2
00001af5: MSTORE
00001af6: PUSH1 0x04
00001af8: DUP2
00001af9: ADD
00001afa: SWAP2
00001afb: SWAP1
00001afc: SWAP2
00001afd: MSTORE
00001afe: PUSH2 0x0100
00001b01: SWAP1
00001b02: SWAP2
00001b03: DIV
00001b04: SWAP1
00001b05: SWAP2
00001b06: AND
00001b07: SWAP1
00001b08: PUSH4 0x5dd9147c
00001b0d: SWAP1
00001b0e: PUSH1 0x24
00001b10: ADD
00001b11: PUSH1 0x20
00001b13: PUSH1 0x40
00001b15: MLOAD
00001b16: DUP1
00001b17: DUP4
00001b18: SUB
00001b19: DUP2
00001b1a: DUP7
00001b1b: GAS
00001b1c: STATICCALL
00001b1d: ISZERO
00001b1e: DUP1
00001b1f: ISZERO
00001b20: PUSH2 0x1b2d
00001b23: JUMPI
00001b24: RETURNDATASIZE
00001b25: PUSH1 0x00
00001b27: DUP1
00001b28: RETURNDATACOPY
00001b29: RETURNDATASIZE
00001b2a: PUSH1 0x00
00001b2c: REVERT
00001b2d: JUMPDEST
00001b2e: POP
00001b2f: POP
00001b30: POP
00001b31: POP
00001b32: PUSH1 0x40
00001b34: MLOAD
00001b35: RETURNDATASIZE
00001b36: PUSH1 0x1f
00001b38: NOT
00001b39: PUSH1 0x1f
00001b3b: DUP3
00001b3c: ADD
00001b3d: AND
00001b3e: DUP3
00001b3f: ADD
00001b40: DUP1
00001b41: PUSH1 0x40
00001b43: MSTORE
00001b44: POP
00001b45: DUP2
00001b46: ADD
00001b47: SWAP1
00001b48: PUSH2 0x1b51
00001b4b: SWAP2
00001b4c: SWAP1
00001b4d: PUSH2 0x2fe6
00001b50: JUMP
00001b51: JUMPDEST
00001b52: PUSH2 0x1b5b
00001b55: SWAP1
00001b56: DUP5
00001b57: PUSH2 0x31fa
00001b5a: JUMP
00001b5b: JUMPDEST
00001b5c: SWAP3
00001b5d: POP
00001b5e: DUP4
00001b5f: DUP4
00001b60: GT
00001b61: ISZERO
00001b62: PUSH2 0x1b6b
00001b65: JUMPI
00001b66: POP
00001b67: PUSH2 0x1b7e
00001b6a: JUMP
00001b6b: JUMPDEST
00001b6c: POP
00001b6d: DUP1
00001b6e: PUSH2 0x1b76
00001b71: DUP2
00001b72: PUSH2 0x307a
00001b75: JUMP
00001b76: JUMPDEST
00001b77: SWAP2
00001b78: POP
00001b79: POP
00001b7a: PUSH2 0x17f6
00001b7d: JUMP
00001b7e: JUMPDEST
00001b7f: POP
00001b80: DUP2
00001b81: DUP2
00001b82: LT
00001b83: ISZERO
00001b84: PUSH2 0x1bf5
00001b87: JUMPI
00001b88: PUSH1 0x40
00001b8a: MLOAD
00001b8b: PUSH3 0x461bcd
00001b8f: PUSH1 0xe5
00001b91: SHL
00001b92: DUP2
00001b93: MSTORE
00001b94: PUSH1 0x20
00001b96: PUSH1 0x04
00001b98: DUP3
00001b99: ADD
00001b9a: MSTORE
00001b9b: PUSH1 0x3c
00001b9d: PUSH1 0x24
00001b9f: DUP3
00001ba0: ADD
00001ba1: MSTORE
00001ba2: PUSH32 0x5375626d69747465642076616c696461746f7220736574207369676e61747572
00001bc3: PUSH1 0x44
00001bc5: DUP3
00001bc6: ADD
00001bc7: MSTORE
00001bc8: PUSH32 0x657320646f206e6f74206861766520656e6f75676820706f7765722e00000000
00001be9: PUSH1 0x64
00001beb: DUP3
00001bec: ADD
00001bed: MSTORE
00001bee: PUSH1 0x84
00001bf0: ADD
00001bf1: PUSH2 0x01ac
00001bf4: JUMP
00001bf5: JUMPDEST
00001bf6: POP
00001bf7: POP
00001bf8: POP
00001bf9: POP
00001bfa: POP
00001bfb: POP
00001bfc: POP
00001bfd: JUMP
00001bfe: JUMPDEST
00001bff: PUSH1 0x40
00001c01: MLOAD
00001c02: PUSH1 0x01
00001c04: PUSH1 0x01
00001c06: PUSH1 0xa0
00001c08: SHL
00001c09: SUB
00001c0a: DUP4
00001c0b: AND
00001c0c: PUSH1 0x24
00001c0e: DUP3
00001c0f: ADD
00001c10: MSTORE
00001c11: PUSH1 0x44
00001c13: DUP2
00001c14: ADD
00001c15: DUP3
00001c16: SWAP1
00001c17: MSTORE
00001c18: PUSH2 0x08b8
00001c1b: SWAP1
00001c1c: DUP5
00001c1d: SWAP1
00001c1e: PUSH32 0xa9059cbb00000000000000000000000000000000000000000000000000000000
00001c3f: SWAP1
00001c40: PUSH1 0x64
00001c42: ADD
00001c43: JUMPDEST
00001c44: PUSH1 0x40
00001c46: DUP1
00001c47: MLOAD
00001c48: PUSH1 0x1f
00001c4a: NOT
00001c4b: DUP2
00001c4c: DUP5
00001c4d: SUB
00001c4e: ADD
00001c4f: DUP2
00001c50: MSTORE
00001c51: SWAP2
00001c52: SWAP1
00001c53: MSTORE
00001c54: PUSH1 0x20
00001c56: DUP2
00001c57: ADD
00001c58: DUP1
00001c59: MLOAD
00001c5a: PUSH28 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff
00001c77: AND
00001c78: PUSH32 0xffffffff00000000000000000000000000000000000000000000000000000000
00001c99: SWAP1
00001c9a: SWAP4
00001c9b: AND
00001c9c: SWAP3
00001c9d: SWAP1
00001c9e: SWAP3
00001c9f: OR
00001ca0: SWAP1
00001ca1: SWAP2
00001ca2: MSTORE
00001ca3: PUSH2 0x229a
00001ca6: JUMP
00001ca7: JUMPDEST
00001ca8: PUSH1 0x01
00001caa: PUSH1 0x65
00001cac: SSTORE
00001cad: JUMP
00001cae: JUMPDEST
00001caf: PUSH1 0x97
00001cb1: PUSH1 0x01
00001cb3: SWAP1
00001cb4: SLOAD
00001cb5: SWAP1
00001cb6: PUSH2 0x0100
00001cb9: EXP
00001cba: SWAP1
00001cbb: DIV
00001cbc: PUSH1 0x01
00001cbe: PUSH1 0x01
00001cc0: PUSH1 0xa0
00001cc2: SHL
00001cc3: SUB
00001cc4: AND
00001cc5: PUSH1 0x01
00001cc7: PUSH1 0x01
00001cc9: PUSH1 0xa0
00001ccb: SHL
00001ccc: SUB
00001ccd: AND
00001cce: PUSH4 0x3c81df21
00001cd3: PUSH1 0x40
00001cd5: MLOAD
00001cd6: DUP2
00001cd7: PUSH4 0xffffffff
00001cdc: AND
00001cdd: PUSH1 0xe0
00001cdf: SHL
00001ce0: DUP2
00001ce1: MSTORE
00001ce2: PUSH1 0x04
00001ce4: ADD
00001ce5: PUSH1 0x20
00001ce7: PUSH1 0x40
00001ce9: MLOAD
00001cea: DUP1
00001ceb: DUP4
00001cec: SUB
00001ced: DUP2
00001cee: DUP7
00001cef: GAS
00001cf0: STATICCALL
00001cf1: ISZERO
00001cf2: DUP1
00001cf3: ISZERO
00001cf4: PUSH2 0x1d01
00001cf7: JUMPI
00001cf8: RETURNDATASIZE
00001cf9: PUSH1 0x00
00001cfb: DUP1
00001cfc: RETURNDATACOPY
00001cfd: RETURNDATASIZE
00001cfe: PUSH1 0x00
00001d00: REVERT
00001d01: JUMPDEST
00001d02: POP
00001d03: POP
00001d04: POP
00001d05: POP
00001d06: PUSH1 0x40
00001d08: MLOAD
00001d09: RETURNDATASIZE
00001d0a: PUSH1 0x1f
00001d0c: NOT
00001d0d: PUSH1 0x1f
00001d0f: DUP3
00001d10: ADD
00001d11: AND
00001d12: DUP3
00001d13: ADD
00001d14: DUP1
00001d15: PUSH1 0x40
00001d17: MSTORE
00001d18: POP
00001d19: DUP2
00001d1a: ADD
00001d1b: SWAP1
00001d1c: PUSH2 0x1d25
00001d1f: SWAP2
00001d20: SWAP1
00001d21: PUSH2 0x2fff
00001d24: JUMP
00001d25: JUMPDEST
00001d26: PUSH1 0x01
00001d28: PUSH1 0x01
00001d2a: PUSH1 0xa0
00001d2c: SHL
00001d2d: SUB
00001d2e: AND
00001d2f: CALLER
00001d30: PUSH1 0x01
00001d32: PUSH1 0x01
00001d34: PUSH1 0xa0
00001d36: SHL
00001d37: SUB
00001d38: AND
00001d39: EQ
00001d3a: PUSH2 0x0b33
00001d3d: JUMPI
00001d3e: PUSH1 0x40
00001d40: MLOAD
00001d41: PUSH3 0x461bcd
00001d45: PUSH1 0xe5
00001d47: SHL
00001d48: DUP2
00001d49: MSTORE
00001d4a: PUSH1 0x20
00001d4c: PUSH1 0x04
00001d4e: DUP3
00001d4f: ADD
00001d50: MSTORE
00001d51: PUSH1 0x11
00001d53: PUSH1 0x24
00001d55: DUP3
00001d56: ADD
00001d57: MSTORE
00001d58: PUSH32 0x4d756c7469736967207265717569726564000000000000000000000000000000
00001d79: PUSH1 0x44
00001d7b: DUP3
00001d7c: ADD
00001d7d: MSTORE
00001d7e: PUSH1 0x64
00001d80: ADD
00001d81: PUSH2 0x01ac
00001d84: JUMP
00001d85: JUMPDEST
00001d86: PUSH32 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143
00001da7: SLOAD
00001da8: PUSH1 0xff
00001daa: AND
00001dab: ISZERO
00001dac: PUSH2 0x1db8
00001daf: JUMPI
00001db0: PUSH2 0x08b8
00001db3: DUP4
00001db4: PUSH2 0x237f
00001db7: JUMP
00001db8: JUMPDEST
00001db9: DUP3
00001dba: PUSH1 0x01
00001dbc: PUSH1 0x01
00001dbe: PUSH1 0xa0
00001dc0: SHL
00001dc1: SUB
00001dc2: AND
00001dc3: PUSH4 0x52d1902d
00001dc8: PUSH1 0x40
00001dca: MLOAD
00001dcb: DUP2
00001dcc: PUSH4 0xffffffff
00001dd1: AND
00001dd2: PUSH1 0xe0
00001dd4: SHL
00001dd5: DUP2
00001dd6: MSTORE
00001dd7: PUSH1 0x04
00001dd9: ADD
00001dda: PUSH1 0x20
00001ddc: PUSH1 0x40
00001dde: MLOAD
00001ddf: DUP1
00001de0: DUP4
00001de1: SUB
00001de2: DUP2
00001de3: DUP7
00001de4: GAS
00001de5: STATICCALL
00001de6: SWAP3
00001de7: POP
00001de8: POP
00001de9: POP
00001dea: DUP1
00001deb: ISZERO
00001dec: PUSH2 0x1e12
00001def: JUMPI
00001df0: POP
00001df1: PUSH1 0x40
00001df3: DUP1
00001df4: MLOAD
00001df5: PUSH1 0x1f
00001df7: RETURNDATASIZE
00001df8: SWAP1
00001df9: DUP2
00001dfa: ADD
00001dfb: PUSH1 0x1f
00001dfd: NOT
00001dfe: AND
00001dff: DUP3
00001e00: ADD
00001e01: SWAP1
00001e02: SWAP3
00001e03: MSTORE
00001e04: PUSH2 0x1e0f
00001e07: SWAP2
00001e08: DUP2
00001e09: ADD
00001e0a: SWAP1
00001e0b: PUSH2 0x2fe6
00001e0e: JUMP
00001e0f: JUMPDEST
00001e10: PUSH1 0x01
00001e12: JUMPDEST
00001e13: PUSH2 0x1e84
00001e16: JUMPI
00001e17: PUSH1 0x40
00001e19: MLOAD
00001e1a: PUSH3 0x461bcd
00001e1e: PUSH1 0xe5
00001e20: SHL
00001e21: DUP2
00001e22: MSTORE
00001e23: PUSH1 0x20
00001e25: PUSH1 0x04
00001e27: DUP3
00001e28: ADD
00001e29: MSTORE
00001e2a: PUSH1 0x2e
00001e2c: PUSH1 0x24
00001e2e: DUP3
00001e2f: ADD
00001e30: MSTORE
00001e31: PUSH32 0x45524331393637557067726164653a206e657720696d706c656d656e74617469
00001e52: PUSH1 0x44
00001e54: DUP3
00001e55: ADD
00001e56: MSTORE
00001e57: PUSH32 0x6f6e206973206e6f742055555053000000000000000000000000000000000000
00001e78: PUSH1 0x64
00001e7a: DUP3
00001e7b: ADD
00001e7c: MSTORE
00001e7d: PUSH1 0x84
00001e7f: ADD
00001e80: PUSH2 0x01ac
00001e83: JUMP
00001e84: JUMPDEST
00001e85: PUSH32 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc
00001ea6: DUP2
00001ea7: EQ
00001ea8: PUSH2 0x1f19
00001eab: JUMPI
00001eac: PUSH1 0x40
00001eae: MLOAD
00001eaf: PUSH3 0x461bcd
00001eb3: PUSH1 0xe5
00001eb5: SHL
00001eb6: DUP2
00001eb7: MSTORE
00001eb8: PUSH1 0x20
00001eba: PUSH1 0x04
00001ebc: DUP3
00001ebd: ADD
00001ebe: MSTORE
00001ebf: PUSH1 0x29
00001ec1: PUSH1 0x24
00001ec3: DUP3
00001ec4: ADD
00001ec5: MSTORE
00001ec6: PUSH32 0x45524331393637557067726164653a20756e737570706f727465642070726f78
00001ee7: PUSH1 0x44
00001ee9: DUP3
00001eea: ADD
00001eeb: MSTORE
00001eec: PUSH32 0x6961626c65555549440000000000000000000000000000000000000000000000
00001f0d: PUSH1 0x64
00001f0f: DUP3
00001f10: ADD
00001f11: MSTORE
00001f12: PUSH1 0x84
00001f14: ADD
00001f15: PUSH2 0x01ac
00001f18: JUMP
00001f19: JUMPDEST
00001f1a: POP
00001f1b: PUSH2 0x08b8
00001f1e: DUP4
00001f1f: DUP4
00001f20: DUP4
00001f21: PUSH2 0x2455
00001f24: JUMP
00001f25: JUMPDEST
00001f26: PUSH1 0x97
00001f28: SLOAD
00001f29: PUSH1 0xff
00001f2b: AND
00001f2c: ISZERO
00001f2d: PUSH2 0x1f78
00001f30: JUMPI
00001f31: PUSH1 0x40
00001f33: MLOAD
00001f34: PUSH3 0x461bcd
00001f38: PUSH1 0xe5
00001f3a: SHL
00001f3b: DUP2
00001f3c: MSTORE
00001f3d: PUSH1 0x20
00001f3f: PUSH1 0x04
00001f41: DUP3
00001f42: ADD
00001f43: MSTORE
00001f44: PUSH1 0x06
00001f46: PUSH1 0x24
00001f48: DUP3
00001f49: ADD
00001f4a: MSTORE
00001f4b: PUSH32 0x5061757365640000000000000000000000000000000000000000000000000000
00001f6c: PUSH1 0x44
00001f6e: DUP3
00001f6f: ADD
00001f70: MSTORE
00001f71: PUSH1 0x64
00001f73: ADD
00001f74: PUSH2 0x01ac
00001f77: JUMP
00001f78: JUMPDEST
00001f79: PUSH1 0x98
00001f7b: SLOAD
00001f7c: PUSH1 0x01
00001f7e: PUSH1 0x01
00001f80: PUSH1 0xa0
00001f82: SHL
00001f83: SUB
00001f84: AND
00001f85: PUSH2 0x1fd0
00001f88: JUMPI
00001f89: PUSH1 0x40
00001f8b: MLOAD
00001f8c: PUSH3 0x461bcd
00001f90: PUSH1 0xe5
00001f92: SHL
00001f93: DUP2
00001f94: MSTORE
00001f95: PUSH1 0x20
00001f97: PUSH1 0x04
00001f99: DUP3
00001f9a: ADD
00001f9b: MSTORE
00001f9c: PUSH1 0x0f
00001f9e: PUSH1 0x24
00001fa0: DUP3
00001fa1: ADD
00001fa2: MSTORE
00001fa3: PUSH32 0x4e6f7420696d706c656d656e7465640000000000000000000000000000000000
00001fc4: PUSH1 0x44
00001fc6: DUP3
00001fc7: ADD
00001fc8: MSTORE
00001fc9: PUSH1 0x64
00001fcb: ADD
00001fcc: PUSH2 0x01ac
00001fcf: JUMP
00001fd0: JUMPDEST
00001fd1: PUSH1 0x00
00001fd3: DUP2
00001fd4: GT
00001fd5: PUSH2 0x2020
00001fd8: JUMPI
00001fd9: PUSH1 0x40
00001fdb: MLOAD
00001fdc: PUSH3 0x461bcd
00001fe0: PUSH1 0xe5
00001fe2: SHL
00001fe3: DUP2
00001fe4: MSTORE
00001fe5: PUSH1 0x20
00001fe7: PUSH1 0x04
00001fe9: DUP3
00001fea: ADD
00001feb: MSTORE
00001fec: PUSH1 0x11
00001fee: PUSH1 0x24
00001ff0: DUP3
00001ff1: ADD
00001ff2: MSTORE
00001ff3: PUSH32 0x4e6f7420656e6f75676820616d6f756e74000000000000000000000000000000
00002014: PUSH1 0x44
00002016: DUP3
00002017: ADD
00002018: MSTORE
00002019: PUSH1 0x64
0000201b: ADD
0000201c: PUSH2 0x01ac
0000201f: JUMP
00002020: JUMPDEST
00002021: PUSH1 0x01
00002023: PUSH1 0x01
00002025: PUSH1 0xa0
00002027: SHL
00002028: SUB
00002029: DUP3
0000202a: AND
0000202b: PUSH2 0x2076
0000202e: JUMPI
0000202f: PUSH1 0x40
00002031: MLOAD
00002032: PUSH3 0x461bcd
00002036: PUSH1 0xe5
00002038: SHL
00002039: DUP2
0000203a: MSTORE
0000203b: PUSH1 0x20
0000203d: PUSH1 0x04
0000203f: DUP3
00002040: ADD
00002041: MSTORE
00002042: PUSH1 0x0f
00002044: PUSH1 0x24
00002046: DUP3
00002047: ADD
00002048: MSTORE
00002049: PUSH32 0x496e76616c696420616464726573730000000000000000000000000000000000
0000206a: PUSH1 0x44
0000206c: DUP3
0000206d: ADD
0000206e: MSTORE
0000206f: PUSH1 0x64
00002071: ADD
00002072: PUSH2 0x01ac
00002075: JUMP
00002076: JUMPDEST
00002077: PUSH1 0x01
00002079: PUSH1 0x01
0000207b: PUSH1 0xa0
0000207d: SHL
0000207e: SUB
0000207f: DUP5
00002080: DUP2
00002081: AND
00002082: PUSH1 0x00
00002084: SWAP1
00002085: DUP2
00002086: MSTORE
00002087: PUSH1 0x9a
00002089: PUSH1 0x20
0000208b: MSTORE
0000208c: PUSH1 0x40
0000208e: SWAP1
0000208f: KECCAK256
00002090: SLOAD
00002091: AND
00002092: PUSH2 0x20dd
00002095: JUMPI
00002096: PUSH1 0x40
00002098: MLOAD
00002099: PUSH3 0x461bcd
0000209d: PUSH1 0xe5
0000209f: SHL
000020a0: DUP2
000020a1: MSTORE
000020a2: PUSH1 0x20
000020a4: PUSH1 0x04
000020a6: DUP3
000020a7: ADD
000020a8: MSTORE
000020a9: PUSH1 0x0d
000020ab: PUSH1 0x24
000020ad: DUP3
000020ae: ADD
000020af: MSTORE
000020b0: PUSH32 0x4e6f7420737570706f7274656400000000000000000000000000000000000000
000020d1: PUSH1 0x44
000020d3: DUP3
000020d4: ADD
000020d5: MSTORE
000020d6: PUSH1 0x64
000020d8: ADD
000020d9: PUSH2 0x01ac
000020dc: JUMP
000020dd: JUMPDEST
000020de: PUSH2 0x20f2
000020e1: PUSH1 0x01
000020e3: PUSH1 0x01
000020e5: PUSH1 0xa0
000020e7: SHL
000020e8: SUB
000020e9: DUP6
000020ea: AND
000020eb: DUP5
000020ec: ADDRESS
000020ed: DUP5
000020ee: PUSH2 0x2480
000020f1: JUMP
000020f2: JUMPDEST
000020f3: PUSH1 0x01
000020f5: PUSH1 0x01
000020f7: PUSH1 0xa0
000020f9: SHL
000020fa: SUB
000020fb: DUP4
000020fc: DUP2
000020fd: AND
000020fe: PUSH1 0x00
00002100: DUP2
00002101: DUP2
00002102: MSTORE
00002103: PUSH1 0x9b
00002105: PUSH1 0x20
00002107: SWAP1
00002108: DUP2
00002109: MSTORE
0000210a: PUSH1 0x40
0000210c: DUP1
0000210d: DUP4
0000210e: KECCAK256
0000210f: SLOAD
00002110: DUP10
00002111: DUP7
00002112: AND
00002113: DUP1
00002114: DUP6
00002115: MSTORE
00002116: PUSH1 0x9a
00002118: DUP5
00002119: MSTORE
0000211a: SWAP4
0000211b: DUP3
0000211c: SWAP1
0000211d: KECCAK256
0000211e: SLOAD
0000211f: DUP3
00002120: MLOAD
00002121: SWAP4
00002122: DUP5
00002123: ADD
00002124: SWAP6
00002125: SWAP1
00002126: SWAP6
00002127: MSTORE
00002128: SWAP1
00002129: DUP3
0000212a: ADD
0000212b: DUP2
0000212c: SWAP1
0000212d: MSTORE
0000212e: PUSH1 0x60
00002130: DUP3
00002131: ADD
00002132: SWAP3
00002133: SWAP1
00002134: SWAP3
00002135: MSTORE
00002136: SWAP2
00002137: DUP4
00002138: AND
00002139: PUSH1 0x80
0000213b: DUP4
0000213c: ADD
0000213d: MSTORE
0000213e: SWAP2
0000213f: DUP5
00002140: AND
00002141: PUSH1 0xa0
00002143: DUP3
00002144: ADD
00002145: MSTORE
00002146: PUSH1 0xc0
00002148: DUP2
00002149: ADD
0000214a: DUP4
0000214b: SWAP1
0000214c: MSTORE
0000214d: PUSH32 0x435881434a980001db54827793d55b4f3b751d216ed457d0f2a143220ae06d25
0000216e: SWAP1
0000216f: PUSH1 0xe0
00002171: ADD
00002172: PUSH1 0x40
00002174: DUP1
00002175: MLOAD
00002176: PUSH1 0x1f
00002178: NOT
00002179: DUP2
0000217a: DUP5
0000217b: SUB
0000217c: ADD
0000217d: DUP2
0000217e: MSTORE
0000217f: SWAP1
00002180: DUP3
00002181: SWAP1
00002182: MSTORE
00002183: PUSH2 0x218b
00002186: SWAP2
00002187: PUSH2 0x31ca
0000218a: JUMP
0000218b: JUMPDEST
0000218c: PUSH1 0x40
0000218e: MLOAD
0000218f: DUP1
00002190: SWAP2
00002191: SUB
00002192: SWAP1
00002193: LOG1
00002194: PUSH1 0x01
00002196: PUSH1 0x01
00002198: PUSH1 0xa0
0000219a: SHL
0000219b: SUB
0000219c: DUP5
0000219d: AND
0000219e: PUSH1 0x00
000021a0: SWAP1
000021a1: DUP2
000021a2: MSTORE
000021a3: PUSH1 0x9b
000021a5: PUSH1 0x20
000021a7: MSTORE
000021a8: PUSH1 0x40
000021aa: DUP2
000021ab: KECCAK256
000021ac: DUP1
000021ad: SLOAD
000021ae: SWAP2
000021af: PUSH2 0x21b7
000021b2: DUP4
000021b3: PUSH2 0x307a
000021b6: JUMP
000021b7: JUMPDEST
000021b8: SWAP2
000021b9: SWAP1
000021ba: POP
000021bb: SSTORE
000021bc: POP
000021bd: POP
000021be: POP
000021bf: POP
000021c0: POP
000021c1: POP
000021c2: JUMP
000021c3: JUMPDEST
000021c4: PUSH1 0x00
000021c6: SLOAD
000021c7: PUSH2 0x0100
000021ca: SWAP1
000021cb: DIV
000021cc: PUSH1 0xff
000021ce: AND
000021cf: PUSH2 0x2240
000021d2: JUMPI
000021d3: PUSH1 0x40
000021d5: MLOAD
000021d6: PUSH3 0x461bcd
000021da: PUSH1 0xe5
000021dc: SHL
000021dd: DUP2
000021de: MSTORE
000021df: PUSH1 0x20
000021e1: PUSH1 0x04
000021e3: DUP3
000021e4: ADD
000021e5: MSTORE
000021e6: PUSH1 0x2b
000021e8: PUSH1 0x24
000021ea: DUP3
000021eb: ADD
000021ec: MSTORE
000021ed: PUSH32 0x496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069
0000220e: PUSH1 0x44
00002210: DUP3
00002211: ADD
00002212: MSTORE
00002213: PUSH32 0x6e697469616c697a696e67000000000000000000000000000000000000000000
00002234: PUSH1 0x64
00002236: DUP3
00002237: ADD
00002238: MSTORE
00002239: PUSH1 0x84
0000223b: ADD
0000223c: PUSH2 0x01ac
0000223f: JUMP
00002240: JUMPDEST
00002241: PUSH2 0x2248
00002244: PUSH2 0x24d1
00002247: JUMP
00002248: JUMPDEST
00002249: JUMP
0000224a: JUMPDEST
0000224b: PUSH1 0x00
0000224d: PUSH1 0x40
0000224f: MLOAD
00002250: DUP4
00002251: PUSH1 0x40
00002253: DUP3
00002254: ADD
00002255: MSTORE
00002256: DUP5
00002257: PUSH1 0x20
00002259: DUP3
0000225a: ADD
0000225b: MSTORE
0000225c: DUP3
0000225d: DUP2
0000225e: MSTORE
0000225f: PUSH1 0x0b
00002261: DUP2
00002262: ADD
00002263: SWAP1
00002264: POP
00002265: PUSH1 0xff
00002267: DUP2
00002268: MSTORE8
00002269: PUSH1 0x55
0000226b: SWAP1
0000226c: KECCAK256
0000226d: SWAP5
0000226e: SWAP4
0000226f: POP
00002270: POP
00002271: POP
00002272: POP
00002273: JUMP
00002274: JUMPDEST
00002275: PUSH1 0x00
00002277: DUP1
00002278: PUSH1 0x00
0000227a: PUSH2 0x2283
0000227d: DUP6
0000227e: DUP6
0000227f: PUSH2 0x254e
00002282: JUMP
00002283: JUMPDEST
00002284: SWAP2
00002285: POP
00002286: SWAP2
00002287: POP
00002288: PUSH2 0x2290
0000228b: DUP2
0000228c: PUSH2 0x2593
0000228f: JUMP
00002290: JUMPDEST
00002291: POP
00002292: SWAP1
00002293: POP
00002294: JUMPDEST
00002295: SWAP3
00002296: SWAP2
00002297: POP
00002298: POP
00002299: JUMP
0000229a: JUMPDEST
0000229b: PUSH1 0x00
0000229d: PUSH2 0x22ef
000022a0: DUP3
000022a1: PUSH1 0x40
000022a3: MLOAD
000022a4: DUP1
000022a5: PUSH1 0x40
000022a7: ADD
000022a8: PUSH1 0x40
000022aa: MSTORE
000022ab: DUP1
000022ac: PUSH1 0x20
000022ae: DUP2
000022af: MSTORE
000022b0: PUSH1 0x20
000022b2: ADD
000022b3: PUSH32 0x5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564
000022d4: DUP2
000022d5: MSTORE
000022d6: POP
000022d7: DUP6
000022d8: PUSH1 0x01
000022da: PUSH1 0x01
000022dc: PUSH1 0xa0
000022de: SHL
000022df: SUB
000022e0: AND
000022e1: PUSH2 0x26f8
000022e4: SWAP1
000022e5: SWAP3
000022e6: SWAP2
000022e7: SWAP1
000022e8: PUSH4 0xffffffff
000022ed: AND
000022ee: JUMP
000022ef: JUMPDEST
000022f0: DUP1
000022f1: MLOAD
000022f2: SWAP1
000022f3: SWAP2
000022f4: POP
000022f5: ISZERO
000022f6: PUSH2 0x08b8
000022f9: JUMPI
000022fa: DUP1
000022fb: DUP1
000022fc: PUSH1 0x20
000022fe: ADD
000022ff: SWAP1
00002300: MLOAD
00002301: DUP2
00002302: ADD
00002303: SWAP1
00002304: PUSH2 0x230d
00002307: SWAP2
00002308: SWAP1
00002309: PUSH2 0x31dd
0000230c: JUMP
0000230d: JUMPDEST
0000230e: PUSH2 0x08b8
00002311: JUMPI
00002312: PUSH1 0x40
00002314: MLOAD
00002315: PUSH3 0x461bcd
00002319: PUSH1 0xe5
0000231b: SHL
0000231c: DUP2
0000231d: MSTORE
0000231e: PUSH1 0x20
00002320: PUSH1 0x04
00002322: DUP3
00002323: ADD
00002324: MSTORE
00002325: PUSH1 0x2a
00002327: PUSH1 0x24
00002329: DUP3
0000232a: ADD
0000232b: MSTORE
0000232c: PUSH32 0x5361666545524332303a204552433230206f7065726174696f6e20646964206e
0000234d: PUSH1 0x44
0000234f: DUP3
00002350: ADD
00002351: MSTORE
00002352: PUSH32 0x6f74207375636365656400000000000000000000000000000000000000000000
00002373: PUSH1 0x64
00002375: DUP3
00002376: ADD
00002377: MSTORE
00002378: PUSH1 0x84
0000237a: ADD
0000237b: PUSH2 0x01ac
0000237e: JUMP
0000237f: JUMPDEST
00002380: PUSH1 0x01
00002382: PUSH1 0x01
00002384: PUSH1 0xa0
00002386: SHL
00002387: SUB
00002388: DUP2
00002389: AND
0000238a: EXTCODESIZE
0000238b: PUSH2 0x23fc
0000238e: JUMPI
0000238f: PUSH1 0x40
00002391: MLOAD
00002392: PUSH3 0x461bcd
00002396: PUSH1 0xe5
00002398: SHL
00002399: DUP2
0000239a: MSTORE
0000239b: PUSH1 0x20
0000239d: PUSH1 0x04
0000239f: DUP3
000023a0: ADD
000023a1: MSTORE
000023a2: PUSH1 0x2d
000023a4: PUSH1 0x24
000023a6: DUP3
000023a7: ADD
000023a8: MSTORE
000023a9: PUSH32 0x455243313936373a206e657720696d706c656d656e746174696f6e206973206e
000023ca: PUSH1 0x44
000023cc: DUP3
000023cd: ADD
000023ce: MSTORE
000023cf: PUSH32 0x6f74206120636f6e747261637400000000000000000000000000000000000000
000023f0: PUSH1 0x64
000023f2: DUP3
000023f3: ADD
000023f4: MSTORE
000023f5: PUSH1 0x84
000023f7: ADD
000023f8: PUSH2 0x01ac
000023fb: JUMP
000023fc: JUMPDEST
000023fd: PUSH32 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc
0000241e: DUP1
0000241f: SLOAD
00002420: PUSH32 0xffffffffffffffffffffffff0000000000000000000000000000000000000000
00002441: AND
00002442: PUSH1 0x01
00002444: PUSH1 0x01
00002446: PUSH1 0xa0
00002448: SHL
00002449: SUB
0000244a: SWAP3
0000244b: SWAP1
0000244c: SWAP3
0000244d: AND
0000244e: SWAP2
0000244f: SWAP1
00002450: SWAP2
00002451: OR
00002452: SWAP1
00002453: SSTORE
00002454: JUMP
00002455: JUMPDEST
00002456: PUSH2 0x245e
00002459: DUP4
0000245a: PUSH2 0x2711
0000245d: JUMP
0000245e: JUMPDEST
0000245f: PUSH1 0x00
00002461: DUP3
00002462: MLOAD
00002463: GT
00002464: DUP1
00002465: PUSH2 0x246b
00002468: JUMPI
00002469: POP
0000246a: DUP1
0000246b: JUMPDEST
0000246c: ISZERO
0000246d: PUSH2 0x08b8
00002470: JUMPI
00002471: PUSH2 0x247a
00002474: DUP4
00002475: DUP4
00002476: PUSH2 0x2751
00002479: JUMP
0000247a: JUMPDEST
0000247b: POP
0000247c: POP
0000247d: POP
0000247e: POP
0000247f: JUMP
00002480: JUMPDEST
00002481: PUSH1 0x40
00002483: MLOAD
00002484: PUSH1 0x01
00002486: PUSH1 0x01
00002488: PUSH1 0xa0
0000248a: SHL
0000248b: SUB
0000248c: DUP1
0000248d: DUP6
0000248e: AND
0000248f: PUSH1 0x24
00002491: DUP4
00002492: ADD
00002493: MSTORE
00002494: DUP4
00002495: AND
00002496: PUSH1 0x44
00002498: DUP3
00002499: ADD
0000249a: MSTORE
0000249b: PUSH1 0x64
0000249d: DUP2
0000249e: ADD
0000249f: DUP3
000024a0: SWAP1
000024a1: MSTORE
000024a2: PUSH2 0x247a
000024a5: SWAP1
000024a6: DUP6
000024a7: SWAP1
000024a8: PUSH32 0x23b872dd00000000000000000000000000000000000000000000000000000000
000024c9: SWAP1
000024ca: PUSH1 0x84
000024cc: ADD
000024cd: PUSH2 0x1c43
000024d0: JUMP
000024d1: JUMPDEST
000024d2: PUSH1 0x00
000024d4: SLOAD
000024d5: PUSH2 0x0100
000024d8: SWAP1
000024d9: DIV
000024da: PUSH1 0xff
000024dc: AND
000024dd: PUSH2 0x1ca7
000024e0: JUMPI
000024e1: PUSH1 0x40
000024e3: MLOAD
000024e4: PUSH3 0x461bcd
000024e8: PUSH1 0xe5
000024ea: SHL
000024eb: DUP2
000024ec: MSTORE
000024ed: PUSH1 0x20
000024ef: PUSH1 0x04
000024f1: DUP3
000024f2: ADD
000024f3: MSTORE
000024f4: PUSH1 0x2b
000024f6: PUSH1 0x24
000024f8: DUP3
000024f9: ADD
000024fa: MSTORE
000024fb: PUSH32 0x496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069
0000251c: PUSH1 0x44
0000251e: DUP3
0000251f: ADD
00002520: MSTORE
00002521: PUSH32 0x6e697469616c697a696e67000000000000000000000000000000000000000000
00002542: PUSH1 0x64
00002544: DUP3
00002545: ADD
00002546: MSTORE
00002547: PUSH1 0x84
00002549: ADD
0000254a: PUSH2 0x01ac
0000254d: JUMP
0000254e: JUMPDEST
0000254f: PUSH1 0x00
00002551: DUP1
00002552: DUP3
00002553: MLOAD
00002554: PUSH1 0x41
00002556: SUB
00002557: PUSH2 0x2584
0000255a: JUMPI
0000255b: PUSH1 0x20
0000255d: DUP4
0000255e: ADD
0000255f: MLOAD
00002560: PUSH1 0x40
00002562: DUP5
00002563: ADD
00002564: MLOAD
00002565: PUSH1 0x60
00002567: DUP6
00002568: ADD
00002569: MLOAD
0000256a: PUSH1 0x00
0000256c: BYTE
0000256d: PUSH2 0x2578
00002570: DUP8
00002571: DUP3
00002572: DUP6
00002573: DUP6
00002574: PUSH2 0x285c
00002577: JUMP
00002578: JUMPDEST
00002579: SWAP5
0000257a: POP
0000257b: SWAP5
0000257c: POP
0000257d: POP
0000257e: POP
0000257f: POP
00002580: PUSH2 0x258c
00002583: JUMP
00002584: JUMPDEST
00002585: POP
00002586: PUSH1 0x00
00002588: SWAP1
00002589: POP
0000258a: PUSH1 0x02
0000258c: JUMPDEST
0000258d: SWAP3
0000258e: POP
0000258f: SWAP3
00002590: SWAP1
00002591: POP
00002592: JUMP
00002593: JUMPDEST
00002594: PUSH1 0x00
00002596: DUP2
00002597: PUSH1 0x04
00002599: DUP2
0000259a: GT
0000259b: ISZERO
0000259c: PUSH2 0x25a7
0000259f: JUMPI
000025a0: PUSH2 0x25a7
000025a3: PUSH2 0x320d
000025a6: JUMP
000025a7: JUMPDEST
000025a8: SUB
000025a9: PUSH2 0x25af
000025ac: JUMPI
000025ad: POP
000025ae: JUMP
000025af: JUMPDEST
000025b0: PUSH1 0x01
000025b2: DUP2
000025b3: PUSH1 0x04
000025b5: DUP2
000025b6: GT
000025b7: ISZERO
000025b8: PUSH2 0x25c3
000025bb: JUMPI
000025bc: PUSH2 0x25c3
000025bf: PUSH2 0x320d
000025c2: JUMP
000025c3: JUMPDEST
000025c4: SUB
000025c5: PUSH2 0x2610
000025c8: JUMPI
000025c9: PUSH1 0x40
000025cb: MLOAD
000025cc: PUSH3 0x461bcd
000025d0: PUSH1 0xe5
000025d2: SHL
000025d3: DUP2
000025d4: MSTORE
000025d5: PUSH1 0x20
000025d7: PUSH1 0x04
000025d9: DUP3
000025da: ADD
000025db: MSTORE
000025dc: PUSH1 0x18
000025de: PUSH1 0x24
000025e0: DUP3
000025e1: ADD
000025e2: MSTORE
000025e3: PUSH32 0x45434453413a20696e76616c6964207369676e61747572650000000000000000
00002604: PUSH1 0x44
00002606: DUP3
00002607: ADD
00002608: MSTORE
00002609: PUSH1 0x64
0000260b: ADD
0000260c: PUSH2 0x01ac
0000260f: JUMP
00002610: JUMPDEST
00002611: PUSH1 0x02
00002613: DUP2
00002614: PUSH1 0x04
00002616: DUP2
00002617: GT
00002618: ISZERO
00002619: PUSH2 0x2624
0000261c: JUMPI
0000261d: PUSH2 0x2624
00002620: PUSH2 0x320d
00002623: JUMP
00002624: JUMPDEST
00002625: SUB
00002626: PUSH2 0x2671
00002629: JUMPI
0000262a: PUSH1 0x40
0000262c: MLOAD
0000262d: PUSH3 0x461bcd
00002631: PUSH1 0xe5
00002633: SHL
00002634: DUP2
00002635: MSTORE
00002636: PUSH1 0x20
00002638: PUSH1 0x04
0000263a: DUP3
0000263b: ADD
0000263c: MSTORE
0000263d: PUSH1 0x1f
0000263f: PUSH1 0x24
00002641: DUP3
00002642: ADD
00002643: MSTORE
00002644: PUSH32 0x45434453413a20696e76616c6964207369676e6174757265206c656e67746800
00002665: PUSH1 0x44
00002667: DUP3
00002668: ADD
00002669: MSTORE
0000266a: PUSH1 0x64
0000266c: ADD
0000266d: PUSH2 0x01ac
00002670: JUMP
00002671: JUMPDEST
00002672: PUSH1 0x03
00002674: DUP2
00002675: PUSH1 0x04
00002677: DUP2
00002678: GT
00002679: ISZERO
0000267a: PUSH2 0x2685
0000267d: JUMPI
0000267e: PUSH2 0x2685
00002681: PUSH2 0x320d
00002684: JUMP
00002685: JUMPDEST
00002686: SUB
00002687: PUSH2 0x0b33
0000268a: JUMPI
0000268b: PUSH1 0x40
0000268d: MLOAD
0000268e: PUSH3 0x461bcd
00002692: PUSH1 0xe5
00002694: SHL
00002695: DUP2
00002696: MSTORE
00002697: PUSH1 0x20
00002699: PUSH1 0x04
0000269b: DUP3
0000269c: ADD
0000269d: MSTORE
0000269e: PUSH1 0x22
000026a0: PUSH1 0x24
000026a2: DUP3
000026a3: ADD
000026a4: MSTORE
000026a5: PUSH32 0x45434453413a20696e76616c6964207369676e6174757265202773272076616c
000026c6: PUSH1 0x44
000026c8: DUP3
000026c9: ADD
000026ca: MSTORE
000026cb: PUSH32 0x7565000000000000000000000000000000000000000000000000000000000000
000026ec: PUSH1 0x64
000026ee: DUP3
000026ef: ADD
000026f0: MSTORE
000026f1: PUSH1 0x84
000026f3: ADD
000026f4: PUSH2 0x01ac
000026f7: JUMP
000026f8: JUMPDEST
000026f9: PUSH1 0x60
000026fb: PUSH2 0x2707
000026fe: DUP5
000026ff: DUP5
00002700: PUSH1 0x00
00002702: DUP6
00002703: PUSH2 0x2920
00002706: JUMP
00002707: JUMPDEST
00002708: SWAP1
00002709: POP
0000270a: JUMPDEST
0000270b: SWAP4
0000270c: SWAP3
0000270d: POP
0000270e: POP
0000270f: POP
00002710: JUMP
00002711: JUMPDEST
00002712: PUSH2 0x271a
00002715: DUP2
00002716: PUSH2 0x237f
00002719: JUMP
0000271a: JUMPDEST
0000271b: PUSH1 0x40
0000271d: MLOAD
0000271e: PUSH1 0x01
00002720: PUSH1 0x01
00002722: PUSH1 0xa0
00002724: SHL
00002725: SUB
00002726: DUP3
00002727: AND
00002728: SWAP1
00002729: PUSH32 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b
0000274a: SWAP1
0000274b: PUSH1 0x00
0000274d: SWAP1
0000274e: LOG2
0000274f: POP
00002750: JUMP
00002751: JUMPDEST
00002752: PUSH1 0x60
00002754: PUSH1 0x01
00002756: PUSH1 0x01
00002758: PUSH1 0xa0
0000275a: SHL
0000275b: SUB
0000275c: DUP4
0000275d: AND
0000275e: EXTCODESIZE
0000275f: PUSH2 0x27d0
00002762: JUMPI
00002763: PUSH1 0x40
00002765: MLOAD
00002766: PUSH3 0x461bcd
0000276a: PUSH1 0xe5
0000276c: SHL
0000276d: DUP2
0000276e: MSTORE
0000276f: PUSH1 0x20
00002771: PUSH1 0x04
00002773: DUP3
00002774: ADD
00002775: MSTORE
00002776: PUSH1 0x26
00002778: PUSH1 0x24
0000277a: DUP3
0000277b: ADD
0000277c: MSTORE
0000277d: PUSH32 0x416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f
0000279e: PUSH1 0x44
000027a0: DUP3
000027a1: ADD
000027a2: MSTORE
000027a3: PUSH32 0x6e74726163740000000000000000000000000000000000000000000000000000
000027c4: PUSH1 0x64
000027c6: DUP3
000027c7: ADD
000027c8: MSTORE
000027c9: PUSH1 0x84
000027cb: ADD
000027cc: PUSH2 0x01ac
000027cf: JUMP
000027d0: JUMPDEST
000027d1: PUSH1 0x00
000027d3: DUP1
000027d4: DUP5
000027d5: PUSH1 0x01
000027d7: PUSH1 0x01
000027d9: PUSH1 0xa0
000027db: SHL
000027dc: SUB
000027dd: AND
000027de: DUP5
000027df: PUSH1 0x40
000027e1: MLOAD
000027e2: PUSH2 0x27eb
000027e5: SWAP2
000027e6: SWAP1
000027e7: PUSH2 0x323c
000027ea: JUMP
000027eb: JUMPDEST
000027ec: PUSH1 0x00
000027ee: PUSH1 0x40
000027f0: MLOAD
000027f1: DUP1
000027f2: DUP4
000027f3: SUB
000027f4: DUP2
000027f5: DUP6
000027f6: GAS
000027f7: DELEGATECALL
000027f8: SWAP2
000027f9: POP
000027fa: POP
000027fb: RETURNDATASIZE
000027fc: DUP1
000027fd: PUSH1 0x00
000027ff: DUP2
00002800: EQ
00002801: PUSH2 0x2826
00002804: JUMPI
00002805: PUSH1 0x40
00002807: MLOAD
00002808: SWAP2
00002809: POP
0000280a: PUSH1 0x1f
0000280c: NOT
0000280d: PUSH1 0x3f
0000280f: RETURNDATASIZE
00002810: ADD
00002811: AND
00002812: DUP3
00002813: ADD
00002814: PUSH1 0x40
00002816: MSTORE
00002817: RETURNDATASIZE
00002818: DUP3
00002819: MSTORE
0000281a: RETURNDATASIZE
0000281b: PUSH1 0x00
0000281d: PUSH1 0x20
0000281f: DUP5
00002820: ADD
00002821: RETURNDATACOPY
00002822: PUSH2 0x282b
00002825: JUMP
00002826: JUMPDEST
00002827: PUSH1 0x60
00002829: SWAP2
0000282a: POP
0000282b: JUMPDEST
0000282c: POP
0000282d: SWAP2
0000282e: POP
0000282f: SWAP2
00002830: POP
00002831: PUSH2 0x2853
00002834: DUP3
00002835: DUP3
00002836: PUSH1 0x40
00002838: MLOAD
00002839: DUP1
0000283a: PUSH1 0x60
0000283c: ADD
0000283d: PUSH1 0x40
0000283f: MSTORE
00002840: DUP1
00002841: PUSH1 0x27
00002843: DUP2
00002844: MSTORE
00002845: PUSH1 0x20
00002847: ADD
00002848: PUSH2 0x3259
0000284b: PUSH1 0x27
0000284d: SWAP2
0000284e: CODECOPY
0000284f: PUSH2 0x2a14
00002852: JUMP
00002853: JUMPDEST
00002854: SWAP6
00002855: SWAP5
00002856: POP
00002857: POP
00002858: POP
00002859: POP
0000285a: POP
0000285b: JUMP
0000285c: JUMPDEST
0000285d: PUSH1 0x00
0000285f: DUP1
00002860: PUSH32 0x7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0
00002881: DUP4
00002882: GT
00002883: ISZERO
00002884: PUSH2 0x2893
00002887: JUMPI
00002888: POP
00002889: PUSH1 0x00
0000288b: SWAP1
0000288c: POP
0000288d: PUSH1 0x03
0000288f: PUSH2 0x2917
00002892: JUMP
00002893: JUMPDEST
00002894: PUSH1 0x40
00002896: DUP1
00002897: MLOAD
00002898: PUSH1 0x00
0000289a: DUP1
0000289b: DUP3
0000289c: MSTORE
0000289d: PUSH1 0x20
0000289f: DUP3
000028a0: ADD
000028a1: DUP1
000028a2: DUP5
000028a3: MSTORE
000028a4: DUP10
000028a5: SWAP1
000028a6: MSTORE
000028a7: PUSH1 0xff
000028a9: DUP9
000028aa: AND
000028ab: SWAP3
000028ac: DUP3
000028ad: ADD
000028ae: SWAP3
000028af: SWAP1
000028b0: SWAP3
000028b1: MSTORE
000028b2: PUSH1 0x60
000028b4: DUP2
000028b5: ADD
000028b6: DUP7
000028b7: SWAP1
000028b8: MSTORE
000028b9: PUSH1 0x80
000028bb: DUP2
000028bc: ADD
000028bd: DUP6
000028be: SWAP1
000028bf: MSTORE
000028c0: PUSH1 0x01
000028c2: SWAP1
000028c3: PUSH1 0xa0
000028c5: ADD
000028c6: PUSH1 0x20
000028c8: PUSH1 0x40
000028ca: MLOAD
000028cb: PUSH1 0x20
000028cd: DUP2
000028ce: SUB
000028cf: SWAP1
000028d0: DUP1
000028d1: DUP5
000028d2: SUB
000028d3: SWAP1
000028d4: DUP6
000028d5: GAS
000028d6: STATICCALL
000028d7: ISZERO
000028d8: DUP1
000028d9: ISZERO
000028da: PUSH2 0x28e7
000028dd: JUMPI
000028de: RETURNDATASIZE
000028df: PUSH1 0x00
000028e1: DUP1
000028e2: RETURNDATACOPY
000028e3: RETURNDATASIZE
000028e4: PUSH1 0x00
000028e6: REVERT
000028e7: JUMPDEST
000028e8: POP
000028e9: POP
000028ea: PUSH1 0x40
000028ec: MLOAD
000028ed: PUSH1 0x1f
000028ef: NOT
000028f0: ADD
000028f1: MLOAD
000028f2: SWAP2
000028f3: POP
000028f4: POP
000028f5: PUSH1 0x01
000028f7: PUSH1 0x01
000028f9: PUSH1 0xa0
000028fb: SHL
000028fc: SUB
000028fd: DUP2
000028fe: AND
000028ff: PUSH2 0x2910
00002902: JUMPI
00002903: PUSH1 0x00
00002905: PUSH1 0x01
00002907: SWAP3
00002908: POP
00002909: SWAP3
0000290a: POP
0000290b: POP
0000290c: PUSH2 0x2917
0000290f: JUMP
00002910: JUMPDEST
00002911: SWAP2
00002912: POP
00002913: PUSH1 0x00
00002915: SWAP1
00002916: POP
00002917: JUMPDEST
00002918: SWAP5
00002919: POP
0000291a: SWAP5
0000291b: SWAP3
0000291c: POP
0000291d: POP
0000291e: POP
0000291f: JUMP
00002920: JUMPDEST
00002921: PUSH1 0x60
00002923: DUP3
00002924: SELFBALANCE
00002925: LT
00002926: ISZERO
00002927: PUSH2 0x2998
0000292a: JUMPI
0000292b: PUSH1 0x40
0000292d: MLOAD
0000292e: PUSH3 0x461bcd
00002932: PUSH1 0xe5
00002934: SHL
00002935: DUP2
00002936: MSTORE
00002937: PUSH1 0x20
00002939: PUSH1 0x04
0000293b: DUP3
0000293c: ADD
0000293d: MSTORE
0000293e: PUSH1 0x26
00002940: PUSH1 0x24
00002942: DUP3
00002943: ADD
00002944: MSTORE
00002945: PUSH32 0x416464726573733a20696e73756666696369656e742062616c616e636520666f
00002966: PUSH1 0x44
00002968: DUP3
00002969: ADD
0000296a: MSTORE
0000296b: PUSH32 0x722063616c6c0000000000000000000000000000000000000000000000000000
0000298c: PUSH1 0x64
0000298e: DUP3
0000298f: ADD
00002990: MSTORE
00002991: PUSH1 0x84
00002993: ADD
00002994: PUSH2 0x01ac
00002997: JUMP
00002998: JUMPDEST
00002999: PUSH1 0x00
0000299b: DUP1
0000299c: DUP7
0000299d: PUSH1 0x01
0000299f: PUSH1 0x01
000029a1: PUSH1 0xa0
000029a3: SHL
000029a4: SUB
000029a5: AND
000029a6: DUP6
000029a7: DUP8
000029a8: PUSH1 0x40
000029aa: MLOAD
000029ab: PUSH2 0x29b4
000029ae: SWAP2
000029af: SWAP1
000029b0: PUSH2 0x323c
000029b3: JUMP
000029b4: JUMPDEST
000029b5: PUSH1 0x00
000029b7: PUSH1 0x40
000029b9: MLOAD
000029ba: DUP1
000029bb: DUP4
000029bc: SUB
000029bd: DUP2
000029be: DUP6
000029bf: DUP8
000029c0: GAS
000029c1: CALL
000029c2: SWAP3
000029c3: POP
000029c4: POP
000029c5: POP
000029c6: RETURNDATASIZE
000029c7: DUP1
000029c8: PUSH1 0x00
000029ca: DUP2
000029cb: EQ
000029cc: PUSH2 0x29f1
000029cf: JUMPI
000029d0: PUSH1 0x40
000029d2: MLOAD
000029d3: SWAP2
000029d4: POP
000029d5: PUSH1 0x1f
000029d7: NOT
000029d8: PUSH1 0x3f
000029da: RETURNDATASIZE
000029db: ADD
000029dc: AND
000029dd: DUP3
000029de: ADD
000029df: PUSH1 0x40
000029e1: MSTORE
000029e2: RETURNDATASIZE
000029e3: DUP3
000029e4: MSTORE
000029e5: RETURNDATASIZE
000029e6: PUSH1 0x00
000029e8: PUSH1 0x20
000029ea: DUP5
000029eb: ADD
000029ec: RETURNDATACOPY
000029ed: PUSH2 0x29f6
000029f0: JUMP
000029f1: JUMPDEST
000029f2: PUSH1 0x60
000029f4: SWAP2
000029f5: POP
000029f6: JUMPDEST
000029f7: POP
000029f8: SWAP2
000029f9: POP
000029fa: SWAP2
000029fb: POP
000029fc: PUSH2 0x2a07
000029ff: DUP8
00002a00: DUP4
00002a01: DUP4
00002a02: DUP8
00002a03: PUSH2 0x2a2d
00002a06: JUMP
00002a07: JUMPDEST
00002a08: SWAP3
00002a09: POP
00002a0a: POP
00002a0b: POP
00002a0c: JUMPDEST
00002a0d: SWAP5
00002a0e: SWAP4
00002a0f: POP
00002a10: POP
00002a11: POP
00002a12: POP
00002a13: JUMP
00002a14: JUMPDEST
00002a15: PUSH1 0x60
00002a17: DUP4
00002a18: ISZERO
00002a19: PUSH2 0x2a23
00002a1c: JUMPI
00002a1d: POP
00002a1e: DUP2
00002a1f: PUSH2 0x270a
00002a22: JUMP
00002a23: JUMPDEST
00002a24: PUSH2 0x270a
00002a27: DUP4
00002a28: DUP4
00002a29: PUSH2 0x2aa2
00002a2c: JUMP
00002a2d: JUMPDEST
00002a2e: PUSH1 0x60
00002a30: DUP4
00002a31: ISZERO
00002a32: PUSH2 0x2a9c
00002a35: JUMPI
00002a36: DUP3
00002a37: MLOAD
00002a38: PUSH1 0x00
00002a3a: SUB
00002a3b: PUSH2 0x2a95
00002a3e: JUMPI
00002a3f: PUSH1 0x01
00002a41: PUSH1 0x01
00002a43: PUSH1 0xa0
00002a45: SHL
00002a46: SUB
00002a47: DUP6
00002a48: AND
00002a49: EXTCODESIZE
00002a4a: PUSH2 0x2a95
00002a4d: JUMPI
00002a4e: PUSH1 0x40
00002a50: MLOAD
00002a51: PUSH3 0x461bcd
00002a55: PUSH1 0xe5
00002a57: SHL
00002a58: DUP2
00002a59: MSTORE
00002a5a: PUSH1 0x20
00002a5c: PUSH1 0x04
00002a5e: DUP3
00002a5f: ADD
00002a60: MSTORE
00002a61: PUSH1 0x1d
00002a63: PUSH1 0x24
00002a65: DUP3
00002a66: ADD
00002a67: MSTORE
00002a68: PUSH32 0x416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000
00002a89: PUSH1 0x44
00002a8b: DUP3
00002a8c: ADD
00002a8d: MSTORE
00002a8e: PUSH1 0x64
00002a90: ADD
00002a91: PUSH2 0x01ac
00002a94: JUMP
00002a95: JUMPDEST
00002a96: POP
00002a97: DUP2
00002a98: PUSH2 0x2a0c
00002a9b: JUMP
00002a9c: JUMPDEST
00002a9d: PUSH2 0x2a0c
00002aa0: DUP4
00002aa1: DUP4
00002aa2: JUMPDEST
00002aa3: DUP2
00002aa4: MLOAD
00002aa5: ISZERO
00002aa6: PUSH2 0x2ab2
00002aa9: JUMPI
00002aaa: DUP2
00002aab: MLOAD
00002aac: DUP1
00002aad: DUP4
00002aae: PUSH1 0x20
00002ab0: ADD
00002ab1: REVERT
00002ab2: JUMPDEST
00002ab3: DUP1
00002ab4: PUSH1 0x40
00002ab6: MLOAD
00002ab7: PUSH3 0x461bcd
00002abb: PUSH1 0xe5
00002abd: SHL
00002abe: DUP2
00002abf: MSTORE
00002ac0: PUSH1 0x04
00002ac2: ADD
00002ac3: PUSH2 0x01ac
00002ac6: SWAP2
00002ac7: SWAP1
00002ac8: PUSH2 0x31ca
00002acb: JUMP
00002acc: JUMPDEST
00002acd: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000
00002aee: PUSH1 0x00
00002af0: MSTORE
00002af1: PUSH1 0x41
00002af3: PUSH1 0x04
00002af5: MSTORE
00002af6: PUSH1 0x24
00002af8: PUSH1 0x00
00002afa: REVERT
00002afb: JUMPDEST
00002afc: PUSH1 0x40
00002afe: MLOAD
00002aff: PUSH1 0x1f
00002b01: DUP3
00002b02: ADD
00002b03: PUSH1 0x1f
00002b05: NOT
00002b06: AND
00002b07: DUP2
00002b08: ADD
00002b09: PUSH8 0xffffffffffffffff
00002b12: DUP2
00002b13: GT
00002b14: DUP3
00002b15: DUP3
00002b16: LT
00002b17: OR
00002b18: ISZERO
00002b19: PUSH2 0x2b24
00002b1c: JUMPI
00002b1d: PUSH2 0x2b24
00002b20: PUSH2 0x2acc
00002b23: JUMP
00002b24: JUMPDEST
00002b25: PUSH1 0x40
00002b27: MSTORE
00002b28: SWAP2
00002b29: SWAP1
00002b2a: POP
00002b2b: JUMP
00002b2c: JUMPDEST
00002b2d: PUSH1 0x00
00002b2f: PUSH8 0xffffffffffffffff
00002b38: DUP3
00002b39: GT
00002b3a: ISZERO
00002b3b: PUSH2 0x2b46
00002b3e: JUMPI
00002b3f: PUSH2 0x2b46
00002b42: PUSH2 0x2acc
00002b45: JUMP
00002b46: JUMPDEST
00002b47: POP
00002b48: PUSH1 0x05
00002b4a: SHL
00002b4b: PUSH1 0x20
00002b4d: ADD
00002b4e: SWAP1
00002b4f: JUMP
00002b50: JUMPDEST
00002b51: PUSH1 0x01
00002b53: PUSH1 0x01
00002b55: PUSH1 0xa0
00002b57: SHL
00002b58: SUB
00002b59: DUP2
00002b5a: AND
00002b5b: DUP2
00002b5c: EQ
00002b5d: PUSH2 0x0b33
00002b60: JUMPI
00002b61: PUSH1 0x00
00002b63: DUP1
00002b64: REVERT
00002b65: JUMPDEST
00002b66: PUSH1 0x00
00002b68: DUP3
00002b69: PUSH1 0x1f
00002b6b: DUP4
00002b6c: ADD
00002b6d: SLT
00002b6e: PUSH2 0x2b76
00002b71: JUMPI
00002b72: PUSH1 0x00
00002b74: DUP1
00002b75: REVERT
00002b76: JUMPDEST
00002b77: DUP2
00002b78: CALLDATALOAD
00002b79: PUSH1 0x20
00002b7b: PUSH2 0x2b8b
00002b7e: PUSH2 0x2b86
00002b81: DUP4
00002b82: PUSH2 0x2b2c
00002b85: JUMP
00002b86: JUMPDEST
00002b87: PUSH2 0x2afb
00002b8a: JUMP
00002b8b: JUMPDEST
00002b8c: DUP3
00002b8d: DUP2
00002b8e: MSTORE
00002b8f: PUSH1 0x05
00002b91: SWAP3
00002b92: SWAP1
00002b93: SWAP3
00002b94: SHL
00002b95: DUP5
00002b96: ADD
00002b97: DUP2
00002b98: ADD
00002b99: SWAP2
00002b9a: DUP2
00002b9b: DUP2
00002b9c: ADD
00002b9d: SWAP1
00002b9e: DUP7
00002b9f: DUP5
00002ba0: GT
00002ba1: ISZERO
00002ba2: PUSH2 0x2baa
00002ba5: JUMPI
00002ba6: PUSH1 0x00
00002ba8: DUP1
00002ba9: REVERT
00002baa: JUMPDEST
00002bab: DUP3
00002bac: DUP7
00002bad: ADD
00002bae: JUMPDEST
00002baf: DUP5
00002bb0: DUP2
00002bb1: LT
00002bb2: ISZERO
00002bb3: PUSH2 0x2bce
00002bb6: JUMPI
00002bb7: DUP1
00002bb8: CALLDATALOAD
00002bb9: PUSH2 0x2bc1
00002bbc: DUP2
00002bbd: PUSH2 0x2b50
00002bc0: JUMP
00002bc1: JUMPDEST
00002bc2: DUP4
00002bc3: MSTORE
00002bc4: SWAP2
00002bc5: DUP4
00002bc6: ADD
00002bc7: SWAP2
00002bc8: DUP4
00002bc9: ADD
00002bca: PUSH2 0x2bae
00002bcd: JUMP
00002bce: JUMPDEST
00002bcf: POP
00002bd0: SWAP7
00002bd1: SWAP6
00002bd2: POP
00002bd3: POP
00002bd4: POP
00002bd5: POP
00002bd6: POP
00002bd7: POP
00002bd8: JUMP
00002bd9: JUMPDEST
00002bda: PUSH1 0x00
00002bdc: PUSH8 0xffffffffffffffff
00002be5: DUP3
00002be6: GT
00002be7: ISZERO
00002be8: PUSH2 0x2bf3
00002beb: JUMPI
00002bec: PUSH2 0x2bf3
00002bef: PUSH2 0x2acc
00002bf2: JUMP
00002bf3: JUMPDEST
00002bf4: POP
00002bf5: PUSH1 0x1f
00002bf7: ADD
00002bf8: PUSH1 0x1f
00002bfa: NOT
00002bfb: AND
00002bfc: PUSH1 0x20
00002bfe: ADD
00002bff: SWAP1
00002c00: JUMP
00002c01: JUMPDEST
00002c02: PUSH1 0x00
00002c04: DUP3
00002c05: PUSH1 0x1f
00002c07: DUP4
00002c08: ADD
00002c09: SLT
00002c0a: PUSH2 0x2c12
00002c0d: JUMPI
00002c0e: PUSH1 0x00
00002c10: DUP1
00002c11: REVERT
00002c12: JUMPDEST
00002c13: DUP2
00002c14: CALLDATALOAD
00002c15: PUSH2 0x2c20
00002c18: PUSH2 0x2b86
00002c1b: DUP3
00002c1c: PUSH2 0x2bd9
00002c1f: JUMP
00002c20: JUMPDEST
00002c21: DUP2
00002c22: DUP2
00002c23: MSTORE
00002c24: DUP5
00002c25: PUSH1 0x20
00002c27: DUP4
00002c28: DUP7
00002c29: ADD
00002c2a: ADD
00002c2b: GT
00002c2c: ISZERO
00002c2d: PUSH2 0x2c35
00002c30: JUMPI
00002c31: PUSH1 0x00
00002c33: DUP1
00002c34: REVERT
00002c35: JUMPDEST
00002c36: DUP2
00002c37: PUSH1 0x20
00002c39: DUP6
00002c3a: ADD
00002c3b: PUSH1 0x20
00002c3d: DUP4
00002c3e: ADD
00002c3f: CALLDATACOPY
00002c40: PUSH1 0x00
00002c42: SWAP2
00002c43: DUP2
00002c44: ADD
00002c45: PUSH1 0x20
00002c47: ADD
00002c48: SWAP2
00002c49: SWAP1
00002c4a: SWAP2
00002c4b: MSTORE
00002c4c: SWAP4
00002c4d: SWAP3
00002c4e: POP
00002c4f: POP
00002c50: POP
00002c51: JUMP
00002c52: JUMPDEST
00002c53: PUSH1 0x00
00002c55: DUP1
00002c56: PUSH1 0x00
00002c58: PUSH1 0x60
00002c5a: DUP5
00002c5b: DUP7
00002c5c: SUB
00002c5d: SLT
00002c5e: ISZERO
00002c5f: PUSH2 0x2c67
00002c62: JUMPI
00002c63: PUSH1 0x00
00002c65: DUP1
00002c66: REVERT
00002c67: JUMPDEST
00002c68: DUP4
00002c69: CALLDATALOAD
00002c6a: PUSH8 0xffffffffffffffff
00002c73: DUP1
00002c74: DUP3
00002c75: GT
00002c76: ISZERO
00002c77: PUSH2 0x2c7f
00002c7a: JUMPI
00002c7b: PUSH1 0x00
00002c7d: DUP1
00002c7e: REVERT
00002c7f: JUMPDEST
00002c80: PUSH2 0x2c8b
00002c83: DUP8
00002c84: DUP4
00002c85: DUP9
00002c86: ADD
00002c87: PUSH2 0x2b65
00002c8a: JUMP
00002c8b: JUMPDEST
00002c8c: SWAP5
00002c8d: POP
00002c8e: PUSH1 0x20
00002c90: SWAP2
00002c91: POP
00002c92: DUP2
00002c93: DUP7
00002c94: ADD
00002c95: CALLDATALOAD
00002c96: DUP2
00002c97: DUP2
00002c98: GT
00002c99: ISZERO
00002c9a: PUSH2 0x2ca2
00002c9d: JUMPI
00002c9e: PUSH1 0x00
00002ca0: DUP1
00002ca1: REVERT
00002ca2: JUMPDEST
00002ca3: DUP7
00002ca4: ADD
00002ca5: PUSH1 0x1f
00002ca7: DUP2
00002ca8: ADD
00002ca9: DUP9
00002caa: SGT
00002cab: PUSH2 0x2cb3
00002cae: JUMPI
00002caf: PUSH1 0x00
00002cb1: DUP1
00002cb2: REVERT
00002cb3: JUMPDEST
00002cb4: DUP1
00002cb5: CALLDATALOAD
00002cb6: PUSH2 0x2cc1
00002cb9: PUSH2 0x2b86
00002cbc: DUP3
00002cbd: PUSH2 0x2b2c
00002cc0: JUMP
00002cc1: JUMPDEST
00002cc2: DUP2
00002cc3: DUP2
00002cc4: MSTORE
00002cc5: PUSH1 0x05
00002cc7: SWAP2
00002cc8: SWAP1
00002cc9: SWAP2
00002cca: SHL
00002ccb: DUP3
00002ccc: ADD
00002ccd: DUP5
00002cce: ADD
00002ccf: SWAP1
00002cd0: DUP5
00002cd1: DUP2
00002cd2: ADD
00002cd3: SWAP1
00002cd4: DUP11
00002cd5: DUP4
00002cd6: GT
00002cd7: ISZERO
00002cd8: PUSH2 0x2ce0
00002cdb: JUMPI
00002cdc: PUSH1 0x00
00002cde: DUP1
00002cdf: REVERT
00002ce0: JUMPDEST
00002ce1: DUP6
00002ce2: DUP5
00002ce3: ADD
00002ce4: JUMPDEST
00002ce5: DUP4
00002ce6: DUP2
00002ce7: LT
00002ce8: ISZERO
00002ce9: PUSH2 0x2d18
00002cec: JUMPI
00002ced: DUP1
00002cee: CALLDATALOAD
00002cef: DUP7
00002cf0: DUP2
00002cf1: GT
00002cf2: ISZERO
00002cf3: PUSH2 0x2cfc
00002cf6: JUMPI
00002cf7: PUSH1 0x00
00002cf9: DUP1
00002cfa: DUP2
00002cfb: REVERT
00002cfc: JUMPDEST
00002cfd: PUSH2 0x2d0a
00002d00: DUP14
00002d01: DUP10
00002d02: DUP4
00002d03: DUP10
00002d04: ADD
00002d05: ADD
00002d06: PUSH2 0x2c01
00002d09: JUMP
00002d0a: JUMPDEST
00002d0b: DUP5
00002d0c: MSTORE
00002d0d: POP
00002d0e: SWAP2
00002d0f: DUP7
00002d10: ADD
00002d11: SWAP2
00002d12: DUP7
00002d13: ADD
00002d14: PUSH2 0x2ce4
00002d17: JUMP
00002d18: JUMPDEST
00002d19: POP
00002d1a: SWAP7
00002d1b: POP
00002d1c: POP
00002d1d: POP
00002d1e: POP
00002d1f: PUSH1 0x40
00002d21: DUP7
00002d22: ADD
00002d23: CALLDATALOAD
00002d24: SWAP2
00002d25: POP
00002d26: DUP1
00002d27: DUP3
00002d28: GT
00002d29: ISZERO
00002d2a: PUSH2 0x2d32
00002d2d: JUMPI
00002d2e: PUSH1 0x00
00002d30: DUP1
00002d31: REVERT
00002d32: JUMPDEST
00002d33: POP
00002d34: PUSH2 0x2d3f
00002d37: DUP7
00002d38: DUP3
00002d39: DUP8
00002d3a: ADD
00002d3b: PUSH2 0x2c01
00002d3e: JUMP
00002d3f: JUMPDEST
00002d40: SWAP2
00002d41: POP
00002d42: POP
00002d43: SWAP3
00002d44: POP
00002d45: SWAP3
00002d46: POP
00002d47: SWAP3
00002d48: JUMP
00002d49: JUMPDEST
00002d4a: PUSH1 0x00
00002d4c: PUSH1 0x20
00002d4e: DUP3
00002d4f: DUP5
00002d50: SUB
00002d51: SLT
00002d52: ISZERO
00002d53: PUSH2 0x2d5b
00002d56: JUMPI
00002d57: PUSH1 0x00
00002d59: DUP1
00002d5a: REVERT
00002d5b: JUMPDEST
00002d5c: POP
00002d5d: CALLDATALOAD
00002d5e: SWAP2
00002d5f: SWAP1
00002d60: POP
00002d61: JUMP
00002d62: JUMPDEST
00002d63: PUSH1 0x00
00002d65: PUSH1 0x20
00002d67: DUP3
00002d68: DUP5
00002d69: SUB
00002d6a: SLT
00002d6b: ISZERO
00002d6c: PUSH2 0x2d74
00002d6f: JUMPI
00002d70: PUSH1 0x00
00002d72: DUP1
00002d73: REVERT
00002d74: JUMPDEST
00002d75: DUP2
00002d76: CALLDATALOAD
00002d77: PUSH2 0x270a
00002d7a: DUP2
00002d7b: PUSH2 0x2b50
00002d7e: JUMP
00002d7f: JUMPDEST
00002d80: PUSH1 0x00
00002d82: DUP1
00002d83: PUSH1 0x00
00002d85: PUSH1 0x60
00002d87: DUP5
00002d88: DUP7
00002d89: SUB
00002d8a: SLT
00002d8b: ISZERO
00002d8c: PUSH2 0x2d94
00002d8f: JUMPI
00002d90: PUSH1 0x00
00002d92: DUP1
00002d93: REVERT
00002d94: JUMPDEST
00002d95: DUP4
00002d96: CALLDATALOAD
00002d97: PUSH2 0x2d9f
00002d9a: DUP2
00002d9b: PUSH2 0x2b50
00002d9e: JUMP
00002d9f: JUMPDEST
00002da0: SWAP3
00002da1: POP
00002da2: PUSH1 0x20
00002da4: DUP5
00002da5: ADD
00002da6: CALLDATALOAD
00002da7: SWAP2
00002da8: POP
00002da9: PUSH1 0x40
00002dab: DUP5
00002dac: ADD
00002dad: CALLDATALOAD
00002dae: PUSH2 0x2db6
00002db1: DUP2
00002db2: PUSH2 0x2b50
00002db5: JUMP
00002db6: JUMPDEST
00002db7: DUP1
00002db8: SWAP2
00002db9: POP
00002dba: POP
00002dbb: SWAP3
00002dbc: POP
00002dbd: SWAP3
00002dbe: POP
00002dbf: SWAP3
00002dc0: JUMP
00002dc1: JUMPDEST
00002dc2: PUSH1 0x00
00002dc4: DUP1
00002dc5: PUSH1 0x40
00002dc7: DUP4
00002dc8: DUP6
00002dc9: SUB
00002dca: SLT
00002dcb: ISZERO
00002dcc: PUSH2 0x2dd4
00002dcf: JUMPI
00002dd0: PUSH1 0x00
00002dd2: DUP1
00002dd3: REVERT
00002dd4: JUMPDEST
00002dd5: DUP3
00002dd6: CALLDATALOAD
00002dd7: PUSH2 0x2ddf
00002dda: DUP2
00002ddb: PUSH2 0x2b50
00002dde: JUMP
00002ddf: JUMPDEST
00002de0: SWAP5
00002de1: PUSH1 0x20
00002de3: SWAP4
00002de4: SWAP1
00002de5: SWAP4
00002de6: ADD
00002de7: CALLDATALOAD
00002de8: SWAP4
00002de9: POP
00002dea: POP
00002deb: POP
00002dec: JUMP
00002ded: JUMPDEST
00002dee: PUSH1 0x00
00002df0: DUP1
00002df1: PUSH1 0x40
00002df3: DUP4
00002df4: DUP6
00002df5: SUB
00002df6: SLT
00002df7: ISZERO
00002df8: PUSH2 0x2e00
00002dfb: JUMPI
00002dfc: PUSH1 0x00
00002dfe: DUP1
00002dff: REVERT
00002e00: JUMPDEST
00002e01: DUP3
00002e02: CALLDATALOAD
00002e03: PUSH2 0x2e0b
00002e06: DUP2
00002e07: PUSH2 0x2b50
00002e0a: JUMP
00002e0b: JUMPDEST
00002e0c: SWAP2
00002e0d: POP
00002e0e: PUSH1 0x20
00002e10: DUP4
00002e11: ADD
00002e12: CALLDATALOAD
00002e13: PUSH2 0x2e1b
00002e16: DUP2
00002e17: PUSH2 0x2b50
00002e1a: JUMP
00002e1b: JUMPDEST
00002e1c: DUP1
00002e1d: SWAP2
00002e1e: POP
00002e1f: POP
00002e20: SWAP3
00002e21: POP
00002e22: SWAP3
00002e23: SWAP1
00002e24: POP
00002e25: JUMP
00002e26: JUMPDEST
00002e27: PUSH1 0x00
00002e29: DUP1
00002e2a: PUSH1 0x40
00002e2c: DUP4
00002e2d: DUP6
00002e2e: SUB
00002e2f: SLT
00002e30: ISZERO
00002e31: PUSH2 0x2e39
00002e34: JUMPI
00002e35: PUSH1 0x00
00002e37: DUP1
00002e38: REVERT
00002e39: JUMPDEST
00002e3a: DUP3
00002e3b: CALLDATALOAD
00002e3c: PUSH2 0x2e44
00002e3f: DUP2
00002e40: PUSH2 0x2b50
00002e43: JUMP
00002e44: JUMPDEST
00002e45: SWAP2
00002e46: POP
00002e47: PUSH1 0x20
00002e49: DUP4
00002e4a: ADD
00002e4b: CALLDATALOAD
00002e4c: PUSH8 0xffffffffffffffff
00002e55: DUP2
00002e56: GT
00002e57: ISZERO
00002e58: PUSH2 0x2e60
00002e5b: JUMPI
00002e5c: PUSH1 0x00
00002e5e: DUP1
00002e5f: REVERT
00002e60: JUMPDEST
00002e61: PUSH2 0x2e6c
00002e64: DUP6
00002e65: DUP3
00002e66: DUP7
00002e67: ADD
00002e68: PUSH2 0x2c01
00002e6b: JUMP
00002e6c: JUMPDEST
00002e6d: SWAP2
00002e6e: POP
00002e6f: POP
00002e70: SWAP3
00002e71: POP
00002e72: SWAP3
00002e73: SWAP1
00002e74: POP
00002e75: JUMP
00002e76: JUMPDEST
00002e77: PUSH1 0x00
00002e79: DUP1
00002e7a: PUSH1 0x40
00002e7c: DUP4
00002e7d: DUP6
00002e7e: SUB
00002e7f: SLT
00002e80: ISZERO
00002e81: PUSH2 0x2e89
00002e84: JUMPI
00002e85: PUSH1 0x00
00002e87: DUP1
00002e88: REVERT
00002e89: JUMPDEST
00002e8a: DUP3
00002e8b: CALLDATALOAD
00002e8c: PUSH8 0xffffffffffffffff
00002e95: DUP2
00002e96: GT
00002e97: ISZERO
00002e98: PUSH2 0x2ea0
00002e9b: JUMPI
00002e9c: PUSH1 0x00
00002e9e: DUP1
00002e9f: REVERT
00002ea0: JUMPDEST
00002ea1: PUSH2 0x2eac
00002ea4: DUP6
00002ea5: DUP3
00002ea6: DUP7
00002ea7: ADD
00002ea8: PUSH2 0x2b65
00002eab: JUMP
00002eac: JUMPDEST
00002ead: SWAP3
00002eae: POP
00002eaf: POP
00002eb0: PUSH1 0x20
00002eb2: DUP4
00002eb3: ADD
00002eb4: CALLDATALOAD
00002eb5: PUSH2 0x2e1b
00002eb8: DUP2
00002eb9: PUSH2 0x2b50
00002ebc: JUMP
00002ebd: JUMPDEST
00002ebe: DUP1
00002ebf: ISZERO
00002ec0: ISZERO
00002ec1: DUP2
00002ec2: EQ
00002ec3: PUSH2 0x0b33
00002ec6: JUMPI
00002ec7: PUSH1 0x00
00002ec9: DUP1
00002eca: REVERT
00002ecb: JUMPDEST
00002ecc: PUSH1 0x00
00002ece: PUSH1 0x20
00002ed0: DUP3
00002ed1: DUP5
00002ed2: SUB
00002ed3: SLT
00002ed4: ISZERO
00002ed5: PUSH2 0x2edd
00002ed8: JUMPI
00002ed9: PUSH1 0x00
00002edb: DUP1
00002edc: REVERT
00002edd: JUMPDEST
00002ede: DUP2
00002edf: CALLDATALOAD
00002ee0: PUSH2 0x270a
00002ee3: DUP2
00002ee4: PUSH2 0x2ebd
00002ee7: JUMP
00002ee8: JUMPDEST
00002ee9: PUSH1 0x00
00002eeb: DUP1
00002eec: PUSH1 0x00
00002eee: PUSH1 0x60
00002ef0: DUP5
00002ef1: DUP7
00002ef2: SUB
00002ef3: SLT
00002ef4: ISZERO
00002ef5: PUSH2 0x2efd
00002ef8: JUMPI
00002ef9: PUSH1 0x00
00002efb: DUP1
00002efc: REVERT
00002efd: JUMPDEST
00002efe: DUP4
00002eff: CALLDATALOAD
00002f00: PUSH2 0x2f08
00002f03: DUP2
00002f04: PUSH2 0x2b50
00002f07: JUMP
00002f08: JUMPDEST
00002f09: SWAP3
00002f0a: POP
00002f0b: PUSH1 0x20
00002f0d: DUP5
00002f0e: ADD
00002f0f: CALLDATALOAD
00002f10: PUSH2 0x2f18
00002f13: DUP2
00002f14: PUSH2 0x2b50
00002f17: JUMP
00002f18: JUMPDEST
00002f19: SWAP3
00002f1a: SWAP6
00002f1b: SWAP3
00002f1c: SWAP5
00002f1d: POP
00002f1e: POP
00002f1f: POP
00002f20: PUSH1 0x40
00002f22: SWAP2
00002f23: SWAP1
00002f24: SWAP2
00002f25: ADD
00002f26: CALLDATALOAD
00002f27: SWAP1
00002f28: JUMP
00002f29: JUMPDEST
00002f2a: PUSH1 0x00
00002f2c: DUP1
00002f2d: PUSH1 0x00
00002f2f: DUP1
00002f30: PUSH1 0x00
00002f32: DUP1
00002f33: PUSH1 0xc0
00002f35: DUP8
00002f36: DUP10
00002f37: SUB
00002f38: SLT
00002f39: ISZERO
00002f3a: PUSH2 0x2f42
00002f3d: JUMPI
00002f3e: PUSH1 0x00
00002f40: DUP1
00002f41: REVERT
00002f42: JUMPDEST
00002f43: DUP7
00002f44: MLOAD
00002f45: PUSH2 0x2f4d
00002f48: DUP2
00002f49: PUSH2 0x2b50
00002f4c: JUMP
00002f4d: JUMPDEST
00002f4e: PUSH1 0x20
00002f50: DUP9
00002f51: ADD
00002f52: MLOAD
00002f53: PUSH1 0x40
00002f55: DUP10
00002f56: ADD
00002f57: MLOAD
00002f58: SWAP2
00002f59: SWAP8
00002f5a: POP
00002f5b: SWAP6
00002f5c: POP
00002f5d: PUSH2 0x2f65
00002f60: DUP2
00002f61: PUSH2 0x2b50
00002f64: JUMP
00002f65: JUMPDEST
00002f66: PUSH1 0x60
00002f68: DUP9
00002f69: ADD
00002f6a: MLOAD
00002f6b: SWAP1
00002f6c: SWAP5
00002f6d: POP
00002f6e: PUSH2 0x2f76
00002f71: DUP2
00002f72: PUSH2 0x2b50
00002f75: JUMP
00002f76: JUMPDEST
00002f77: PUSH1 0x80
00002f79: DUP9
00002f7a: ADD
00002f7b: MLOAD
00002f7c: SWAP1
00002f7d: SWAP4
00002f7e: POP
00002f7f: PUSH2 0x2f87
00002f82: DUP2
00002f83: PUSH2 0x2b50
00002f86: JUMP
00002f87: JUMPDEST
00002f88: DUP1
00002f89: SWAP3
00002f8a: POP
00002f8b: POP
00002f8c: PUSH1 0xa0
00002f8e: DUP8
00002f8f: ADD
00002f90: MLOAD
00002f91: SWAP1
00002f92: POP
00002f93: SWAP3
00002f94: SWAP6
00002f95: POP
00002f96: SWAP3
00002f97: SWAP6
00002f98: POP
00002f99: SWAP3
00002f9a: SWAP6
00002f9b: JUMP
00002f9c: JUMPDEST
00002f9d: PUSH1 0x00
00002f9f: JUMPDEST
00002fa0: DUP4
00002fa1: DUP2
00002fa2: LT
00002fa3: ISZERO
00002fa4: PUSH2 0x2fb7
00002fa7: JUMPI
00002fa8: DUP2
00002fa9: DUP2
00002faa: ADD
00002fab: MLOAD
00002fac: DUP4
00002fad: DUP3
00002fae: ADD
00002faf: MSTORE
00002fb0: PUSH1 0x20
00002fb2: ADD
00002fb3: PUSH2 0x2f9f
00002fb6: JUMP
00002fb7: JUMPDEST
00002fb8: POP
00002fb9: POP
00002fba: PUSH1 0x00
00002fbc: SWAP2
00002fbd: ADD
00002fbe: MSTORE
00002fbf: JUMP
00002fc0: JUMPDEST
00002fc1: DUP3
00002fc2: DUP2
00002fc3: MSTORE
00002fc4: PUSH1 0x00
00002fc6: DUP3
00002fc7: MLOAD
00002fc8: PUSH2 0x2fd8
00002fcb: DUP2
00002fcc: PUSH1 0x20
00002fce: DUP6
00002fcf: ADD
00002fd0: PUSH1 0x20
00002fd2: DUP8
00002fd3: ADD
00002fd4: PUSH2 0x2f9c
00002fd7: JUMP
00002fd8: JUMPDEST
00002fd9: SWAP2
00002fda: SWAP1
00002fdb: SWAP2
00002fdc: ADD
00002fdd: PUSH1 0x20
00002fdf: ADD
00002fe0: SWAP4
00002fe1: SWAP3
00002fe2: POP
00002fe3: POP
00002fe4: POP
00002fe5: JUMP
00002fe6: JUMPDEST
00002fe7: PUSH1 0x00
00002fe9: PUSH1 0x20
00002feb: DUP3
00002fec: DUP5
00002fed: SUB
00002fee: SLT
00002fef: ISZERO
00002ff0: PUSH2 0x2ff8
00002ff3: JUMPI
00002ff4: PUSH1 0x00
00002ff6: DUP1
00002ff7: REVERT
00002ff8: JUMPDEST
00002ff9: POP
00002ffa: MLOAD
00002ffb: SWAP2
00002ffc: SWAP1
00002ffd: POP
00002ffe: JUMP
00002fff: JUMPDEST
00003000: PUSH1 0x00
00003002: PUSH1 0x20
00003004: DUP3
00003005: DUP5
00003006: SUB
00003007: SLT
00003008: ISZERO
00003009: PUSH2 0x3011
0000300c: JUMPI
0000300d: PUSH1 0x00
0000300f: DUP1
00003010: REVERT
00003011: JUMPDEST
00003012: DUP2
00003013: MLOAD
00003014: PUSH2 0x270a
00003017: DUP2
00003018: PUSH2 0x2b50
0000301b: JUMP
0000301c: JUMPDEST
0000301d: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000
0000303e: PUSH1 0x00
00003040: MSTORE
00003041: PUSH1 0x32
00003043: PUSH1 0x04
00003045: MSTORE
00003046: PUSH1 0x24
00003048: PUSH1 0x00
0000304a: REVERT
0000304b: JUMPDEST
0000304c: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000
0000306d: PUSH1 0x00
0000306f: MSTORE
00003070: PUSH1 0x11
00003072: PUSH1 0x04
00003074: MSTORE
00003075: PUSH1 0x24
00003077: PUSH1 0x00
00003079: REVERT
0000307a: JUMPDEST
0000307b: PUSH1 0x00
0000307d: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
0000309e: DUP3
0000309f: SUB
000030a0: PUSH2 0x30ab
000030a3: JUMPI
000030a4: PUSH2 0x30ab
000030a7: PUSH2 0x304b
000030aa: JUMP
000030ab: JUMPDEST
000030ac: POP
000030ad: PUSH1 0x01
000030af: ADD
000030b0: SWAP1
000030b1: JUMP
000030b2: JUMPDEST
000030b3: PUSH1 0x00
000030b5: PUSH1 0x20
000030b7: DUP3
000030b8: DUP5
000030b9: SUB
000030ba: SLT
000030bb: ISZERO
000030bc: PUSH2 0x30c4
000030bf: JUMPI
000030c0: PUSH1 0x00
000030c2: DUP1
000030c3: REVERT
000030c4: JUMPDEST
000030c5: DUP2
000030c6: MLOAD
000030c7: PUSH8 0xffffffffffffffff
000030d0: DUP2
000030d1: GT
000030d2: ISZERO
000030d3: PUSH2 0x30db
000030d6: JUMPI
000030d7: PUSH1 0x00
000030d9: DUP1
000030da: REVERT
000030db: JUMPDEST
000030dc: DUP3
000030dd: ADD
000030de: PUSH1 0x1f
000030e0: DUP2
000030e1: ADD
000030e2: DUP5
000030e3: SGT
000030e4: PUSH2 0x30ec
000030e7: JUMPI
000030e8: PUSH1 0x00
000030ea: DUP1
000030eb: REVERT
000030ec: JUMPDEST
000030ed: DUP1
000030ee: MLOAD
000030ef: PUSH2 0x30fa
000030f2: PUSH2 0x2b86
000030f5: DUP3
000030f6: PUSH2 0x2bd9
000030f9: JUMP
000030fa: JUMPDEST
000030fb: DUP2
000030fc: DUP2
000030fd: MSTORE
000030fe: DUP6
000030ff: PUSH1 0x20
00003101: DUP4
00003102: DUP6
00003103: ADD
00003104: ADD
00003105: GT
00003106: ISZERO
00003107: PUSH2 0x310f
0000310a: JUMPI
0000310b: PUSH1 0x00
0000310d: DUP1
0000310e: REVERT
0000310f: JUMPDEST
00003110: PUSH2 0x2853
00003113: DUP3
00003114: PUSH1 0x20
00003116: DUP4
00003117: ADD
00003118: PUSH1 0x20
0000311a: DUP7
0000311b: ADD
0000311c: PUSH2 0x2f9c
0000311f: JUMP
00003120: JUMPDEST
00003121: PUSH1 0x00
00003123: PUSH1 0x20
00003125: DUP3
00003126: DUP5
00003127: SUB
00003128: SLT
00003129: ISZERO
0000312a: PUSH2 0x3132
0000312d: JUMPI
0000312e: PUSH1 0x00
00003130: DUP1
00003131: REVERT
00003132: JUMPDEST
00003133: DUP2
00003134: MLOAD
00003135: PUSH1 0xff
00003137: DUP2
00003138: AND
00003139: DUP2
0000313a: EQ
0000313b: PUSH2 0x270a
0000313e: JUMPI
0000313f: PUSH1 0x00
00003141: DUP1
00003142: REVERT
00003143: JUMPDEST
00003144: PUSH1 0x00
00003146: DUP2
00003147: MLOAD
00003148: DUP1
00003149: DUP5
0000314a: MSTORE
0000314b: PUSH2 0x315b
0000314e: DUP2
0000314f: PUSH1 0x20
00003151: DUP7
00003152: ADD
00003153: PUSH1 0x20
00003155: DUP7
00003156: ADD
00003157: PUSH2 0x2f9c
0000315a: JUMP
0000315b: JUMPDEST
0000315c: PUSH1 0x1f
0000315e: ADD
0000315f: PUSH1 0x1f
00003161: NOT
00003162: AND
00003163: SWAP3
00003164: SWAP1
00003165: SWAP3
00003166: ADD
00003167: PUSH1 0x20
00003169: ADD
0000316a: SWAP3
0000316b: SWAP2
0000316c: POP
0000316d: POP
0000316e: JUMP
0000316f: JUMPDEST
00003170: PUSH1 0x00
00003172: PUSH1 0x01
00003174: PUSH1 0x01
00003176: PUSH1 0xa0
00003178: SHL
00003179: SUB
0000317a: DUP1
0000317b: DUP10
0000317c: AND
0000317d: DUP4
0000317e: MSTORE
0000317f: DUP8
00003180: PUSH1 0x20
00003182: DUP5
00003183: ADD
00003184: MSTORE
00003185: DUP1
00003186: DUP8
00003187: AND
00003188: PUSH1 0x40
0000318a: DUP5
0000318b: ADD
0000318c: MSTORE
0000318d: POP
0000318e: PUSH1 0xc0
00003190: PUSH1 0x60
00003192: DUP4
00003193: ADD
00003194: MSTORE
00003195: PUSH2 0x31a1
00003198: PUSH1 0xc0
0000319a: DUP4
0000319b: ADD
0000319c: DUP7
0000319d: PUSH2 0x3143
000031a0: JUMP
000031a1: JUMPDEST
000031a2: DUP3
000031a3: DUP2
000031a4: SUB
000031a5: PUSH1 0x80
000031a7: DUP5
000031a8: ADD
000031a9: MSTORE
000031aa: PUSH2 0x31b3
000031ad: DUP2
000031ae: DUP7
000031af: PUSH2 0x3143
000031b2: JUMP
000031b3: JUMPDEST
000031b4: SWAP2
000031b5: POP
000031b6: POP
000031b7: PUSH1 0xff
000031b9: DUP4
000031ba: AND
000031bb: PUSH1 0xa0
000031bd: DUP4
000031be: ADD
000031bf: MSTORE
000031c0: SWAP8
000031c1: SWAP7
000031c2: POP
000031c3: POP
000031c4: POP
000031c5: POP
000031c6: POP
000031c7: POP
000031c8: POP
000031c9: JUMP
000031ca: JUMPDEST
000031cb: PUSH1 0x20
000031cd: DUP2
000031ce: MSTORE
000031cf: PUSH1 0x00
000031d1: PUSH2 0x270a
000031d4: PUSH1 0x20
000031d6: DUP4
000031d7: ADD
000031d8: DUP5
000031d9: PUSH2 0x3143
000031dc: JUMP
000031dd: JUMPDEST
000031de: PUSH1 0x00
000031e0: PUSH1 0x20
000031e2: DUP3
000031e3: DUP5
000031e4: SUB
000031e5: SLT
000031e6: ISZERO
000031e7: PUSH2 0x31ef
000031ea: JUMPI
000031eb: PUSH1 0x00
000031ed: DUP1
000031ee: REVERT
000031ef: JUMPDEST
000031f0: DUP2
000031f1: MLOAD
000031f2: PUSH2 0x270a
000031f5: DUP2
000031f6: PUSH2 0x2ebd
000031f9: JUMP
000031fa: JUMPDEST
000031fb: DUP1
000031fc: DUP3
000031fd: ADD
000031fe: DUP1
000031ff: DUP3
00003200: GT
00003201: ISZERO
00003202: PUSH2 0x2294
00003205: JUMPI
00003206: PUSH2 0x2294
00003209: PUSH2 0x304b
0000320c: JUMP
0000320d: JUMPDEST
0000320e: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000
0000322f: PUSH1 0x00
00003231: MSTORE
00003232: PUSH1 0x21
00003234: PUSH1 0x04
00003236: MSTORE
00003237: PUSH1 0x24
00003239: PUSH1 0x00
0000323b: REVERT
0000323c: JUMPDEST
0000323d: PUSH1 0x00
0000323f: DUP3
00003240: MLOAD
00003241: PUSH2 0x324e
00003244: DUP2
00003245: DUP5
00003246: PUSH1 0x20
00003248: DUP8
00003249: ADD
0000324a: PUSH2 0x2f9c
0000324d: JUMP
0000324e: JUMPDEST
0000324f: SWAP2
00003250: SWAP1
00003251: SWAP2
00003252: ADD
00003253: SWAP3
00003254: SWAP2
00003255: POP
00003256: POP
00003257: JUMP
00003258: INVALID
00003259: COINBASE
0000325a: PUSH5 0x6472657373
00003260: GASPRICE
00003261: KECCAK256
00003262: PUSH13 0x6f772d6c6576656c2064656c65
00003270: PUSH8 0x6174652063616c6c
00003279: KECCAK256
0000327a: PUSH7 0x61696c6564a264
00003282: PUSH10 0x70667358221220464d6d
0000328d: UNKNOWN(0xE0)
0000328e: UNKNOWN(0x2D)
0000328f: COINBASE
00003290: UNKNOWN(0xCA)
00003291: UNKNOWN(0xBB)
00003292: UNKNOWN(0xBE)
00003293: UNKNOWN(0xF7)
00003294: MCOPY
00003295: UNKNOWN(0xBD)
00003296: UNKNOWN(0xD4)
00003297: MLOAD
00003298: SWAP8
00003299: BLOCKHASH
0000329a: UNKNOWN(0x4D)
0000329b: DUP6
0000329c: SLT
0000329d: UNKNOWN(0xC5)
0000329e: UNKNOWN(0xCC)
0000329f: UNKNOWN(0xE8)
000032a0: PUSH30

Findings

validated = confirmed for call sinks; sink observed for others
Severity Category Tool Title Confidence Validated Confirmed Details
critical upgradeability detector Untrusted DELEGATECALL target reachable 70 no no
view
trace_id: 0x1dd3ee4822031b2d58685ebed03f40a9386d9fccda748ef5e18be47ef76f3625
validation_json
{
    "sink": "DELEGATECALL",
    "errors": 0,
    "status": "unknown",
    "attempts": 192,
    "trace_id": "0x1dd3ee4822031b2d58685ebed03f40a9386d9fccda748ef5e18be47ef76f3625",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": null,
    "matched_probe": null,
    "target_varies": null,
    "classification": "no_sink"
}
witness_json
{
    "notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
    "constraints": [],
    "entrypoints": [
        {
            "calldata": "0xc6c8788c",
            "selector": "0xc6c8788c",
            "calldata_variants": [
                "0xc6c8788c",
                "0xc6c8788c0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf213159c",
            "selector": "0xf213159c",
            "calldata_variants": [
                "0xf213159c",
                "0xf213159c0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf4a120f7",
            "selector": "0xf4a120f7",
            "calldata_variants": [
                "0xf4a120f7",
                "0xf4a120f70000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xbb6f2e06",
            "selector": "0xbb6f2e06",
            "calldata_variants": [
                "0xbb6f2e06",
                "0xbb6f2e060000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xc12327b8",
            "selector": "0xc12327b8",
            "calldata_variants": [
                "0xc12327b8",
                "0xc12327b80000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xb187bd26",
            "selector": "0xb187bd26",
            "calldata_variants": [
                "0xb187bd26",
                "0xb187bd260000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xb6e27136",
            "selector": "0xb6e27136",
            "calldata_variants": [
                "0xb6e27136",
                "0xb6e271360000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xb78103e9",
            "selector": "0xb78103e9",
            "calldata_variants": [
                "0xb78103e9",
                "0xb78103e90000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 10231,
            "opcode": "DELEGATECALL",
            "returndata_checked": null,
            "value_expression_category": "n/a",
            "target_expression_category": "computed"
        }
    ],
    "guards_detected": [],
    "delegatecall_count": 1,
    "untrusted_delegatecall_count": 1
}
high other detector Untrusted CALL target/value reachable 60 no no
view
trace_id: 0x52869f2dfb048b76c9257fe39cf3bd9d7bea9a53637aad8e835c7092790329b5
call_targets: 0xa8372d6ff00d48a25baa1af16d6a86c936708f4e
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0x52869f2dfb048b76c9257fe39cf3bd9d7bea9a53637aad8e835c7092790329b5",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0xa8372d6ff00d48a25baa1af16d6a86c936708f4e"
    ],
    "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": "0xc6c8788c",
            "selector": "0xc6c8788c",
            "calldata_variants": [
                "0xc6c8788c",
                "0xc6c8788c0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf213159c",
            "selector": "0xf213159c",
            "calldata_variants": [
                "0xf213159c",
                "0xf213159c0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf4a120f7",
            "selector": "0xf4a120f7",
            "calldata_variants": [
                "0xf4a120f7",
                "0xf4a120f70000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xbb6f2e06",
            "selector": "0xbb6f2e06",
            "calldata_variants": [
                "0xbb6f2e06",
                "0xbb6f2e060000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xc12327b8",
            "selector": "0xc12327b8",
            "calldata_variants": [
                "0xc12327b8",
                "0xc12327b80000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xb187bd26",
            "selector": "0xb187bd26",
            "calldata_variants": [
                "0xb187bd26",
                "0xb187bd260000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xb6e27136",
            "selector": "0xb6e27136",
            "calldata_variants": [
                "0xb6e27136",
                "0xb6e271360000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xb78103e9",
            "selector": "0xb78103e9",
            "calldata_variants": [
                "0xb78103e9",
                "0xb78103e90000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 10689,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "call_count": 1,
    "guards_detected": [],
    "untrusted_call_count": 1
}
high other detector ETH value transfer possible 55 no no
view
trace_id: 0x52869f2dfb048b76c9257fe39cf3bd9d7bea9a53637aad8e835c7092790329b5
call_targets: 0xa8372d6ff00d48a25baa1af16d6a86c936708f4e
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0x52869f2dfb048b76c9257fe39cf3bd9d7bea9a53637aad8e835c7092790329b5",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0xa8372d6ff00d48a25baa1af16d6a86c936708f4e"
    ],
    "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": "0xc6c8788c",
            "selector": "0xc6c8788c",
            "calldata_variants": [
                "0xc6c8788c",
                "0xc6c8788c0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf213159c",
            "selector": "0xf213159c",
            "calldata_variants": [
                "0xf213159c",
                "0xf213159c0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf4a120f7",
            "selector": "0xf4a120f7",
            "calldata_variants": [
                "0xf4a120f7",
                "0xf4a120f70000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xbb6f2e06",
            "selector": "0xbb6f2e06",
            "calldata_variants": [
                "0xbb6f2e06",
                "0xbb6f2e060000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xc12327b8",
            "selector": "0xc12327b8",
            "calldata_variants": [
                "0xc12327b8",
                "0xc12327b80000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xb187bd26",
            "selector": "0xb187bd26",
            "calldata_variants": [
                "0xb187bd26",
                "0xb187bd260000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xb6e27136",
            "selector": "0xb6e27136",
            "calldata_variants": [
                "0xb6e27136",
                "0xb6e271360000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xb78103e9",
            "selector": "0xb78103e9",
            "calldata_variants": [
                "0xb78103e9",
                "0xb78103e90000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 10689,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "eth_value_calls": 1,
    "guards_detected": []
}
high other codex Deposits credit the requested amount instead of the amount actually received 85 no
view
evidence_json
{
    "evidence": "`_initiateDeposit` transfers tokens in and then emits `DepositToken(..., _amount)` without checking the balance delta, so accounting assumes the full requested amount always arrived.",
    "locations": [
        "contracts/bridge/v2/core/L1/predicates/L1ERC20Predicate.sol:155",
        "contracts/bridge/v2/core/L1/predicates/L1ERC20Predicate.sol:161",
        "contracts/bridge/v2/core/L1/predicates/L1ERC20Predicate.sol:165"
    ],
    "recommendation": "Track the bridge's balance before and after `safeTransferFrom` and use the actual received amount in the deposit message, or explicitly reject fee-on-transfer/rebasing tokens.",
    "exploit_scenario": "If a mapped token charges transfer fees, rebases, or otherwise delivers less than `_amount`, a user can deposit 100 tokens while the contract only receives 90. The bridge still emits a deposit message for 100, so the remote side can mint/release 100. On withdrawal, the attacker can redeem the full 100 and drain 10 tokens from pooled collateral or make later withdrawals insolvent."
}
medium auth codex Withdrawal signatures are replayable across predicate instances on the same chain 75 no
view
evidence_json
{
    "evidence": "`syncWithdraw` computes `messageHash = keccak256(abi.encodePacked(block.chainid, _data))` and uses that for signature recovery. The contract address is never bound into the signed message, while replay protection is only `orderExecuted[from][orderId]` in local storage.",
    "locations": [
        "contracts/bridge/v2/core/L1/predicates/L1ERC20Predicate.sol:82",
        "contracts/bridge/v2/core/L1/predicates/L1ERC20Predicate.sol:86",
        "contracts/bridge/v2/core/L1/predicates/L1ERC20Predicate.sol:97"
    ],
    "recommendation": "Domain-separate signatures with `address(this)` and, preferably, a full EIP-712 domain that includes the bridge/proxy identity and explicit message type.",
    "exploit_scenario": "Validators sign `keccak256(block.chainid, _data)`. Because the signed payload does not include `address(this)` or any bridge-specific domain, the same signatures are valid for any other `L1ERC20Predicate` instance on the same chain that shares the validator registry and token mapping. A legitimate withdrawal approved for one predicate can therefore be replayed against a second funded predicate/proxy, draining its escrow because replay protection (`orderExecuted`) is only local to each contract."
}
medium upgradeability cast DELEGATECALL present 80 no
view
evidence_json
{
    "notes": "delegatecall enables execution in caller context; common in proxies/upgradeable patterns",
    "delegatecall_count": 1
}
info other cast Heavy CALL-family usage 55 no
view
evidence_json
{
    "notes": "large number of CALL/CALLCODE/STATICCALL opcodes; review external call patterns",
    "call_family_count": 16
}