ETH Price: $1,949.92 (-1.56%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To

There are no matching entries

Please try again later

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0x7b176e05...2b0Bc42fC
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
ZenjiViewHelper

Compiler Version
v0.8.33+commit.64118f21

Optimization Enabled:
Yes with 1 runs

Other Settings:
cancun EvmVersion

Contract Source Code (Solidity Standard Json-Input format)

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.33;

import { ILoanManager } from "./interfaces/ILoanManager.sol";
import { IYieldStrategy } from "./interfaces/IYieldStrategy.sol";
import { IERC20 } from "./interfaces/IERC20.sol";

interface IZenjiView {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function getTotalCollateral() external view returns (uint256);
    function loanManager() external view returns (ILoanManager);
    function collateralAsset() external view returns (IERC20);
    function debtAsset() external view returns (IERC20);
    function idle() external view returns (bool);
    function targetLtv() external view returns (uint256);
    function DEADBAND_SPREAD() external view returns (uint256);
    function feeRate() external view returns (uint256);
    function PRECISION() external view returns (uint256);
    function accumulatedFees() external view returns (uint256);
    function lastStrategyBalance() external view returns (uint256);
    function yieldStrategy() external view returns (IYieldStrategy);
    function VIRTUAL_SHARE_OFFSET() external view returns (uint256);
}

/// @title ZenjiViewHelper
/// @notice External helper for view utilities to reduce Zenji bytecode size
contract ZenjiViewHelper {
    function getUserValue(address vault, address user)
        external
        view
        returns (uint256 collateralValue)
    {
        IZenjiView v = IZenjiView(vault);
        uint256 supply = v.totalSupply();
        if (supply == 0) return 0;
        uint256 userShares = v.balanceOf(user);
        uint256 offset = v.VIRTUAL_SHARE_OFFSET();
        return (userShares * (v.getTotalCollateral() + offset)) / (supply + offset);
    }

    function getHealth(address vault) external view returns (int256 health) {
        return IZenjiView(vault).loanManager().getHealth();
    }

    function isRebalanceNeeded(address vault) external view returns (bool needed) {
        ILoanManager lm = IZenjiView(vault).loanManager();
        if (!lm.loanExists()) return false;
        uint256 ltv = lm.getCurrentLTV();
        uint256 target = IZenjiView(vault).targetLtv();
        uint256 deadband = IZenjiView(vault).DEADBAND_SPREAD();
        return ltv < (target - deadband) || ltv > (target + deadband);
    }

    function getLtvBounds(address vault)
        external
        view
        returns (uint256 lowerBand, uint256 upperBand)
    {
        IZenjiView v = IZenjiView(vault);
        uint256 target = v.targetLtv();
        uint256 deadband = v.DEADBAND_SPREAD();
        lowerBand = target - deadband;
        upperBand = target + deadband;
    }

    function getPendingFees(address vault)
        external
        view
        returns (uint256 totalFees, uint256 pendingFees)
    {
        IZenjiView v = IZenjiView(vault);
        IYieldStrategy strategy = v.yieldStrategy();
        uint256 strategyBalance = strategy.balanceOf();
        uint256 lastBalance = v.lastStrategyBalance();
        if (strategyBalance > lastBalance) {
            uint256 delta = strategyBalance - lastBalance;
            pendingFees = (delta * v.feeRate()) / v.PRECISION();
        }

        totalFees = v.accumulatedFees() + pendingFees;
    }

    /// @notice Get total value in collateral asset units (e.g., WBTC satoshis)
    /// @dev Computes all values natively in collateral terms to avoid double conversion errors
    function getTotalCollateralValue(address vault) external view returns (uint256 totalValue) {
        IZenjiView v = IZenjiView(vault);
        ILoanManager lm = v.loanManager();

        if (v.idle()) {
            return v.collateralAsset().balanceOf(vault);
        }

        // Idle collateral in vault (native units)
        totalValue = v.collateralAsset().balanceOf(vault);

        // Net collateral value in loan manager (collateral - debt in collateral terms)
        totalValue += lm.getNetCollateralValue();

        // Yield strategy balance converted to collateral (excluding fees)
        IYieldStrategy strategy = v.yieldStrategy();
        if (address(strategy) != address(0)) {
            uint256 strategyBalance = strategy.balanceOf();
            uint256 accFees = v.accumulatedFees();
            if (strategyBalance > accFees) {
                totalValue += lm.getDebtValue(strategyBalance - accFees);
            }
        }

        // Idle debt asset in vault converted to collateral
        uint256 idleDebt = v.debtAsset().balanceOf(vault);
        if (idleDebt > 0) {
            totalValue += lm.getDebtValue(idleDebt);
        }

        // Raw collateral in loan manager (not yet supplied)
        totalValue += lm.getCollateralBalance();

        // Raw debt asset in loan manager converted to collateral
        uint256 lmDebt = lm.getDebtBalance();
        if (lmDebt > 0) {
            totalValue += lm.getDebtValue(lmDebt);
        }
    }

    /// @notice Get total value in debt asset units (for diagnostics/logging)
    /// @dev This is a diagnostic function - use getTotalCollateralValue for actual accounting
    function getTotalDebtValue(address vault) external view returns (uint256 totalValue) {
        IZenjiView v = IZenjiView(vault);
        ILoanManager lm = v.loanManager();

        if (v.idle()) {
            return lm.getCollateralValue(v.collateralAsset().balanceOf(vault));
        }

        // Idle collateral converted to debt units
        totalValue = lm.getCollateralValue(v.collateralAsset().balanceOf(vault));

        // Position value in debt terms
        if (lm.loanExists()) {
            (uint256 collateral, uint256 debt) = lm.getPositionValues();
            uint256 collateralInDebt = lm.getCollateralValue(collateral);
            if (collateralInDebt > debt) {
                totalValue += collateralInDebt - debt;
            }
        }

        // Strategy balance (already in debt units, minus fees)
        IYieldStrategy strategy = v.yieldStrategy();
        if (address(strategy) != address(0)) {
            uint256 strategyBalance = strategy.balanceOf();
            uint256 accFees = v.accumulatedFees();
            if (strategyBalance > accFees) {
                totalValue += strategyBalance - accFees;
            }
        }

        // Idle debt in vault
        totalValue += v.debtAsset().balanceOf(vault);

        // Raw collateral in loan manager converted to debt
        uint256 lmCollateral = lm.getCollateralBalance();
        if (lmCollateral > 0) {
            totalValue += lm.getCollateralValue(lmCollateral);
        }

        // Raw debt in loan manager
        totalValue += lm.getDebtBalance();
    }

    function yieldCostBasis(address vault) external view returns (uint256) {
        return IZenjiView(vault).yieldStrategy().costBasis();
    }

    function getYieldStrategyStats(address vault)
        external
        view
        returns (
            string memory strategyName,
            uint256 currentValue,
            uint256 costBasis,
            uint256 unrealizedProfit
        )
    {
        IYieldStrategy strategy = IZenjiView(vault).yieldStrategy();
        strategyName = strategy.name();
        currentValue = strategy.balanceOf();
        costBasis = strategy.costBasis();
        unrealizedProfit = strategy.unrealizedProfit();
    }

    function getYieldVaultStats(address vault)
        external
        view
        returns (
            uint256 yieldShares,
            uint256 currentValue,
            uint256 costBasis,
            uint256 unrealizedProfit
        )
    {
        IYieldStrategy strategy = IZenjiView(vault).yieldStrategy();
        return (0, strategy.balanceOf(), strategy.costBasis(), strategy.unrealizedProfit());
    }
}

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.33;

/// @title ILoanManager
/// @notice Interface for loan managers that handle collateralized borrowing
interface ILoanManager {
    // ============ Events ============
    event LoanCreated(uint256 collateral, uint256 debt, uint256 bands);
    event CollateralAdded(uint256 amount);
    event LoanBorrowedMore(uint256 collateral, uint256 debt);
    event LoanRepaid(uint256 amount);
    event CollateralRemoved(uint256 amount);

    // ============ Errors ============
    error Unauthorized();
    error InvalidAddress();
    error InvalidPrice();
    error StaleOracle();
    error DebtNotFullyRepaid();
    error ZeroAmount();
    error TransferFailed();

    // ============ Loan Management Functions ============

    /// @notice Create a new loan with collateral
    /// @param collateral Amount of collateral asset
    /// @param debt Amount of debt asset to borrow
    /// @param bands Number of bands for the loan (if applicable)
    function createLoan(uint256 collateral, uint256 debt, uint256 bands) external;

    /// @notice Add collateral to an existing loan
    /// @param collateral Amount of collateral asset
    function addCollateral(uint256 collateral) external;

    /// @notice Borrow more against existing collateral
    /// @param collateral Additional collateral (can be 0)
    /// @param debt Additional debt to borrow
    function borrowMore(uint256 collateral, uint256 debt) external;

    /// @notice Repay debt
    /// @param amount Amount of debt asset to repay
    function repayDebt(uint256 amount) external;

    /// @notice Remove collateral from the loan
    /// @param amount Amount of collateral asset to remove
    function removeCollateral(uint256 amount) external;

    /// @notice Unified position unwind for both partial and full withdrawals
    /// @dev Pass type(uint256).max for collateralNeeded to fully close the position.
    /// @param collateralNeeded Amount of collateral to free, or type(uint256).max for full close
    function unwindPosition(uint256 collateralNeeded) external;

    // ============ View Functions ============

    /// @notice Get current LTV ratio
    /// @return ltv Current LTV (1e18 = 100%)
    function getCurrentLTV() external view returns (uint256 ltv);

    /// @notice Get current collateral amount
    /// @return collateral Current collateral amount
    function getCurrentCollateral() external view returns (uint256 collateral);

    /// @notice Get current debt amount
    /// @return debt Current debt amount
    function getCurrentDebt() external view returns (uint256 debt);

    /// @notice Collateral asset used by this loan manager
    function collateralAsset() external view returns (address);

    /// @notice Debt asset used by this loan manager
    function debtAsset() external view returns (address);

    /// @notice Get vault health factor
    /// @return health Health factor (positive = healthy)
    function getHealth() external view returns (int256 health);

    /// @notice Check if loan exists
    /// @return exists True if loan exists
    function loanExists() external view returns (bool exists);

    /// @notice Get collateral value in debt asset terms
    /// @param collateralAmount Amount of collateral asset
    /// @return value Value in debt asset (18 decimals unless specified by implementation)
    function getCollateralValue(uint256 collateralAmount) external view returns (uint256 value);

    /// @notice Get debt asset value in collateral terms
    /// @param debtAmount Amount of debt asset
    /// @return value Value in collateral asset (collateral decimals)
    function getDebtValue(uint256 debtAmount) external view returns (uint256 value);

    /// @notice Calculate borrow amount for given collateral and target LTV
    /// @param collateral Amount of collateral asset
    /// @param targetLtv Target LTV (1e18 = 100%)
    /// @return borrowAmount Amount of debt asset to borrow
    function calculateBorrowAmount(uint256 collateral, uint256 targetLtv)
        external
        view
        returns (uint256 borrowAmount);

    /// @notice Calculate health after hypothetical changes
    /// @param dCollateral Change in collateral
    /// @param dDebt Change in debt
    /// @return health Projected health factor
    function healthCalculator(int256 dCollateral, int256 dDebt)
        external
        view
        returns (int256 health);

    /// @notice Get minimum collateral required for a debt amount
    /// @param debt_ Desired debt amount
    /// @param bands Number of bands
    /// @return Minimum collateral required
    function minCollateral(uint256 debt_, uint256 bands) external view returns (uint256);

    /// @notice Get position values (collateral and debt)
    /// @return collateralValue Current collateral value
    /// @return debtValue Current debt value
    function getPositionValues()
        external
        view
        returns (uint256 collateralValue, uint256 debtValue);

    /// @notice Get net collateral value (collateral - debt in collateral terms)
    /// @return value Net value in collateral asset
    function getNetCollateralValue() external view returns (uint256 value);

    /// @notice Check oracle freshness
    function checkOracleFreshness() external view;

    // ============ Token Management ============

    /// @notice Transfer collateral from this contract
    /// @param to Recipient address
    /// @param amount Amount to transfer
    function transferCollateral(address to, uint256 amount) external;

    /// @notice Transfer debt asset from this contract
    /// @param to Recipient address
    /// @param amount Amount to transfer
    function transferDebt(address to, uint256 amount) external;

    /// @notice Get collateral balance of this contract
    /// @return balance Collateral balance
    function getCollateralBalance() external view returns (uint256 balance);

    /// @notice Get debt balance of this contract
    /// @return balance Debt balance
    function getDebtBalance() external view returns (uint256 balance);
}

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.33;

/// @title IYieldStrategy
/// @notice Interface for yield strategies used by Zenji
/// @dev All strategies accept the debt asset from the vault and deploy to yield-generating protocols
interface IYieldStrategy {
    // ============ Events ============

    event Deposited(uint256 debtAssetAmount, uint256 underlyingDeposited);
    event Withdrawn(uint256 debtAssetAmount, uint256 debtAssetReceived);
    event Harvested(uint256 rewardsValue);
    event EmergencyWithdrawn(uint256 debtAssetReceived);
    event StrategyPauseToggled(bool paused, uint256 debtAssetReceived);

    // ============ Errors ============

    error Unauthorized();
    error ZeroAmount();
    error StrategyPaused();
    error SlippageExceeded();
    error TransferFailed();
    error InvalidAddress();

    // ============ Core Functions ============

    /// @notice Deposit debt asset into the yield strategy
    /// @param debtAssetAmount Amount of debt asset to deposit
    /// @return underlyingDeposited Amount deposited into the underlying protocol
    function deposit(uint256 debtAssetAmount) external returns (uint256 underlyingDeposited);

    /// @notice Withdraw debt asset from the yield strategy
    /// @param debtAssetAmount Amount of debt asset to withdraw
    /// @return debtAssetReceived Actual debt asset received (may differ due to slippage)
    function withdraw(uint256 debtAssetAmount) external returns (uint256 debtAssetReceived);

    /// @notice Withdraw all assets from the yield strategy
    /// @return debtAssetReceived Total debt asset received
    function withdrawAll() external returns (uint256 debtAssetReceived);

    /// @notice Harvest rewards and compound them back into the strategy
    /// @return rewardsValue Value of rewards harvested (in debt asset terms)
    function harvest() external returns (uint256 rewardsValue);

    /// @notice Emergency withdraw all assets, bypassing slippage checks
    /// @return debtAssetReceived Total debt asset received
    function emergencyWithdraw() external returns (uint256 debtAssetReceived);

    /// @notice Toggle pause state for the strategy
    /// @dev When pausing, should unwind all deployed assets back to the vault
    /// @return debtAssetReceived Total debt asset received if unwound (0 when unpausing)
    function pauseStrategy() external returns (uint256 debtAssetReceived);

    // ============ View Functions ============

    /// @notice Returns the asset accepted by the strategy (debt asset)
    function asset() external view returns (address);

    /// @notice Returns the underlying asset of the yield protocol (debt asset or swapped asset)
    function underlyingAsset() external view returns (address);

    /// @notice Returns the current value of the strategy holdings in debt asset terms
    function balanceOf() external view returns (uint256);

    /// @notice Returns the total debt asset deposited (cost basis)
    function costBasis() external view returns (uint256);

    /// @notice Returns unrealized profit (current value - cost basis)
    function unrealizedProfit() external view returns (uint256);

    /// @notice Returns pending rewards value in debt asset terms
    function pendingRewards() external view returns (uint256);

    /// @notice Returns whether the strategy is paused
    function paused() external view returns (bool);

    /// @notice Returns the strategy name
    function name() external view returns (string memory);

    /// @notice Returns the vault address
    function vault() external view returns (address);
}

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.33;

/// @title IERC20
/// @notice Standard ERC20 interface
interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address to, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address from, address to, uint256 amount) external returns (bool);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
}

