Contract 0xA929022c9107643515F5c777cE9a910F0D1e490C 13

Bridge 
 

Contract Overview

HECO Chain: Bridge
Balance:
244,788.898672486576865507 Ether

EtherValue:
$420,243,789.68 (@ $1,716.76/ETH)

Token:
 
Txn Hash
Method
Block
From
To
Value
0xd708c5fc73c69da7ec7889bab46692c76df95c1538aa5c920cb5318b3c2c6e17Withdraw Token152975582022-08-07 21:14:3039 mins ago0xea18fbd4d6e70476a845f8ea1753618ab3002357 IN  HECO Chain: Bridge0 Ether0.0189987150
0x829411e72ed8a0412ba813f5c6dc212858833f0e55203f390fb77522b72ae9d2Withdraw Token152975582022-08-07 21:14:3039 mins ago0xfa7155f8c6c6c117bcab8968053f7ba4e2950faf IN  HECO Chain: Bridge0 Ether0.022839150
0x31c8373dc895d7d9d4ee09cb188822ea10f1a865af1f931d868bed4e433119ebWithdraw Token152966912022-08-07 18:00:353 hrs 53 mins ago0xea18fbd4d6e70476a845f8ea1753618ab3002357 IN  HECO Chain: Bridge0 Ether0.0180654150
0x48780b16d675e103106d88347737e0543a120643b974e41f3ee6e8afe99387d5Withdraw Token152966912022-08-07 18:00:353 hrs 53 mins ago0xfa7155f8c6c6c117bcab8968053f7ba4e2950faf IN  HECO Chain: Bridge0 Ether0.0228444150
0xa5f09bcddad07a5fc1390b0e21b18eba844854f5a892b515ae3c20a15a10cf32Withdraw Token152944652022-08-07 9:54:0711 hrs 59 mins ago0xea18fbd4d6e70476a845f8ea1753618ab3002357 IN  HECO Chain: Bridge0 Ether0.01639875150
0xbd4d018b3464163c4987f217513666ab28c61c24ce20e3232874b6931a759ef1Withdraw Token152944652022-08-07 9:54:0711 hrs 59 mins ago0xfa7155f8c6c6c117bcab8968053f7ba4e2950faf IN  HECO Chain: Bridge0 Ether0.022848150
0x6c78d2d718890bd7c50e780ef854db8f0552ff3ed7eb0e8cec657a17a993cbeeWithdraw Token152931532022-08-07 5:04:0916 hrs 49 mins ago0xea18fbd4d6e70476a845f8ea1753618ab3002357 IN  HECO Chain: Bridge0 Ether0.0207513150
0xd187a5791763c0826cf63d050d50fda94c8156d5b10a70d4a2349b780b4c16ebWithdraw Token152931532022-08-07 5:04:0916 hrs 49 mins ago0xfa7155f8c6c6c117bcab8968053f7ba4e2950faf IN  HECO Chain: Bridge0 Ether0.022848150
0x86cc857ce143d72e36b43ec6d2cf5189df566826c14f320f3d4628f3822a3d0dWithdraw Token152929722022-08-07 4:27:2117 hrs 26 mins ago0xfa7155f8c6c6c117bcab8968053f7ba4e2950faf IN  HECO Chain: Bridge0 Ether0.01742145150
0x98a891abefa58af7ed9aed1dbf23c8a8022c2b03c3841008a0de70966e919523Withdraw Token152929722022-08-07 4:27:2117 hrs 26 mins ago0xea18fbd4d6e70476a845f8ea1753618ab3002357 IN  HECO Chain: Bridge0 Ether0.0224397150
0x5030330ce7239a79b52d446e8619d67fdd09840bf26b0f32a7b03489a0bf583aWithdraw Token152922682022-08-07 1:35:1420 hrs 18 mins ago0xea18fbd4d6e70476a845f8ea1753618ab3002357 IN  HECO Chain: Bridge0 Ether0.0207498150
0x422c86277ee92ca77b5ebc55a72db4b2357b57a21ef9cb2996fea9f77f56283eWithdraw Token152922682022-08-07 1:35:1420 hrs 18 mins ago0xfa7155f8c6c6c117bcab8968053f7ba4e2950faf IN  HECO Chain: Bridge0 Ether0.0228462150
0xea77c80b334f43347f55823bd9f36c72fbdda80fda502c8e9f2563f00496b9beWithdraw Token152922322022-08-07 1:25:1020 hrs 28 mins ago0xea18fbd4d6e70476a845f8ea1753618ab3002357 IN  HECO Chain: Bridge0 Ether0.0207513150
0x8830c1c98b1abd1e6b0dc1db86627c70458c9ff43e235da0e761da2066293a3cWithdraw Token152922322022-08-07 1:25:1020 hrs 28 mins ago0xfa7155f8c6c6c117bcab8968053f7ba4e2950faf IN  HECO Chain: Bridge0 Ether0.022848150
0xb4a8c95480682fc67f07831a8fdbd9415fe978c053a57653cafcf7703784b590Withdraw Token152918872022-08-07 0:10:1621 hrs 43 mins ago0xea18fbd4d6e70476a845f8ea1753618ab3002357 IN  HECO Chain: Bridge0 Ether0.0207513150
0xc539ff9b5256c798453e9d5de3d60e5e6819a0305ef0991bacd4dfb5fca17944Withdraw Token152918872022-08-07 0:10:1621 hrs 43 mins ago0xfa7155f8c6c6c117bcab8968053f7ba4e2950faf IN  HECO Chain: Bridge0 Ether0.022848150
0x3ad40fa2edc215fb13f26757be332ca9e2ff7eab86f5fe00d61a7a1a56b83ebfWithdraw Token152917162022-08-06 23:34:2422 hrs 19 mins ago0xfa7155f8c6c6c117bcab8968053f7ba4e2950faf IN  HECO Chain: Bridge0 Ether0.0210708150
0x09366fcee256a372e97a721a239ec80ecead1b26c6c0d2eaf2af5682901f9f63Withdraw Token152917162022-08-06 23:34:2422 hrs 19 mins ago0xea18fbd4d6e70476a845f8ea1753618ab3002357 IN  HECO Chain: Bridge0 Ether0.0224415150
0x6023b4d8ce49e1bbb828fdd5e633f371efef1af44544d30021f66b2618d5d538Withdraw Token152896342022-08-06 15:54:541 day 5 hrs ago0xea18fbd4d6e70476a845f8ea1753618ab3002357 IN  HECO Chain: Bridge0 Ether0.0207513150
0x9774df6b2bd2112b8d813de2e03216d32c8d90c3ae596cae05c07e3d20e91c14Withdraw Token152896342022-08-06 15:54:541 day 5 hrs ago0xfa7155f8c6c6c117bcab8968053f7ba4e2950faf IN  HECO Chain: Bridge0 Ether0.022848150
0xdaba5501e88205840aabbb15428f542defe6e1e4f09268cdf70ab74504f1e666Withdraw Token152896172022-08-06 15:50:001 day 6 hrs ago0xea18fbd4d6e70476a845f8ea1753618ab3002357 IN  HECO Chain: Bridge0 Ether0.0157191150
0xb40fe4aba828b90a30f1cc869b952a3e20009391c6222142d180b8031a6df9b7Withdraw Token152896172022-08-06 15:50:001 day 6 hrs ago0xfa7155f8c6c6c117bcab8968053f7ba4e2950faf IN  HECO Chain: Bridge0 Ether0.0228498150
0x64fa7797495f2dab031829227be1f916696ba42d4deb9528dad290feb07d03ddWithdraw Token152883542022-08-06 11:10:291 day 10 hrs ago0xea18fbd4d6e70476a845f8ea1753618ab3002357 IN  HECO Chain: Bridge0 Ether0.0207513150
0xf15001d8ed041135e5f39cd4dafa27f2417f2a809f71546212b76e72e0d86cd7Withdraw Token152883542022-08-06 11:10:291 day 10 hrs ago0xfa7155f8c6c6c117bcab8968053f7ba4e2950faf IN  HECO Chain: Bridge0 Ether0.022848150
0x39f7f5ebf71f1d1da34d8558819a60bab23eeb11cb3bf0ee2915ac2267960effDeposit Token152882782022-08-06 10:53:271 day 11 hrs ago0xbc53b706b165d2b7e98f254095d9d342e845e5ac IN  HECO Chain: Bridge0.001 Ether0.01144695150
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xd060c84db7bc1c4fc977685b22c79bf2befe8441f4b82af2f3690424ec4c449d152869202022-08-06 5:37:551 day 16 hrs ago HECO Chain: Bridge0xa9c0204b10bba10ffce488dce6ffff1cacdbbb10156 Ether
0xa21e09245eac13e4cddf929fee5fc5c8065963c1588cfb431f5e52e92b106156152858612022-08-06 1:32:021 day 20 hrs ago HECO Chain: Bridge0xa9c0204b10bba10ffce488dce6ffff1cacdbbb10381 Ether
0xbb36ff9039719f6d148190fb127bf1529f8391b77c375856a6adbb4dbb9bb4a0152823272022-08-05 12:31:442 days 9 hrs ago HECO Chain: Bridge0xa9c0204b10bba10ffce488dce6ffff1cacdbbb10348 Ether
0xd622cf91f049ad4fe32f19454a474e01fae10a46af21511159bda2c7b47b8eaa152799382022-08-05 3:38:102 days 18 hrs ago HECO Chain: Bridge0xa9c0204b10bba10ffce488dce6ffff1cacdbbb10206 Ether
0x5a2c5c074732faac69f6273721dcf73821e229928ba697e575c01506799df2e1152793592022-08-05 1:28:122 days 20 hrs ago HECO Chain: Bridge0xa9c0204b10bba10ffce488dce6ffff1cacdbbb10235 Ether
0x623425e7433b78609f35de4137c11f94d29ffa63a1f5d5d390e4c6dca2ad0b7a152691592022-08-03 11:19:374 days 10 hrs ago HECO Chain: Bridge0xa9c0204b10bba10ffce488dce6ffff1cacdbbb10641 Ether
0x454351f3c2f2715b0cfcbe64e6db7d951977cd10a218e1e76a049513d517b84e152691302022-08-03 11:13:294 days 10 hrs ago HECO Chain: Bridge0xa9c0204b10bba10ffce488dce6ffff1cacdbbb10157 Ether
0x66489d20be19f8c4ea419b3e7fca9697d10140084acc8e84e179761a3ea44fb1152691052022-08-03 11:06:464 days 10 hrs ago HECO Chain: Bridge0xa9c0204b10bba10ffce488dce6ffff1cacdbbb10856 Ether
0xe346c592f8e0c2a9718790ea0f2895d5b7f3fda614a64c96fb99b39f5c1ba039152690782022-08-03 11:01:394 days 10 hrs ago HECO Chain: Bridge0xa9c0204b10bba10ffce488dce6ffff1cacdbbb10150 Ether
0x2856993ca5720d312df0920e94b3a873878f1cd05e5e18100b9bd0c8013aa7c6152690612022-08-03 10:54:014 days 10 hrs ago HECO Chain: Bridge0xa9c0204b10bba10ffce488dce6ffff1cacdbbb10863 Ether
0x98d512fd57479f0369d77eb18a04e110ee98fb2a4706e7a90f61130ac22c1995152690452022-08-03 10:48:504 days 11 hrs ago HECO Chain: Bridge0xa9c0204b10bba10ffce488dce6ffff1cacdbbb10143 Ether
0xc0675a7c7e3b2c30c84411275ea3d586181c8b100e272c93faf413ab811f8717152690222022-08-03 10:44:474 days 11 hrs ago HECO Chain: Bridge0xa9c0204b10bba10ffce488dce6ffff1cacdbbb10870 Ether
0xcf681d7ee4fbeb4de7f01a6bfac245e5f9fe9afa43d2a043d8eeaaab242eca76152689982022-08-03 10:38:474 days 11 hrs ago HECO Chain: Bridge0xa9c0204b10bba10ffce488dce6ffff1cacdbbb10136 Ether
0x5aefe0610b338ca1b3498913df5cc98d34afe02a5ea817073fab214a850cf89e152689712022-08-03 10:33:264 days 11 hrs ago HECO Chain: Bridge0xa9c0204b10bba10ffce488dce6ffff1cacdbbb10877 Ether
0xc99e8af6a5f37eacad4e0edcf74f4d0b48080e59d053bc856e1f5e8d7aa13fd5152689462022-08-03 10:27:454 days 11 hrs ago HECO Chain: Bridge0xa9c0204b10bba10ffce488dce6ffff1cacdbbb10129 Ether
0xcf5ffd6a48a24a6039deb7b4a535fe12054165ab723ac60b7952d6ecfd893497152689232022-08-03 10:22:404 days 11 hrs ago HECO Chain: Bridge0xa9c0204b10bba10ffce488dce6ffff1cacdbbb10884 Ether
0xbcf84991c801bec1d9171e40d7cc64d9953cad31b7ad2657b6c0e348eb5c35eb152688972022-08-03 10:15:374 days 11 hrs ago HECO Chain: Bridge0xa9c0204b10bba10ffce488dce6ffff1cacdbbb10122 Ether
0x441c4190f41e25af7d00740220a00d9d5d43d20e6742eb10f4bbafbd77f13296152688832022-08-03 10:10:384 days 11 hrs ago HECO Chain: Bridge0xa9c0204b10bba10ffce488dce6ffff1cacdbbb10891 Ether
0x5177863f5a1775ddcec932eb67c041a0f3c47d0fa9b51048bb198f11d26d55d1152688662022-08-03 10:05:514 days 11 hrs ago HECO Chain: Bridge0xa9c0204b10bba10ffce488dce6ffff1cacdbbb10115 Ether
0x4b3f8b22d444c22eea2895f83bc219979347520a917f3a729866b4f3e02e141a152688472022-08-03 9:59:454 days 11 hrs ago HECO Chain: Bridge0xa9c0204b10bba10ffce488dce6ffff1cacdbbb10898 Ether
0x45e99de82e95923221e1f1df462da07fca76a30f091d5061c27ca11fc2749878152688202022-08-03 9:54:454 days 11 hrs ago HECO Chain: Bridge0xa9c0204b10bba10ffce488dce6ffff1cacdbbb10108 Ether
0x73dd13471455e01fc72930f6a1ca6daee06f3f3905fce7e75bfbdf1a58f456a5152687932022-08-03 9:48:524 days 12 hrs ago HECO Chain: Bridge0xa9c0204b10bba10ffce488dce6ffff1cacdbbb10905 Ether
0xc9f4e6debc6493a3b7af01c724843c553c9e160911b53b287852d47f5b685a1f152687682022-08-03 9:42:384 days 12 hrs ago HECO Chain: Bridge0xa9c0204b10bba10ffce488dce6ffff1cacdbbb10100 Ether
0xa0987753442e928ba7d4a762ff4bf6125a3d08c06039d6e1d681c35676f04867152687442022-08-03 9:36:534 days 12 hrs ago HECO Chain: Bridge0xa9c0204b10bba10ffce488dce6ffff1cacdbbb10914 Ether
0x7bebaaf265b4ada27c34267d2d39f144fb1fd200dcf5178a035b2846886cec25152687182022-08-03 9:31:504 days 12 hrs ago HECO Chain: Bridge0xa9c0204b10bba10ffce488dce6ffff1cacdbbb1091 Ether
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Bridge

Compiler Version
v0.7.4+commit.3f05b770

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-01-28
*/

// Sources flattened with hardhat v2.0.7 https://hardhat.org

// File @openzeppelin/contracts/math/[email protected]

// SPDX-License-Identifier: MIT

pragma solidity >=0.6.0 <0.8.0;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}


// File @openzeppelin/contracts/GSN/[email protected]



pragma solidity >=0.6.0 <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 GSN 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 payable) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}


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



pragma solidity >=0.6.0 <0.8.0;

/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor () internal {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!_paused, "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(_paused, "Pausable: not paused");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}


// File contracts/Container.sol


pragma solidity ^0.7.0;

contract Container {

    struct Item{
        uint256 itemType;
        uint256 status;
        address[] addresses;
    }

    uint256 MaxItemAdressNum = 255;
    mapping (bytes32 => Item) private container;
    // bool private _nativePaused = false;


    function itemAddressExists(bytes32 _id, address _oneAddress) internal view returns(bool){
        for(uint256 i = 0; i < container[_id].addresses.length; i++){
            if(container[_id].addresses[i] == _oneAddress)
                return true;
        }
        return false;
    }
    function getItemAddresses(bytes32 _id) internal view returns(address[] memory){
        return container[_id].addresses;
    }

    function getItemInfo(bytes32 _id) internal view returns(uint256, uint256, uint256){
        return (container[_id].itemType, container[_id].status, container[_id].addresses.length);
    }

    function getItemAddressCount(bytes32 _id) internal view returns(uint256){
        return container[_id].addresses.length;
    }

    function setItemInfo(bytes32 _id, uint256 _itemType, uint256 _status) internal{
        container[_id].itemType = _itemType;
        container[_id].status = _status;
    }

    function addItemAddress(bytes32 _id, address _oneAddress) internal{
        require(!itemAddressExists(_id, _oneAddress), "dup address added");
        require(container[_id].addresses.length < MaxItemAdressNum, "too many addresses");
        container[_id].addresses.push(_oneAddress);
    }
    function removeItemAddresses(bytes32 _id) internal {
        delete container[_id].addresses;
    }

    function removeOneItemAddress(bytes32 _id, address _oneAddress) internal {
        for(uint256 i = 0; i < container[_id].addresses.length; i++){
            if(container[_id].addresses[i] == _oneAddress){
                container[_id].addresses[i] = container[_id].addresses[container[_id].addresses.length - 1];
                container[_id].addresses.pop();
                return;
            }
        }
    }

    function removeItem(bytes32 _id) internal{
        delete container[_id];
    }

    function replaceItemAddress(bytes32 _id, address _oneAddress, address _anotherAddress) internal {
        for(uint256 i = 0; i < container[_id].addresses.length; i++){
            if(container[_id].addresses[i] == _oneAddress){
                container[_id].addresses[i] = _anotherAddress;
                return;
            }
        }
    }
}


// File contracts/BridgeStorage.sol


pragma solidity ^0.7.0;

contract BridgeStorage is Container {
    string public constant name = "BridgeStorage";

    address private caller;

    constructor(address aCaller) {
        caller = aCaller;
    }

    modifier onlyCaller() {
        require(msg.sender == caller, "only use main contract to call");
        _;
    }

    function supporterExists(bytes32 taskHash, address user) public view returns(bool) {
        return itemAddressExists(taskHash, user);
    }

    function setTaskInfo(bytes32 taskHash, uint256 taskType, uint256 status) external onlyCaller {
        setItemInfo(taskHash, taskType, status);
    }

    function getTaskInfo(bytes32 taskHash) public view returns(uint256, uint256, uint256){
        return getItemInfo(taskHash);
    }

    function addSupporter(bytes32 taskHash, address oneAddress) external onlyCaller{
        addItemAddress(taskHash, oneAddress);
    }

    function removeAllSupporter(bytes32 taskHash) external onlyCaller {
        removeItemAddresses(taskHash);
    }
    function removeTask(bytes32 taskHash)external onlyCaller{
        removeItem(taskHash);
    }
}


// File contracts/BridgeAdmin.sol


pragma solidity ^0.7.0;

contract BridgeAdmin is Container {
    bytes32 internal constant OWNERHASH = 0x02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c0;
    bytes32 internal constant OPERATORHASH = 0x46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f622;
    bytes32 internal constant PAUSERHASH = 0x0cc58340b26c619cd4edc70f833d3f4d9d26f3ae7d5ef2965f81fe5495049a4f;
    bytes32 internal constant STOREHASH = 0xe41d88711b08bdcd7556c5d2d24e0da6fa1f614cf2055f4d7e10206017cd1680;
    bytes32 internal constant LOGICHASH = 0x397bc5b97f629151e68146caedba62f10b47e426b38db589771a288c0861f182;
    uint256 internal constant MAXUSERNUM = 255;
    bytes32[] private classHashArray;

    uint256 internal ownerRequireNum;
    uint256 internal operatorRequireNum;

    event AdminChanged(string TaskType, string class, address oldAddress, address newAddress);
    event AdminRequiredNumChanged(string TaskType, string class, uint256 previousNum, uint256 requiredNum);
    event AdminTaskDropped(bytes32 taskHash);

    modifier validRequirement(uint ownerCount, uint _required) {
        require(ownerCount <= MaxItemAdressNum
        && _required <= ownerCount
        && _required > 0
            && ownerCount > 0);
        _;
    }

    modifier onlyOwner() {
        require(itemAddressExists(OWNERHASH, msg.sender), "only use owner to call");
        _;
    }

    function initAdmin(address[] memory _owners, uint _ownerRequired) internal validRequirement(_owners.length, _ownerRequired) {
        for (uint i = 0; i < _owners.length; i++) {
            addItemAddress(OWNERHASH, _owners[i]);
        }
        addItemAddress(PAUSERHASH,_owners[0]);// we need an init pauser
        addItemAddress(LOGICHASH, address(0x0));
        addItemAddress(STOREHASH, address(0x1));

        classHashArray.push(OWNERHASH);
        classHashArray.push(OPERATORHASH);
        classHashArray.push(PAUSERHASH);
        classHashArray.push(STOREHASH);
        classHashArray.push(LOGICHASH);
        ownerRequireNum = _ownerRequired;
        operatorRequireNum = 2;
    }

    function classHashExist(bytes32 aHash) private view returns (bool) {
        for (uint256 i = 0; i < classHashArray.length; i++)
            if (classHashArray[i] == aHash) return true;
        return false;
    }

    function getAdminAddresses(string memory class) public view returns (address[] memory) {
        bytes32 classHash = getClassHash(class);
        return getItemAddresses(classHash);
    }

    function getOwnerRequireNum() public view returns (uint256){
        return ownerRequireNum;
    }

    function getOperatorRequireNum() public view returns (uint256){
        return operatorRequireNum;
    }

    function resetRequiredNum(string memory class, uint256 requiredNum) public onlyOwner returns (bool){
        bytes32 classHash = getClassHash(class);
        require((classHash == OPERATORHASH) || (classHash == OWNERHASH), "wrong class");

        bytes32 taskHash = keccak256(abi.encodePacked("resetRequiredNum", class, requiredNum));
        addItemAddress(taskHash, msg.sender);

        if (getItemAddressCount(taskHash) >= ownerRequireNum) {
            removeItem(taskHash);
            uint256 previousNum = 0;
            if (classHash == OWNERHASH) {
                previousNum = ownerRequireNum;
                ownerRequireNum = requiredNum;
            }
            else if (classHash == OPERATORHASH) {
                previousNum = operatorRequireNum;
                operatorRequireNum = requiredNum;
            } else {
                revert("wrong class");
            }
            emit AdminRequiredNumChanged("resetRequiredNum", class, previousNum, requiredNum);
        }
        return true;
    }

    function modifyAddress(string memory class, address oldAddress, address newAddress) internal onlyOwner returns (bool){
        bytes32 classHash = getClassHash(class);
        bytes32 taskHash = keccak256(abi.encodePacked("modifyAddress", class, oldAddress, newAddress));
        addItemAddress(taskHash, msg.sender);
        if (getItemAddressCount(taskHash) >= ownerRequireNum) {
            replaceItemAddress(classHash, oldAddress, newAddress);
            emit AdminChanged("modifyAddress", class, oldAddress, newAddress);
            removeItem(taskHash);
            return true;
        }
        return false;
    }

    function getClassHash(string memory class) private view returns (bytes32){
        bytes32 classHash = keccak256(abi.encodePacked(class));
        require(classHashExist(classHash), "invalid class");
        return classHash;
    }

    function dropAddress(string memory class, address oneAddress) public onlyOwner returns (bool){
        bytes32 classHash = getClassHash(class);
        require(classHash != STOREHASH && classHash != LOGICHASH, "wrong class");
        require(itemAddressExists(classHash, oneAddress), "no such address exist");

        if (classHash == OWNERHASH)
            require(getItemAddressCount(classHash) > ownerRequireNum, "insuffience addresses");

        bytes32 taskHash = keccak256(abi.encodePacked("dropAddress", class, oneAddress));
        addItemAddress(taskHash, msg.sender);
        if (getItemAddressCount(taskHash) >= ownerRequireNum) {
            removeOneItemAddress(classHash, oneAddress);
            emit AdminChanged("dropAddress", class, oneAddress, oneAddress);
            removeItem(taskHash);
            return true;
        }
        return false;
    }

    function addAddress(string memory class, address oneAddress) public onlyOwner returns (bool){
        bytes32 classHash = getClassHash(class);
        require(classHash != STOREHASH && classHash != LOGICHASH, "wrong class");

        bytes32 taskHash = keccak256(abi.encodePacked("addAddress", class, oneAddress));
        addItemAddress(taskHash, msg.sender);
        if (getItemAddressCount(taskHash) >= ownerRequireNum) {
            addItemAddress(classHash, oneAddress);
            emit AdminChanged("addAddress", class, oneAddress, oneAddress);
            removeItem(taskHash);
            return true;
        }
        return false;
    }

    function dropTask(bytes32 taskHash) public onlyOwner returns (bool){
        removeItem(taskHash);
        emit AdminTaskDropped(taskHash);
        return true;
    }
}


// File @openzeppelin/contracts/token/ERC20/[email protected]



pragma solidity >=0.6.0 <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 contracts/BridgeLogic.sol


pragma solidity ^0.7.0;




contract BridgeLogic {
    using SafeMath for uint256;

    string public constant name = "BridgeLogic";

    bytes32 internal constant OPERATORHASH = 0x46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f622;
    uint256 public constant TASKINIT = 0;
    uint256 public constant TASKPROCESSING = 1;
    uint256 public constant TASKCANCELLED = 2;
    uint256 public constant TASKDONE = 3;
    uint256 public constant WITHDRAWTASK = 1;

    address private caller;
    BridgeStorage private store;

    constructor(address aCaller) {
        caller = aCaller;
    }

    modifier onlyCaller(){
        require(msg.sender == caller, "only main contract can call");
        _;
    }

    modifier operatorExists(address operator) {
        require(store.supporterExists(OPERATORHASH, operator), "wrong operator");
        _;
    }

    function resetStoreLogic(address storeAddress) external onlyCaller {
        store = BridgeStorage(storeAddress);
    }

    function getStoreAddress() public view returns(address) {
        return address(store);
    }

    function supportTask(uint256 taskType, bytes32 taskHash, address oneAddress, uint256 requireNum) external onlyCaller returns(uint256){
        require(!store.supporterExists(taskHash, oneAddress), "supporter already exists");
        (uint256 theTaskType,uint256 theTaskStatus,uint256 theSupporterNum) = store.getTaskInfo(taskHash);
        require(theTaskStatus < TASKDONE, "wrong status");

        if (theTaskStatus != TASKINIT)
            require(theTaskType == taskType, "task type not match");
        store.addSupporter(taskHash, oneAddress);
        theSupporterNum++;
        if(theSupporterNum >= requireNum)
            theTaskStatus = TASKDONE;
        else
            theTaskStatus = TASKPROCESSING;
        store.setTaskInfo(taskHash, taskType, theTaskStatus);
        return theTaskStatus;
    }

    function cancelTask(bytes32 taskHash)  external onlyCaller returns(uint256) {
        (uint256 theTaskType,uint256 theTaskStatus,uint256 theSupporterNum) = store.getTaskInfo(taskHash);
        require(theTaskStatus == TASKPROCESSING, "wrong status");
        if(theSupporterNum > 0) store.removeAllSupporter(taskHash);
        theTaskStatus = TASKCANCELLED;
        store.setTaskInfo(taskHash, theTaskType, theTaskStatus);
        return theTaskStatus;
    }
    function removeTask(bytes32 taskHash)  external onlyCaller {
        store.removeTask(taskHash);

    }


}


// File contracts/ERC20Sample.sol

pragma solidity ^0.7.0;


abstract contract ERC20Template is IERC20 {

    function mint(address account, uint256 amount) public{
    }
    function burn(address account , uint256 amount) public{
    }
    function redeem(address account, uint256 amount)public {
    }
    function issue(address account, uint256 amount) public {
    }
}


// File contracts/Bridge.sol


pragma solidity ^0.7.0;






contract Bridge is BridgeAdmin, Pausable {

    using SafeMath for uint256;

    string public constant name = "Bridge";

    BridgeLogic private logic;

    event DepositNative(address indexed from, uint256 value, string targetAddress, string chain);
    event DepositToken(address indexed from, uint256 value, address indexed token, string targetAddress, string chain, uint256 nativeValue);
    event WithdrawingNative(address indexed to, uint256 value, string proof);
    event WithdrawingToken(address indexed to, address indexed token, uint256 value, string proof);
    event WithdrawDoneNative(address indexed to, uint256 value, string proof);
    event WithdrawDoneToken(address indexed to, address indexed token, uint256 value, string proof);

    modifier onlyOperator() {
        require(itemAddressExists(OPERATORHASH, msg.sender), "wrong operator");
        _;
    }

    modifier onlyPauser() {
        require(itemAddressExists(PAUSERHASH, msg.sender), "wrong pauser");
        _;
    }

    modifier positiveValue(uint _value) {
        require(_value > 0, "value need > 0");
        _;
    }


    constructor(address[] memory _owners, uint _ownerRequired) {
        initAdmin(_owners, _ownerRequired);

    }

    function depositNative(string memory _targetAddress, string memory  chain) public payable {
        emit DepositNative(msg.sender, msg.value, _targetAddress,chain);
    }

    function depositToken(address _token, uint value, string memory _targetAddress, string memory chain) public payable returns (bool){
        //deposit(address token, address _from, uint256 _value)
        bool res = depositTokenLogic(_token,  msg.sender, value);
        emit DepositToken(msg.sender, value, _token, _targetAddress, chain, msg.value);
        return res;
    }// 

    function withdrawNative(address payable to, uint value, string memory proof, bytes32 taskHash) public
    onlyOperator
    whenNotPaused
    positiveValue(value)
    returns(bool)
    {
        require(address(this).balance >= value, "not enough native token");
        require(taskHash == keccak256((abi.encodePacked(to,value,proof))),"taskHash is wrong");
        uint256 status = logic.supportTask(logic.WITHDRAWTASK(), taskHash, msg.sender, operatorRequireNum);

        if (status == logic.TASKPROCESSING()){
            emit WithdrawingNative(to, value, proof);
        }else if (status == logic.TASKDONE()) {
            emit WithdrawingNative(to, value, proof);
            emit WithdrawDoneNative(to, value, proof);
            to.transfer(value);
            logic.removeTask(taskHash);
        }
        return true;
    }

    function withdrawToken(address _token, address to, uint value, string memory proof, bytes32 taskHash) public
    onlyOperator
    whenNotPaused
    positiveValue(value)
    returns (bool)
    {
        require(taskHash == keccak256((abi.encodePacked(to,value,proof))),"taskHash is wrong");
        uint256 status = logic.supportTask(logic.WITHDRAWTASK(), taskHash, msg.sender, operatorRequireNum);

        if (status == logic.TASKPROCESSING()){
            emit WithdrawingToken(to, _token, value, proof);
        }else if (status == logic.TASKDONE()) {
            // withdraw(address token, address _to, address _value)
            bool res = withdrawTokenLogic( _token, to, value);

            emit WithdrawingToken(to, _token, value, proof);
            emit WithdrawDoneToken(to, _token, value, proof);
            logic.removeTask(taskHash);
            return res;
        }
        return true;
    }

    function modifyAdminAddress(string memory class, address oldAddress, address newAddress) public whenPaused {
        require(newAddress != address(0x0), "wrong address");
        bool flag = modifyAddress(class, oldAddress, newAddress);
        if(flag){
            bytes32 classHash = keccak256(abi.encodePacked(class));
            if(classHash == LOGICHASH){
                logic = BridgeLogic(newAddress);
            }else if(classHash == STOREHASH){
                logic.resetStoreLogic(newAddress);
            }
        }
    }
    function getLogicAddress() public view returns(address){
        return address(logic);
    }

    function getStoreAddress() public view returns(address){
        return logic.getStoreAddress();
    }

    function pause() public onlyPauser {
        _pause();
    }

    function unpause() public onlyPauser {
        _unpause();
    }


    function transferToken(address token, address to , uint256 value) onlyPauser external{
        IERC20 atoken = IERC20(token);
        bool success = atoken.transfer(to,value);
    }


    function setDepositSelector(address token, string memory method, bool _isValueFirst) onlyOperator external{
        depositSelector[token] = assetSelector(method,_isValueFirst);
    }

    function setWithdrawSelector(address token, string memory method, bool _isValueFirst) onlyOperator external{
        withdrawSelector[token] = assetSelector(method,_isValueFirst);
    }


    struct assetSelector{
        string selector;
        bool isValueFirst;
    }

    mapping (address=>assetSelector)  public depositSelector;
    mapping (address=> assetSelector) public withdrawSelector;

    function depositTokenLogic(address token, address _from, uint256 _value) internal returns(bool){
        bool status = false;
        bytes memory returnedData;
        if (bytes(depositSelector[token].selector).length == 0){
            (status,returnedData)= token.call(abi.encodeWithSignature("transferFrom(address,address,uint256)",_from,this,_value));
        }
        else{
            assetSelector memory aselector = depositSelector[token];
            if (aselector.isValueFirst){
                (status, returnedData) = token.call(abi.encodeWithSignature(aselector.selector,_value,_from));
            }
            else {
                (status,returnedData)= token.call(abi.encodeWithSignature(aselector.selector,_from,_value));
            }
        }
        require(
            status && (returnedData.length == 0 || abi.decode(returnedData, (bool))),
            ' transfer failed');
        return true;
    }

    function withdrawTokenLogic(address token, address _to, uint256 _value) internal returns(bool){
        bool status = false;
        bytes memory returnedData;
        if (bytes(withdrawSelector[token].selector).length==0){
            (status,returnedData)= token.call(abi.encodeWithSignature("transfer(address,uint256)",_to,_value));
        }
        else{
            assetSelector memory aselector = withdrawSelector[token];
            if (aselector.isValueFirst){
                (status,returnedData) = token.call(abi.encodeWithSignature( aselector.selector,_value,_to));
            }
            else {
                (status,returnedData)= token.call(abi.encodeWithSignature(aselector.selector,_to,_value));
            }
        }

        require(status && (returnedData.length == 0 || abi.decode(returnedData, (bool))),'withdraw failed');
        return true;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address[]","name":"_owners","type":"address[]"},{"internalType":"uint256","name":"_ownerRequired","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"TaskType","type":"string"},{"indexed":false,"internalType":"string","name":"class","type":"string"},{"indexed":false,"internalType":"address","name":"oldAddress","type":"address"},{"indexed":false,"internalType":"address","name":"newAddress","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"TaskType","type":"string"},{"indexed":false,"internalType":"string","name":"class","type":"string"},{"indexed":false,"internalType":"uint256","name":"previousNum","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"requiredNum","type":"uint256"}],"name":"AdminRequiredNumChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"taskHash","type":"bytes32"}],"name":"AdminTaskDropped","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"string","name":"targetAddress","type":"string"},{"indexed":false,"internalType":"string","name":"chain","type":"string"}],"name":"DepositNative","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"string","name":"targetAddress","type":"string"},{"indexed":false,"internalType":"string","name":"chain","type":"string"},{"indexed":false,"internalType":"uint256","name":"nativeValue","type":"uint256"}],"name":"DepositToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"string","name":"proof","type":"string"}],"name":"WithdrawDoneNative","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"string","name":"proof","type":"string"}],"name":"WithdrawDoneToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"string","name":"proof","type":"string"}],"name":"WithdrawingNative","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"string","name":"proof","type":"string"}],"name":"WithdrawingToken","type":"event"},{"inputs":[{"internalType":"string","name":"class","type":"string"},{"internalType":"address","name":"oneAddress","type":"address"}],"name":"addAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_targetAddress","type":"string"},{"internalType":"string","name":"chain","type":"string"}],"name":"depositNative","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"depositSelector","outputs":[{"internalType":"string","name":"selector","type":"string"},{"internalType":"bool","name":"isValueFirst","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"string","name":"_targetAddress","type":"string"},{"internalType":"string","name":"chain","type":"string"}],"name":"depositToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"string","name":"class","type":"string"},{"internalType":"address","name":"oneAddress","type":"address"}],"name":"dropAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"taskHash","type":"bytes32"}],"name":"dropTask","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"class","type":"string"}],"name":"getAdminAddresses","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLogicAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOperatorRequireNum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwnerRequireNum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStoreAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"class","type":"string"},{"internalType":"address","name":"oldAddress","type":"address"},{"internalType":"address","name":"newAddress","type":"address"}],"name":"modifyAdminAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"class","type":"string"},{"internalType":"uint256","name":"requiredNum","type":"uint256"}],"name":"resetRequiredNum","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"string","name":"method","type":"string"},{"internalType":"bool","name":"_isValueFirst","type":"bool"}],"name":"setDepositSelector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"string","name":"method","type":"string"},{"internalType":"bool","name":"_isValueFirst","type":"bool"}],"name":"setWithdrawSelector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"string","name":"proof","type":"string"},{"internalType":"bytes32","name":"taskHash","type":"bytes32"}],"name":"withdrawNative","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"withdrawSelector","outputs":[{"internalType":"string","name":"selector","type":"string"},{"internalType":"bool","name":"isValueFirst","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"string","name":"proof","type":"string"},{"internalType":"bytes32","name":"taskHash","type":"bytes32"}],"name":"withdrawToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

608060405260ff6000553480156200001657600080fd5b506040516200606c3803806200606c833981810160405260408110156200003c57600080fd5b81019080805160405193929190846401000000008211156200005d57600080fd5b838201915060208201858111156200007457600080fd5b82518660208202830111640100000000821117156200009257600080fd5b8083526020830192505050908051906020019060200280838360005b83811015620000cb578082015181840152602081019050620000ae565b50505050905001604052602001805190602001909291905050506000600560006101000a81548160ff0219169083151502179055506200011282826200011a60201b60201c565b505062000662565b8151816000548211158015620001305750818111155b80156200013d5750600081115b80156200014a5750600082115b6200015457600080fd5b60005b8451811015620001b857620001aa7f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b8683815181106200019657fe5b60200260200101516200040060201b60201c565b808060010191505062000157565b50620002037f0cc58340b26c619cd4edc70f833d3f4d9d26f3ae7d5ef2965f81fe5495049a4f60001b85600081518110620001ef57fe5b60200260200101516200040060201b60201c565b620002397f397bc5b97f629151e68146caedba62f10b47e426b38db589771a288c0861f18260001b60006200040060201b60201c565b6200026f7fe41d88711b08bdcd7556c5d2d24e0da6fa1f614cf2055f4d7e10206017cd168060001b60016200040060201b60201c565b60027f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b908060018154018082558091505060019003906000526020600020016000909190919091505560027f46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f62260001b908060018154018082558091505060019003906000526020600020016000909190919091505560027f0cc58340b26c619cd4edc70f833d3f4d9d26f3ae7d5ef2965f81fe5495049a4f60001b908060018154018082558091505060019003906000526020600020016000909190919091505560027fe41d88711b08bdcd7556c5d2d24e0da6fa1f614cf2055f4d7e10206017cd168060001b908060018154018082558091505060019003906000526020600020016000909190919091505560027f397bc5b97f629151e68146caedba62f10b47e426b38db589771a288c0861f18260001b908060018154018082558091505060019003906000526020600020016000909190919091505582600381905550600260048190555050505050565b6200041282826200059260201b60201c565b1562000486576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f647570206164647265737320616464656400000000000000000000000000000081525060200191505060405180910390fd5b60005460016000848152602001908152602001600020600201805490501062000517576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f746f6f206d616e7920616464726573736573000000000000000000000000000081525060200191505060405180910390fd5b60016000838152602001908152602001600020600201819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600080600090505b600160008581526020019081526020016000206002018054905081101562000656578273ffffffffffffffffffffffffffffffffffffffff16600160008681526020019081526020016000206002018281548110620005f557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415620006485760019150506200065c565b80806001019150506200059a565b50600090505b92915050565b6159fa80620006726000396000f3fe60806040526004361061013f5760003560e01c8063abd108ba116100b6578063d5b99d3c1161006f578063d5b99d3c14610c8d578063dd9b86c114610d9f578063e6a81ec414610f31578063e9e211bd14610f5c578063f5537ede14611044578063f60c757f146110bf5761013f565b8063abd108ba14610829578063b07ed3a91461086a578063c8e369bf146108ab578063c8fd90f9146109c8578063cb08e3ca14610abc578063ceb35b0f14610b8f5761013f565b80633f4ba83a116101085780633f4ba83a1461052d578063521cb590146105445780635c975abb146105955780638456cb59146105c25780638609d28c146105d957806391c40bf71461072b5761013f565b8062674f631461014457806302c1927c1461023857806306fdde031461036a5780631d75807c146103fa5780632c2df74214610425575b600080fd5b34801561015057600080fd5b506102366004803603606081101561016757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156101a457600080fd5b8201836020820111156101b657600080fd5b803590602001918460018302840111640100000000831117156101d857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803515159060200190929190505050611192565b005b34801561024457600080fd5b50610352600480360360a081101561025b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156102c257600080fd5b8201836020820111156102d457600080fd5b803590602001918460018302840111640100000000831117156102f657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001909291905050506112cc565b60405180821515815260200191505060405180910390f35b34801561037657600080fd5b5061037f611b82565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103bf5780820151818401526020810190506103a4565b50505050905090810190601f1680156103ec5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561040657600080fd5b5061040f611bbb565b6040518082815260200191505060405180910390f35b34801561043157600080fd5b5061052b6004803603606081101561044857600080fd5b810190808035906020019064010000000081111561046557600080fd5b82018360208201111561047757600080fd5b8035906020019184600183028401116401000000008311171561049957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611bc5565b005b34801561053957600080fd5b50610542611ebe565b005b34801561055057600080fd5b5061057d6004803603602081101561056757600080fd5b8101908080359060200190929190505050611f67565b60405180821515815260200191505060405180910390f35b3480156105a157600080fd5b506105aa612051565b60405180821515815260200191505060405180910390f35b3480156105ce57600080fd5b506105d7612068565b005b610729600480360360408110156105ef57600080fd5b810190808035906020019064010000000081111561060c57600080fd5b82018360208201111561061e57600080fd5b8035906020019184600183028401116401000000008311171561064057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156106a357600080fd5b8201836020820111156106b557600080fd5b803590602001918460018302840111640100000000831117156106d757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612111565b005b34801561073757600080fd5b506108116004803603604081101561074e57600080fd5b810190808035906020019064010000000081111561076b57600080fd5b82018360208201111561077d57600080fd5b8035906020019184600183028401116401000000008311171561079f57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061223d565b60405180821515815260200191505060405180910390f35b34801561083557600080fd5b5061083e6126f0565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561087657600080fd5b5061087f61271a565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156108b757600080fd5b50610971600480360360208110156108ce57600080fd5b81019080803590602001906401000000008111156108eb57600080fd5b8201836020820111156108fd57600080fd5b8035906020019184600183028401116401000000008311171561091f57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506127c4565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156109b4578082015181840152602081019050610999565b505050509050019250505060405180910390f35b3480156109d457600080fd5b50610aba600480360360608110156109eb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610a2857600080fd5b820183602082011115610a3a57600080fd5b80359060200191846001830284011164010000000083111715610a5c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035151590602001909291905050506127e4565b005b348015610ac857600080fd5b50610b0b60048036036020811015610adf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061291e565b60405180806020018315158152602001828103825284818151815260200191508051906020019080838360005b83811015610b53578082015181840152602081019050610b38565b50505050905090810190601f168015610b805780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b348015610b9b57600080fd5b50610c7560048036036040811015610bb257600080fd5b8101908080359060200190640100000000811115610bcf57600080fd5b820183602082011115610be157600080fd5b80359060200191846001830284011164010000000083111715610c0357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506129e7565b60405180821515815260200191505060405180910390f35b348015610c9957600080fd5b50610d8760048036036080811015610cb057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610cf757600080fd5b820183602082011115610d0957600080fd5b80359060200191846001830284011164010000000083111715610d2b57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050612d73565b60405180821515815260200191505060405180910390f35b610f1960048036036080811015610db557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610dfc57600080fd5b820183602082011115610e0e57600080fd5b80359060200191846001830284011164010000000083111715610e3057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610e9357600080fd5b820183602082011115610ea557600080fd5b80359060200191846001830284011164010000000083111715610ec757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050613687565b60405180821515815260200191505060405180910390f35b348015610f3d57600080fd5b50610f466137ea565b6040518082815260200191505060405180910390f35b348015610f6857600080fd5b5061102c60048036036040811015610f7f57600080fd5b8101908080359060200190640100000000811115610f9c57600080fd5b820183602082011115610fae57600080fd5b80359060200191846001830284011164010000000083111715610fd057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001909291905050506137f4565b60405180821515815260200191505060405180910390f35b34801561105057600080fd5b506110bd6004803603606081101561106757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613c0d565b005b3480156110cb57600080fd5b5061110e600480360360208110156110e257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613d68565b60405180806020018315158152602001828103825284818151815260200191508051906020019080838360005b8381101561115657808201518184015260208101905061113b565b50505050905090810190601f1680156111835780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b6111bf7f46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f62260001b33613e31565b611231576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f77726f6e67206f70657261746f7200000000000000000000000000000000000081525060200191505060405180910390fd5b6040518060400160405280838152602001821515815250600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000190805190602001906112a39291906158dc565b5060208201518160010160006101000a81548160ff021916908315150217905550905050505050565b60006112fb7f46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f62260001b33613e31565b61136d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f77726f6e67206f70657261746f7200000000000000000000000000000000000081525060200191505060405180910390fd5b600560009054906101000a900460ff16156113f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b8360008111611467576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f76616c7565206e656564203e203000000000000000000000000000000000000081525060200191505060405180910390fd5b858585604051602001808473ffffffffffffffffffffffffffffffffffffffff1660601b815260140183815260200182805190602001908083835b602083106114c557805182526020820191506020810190506020830392506114a2565b6001836020036101000a0380198251168184511680821785525050505050509050019350505050604051602081830303815290604052805190602001208314611576576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f7461736b486173682069732077726f6e6700000000000000000000000000000081525060200191505060405180910390fd5b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ae0fd47f600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663478538026040518163ffffffff1660e01b815260040160206040518083038186803b15801561161e57600080fd5b505afa158015611632573d6000803e3d6000fd5b505050506040513d602081101561164857600080fd5b810190808051906020019092919050505086336004546040518563ffffffff1660e01b8152600401808581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001945050505050602060405180830381600087803b1580156116bf57600080fd5b505af11580156116d3573d6000803e3d6000fd5b505050506040513d60208110156116e957600080fd5b81019080805190602001909291905050509050600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663afd464f26040518163ffffffff1660e01b815260040160206040518083038186803b15801561176457600080fd5b505afa158015611778573d6000803e3d6000fd5b505050506040513d602081101561178e57600080fd5b810190808051906020019092919050505081141561187d578773ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f91b4005f248ece53c5402f0c547c6a472d18676fbb0e2e15029d4869140cbe2088886040518083815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561183d578082015181840152602081019050611822565b50505050905090810190601f16801561186a5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a3611b72565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166310224a986040518163ffffffff1660e01b815260040160206040518083038186803b1580156118e557600080fd5b505afa1580156118f9573d6000803e3d6000fd5b505050506040513d602081101561190f57600080fd5b8101908080519060200190929190505050811415611b71576000611934898989613efc565b90508873ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f91b4005f248ece53c5402f0c547c6a472d18676fbb0e2e15029d4869140cbe2089896040518083815260200180602001828103825283818151815260200191508051906020019080838360005b838110156119cd5780820151818401526020810190506119b2565b50505050905090810190601f1680156119fa5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a38873ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f044513e921a12ac6560730ac3063f7946fdcb715deb39bc6f84c38be8083648a89896040518083815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611a9f578082015181840152602081019050611a84565b50505050905090810190601f168015611acc5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a3600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635035b622866040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611b4f57600080fd5b505af1158015611b63573d6000803e3d6000fd5b505050508093505050611b78565b5b60019250505b5095945050505050565b6040518060400160405280600681526020017f427269646765000000000000000000000000000000000000000000000000000081525081565b6000600454905090565b600560009054906101000a900460ff16611c47576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5061757361626c653a206e6f742070617573656400000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611cea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f77726f6e6720616464726573730000000000000000000000000000000000000081525060200191505060405180910390fd5b6000611cf7848484614602565b90508015611eb8576000846040516020018082805190602001908083835b60208310611d385780518252602082019150602081019050602083039250611d15565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012090507f397bc5b97f629151e68146caedba62f10b47e426b38db589771a288c0861f18260001b811415611de65782600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611eb6565b7fe41d88711b08bdcd7556c5d2d24e0da6fa1f614cf2055f4d7e10206017cd168060001b811415611eb557600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b0d80346846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b158015611e9c57600080fd5b505af1158015611eb0573d6000803e3d6000fd5b505050505b5b505b50505050565b611eeb7f0cc58340b26c619cd4edc70f833d3f4d9d26f3ae7d5ef2965f81fe5495049a4f60001b33613e31565b611f5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f77726f6e6720706175736572000000000000000000000000000000000000000081525060200191505060405180910390fd5b611f656148e9565b565b6000611f967f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b33613e31565b612008576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6f6e6c7920757365206f776e657220746f2063616c6c0000000000000000000081525060200191505060405180910390fd5b612011826149dc565b7f468b360fa155a4c5fdf0cb38ce238407e41508a56023e7536088c21b2cd64139826040518082815260200191505060405180910390a160019050919050565b6000600560009054906101000a900460ff16905090565b6120957f0cc58340b26c619cd4edc70f833d3f4d9d26f3ae7d5ef2965f81fe5495049a4f60001b33613e31565b612107576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f77726f6e6720706175736572000000000000000000000000000000000000000081525060200191505060405180910390fd5b61210f614a15565b565b3373ffffffffffffffffffffffffffffffffffffffff167f219295438b17c92dbc62ee9b1874dc1a25cf55368e13d34d65325217d4acbafe348484604051808481526020018060200180602001838103835285818151815260200191508051906020019080838360005b8381101561219657808201518184015260208101905061217b565b50505050905090810190601f1680156121c35780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b838110156121fc5780820151818401526020810190506121e1565b50505050905090810190601f1680156122295780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a25050565b600061226c7f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b33613e31565b6122de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6f6e6c7920757365206f776e657220746f2063616c6c0000000000000000000081525060200191505060405180910390fd5b60006122e984614b09565b90507fe41d88711b08bdcd7556c5d2d24e0da6fa1f614cf2055f4d7e10206017cd168060001b811415801561234157507f397bc5b97f629151e68146caedba62f10b47e426b38db589771a288c0861f18260001b8114155b6123b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f77726f6e6720636c61737300000000000000000000000000000000000000000081525060200191505060405180910390fd5b6123bd8184613e31565b61242f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f6e6f20737563682061646472657373206578697374000000000000000000000081525060200191505060405180910390fd5b7f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b8114156124da5760035461246682614c04565b116124d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f696e7375666669656e636520616464726573736573000000000000000000000081525060200191505060405180910390fd5b5b6000848460405160200180807f64726f7041646472657373000000000000000000000000000000000000000000815250600b0183805190602001908083835b6020831061253c5780518252602082019150602081019050602083039250612519565b6001836020036101000a0380198251168184511680821785525050505050509050018273ffffffffffffffffffffffffffffffffffffffff1660601b8152601401925050506040516020818303038152906040528051906020012090506125a38133614c27565b6003546125af82614c04565b106126e3576125be8285614daf565b7fb02ddf2800cd4468f7eb14268a7c9f1b6e816aa425ed542d13d8d3a96fa445668585866040518080602001806020018573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018381038352600b8152602001807f64726f7041646472657373000000000000000000000000000000000000000000815250602001838103825286818151815260200191508051906020019080838360005b83811015612692578082015181840152602081019050612677565b50505050905090810190601f1680156126bf5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a16126d8816149dc565b6001925050506126ea565b6000925050505b92915050565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b07ed3a96040518163ffffffff1660e01b815260040160206040518083038186803b15801561278457600080fd5b505afa158015612798573d6000803e3d6000fd5b505050506040513d60208110156127ae57600080fd5b8101908080519060200190929190505050905090565b606060006127d183614b09565b90506127dc81614f8f565b915050919050565b6128117f46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f62260001b33613e31565b612883576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f77726f6e67206f70657261746f7200000000000000000000000000000000000081525060200191505060405180910390fd5b6040518060400160405280838152602001821515815250600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000190805190602001906128f59291906158dc565b5060208201518160010160006101000a81548160ff021916908315150217905550905050505050565b6007602052806000526040600020600091509050806000018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156129ca5780601f1061299f576101008083540402835291602001916129ca565b820191906000526020600020905b8154815290600101906020018083116129ad57829003601f168201915b5050505050908060010160009054906101000a900460ff16905082565b6000612a167f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b33613e31565b612a88576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6f6e6c7920757365206f776e657220746f2063616c6c0000000000000000000081525060200191505060405180910390fd5b6000612a9384614b09565b90507fe41d88711b08bdcd7556c5d2d24e0da6fa1f614cf2055f4d7e10206017cd168060001b8114158015612aeb57507f397bc5b97f629151e68146caedba62f10b47e426b38db589771a288c0861f18260001b8114155b612b5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f77726f6e6720636c61737300000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000848460405160200180807f6164644164647265737300000000000000000000000000000000000000000000815250600a0183805190602001908083835b60208310612bbf5780518252602082019150602081019050602083039250612b9c565b6001836020036101000a0380198251168184511680821785525050505050509050018273ffffffffffffffffffffffffffffffffffffffff1660601b815260140192505050604051602081830303815290604052805190602001209050612c268133614c27565b600354612c3282614c04565b10612d6657612c418285614c27565b7fb02ddf2800cd4468f7eb14268a7c9f1b6e816aa425ed542d13d8d3a96fa445668585866040518080602001806020018573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018381038352600a8152602001807f6164644164647265737300000000000000000000000000000000000000000000815250602001838103825286818151815260200191508051906020019080838360005b83811015612d15578082015181840152602081019050612cfa565b50505050905090810190601f168015612d425780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1612d5b816149dc565b600192505050612d6d565b6000925050505b92915050565b6000612da27f46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f62260001b33613e31565b612e14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f77726f6e67206f70657261746f7200000000000000000000000000000000000081525060200191505060405180910390fd5b600560009054906101000a900460ff1615612e97576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b8360008111612f0e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f76616c7565206e656564203e203000000000000000000000000000000000000081525060200191505060405180910390fd5b84471015612f84576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f6e6f7420656e6f756768206e617469766520746f6b656e00000000000000000081525060200191505060405180910390fd5b858585604051602001808473ffffffffffffffffffffffffffffffffffffffff1660601b815260140183815260200182805190602001908083835b60208310612fe25780518252602082019150602081019050602083039250612fbf565b6001836020036101000a0380198251168184511680821785525050505050509050019350505050604051602081830303815290604052805190602001208314613093576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f7461736b486173682069732077726f6e6700000000000000000000000000000081525060200191505060405180910390fd5b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ae0fd47f600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663478538026040518163ffffffff1660e01b815260040160206040518083038186803b15801561313b57600080fd5b505afa15801561314f573d6000803e3d6000fd5b505050506040513d602081101561316557600080fd5b810190808051906020019092919050505086336004546040518563ffffffff1660e01b8152600401808581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001945050505050602060405180830381600087803b1580156131dc57600080fd5b505af11580156131f0573d6000803e3d6000fd5b505050506040513d602081101561320657600080fd5b81019080805190602001909291905050509050600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663afd464f26040518163ffffffff1660e01b815260040160206040518083038186803b15801561328157600080fd5b505afa158015613295573d6000803e3d6000fd5b505050506040513d60208110156132ab57600080fd5b8101908080519060200190929190505050811415613383578673ffffffffffffffffffffffffffffffffffffffff167f85c53e7e269cd44a12210170eb2636cdc0d111b93e101a211305e0144733995587876040518083815260200180602001828103825283818151815260200191508051906020019080838360005b83811015613343578082015181840152602081019050613328565b50505050905090810190601f1680156133705780820380516001836020036101000a031916815260200191505b50935050505060405180910390a2613679565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166310224a986040518163ffffffff1660e01b815260040160206040518083038186803b1580156133eb57600080fd5b505afa1580156133ff573d6000803e3d6000fd5b505050506040513d602081101561341557600080fd5b8101908080519060200190929190505050811415613678578673ffffffffffffffffffffffffffffffffffffffff167f85c53e7e269cd44a12210170eb2636cdc0d111b93e101a211305e0144733995587876040518083815260200180602001828103825283818151815260200191508051906020019080838360005b838110156134ad578082015181840152602081019050613492565b50505050905090810190601f1680156134da5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a28673ffffffffffffffffffffffffffffffffffffffff167fd8ff38332185c42ca14ded5671b8eb2842095abf024f6900cb42760ccb438f3387876040518083815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561356857808201518184015260208101905061354d565b50505050905090810190601f1680156135955780820380516001836020036101000a031916815260200191505b50935050505060405180910390a28673ffffffffffffffffffffffffffffffffffffffff166108fc879081150290604051600060405180830381858888f193505050501580156135e9573d6000803e3d6000fd5b50600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635035b622856040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561365f57600080fd5b505af1158015613673573d6000803e3d6000fd5b505050505b5b600192505050949350505050565b600080613695863387615033565b90508573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f63333d9ba80d323ed3a2c486809215e8f1fb8c645691606b862787fad572c1c787878734604051808581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b8381101561373a57808201518184015260208101905061371f565b50505050905090810190601f1680156137675780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b838110156137a0578082015181840152602081019050613785565b50505050905090810190601f1680156137cd5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a380915050949350505050565b6000600354905090565b60006138237f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b33613e31565b613895576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6f6e6c7920757365206f776e657220746f2063616c6c0000000000000000000081525060200191505060405180910390fd5b60006138a084614b09565b90507f46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f62260001b8114806138f557507f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b81145b613967576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f77726f6e6720636c61737300000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000848460405160200180807f726573657452657175697265644e756d0000000000000000000000000000000081525060100183805190602001908083835b602083106139c957805182526020820191506020810190506020830392506139a6565b6001836020036101000a03801982511681845116808217855250505050505090500182815260200192505050604051602081830303815290604052805190602001209050613a178133614c27565b600354613a2382614c04565b10613c0157613a31816149dc565b60007f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b831415613a6f57600354905084600381905550613b1a565b7f46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f62260001b831415613aab57600454905084600481905550613b19565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f77726f6e6720636c61737300000000000000000000000000000000000000000081525060200191505060405180910390fd5b5b7fce49fc04234925e87b95750e0e50cac6d4ffcf8a696e3316b3e13bedc84ee7a8868287604051808060200180602001858152602001848152602001838103835260108152602001807f726573657452657175697265644e756d00000000000000000000000000000000815250602001838103825286818151815260200191508051906020019080838360005b83811015613bc2578082015181840152602081019050613ba7565b50505050905090810190601f168015613bef5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1505b60019250505092915050565b613c3a7f0cc58340b26c619cd4edc70f833d3f4d9d26f3ae7d5ef2965f81fe5495049a4f60001b33613e31565b613cac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f77726f6e6720706175736572000000000000000000000000000000000000000081525060200191505060405180910390fd5b600083905060008173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015613d2457600080fd5b505af1158015613d38573d6000803e3d6000fd5b505050506040513d6020811015613d4e57600080fd5b810190808051906020019092919050505090505050505050565b6006602052806000526040600020600091509050806000018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015613e145780601f10613de957610100808354040283529160200191613e14565b820191906000526020600020905b815481529060010190602001808311613df757829003601f168201915b5050505050908060010160009054906101000a900460ff16905082565b600080600090505b6001600085815260200190815260200160002060020180549050811015613ef0578273ffffffffffffffffffffffffffffffffffffffff16600160008681526020019081526020016000206002018281548110613e9257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415613ee3576001915050613ef6565b8080600101915050613e39565b50600090505b92915050565b6000806000905060606000600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000180546001816001161561010002031660029004905014156140cf578573ffffffffffffffffffffffffffffffffffffffff168585604051602401808373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001925050506040516020818303038152906040527fa9059cbb000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b6020831061405a5780518252602082019150602081019050602083039250614037565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146140bc576040519150601f19603f3d011682016040523d82523d6000602084013e6140c1565b606091505b508092508193505050614548565b6140d761596a565b600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020604051806040016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156141ba5780601f1061418f576101008083540402835291602001916141ba565b820191906000526020600020905b81548152906001019060200180831161419d57829003601f168201915b505050505081526020016001820160009054906101000a900460ff161515151581525050905080602001511561439a578673ffffffffffffffffffffffffffffffffffffffff1681600001518688604051602401808381526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050604051602081830303815290604052906040518082805190602001908083835b602083106142785780518252602082019150602081019050602083039250614255565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b602083106143255780518252602082019150602081019050602083039250614302565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614387576040519150601f19603f3d011682016040523d82523d6000602084013e61438c565b606091505b508093508194505050614546565b8673ffffffffffffffffffffffffffffffffffffffff1681600001518787604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052906040518082805190602001908083835b602083106144285780518252602082019150602081019050602083039250614405565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b602083106144d557805182526020820191506020810190506020830392506144b2565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614537576040519150601f19603f3d011682016040523d82523d6000602084013e61453c565b606091505b5080935081945050505b505b8180156145835750600081511480614582575080806020019051602081101561457057600080fd5b81019080805190602001909291905050505b5b6145f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f7769746864726177206661696c6564000000000000000000000000000000000081525060200191505060405180910390fd5b6001925050509392505050565b60006146317f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b33613e31565b6146a3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6f6e6c7920757365206f776e657220746f2063616c6c0000000000000000000081525060200191505060405180910390fd5b60006146ae85614b09565b9050600085858560405160200180807f6d6f646966794164647265737300000000000000000000000000000000000000815250600d0184805190602001908083835b6020831061471357805182526020820191506020810190506020830392506146f0565b6001836020036101000a0380198251168184511680821785525050505050509050018373ffffffffffffffffffffffffffffffffffffffff1660601b81526014018273ffffffffffffffffffffffffffffffffffffffff1660601b8152601401935050505060405160208183030381529060405280519060200120905061479a8133614c27565b6003546147a682614c04565b106148db576147b6828686615757565b7fb02ddf2800cd4468f7eb14268a7c9f1b6e816aa425ed542d13d8d3a96fa445668686866040518080602001806020018573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018381038352600d8152602001807f6d6f646966794164647265737300000000000000000000000000000000000000815250602001838103825286818151815260200191508051906020019080838360005b8381101561488a57808201518184015260208101905061486f565b50505050905090810190601f1680156148b75780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a16148d0816149dc565b6001925050506148e2565b6000925050505b9392505050565b600560009054906101000a900460ff1661496b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5061757361626c653a206e6f742070617573656400000000000000000000000081525060200191505060405180910390fd5b6000600560006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6149af61587e565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b600160008281526020019081526020016000206000808201600090556001820160009055600282016000614a109190615986565b505050565b600560009054906101000a900460ff1615614a98576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b6001600560006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258614adc61587e565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b600080826040516020018082805190602001908083835b60208310614b435780518252602082019150602081019050602083039250614b20565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001209050614b8981615886565b614bfb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f696e76616c696420636c6173730000000000000000000000000000000000000081525060200191505060405180910390fd5b80915050919050565b600060016000838152602001908152602001600020600201805490509050919050565b614c318282613e31565b15614ca4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f647570206164647265737320616464656400000000000000000000000000000081525060200191505060405180910390fd5b600054600160008481526020019081526020016000206002018054905010614d34576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f746f6f206d616e7920616464726573736573000000000000000000000000000081525060200191505060405180910390fd5b60016000838152602001908152602001600020600201819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60005b6001600084815260200190815260200160002060020180549050811015614f89578173ffffffffffffffffffffffffffffffffffffffff16600160008581526020019081526020016000206002018281548110614e0b57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415614f7c57600160008481526020019081526020016000206002016001806000868152602001908152602001600020600201805490500381548110614e8e57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160008581526020019081526020016000206002018281548110614eda57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016000848152602001908152602001600020600201805480614f4157fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905550614f8b565b8080600101915050614db2565b505b5050565b60606001600083815260200190815260200160002060020180548060200260200160405190810160405280929190818152602001828054801561502757602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311614fdd575b50505050509050919050565b6000806000905060606000600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018054600181600116156101000203166002900490501415615224578573ffffffffffffffffffffffffffffffffffffffff16853086604051602401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200193505050506040516020818303038152906040527f23b872dd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b602083106151af578051825260208201915060208101905060208303925061518c565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114615211576040519150601f19603f3d011682016040523d82523d6000602084013e615216565b606091505b50809250819350505061569d565b61522c61596a565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020604051806040016040529081600082018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561530f5780601f106152e45761010080835404028352916020019161530f565b820191906000526020600020905b8154815290600101906020018083116152f257829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152505090508060200151156154ef578673ffffffffffffffffffffffffffffffffffffffff1681600001518688604051602401808381526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050604051602081830303815290604052906040518082805190602001908083835b602083106153cd57805182526020820191506020810190506020830392506153aa565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b6020831061547a5780518252602082019150602081019050602083039250615457565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146154dc576040519150601f19603f3d011682016040523d82523d6000602084013e6154e1565b606091505b50809350819450505061569b565b8673ffffffffffffffffffffffffffffffffffffffff1681600001518787604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052906040518082805190602001908083835b6020831061557d578051825260208201915060208101905060208303925061555a565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b6020831061562a5780518252602082019150602081019050602083039250615607565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461568c576040519150601f19603f3d011682016040523d82523d6000602084013e615691565b606091505b5080935081945050505b505b8180156156d857506000815114806156d757508080602001905160208110156156c557600080fd5b81019080805190602001909291905050505b5b61574a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f207472616e73666572206661696c65640000000000000000000000000000000081525060200191505060405180910390fd5b6001925050509392505050565b60005b6001600085815260200190815260200160002060020180549050811015615877578273ffffffffffffffffffffffffffffffffffffffff166001600086815260200190815260200160002060020182815481106157b357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561586a578160016000868152602001908152602001600020600201828154811061581c57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050615879565b808060010191505061575a565b505b505050565b600033905090565b600080600090505b6002805490508110156158d15782600282815481106158a957fe5b906000526020600020015414156158c45760019150506158d7565b808060010191505061588e565b50600090505b919050565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826159125760008555615959565b82601f1061592b57805160ff1916838001178555615959565b82800160010185558215615959579182015b8281111561595857825182559160200191906001019061593d565b5b50905061596691906159a7565b5090565b6040518060400160405280606081526020016000151581525090565b50805460008255906000526020600020908101906159a491906159a7565b50565b5b808211156159c05760008160009055506001016159a8565b509056fea2646970667358221220175fd30761d46f49bdd013683f3d26a07b057927b3f48644cc55d126254c071864736f6c63430007040033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000d2b75596a63728d84d341f2e3ce6ddae66810128

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

000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000d2b75596a63728d84d341f2e3ce6ddae66810128

-----Decoded View---------------
Arg [0] : _owners (address[]): 0xd2b75596a63728d84d341f2e3ce6ddae66810128
Arg [1] : _ownerRequired (uint256): 1

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [3] : 000000000000000000000000d2b75596a63728d84d341f2e3ce6ddae66810128


Deployed ByteCode Sourcemap

24936:7214:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29683:185;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27634:931;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;25021:38;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15251:106;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28573:549;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29413:66;;;;;;;;;;;;;:::i;:::-;;18873:170;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;7585:78;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29343:62;;;;;;;;;;;;;:::i;:::-;;26203:172;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17305:891;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29128:95;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29231:104;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;14945:190;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29876:187;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30226:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18204:661;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26774:852;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26383:380;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;15143:100;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15365:1046;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29489:184;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30163:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29683:185;25750:43;12805:66;25768:12;;25782:10;25750:17;:43::i;:::-;25742:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29825:35:::1;;;;;;;;29839:6;29825:35;;;;29846:13;29825:35;;;;::::0;29800:15:::1;:22;29816:5;29800:22;;;;;;;;;;;;;;;:60;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29683:185:::0;;;:::o;27634:931::-;27820:4;25750:43;12805:66;25768:12;;25782:10;25750:17;:43::i;:::-;25742:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7903:7:::1;;;;;;;;;;;7902:8;7894:37;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;27799:5:::2;26031:1;26022:6;:10;26014:37;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;27890:2:::3;27893:5;27899;27873:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27862:45;;;;;;27850:8;:57;27842:86;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;27939:14;27956:5;;;;;;;;;;;:17;;;27974:5;;;;;;;;;;;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;27996:8;28006:10;28018:18;;27956:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;27939:98;;28064:5;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;28054:6;:32;28050:486;;;28128:6;28107:42;;28124:2;28107:42;;;28136:5;28143;28107:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28050:486;;;28180:5;;;;;;;;;;;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;28170:6;:26;28166:370;;;28282:8;28293:38;28313:6;28321:2;28325:5;28293:18;:38::i;:::-;28282:49;;28374:6;28353:42;;28370:2;28353:42;;;28382:5;28389;28353:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28437:6;28415:43;;28433:2;28415:43;;;28445:5;28452;28415:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28473:5;;;;;;;;;;;:16;;;28490:8;28473:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;28521:3;28514:10;;;;;;28166:370;28050:486;28553:4;28546:11;;;26062:1;7942::::2;27634:931:::0;;;;;;;:::o;25021:38::-;;;;;;;;;;;;;;;;;;;:::o;15251:106::-;15305:7;15331:18;;15324:25;;15251:106;:::o;28573:549::-;8179:7;;;;;;;;;;;8171:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28721:3:::1;28699:26;;:10;:26;;;;28691:52;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;28754:9;28766:44;28780:5;28787:10;28799;28766:13;:44::i;:::-;28754:56;;28824:4;28821:294;;;28844:17;28891:5;28874:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28864:34;;;;;;28844:54;;13139:66;28929:9;;28916;:22;28913:191;;;28978:10;28958:5;;:31;;;;;;;;;;;;;;;;;;28913:191;;;13028:66;29026:9;;29013;:22;29010:94;;;29055:5;;;;;;;;;;;:21;;;29077:10;29055:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;29010:94;28913:191;28821:294;;8222:1;28573:549:::0;;;:::o;29413:66::-;25881:41;12917:66;25899:10;;25911;25881:17;:41::i;:::-;25873:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29461:10:::1;:8;:10::i;:::-;29413:66::o:0;18873:170::-;18935:4;13909:40;12691:66;13927:9;;13938:10;13909:17;:40::i;:::-;13901:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18951:20:::1;18962:8;18951:10;:20::i;:::-;18987:26;19004:8;18987:26;;;;;;;;;;;;;;;;;;19031:4;19024:11;;18873:170:::0;;;:::o;7585:78::-;7624:4;7648:7;;;;;;;;;;;7641:14;;7585:78;:::o;29343:62::-;25881:41;12917:66;25899:10;;25911;25881:17;:41::i;:::-;25873:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29389:8:::1;:6;:8::i;:::-;29343:62::o:0;26203:172::-;26323:10;26309:58;;;26335:9;26346:14;26361:5;26309:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26203:172;;:::o;17305:891::-;17393:4;13909:40;12691:66;13927:9;;13938:10;13909:17;:40::i;:::-;13901:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17409:17:::1;17429:19;17442:5;17429:12;:19::i;:::-;17409:39;;13028:66;17480:9;;17467;:22;;:48;;;;;13139:66;17506:9;;17493;:22;;17467:48;17459:72;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;17550:40;17568:9;17579:10;17550:17;:40::i;:::-;17542:74;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;12691:66;17646:9;;17633;:22;17629:123;;;17711:15;;17678:30;17698:9;17678:19;:30::i;:::-;:48;17670:82;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;17629:123;17765:16;17826:5;17833:10;17794:50;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17784:61;;;;;;17765:80;;17856:36;17871:8;17881:10;17856:14;:36::i;:::-;17940:15;;17907:29;17927:8;17907:19;:29::i;:::-;:48;17903:263;;17972:43;17993:9;18004:10;17972:20;:43::i;:::-;18035:58;18063:5;18070:10;18082;18035:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18108:20;18119:8;18108:10;:20::i;:::-;18150:4;18143:11;;;;;;17903:263;18183:5;18176:12;;;;13987:1;17305:891:::0;;;;:::o;29128:95::-;29175:7;29209:5;;;;;;;;;;;29194:21;;29128:95;:::o;29231:104::-;29278:7;29304:5;;;;;;;;;;;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29297:30;;29231:104;:::o;14945:190::-;15014:16;15043:17;15063:19;15076:5;15063:12;:19::i;:::-;15043:39;;15100:27;15117:9;15100:16;:27::i;:::-;15093:34;;;14945:190;;;:::o;29876:187::-;25750:43;12805:66;25768:12;;25782:10;25750:17;:43::i;:::-;25742:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30020:35:::1;;;;;;;;30034:6;30020:35;;;;30041:13;30020:35;;;;::::0;29994:16:::1;:23;30011:5;29994:23;;;;;;;;;;;;;;;:61;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29876:187:::0;;;:::o;30226:57::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;18204:661::-;18291:4;13909:40;12691:66;13927:9;;13938:10;13909:17;:40::i;:::-;13901:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18307:17:::1;18327:19;18340:5;18327:12;:19::i;:::-;18307:39;;13028:66;18378:9;;18365;:22;;:48;;;;;13139:66;18404:9;;18391;:22;;18365:48;18357:72;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;18442:16;18502:5;18509:10;18471:49;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18461:60;;;;;;18442:79;;18532:36;18547:8;18557:10;18532:14;:36::i;:::-;18616:15;;18583:29;18603:8;18583:19;:29::i;:::-;:48;18579:256;;18648:37;18663:9;18674:10;18648:14;:37::i;:::-;18705:57;18732:5;18739:10;18751;18705:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18777:20;18788:8;18777:10;:20::i;:::-;18819:4;18812:11;;;;;;18579:256;18852:5;18845:12;;;;13987:1;18204:661:::0;;;;:::o;26774:852::-;26952:4;25750:43;12805:66;25768:12;;25782:10;25750:17;:43::i;:::-;25742:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7903:7:::1;;;;;;;;;;;7902:8;7894:37;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;26932:5:::2;26031:1;26022:6;:10;26014:37;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;27007:5:::3;26982:21;:30;;26974:66;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;27099:2;27102:5;27108;27082:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27071:45;;;;;;27059:8;:57;27051:86;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;27148:14;27165:5;;;;;;;;;;;:17;;;27183:5;;;;;;;;;;;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;27205:8;27215:10;27227:18;;27165:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;27148:98;;27273:5;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;27263:6;:32;27259:338;;;27334:2;27316:35;;;27338:5;27345;27316:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27259:338;;;27382:5;;;;;;;;;;;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;27372:6;:26;27368:229;;;27438:2;27420:35;;;27442:5;27449;27420:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27494:2;27475:36;;;27498:5;27505;27475:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27526:2;:11;;:18;27538:5;27526:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;27559:5;;;;;;;;;;;:16;;;27576:8;27559:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;27368:229;27259:338;27614:4;27607:11;;;7942:1:::2;26774:852:::0;;;;;;:::o;26383:380::-;26508:4;26589:8;26600:45;26618:6;26627:10;26639:5;26600:17;:45::i;:::-;26589:56;;26693:6;26661:73;;26674:10;26661:73;;;26686:5;26701:14;26717:5;26724:9;26661:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26752:3;26745:10;;;26383:380;;;;;;:::o;15143:100::-;15194:7;15220:15;;15213:22;;15143:100;:::o;15365:1046::-;15459:4;13909:40;12691:66;13927:9;;13938:10;13909:17;:40::i;:::-;13901:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15475:17:::1;15495:19;15508:5;15495:12;:19::i;:::-;15475:39;;12805:66;15547:12;;15534:9;:25;15533:55;;;;12691:66;15578:9;;15565;:22;15533:55;15525:79;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;15617:16;15683:5;15690:11;15646:56;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15636:67;;;;;;15617:86;;15714:36;15729:8;15739:10;15714:14;:36::i;:::-;15800:15;;15767:29;15787:8;15767:19;:29::i;:::-;:48;15763:619;;15832:20;15843:8;15832:10;:20::i;:::-;15867:19;12691:66;15922:9;;15909;:22;15905:370;;;15966:15;;15952:29;;16018:11;16000:15;:29;;;;15905:370;;;12805:66;16081:12;;16068:9;:25;16064:211;;;16128:18;;16114:32;;16186:11;16165:18;:32;;;;16064:211;;;16238:21;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;16064:211;15905:370;16294:76;16338:5;16345:11;16358;16294:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15763:619;;16399:4;16392:11;;;;15365:1046:::0;;;;:::o;29489:184::-;25881:41;12917:66;25899:10;;25911;25881:17;:41::i;:::-;25873:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29585:13:::1;29608:5;29585:29;;29625:12;29640:6;:15;;;29656:2;29659:5;29640:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;29625:40;;25950:1;;29489:184:::0;;;:::o;30163:56::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;9099:291::-;9182:4;9202:9;9214:1;9202:13;;9198:162;9221:9;:14;9231:3;9221:14;;;;;;;;;;;:24;;:31;;;;9217:1;:35;9198:162;;;9307:11;9276:42;;:9;:14;9286:3;9276:14;;;;;;;;;;;:24;;9301:1;9276:27;;;;;;;;;;;;;;;;;;;;;;;;;:42;;;9273:75;;;9344:4;9337:11;;;;;9273:75;9254:3;;;;;;;9198:162;;;;9377:5;9370:12;;9099:291;;;;;:::o;31249:898::-;31338:4;31354:11;31368:5;31354:19;;31384:25;31472:1;31430:16;:23;31447:5;31430:23;;;;;;;;;;;;;;;:32;;31424:46;;;;;;;;;;;;;;;;:49;31420:586;;;31512:5;:10;;31575:3;31579:6;31523:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31512:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31489:98;;;;;;;;31420:586;;;31628:30;;:::i;:::-;31661:16;:23;31678:5;31661:23;;;;;;;;;;;;;;;31628:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31703:9;:22;;;31699:296;;;31769:5;:10;;31805:9;:18;;;31824:6;31831:3;31780:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31769:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31745:91;;;;;;;;31699:296;;;31913:5;:10;;31948:9;:18;;;31967:3;31971:6;31924:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31913:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31890:89;;;;;;;;31699:296;31420:586;;32026:6;:72;;;;;32060:1;32037:12;:19;:24;:60;;;;32076:12;32065:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32037:60;32026:72;32018:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32135:4;32128:11;;;;31249:898;;;;;:::o;16419:635::-;16531:4;13909:40;12691:66;13927:9;;13938:10;13909:17;:40::i;:::-;13901:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16547:17:::1;16567:19;16580:5;16567:12;:19::i;:::-;16547:39;;16597:16;16660:5;16667:10;16679;16626:64;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16616:75;;;;;;16597:94;;16702:36;16717:8;16727:10;16702:14;:36::i;:::-;16786:15;;16753:29;16773:8;16753:19;:29::i;:::-;:48;16749:275;;16818:53;16837:9;16848:10;16860;16818:18;:53::i;:::-;16891:60;16921:5;16928:10;16940;16891:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16966:20;16977:8;16966:10;:20::i;:::-;17008:4;17001:11;;;;;;16749:275;17041:5;17034:12;;;;13987:1;16419:635:::0;;;;;:::o;8634:120::-;8179:7;;;;;;;;;;;8171:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8703:5:::1;8693:7;;:15;;;;;;;;;;;;;;;;;;8724:22;8733:12;:10;:12::i;:::-;8724:22;;;;;;;;;;;;;;;;;;;;8634:120::o:0;10890:81::-;10949:9;:14;10959:3;10949:14;;;;;;;;;;;;10942:21;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;10890:81;:::o;8375:118::-;7903:7;;;;;;;;;;;7902:8;7894:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8445:4:::1;8435:7;;:14;;;;;;;;;;;;;;;;;;8465:20;8472:12;:10;:12::i;:::-;8465:20;;;;;;;;;;;;;;;;;;;;8375:118::o:0;17062:235::-;17127:7;17146:17;17193:5;17176:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17166:34;;;;;;17146:54;;17219:25;17234:9;17219:14;:25::i;:::-;17211:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17280:9;17273:16;;;17062:235;;;:::o;9729:129::-;9793:7;9819:9;:14;9829:3;9819:14;;;;;;;;;;;:24;;:31;;;;9812:38;;9729:129;;;:::o;10048:296::-;10134:35;10152:3;10157:11;10134:17;:35::i;:::-;10133:36;10125:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10244:16;;10210:9;:14;10220:3;10210:14;;;;;;;;;;;:24;;:31;;;;:50;10202:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10294:9;:14;10304:3;10294:14;;;;;;;;;;;:24;;10324:11;10294:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10048:296;;:::o;10459:423::-;10547:9;10543:332;10566:9;:14;10576:3;10566:14;;;;;;;;;;;:24;;:31;;;;10562:1;:35;10543:332;;;10652:11;10621:42;;:9;:14;10631:3;10621:14;;;;;;;;;;;:24;;10646:1;10621:27;;;;;;;;;;;;;;;;;;;;;;;;;:42;;;10618:246;;;10713:9;:14;10723:3;10713:14;;;;;;;;;;;:24;;10772:1;10738:9;:14;10748:3;10738:14;;;;;;;;;;;:24;;:31;;;;:35;10713:61;;;;;;;;;;;;;;;;;;;;;;;;;10683:9;:14;10693:3;10683:14;;;;;;;;;;;:24;;10708:1;10683:27;;;;;;;;;;;;;;;;:91;;;;;;;;;;;;;;;;;;10793:9;:14;10803:3;10793:14;;;;;;;;;;;:24;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10842:7;;;10618:246;10599:3;;;;;;;10543:332;;;;10459:423;;;:::o;9396:128::-;9457:16;9492:9;:14;9502:3;9492:14;;;;;;;;;;;:24;;9485:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9396:128;;;:::o;30292:949::-;30382:4;30398:11;30412:5;30398:19;;30428:25;30517:1;30474:15;:22;30490:5;30474:22;;;;;;;;;;;;;;;:31;;30468:45;;;;;;;;;;;;;;;;:50;30464:609;;;30557:5;:10;;30632:5;30638:4;30643:6;30568:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30557:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30534:117;;;;;;;;30464:609;;;30692:30;;:::i;:::-;30725:15;:22;30741:5;30725:22;;;;;;;;;;;;;;;30692:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30766:9;:22;;;30762:300;;;30833:5;:10;;30868:9;:18;;;30887:6;30894:5;30844:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30833:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30808:93;;;;;;;;30762:300;;;30978:5;:10;;31013:9;:18;;;31032:5;31038:6;30989:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30978:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30955:91;;;;;;;;30762:300;30464:609;;31105:6;:72;;;;;31139:1;31116:12;:19;:24;:60;;;;31155:12;31144:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31116:60;31105:72;31083:128;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31229:4;31222:11;;;;30292:949;;;;;:::o;10979:351::-;11090:9;11086:237;11109:9;:14;11119:3;11109:14;;;;;;;;;;;:24;;:31;;;;11105:1;:35;11086:237;;;11195:11;11164:42;;:9;:14;11174:3;11164:14;;;;;;;;;;;:24;;11189:1;11164:27;;;;;;;;;;;;;;;;;;;;;;;;;:42;;;11161:151;;;11256:15;11226:9;:14;11236:3;11226:14;;;;;;;;;;;:24;;11251:1;11226:27;;;;;;;;;;;;;;;;:45;;;;;;;;;;;;;;;;;;11290:7;;;11161:151;11142:3;;;;;;;11086:237;;;;10979:351;;;;:::o;6136:106::-;6189:15;6224:10;6217:17;;6136:106;:::o;14720:217::-;14781:4;14803:9;14815:1;14803:13;;14798:108;14822:14;:21;;;;14818:1;:25;14798:108;;;14888:5;14867:14;14882:1;14867:17;;;;;;;;;;;;;;;;:26;14863:43;;;14902:4;14895:11;;;;;14863:43;14845:3;;;;;;;14798:108;;;;14924:5;14917:12;;14720:217;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

ipfs://175fd30761d46f49bdd013683f3d26a07b057927b3f48644cc55d126254c0718
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.

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.