ETH Price: $2,693.68 (-0.73%)

Contract

0x449D088C9f184AF598fe72d26742A58A11c5200f

Overview

ETH Balance

0 ETH

ETH Value

$0.00

Token Holdings

Transaction Hash
Method
Block
From
To
Release Tokens1320132792025-02-15 13:15:353 days ago1739625335IN
0x449D088C...A11c5200f
0 ETH0.0000002939170.00100062
Release Tokens1316688962025-02-07 13:56:0911 days ago1738936569IN
0x449D088C...A11c5200f
0 ETH0.0000011161850.0010013
Release Tokens1308434632025-01-19 11:21:4330 days ago1737285703IN
0x449D088C...A11c5200f
0 ETH0.0000004303610.00100727
Release Tokens1286359552024-11-29 8:58:0781 days ago1732870687IN
0x449D088C...A11c5200f
0 ETH0.0000001471590.001004
Release Tokens1285051312024-11-26 8:17:1984 days ago1732609039IN
0x449D088C...A11c5200f
0 ETH0.0000025529210.0010003
Release Tokens1278290622024-11-10 16:41:41100 days ago1731256901IN
0x449D088C...A11c5200f
0 ETH0.0000004532520.00100093
Release Tokens1239698482024-08-13 8:41:13189 days ago1723538473IN
0x449D088C...A11c5200f
0 ETH0.0000001106830.00120008
Release Tokens1234292792024-07-31 20:22:15202 days ago1722457335IN
0x449D088C...A11c5200f
0 ETH0.0000003006980.00142033
Release Tokens1221132672024-07-01 9:15:11232 days ago1719825311IN
0x449D088C...A11c5200f
0 ETH0.0000003259880.0014264
Release Tokens1209226782024-06-03 19:48:53260 days ago1717444133IN
0x449D088C...A11c5200f
0 ETH0.0000091549060.06162485
Release Tokens1205800252024-05-26 21:27:07268 days ago1716758827IN
0x449D088C...A11c5200f
0 ETH0.0001714905150.3101906
Release Tokens1185725642024-04-10 10:11:45314 days ago1712743905IN
0x449D088C...A11c5200f
0 ETH0.000005632910.06568101
Release Tokens1177953932024-03-23 10:26:03332 days ago1711189563IN
0x449D088C...A11c5200f
0 ETH0.0000011249910.00659509
Release Tokens1175917082024-03-18 17:16:33337 days ago1710782193IN
0x449D088C...A11c5200f
0 ETH0.0000012669810.0168109
Release Tokens1164650372024-02-21 15:20:51363 days ago1708528851IN
0x449D088C...A11c5200f
0 ETH0.000147623720.13002817
Release Tokens1164312472024-02-20 20:34:31364 days ago1708461271IN
0x449D088C...A11c5200f
0 ETH0.0001003329860.00405159
Release Tokens1161118742024-02-13 11:08:45371 days ago1707822525IN
0x449D088C...A11c5200f
0 ETH0.000049007360.10018162
Release Tokens1158340602024-02-07 0:48:17378 days ago1707266897IN
0x449D088C...A11c5200f
0 ETH0.0000423822710.0021581
Release Tokens1151580372024-01-22 9:14:11393 days ago1705914851IN
0x449D088C...A11c5200f
0 ETH0.0000259083820.0029201
Release Tokens1147578662024-01-13 2:55:09402 days ago1705114509IN
0x449D088C...A11c5200f
0 ETH0.0000310570970.00534303
Release Tokens1145275942024-01-07 18:59:25408 days ago1704653965IN
0x449D088C...A11c5200f
0 ETH0.0000657998340.00691763
Release Tokens1139306652023-12-24 23:21:47422 days ago1703460107IN
0x449D088C...A11c5200f
0 ETH0.0000355711430.00599048
Release Tokens1134772392023-12-14 11:27:35432 days ago1702553255IN
0x449D088C...A11c5200f
0 ETH0.0000876373640.00801595
Release Tokens1133534682023-12-11 14:41:53435 days ago1702305713IN
0x449D088C...A11c5200f
0 ETH0.000081489840.01292107
Release Tokens1118918082023-11-07 18:39:53469 days ago1699382393IN
0x449D088C...A11c5200f
0 ETH0.0000764733850.0111387
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
1320132792025-02-15 13:15:353 days ago1739625335
0x449D088C...A11c5200f
0.000023687930216 ETH
1320132792025-02-15 13:15:353 days ago1739625335
0x449D088C...A11c5200f
0.000023687930216 ETH
1316688962025-02-07 13:56:0911 days ago1738936569
0x449D088C...A11c5200f
0.000112163509471 ETH
1316688962025-02-07 13:56:0911 days ago1738936569
0x449D088C...A11c5200f
0.000112163509471 ETH
1308434632025-01-19 11:21:4330 days ago1737285703
0x449D088C...A11c5200f
0.000001495513459 ETH
1308434632025-01-19 11:21:4330 days ago1737285703
0x449D088C...A11c5200f
0.000001495513459 ETH
1285051312024-11-26 8:17:1984 days ago1732609039
0x449D088C...A11c5200f
0.00005748226733 ETH
1285051312024-11-26 8:17:1984 days ago1732609039
0x449D088C...A11c5200f
0.00005748226733 ETH
1278290622024-11-10 16:41:41100 days ago1731256901
0x449D088C...A11c5200f
0.00000372364546 ETH
1278290622024-11-10 16:41:41100 days ago1731256901
0x449D088C...A11c5200f
0.00000372364546 ETH
1239698482024-08-13 8:41:13189 days ago1723538473
0x449D088C...A11c5200f
0.000088605 ETH
1239698482024-08-13 8:41:13189 days ago1723538473
0x449D088C...A11c5200f
0.000088605 ETH
1221132672024-07-01 9:15:11232 days ago1719825311
0x449D088C...A11c5200f
0.000001123672474 ETH
1221132672024-07-01 9:15:11232 days ago1719825311
0x449D088C...A11c5200f
0.000001123672474 ETH
1205800252024-05-26 21:27:07268 days ago1716758827
0x449D088C...A11c5200f
0.002897765828961 ETH
1205800252024-05-26 21:27:07268 days ago1716758827
0x449D088C...A11c5200f
0.002897765828961 ETH
1177953932024-03-23 10:26:03332 days ago1711189563
0x449D088C...A11c5200f
0.000109119350842 ETH
1177953932024-03-23 10:26:03332 days ago1711189563
0x449D088C...A11c5200f
0.000109119350842 ETH
1175917082024-03-18 17:16:33337 days ago1710782193
0x449D088C...A11c5200f
0.000010481101665 ETH
1175917082024-03-18 17:16:33337 days ago1710782193
0x449D088C...A11c5200f
0.000010481101665 ETH
1164312472024-02-20 20:34:31364 days ago1708461271
0x449D088C...A11c5200f
0.000069238896462 ETH
1164312472024-02-20 20:34:31364 days ago1708461271
0x449D088C...A11c5200f
0.000069238896462 ETH
1161118742024-02-13 11:08:45371 days ago1707822525
0x449D088C...A11c5200f
0.000000112737987 ETH
1161118742024-02-13 11:08:45371 days ago1707822525
0x449D088C...A11c5200f
0.000000112737987 ETH
1158340602024-02-07 0:48:17378 days ago1707266897
0x449D088C...A11c5200f
0.000039434514628 ETH
View All Internal Transactions

Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
FeeSplitter

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 5000 runs

Other Settings:
default evmVersion
File 1 of 8 : FeeSplitter.sol
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity 0.8.11;

import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/security/ReentrancyGuard.sol";
import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";

import "./interfaces/external/IWETH.sol";

/// @title Manage the fees between shareholders
/// @notice Receives fees collected by the NestedFactory, and splits the income among
/// shareholders (the NFT owners, Nested treasury and a NST buybacker contract).
contract FeeSplitter is Ownable, ReentrancyGuard {
    /* ------------------------------ EVENTS ------------------------------ */

    /// @dev Emitted when a payment is released
    /// @param to The address receiving the payment
    /// @param token The token transfered
    /// @param amount The amount paid
    event PaymentReleased(address to, address token, uint256 amount);

    /// @dev Emitted when a payment is received
    /// @param from The address sending the tokens
    /// @param token The token received
    /// @param amount The amount received
    event PaymentReceived(address from, address token, uint256 amount);

    /// @dev Emitted when the royalties weight is updated
    /// @param weight The new weight
    event RoyaltiesWeightUpdated(uint256 weight);

    /// @dev Emitted when a new shareholder is added
    /// @param account The new shareholder account
    /// @param weight The shareholder weight
    event ShareholdersAdded(address account, uint256 weight);

    /// @dev Emitted when a shareholder weight is updated
    /// @param account The shareholder address
    /// @param weight The new weight
    event ShareholderUpdated(address account, uint256 weight);

    /// @dev Emitted when royalties are claim released
    /// @param to The address claiming the royalties
    /// @param token The token received
    /// @param value The amount received
    event RoyaltiesReceived(address to, address token, uint256 value);

    /* ------------------------------ STRUCTS ------------------------------ */

    /// @dev Represent a shareholder
    /// @param account Shareholders address that can receive income
    /// @param weight Determines share allocation
    struct Shareholder {
        address account;
        uint96 weight;
    }

    /// @dev Registers shares and amount release for a specific token or ETH
    struct TokenRecords {
        uint256 totalShares;
        uint256 totalReleased;
        mapping(address => uint256) shares;
        mapping(address => uint256) released;
    }

    /* ----------------------------- VARIABLES ----------------------------- */

    /// @dev Map of tokens with the tokenRecords
    mapping(address => TokenRecords) private tokenRecords;

    /// @dev All the shareholders (array)
    Shareholder[] private shareholders;

    /// @dev Royalties part weights when applicable
    uint256 public royaltiesWeight;

    uint256 public totalWeights;

    address public immutable weth;

    /* ---------------------------- CONSTRUCTOR ---------------------------- */

    constructor(
        address[] memory _accounts,
        uint96[] memory _weights,
        uint256 _royaltiesWeight,
        address _weth
    ) {
        require(_weth != address(0), "FS: INVALID_ADDRESS");
        // Initial shareholders addresses and weights
        setShareholders(_accounts, _weights);
        setRoyaltiesWeight(_royaltiesWeight);
        weth = _weth;
    }

    /// @dev Receive ether after a WETH withdraw call
    receive() external payable {
        require(msg.sender == weth, "FS: ETH_SENDER_NOT_WETH");
    }

    /* -------------------------- OWNER FUNCTIONS -------------------------- */

    /// @notice Sets the weight assigned to the royalties part for the fee
    /// @param _weight The new royalties weight
    function setRoyaltiesWeight(uint256 _weight) public onlyOwner {
        require(_weight != 0, "FS: WEIGHT_ZERO");
        totalWeights = totalWeights + _weight - royaltiesWeight;
        royaltiesWeight = _weight;
        emit RoyaltiesWeightUpdated(_weight);
    }

    /// @notice Sets a new list of shareholders
    /// @param _accounts Shareholders accounts list
    /// @param _weights Weight for each shareholder. Determines part of the payment allocated to them
    function setShareholders(address[] memory _accounts, uint96[] memory _weights) public onlyOwner {
        delete shareholders;
        uint256 accountsLength = _accounts.length;
        require(accountsLength != 0, "FS: EMPTY_ARRAY");
        require(accountsLength == _weights.length, "FS: INPUTS_LENGTH_MUST_MATCH");
        totalWeights = royaltiesWeight;

        for (uint256 i = 0; i < accountsLength; i++) {
            _addShareholder(_accounts[i], _weights[i]);
        }
    }

    /// @notice Updates weight for a shareholder
    /// @param _accountIndex Account to change the weight of
    /// @param _weight The new weight
    function updateShareholder(uint256 _accountIndex, uint96 _weight) external onlyOwner {
        require(_weight != 0, "FS: INVALID_WEIGHT");
        require(_accountIndex < shareholders.length, "FS: INVALID_ACCOUNT_INDEX");
        Shareholder storage _shareholder = shareholders[_accountIndex];
        totalWeights = totalWeights + _weight - _shareholder.weight;
        require(totalWeights != 0, "FS: TOTAL_WEIGHTS_ZERO");
        _shareholder.weight = _weight;
        emit ShareholderUpdated(_shareholder.account, _weight);
    }

    /* -------------------------- USERS FUNCTIONS -------------------------- */

    /// @notice Release multiple tokens and handle ETH unwrapping
    /// @param _tokens ERC20 tokens to release
    function releaseTokens(IERC20[] calldata _tokens) external nonReentrant {
        uint256 amount;
        for (uint256 i = 0; i < _tokens.length; i++) {
            amount = _releaseToken(_msgSender(), _tokens[i]);
            if (address(_tokens[i]) == weth) {
                IWETH(weth).withdraw(amount);
                (bool success, ) = _msgSender().call{ value: amount }("");
                require(success, "FS: ETH_TRANFER_ERROR");
            } else {
                SafeERC20.safeTransfer(_tokens[i], _msgSender(), amount);
            }
            emit PaymentReleased(_msgSender(), address(_tokens[i]), amount);
        }
    }

    /// @notice Release multiple tokens without ETH unwrapping
    /// @param _tokens ERC20 tokens to release
    function releaseTokensNoETH(IERC20[] calldata _tokens) external nonReentrant {
        uint256 amount;
        for (uint256 i = 0; i < _tokens.length; i++) {
            amount = _releaseToken(_msgSender(), _tokens[i]);
            SafeERC20.safeTransfer(_tokens[i], _msgSender(), amount);
            emit PaymentReleased(_msgSender(), address(_tokens[i]), amount);
        }
    }

    /// @notice Sends a fee to this contract for splitting, as an ERC20 token. No royalties are expected.
    /// @param _token Currency for the fee as an ERC20 token
    /// @param _amount Amount of token as fee to be claimed by this contract
    function sendFees(IERC20 _token, uint256 _amount) external nonReentrant {
        uint256 weights;
        unchecked {
            weights = totalWeights - royaltiesWeight;
        }

        uint256 balanceBeforeTransfer = _token.balanceOf(address(this));
        SafeERC20.safeTransferFrom(_token, _msgSender(), address(this), _amount);

        _sendFees(_token, _token.balanceOf(address(this)) - balanceBeforeTransfer, weights);
    }

    /// @notice Sends a fee to this contract for splitting, as an ERC20 token
    /// @param _royaltiesTarget The account that can claim royalties
    /// @param _token Currency for the fee as an ERC20 token
    /// @param _amount Amount of token as fee to be claimed by this contract
    function sendFeesWithRoyalties(
        address _royaltiesTarget,
        IERC20 _token,
        uint256 _amount
    ) external nonReentrant {
        require(_royaltiesTarget != address(0), "FS: INVALID_ROYALTIES_TARGET");

        uint256 balanceBeforeTransfer = _token.balanceOf(address(this));
        SafeERC20.safeTransferFrom(_token, _msgSender(), address(this), _amount);
        uint256 amountReceived = _token.balanceOf(address(this)) - balanceBeforeTransfer;

        uint256 _totalWeights = totalWeights;
        uint256 royaltiesAmount = (amountReceived * royaltiesWeight) / _totalWeights;

        _sendFees(_token, amountReceived, _totalWeights);
        _addShares(_royaltiesTarget, royaltiesAmount, address(_token));

        emit RoyaltiesReceived(_royaltiesTarget, address(_token), royaltiesAmount);
    }

    /* ------------------------------- VIEWS ------------------------------- */

    /// @notice Returns the amount due to an account. Call releaseToken to withdraw the amount.
    /// @param _account Account address to check the amount due for
    /// @param _token ERC20 payment token address
    /// @return The total amount due for the requested currency
    function getAmountDue(address _account, IERC20 _token) public view returns (uint256) {
        TokenRecords storage _tokenRecords = tokenRecords[address(_token)];
        uint256 _totalShares = _tokenRecords.totalShares;
        if (_totalShares == 0) return 0;

        uint256 totalReceived = _tokenRecords.totalReleased + _token.balanceOf(address(this));
        return (totalReceived * _tokenRecords.shares[_account]) / _totalShares - _tokenRecords.released[_account];
    }

    /// @notice Getter for the total shares held by shareholders.
    /// @param _token Payment token address
    /// @return The total shares count
    function totalShares(address _token) external view returns (uint256) {
        return tokenRecords[_token].totalShares;
    }

    /// @notice Getter for the total amount of token already released.
    /// @param _token Payment token address
    /// @return The total amount release to shareholders
    function totalReleased(address _token) external view returns (uint256) {
        return tokenRecords[_token].totalReleased;
    }

    /// @notice Getter for the amount of shares held by an account.
    /// @param _account Account the shares belong to
    /// @param _token Payment token address
    /// @return The shares owned by the account
    function shares(address _account, address _token) external view returns (uint256) {
        return tokenRecords[_token].shares[_account];
    }

    /// @notice Getter for the amount of Ether already released to a shareholders.
    /// @param _account The target account for this request
    /// @param _token Payment token address
    /// @return The amount already released to this account
    function released(address _account, address _token) external view returns (uint256) {
        return tokenRecords[_token].released[_account];
    }

    /// @notice Finds a shareholder and return its index
    /// @param _account Account to find
    /// @return The shareholder index in the storage array
    function findShareholder(address _account) external view returns (uint256) {
        for (uint256 i = 0; i < shareholders.length; i++) {
            if (shareholders[i].account == _account) return i;
        }
        revert("FS: SHAREHOLDER_NOT_FOUND");
    }

    /* ------------------------- PRIVATE FUNCTIONS ------------------------- */

    /// @notice Transfers a fee to this contract
    /// @dev This method calculates the amount received, to support deflationary tokens
    /// @param _token Currency for the fee
    /// @param _amount Amount of token sent
    /// @param _totalWeights Total weights to determine the share count to allocate
    function _sendFees(
        IERC20 _token,
        uint256 _amount,
        uint256 _totalWeights
    ) private {
        Shareholder[] memory shareholdersCache = shareholders;
        for (uint256 i = 0; i < shareholdersCache.length; i++) {
            _addShares(
                shareholdersCache[i].account,
                (_amount * shareholdersCache[i].weight) / _totalWeights,
                address(_token)
            );
        }
        emit PaymentReceived(_msgSender(), address(_token), _amount);
    }

    /// @dev Increase the shares of a shareholder
    /// @param _account The shareholder address
    /// @param _shares The shares of the holder
    /// @param _token The updated token
    function _addShares(
        address _account,
        uint256 _shares,
        address _token
    ) private {
        TokenRecords storage _tokenRecords = tokenRecords[_token];
        _tokenRecords.shares[_account] += _shares;
        _tokenRecords.totalShares += _shares;
    }

    function _releaseToken(address _account, IERC20 _token) private returns (uint256) {
        uint256 amountToRelease = getAmountDue(_account, _token);
        require(amountToRelease != 0, "FS: NO_PAYMENT_DUE");

        TokenRecords storage _tokenRecords = tokenRecords[address(_token)];
        _tokenRecords.released[_account] += amountToRelease;
        _tokenRecords.totalReleased += amountToRelease;

        return amountToRelease;
    }

    function _addShareholder(address _account, uint96 _weight) private {
        require(_weight != 0, "FS: ZERO_WEIGHT");
        require(_account != address(0), "FS: INVALID_ADDRESS");
        for (uint256 i = 0; i < shareholders.length; i++) {
            require(shareholders[i].account != _account, "FS: ALREADY_SHAREHOLDER");
        }

        shareholders.push(Shareholder(_account, _weight));
        totalWeights += _weight;
        emit ShareholdersAdded(_account, _weight);
    }
}

File 2 of 8 : IERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

File 3 of 8 : Ownable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _setOwner(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 4 of 8 : ReentrancyGuard.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and make it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

File 5 of 8 : SafeERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../IERC20.sol";
import "../../../utils/Address.sol";

/**
 * @title SafeERC20
 * @dev Wrappers around ERC20 operations that throw on failure (when the token
 * contract returns false). Tokens that return no value (and instead revert or
 * throw on failure) are also supported, non-reverting calls are assumed to be
 * successful.
 * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
library SafeERC20 {
    using Address for address;

    function safeTransfer(
        IERC20 token,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(
        IERC20 token,
        address from,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    /**
     * @dev Deprecated. This function has issues similar to the ones found in
     * {IERC20-approve}, and its usage is discouraged.
     *
     * Whenever possible, use {safeIncreaseAllowance} and
     * {safeDecreaseAllowance} instead.
     */
    function safeApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        uint256 newAllowance = token.allowance(address(this), spender) + value;
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        unchecked {
            uint256 oldAllowance = token.allowance(address(this), spender);
            require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
            uint256 newAllowance = oldAllowance - value;
            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
        }
    }

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     */
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) {
            // Return data is optional
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

File 6 of 8 : IWETH.sol
// SPDX-License-Identifier: UNLICENSED

pragma solidity 0.8.11;

interface IWETH {
    function deposit() external payable;

    function withdraw(uint256) external;

    function totalSupply() external view returns (uint256);

    function transfer(address recipient, 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 sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(address indexed owner, address indexed spender, uint256 value);
}

File 7 of 8 : Context.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

File 8 of 8 : Address.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 5000
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "metadata": {
    "useLiteralContent": true
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address[]","name":"_accounts","type":"address[]"},{"internalType":"uint96[]","name":"_weights","type":"uint96[]"},{"internalType":"uint256","name":"_royaltiesWeight","type":"uint256"},{"internalType":"address","name":"_weth","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PaymentReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PaymentReleased","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"RoyaltiesReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"weight","type":"uint256"}],"name":"RoyaltiesWeightUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"weight","type":"uint256"}],"name":"ShareholderUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"weight","type":"uint256"}],"name":"ShareholdersAdded","type":"event"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"findShareholder","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"contract IERC20","name":"_token","type":"address"}],"name":"getAmountDue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20[]","name":"_tokens","type":"address[]"}],"name":"releaseTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20[]","name":"_tokens","type":"address[]"}],"name":"releaseTokensNoETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"address","name":"_token","type":"address"}],"name":"released","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"royaltiesWeight","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"sendFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_royaltiesTarget","type":"address"},{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"sendFeesWithRoyalties","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_weight","type":"uint256"}],"name":"setRoyaltiesWeight","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_accounts","type":"address[]"},{"internalType":"uint96[]","name":"_weights","type":"uint96[]"}],"name":"setShareholders","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"address","name":"_token","type":"address"}],"name":"shares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"totalReleased","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"totalShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalWeights","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_accountIndex","type":"uint256"},{"internalType":"uint96","name":"_weight","type":"uint96"}],"name":"updateShareholder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"weth","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040523480156200001157600080fd5b5060405162002b6338038062002b638339810160408190526200003491620006d0565b6200003f33620000c2565b600180556001600160a01b038116620000955760405162461bcd60e51b815260206004820152601360248201527246533a20494e56414c49445f4144445245535360681b60448201526064015b60405180910390fd5b620000a1848462000112565b620000ac8262000277565b6001600160a01b0316608052506200083b915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b031633146200015d5760405162461bcd60e51b8152602060048201819052602482015260008051602062002b4383398151915260448201526064016200008c565b6200016b600360006200057c565b815180620001ae5760405162461bcd60e51b815260206004820152600f60248201526e46533a20454d5054595f415252415960881b60448201526064016200008c565b81518114620002005760405162461bcd60e51b815260206004820152601c60248201527f46533a20494e505554535f4c454e4754485f4d5553545f4d415443480000000060448201526064016200008c565b60045460055560005b8181101562000271576200025c8482815181106200022b576200022b620007bc565b6020026020010151848381518110620002485762000248620007bc565b60200260200101516200036060201b60201c565b806200026881620007e8565b91505062000209565b50505050565b6000546001600160a01b03163314620002c25760405162461bcd60e51b8152602060048201819052602482015260008051602062002b4383398151915260448201526064016200008c565b80620003035760405162461bcd60e51b815260206004820152600f60248201526e46533a205745494748545f5a45524f60881b60448201526064016200008c565b6004548160055462000316919062000806565b62000322919062000821565b60055560048190556040518181527f16326b748bc59ea9b379269f3d88165d7540f9761e4a100e0be7e21c90a15b829060200160405180910390a150565b6001600160601b038116620003aa5760405162461bcd60e51b815260206004820152600f60248201526e1194ce8816915493d7d5d15251d215608a1b60448201526064016200008c565b6001600160a01b038216620003f85760405162461bcd60e51b815260206004820152601360248201527246533a20494e56414c49445f4144445245535360681b60448201526064016200008c565b60005b600354811015620004a057826001600160a01b031660038281548110620004265762000426620007bc565b6000918252602090912001546001600160a01b031614156200048b5760405162461bcd60e51b815260206004820152601760248201527f46533a20414c52454144595f5348415245484f4c44455200000000000000000060448201526064016200008c565b806200049781620007e8565b915050620003fb565b50604080518082019091526001600160a01b0380841682526001600160601b038084166020840181815260038054600181018255600091825295519151909316600160a01b029316929092177fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b9093019290925560058054919290916200052990849062000806565b9091555050604080516001600160a01b03841681526001600160601b03831660208201527f6beafc8ad282580ef154ba4a63a0a743acc9d351060b89cf09cfbd3fd621c878910160405180910390a15050565b50805460008255906000526020600020908101906200059c91906200059f565b50565b5b80821115620005b65760008155600101620005a0565b5090565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715620005fb57620005fb620005ba565b604052919050565b60006001600160401b038211156200061f576200061f620005ba565b5060051b60200190565b80516001600160a01b03811681146200064157600080fd5b919050565b600082601f8301126200065857600080fd5b81516020620006716200066b8362000603565b620005d0565b82815260059290921b840181019181810190868411156200069157600080fd5b8286015b84811015620006c55780516001600160601b0381168114620006b75760008081fd5b835291830191830162000695565b509695505050505050565b60008060008060808587031215620006e757600080fd5b84516001600160401b0380821115620006ff57600080fd5b818701915087601f8301126200071457600080fd5b81516020620007276200066b8362000603565b82815260059290921b8401810191818101908b8411156200074757600080fd5b948201945b838610156200077057620007608662000629565b825294820194908201906200074c565b918a01519198509093505050808211156200078a57600080fd5b50620007998782880162000646565b93505060408501519150620007b16060860162000629565b905092959194509250565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415620007ff57620007ff620007d2565b5060010190565b600082198211156200081c576200081c620007d2565b500190565b600082821015620008365762000836620007d2565b500390565b6080516122d76200086c600039600081816101580152818161025601528181610a190152610aa601526122d76000f3fe6080604052600436106101485760003560e01c80637d2a47b9116100c0578063bf6b874e11610074578063d79779b211610059578063d79779b214610462578063d804d3461461049b578063f2fde38b146104b157600080fd5b8063bf6b874e1461040c578063d6b274a51461044257600080fd5b80638da5cb5b116100a55780638da5cb5b146103b8578063926323d5146103d6578063b76ae9ca146103ec57600080fd5b80637d2a47b9146103505780637df446471461037057600080fd5b8063406072a9116101175780636d9634b7116100fc5780636d9634b7146102fb578063715018a61461031b5780637bb1cbc51461033057600080fd5b8063406072a91461029057806355698aa1146102db57600080fd5b80631024187b146101d157806319276d35146101f157806321a95657146102245780633fc8cef31461024457600080fd5b366101cc57336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101ca5760405162461bcd60e51b815260206004820152601760248201527f46533a204554485f53454e4445525f4e4f545f5745544800000000000000000060448201526064015b60405180910390fd5b005b600080fd5b3480156101dd57600080fd5b506101ca6101ec366004611e6e565b6104d1565b3480156101fd57600080fd5b5061021161020c366004611f30565b61063b565b6040519081526020015b60405180910390f35b34801561023057600080fd5b506101ca61023f366004611f69565b610751565b34801561025057600080fd5b506102787f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161021b565b34801561029c57600080fd5b506102116102ab366004611f30565b6001600160a01b038082166000908152600260209081526040808320938616835260039093019052205492915050565b3480156102e757600080fd5b506101ca6102f6366004611f82565b610851565b34801561030757600080fd5b506101ca610316366004611f82565b6109a8565b34801561032757600080fd5b506101ca610c53565b34801561033c57600080fd5b506101ca61034b366004611ff7565b610cb9565b34801561035c57600080fd5b5061021161036b366004612038565b610f1d565b34801561037c57600080fd5b5061021161038b366004611f30565b6001600160a01b039081166000908152600260208181526040808420959094168352930190925290205490565b3480156103c457600080fd5b506000546001600160a01b0316610278565b3480156103e257600080fd5b5061021160055481565b3480156103f857600080fd5b506101ca610407366004612055565b610fc4565b34801561041857600080fd5b50610211610427366004612038565b6001600160a01b031660009081526002602052604090205490565b34801561044e57600080fd5b506101ca61045d366004612081565b6111fe565b34801561046e57600080fd5b5061021161047d366004612038565b6001600160a01b031660009081526002602052604090206001015490565b3480156104a757600080fd5b5061021160045481565b3480156104bd57600080fd5b506101ca6104cc366004612038565b61138c565b6000546001600160a01b0316331461052b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101c1565b61053760036000611d10565b8151806105865760405162461bcd60e51b815260206004820152600f60248201527f46533a20454d5054595f4152524159000000000000000000000000000000000060448201526064016101c1565b815181146105d65760405162461bcd60e51b815260206004820152601c60248201527f46533a20494e505554535f4c454e4754485f4d5553545f4d415443480000000060448201526064016101c1565b60045460055560005b81811015610635576106238482815181106105fc576105fc6120ad565b6020026020010151848381518110610616576106166120ad565b602002602001015161146e565b8061062d8161210b565b9150506105df565b50505050565b6001600160a01b03811660009081526002602052604081208054806106655760009250505061074b565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa1580156106c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e99190612144565b83600101546106f8919061215d565b6001600160a01b038716600090815260038501602090815260408083205460028801909252909120549192509083906107319084612175565b61073b91906121b2565b61074591906121ed565b93505050505b92915050565b6000546001600160a01b031633146107ab5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101c1565b806107f85760405162461bcd60e51b815260206004820152600f60248201527f46533a205745494748545f5a45524f000000000000000000000000000000000060448201526064016101c1565b60045481600554610809919061215d565b61081391906121ed565b60055560048190556040518181527f16326b748bc59ea9b379269f3d88165d7540f9761e4a100e0be7e21c90a15b829060200160405180910390a150565b600260015414156108a45760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016101c1565b60026001556000805b8281101561099e576108e6335b8585848181106108cc576108cc6120ad565b90506020020160208101906108e19190612038565b6116b3565b91506109198484838181106108fd576108fd6120ad565b90506020020160208101906109129190612038565b3384611772565b7f8ac5b3c2902b21b6bbb4d99ec195e28a242cb6a1777804db10b84d91e20064293385858481811061094d5761094d6120ad565b90506020020160208101906109629190612038565b604080516001600160a01b039384168152929091166020830152810184905260600160405180910390a1806109968161210b565b9150506108ad565b5050600180555050565b600260015414156109fb5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016101c1565b60026001556000805b8281101561099e57610a15336108ba565b91507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316848483818110610a5357610a536120ad565b9050602002016020810190610a689190612038565b6001600160a01b03161415610bb9576040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b158015610af257600080fd5b505af1158015610b06573d6000803e3d6000fd5b505050506000610b133390565b6001600160a01b03168360405160006040518083038185875af1925050503d8060008114610b5d576040519150601f19603f3d011682016040523d82523d6000602084013e610b62565b606091505b5050905080610bb35760405162461bcd60e51b815260206004820152601560248201527f46533a204554485f5452414e4645525f4552524f52000000000000000000000060448201526064016101c1565b50610bce565b610bce8484838181106108fd576108fd6120ad565b7f8ac5b3c2902b21b6bbb4d99ec195e28a242cb6a1777804db10b84d91e200642933858584818110610c0257610c026120ad565b9050602002016020810190610c179190612038565b604080516001600160a01b039384168152929091166020830152810184905260600160405180910390a180610c4b8161210b565b915050610a04565b6000546001600160a01b03163314610cad5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101c1565b610cb76000611820565b565b60026001541415610d0c5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016101c1565b60026001556001600160a01b038316610d675760405162461bcd60e51b815260206004820152601c60248201527f46533a20494e56414c49445f524f59414c544945535f5441524745540000000060448201526064016101c1565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015610dc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610deb9190612144565b9050610df983333085611888565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009082906001600160a01b038616906370a0823190602401602060405180830381865afa158015610e5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7f9190612144565b610e8991906121ed565b90506000600554905060008160045484610ea39190612175565b610ead91906121b2565b9050610eba8684846118d9565b610ec5878288611a3e565b604080516001600160a01b03808a168252881660208201529081018290527f58ca863eaccdde65fd836b5be0c27c260459f63059e82a3c3338748ea5e686809060600160405180910390a15050600180555050505050565b6000805b600354811015610f7b57826001600160a01b031660038281548110610f4857610f486120ad565b6000918252602090912001546001600160a01b03161415610f695792915050565b80610f738161210b565b915050610f21565b5060405162461bcd60e51b815260206004820152601960248201527f46533a205348415245484f4c4445525f4e4f545f464f554e440000000000000060448201526064016101c1565b6000546001600160a01b0316331461101e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101c1565b6bffffffffffffffffffffffff81166110795760405162461bcd60e51b815260206004820152601260248201527f46533a20494e56414c49445f574549474854000000000000000000000000000060448201526064016101c1565b60035482106110ca5760405162461bcd60e51b815260206004820152601960248201527f46533a20494e56414c49445f4143434f554e545f494e4445580000000000000060448201526064016101c1565b6000600383815481106110df576110df6120ad565b600091825260209091200180546005549192506bffffffffffffffffffffffff740100000000000000000000000000000000000000009091048116916111279185169061215d565b61113191906121ed565b60058190556111825760405162461bcd60e51b815260206004820152601660248201527f46533a20544f54414c5f574549474854535f5a45524f0000000000000000000060448201526064016101c1565b80546001600160a01b03908116740100000000000000000000000000000000000000006bffffffffffffffffffffffff851690810282811785556040805194909116909217835260208301527f06945c82029753372decfeace485696553ab08354f682b4fa8e08d277e254985910160405180910390a1505050565b600260015414156112515760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016101c1565b6002600155600480546005546040517f70a08231000000000000000000000000000000000000000000000000000000008152309381019390935203906000906001600160a01b038516906370a0823190602401602060405180830381865afa1580156112c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e59190612144565b90506112f384333086611888565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015261099e90859083906001600160a01b038316906370a0823190602401602060405180830381865afa158015611358573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137c9190612144565b61138691906121ed565b846118d9565b6000546001600160a01b031633146113e65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101c1565b6001600160a01b0381166114625760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016101c1565b61146b81611820565b50565b6bffffffffffffffffffffffff81166114c95760405162461bcd60e51b815260206004820152600f60248201527f46533a205a45524f5f574549474854000000000000000000000000000000000060448201526064016101c1565b6001600160a01b03821661151f5760405162461bcd60e51b815260206004820152601360248201527f46533a20494e56414c49445f414444524553530000000000000000000000000060448201526064016101c1565b60005b6003548110156115be57826001600160a01b031660038281548110611549576115496120ad565b6000918252602090912001546001600160a01b031614156115ac5760405162461bcd60e51b815260206004820152601760248201527f46533a20414c52454144595f5348415245484f4c44455200000000000000000060448201526064016101c1565b806115b68161210b565b915050611522565b50604080518082019091526001600160a01b0380841682526bffffffffffffffffffffffff808416602084018181526003805460018101825560009182529551915190931674010000000000000000000000000000000000000000029316929092177fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b90930192909255600580549192909161165b90849061215d565b9091555050604080516001600160a01b03841681526bffffffffffffffffffffffff831660208201527f6beafc8ad282580ef154ba4a63a0a743acc9d351060b89cf09cfbd3fd621c878910160405180910390a15050565b6000806116c0848461063b565b90508061170f5760405162461bcd60e51b815260206004820152601260248201527f46533a204e4f5f5041594d454e545f445545000000000000000000000000000060448201526064016101c1565b6001600160a01b0380841660009081526002602090815260408083209388168352600384019091528120805484929061174990849061215d565b9250508190555081816001016000828254611764919061215d565b909155509195945050505050565b6040516001600160a01b03831660248201526044810182905261181b9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611a9a565b505050565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040516001600160a01b03808516602483015283166044820152606481018290526106359085907f23b872dd00000000000000000000000000000000000000000000000000000000906084016117b7565b60006003805480602002602001604051908101604052809291908181526020016000905b8282101561196257600084815260209081902060408051808201909152908401546001600160a01b03811682527401000000000000000000000000000000000000000090046bffffffffffffffffffffffff16818301528252600190920191016118fd565b50505050905060005b81518110156119ef576119dd828281518110611989576119896120ad565b602002602001015160000151848484815181106119a8576119a86120ad565b6020026020010151602001516bffffffffffffffffffffffff16876119cd9190612175565b6119d791906121b2565b87611a3e565b806119e78161210b565b91505061196b565b50604080513381526001600160a01b038616602082015280820185905290517f45fdc265dc29885b9a485766b03e70978440d38c7c328ee0a14fa40c76c6af549181900360600190a150505050565b6001600160a01b0380821660009081526002602081815260408084209488168452918401905281208054859290611a7690849061215d565b9091555050805483908290600090611a8f90849061215d565b909155505050505050565b6000611aef826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611b7f9092919063ffffffff16565b80519091501561181b5780806020019051810190611b0d9190612204565b61181b5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016101c1565b6060611b8e8484600085611b98565b90505b9392505050565b606082471015611c105760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016101c1565b843b611c5e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016101c1565b600080866001600160a01b03168587604051611c7a9190612252565b60006040518083038185875af1925050503d8060008114611cb7576040519150601f19603f3d011682016040523d82523d6000602084013e611cbc565b606091505b5091509150611ccc828286611cd7565b979650505050505050565b60608315611ce6575081611b91565b825115611cf65782518084602001fd5b8160405162461bcd60e51b81526004016101c1919061226e565b508054600082559060005260206000209081019061146b91905b80821115611d3e5760008155600101611d2a565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611d9a57611d9a611d42565b604052919050565b600067ffffffffffffffff821115611dbc57611dbc611d42565b5060051b60200190565b6001600160a01b038116811461146b57600080fd5b80356bffffffffffffffffffffffff81168114611df757600080fd5b919050565b600082601f830112611e0d57600080fd5b81356020611e22611e1d83611da2565b611d71565b82815260059290921b84018101918181019086841115611e4157600080fd5b8286015b84811015611e6357611e5681611ddb565b8352918301918301611e45565b509695505050505050565b60008060408385031215611e8157600080fd5b823567ffffffffffffffff80821115611e9957600080fd5b818501915085601f830112611ead57600080fd5b81356020611ebd611e1d83611da2565b82815260059290921b84018101918181019089841115611edc57600080fd5b948201945b83861015611f03578535611ef481611dc6565b82529482019490820190611ee1565b96505086013592505080821115611f1957600080fd5b50611f2685828601611dfc565b9150509250929050565b60008060408385031215611f4357600080fd5b8235611f4e81611dc6565b91506020830135611f5e81611dc6565b809150509250929050565b600060208284031215611f7b57600080fd5b5035919050565b60008060208385031215611f9557600080fd5b823567ffffffffffffffff80821115611fad57600080fd5b818501915085601f830112611fc157600080fd5b813581811115611fd057600080fd5b8660208260051b8501011115611fe557600080fd5b60209290920196919550909350505050565b60008060006060848603121561200c57600080fd5b833561201781611dc6565b9250602084013561202781611dc6565b929592945050506040919091013590565b60006020828403121561204a57600080fd5b8135611b9181611dc6565b6000806040838503121561206857600080fd5b8235915061207860208401611ddb565b90509250929050565b6000806040838503121561209457600080fd5b823561209f81611dc6565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561213d5761213d6120dc565b5060010190565b60006020828403121561215657600080fd5b5051919050565b60008219821115612170576121706120dc565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156121ad576121ad6120dc565b500290565b6000826121e8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156121ff576121ff6120dc565b500390565b60006020828403121561221657600080fd5b81518015158114611b9157600080fd5b60005b83811015612241578181015183820152602001612229565b838111156106355750506000910152565b60008251612264818460208701612226565b9190910192915050565b602081526000825180602084015261228d816040850160208701612226565b601f01601f1916919091016040019291505056fea264697066735822122011b8f9c28be98fcd53f3f53a52e12b47e4f0ee67393976e7676157fc90ea569864736f6c634300080b00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000014000000000000000000000000420000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000010000000000000000000000000b928f82d2e3371420136de930f2dcd7928b2e6100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000014