Settings
{
  "remappings": [
    "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
    "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/",
    "forge-std/=lib/forge-std/src/",
    "halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/",
    "openzeppelin-contracts/=lib/openzeppelin-contracts/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 1
  },
  "metadata": {
    "useLiteralContent": false,
    "bytecodeHash": "ipfs",
    "appendCBOR": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "cancun",
  "viaIR": true
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"vault","type":"address"}],"name":"getHealth","outputs":[{"internalType":"int256","name":"health","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"vault","type":"address"}],"name":"getLtvBounds","outputs":[{"internalType":"uint256","name":"lowerBand","type":"uint256"},{"internalType":"uint256","name":"upperBand","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"vault","type":"address"}],"name":"getPendingFees","outputs":[{"internalType":"uint256","name":"totalFees","type":"uint256"},{"internalType":"uint256","name":"pendingFees","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"vault","type":"address"}],"name":"getTotalCollateralValue","outputs":[{"internalType":"uint256","name":"totalValue","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"vault","type":"address"}],"name":"getTotalDebtValue","outputs":[{"internalType":"uint256","name":"totalValue","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"vault","type":"address"},{"internalType":"address","name":"user","type":"address"}],"name":"getUserValue","outputs":[{"internalType":"uint256","name":"collateralValue","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"vault","type":"address"}],"name":"getYieldStrategyStats","outputs":[{"internalType":"string","name":"strategyName","type":"string"},{"internalType":"uint256","name":"currentValue","type":"uint256"},{"internalType":"uint256","name":"costBasis","type":"uint256"},{"internalType":"uint256","name":"unrealizedProfit","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"vault","type":"address"}],"name":"getYieldVaultStats","outputs":[{"internalType":"uint256","name":"yieldShares","type":"uint256"},{"internalType":"uint256","name":"currentValue","type":"uint256"},{"internalType":"uint256","name":"costBasis","type":"uint256"},{"internalType":"uint256","name":"unrealizedProfit","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"vault","type":"address"}],"name":"isRebalanceNeeded","outputs":[{"internalType":"bool","name":"needed","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"vault","type":"address"}],"name":"yieldCostBasis","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

0x60808060405234601557611c53908161001a8239f35b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c8063293a507714610a525780634adf4f4a146108b4578063616b08af146108155780636c648fc4146107f2578063838734ee146107b1578063865151f4146106de578063a4bf34ba14610456578063df948799146101c0578063e069792b146101935763feabf3ea14610087575f80fd5b34610147576020366003190112610147576001600160a01b036100a8610a75565b60405163ec921dc160e01b81529116602082600481845afa918215610153575f9261015e575b509060206004926040519384809263a9d29ab560e01b82525afa918215610153575f92610119575b5061010d8261010760409484610ae5565b92610b06565b82519182526020820152f35b91506020823d60201161014b575b8161013460209383610a8b565b810103126101475790519061010d6100f6565b5f80fd5b3d9150610127565b6040513d5f823e3d90fd5b91506020823d60201161018b575b8161017960209383610a8b565b810103126101475790519060206100ce565b3d915061016c565b346101475760203660031901126101475760206101b66101b1610a75565b611a35565b6040519015158152f35b3461014757602036600319011261014757600460206001600160a01b036101e5610a75565b16604051928380926309f8a7f760e11b82525afa908115610153575f91610427575b506040516306fdde0360e01b8152906001600160a01b03165f82600481845afa918215610153575f92610389575b5060405163722713f760e01b815291602083600481855afa928315610153575f93610355575b506040516353e3cb5f60e01b815291602083600481845afa928315610153575f93610320575b506020600491604051928380926329f74b0f60e11b82525afa908115610153575f916102ed575b5060209060a093604051958694608086528051948591826080890152018787015e5f858501870152602085015260408401526060830152601f01601f19168101030190f35b90506020813d602011610318575b8161030860209383610a8b565b81010312610147575160a06102a8565b3d91506102fb565b9092506020813d60201161034d575b8161033c60209383610a8b565b810103126101475751916020610281565b3d915061032f565b9092506020813d602011610381575b8161037160209383610a8b565b810103126101475751918361025b565b3d9150610364565b9091503d805f833e61039b8183610a8b565b810190602081830312610147578051906001600160401b038211610147570181601f82011215610147578051906001600160401b03821161041357604051926103ee601f8401601f191660200185610a8b565b8284526020838301011161014757815f9260208093018386015e830101529082610235565b634e487b7160e01b5f52604160045260245ffd5b610449915060203d60201161044f575b6104418183610a8b565b810190610aae565b81610207565b503d610437565b346101475760203660031901126101475761046f610a75565b6040516309f8a7f760e11b81526001600160a01b03909116905f90602081600481865afa908115610153576004916020915f916106c1575b5060405163722713f760e01b815292839182906001600160a01b03165afa908115610153575f9161068f575b50604051636231eaff60e01b815290602082600481875afa918215610153575f9261065b575b5081811161057a575b505060206004926040519384809263587f5ed760e01b82525afa918215610153575f92610544575b5061053781604093610b06565b9082519182526020820152f35b91506020823d602011610572575b8161055f60209383610a8b565b810103126101475790519061053761052a565b3d9150610552565b6105849250610ae5565b60405163978bbdb960e01b815290602082600481865afa908115610153575f91610625575b6105b39250611851565b60405163155ebd6d60e31b81529190602083600481855afa928315610153575f936105ef575b506105e8600493602092611864565b9192610502565b92506020833d60201161061d575b8161060a60209383610a8b565b81010312610147579151916105e86105d9565b3d91506105fd565b90506020823d602011610653575b8161064060209383610a8b565b81010312610147576105b39151906105a9565b3d9150610633565b9091506020813d602011610687575b8161067760209383610a8b565b81010312610147575190846104f9565b3d915061066a565b90506020813d6020116106b9575b816106aa60209383610a8b565b810103126101475751836104d3565b3d915061069d565b6106d89150823d841161044f576104418183610a8b565b856104a7565b3461014757602036600319011261014757600460206001600160a01b03610703610a75565b16604051928380926309f8a7f760e11b82525afa908115610153576004916020915f91610794575b506040516353e3cb5f60e01b815292839182906001600160a01b03165afa8015610153575f90610761575b602090604051908152f35b506020813d60201161078c575b8161077b60209383610a8b565b810103126101475760209051610756565b3d915061076e565b6107ab9150823d841161044f576104418183610a8b565b8361072b565b34610147576040366003190112610147576107ca610a75565b602435906001600160a01b0382168203610147576020916107ea91611882565b604051908152f35b346101475760203660031901126101475760206107ea610810610a75565b611255565b3461014757602036600319011261014757600460206001600160a01b0361083a610a75565b16604051928380926359e65e7f60e11b82525afa908115610153576004916020915f91610897575b5060405163640e7fd560e01b815292839182906001600160a01b03165afa8015610153575f9061076157602090604051908152f35b6108ae9150823d841161044f576104418183610a8b565b83610862565b3461014757602036600319011261014757600460206001600160a01b036108d9610a75565b16604051928380926309f8a7f760e11b82525afa908115610153575f91610a33575b5060405163722713f760e01b81526001600160a01b039190911690602081600481855afa908115610153575f91610a01575b506040516353e3cb5f60e01b815291602083600481845afa928315610153575f936109cc575b50916020600493604051948580926329f74b0f60e11b82525afa908115610153575f91610997575b60809350604051925f8452602084015260408301526060820152f35b90506020833d6020116109c4575b816109b260209383610a8b565b8101031261014757608092519061097b565b3d91506109a5565b92506020833d6020116109f9575b816109e760209383610a8b565b81010312610147579151916020610953565b3d91506109da565b90506020813d602011610a2b575b81610a1c60209383610a8b565b8101031261014757518261092d565b3d9150610a0f565b610a4c915060203d60201161044f576104418183610a8b565b816108fb565b346101475760203660031901126101475760206107ea610a70610a75565b610b13565b600435906001600160a01b038216820361014757565b601f909101601f19168101906001600160401b0382119082101761041357604052565b9081602091031261014757516001600160a01b03811681036101475790565b90816020910312610147575180151581036101475790565b91908203918211610af257565b634e487b7160e01b5f52601160045260245ffd5b91908201809211610af257565b6040516359e65e7f60e11b81526001600160a01b039190911690602081600481855afa908115610153575f91611236575b50604051633192164f60e01b8152602081600481865afa908115610153575f91611217575b506110f75760405163555d766b60e11b81526001600160a01b03919091169190602081600481855afa908115610153576024916020915f916110da575b506040516370a0823160e01b81526004810185905292839182906001600160a01b03165afa908115610153575f916110a8575b50604051906382fee08f60e01b82526004820152602081602481865afa908115610153575f91611076575b5060405163d3286d7160e01b81528190602081600481885afa908115610153575f91611047575b50610f63575b506040516309f8a7f760e11b8152602081600481865afa908115610153575f91610f44575b506001600160a01b031680610e68575b5060405163a919802d60e01b815291602083600481845afa928315610153575f93610e46575b506040516370a0823160e01b8152600481019190915291602090839060249082906001600160a01b03165afa908115610153575f91610e10575b610cd09250610b06565b90604051631529a63960e01b8152602081600481855afa908115610153575f91610dde575b5080610d67575b5090602060049260405193848092635ccbbdf160e01b82525afa908115610153575f91610d31575b610d2e9250610b06565b90565b90506020823d602011610d5f575b81610d4c60209383610a8b565b8101031261014757610d2e915190610d24565b3d9150610d3f565b91604051926382fee08f60e01b84526004840152602083602481855afa928315610153575f93610da8575b50610da1600493602092610b06565b9250610cfc565b92506020833d602011610dd6575b81610dc360209383610a8b565b8101031261014757915191610da1610d92565b3d9150610db6565b90506020813d602011610e08575b81610df960209383610a8b565b8101031261014757515f610cf5565b3d9150610dec565b90506020823d602011610e3e575b81610e2b60209383610a8b565b8101031261014757610cd0915190610cc6565b3d9150610e1e565b6020919350610e6190823d841161044f576104418183610a8b565b9290610c8c565b60206004916040519283809263722713f760e01b82525afa908115610153575f91610f12575b5060405163587f5ed760e01b815290602082600481875afa918215610153575f92610ede575b50818111610ec3575b50610c66565b610ed79291610ed191610ae5565b90610b06565b5f80610ebd565b9091506020813d602011610f0a575b81610efa60209383610a8b565b810103126101475751905f610eb4565b3d9150610eed565b90506020813d602011610f3c575b81610f2d60209383610a8b565b8101031261014757515f610e8e565b3d9150610f20565b610f5d915060203d60201161044f576104418183610a8b565b5f610c56565b60408051631b695ad560e11b81529081600481885afa908115610153575f905f9261100d575b50604051906382fee08f60e01b82526004820152602081602481895afa908115610153575f91610fdb575b50818111610fc4575b5050610c31565b610fd3935090610ed191610ae5565b5f8080610fbd565b90506020813d602011611005575b81610ff660209383610a8b565b8101031261014757515f610fb4565b3d9150610fe9565b9150506040813d60401161103f575b8161102960409383610a8b565b810103126101475760208151910151905f610f89565b3d915061101c565b611069915060203d60201161106f575b6110618183610a8b565b810190610acd565b5f610c2b565b503d611057565b90506020813d6020116110a0575b8161109160209383610a8b565b8101031261014757515f610c04565b3d9150611084565b90506020813d6020116110d2575b816110c360209383610a8b565b8101031261014757515f610bd9565b3d91506110b6565b6110f19150823d841161044f576104418183610a8b565b5f610ba6565b60405163555d766b60e11b81529091602082600481845afa918215610153575f926111f5575b506040516370a0823160e01b8152600481019190915290602090829060249082906001600160a01b03165afa8015610153575f906111c2575b6040516382fee08f60e01b815260048101919091529160209150829060249082906001600160a01b03165afa908115610153575f91611193575090565b90506020813d6020116111ba575b816111ae60209383610a8b565b81010312610147575190565b3d91506111a1565b506020813d6020116111ed575b816111dc60209383610a8b565b810103126101475760209051611156565b3d91506111cf565b602091925061121090823d841161044f576104418183610a8b565b919061111d565b611230915060203d60201161106f576110618183610a8b565b5f610b69565b61124f915060203d60201161044f576104418183610a8b565b5f610b44565b6040516359e65e7f60e11b815291906001600160a01b0316602083600481845afa928315610153575f93611830575b50604051633192164f60e01b8152602081600481855afa908115610153575f91611811575b5061178b5760405163555d766b60e11b815292602084600481855afa938415610153576024946020915f9161176e575b506040516370a0823160e01b81526004810185905295869182906001600160a01b03165afa938415610153575f9461173a575b506040516303011dab60e01b81526001600160a01b039190911693602082600481885afa908115610153575f91611704575b6113489250610b06565b6040516309f8a7f760e11b8152602081600481865afa908115610153575f916116e5575b506001600160a01b0316806115a8575b5060405163a919802d60e01b81529091602082600481845afa918215610153575f92611586575b506040516370a0823160e01b8152600481019190915290602090829060249082906001600160a01b03165afa908115610153575f91611554575b50806114e3575b50604051631529a63960e01b815290602082600481875afa908115610153575f916114ad575b6114149250610b06565b91604051635ccbbdf160e01b8152602081600481855afa908115610153575f9161147b575b5080611443575050565b6020906024604095939495518095819363c0177bd560e01b835260048301525afa908115610153575f91610d3157610d2e9250610b06565b90506020813d6020116114a5575b8161149660209383610a8b565b8101031261014757515f611439565b3d9150611489565b90506020823d6020116114db575b816114c860209383610a8b565b810103126101475761141491519061140a565b3d91506114bb565b906040519163c0177bd560e01b83526004830152602082602481875afa908115610153575f9161151e575b6115189250610b06565b5f6113e4565b90506020823d60201161154c575b8161153960209383610a8b565b810103126101475761151891519061150e565b3d915061152c565b90506020813d60201161157e575b8161156f60209383610a8b565b8101031261014757515f6113dd565b3d9150611562565b60209192506115a190823d841161044f576104418183610a8b565b91906113a3565b60206004916040519283809263722713f760e01b82525afa908115610153575f916116b3575b5060405163587f5ed760e01b815290602082600481875afa918215610153575f9261167f575b50818111611603575b5061137c565b9061160d91610ae5565b906040519163c0177bd560e01b83526004830152602082602481885afa908115610153575f91611649575b6116429250610b06565b5f806115fd565b90506020823d602011611677575b8161166460209383610a8b565b8101031261014757611642915190611638565b3d9150611657565b9091506020813d6020116116ab575b8161169b60209383610a8b565b810103126101475751905f6115f4565b3d915061168e565b90506020813d6020116116dd575b816116ce60209383610a8b565b8101031261014757515f6115ce565b3d91506116c1565b6116fe915060203d60201161044f576104418183610a8b565b5f61136c565b90506020823d602011611732575b8161171f60209383610a8b565b810103126101475761134891519061133e565b3d9150611712565b9093506020813d602011611766575b8161175660209383610a8b565b810103126101475751925f61130c565b3d9150611749565b6117859150823d841161044f576104418183610a8b565b5f6112d9565b60405163555d766b60e11b8152919250602082600481845afa918215610153575f926117ef575b506040516370a0823160e01b8152600481019190915290602090829060249082906001600160a01b03165afa908115610153575f91611193575090565b602091925061180a90823d841161044f576104418183610a8b565b91906117b2565b61182a915060203d60201161106f576110618183610a8b565b5f6112a9565b61184a91935060203d60201161044f576104418183610a8b565b915f611284565b81810292918115918404141715610af257565b811561186e570490565b634e487b7160e01b5f52601260045260245ffd5b6040516318160ddd60e01b81526001600160a01b039190911691602082600481865afa918215610153575f92611a01575b5081156119fa576040516370a0823160e01b81526001600160a01b039091166004820152602081602481865afa908115610153575f916119c8575b5060405163158af4dd60e21b815292602084600481845afa938415610153575f94611993575b50602060049160405192838092630d6eb59160e41b82525afa908115610153575f9161195d575b50926101076119579261195183610d2e97610b06565b90611851565b90611864565b9390506020843d60201161198b575b8161197960209383610a8b565b8101031261014757925161010761193b565b3d915061196c565b9093506020813d6020116119c0575b816119af60209383610a8b565b810103126101475751926020611914565b3d91506119a2565b90506020813d6020116119f2575b816119e360209383610a8b565b8101031261014757515f6118ee565b3d91506119d6565b5050505f90565b9091506020813d602011611a2d575b81611a1d60209383610a8b565b810103126101475751905f6118b3565b3d9150611a10565b6040516359e65e7f60e11b81526001600160a01b039190911690602081600481855afa908115610153575f91611bfe575b5060405163d3286d7160e01b81526001600160a01b039190911690602081600481855afa908115610153575f91611bdf575b5015611bd95760206004916040519283809263e862114960e01b82525afa908115610153575f91611ba7575b5060405163ec921dc160e01b815291602083600481845afa928315610153575f93611b72575b5060206004916040519283809263a9d29ab560e01b82525afa908115610153575f91611b40575b50611b1c8184610ae5565b8210928315611b2c575b50505090565b611b37929350610b06565b105f8080611b26565b90506020813d602011611b6a575b81611b5b60209383610a8b565b8101031261014757515f611b11565b3d9150611b4e565b9092506020813d602011611b9f575b81611b8e60209383610a8b565b810103126101475751916020611aea565b3d9150611b81565b90506020813d602011611bd1575b81611bc260209383610a8b565b8101031261014757515f611ac4565b3d9150611bb5565b50505f90565b611bf8915060203d60201161106f576110618183610a8b565b5f611a98565b611c17915060203d60201161044f576104418183610a8b565b5f611a6656fea2646970667358221220db211315b2036e5d6e1bbcffe65bfabad8a0e6b55436b4ad31a4f6027997ad7c64736f6c63430008210033

Deployed Bytecode

0x60806040526004361015610011575f80fd5b5f3560e01c8063293a507714610a525780634adf4f4a146108b4578063616b08af146108155780636c648fc4146107f2578063838734ee146107b1578063865151f4146106de578063a4bf34ba14610456578063df948799146101c0578063e069792b146101935763feabf3ea14610087575f80fd5b34610147576020366003190112610147576001600160a01b036100a8610a75565b60405163ec921dc160e01b81529116602082600481845afa918215610153575f9261015e575b509060206004926040519384809263a9d29ab560e01b82525afa918215610153575f92610119575b5061010d8261010760409484610ae5565b92610b06565b82519182526020820152f35b91506020823d60201161014b575b8161013460209383610a8b565b810103126101475790519061010d6100f6565b5f80fd5b3d9150610127565b6040513d5f823e3d90fd5b91506020823d60201161018b575b8161017960209383610a8b565b810103126101475790519060206100ce565b3d915061016c565b346101475760203660031901126101475760206101b66101b1610a75565b611a35565b6040519015158152f35b3461014757602036600319011261014757600460206001600160a01b036101e5610a75565b16604051928380926309f8a7f760e11b82525afa908115610153575f91610427575b506040516306fdde0360e01b8152906001600160a01b03165f82600481845afa918215610153575f92610389575b5060405163722713f760e01b815291602083600481855afa928315610153575f93610355575b506040516353e3cb5f60e01b815291602083600481845afa928315610153575f93610320575b506020600491604051928380926329f74b0f60e11b82525afa908115610153575f916102ed575b5060209060a093604051958694608086528051948591826080890152018787015e5f858501870152602085015260408401526060830152601f01601f19168101030190f35b90506020813d602011610318575b8161030860209383610a8b565b81010312610147575160a06102a8565b3d91506102fb565b9092506020813d60201161034d575b8161033c60209383610a8b565b810103126101475751916020610281565b3d915061032f565b9092506020813d602011610381575b8161037160209383610a8b565b810103126101475751918361025b565b3d9150610364565b9091503d805f833e61039b8183610a8b565b810190602081830312610147578051906001600160401b038211610147570181601f82011215610147578051906001600160401b03821161041357604051926103ee601f8401601f191660200185610a8b565b8284526020838301011161014757815f9260208093018386015e830101529082610235565b634e487b7160e01b5f52604160045260245ffd5b610449915060203d60201161044f575b6104418183610a8b565b810190610aae565b81610207565b503d610437565b346101475760203660031901126101475761046f610a75565b6040516309f8a7f760e11b81526001600160a01b03909116905f90602081600481865afa908115610153576004916020915f916106c1575b5060405163722713f760e01b815292839182906001600160a01b03165afa908115610153575f9161068f575b50604051636231eaff60e01b815290602082600481875afa918215610153575f9261065b575b5081811161057a575b505060206004926040519384809263587f5ed760e01b82525afa918215610153575f92610544575b5061053781604093610b06565b9082519182526020820152f35b91506020823d602011610572575b8161055f60209383610a8b565b810103126101475790519061053761052a565b3d9150610552565b6105849250610ae5565b60405163978bbdb960e01b815290602082600481865afa908115610153575f91610625575b6105b39250611851565b60405163155ebd6d60e31b81529190602083600481855afa928315610153575f936105ef575b506105e8600493602092611864565b9192610502565b92506020833d60201161061d575b8161060a60209383610a8b565b81010312610147579151916105e86105d9565b3d91506105fd565b90506020823d602011610653575b8161064060209383610a8b565b81010312610147576105b39151906105a9565b3d9150610633565b9091506020813d602011610687575b8161067760209383610a8b565b81010312610147575190846104f9565b3d915061066a565b90506020813d6020116106b9575b816106aa60209383610a8b565b810103126101475751836104d3565b3d915061069d565b6106d89150823d841161044f576104418183610a8b565b856104a7565b3461014757602036600319011261014757600460206001600160a01b03610703610a75565b16604051928380926309f8a7f760e11b82525afa908115610153576004916020915f91610794575b506040516353e3cb5f60e01b815292839182906001600160a01b03165afa8015610153575f90610761575b602090604051908152f35b506020813d60201161078c575b8161077b60209383610a8b565b810103126101475760209051610756565b3d915061076e565b6107ab9150823d841161044f576104418183610a8b565b8361072b565b34610147576040366003190112610147576107ca610a75565b602435906001600160a01b0382168203610147576020916107ea91611882565b604051908152f35b346101475760203660031901126101475760206107ea610810610a75565b611255565b3461014757602036600319011261014757600460206001600160a01b0361083a610a75565b16604051928380926359e65e7f60e11b82525afa908115610153576004916020915f91610897575b5060405163640e7fd560e01b815292839182906001600160a01b03165afa8015610153575f9061076157602090604051908152f35b6108ae9150823d841161044f576104418183610a8b565b83610862565b3461014757602036600319011261014757600460206001600160a01b036108d9610a75565b16604051928380926309f8a7f760e11b82525afa908115610153575f91610a33575b5060405163722713f760e01b81526001600160a01b039190911690602081600481855afa908115610153575f91610a01575b506040516353e3cb5f60e01b815291602083600481845afa928315610153575f936109cc575b50916020600493604051948580926329f74b0f60e11b82525afa908115610153575f91610997575b60809350604051925f8452602084015260408301526060820152f35b90506020833d6020116109c4575b816109b260209383610a8b565b8101031261014757608092519061097b565b3d91506109a5565b92506020833d6020116109f9575b816109e760209383610a8b565b81010312610147579151916020610953565b3d91506109da565b90506020813d602011610a2b575b81610a1c60209383610a8b565b8101031261014757518261092d565b3d9150610a0f565b610a4c915060203d60201161044f576104418183610a8b565b816108fb565b346101475760203660031901126101475760206107ea610a70610a75565b610b13565b600435906001600160a01b038216820361014757565b601f909101601f19168101906001600160401b0382119082101761041357604052565b9081602091031261014757516001600160a01b03811681036101475790565b90816020910312610147575180151581036101475790565b91908203918211610af257565b634e487b7160e01b5f52601160045260245ffd5b91908201809211610af257565b6040516359e65e7f60e11b81526001600160a01b039190911690602081600481855afa908115610153575f91611236575b50604051633192164f60e01b8152602081600481865afa908115610153575f91611217575b506110f75760405163555d766b60e11b81526001600160a01b03919091169190602081600481855afa908115610153576024916020915f916110da575b506040516370a0823160e01b81526004810185905292839182906001600160a01b03165afa908115610153575f916110a8575b50604051906382fee08f60e01b82526004820152602081602481865afa908115610153575f91611076575b5060405163d3286d7160e01b81528190602081600481885afa908115610153575f91611047575b50610f63575b506040516309f8a7f760e11b8152602081600481865afa908115610153575f91610f44575b506001600160a01b031680610e68575b5060405163a919802d60e01b815291602083600481845afa928315610153575f93610e46575b506040516370a0823160e01b8152600481019190915291602090839060249082906001600160a01b03165afa908115610153575f91610e10575b610cd09250610b06565b90604051631529a63960e01b8152602081600481855afa908115610153575f91610dde575b5080610d67575b5090602060049260405193848092635ccbbdf160e01b82525afa908115610153575f91610d31575b610d2e9250610b06565b90565b90506020823d602011610d5f575b81610d4c60209383610a8b565b8101031261014757610d2e915190610d24565b3d9150610d3f565b91604051926382fee08f60e01b84526004840152602083602481855afa928315610153575f93610da8575b50610da1600493602092610b06565b9250610cfc565b92506020833d602011610dd6575b81610dc360209383610a8b565b8101031261014757915191610da1610d92565b3d9150610db6565b90506020813d602011610e08575b81610df960209383610a8b565b8101031261014757515f610cf5565b3d9150610dec565b90506020823d602011610e3e575b81610e2b60209383610a8b565b8101031261014757610cd0915190610cc6565b3d9150610e1e565b6020919350610e6190823d841161044f576104418183610a8b565b9290610c8c565b60206004916040519283809263722713f760e01b82525afa908115610153575f91610f12575b5060405163587f5ed760e01b815290602082600481875afa918215610153575f92610ede575b50818111610ec3575b50610c66565b610ed79291610ed191610ae5565b90610b06565b5f80610ebd565b9091506020813d602011610f0a575b81610efa60209383610a8b565b810103126101475751905f610eb4565b3d9150610eed565b90506020813d602011610f3c575b81610f2d60209383610a8b565b8101031261014757515f610e8e565b3d9150610f20565b610f5d915060203d60201161044f576104418183610a8b565b5f610c56565b60408051631b695ad560e11b81529081600481885afa908115610153575f905f9261100d575b50604051906382fee08f60e01b82526004820152602081602481895afa908115610153575f91610fdb575b50818111610fc4575b5050610c31565b610fd3935090610ed191610ae5565b5f8080610fbd565b90506020813d602011611005575b81610ff660209383610a8b565b8101031261014757515f610fb4565b3d9150610fe9565b9150506040813d60401161103f575b8161102960409383610a8b565b810103126101475760208151910151905f610f89565b3d915061101c565b611069915060203d60201161106f575b6110618183610a8b565b810190610acd565b5f610c2b565b503d611057565b90506020813d6020116110a0575b8161109160209383610a8b565b8101031261014757515f610c04565b3d9150611084565b90506020813d6020116110d2575b816110c360209383610a8b565b8101031261014757515f610bd9565b3d91506110b6565b6110f19150823d841161044f576104418183610a8b565b5f610ba6565b60405163555d766b60e11b81529091602082600481845afa918215610153575f926111f5575b506040516370a0823160e01b8152600481019190915290602090829060249082906001600160a01b03165afa8015610153575f906111c2575b6040516382fee08f60e01b815260048101919091529160209150829060249082906001600160a01b03165afa908115610153575f91611193575090565b90506020813d6020116111ba575b816111ae60209383610a8b565b81010312610147575190565b3d91506111a1565b506020813d6020116111ed575b816111dc60209383610a8b565b810103126101475760209051611156565b3d91506111cf565b602091925061121090823d841161044f576104418183610a8b565b919061111d565b611230915060203d60201161106f576110618183610a8b565b5f610b69565b61124f915060203d60201161044f576104418183610a8b565b5f610b44565b6040516359e65e7f60e11b815291906001600160a01b0316602083600481845afa928315610153575f93611830575b50604051633192164f60e01b8152602081600481855afa908115610153575f91611811575b5061178b5760405163555d766b60e11b815292602084600481855afa938415610153576024946020915f9161176e575b506040516370a0823160e01b81526004810185905295869182906001600160a01b03165afa938415610153575f9461173a575b506040516303011dab60e01b81526001600160a01b039190911693602082600481885afa908115610153575f91611704575b6113489250610b06565b6040516309f8a7f760e11b8152602081600481865afa908115610153575f916116e5575b506001600160a01b0316806115a8575b5060405163a919802d60e01b81529091602082600481845afa918215610153575f92611586575b506040516370a0823160e01b8152600481019190915290602090829060249082906001600160a01b03165afa908115610153575f91611554575b50806114e3575b50604051631529a63960e01b815290602082600481875afa908115610153575f916114ad575b6114149250610b06565b91604051635ccbbdf160e01b8152602081600481855afa908115610153575f9161147b575b5080611443575050565b6020906024604095939495518095819363c0177bd560e01b835260048301525afa908115610153575f91610d3157610d2e9250610b06565b90506020813d6020116114a5575b8161149660209383610a8b565b8101031261014757515f611439565b3d9150611489565b90506020823d6020116114db575b816114c860209383610a8b565b810103126101475761141491519061140a565b3d91506114bb565b906040519163c0177bd560e01b83526004830152602082602481875afa908115610153575f9161151e575b6115189250610b06565b5f6113e4565b90506020823d60201161154c575b8161153960209383610a8b565b810103126101475761151891519061150e565b3d915061152c565b90506020813d60201161157e575b8161156f60209383610a8b565b8101031261014757515f6113dd565b3d9150611562565b60209192506115a190823d841161044f576104418183610a8b565b91906113a3565b60206004916040519283809263722713f760e01b82525afa908115610153575f916116b3575b5060405163587f5ed760e01b815290602082600481875afa918215610153575f9261167f575b50818111611603575b5061137c565b9061160d91610ae5565b906040519163c0177bd560e01b83526004830152602082602481885afa908115610153575f91611649575b6116429250610b06565b5f806115fd565b90506020823d602011611677575b8161166460209383610a8b565b8101031261014757611642915190611638565b3d9150611657565b9091506020813d6020116116ab575b8161169b60209383610a8b565b810103126101475751905f6115f4565b3d915061168e565b90506020813d6020116116dd575b816116ce60209383610a8b565b8101031261014757515f6115ce565b3d91506116c1565b6116fe915060203d60201161044f576104418183610a8b565b5f61136c565b90506020823d602011611732575b8161171f60209383610a8b565b810103126101475761134891519061133e565b3d9150611712565b9093506020813d602011611766575b8161175660209383610a8b565b810103126101475751925f61130c565b3d9150611749565b6117859150823d841161044f576104418183610a8b565b5f6112d9565b60405163555d766b60e11b8152919250602082600481845afa918215610153575f926117ef575b506040516370a0823160e01b8152600481019190915290602090829060249082906001600160a01b03165afa908115610153575f91611193575090565b602091925061180a90823d841161044f576104418183610a8b565b91906117b2565b61182a915060203d60201161106f576110618183610a8b565b5f6112a9565b61184a91935060203d60201161044f576104418183610a8b565b915f611284565b81810292918115918404141715610af257565b811561186e570490565b634e487b7160e01b5f52601260045260245ffd5b6040516318160ddd60e01b81526001600160a01b039190911691602082600481865afa918215610153575f92611a01575b5081156119fa576040516370a0823160e01b81526001600160a01b039091166004820152602081602481865afa908115610153575f916119c8575b5060405163158af4dd60e21b815292602084600481845afa938415610153575f94611993575b50602060049160405192838092630d6eb59160e41b82525afa908115610153575f9161195d575b50926101076119579261195183610d2e97610b06565b90611851565b90611864565b9390506020843d60201161198b575b8161197960209383610a8b565b8101031261014757925161010761193b565b3d915061196c565b9093506020813d6020116119c0575b816119af60209383610a8b565b810103126101475751926020611914565b3d91506119a2565b90506020813d6020116119f2575b816119e360209383610a8b565b8101031261014757515f6118ee565b3d91506119d6565b5050505f90565b9091506020813d602011611a2d575b81611a1d60209383610a8b565b810103126101475751905f6118b3565b3d9150611a10565b6040516359e65e7f60e11b81526001600160a01b039190911690602081600481855afa908115610153575f91611bfe575b5060405163d3286d7160e01b81526001600160a01b039190911690602081600481855afa908115610153575f91611bdf575b5015611bd95760206004916040519283809263e862114960e01b82525afa908115610153575f91611ba7575b5060405163ec921dc160e01b815291602083600481845afa928315610153575f93611b72575b5060206004916040519283809263a9d29ab560e01b82525afa908115610153575f91611b40575b50611b1c8184610ae5565b8210928315611b2c575b50505090565b611b37929350610b06565b105f8080611b26565b90506020813d602011611b6a575b81611b5b60209383610a8b565b8101031261014757515f611b11565b3d9150611b4e565b9092506020813d602011611b9f575b81611b8e60209383610a8b565b810103126101475751916020611aea565b3d9150611b81565b90506020813d602011611bd1575b81611bc260209383610a8b565b8101031261014757515f611ac4565b3d9150611bb5565b50505f90565b611bf8915060203d60201161106f576110618183610a8b565b5f611a98565b611c17915060203d60201161044f576104418183610a8b565b5f611a6656fea2646970667358221220db211315b2036e5d6e1bbcffe65bfabad8a0e6b55436b4ad31a4f6027997ad7c64736f6c63430008210033

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.