Contract 0x6afCFF9189e8ed3fCc1CFfa184FEB1276f6A82A5 3

Contract Overview

Balance:
0 MATIC
Txn Hash
Method
Block
From
To
Value [Txn Fee]
0x7b3b561ec078fda8ea910d73d5269363e7babe33b855aecccc1f3a8c0fe9a524Add Auth Callers281974672022-09-20 6:16:43189 days 6 hrs ago0xb3f91051cd787a0d14ef806fbb7a11c847966869 IN  0x6afcff9189e8ed3fcc1cffa184feb1276f6a82a50 MATIC0.00313080642
0x5c5875f16b2b36c4b2355e17d71a696d224fd39dc00aaa85c2dd7188c498d053Add Auth Callers281952892022-09-20 3:14:39189 days 9 hrs ago0xb3f91051cd787a0d14ef806fbb7a11c847966869 IN  0x6afcff9189e8ed3fcc1cffa184feb1276f6a82a50 MATIC0.0031313142
0x2ccd0aecba78e60109038e735231c00292cc64b0e54188a75a8d9e88d74f7056Add Supported Ca...281949242022-09-20 2:44:08189 days 10 hrs ago0xb3f91051cd787a0d14ef806fbb7a11c847966869 IN  0x6afcff9189e8ed3fcc1cffa184feb1276f6a82a50 MATIC0.00090921642
0x8b8dfafac1a9813f5b41ad6bceb4f64725ecf614617f68434d6ed6d12a7d3eecAdd Auth Callers281836532022-09-19 11:01:57190 days 1 hr ago0xb3f91051cd787a0d14ef806fbb7a11c847966869 IN  0x6afcff9189e8ed3fcc1cffa184feb1276f6a82a50 MATIC0.0038495142
0x511a674d8d75c075548e0e698e37c297d975b0c6896b38f566775a5b1049f7480x60806040281815922022-09-19 8:09:40190 days 4 hrs ago0xfa9da51631268a30ec3ddd1ccbf46c65fad99251 IN  Create: AnycallExecutor0 MATIC0.002490755013 2.500000014
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
AnycallExecutor

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2022-10-10
*/

// SPDX-License-Identifier: GPL-3.0-or-later
// Sources flattened with hardhat v2.11.2 https://hardhat.org

// File contracts/router/interfaces/IAnycallProxy.sol

pragma solidity ^0.8.10;

/// IAnycallProxy interface of the anycall proxy
/// Note: `receiver` is the `fallback receive address` when exec failed.
interface IAnycallProxy {
    function exec(
        address token,
        address receiver,
        uint256 amount,
        bytes calldata data
    ) external returns (bool success, bytes memory result);
}


// File contracts/router/interfaces/IAnycallExecutor.sol

pragma solidity ^0.8.6;

/// IAnycallExecutor interface of the anycall executor
/// Note: `_receiver` is the `fallback receive address` when exec failed.
interface IAnycallExecutor {
    function execute(
        address _anycallProxy,
        address _token,
        address _receiver,
        uint256 _amount,
        bytes calldata _data
    ) external returns (bool success, bytes memory result);
}


// File contracts/access/MPCManageable.sol


pragma solidity ^0.8.10;

abstract contract MPCManageable {
    address public mpc;
    address public pendingMPC;

    uint256 public constant delay = 2 days;
    uint256 public delayMPC;

    modifier onlyMPC() {
        require(msg.sender == mpc, "MPC: only mpc");
        _;
    }

    event LogChangeMPC(
        address indexed oldMPC,
        address indexed newMPC,
        uint256 effectiveTime
    );
    event LogApplyMPC(
        address indexed oldMPC,
        address indexed newMPC,
        uint256 applyTime
    );

    constructor(address _mpc) {
        require(_mpc != address(0), "MPC: mpc is the zero address");
        mpc = _mpc;
        emit LogChangeMPC(address(0), mpc, block.timestamp);
    }

    function changeMPC(address _mpc) external onlyMPC {
        require(_mpc != address(0), "MPC: mpc is the zero address");
        pendingMPC = _mpc;
        delayMPC = block.timestamp + delay;
        emit LogChangeMPC(mpc, pendingMPC, delayMPC);
    }

    // only the `pendingMPC` can `apply`
    // except when `pendingMPC` is a contract, then `mpc` can also `apply`
    // in case `pendingMPC` has no `apply` wrapper method and cannot `apply`
    function applyMPC() external {
        require(
            msg.sender == pendingMPC ||
                (msg.sender == mpc && address(pendingMPC).code.length > 0),
            "MPC: only pending mpc"
        );
        require(
            delayMPC > 0 && block.timestamp >= delayMPC,
            "MPC: time before delayMPC"
        );
        emit LogApplyMPC(mpc, pendingMPC, block.timestamp);
        mpc = pendingMPC;
        pendingMPC = address(0);
        delayMPC = 0;
    }
}


// File @openzeppelin/contracts/utils/structs/[email protected]

// OpenZeppelin Contracts (last updated v4.7.0) (utils/structs/EnumerableSet.sol)

pragma solidity ^0.8.0;