Deployed Bytecode

0x6080604052600436106101485760003560e01c80637d2a47b9116100c0578063bf6b874e11610074578063d79779b211610059578063d79779b214610462578063d804d3461461049b578063f2fde38b146104b157600080fd5b8063bf6b874e1461040c578063d6b274a51461044257600080fd5b80638da5cb5b116100a55780638da5cb5b146103b8578063926323d5146103d6578063b76ae9ca146103ec57600080fd5b80637d2a47b9146103505780637df446471461037057600080fd5b8063406072a9116101175780636d9634b7116100fc5780636d9634b7146102fb578063715018a61461031b5780637bb1cbc51461033057600080fd5b8063406072a91461029057806355698aa1146102db57600080fd5b80631024187b146101d157806319276d35146101f157806321a95657146102245780633fc8cef31461024457600080fd5b366101cc57336001600160a01b037f000000000000000000000000420000000000000000000000000000000000000616146101ca5760405162461bcd60e51b815260206004820152601760248201527f46533a204554485f53454e4445525f4e4f545f5745544800000000000000000060448201526064015b60405180910390fd5b005b600080fd5b3480156101dd57600080fd5b506101ca6101ec366004611e6e565b6104d1565b3480156101fd57600080fd5b5061021161020c366004611f30565b61063b565b6040519081526020015b60405180910390f35b34801561023057600080fd5b506101ca61023f366004611f69565b610751565b34801561025057600080fd5b506102787f000000000000000000000000420000000000000000000000000000000000000681565b6040516001600160a01b03909116815260200161021b565b34801561029c57600080fd5b506102116102ab366004611f30565b6001600160a01b038082166000908152600260209081526040808320938616835260039093019052205492915050565b3480156102e757600080fd5b506101ca6102f6366004611f82565b610851565b34801561030757600080fd5b506101ca610316366004611f82565b6109a8565b34801561032757600080fd5b506101ca610c53565b34801561033c57600080fd5b506101ca61034b366004611ff7565b610cb9565b34801561035c57600080fd5b5061021161036b366004612038565b610f1d565b34801561037c57600080fd5b5061021161038b366004611f30565b6001600160a01b039081166000908152600260208181526040808420959094168352930190925290205490565b3480156103c457600080fd5b506000546001600160a01b0316610278565b3480156103e257600080fd5b5061021160055481565b3480156103f857600080fd5b506101ca610407366004612055565b610fc4565b34801561041857600080fd5b50610211610427366004612038565b6001600160a01b031660009081526002602052604090205490565b34801561044e57600080fd5b506101ca61045d366004612081565b6111fe565b34801561046e57600080fd5b5061021161047d366004612038565b6001600160a01b031660009081526002602052604090206001015490565b3480156104a757600080fd5b5061021160045481565b3480156104bd57600080fd5b506101ca6104cc366004612038565b61138c565b6000546001600160a01b0316331461052b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101c1565b61053760036000611d10565b8151806105865760405162461bcd60e51b815260206004820152600f60248201527f46533a20454d5054595f4152524159000000000000000000000000000000000060448201526064016101c1565b815181146105d65760405162461bcd60e51b815260206004820152601c60248201527f46533a20494e505554535f4c454e4754485f4d5553545f4d415443480000000060448201526064016101c1565b60045460055560005b81811015610635576106238482815181106105fc576105fc6120ad565b6020026020010151848381518110610616576106166120ad565b602002602001015161146e565b8061062d8161210b565b9150506105df565b50505050565b6001600160a01b03811660009081526002602052604081208054806106655760009250505061074b565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa1580156106c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e99190612144565b83600101546106f8919061215d565b6001600160a01b038716600090815260038501602090815260408083205460028801909252909120549192509083906107319084612175565b61073b91906121b2565b61074591906121ed565b93505050505b92915050565b6000546001600160a01b031633146107ab5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101c1565b806107f85760405162461bcd60e51b815260206004820152600f60248201527f46533a205745494748545f5a45524f000000000000000000000000000000000060448201526064016101c1565b60045481600554610809919061215d565b61081391906121ed565b60055560048190556040518181527f16326b748bc59ea9b379269f3d88165d7540f9761e4a100e0be7e21c90a15b829060200160405180910390a150565b600260015414156108a45760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016101c1565b60026001556000805b8281101561099e576108e6335b8585848181106108cc576108cc6120ad565b90506020020160208101906108e19190612038565b6116b3565b91506109198484838181106108fd576108fd6120ad565b90506020020160208101906109129190612038565b3384611772565b7f8ac5b3c2902b21b6bbb4d99ec195e28a242cb6a1777804db10b84d91e20064293385858481811061094d5761094d6120ad565b90506020020160208101906109629190612038565b604080516001600160a01b039384168152929091166020830152810184905260600160405180910390a1806109968161210b565b9150506108ad565b5050600180555050565b600260015414156109fb5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016101c1565b60026001556000805b8281101561099e57610a15336108ba565b91507f00000000000000000000000042000000000000000000000000000000000000066001600160a01b0316848483818110610a5357610a536120ad565b9050602002016020810190610a689190612038565b6001600160a01b03161415610bb9576040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018390527f00000000000000000000000042000000000000000000000000000000000000066001600160a01b031690632e1a7d4d90602401600060405180830381600087803b158015610af257600080fd5b505af1158015610b06573d6000803e3d6000fd5b505050506000610b133390565b6001600160a01b03168360405160006040518083038185875af1925050503d8060008114610b5d576040519150601f19603f3d011682016040523d82523d6000602084013e610b62565b606091505b5050905080610bb35760405162461bcd60e51b815260206004820152601560248201527f46533a204554485f5452414e4645525f4552524f52000000000000000000000060448201526064016101c1565b50610bce565b610bce8484838181106108fd576108fd6120ad565b7f8ac5b3c2902b21b6bbb4d99ec195e28a242cb6a1777804db10b84d91e200642933858584818110610c0257610c026120ad565b9050602002016020810190610c179190612038565b604080516001600160a01b039384168152929091166020830152810184905260600160405180910390a180610c4b8161210b565b915050610a04565b6000546001600160a01b03163314610cad5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101c1565b610cb76000611820565b565b60026001541415610d0c5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016101c1565b60026001556001600160a01b038316610d675760405162461bcd60e51b815260206004820152601c60248201527f46533a20494e56414c49445f524f59414c544945535f5441524745540000000060448201526064016101c1565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015610dc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610deb9190612144565b9050610df983333085611888565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009082906001600160a01b038616906370a0823190602401602060405180830381865afa158015610e5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7f9190612144565b610e8991906121ed565b90506000600554905060008160045484610ea39190612175565b610ead91906121b2565b9050610eba8684846118d9565b610ec5878288611a3e565b604080516001600160a01b03808a168252881660208201529081018290527f58ca863eaccdde65fd836b5be0c27c260459f63059e82a3c3338748ea5e686809060600160405180910390a15050600180555050505050565b6000805b600354811015610f7b57826001600160a01b031660038281548110610f4857610f486120ad565b6000918252602090912001546001600160a01b03161415610f695792915050565b80610f738161210b565b915050610f21565b5060405162461bcd60e51b815260206004820152601960248201527f46533a205348415245484f4c4445525f4e4f545f464f554e440000000000000060448201526064016101c1565b6000546001600160a01b0316331461101e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101c1565b6bffffffffffffffffffffffff81166110795760405162461bcd60e51b815260206004820152601260248201527f46533a20494e56414c49445f574549474854000000000000000000000000000060448201526064016101c1565b60035482106110ca5760405162461bcd60e51b815260206004820152601960248201527f46533a20494e56414c49445f4143434f554e545f494e4445580000000000000060448201526064016101c1565b6000600383815481106110df576110df6120ad565b600091825260209091200180546005549192506bffffffffffffffffffffffff740100000000000000000000000000000000000000009091048116916111279185169061215d565b61113191906121ed565b60058190556111825760405162461bcd60e51b815260206004820152601660248201527f46533a20544f54414c5f574549474854535f5a45524f0000000000000000000060448201526064016101c1565b80546001600160a01b03908116740100000000000000000000000000000000000000006bffffffffffffffffffffffff851690810282811785556040805194909116909217835260208301527f06945c82029753372decfeace485696553ab08354f682b4fa8e08d277e254985910160405180910390a1505050565b600260015414156112515760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016101c1565b6002600155600480546005546040517f70a08231000000000000000000000000000000000000000000000000000000008152309381019390935203906000906001600160a01b038516906370a0823190602401602060405180830381865afa1580156112c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e59190612144565b90506112f384333086611888565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015261099e90859083906001600160a01b038316906370a0823190602401602060405180830381865afa158015611358573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137c9190612144565b61138691906121ed565b846118d9565b6000546001600160a01b031633146113e65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101c1565b6001600160a01b0381166114625760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016101c1565b61146b81611820565b50565b6bffffffffffffffffffffffff81166114c95760405162461bcd60e51b815260206004820152600f60248201527f46533a205a45524f5f574549474854000000000000000000000000000000000060448201526064016101c1565b6001600160a01b03821661151f5760405162461bcd60e51b815260206004820152601360248201527f46533a20494e56414c49445f414444524553530000000000000000000000000060448201526064016101c1565b60005b6003548110156115be57826001600160a01b031660038281548110611549576115496120ad565b6000918252602090912001546001600160a01b031614156115ac5760405162461bcd60e51b815260206004820152601760248201527f46533a20414c52454144595f5348415245484f4c44455200000000000000000060448201526064016101c1565b806115b68161210b565b915050611522565b50604080518082019091526001600160a01b0380841682526bffffffffffffffffffffffff808416602084018181526003805460018101825560009182529551915190931674010000000000000000000000000000000000000000029316929092177fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b90930192909255600580549192909161165b90849061215d565b9091555050604080516001600160a01b03841681526bffffffffffffffffffffffff831660208201527f6beafc8ad282580ef154ba4a63a0a743acc9d351060b89cf09cfbd3fd621c878910160405180910390a15050565b6000806116c0848461063b565b90508061170f5760405162461bcd60e51b815260206004820152601260248201527f46533a204e4f5f5041594d454e545f445545000000000000000000000000000060448201526064016101c1565b6001600160a01b0380841660009081526002602090815260408083209388168352600384019091528120805484929061174990849061215d565b9250508190555081816001016000828254611764919061215d565b909155509195945050505050565b6040516001600160a01b03831660248201526044810182905261181b9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611a9a565b505050565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040516001600160a01b03808516602483015283166044820152606481018290526106359085907f23b872dd00000000000000000000000000000000000000000000000000000000906084016117b7565b60006003805480602002602001604051908101604052809291908181526020016000905b8282101561196257600084815260209081902060408051808201909152908401546001600160a01b03811682527401000000000000000000000000000000000000000090046bffffffffffffffffffffffff16818301528252600190920191016118fd565b50505050905060005b81518110156119ef576119dd828281518110611989576119896120ad565b602002602001015160000151848484815181106119a8576119a86120ad565b6020026020010151602001516bffffffffffffffffffffffff16876119cd9190612175565b6119d791906121b2565b87611a3e565b806119e78161210b565b91505061196b565b50604080513381526001600160a01b038616602082015280820185905290517f45fdc265dc29885b9a485766b03e70978440d38c7c328ee0a14fa40c76c6af549181900360600190a150505050565b6001600160a01b0380821660009081526002602081815260408084209488168452918401905281208054859290611a7690849061215d565b9091555050805483908290600090611a8f90849061215d565b909155505050505050565b6000611aef826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611b7f9092919063ffffffff16565b80519091501561181b5780806020019051810190611b0d9190612204565b61181b5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016101c1565b6060611b8e8484600085611b98565b90505b9392505050565b606082471015611c105760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016101c1565b843b611c5e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016101c1565b600080866001600160a01b03168587604051611c7a9190612252565b60006040518083038185875af1925050503d8060008114611cb7576040519150601f19603f3d011682016040523d82523d6000602084013e611cbc565b606091505b5091509150611ccc828286611cd7565b979650505050505050565b60608315611ce6575081611b91565b825115611cf65782518084602001fd5b8160405162461bcd60e51b81526004016101c1919061226e565b508054600082559060005260206000209081019061146b91905b80821115611d3e5760008155600101611d2a565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611d9a57611d9a611d42565b604052919050565b600067ffffffffffffffff821115611dbc57611dbc611d42565b5060051b60200190565b6001600160a01b038116811461146b57600080fd5b80356bffffffffffffffffffffffff81168114611df757600080fd5b919050565b600082601f830112611e0d57600080fd5b81356020611e22611e1d83611da2565b611d71565b82815260059290921b84018101918181019086841115611e4157600080fd5b8286015b84811015611e6357611e5681611ddb565b8352918301918301611e45565b509695505050505050565b60008060408385031215611e8157600080fd5b823567ffffffffffffffff80821115611e9957600080fd5b818501915085601f830112611ead57600080fd5b81356020611ebd611e1d83611da2565b82815260059290921b84018101918181019089841115611edc57600080fd5b948201945b83861015611f03578535611ef481611dc6565b82529482019490820190611ee1565b96505086013592505080821115611f1957600080fd5b50611f2685828601611dfc565b9150509250929050565b60008060408385031215611f4357600080fd5b8235611f4e81611dc6565b91506020830135611f5e81611dc6565b809150509250929050565b600060208284031215611f7b57600080fd5b5035919050565b60008060208385031215611f9557600080fd5b823567ffffffffffffffff80821115611fad57600080fd5b818501915085601f830112611fc157600080fd5b813581811115611fd057600080fd5b8660208260051b8501011115611fe557600080fd5b60209290920196919550909350505050565b60008060006060848603121561200c57600080fd5b833561201781611dc6565b9250602084013561202781611dc6565b929592945050506040919091013590565b60006020828403121561204a57600080fd5b8135611b9181611dc6565b6000806040838503121561206857600080fd5b8235915061207860208401611ddb565b90509250929050565b6000806040838503121561209457600080fd5b823561209f81611dc6565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561213d5761213d6120dc565b5060010190565b60006020828403121561215657600080fd5b5051919050565b60008219821115612170576121706120dc565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156121ad576121ad6120dc565b500290565b6000826121e8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156121ff576121ff6120dc565b500390565b60006020828403121561221657600080fd5b81518015158114611b9157600080fd5b60005b83811015612241578181015183820152602001612229565b838111156106355750506000910152565b60008251612264818460208701612226565b9190910192915050565b602081526000825180602084015261228d816040850160208701612226565b601f01601f1916919091016040019291505056fea264697066735822122011b8f9c28be98fcd53f3f53a52e12b47e4f0ee67393976e7676157fc90ea569864736f6c634300080b0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000014000000000000000000000000420000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000010000000000000000000000000b928f82d2e3371420136de930f2dcd7928b2e6100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000014

-----Decoded View---------------
Arg [0] : _accounts (address[]): 0x0b928f82d2E3371420136DE930f2dCd7928b2e61
Arg [1] : _weights (uint96[]): 20
Arg [2] : _royaltiesWeight (uint256): 20
Arg [3] : _weth (address): 0x4200000000000000000000000000000000000006

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000014
Arg [3] : 0000000000000000000000004200000000000000000000000000000000000006
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [5] : 0000000000000000000000000b928f82d2e3371420136de930f2dcd7928b2e61
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000014


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Chain Token Portfolio % Price Amount Value
POL99.68%$2.643,314,983.6889$8,751,556.94
POL0.14%$0.99980611,909.6374$11,907.33
POL0.01%$0.3014033,079.7509$928.25
POL<0.01%$2,679.240.2221$595.08
POL<0.01%$251.021.4097$353.87
POL<0.01%$0.999435313.8646$313.69
POL<0.01%$168.841.2765$215.52
POL<0.01%$17.789.5827$170.38
POL<0.01%$95,3780.00149305$142.4
POL<0.01%$7.3116.0847$117.58
POL<0.01%$4.1618.529$77.08
POL<0.01%$52.761.4512$76.56
POL<0.01%$23.352.1329$49.8
POL<0.01%$0.99943137.3252$37.3
POL<0.01%$1.5623.3198$36.38
POL<0.01%$0.50556459.3714$30.02
POL<0.01%$1.7714.7071$26.03
POL<0.01%$0.35648862.8485$22.4
POL<0.01%$0.132322154.2086$20.41
POL<0.01%$1.0615.4935$16.5
POL<0.01%$9.581.7163$16.44
POL<0.01%$0.86204417.015$14.67
POL<0.01%$0.34395729.985$10.31
POL<0.01%$0.87106111.6817$10.18
POL<0.01%$1.884.7388$8.91
POL<0.01%$0.08535394.8694$8.1
POL<0.01%$0.35794520.8463$7.46
POL<0.01%$101.710.0713$7.25
POL<0.01%$240.820.0298$7.18
POL<0.01%$0.017458361.7358$6.32
POL<0.01%$0.039565159.0078$6.29
POL<0.01%$0.9615545.9422$5.71
POL<0.01%$0.0046481,078.8464$5.01
POL<0.01%$0.0022132,201.3957$4.87
POL<0.01%$0.5319188.886$4.73
POL<0.01%$2.22.0083$4.42
POL<0.01%$0.26388916.5498$4.37
POL<0.01%$0.482258.7201$4.21
POL<0.01%$0.007965511.0512$4.07
POL<0.01%$0.3449211.1286$3.84
POL<0.01%$5.630.6558$3.69
POL<0.01%$0.022281155.1219$3.46
POL<0.01%$0.22208311$2.44
POL<0.01%$271.670.00874628$2.38
POL<0.01%$0.33586.766$2.27
POL<0.01%$0.6542683.4261$2.24
POL<0.01%$0.02376588.3383$2.1
POL<0.01%$1.751.1102$1.94
POL<0.01%$0.9998061.9373$1.94
POL<0.01%$0.009848187.21$1.84
POL<0.01%$3,019.790.00059521$1.8
POL<0.01%$0.994991.6175$1.61
POL<0.01%$11.5788$1.58
POL<0.01%$11.5121$1.51
POL<0.01%$0.0002435,762.6236$1.4
POL<0.01%$0.1720847.6784$1.32
POL<0.01%$0.10315212.6287$1.3
POL<0.01%$1.940.6053$1.17
POL<0.01%$0.005368216.7216$1.16
POL<0.01%$1.051.0993$1.15
POL<0.01%$62.90.0177$1.12
POL<0.01%$20.760.0502$1.04
POL<0.01%$186.740.00548575$1.02
POL<0.01%$0.9999620.979$0.9789
POL<0.01%$3,198.140.00024944$0.7977
POL<0.01%$0.1583554.8071$0.7612
POL<0.01%$0.00773592.6398$0.7165
POL<0.01%$0.2669742.4605$0.6568
POL<0.01%$8.740.0729$0.6368
POL<0.01%$3.050.1869$0.57
POL<0.01%$0.0004531,223.8913$0.555
POL<0.01%$0.3126371.7624$0.5509
POL<0.01%$0.002892189.4475$0.5479
POL<0.01%$0.0001633,300$0.5378
POL<0.01%$6,121.760.00008727$0.5342
POL<0.01%$0.02506120.5089$0.5139
POL<0.01%$95,8400.0000047$0.4504
POL<0.01%$0.1195533.5905$0.4292
POL<0.01%$0.9990970.4183$0.4179
POL<0.01%$0.1059353.8554$0.4084
POL<0.01%$0.00480176.633$0.3678
POL<0.01%$89,466.980.00000399$0.3569
POL<0.01%<$0.00000159,407,530.8464$0.3445
POL<0.01%$0.0757484.4893$0.34
POL<0.01%$0.01829416.7138$0.3057
POL<0.01%<$0.00000133,114,854.5622$0.3046
POL<0.01%$0.177811.5948$0.2835
POL<0.01%$0.000993282.9304$0.281
POL<0.01%$0.01113124.9025$0.2771
POL<0.01%$0.6715040.4002$0.2687
POL<0.01%$0.1288311.9884$0.2561
POL<0.01%$1,175.190.00020334$0.2389
POL<0.01%$0.0677663.4343$0.2327
POL<0.01%$0.000402560.0416$0.2249
POL<0.01%$17.80.012$0.2133
POL<0.01%$2,673.370.00007555$0.2019
POL<0.01%$0.01630711.4712$0.187
POL<0.01%$0.00354551.1608$0.1813
POL<0.01%$0.5726070.3112$0.1781
POL<0.01%$0.0408684.2584$0.174
POL<0.01%$2,675.760.00006159$0.1647
POL<0.01%<$0.000001794,260.741$0.1505
POL<0.01%$0.3464740.4227$0.1464
POL<0.01%$0.0629082.3005$0.1447
POL<0.01%$0.0245655.2501$0.1289
POL<0.01%$0.000184691.6394$0.1274
POL<0.01%$0.326630.3851$0.1257
POL<0.01%$12.140.00990426$0.1202
POL<0.01%$0.3794990.3097$0.1175
POL<0.01%$0.0962671.1681$0.1124
BSC0.03%$647.084.2872$2,774.15
BSC0.02%$0.9994191,825.1131$1,824.05
BSC0.01%$0.999871,228.9267$1,228.77
BSC0.01%$1.011,171.9749$1,181.51
BSC<0.01%$95,646.280.00465734$445.46
BSC<0.01%$169.192.1901$370.55
BSC<0.01%$8.4527.0765$228.78
BSC<0.01%$2,689.20.0391$105.21
BSC<0.01%$17.865.1822$92.58
BSC<0.01%$132.40.5917$78.34
BSC<0.01%$0.000093607,541.0906$56.26
BSC<0.01%$1.0250.7375$51.61
BSC<0.01%$23.451.8671$43.78
BSC<0.01%$0.99862342.4149$42.36
BSC<0.01%$0.99988739.3878$39.38
BSC<0.01%$4.188.5711$35.83
BSC<0.01%$252.050.1252$31.57
BSC<0.01%$0.75702840.9948$31.03
BSC<0.01%$0.60912540.043$24.39
BSC<0.01%$0.0239994.6706$23.77
BSC<0.01%$2.568.8727$22.73
BSC<0.01%$0.13937160.7612$22.41
BSC<0.01%$13.831.5546$21.5
BSC<0.01%$0.30303269.058$20.93
BSC<0.01%$4.583.9686$18.17
BSC<0.01%<$0.000001128,174,332.1163$15.68
BSC<0.01%$2.535.9363$15.02
BSC<0.01%$0.30815339.8542$12.28
BSC<0.01%$3.682.9277$10.77
BSC<0.01%$3.133.0347$9.51
BSC<0.01%$708.50.013$9.21
BSC<0.01%$0.25227728.2516$7.13
BSC<0.01%$4.771.3893$6.63
BSC<0.01%$1.444.5786$6.59
BSC<0.01%$0.0017673,394.9221$6
BSC<0.01%$4.181.3719$5.73
BSC<0.01%$9.60.5681$5.45
BSC<0.01%$0.26440919.5475$5.17
BSC<0.01%$1.33.8454$5.01
BSC<0.01%$9.740.5136$5
BSC<0.01%$0.0026471,835.7869$4.86
BSC<0.01%$0.752065.802$4.36
BSC<0.01%$0.0012813,219.3856$4.12
BSC<0.01%$2,683.730.00137378$3.69
BSC<0.01%$0.06540554.6031$3.57
BSC<0.01%$3.251.0891$3.54
BSC<0.01%$3.241.0906$3.54
BSC<0.01%$0.0031541,069.366$3.37
BSC<0.01%$0.020916158.7713$3.32
BSC<0.01%$0.0006614,897.7213$3.24
BSC<0.01%$0.03542490.3595$3.2
BSC<0.01%$0.690624.3143$2.98
BSC<0.01%$0.07870637.6285$2.96
BSC<0.01%$0.6413614.2743$2.74
BSC<0.01%$0.0011182,382.1157$2.66
BSC<0.01%$0.03695265.992$2.44
BSC<0.01%$0.0007793,109.8848$2.42
BSC<0.01%$0.000211,571.8956$2.31
BSC<0.01%$0.2439959.437$2.3
BSC<0.01%$0.4263824.6143$1.97
BSC<0.01%$1.231.5862$1.95
BSC<0.01%$300.0637$1.91
BSC<0.01%$0.02229984.7988$1.89
BSC<0.01%$0.0002098,239.972$1.72
BSC<0.01%$0.9986271.6656$1.66
BSC<0.01%$2.20.6751$1.49
BSC<0.01%<$0.0000017,283,100,687.3492$1.46
BSC<0.01%$0.09305915.4735$1.44
BSC<0.01%$0.2296035.7419$1.32
BSC<0.01%$0.11990110.4523$1.25
BSC<0.01%$0.07944815.3936$1.22
BSC<0.01%$40.880.0298$1.22
BSC<0.01%$0.000167,396.8681$1.18
BSC<0.01%$0.3847782.8886$1.11
BSC<0.01%$1.750.6074$1.06
BSC<0.01%$0.002666385.3369$1.03
BSC<0.01%$0.1390666.4469$0.8965
BSC<0.01%$695.420.00126788$0.8817
BSC<0.01%$0.2675843.1711$0.8485
BSC<0.01%$0.06166413.4975$0.8323
BSC<0.01%$0.03784221.2992$0.806
BSC<0.01%$0.000003211,806.3943$0.7307
BSC<0.01%$0.9997520.7159$0.7157
BSC<0.01%$0.002138329.4611$0.7043
BSC<0.01%$241.90.00289629$0.7006
BSC<0.01%$0.4981531.3649$0.6799
BSC<0.01%$0.02981322.2864$0.6644
BSC<0.01%$0.000661983.451$0.6502
BSC<0.01%$0.02401626.1443$0.6278
BSC<0.01%$0.0003281,799.2729$0.5896
BSC<0.01%$1.040.5198$0.5405
BSC<0.01%$0.02157624.0762$0.5194
BSC<0.01%$0.00846761.2725$0.5187
BSC<0.01%$0.6154350.8396$0.5167
BSC<0.01%$0.000003170,376.473$0.4957
BSC<0.01%$0.00001143,239.8498$0.4851
BSC<0.01%$0.2200832.1043$0.4631
BSC<0.01%$0.2028242.2379$0.4538
BSC<0.01%$0.0550627.8172$0.4304
BSC<0.01%$0.002434174.0987$0.4238
BSC<0.01%$0.003184128.7281$0.4099
BSC<0.01%$0.000609669.8428$0.4077
BSC<0.01%$0.0657016.0466$0.3972
BSC<0.01%$0.0949963.9657$0.3767
BSC<0.01%$0.0001163,230.4251$0.3736
BSC<0.01%$0.00703253.1259$0.3735
BSC<0.01%$0.3472471.0385$0.3606
BSC<0.01%$0.0667795.2555$0.3509
BSC<0.01%$0.1741111.9852$0.3456
BSC<0.01%$0.1176842.8693$0.3376
BSC<0.01%$0.01983816.2042$0.3214
BSC<0.01%$0.00464864.4861$0.2997
BSC<0.01%$0.0000783,707.3978$0.2889
BSC<0.01%$0.01471119.3219$0.2842
BSC<0.01%$0.00307192.1649$0.283
BSC<0.01%$0.02167313.0514$0.2828
BSC<0.01%$0.002189125.849$0.2755
BSC<0.01%$0.2404061.0206$0.2453
BSC<0.01%$0.001991123.0409$0.2449
BSC<0.01%$0.0448715.3085$0.2381
BSC<0.01%$0.00869627.3307$0.2376
BSC<0.01%$0.01846512.5407$0.2315
BSC<0.01%$0.5713640.403$0.2302
BSC<0.01%$0.00521640.2331$0.2098
BSC<0.01%$0.652210.3114$0.2031
BSC<0.01%$0.0001531,308.1701$0.1996
BSC<0.01%$0.1247221.5489$0.1931
BSC<0.01%$0.01785410.0479$0.1794
BSC<0.01%$0.0198218.6764$0.1719
BSC<0.01%$0.1128791.4861$0.1677
BSC<0.01%$0.001308123.0489$0.1608
BSC<0.01%$0.00635725.2865$0.1607
BSC<0.01%$0.0221437.1751$0.1588
BSC<0.01%$0.000334457.8465$0.153
BSC<0.01%$0.0549692.694$0.148
BSC<0.01%$0.00663721.201$0.1407
BSC<0.01%$0.00112124.3195$0.1392
BSC<0.01%$0.0200096.7415$0.1348
BSC<0.01%$0.3427560.3748$0.1284
BSC<0.01%$9.870.0125$0.123
BSC<0.01%$0.00258947.2712$0.1223
BSC<0.01%$0.000971116.1538$0.1127
BSC<0.01%$0.00304736.8911$0.1124
BSC<0.01%$0.00552220.2884$0.112
BSC<0.01%$0.0032434.5217$0.1118
BSC<0.01%$0.000639173.6475$0.1108
OP<0.01%$95,4120.00758407$723.61
OP<0.01%$2,682.230.2483$665.93
OP<0.01%$0.0706193,567.9798$251.97
OP<0.01%$0.999863212.6685$212.64
OP<0.01%$0.999605189.1777$189.1
OP<0.01%$3,201.750.0247$78.95
OP<0.01%$17.824.2218$75.23
OP<0.01%$1.0967.7694$73.91
OP<0.01%$1.7641.6634$73.33
OP<0.01%$0.99942273.2841$73.24
OP<0.01%$0.070619992.6269$70.1
OP<0.01%$0.264002203.903$53.83
OP<0.01%$0.436368122.9598$53.66
OP<0.01%$251.70.2131$53.65
OP<0.01%$2,679.850.0196$52.62
OP<0.01%$0.45990990.6751$41.7
OP<0.01%$9.594.1742$40.03
OP<0.01%$0.99840434.3758$34.32
OP<0.01%$0.97662731.9597$31.21
OP<0.01%$3,022.580.00732372$22.14
OP<0.01%$0.96593420.4788$19.78
OP<0.01%$0.0077442,231.1425$17.28
OP<0.01%$2,984.210.00519714$15.51
OP<0.01%$0.99986314.7649$14.76
OP<0.01%$0.41487827.8862$11.57
OP<0.01%$0.031793312.4769$9.93
OP<0.01%$0.15849860.5628$9.6
OP<0.01%$0.030119189.3464$5.7
OP<0.01%$0.5059899.2692$4.69
OP<0.01%$0.011094331.7706$3.68
OP<0.01%$2,617.650.00124479$3.26
OP<0.01%$12.840.2437$3.13
OP<0.01%$0.3404956.8586$2.34
OP<0.01%$0.9999361.5258$1.53
OP<0.01%$11.5179$1.52
OP<0.01%$0.9951091.3637$1.36
OP<0.01%$0.1288276.7874$0.8744
OP<0.01%$0.001247589.1849$0.7348
OP<0.01%$0.0601618.7237$0.5248
OP<0.01%$0.001338342.4602$0.4582
OP<0.01%$0.000811405.2025$0.3285
OP<0.01%$102.90.0031767$0.3268
OP<0.01%$0.9997430.3003$0.3002
OP<0.01%$0.3472810.689$0.2392
OP<0.01%$0.9765550.2403$0.2346
OP<0.01%$1.010.2192$0.2209
OP<0.01%$1.940.1104$0.2141
OP<0.01%$3.030.0621$0.188
OP<0.01%$0.0764181.8159$0.1387
AVAX<0.01%$0.999863105.1856$105.17
AVAX<0.01%$23.364.0183$93.85
AVAX<0.01%$251.70.3624$91.21
AVAX<0.01%$17.784.7347$84.17
AVAX<0.01%$95,4120.00067551$64.45
AVAX<0.01%$2,682.230.0197$52.77
AVAX<0.01%$19.571.9978$39.1
AVAX<0.01%$3.2410.8332$35.05
AVAX<0.01%$0.99986325.8727$25.87
AVAX<0.01%$0.99986317.7739$17.77
AVAX<0.01%$27.820.4369$12.16
AVAX<0.01%$0.9994588.1496$8.15
AVAX<0.01%$0.9994587.3209$7.32
AVAX<0.01%$0.7091297.0201$4.98
AVAX<0.01%$0.18682224.7823$4.63
AVAX<0.01%$0.9989653.3776$3.37
AVAX<0.01%$0.11908123.7744$2.83
AVAX<0.01%$0.009189301.6085$2.77
AVAX<0.01%$9.590.201$1.93
AVAX<0.01%$0.2292396.6079$1.51
AVAX<0.01%$0.2640024.5903$1.21
AVAX<0.01%$0.3460772.7265$0.9435
AVAX<0.01%$240.930.00323943$0.7804
AVAX<0.01%$370.370.00157719$0.5841
AVAX<0.01%$0.01747929.343$0.5128
AVAX<0.01%$0.04030511.5714$0.4663
AVAX<0.01%$0.8625220.511$0.4407
AVAX<0.01%$0.000925453.0038$0.4189
AVAX<0.01%$3.050.1328$0.4049
AVAX<0.01%$1.010.3873$0.3892
AVAX<0.01%$0.0002751,024.2513$0.2816
AVAX<0.01%$1.750.1326$0.2316
AVAX<0.01%$0.001237160.4465$0.1984
AVAX<0.01%$0.2850180.5946$0.1694
AVAX<0.01%$0.2671090.6292$0.168
AVAX<0.01%$95,5490.00000168$0.1605
AVAX<0.01%$0.9954660.1483$0.1476
AVAX<0.01%$0.0182436.9459$0.1267
BASE<0.01%<$0.000001295,774,647$5.92
BASE<0.01%$0.0013393,000$4.02
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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.