/**
 * @dev Library for managing
 * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive
 * types.
 *
 * Sets have the following properties:
 *
 * - Elements are added, removed, and checked for existence in constant time
 * (O(1)).
 * - Elements are enumerated in O(n). No guarantees are made on the ordering.
 *
 * ```
 * contract Example {
 *     // Add the library methods
 *     using EnumerableSet for EnumerableSet.AddressSet;
 *
 *     // Declare a set state variable
 *     EnumerableSet.AddressSet private mySet;
 * }
 * ```
 *
 * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)
 * and `uint256` (`UintSet`) are supported.
 *
 * [WARNING]
 * ====
 *  Trying to delete such a structure from storage will likely result in data corruption, rendering the structure unusable.
 *  See https://github.com/ethereum/solidity/pull/11843[ethereum/solidity#11843] for more info.
 *
 *  In order to clean an EnumerableSet, you can either remove all elements one by one or create a fresh instance using an array of EnumerableSet.
 * ====
 */
library EnumerableSet {
    // To implement this library for multiple types with as little code
    // repetition as possible, we write it in terms of a generic Set type with
    // bytes32 values.
    // The Set implementation uses private functions, and user-facing
    // implementations (such as AddressSet) are just wrappers around the
    // underlying Set.
    // This means that we can only create new EnumerableSets for types that fit
    // in bytes32.

    struct Set {
        // Storage of set values
        bytes32[] _values;
        // Position of the value in the `values` array, plus 1 because index 0
        // means a value is not in the set.
        mapping(bytes32 => uint256) _indexes;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function _add(Set storage set, bytes32 value) private returns (bool) {
        if (!_contains(set, value)) {
            set._values.push(value);
            // The value is stored at length-1, but we add 1 to all indexes
            // and use 0 as a sentinel value
            set._indexes[value] = set._values.length;
            return true;
        } else {
            return false;
        }
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function _remove(Set storage set, bytes32 value) private returns (bool) {
        // We read and store the value's index to prevent multiple reads from the same storage slot
        uint256 valueIndex = set._indexes[value];

        if (valueIndex != 0) {
            // Equivalent to contains(set, value)
            // To delete an element from the _values array in O(1), we swap the element to delete with the last one in
            // the array, and then remove the last element (sometimes called as 'swap and pop').
            // This modifies the order of the array, as noted in {at}.

            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;

            if (lastIndex != toDeleteIndex) {
                bytes32 lastValue = set._values[lastIndex];

                // Move the last value to the index where the value to delete is
                set._values[toDeleteIndex] = lastValue;
                // Update the index for the moved value
                set._indexes[lastValue] = valueIndex; // Replace lastValue's index to valueIndex
            }

            // Delete the slot where the moved value was stored
            set._values.pop();

            // Delete the index for the deleted slot
            delete set._indexes[value];

            return true;
        } else {
            return false;
        }
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function _contains(Set storage set, bytes32 value) private view returns (bool) {
        return set._indexes[value] != 0;
    }

    /**
     * @dev Returns the number of values on the set. O(1).
     */
    function _length(Set storage set) private view returns (uint256) {
        return set._values.length;
    }

    /**
     * @dev Returns the value stored at position `index` in the set. O(1).
     *
     * Note that there are no guarantees on the ordering of values inside the
     * array, and it may change when more values are added or removed.
     *
     * Requirements:
     *
     * - `index` must be strictly less than {length}.
     */
    function _at(Set storage set, uint256 index) private view returns (bytes32) {
        return set._values[index];
    }

    /**
     * @dev Return the entire set in an array
     *
     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
     * this function has an unbounded cost, and using it as part of a state-changing function may render the function
     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
     */
    function _values(Set storage set) private view returns (bytes32[] memory) {
        return set._values;
    }

    // Bytes32Set

    struct Bytes32Set {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _add(set._inner, value);
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _remove(set._inner, value);
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {
        return _contains(set._inner, value);
    }

    /**
     * @dev Returns the number of values in the set. O(1).
     */
    function length(Bytes32Set storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    /**
     * @dev Returns the value stored at position `index` in the set. O(1).
     *
     * Note that there are no guarantees on the ordering of values inside the
     * array, and it may change when more values are added or removed.
     *
     * Requirements:
     *
     * - `index` must be strictly less than {length}.
     */
    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {
        return _at(set._inner, index);
    }

    /**
     * @dev Return the entire set in an array
     *
     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
     * this function has an unbounded cost, and using it as part of a state-changing function may render the function
     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
     */
    function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {
        return _values(set._inner);
    }

    // AddressSet

    struct AddressSet {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(AddressSet storage set, address value) internal returns (bool) {
        return _add(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(AddressSet storage set, address value) internal returns (bool) {
        return _remove(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(AddressSet storage set, address value) internal view returns (bool) {
        return _contains(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Returns the number of values in the set. O(1).
     */
    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    /**
     * @dev Returns the value stored at position `index` in the set. O(1).
     *
     * Note that there are no guarantees on the ordering of values inside the
     * array, and it may change when more values are added or removed.
     *
     * Requirements:
     *
     * - `index` must be strictly less than {length}.
     */
    function at(AddressSet storage set, uint256 index) internal view returns (address) {
        return address(uint160(uint256(_at(set._inner, index))));
    }

    /**
     * @dev Return the entire set in an array
     *
     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
     * this function has an unbounded cost, and using it as part of a state-changing function may render the function
     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
     */
    function values(AddressSet storage set) internal view returns (address[] memory) {
        bytes32[] memory store = _values(set._inner);
        address[] memory result;

        /// @solidity memory-safe-assembly
        assembly {
            result := store
        }

        return result;
    }

    // UintSet

    struct UintSet {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(UintSet storage set, uint256 value) internal returns (bool) {
        return _add(set._inner, bytes32(value));
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(UintSet storage set, uint256 value) internal returns (bool) {
        return _remove(set._inner, bytes32(value));
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(UintSet storage set, uint256 value) internal view returns (bool) {
        return _contains(set._inner, bytes32(value));
    }

    /**
     * @dev Returns the number of values on the set. O(1).
     */
    function length(UintSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    /**
     * @dev Returns the value stored at position `index` in the set. O(1).
     *
     * Note that there are no guarantees on the ordering of values inside the
     * array, and it may change when more values are added or removed.
     *
     * Requirements:
     *
     * - `index` must be strictly less than {length}.
     */
    function at(UintSet storage set, uint256 index) internal view returns (uint256) {
        return uint256(_at(set._inner, index));
    }

    /**
     * @dev Return the entire set in an array
     *
     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
     * this function has an unbounded cost, and using it as part of a state-changing function may render the function
     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
     */
    function values(UintSet storage set) internal view returns (uint256[] memory) {
        bytes32[] memory store = _values(set._inner);
        uint256[] memory result;

        /// @solidity memory-safe-assembly
        assembly {
            result := store
        }

        return result;
    }
}


// File contracts/access/MPCAdminsControl.sol


pragma solidity ^0.8.10;


abstract contract MPCAdminsControl is MPCManageable {
    using EnumerableSet for EnumerableSet.AddressSet;
    EnumerableSet.AddressSet private admins;

    constructor(address _admin, address _mpc) MPCManageable(_mpc) {
        admins.add(_mpc);
        admins.add(_admin);
    }

    modifier onlyAdmin() {
        require(_isAdmin(msg.sender), "MPCAdminsControl: only admin");
        _;
    }

    function isAdmin(address _caller) external view returns (bool) {
        return _isAdmin(_caller);
    }

    function getAdminsCount() external view returns (uint256) {
        return admins.length();
    }

    function getAdminAtIndex(uint256 index) external view returns (address) {
        return admins.at(index);
    }

    function getAllAdmins() external view returns (address[] memory) {
        return admins.values();
    }

    function addAdmin(address _admin) external onlyMPC {
        _addAdmin(_admin);
    }

    function removeAdmin(address _admin) external onlyMPC {
        _removeAdmin(_admin);
    }

    function _isAdmin(address _caller) internal view returns (bool) {
        return admins.contains(_caller);
    }

    function _addAdmin(address _admin) internal {
        admins.add(_admin);
    }

    function _removeAdmin(address _admin) internal {
        admins.remove(_admin);
    }
}


// File contracts/router/AnyCallExecutor.sol

pragma solidity ^0.8.6;




/// anycall executor is the delegator to execute contract calling (like a sandbox)
contract AnycallExecutor is IAnycallExecutor, MPCAdminsControl {
    using EnumerableSet for EnumerableSet.AddressSet;
    EnumerableSet.AddressSet private authCallers;

    modifier onlyAuthCaller() {
        require(authCallers.contains(msg.sender), "only auth");
        _;
    }

    constructor(address _admin, address _mpc) MPCAdminsControl(_admin, _mpc) {}

    function isAuthCaller(address _caller) external view returns (bool) {
        return authCallers.contains(_caller);
    }

    function getAuthCallersCount() external view returns (uint256) {
        return authCallers.length();
    }

    function getAuthCallerAtIndex(uint256 index)
        external
        view
        returns (address)
    {
        return authCallers.at(index);
    }

    function getAllAuthCallers() external view returns (address[] memory) {
        return authCallers.values();
    }

    function addAuthCallers(address[] calldata _callers) external onlyAdmin {
        for (uint256 i = 0; i < _callers.length; i++) {
            authCallers.add(_callers[i]);
        }
    }

    function removeAuthCallers(address[] calldata _callers) external onlyAdmin {
        for (uint256 i = 0; i < _callers.length; i++) {
            authCallers.remove(_callers[i]);
        }
    }

    function execute(
        address _anycallProxy,
        address _token,
        address _receiver,
        uint256 _amount,
        bytes calldata _data
    ) external onlyAuthCaller returns (bool success, bytes memory result) {
        return
            IAnycallProxy(_anycallProxy).exec(
                _token,
                _receiver,
                _amount,
                _data
            );
    }
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"_admin","type":"address"},{"internalType":"address","name":"_mpc","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldMPC","type":"address"},{"indexed":true,"internalType":"address","name":"newMPC","type":"address"},{"indexed":false,"internalType":"uint256","name":"applyTime","type":"uint256"}],"name":"LogApplyMPC","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldMPC","type":"address"},{"indexed":true,"internalType":"address","name":"newMPC","type":"address"},{"indexed":false,"internalType":"uint256","name":"effectiveTime","type":"uint256"}],"name":"LogChangeMPC","type":"event"},{"inputs":[{"internalType":"address","name":"_admin","type":"address"}],"name":"addAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_callers","type":"address[]"}],"name":"addAuthCallers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"applyMPC","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_mpc","type":"address"}],"name":"changeMPC","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"delay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delayMPC","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_anycallProxy","type":"address"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"execute","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getAdminAtIndex","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAdminsCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllAdmins","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllAuthCallers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getAuthCallerAtIndex","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthCallersCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_caller","type":"address"}],"name":"isAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_caller","type":"address"}],"name":"isAuthCaller","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mpc","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingMPC","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_admin","type":"address"}],"name":"removeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_callers","type":"address[]"}],"name":"removeAuthCallers","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b5060405162001075380380620010758339810160408190526200003491620001b7565b8181806001600160a01b038116620000925760405162461bcd60e51b815260206004820152601c60248201527f4d50433a206d706320697320746865207a65726f206164647265737300000000604482015260640160405180910390fd5b600080546001600160a01b0319166001600160a01b03831690811782556040514281529091907f581f388e3dd32e1bbf62a290f509c8245f9d0b71ef82614fb2b967ad0a10d5b99060200160405180910390a350620001018160036200012860201b620007e61790919060201c565b506200011d8260036200012860201b620007e61790919060201c565b5050505050620001ef565b60006200013f836001600160a01b03841662000148565b90505b92915050565b6000818152600183016020526040812054620001915750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000142565b50600062000142565b80516001600160a01b0381168114620001b257600080fd5b919050565b60008060408385031215620001cb57600080fd5b620001d6836200019a565b9150620001e6602084016200019a565b90509250929050565b610e7680620001ff6000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c8063b1fb90c4116100ad578063f1c4132e11610071578063f1c4132e14610226578063f6601e1a14610251578063f75c266414610264578063f830e7b414610277578063fae9577f1461028a57600080fd5b8063b1fb90c4146101f1578063b63b38d014610206578063e80415221461020e578063e81ba19814610216578063e9523c971461021e57600080fd5b80635b5120f7116100f45780635b5120f71461018d5780635b7b018c146101ae5780636a42b8f8146101c157806370480275146101cb5780638f4df2dd146101de57600080fd5b8063160f1053146101265780631785f53c1461014257806324d7806c1461015757806336aabfd21461017a575b600080fd5b61012f60025481565b6040519081526020015b60405180910390f35b610155610150366004610a63565b61029d565b005b61016a610165366004610a63565b6102dc565b6040519015158152602001610139565b610155610188366004610a7e565b6102ed565b6101a061019b366004610af3565b610397565b604051610139929190610bc4565b6101556101bc366004610a63565b610468565b61012f6202a30081565b6101556101d9366004610a63565b610560565b6101556101ec366004610a7e565b610593565b6101f9610638565b6040516101399190610c00565b610155610649565b61012f61079b565b61012f6107a7565b6101f96107b3565b610239610234366004610c4d565b6107bf565b6040516001600160a01b039091168152602001610139565b61016a61025f366004610a63565b6107cc565b600054610239906001600160a01b031681565b600154610239906001600160a01b031681565b610239610298366004610c4d565b6107d9565b6000546001600160a01b031633146102d05760405162461bcd60e51b81526004016102c790610c66565b60405180910390fd5b6102d981610802565b50565b60006102e782610811565b92915050565b6102f633610811565b6103425760405162461bcd60e51b815260206004820152601c60248201527f4d504341646d696e73436f6e74726f6c3a206f6e6c792061646d696e0000000060448201526064016102c7565b60005b818110156103925761037f83838381811061036257610362610c8d565b90506020020160208101906103779190610a63565b6005906107e6565b508061038a81610cb9565b915050610345565b505050565b600060606103a660053361081a565b6103de5760405162461bcd60e51b81526020600482015260096024820152680dedcd8f240c2eae8d60bb1b60448201526064016102c7565b60405163145bd81b60e11b81526001600160a01b038916906328b7b03690610412908a908a908a908a908a90600401610cd2565b6000604051808303816000875af1158015610431573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104599190810190610d3c565b91509150965096945050505050565b6000546001600160a01b031633146104925760405162461bcd60e51b81526004016102c790610c66565b6001600160a01b0381166104e85760405162461bcd60e51b815260206004820152601c60248201527f4d50433a206d706320697320746865207a65726f20616464726573730000000060448201526064016102c7565b600180546001600160a01b0319166001600160a01b0383161790556105106202a30042610e04565b60028190556001546000546040519283526001600160a01b03918216929116907f581f388e3dd32e1bbf62a290f509c8245f9d0b71ef82614fb2b967ad0a10d5b99060200160405180910390a350565b6000546001600160a01b0316331461058a5760405162461bcd60e51b81526004016102c790610c66565b6102d98161083c565b61059c33610811565b6105e85760405162461bcd60e51b815260206004820152601c60248201527f4d504341646d696e73436f6e74726f6c3a206f6e6c792061646d696e0000000060448201526064016102c7565b60005b818110156103925761062583838381811061060857610608610c8d565b905060200201602081019061061d9190610a63565b600590610847565b508061063081610cb9565b9150506105eb565b6060610644600561085c565b905090565b6001546001600160a01b031633148061068257506000546001600160a01b03163314801561068257506001546001600160a01b03163b15155b6106c65760405162461bcd60e51b81526020600482015260156024820152744d50433a206f6e6c792070656e64696e67206d706360581b60448201526064016102c7565b60006002541180156106da57506002544210155b6107265760405162461bcd60e51b815260206004820152601960248201527f4d50433a2074696d65206265666f72652064656c61794d50430000000000000060448201526064016102c7565b6001546000546040514281526001600160a01b0392831692909116907f8d32c9dd498e08090b44a0f77fe9ec0278851f9dffc4b430428411243e7df0769060200160405180910390a360018054600080546001600160a01b03199081166001600160a01b038416178255909116909155600255565b60006106446003610869565b60006106446005610869565b6060610644600361085c565b60006102e7600383610873565b60006102e760058361081a565b60006102e7600583610873565b60006107fb836001600160a01b03841661087f565b9392505050565b61080d600382610847565b5050565b60006102e76003835b6001600160a01b038116600090815260018301602052604081205415156107fb565b61080d6003826107e6565b60006107fb836001600160a01b0384166108ce565b606060006107fb836109c1565b60006102e7825490565b60006107fb8383610a1d565b60008181526001830160205260408120546108c6575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556102e7565b5060006102e7565b600081815260018301602052604081205480156109b75760006108f2600183610e17565b855490915060009061090690600190610e17565b905081811461096b57600086600001828154811061092657610926610c8d565b906000526020600020015490508087600001848154811061094957610949610c8d565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061097c5761097c610e2a565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506102e7565b60009150506102e7565b606081600001805480602002602001604051908101604052809291908181526020018280548015610a1157602002820191906000526020600020905b8154815260200190600101908083116109fd575b50505050509050919050565b6000826000018281548110610a3457610a34610c8d565b9060005260206000200154905092915050565b80356001600160a01b0381168114610a5e57600080fd5b919050565b600060208284031215610a7557600080fd5b6107fb82610a47565b60008060208385031215610a9157600080fd5b823567ffffffffffffffff80821115610aa957600080fd5b818501915085601f830112610abd57600080fd5b813581811115610acc57600080fd5b8660208260051b8501011115610ae157600080fd5b60209290920196919550909350505050565b60008060008060008060a08789031215610b0c57600080fd5b610b1587610a47565b9550610b2360208801610a47565b9450610b3160408801610a47565b935060608701359250608087013567ffffffffffffffff80821115610b5557600080fd5b818901915089601f830112610b6957600080fd5b813581811115610b7857600080fd5b8a6020828501011115610b8a57600080fd5b6020830194508093505050509295509295509295565b60005b83811015610bbb578181015183820152602001610ba3565b50506000910152565b82151581526040602082015260008251806040840152610beb816060850160208701610ba0565b601f01601f1916919091016060019392505050565b6020808252825182820181905260009190848201906040850190845b81811015610c415783516001600160a01b031683529284019291840191600101610c1c565b50909695505050505050565b600060208284031215610c5f57600080fd5b5035919050565b6020808252600d908201526c4d50433a206f6e6c79206d706360981b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201610ccb57610ccb610ca3565b5060010190565b6001600160a01b038681168252851660208201526040810184905260806060820181905281018290526000828460a0840137600060a0848401015260a0601f19601f85011683010190509695505050505050565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215610d4f57600080fd5b82518015158114610d5f57600080fd5b602084015190925067ffffffffffffffff80821115610d7d57600080fd5b818501915085601f830112610d9157600080fd5b815181811115610da357610da3610d26565b604051601f8201601f19908116603f01168101908382118183101715610dcb57610dcb610d26565b81604052828152886020848701011115610de457600080fd5b610df5836020830160208801610ba0565b80955050505050509250929050565b808201808211156102e7576102e7610ca3565b818103818111156102e7576102e7610ca3565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220e477f2692bbd2b7af6bf1129ddc6a24bbd66d401a961e5210b9fb79b92fbb9db64736f6c63430008110033000000000000000000000000fa9da51631268a30ec3ddd1ccbf46c65fad99251000000000000000000000000b3f91051cd787a0d14ef806fbb7a11c847966869

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

000000000000000000000000fa9da51631268a30ec3ddd1ccbf46c65fad99251000000000000000000000000b3f91051cd787a0d14ef806fbb7a11c847966869

-----Decoded View---------------
Arg [0] : _admin (address): 0xfa9da51631268a30ec3ddd1ccbf46c65fad99251
Arg [1] : _mpc (address): 0xb3f91051cd787a0d14ef806fbb7a11c847966869

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000fa9da51631268a30ec3ddd1ccbf46c65fad99251
Arg [1] : 000000000000000000000000b3f91051cd787a0d14ef806fbb7a11c847966869


Deployed ByteCode Sourcemap

17507:1747:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1239:23;;;;;;;;;160:25:1;;;148:2;133:18;1239:23:0;;;;;;;;16934:93;;;;;;:::i;:::-;;:::i;:::-;;16382:106;;;;;;:::i;:::-;;:::i;:::-;;;730:14:1;;723:22;705:41;;693:2;678:18;16382:106:0;565:187:1;18423:191:0;;;;;;:::i;:::-;;:::i;18827:424::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;1824:256::-;;;;;;:::i;:::-;;:::i;1194:38::-;;1226:6;1194:38;;16839:87;;;;;;:::i;:::-;;:::i;18622:197::-;;;;;;:::i;:::-;;:::i;18299:116::-;;;:::i;:::-;;;;;;;:::i;2284:496::-;;;:::i;16496:99::-;;;:::i;18018:109::-;;;:::i;16725:106::-;;;:::i;16603:114::-;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;4012:32:1;;;3994:51;;3982:2;3967:18;16603:114:0;3848:203:1;17887:123:0;;;;;;:::i;:::-;;:::i;1135:18::-;;;;;-1:-1:-1;;;;;1135:18:0;;;1160:25;;;;;-1:-1:-1;;;;;1160:25:0;;;18135:156;;;;;;:::i;:::-;;:::i;16934:93::-;1323:3;;-1:-1:-1;;;;;1323:3:0;1309:10;:17;1301:43;;;;-1:-1:-1;;;1301:43:0;;;;;;;:::i;:::-;;;;;;;;;16999:20:::1;17012:6;16999:12;:20::i;:::-;16934:93:::0;:::o;16382:106::-;16439:4;16463:17;16472:7;16463:8;:17::i;:::-;16456:24;16382:106;-1:-1:-1;;16382:106:0:o;18423:191::-;16301:20;16310:10;16301:8;:20::i;:::-;16293:61;;;;-1:-1:-1;;;16293:61:0;;4600:2:1;16293:61:0;;;4582:21:1;4639:2;4619:18;;;4612:30;4678;4658:18;;;4651:58;4726:18;;16293:61:0;4398:352:1;16293:61:0;18511:9:::1;18506:101;18526:19:::0;;::::1;18506:101;;;18567:28;18583:8;;18592:1;18583:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;18567;::::0;:15:::1;:28::i;:::-;-1:-1:-1::0;18547:3:0;::::1;::::0;::::1;:::i;:::-;;;;18506:101;;;;18423:191:::0;;:::o;18827:424::-;19026:12;19040:19;17730:32;:11;17751:10;17730:20;:32::i;:::-;17722:54;;;;-1:-1:-1;;;17722:54:0;;5361:2:1;17722:54:0;;;5343:21:1;5400:1;5380:18;;;5373:29;-1:-1:-1;;;5418:18:1;;;5411:39;5467:18;;17722:54:0;5159:332:1;17722:54:0;19092:151:::1;::::0;-1:-1:-1;;;19092:151:0;;-1:-1:-1;;;;;19092:33:0;::::1;::::0;::::1;::::0;:151:::1;::::0;19144:6;;19169:9;;19197:7;;19223:5;;;;19092:151:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;19092:151:0::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;19072:171;;;;18827:424:::0;;;;;;;;;:::o;1824:256::-;1323:3;;-1:-1:-1;;;;;1323:3:0;1309:10;:17;1301:43;;;;-1:-1:-1;;;1301:43:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1893:18:0;::::1;1885:59;;;::::0;-1:-1:-1;;;1885:59:0;;7552:2:1;1885:59:0::1;::::0;::::1;7534:21:1::0;7591:2;7571:18;;;7564:30;7630;7610:18;;;7603:58;7678:18;;1885:59:0::1;7350:352:1::0;1885:59:0::1;1955:10;:17:::0;;-1:-1:-1;;;;;;1955:17:0::1;-1:-1:-1::0;;;;;1955:17:0;::::1;;::::0;;1994:23:::1;1226:6;1994:15;:23;:::i;:::-;1983:8;:34:::0;;;2051:10:::1;::::0;::::1;2046:3:::0;2033:39:::1;::::0;160:25:1;;;-1:-1:-1;;;;;2051:10:0;;::::1;::::0;2046:3;::::1;::::0;2033:39:::1;::::0;148:2:1;133:18;2033:39:0::1;;;;;;;1824:256:::0;:::o;16839:87::-;1323:3;;-1:-1:-1;;;;;1323:3:0;1309:10;:17;1301:43;;;;-1:-1:-1;;;1301:43:0;;;;;;;:::i;:::-;16901:17:::1;16911:6;16901:9;:17::i;18622:197::-:0;16301:20;16310:10;16301:8;:20::i;:::-;16293:61;;;;-1:-1:-1;;;16293:61:0;;4600:2:1;16293:61:0;;;4582:21:1;4639:2;4619:18;;;4612:30;4678;4658:18;;;4651:58;4726:18;;16293:61:0;4398:352:1;16293:61:0;18713:9:::1;18708:104;18728:19:::0;;::::1;18708:104;;;18769:31;18788:8;;18797:1;18788:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;18769;::::0;:18:::1;:31::i;:::-;-1:-1:-1::0;18749:3:0;::::1;::::0;::::1;:::i;:::-;;;;18708:104;;18299:116:::0;18351:16;18387:20;:11;:18;:20::i;:::-;18380:27;;18299:116;:::o;2284:496::-;2360:10;;-1:-1:-1;;;;;2360:10:0;2346;:24;;:103;;-1:-1:-1;2406:3:0;;-1:-1:-1;;;;;2406:3:0;2392:10;:17;:56;;;;-1:-1:-1;2421:10:0;;-1:-1:-1;;;;;2421:10:0;2413:31;:35;;2392:56;2324:174;;;;-1:-1:-1;;;2324:174:0;;8039:2:1;2324:174:0;;;8021:21:1;8078:2;8058:18;;;8051:30;-1:-1:-1;;;8097:18:1;;;8090:51;8158:18;;2324:174:0;7837:345:1;2324:174:0;2542:1;2531:8;;:12;:43;;;;;2566:8;;2547:15;:27;;2531:43;2509:118;;;;-1:-1:-1;;;2509:118:0;;8389:2:1;2509:118:0;;;8371:21:1;8428:2;8408:18;;;8401:30;8467:27;8447:18;;;8440:55;8512:18;;2509:118:0;8187:349:1;2509:118:0;2660:10;;;2655:3;2643:45;;2672:15;160:25:1;;-1:-1:-1;;;;;2660:10:0;;;;2655:3;;;;2643:45;;148:2:1;133:18;2643:45:0;;;;;;;2705:10;;;;2699:16;;-1:-1:-1;;;;;;2699:16:0;;;-1:-1:-1;;;;;2705:10:0;;2699:16;;;2726:23;;;;;;2760:8;:12;2284:496::o;16496:99::-;16545:7;16572:15;:6;:13;:15::i;18018:109::-;18072:7;18099:20;:11;:18;:20::i;16725:106::-;16772:16;16808:15;:6;:13;:15::i;16603:114::-;16666:7;16693:16;:6;16703:5;16693:9;:16::i;17887:123::-;17949:4;17973:29;:11;17994:7;17973:20;:29::i;18135:156::-;18230:7;18262:21;:11;18277:5;18262:14;:21::i;11089:152::-;11159:4;11183:50;11188:3;-1:-1:-1;;;;;11208:23:0;;11183:4;:50::i;:::-;11176:57;11089:152;-1:-1:-1;;;11089:152:0:o;17246:87::-;17304:21;:6;17318;17304:13;:21::i;:::-;;17246:87;:::o;17035:114::-;17093:4;17117:24;:6;17133:7;11661:167;-1:-1:-1;;;;;11795:23:0;;11741:4;7197:19;;;:12;;;:19;;;;;;:24;;11765:55;7100:129;17157:81;17212:18;:6;17223;17212:10;:18::i;11417:158::-;11490:4;11514:53;11522:3;-1:-1:-1;;;;;11542:23:0;;11514:7;:53::i;13093:310::-;13156:16;13185:22;13210:19;13218:3;13210:7;:19::i;11914:117::-;11977:7;12004:19;12012:3;7398:18;;7315:109;12385:158;12459:7;12510:22;12514:3;12526:5;12510:3;:22::i;5004:414::-;5067:4;7197:19;;;:12;;;:19;;;;;;5084:327;;-1:-1:-1;5127:23:0;;;;;;;;:11;:23;;;;;;;;;;;;;5310:18;;5288:19;;;:12;;;:19;;;;;;:40;;;;5343:11;;5084:327;-1:-1:-1;5394:5:0;5387:12;;5594:1420;5660:4;5799:19;;;:12;;;:19;;;;;;5835:15;;5831:1176;;6210:21;6234:14;6247:1;6234:10;:14;:::i;:::-;6283:18;;6210:38;;-1:-1:-1;6263:17:0;;6283:22;;6304:1;;6283:22;:::i;:::-;6263:42;;6339:13;6326:9;:26;6322:405;;6373:17;6393:3;:11;;6405:9;6393:22;;;;;;;;:::i;:::-;;;;;;;;;6373:42;;6547:9;6518:3;:11;;6530:13;6518:26;;;;;;;;:::i;:::-;;;;;;;;;;;;:38;;;;6632:23;;;:12;;;:23;;;;;:36;;;6322:405;6808:17;;:3;;:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;6903:3;:12;;:19;6916:5;6903:19;;;;;;;;;;;6896:26;;;6946:4;6939:11;;;;;;;5831:1176;6990:5;6983:12;;;;;8448:111;8504:16;8540:3;:11;;8533:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8448:111;;;:::o;7778:120::-;7845:7;7872:3;:11;;7884:5;7872:18;;;;;;;;:::i;:::-;;;;;;;;;7865:25;;7778:120;;;;:::o;196:173:1:-;264:20;;-1:-1:-1;;;;;313:31:1;;303:42;;293:70;;359:1;356;349:12;293:70;196:173;;;:::o;374:186::-;433:6;486:2;474:9;465:7;461:23;457:32;454:52;;;502:1;499;492:12;454:52;525:29;544:9;525:29;:::i;757:615::-;843:6;851;904:2;892:9;883:7;879:23;875:32;872:52;;;920:1;917;910:12;872:52;960:9;947:23;989:18;1030:2;1022:6;1019:14;1016:34;;;1046:1;1043;1036:12;1016:34;1084:6;1073:9;1069:22;1059:32;;1129:7;1122:4;1118:2;1114:13;1110:27;1100:55;;1151:1;1148;1141:12;1100:55;1191:2;1178:16;1217:2;1209:6;1206:14;1203:34;;;1233:1;1230;1223:12;1203:34;1286:7;1281:2;1271:6;1268:1;1264:14;1260:2;1256:23;1252:32;1249:45;1246:65;;;1307:1;1304;1297:12;1246:65;1338:2;1330:11;;;;;1360:6;;-1:-1:-1;757:615:1;;-1:-1:-1;;;;757:615:1:o;1377:883::-;1483:6;1491;1499;1507;1515;1523;1576:3;1564:9;1555:7;1551:23;1547:33;1544:53;;;1593:1;1590;1583:12;1544:53;1616:29;1635:9;1616:29;:::i;:::-;1606:39;;1664:38;1698:2;1687:9;1683:18;1664:38;:::i;:::-;1654:48;;1721:38;1755:2;1744:9;1740:18;1721:38;:::i;:::-;1711:48;;1806:2;1795:9;1791:18;1778:32;1768:42;;1861:3;1850:9;1846:19;1833:33;1885:18;1926:2;1918:6;1915:14;1912:34;;;1942:1;1939;1932:12;1912:34;1980:6;1969:9;1965:22;1955:32;;2025:7;2018:4;2014:2;2010:13;2006:27;1996:55;;2047:1;2044;2037:12;1996:55;2087:2;2074:16;2113:2;2105:6;2102:14;2099:34;;;2129:1;2126;2119:12;2099:34;2174:7;2169:2;2160:6;2156:2;2152:15;2148:24;2145:37;2142:57;;;2195:1;2192;2185:12;2142:57;2226:2;2222;2218:11;2208:21;;2248:6;2238:16;;;;;1377:883;;;;;;;;:::o;2265:250::-;2350:1;2360:113;2374:6;2371:1;2368:13;2360:113;;;2450:11;;;2444:18;2431:11;;;2424:39;2396:2;2389:10;2360:113;;;-1:-1:-1;;2507:1:1;2489:16;;2482:27;2265:250::o;2520:475::-;2703:6;2696:14;2689:22;2678:9;2671:41;2748:2;2743;2732:9;2728:18;2721:30;2652:4;2780:6;2774:13;2823:6;2818:2;2807:9;2803:18;2796:34;2839:79;2911:6;2906:2;2895:9;2891:18;2886:2;2878:6;2874:15;2839:79;:::i;:::-;2979:2;2958:15;-1:-1:-1;;2954:29:1;2939:45;;;;2986:2;2935:54;;2520:475;-1:-1:-1;;;2520:475:1:o;3000:658::-;3171:2;3223:21;;;3293:13;;3196:18;;;3315:22;;;3142:4;;3171:2;3394:15;;;;3368:2;3353:18;;;3142:4;3437:195;3451:6;3448:1;3445:13;3437:195;;;3516:13;;-1:-1:-1;;;;;3512:39:1;3500:52;;3607:15;;;;3572:12;;;;3548:1;3466:9;3437:195;;;-1:-1:-1;3649:3:1;;3000:658;-1:-1:-1;;;;;;3000:658:1:o;3663:180::-;3722:6;3775:2;3763:9;3754:7;3750:23;3746:32;3743:52;;;3791:1;3788;3781:12;3743:52;-1:-1:-1;3814:23:1;;3663:180;-1:-1:-1;3663:180:1:o;4056:337::-;4258:2;4240:21;;;4297:2;4277:18;;;4270:30;-1:-1:-1;;;4331:2:1;4316:18;;4309:43;4384:2;4369:18;;4056:337::o;4755:127::-;4816:10;4811:3;4807:20;4804:1;4797:31;4847:4;4844:1;4837:15;4871:4;4868:1;4861:15;4887:127;4948:10;4943:3;4939:20;4936:1;4929:31;4979:4;4976:1;4969:15;5003:4;5000:1;4993:15;5019:135;5058:3;5079:17;;;5076:43;;5099:18;;:::i;:::-;-1:-1:-1;5146:1:1;5135:13;;5019:135::o;5496:662::-;-1:-1:-1;;;;;5775:15:1;;;5757:34;;5827:15;;5822:2;5807:18;;5800:43;5874:2;5859:18;;5852:34;;;5922:3;5917:2;5902:18;;5895:31;;;5942:19;;5935:35;;;5700:4;5963:6;6013;5737:3;5992:19;;5979:49;6078:1;6072:3;6063:6;6052:9;6048:22;6044:32;6037:43;6148:3;6141:2;6137:7;6132:2;6124:6;6120:15;6116:29;6105:9;6101:45;6097:55;6089:63;;5496:662;;;;;;;;:::o;6163:127::-;6224:10;6219:3;6215:20;6212:1;6205:31;6255:4;6252:1;6245:15;6279:4;6276:1;6269:15;6295:1050;6380:6;6388;6441:2;6429:9;6420:7;6416:23;6412:32;6409:52;;;6457:1;6454;6447:12;6409:52;6489:9;6483:16;6542:5;6535:13;6528:21;6521:5;6518:32;6508:60;;6564:1;6561;6554:12;6508:60;6636:2;6621:18;;6615:25;6587:5;;-1:-1:-1;6659:18:1;6689:14;;;6686:34;;;6716:1;6713;6706:12;6686:34;6754:6;6743:9;6739:22;6729:32;;6799:7;6792:4;6788:2;6784:13;6780:27;6770:55;;6821:1;6818;6811:12;6770:55;6850:2;6844:9;6872:2;6868;6865:10;6862:36;;;6878:18;;:::i;:::-;6953:2;6947:9;6921:2;7007:13;;-1:-1:-1;;7003:22:1;;;7027:2;6999:31;6995:40;6983:53;;;7051:18;;;7071:22;;;7048:46;7045:72;;;7097:18;;:::i;:::-;7137:10;7133:2;7126:22;7172:2;7164:6;7157:18;7212:7;7207:2;7202;7198;7194:11;7190:20;7187:33;7184:53;;;7233:1;7230;7223:12;7184:53;7246:68;7311:2;7306;7298:6;7294:15;7289:2;7285;7281:11;7246:68;:::i;:::-;7333:6;7323:16;;;;;;;6295:1050;;;;;:::o;7707:125::-;7772:9;;;7793:10;;;7790:36;;;7806:18;;:::i;8541:128::-;8608:9;;;8629:11;;;8626:37;;;8643:18;;:::i;8674:127::-;8735:10;8730:3;8726:20;8723:1;8716:31;8766:4;8763:1;8756:15;8790:4;8787:1;8780:15

Swarm Source

ipfs://e477f2692bbd2b7af6bf1129ddc6a24bbd66d401a961e5210b9fb79b92fbb9db
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading