Contract 0x448a51c8acb1d5d29e826f0a1e7c148d647171e5

Txn Hash Method
Block
From
To
Value [Txn Fee]
0xe3252ccca8743f66e0c533f39849fff2c8fd3253c801af3eb1e837277be4fc03Transfer155829082022-05-27 9:14:0715 hrs 22 mins ago0xab391a042eaeea48467ea7985dc72a1ddbc5c873 IN 0x448a51c8acb1d5d29e826f0a1e7c148d647171e50 HT0.00015456252.5
0xaced1bbb5958cb00d6f800ebb159b13b1e231f2063f88bff2072b6535f3fd998Transfer155740802022-05-27 1:52:4322 hrs 43 mins ago0xe4f087686a96c382d8838ba59353ed49d5962ccb IN 0x448a51c8acb1d5d29e826f0a1e7c148d647171e50 HT0.00014259252.5
0x08795f96c79ffd7416e3b9839a751caf45456a11c9e3b0126ea435c28d1fa715Transfer155608762022-05-26 14:52:311 day 9 hrs ago0x370afa217ce52d39f43e7734d8503084b2212f32 IN 0x448a51c8acb1d5d29e826f0a1e7c148d647171e50 HT0.00011181252.5
0xff59543d4c9104da6e6a1a864ffab13697e90b1646a49ec42f132e8aa44ec8b0Transfer155588642022-05-26 13:11:551 day 11 hrs ago0xa158943ec3d5834df9fb6d9c9f6ed34841d5b3d6 IN 0x448a51c8acb1d5d29e826f0a1e7c148d647171e50 HT0.00009984252.5
0x620d578b360a039fea12baa64806b0fbf55e4841d51fb80941154a9f45ee2442Transfer155554352022-05-26 10:20:281 day 14 hrs ago0xab391a042eaeea48467ea7985dc72a1ddbc5c873 IN 0x448a51c8acb1d5d29e826f0a1e7c148d647171e50 HT0.00011181252.5
0xcad17959979a7f25f4c64559176f66a86c3eb90d2ed3c8c8c9ce076725acf317Transfer155460622022-05-26 2:31:491 day 22 hrs ago0xab391a042eaeea48467ea7985dc72a1ddbc5c873 IN 0x448a51c8acb1d5d29e826f0a1e7c148d647171e50 HT0.00015456252.5
0x4277802550d1269fcda601ba40922306ce13f1bec162f1eaf8cf3dc96e644773Transfer155345122022-05-25 16:54:192 days 7 hrs ago0xab391a042eaeea48467ea7985dc72a1ddbc5c873 IN 0x448a51c8acb1d5d29e826f0a1e7c148d647171e50 HT0.00015453252.5
0xeb3d1513181a684f0db49ec1c77fc53400eada5c8ce75a7e24acc7f310e00df2Transfer155306802022-05-25 13:42:432 days 10 hrs ago0x19922df30c32ae10de7deceebbbe41656042dcc4 IN 0x448a51c8acb1d5d29e826f0a1e7c148d647171e50 HT0.000100631252.25
0xd2217adbf81097079abdc7dddf8962fa1b65b19313791b29c3076205de0ea6baTransfer155306272022-05-25 13:40:042 days 10 hrs ago0xab391a042eaeea48467ea7985dc72a1ddbc5c873 IN 0x448a51c8acb1d5d29e826f0a1e7c148d647171e50 HT0.00015453252.5
0xd1d62a73f74767117169244751dfd40d3a9a5e2b718497de1f8522f2d9b12aa6Transfer155304022022-05-25 13:28:492 days 11 hrs ago0x19f406e5d2707e98def12d90f1068484d3cb147e IN 0x448a51c8acb1d5d29e826f0a1e7c148d647171e50 HT0.000089831252.25
0x3bdeb39299768d90cb2753fd52e429a3c077164aa378ea97ef85b6842ab5fcbbTransfer155296542022-05-25 12:51:252 days 11 hrs ago0xab391a042eaeea48467ea7985dc72a1ddbc5c873 IN 0x448a51c8acb1d5d29e826f0a1e7c148d647171e50 HT0.00015456252.5
0x61c3d6a7e5e0ae00b5835f7e101dd3a3568492c1091cd1de885a6fe68628a16eTransfer155289732022-05-25 12:17:222 days 12 hrs ago0xab391a042eaeea48467ea7985dc72a1ddbc5c873 IN 0x448a51c8acb1d5d29e826f0a1e7c148d647171e50 HT0.00015456252.5
0x851d00137e2dfc0f56121b21583eb034d1e9e52166245a1d2790d49871bd374dTransfer155286532022-05-25 12:01:222 days 12 hrs ago0xab391a042eaeea48467ea7985dc72a1ddbc5c873 IN 0x448a51c8acb1d5d29e826f0a1e7c148d647171e50 HT0.00015456252.5
0xa711e693fe10616648fef41f03f749571b7b3f2edefcb6ecdaa608264ffc403bApprove155266982022-05-25 10:23:372 days 14 hrs ago0xfdddfd68c812016a6d2e58c44e4c7e9ea30eb291 IN 0x448a51c8acb1d5d29e826f0a1e7c148d647171e50 HT0.000118122.5
0xc11cb3b75ee1fda42812291414c2f4ef02a8bf6cb86d237abb62777f65c9640dTransfer155253032022-05-25 9:13:522 days 15 hrs ago0xab391a042eaeea48467ea7985dc72a1ddbc5c873 IN 0x448a51c8acb1d5d29e826f0a1e7c148d647171e50 HT0.00015456252.5
0x4bbf29205bc07813ff2aa98f7b697260f925179d54ffcfe24e68e454beb9d70fTransfer155223382022-05-25 6:45:372 days 17 hrs ago0xab391a042eaeea48467ea7985dc72a1ddbc5c873 IN 0x448a51c8acb1d5d29e826f0a1e7c148d647171e50 HT0.00015456252.5
0x3ac73b3aaf11a8d2dc299d64deb6ad0e4a3a2a405ab4ddb470b505d729dbbec1Transfer155208662022-05-25 5:32:012 days 19 hrs ago0xab391a042eaeea48467ea7985dc72a1ddbc5c873 IN 0x448a51c8acb1d5d29e826f0a1e7c148d647171e50 HT0.00015456252.5
0xede68615c39bf2b3be521b0ca32869abfc72395eaaf4227296547a1dfe7d9a37Transfer155177552022-05-25 2:56:282 days 21 hrs ago0xcb61fea926692fce9da2f1196fc39045a0c894b7 IN 0x448a51c8acb1d5d29e826f0a1e7c148d647171e50 HT0.00009978252.5
0x3c1a3eb3ebadefd1138bddb987a5410dd5902f58abcb090190c5d8346063807dTransfer155176952022-05-25 2:53:282 days 21 hrs ago0xab391a042eaeea48467ea7985dc72a1ddbc5c873 IN 0x448a51c8acb1d5d29e826f0a1e7c148d647171e50 HT0.00015453252.5
0x23de0cf1d5b00e15ffe40bef4e5dde254fc6853fb07dc5510a17e8aa4a31ccbeApprove155169252022-05-25 2:14:582 days 22 hrs ago0x3bd58533c8270cc8e5b17f53b9a3d2d8344cebcb IN 0x448a51c8acb1d5d29e826f0a1e7c148d647171e50 HT0.000118122.5
0xaa4e980af7f4ce4310b83c777b70a94f0f69d908e0a2c2b8fe6511e08d84e314Transfer155164392022-05-25 1:50:402 days 22 hrs ago0x772329eb43b0e2126332a1305443efd58f63d7be IN 0x448a51c8acb1d5d29e826f0a1e7c148d647171e50 HT0.00015456252.5
0xc4afcd20ca28575f50e302f2c3e82c29adaa7a79aeb979ea35b414d80a831621Approve155012502022-05-24 13:11:133 days 11 hrs ago0x23eb9cc890ae188e3a29e376bf4beb51b6c8798e IN 0x448a51c8acb1d5d29e826f0a1e7c148d647171e50 HT0.0001063082.25
0x30c7457fae5a1d31a23ec70ff05439ae60633c2543c20567ad26a17f4d2d0ff2Transfer155001152022-05-24 12:14:283 days 12 hrs ago0xab391a042eaeea48467ea7985dc72a1ddbc5c873 IN 0x448a51c8acb1d5d29e826f0a1e7c148d647171e50 HT0.00015456252.5
0xda697da88135ef094ad46df7626e7e23d21ececd29db790d851accf069e75a3bApprove154964512022-05-24 9:11:163 days 15 hrs ago0x78d5f11dc55322fbf53fca2043b5cb291fd3470f IN 0x448a51c8acb1d5d29e826f0a1e7c148d647171e50 HT0.000118122.5
0xe49d55c092477dcf6b5c3f1255a29577a520df688a5eb0c2e17eb6d94f81b7e6Approve154924952022-05-24 5:53:283 days 18 hrs ago0x9e513e153c369bb22b0c62d90b18f34208a0dddd IN 0x448a51c8acb1d5d29e826f0a1e7c148d647171e50 HT0.000118122.5
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
WPtoken

Compiler Version
v0.8.6+commit.11564f7e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at hecoinfo.com on 2022-03-28
*/

// File: node_modules\@openzeppelin\contracts\utils\Context.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

// File: @openzeppelin\contracts\access\Ownable.sol


// OpenZeppelin Contracts v4.4.0 (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: @openzeppelin\contracts\token\ERC20\IERC20.sol


// OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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


// File: @openzeppelin\contracts\token\ERC20\extensions\IERC20Metadata.sol


// OpenZeppelin Contracts v4.4.0 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;


/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

// File: @openzeppelin\contracts\utils\math\SafeMath.sol


// OpenZeppelin Contracts v4.4.0 (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // 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 (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @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) {
        return a + b;
    }

    /**
     * @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 a - b;
    }

    /**
     * @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) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting 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 a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting 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) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * 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) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

// File: contracts\ERC20.sol


pragma solidity >=0.4.22 <0.9.0;





contract ERC20 is IERC20, IERC20Metadata {
    using SafeMath for uint256;

    mapping (address => uint256) internal _balances;

    mapping (address => mapping (address => uint256)) internal _allowances;

    uint256 internal _totalSupply;

    string internal _name;
    string internal _symbol;
    uint8 internal _decimals;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_, uint8 decimals_) {
        _name = name_;
        _symbol = symbol_;
        _decimals = decimals_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return _decimals;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }

    /**
     * @dev See `IERC20.transferFrom`.
     *
     * Emits an `Approval` event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of `ERC20`;
     *
     * Requirements:
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `value`.
     * - the caller must have allowance for `sender`'s tokens of at least
     * `amount`.
     */
    function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, msg.sender, _allowances[sender][msg.sender].sub(amount));
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to `approve` that can be used as a mitigation for
     * problems described in `IERC20.approve`.
     *
     * Emits an `Approval` event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender].add(addedValue));
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to `approve` that can be used as a mitigation for
     * problems described in `IERC20.approve`.
     *
     * Emits an `Approval` event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender].sub(subtractedValue));
        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to `transfer`, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a `Transfer` event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(address sender, address recipient, uint256 amount) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        
        _balances[sender] = _balances[sender].sub(amount);
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a `Transfer` event with `from` set to the zero address.
     *
     * Requirements
     *
     * - `to` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

     /**
     * @dev Destoys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a `Transfer` event with `to` set to the zero address.
     *
     * Requirements
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 value) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _totalSupply = _totalSupply.sub(value);
        _balances[account] = _balances[account].sub(value);
        emit Transfer(account, address(0), value);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens.
     *
     * This is internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an `Approval` event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(address owner, address spender, uint256 value) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = value;
        emit Approval(owner, spender, value);
    }

    /**
     * @dev Destoys `amount` tokens from `account`.`amount` is then deducted
     * from the caller's allowance.
     *
     * See `_burn` and `_approve`.
     */
    function _burnFrom(address account, uint256 amount) internal virtual {
        _burn(account, amount);
        _approve(account, msg.sender, _allowances[account][msg.sender].sub(amount));
    }
}

// File: contracts\McbToken.sol


pragma solidity >=0.4.22 <0.9.0;





contract WPtoken is ERC20, Ownable {
  using SafeMath for uint256;

  // fee address
  address public feeTo;

  // fee status
  bool public feeStatus = true;

  // fee rate, use should div(1000)
  uint256 public feeRate = 100;

  // fee white list
  mapping(address => bool) fromWhiteList;
  mapping(address => bool) toWhiteList;

  mapping(address => bool) fromBlackList;
  mapping(address => bool) toBlackList;
  mapping(address => bool) public pairs;
  // true:fee for inner,false:fee for outer
  bool public feeForWhiteList = true;

  constructor() ERC20("WPtoken", "WP", 18) {
    uint256 initSupply = 200000000 * 10**uint256(decimals());
    _mint(msg.sender, initSupply);
  }

  /**
   * set fee to
   */
  function setFeeTo(address _feeTo) public onlyOwner {
    feeTo = _feeTo;
  }

  /**
   * set fee status
   */
  function setFeeStatus(bool _status) public onlyOwner {
    feeStatus = _status;
  }

  /**
   * set feeForWhiteList
   */
  function setFeeForWhiteList(bool _feeForWhiteList) public onlyOwner {
    feeForWhiteList = _feeForWhiteList;
  }

  /**
   * set fee to
   */
  function setFeeRate(uint256 _feeRate) public onlyOwner {
    feeRate = _feeRate;
  }

  // set white list for address
  function setWhiteList(
    address _addr,
    bool _setForm,
    bool _setTo
  ) public onlyOwner {
    fromWhiteList[_addr] = _setForm;
    toWhiteList[_addr] = _setTo;
  }

    // set black list for address
  function setBlackList(
    address _addr,
    bool _setForm,
    bool _setTo
  ) public onlyOwner {
    fromBlackList[_addr] = _setForm;
    toBlackList[_addr] = _setTo;
  }

  function setPair(address _addr, bool _isPair) public onlyOwner {
    pairs[_addr] = _isPair;
  }

  // whether sender is in from white list
  function isFromWhiteList(address _addr) public view returns (bool) {
    return fromWhiteList[_addr];
  }

  // whether recipient is in to white list
  function isToWhiteList(address _addr) public view returns (bool) {
    return toWhiteList[_addr];
  }

  function isFromBlackList(address _addr) public view returns (bool) {
    return fromBlackList[_addr];
  }

  function isToBlackList(address _addr) public view returns (bool) {
    return toBlackList[_addr];
  }

  /**
   * @dev Destroys `amount` tokens from the caller.
   *
   * See {ERC20-_burn}.
   */
  function burn(uint256 amount) public returns (bool) {
    _burn(msg.sender, amount);
    return true;
  }

  /**
   * @dev Destroys `amount` tokens from `account`, deducting from the caller's
   * allowance.
   *
   * See {ERC20-_burn} and {ERC20-allowance}.
   *
   * Requirements:
   *
   * - the caller must have allowance for ``accounts``'s tokens of at least
   * `amount`.
   */
  function burnFrom(address account, uint256 amount) public returns (bool) {
    _burnFrom(account, amount);
    return true;
  }

  /**
   * @dev Moves tokens `amount` from `sender` to `recipient`.
   *
   * This is internal function is equivalent to `transfer`, and can be used to
   * e.g. implement automatic token fees, slashing mechanisms, etc.
   *
   * Emits a `Transfer` event.
   *
   * Requirements:
   *
   * - `sender` cannot be the zero address.
   * - `recipient` cannot be the zero address.
   * - `sender` must have a balance of at least `amount`.
   */
  function _transfer(
    address sender,
    address recipient,
    uint256 amount
  ) internal virtual override {
    require(!isFromBlackList(sender), "sender error");
    require(!isToBlackList(recipient), "recipient error");
    if (feeStatus && feeRate > 0 && feeTo != address(0) && !pairs[sender] && !pairs[recipient]) {
      _feeTransfer(sender, recipient, amount);
    } else {
      super._transfer(sender, recipient, amount);
    }
  }

  // transfer fee
  function _feeTransfer(
    address sender,
    address recipient,
    uint256 amount
  ) internal {
    require(sender != address(0), "ERC20: transfer from the zero address");
    require(recipient != address(0), "ERC20: transfer to the zero address");
    uint256 fee;
    if (feeForWhiteList) {
      // got fee when in white list
      if (isFromWhiteList(sender) || isToWhiteList(recipient)) {
        fee = amount.mul(feeRate).div(1000);
      }
    } else {
      //got fee for not in white list
      if (!isFromWhiteList(sender) && !isToWhiteList(recipient)) {
        fee = amount.mul(feeRate).div(1000);
      }
    }
    _balances[sender] = _balances[sender].sub(amount);
    if (fee > 0) {
      _balances[feeTo] = _balances[feeTo].add(fee);
      emit Transfer(sender, feeTo, fee);
      _balances[recipient] = _balances[recipient].add(amount.sub(fee));
      emit Transfer(sender, recipient, amount.sub(fee));
    } else {
      _balances[recipient] = _balances[recipient].add(amount);
      emit Transfer(sender, recipient, amount);
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeForWhiteList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeTo","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"isFromBlackList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"isFromWhiteList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"isToBlackList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"isToWhiteList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"pairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_setForm","type":"bool"},{"internalType":"bool","name":"_setTo","type":"bool"}],"name":"setBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_feeForWhiteList","type":"bool"}],"name":"setFeeForWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_feeRate","type":"uint256"}],"name":"setFeeRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"setFeeStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_feeTo","type":"address"}],"name":"setFeeTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_isPair","type":"bool"}],"name":"setPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_setForm","type":"bool"},{"internalType":"bool","name":"_setTo","type":"bool"}],"name":"setWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526001600660146101000a81548160ff02191690831515021790555060646007556001600d60006101000a81548160ff0219169083151502179055503480156200004c57600080fd5b506040518060400160405280600781526020017f5750746f6b656e000000000000000000000000000000000000000000000000008152506040518060400160405280600281526020017f575000000000000000000000000000000000000000000000000000000000000081525060128260039080519060200190620000d392919062000412565b508160049080519060200190620000ec92919062000412565b5080600560006101000a81548160ff021916908360ff1602179055505050506200012b6200011f6200017a60201b60201c565b6200018260201b60201c565b60006200013d6200024860201b60201c565b60ff16600a6200014e919062000602565b630bebc2006200015f91906200073f565b90506200017333826200025f60201b60201c565b5062000874565b600033905090565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900460ff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620002d2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002c990620004fa565b60405180910390fd5b620002ee81600254620003fa60201b620014161790919060201c565b6002819055506200034c816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620003fa60201b620014161790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620003ee91906200051c565b60405180910390a35050565b600081836200040a91906200054a565b905092915050565b8280546200042090620007aa565b90600052602060002090601f01602090048101928262000444576000855562000490565b82601f106200045f57805160ff191683800117855562000490565b8280016001018555821562000490579182015b828111156200048f57825182559160200191906001019062000472565b5b5090506200049f9190620004a3565b5090565b5b80821115620004be576000816000905550600101620004a4565b5090565b6000620004d1601f8362000539565b9150620004de826200084b565b602082019050919050565b620004f481620007a0565b82525050565b600060208201905081810360008301526200051581620004c2565b9050919050565b6000602082019050620005336000830184620004e9565b92915050565b600082825260208201905092915050565b60006200055782620007a0565b91506200056483620007a0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200059c576200059b620007e0565b5b828201905092915050565b6000808291508390505b6001851115620005f957808604811115620005d157620005d0620007e0565b5b6001851615620005e15780820291505b8081029050620005f1856200083e565b9450620005b1565b94509492505050565b60006200060f82620007a0565b91506200061c83620007a0565b92506200064b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000653565b905092915050565b60008262000665576001905062000738565b8162000675576000905062000738565b81600181146200068e57600281146200069957620006cf565b600191505062000738565b60ff841115620006ae57620006ad620007e0565b5b8360020a915084821115620006c857620006c7620007e0565b5b5062000738565b5060208310610133831016604e8410600b8410161715620007095782820a905083811115620007035762000702620007e0565b5b62000738565b620007188484846001620005a7565b92509050818404811115620007325762000731620007e0565b5b81810290505b9392505050565b60006200074c82620007a0565b91506200075983620007a0565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620007955762000794620007e0565b5b828202905092915050565b6000819050919050565b60006002820490506001821680620007c357607f821691505b60208210811415620007da57620007d96200080f565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60008160011c9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b612e1980620008846000396000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c806386a22eff1161010f578063cb20ee86116100a2578063f2fde38b11610071578063f2fde38b146105f5578063f46901ed14610611578063fbb17b5b1461062d578063fe33b3021461065d576101f0565b8063cb20ee861461055b578063dd62ed3e14610579578063ecf2821b146105a9578063ef94c0c6146105c5576101f0565b806395d89b41116100de57806395d89b41146104bf578063978bbdb9146104dd578063a457c2d7146104fb578063a9059cbb1461052b576101f0565b806386a22eff1461044b5780638bffb8d6146104675780638da5cb5b14610483578063958f9735146104a1576101f0565b8063313ce567116101875780634bfffc20116101565780634bfffc20146103b157806370a08231146103e1578063715018a61461041157806379cc67901461041b576101f0565b8063313ce56714610317578063395093511461033557806342966c681461036557806345596e2e14610395576101f0565b80630c012f72116101c35780630c012f721461027d57806318160ddd146102ad57806323b872dd146102cb578063285f2574146102fb576101f0565b8063017e7e58146101f557806305095eff1461021357806306fdde031461022f578063095ea7b31461024d575b600080fd5b6101fd61068d565b60405161020a919061270d565b60405180910390f35b61022d60048036038101906102289190612470565b6106b3565b005b6102376107e2565b6040516102449190612743565b60405180910390f35b610267600480360381019061026291906124c3565b610874565b6040516102749190612728565b60405180910390f35b61029760048036038101906102929190612370565b61088b565b6040516102a49190612728565b60405180910390f35b6102b56108e1565b6040516102c29190612885565b60405180910390f35b6102e560048036038101906102e091906123dd565b6108eb565b6040516102f29190612728565b60405180910390f35b61031560048036038101906103109190612470565b61099c565b005b61031f610acb565b60405161032c91906128a0565b60405180910390f35b61034f600480360381019061034a91906124c3565b610ae2565b60405161035c9190612728565b60405180910390f35b61037f600480360381019061037a9190612530565b610b87565b60405161038c9190612728565b60405180910390f35b6103af60048036038101906103aa9190612530565b610b9c565b005b6103cb60048036038101906103c69190612370565b610c22565b6040516103d89190612728565b60405180910390f35b6103fb60048036038101906103f69190612370565b610c78565b6040516104089190612885565b60405180910390f35b610419610cc0565b005b610435600480360381019061043091906124c3565b610d48565b6040516104429190612728565b60405180910390f35b61046560048036038101906104609190612430565b610d5e565b005b610481600480360381019061047c9190612503565b610e35565b005b61048b610ece565b604051610498919061270d565b60405180910390f35b6104a9610ef8565b6040516104b69190612728565b60405180910390f35b6104c7610f0b565b6040516104d49190612743565b60405180910390f35b6104e5610f9d565b6040516104f29190612885565b60405180910390f35b610515600480360381019061051091906124c3565b610fa3565b6040516105229190612728565b60405180910390f35b610545600480360381019061054091906124c3565b611048565b6040516105529190612728565b60405180910390f35b61056361105f565b6040516105709190612728565b60405180910390f35b610593600480360381019061058e919061239d565b611072565b6040516105a09190612885565b60405180910390f35b6105c360048036038101906105be9190612503565b6110f9565b005b6105df60048036038101906105da9190612370565b611192565b6040516105ec9190612728565b60405180910390f35b61060f600480360381019061060a9190612370565b6111e8565b005b61062b60048036038101906106269190612370565b6112e0565b005b61064760048036038101906106429190612370565b6113a0565b6040516106549190612728565b60405180910390f35b61067760048036038101906106729190612370565b6113f6565b6040516106849190612728565b60405180910390f35b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6106bb61142c565b73ffffffffffffffffffffffffffffffffffffffff166106d9610ece565b73ffffffffffffffffffffffffffffffffffffffff161461072f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072690612805565b60405180910390fd5b81600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505050565b6060600380546107f190612a74565b80601f016020809104026020016040519081016040528092919081815260200182805461081d90612a74565b801561086a5780601f1061083f5761010080835404028352916020019161086a565b820191906000526020600020905b81548152906001019060200180831161084d57829003601f168201915b5050505050905090565b6000610881338484611434565b6001905092915050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600254905090565b60006108f88484846115ff565b610991843361098c85600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117dc90919063ffffffff16565b611434565b600190509392505050565b6109a461142c565b73ffffffffffffffffffffffffffffffffffffffff166109c2610ece565b73ffffffffffffffffffffffffffffffffffffffff1614610a18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0f90612805565b60405180910390fd5b81600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505050565b6000600560009054906101000a900460ff16905090565b6000610b7d3384610b7885600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461141690919063ffffffff16565b611434565b6001905092915050565b6000610b9333836117f2565b60019050919050565b610ba461142c565b73ffffffffffffffffffffffffffffffffffffffff16610bc2610ece565b73ffffffffffffffffffffffffffffffffffffffff1614610c18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0f90612805565b60405180910390fd5b8060078190555050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610cc861142c565b73ffffffffffffffffffffffffffffffffffffffff16610ce6610ece565b73ffffffffffffffffffffffffffffffffffffffff1614610d3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3390612805565b60405180910390fd5b610d46600061197a565b565b6000610d548383611a40565b6001905092915050565b610d6661142c565b73ffffffffffffffffffffffffffffffffffffffff16610d84610ece565b73ffffffffffffffffffffffffffffffffffffffff1614610dda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd190612805565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b610e3d61142c565b73ffffffffffffffffffffffffffffffffffffffff16610e5b610ece565b73ffffffffffffffffffffffffffffffffffffffff1614610eb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea890612805565b60405180910390fd5b80600660146101000a81548160ff02191690831515021790555050565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600660149054906101000a900460ff1681565b606060048054610f1a90612a74565b80601f0160208091040260200160405190810160405280929190818152602001828054610f4690612a74565b8015610f935780601f10610f6857610100808354040283529160200191610f93565b820191906000526020600020905b815481529060010190602001808311610f7657829003601f168201915b5050505050905090565b60075481565b600061103e338461103985600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117dc90919063ffffffff16565b611434565b6001905092915050565b60006110553384846115ff565b6001905092915050565b600d60009054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61110161142c565b73ffffffffffffffffffffffffffffffffffffffff1661111f610ece565b73ffffffffffffffffffffffffffffffffffffffff1614611175576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116c90612805565b60405180910390fd5b80600d60006101000a81548160ff02191690831515021790555050565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6111f061142c565b73ffffffffffffffffffffffffffffffffffffffff1661120e610ece565b73ffffffffffffffffffffffffffffffffffffffff1614611264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125b90612805565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cb906127a5565b60405180910390fd5b6112dd8161197a565b50565b6112e861142c565b73ffffffffffffffffffffffffffffffffffffffff16611306610ece565b73ffffffffffffffffffffffffffffffffffffffff161461135c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135390612805565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600c6020528060005260406000206000915054906101000a900460ff1681565b6000818361142491906128d7565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156114a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149b90612865565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611514576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150b906127c5565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516115f29190612885565b60405180910390a3505050565b61160883611192565b15611648576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163f906127e5565b60405180910390fd5b611651826113a0565b15611691576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168890612785565b60405180910390fd5b600660149054906101000a900460ff1680156116af57506000600754115b801561170a5750600073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b80156117605750600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156117b65750600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156117cb576117c6838383611ae7565b6117d7565b6117d6838383612095565b5b505050565b600081836117ea91906129b8565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611862576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185990612825565b60405180910390fd5b611877816002546117dc90919063ffffffff16565b6002819055506118ce816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117dc90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161196e9190612885565b60405180910390a35050565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611a4a82826117f2565b611ae38233611ade84600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117dc90919063ffffffff16565b611434565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4e90612845565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbe90612765565b60405180910390fd5b6000600d60009054906101000a900460ff1615611c2d57611be78461088b565b80611bf75750611bf683610c22565b5b15611c2857611c256103e8611c176007548561230590919063ffffffff16565b61231b90919063ffffffff16565b90505b611c7b565b611c368461088b565b158015611c495750611c4783610c22565b155b15611c7a57611c776103e8611c696007548561230590919063ffffffff16565b61231b90919063ffffffff16565b90505b5b611ccc826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117dc90919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000811115611f9657611d8a81600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461141690919063ffffffff16565b600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611e6d9190612885565b60405180910390a3611ed8611e8b82846117dc90919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461141690919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef611f7c84866117dc90919063ffffffff16565b604051611f899190612885565b60405180910390a361208f565b611fe7826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461141690919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516120869190612885565b60405180910390a35b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612105576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120fc90612845565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612175576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216c90612765565b60405180910390fd5b6121c6816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117dc90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612259816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461141690919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516122f89190612885565b60405180910390a3505050565b60008183612313919061295e565b905092915050565b60008183612329919061292d565b905092915050565b60008135905061234081612d9e565b92915050565b60008135905061235581612db5565b92915050565b60008135905061236a81612dcc565b92915050565b60006020828403121561238657612385612b33565b5b600061239484828501612331565b91505092915050565b600080604083850312156123b4576123b3612b33565b5b60006123c285828601612331565b92505060206123d385828601612331565b9150509250929050565b6000806000606084860312156123f6576123f5612b33565b5b600061240486828701612331565b935050602061241586828701612331565b92505060406124268682870161235b565b9150509250925092565b6000806040838503121561244757612446612b33565b5b600061245585828601612331565b925050602061246685828601612346565b9150509250929050565b60008060006060848603121561248957612488612b33565b5b600061249786828701612331565b93505060206124a886828701612346565b92505060406124b986828701612346565b9150509250925092565b600080604083850312156124da576124d9612b33565b5b60006124e885828601612331565b92505060206124f98582860161235b565b9150509250929050565b60006020828403121561251957612518612b33565b5b600061252784828501612346565b91505092915050565b60006020828403121561254657612545612b33565b5b60006125548482850161235b565b91505092915050565b612566816129ec565b82525050565b612575816129fe565b82525050565b6000612586826128bb565b61259081856128c6565b93506125a0818560208601612a41565b6125a981612b38565b840191505092915050565b60006125c16023836128c6565b91506125cc82612b49565b604082019050919050565b60006125e4600f836128c6565b91506125ef82612b98565b602082019050919050565b60006126076026836128c6565b915061261282612bc1565b604082019050919050565b600061262a6022836128c6565b915061263582612c10565b604082019050919050565b600061264d600c836128c6565b915061265882612c5f565b602082019050919050565b60006126706020836128c6565b915061267b82612c88565b602082019050919050565b60006126936021836128c6565b915061269e82612cb1565b604082019050919050565b60006126b66025836128c6565b91506126c182612d00565b604082019050919050565b60006126d96024836128c6565b91506126e482612d4f565b604082019050919050565b6126f881612a2a565b82525050565b61270781612a34565b82525050565b6000602082019050612722600083018461255d565b92915050565b600060208201905061273d600083018461256c565b92915050565b6000602082019050818103600083015261275d818461257b565b905092915050565b6000602082019050818103600083015261277e816125b4565b9050919050565b6000602082019050818103600083015261279e816125d7565b9050919050565b600060208201905081810360008301526127be816125fa565b9050919050565b600060208201905081810360008301526127de8161261d565b9050919050565b600060208201905081810360008301526127fe81612640565b9050919050565b6000602082019050818103600083015261281e81612663565b9050919050565b6000602082019050818103600083015261283e81612686565b9050919050565b6000602082019050818103600083015261285e816126a9565b9050919050565b6000602082019050818103600083015261287e816126cc565b9050919050565b600060208201905061289a60008301846126ef565b92915050565b60006020820190506128b560008301846126fe565b92915050565b600081519050919050565b600082825260208201905092915050565b60006128e282612a2a565b91506128ed83612a2a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561292257612921612aa6565b5b828201905092915050565b600061293882612a2a565b915061294383612a2a565b92508261295357612952612ad5565b5b828204905092915050565b600061296982612a2a565b915061297483612a2a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156129ad576129ac612aa6565b5b828202905092915050565b60006129c382612a2a565b91506129ce83612a2a565b9250828210156129e1576129e0612aa6565b5b828203905092915050565b60006129f782612a0a565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015612a5f578082015181840152602081019050612a44565b83811115612a6e576000848401525b50505050565b60006002820490506001821680612a8c57607f821691505b60208210811415612aa057612a9f612b04565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f726563697069656e74206572726f720000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f73656e646572206572726f720000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b612da7816129ec565b8114612db257600080fd5b50565b612dbe816129fe565b8114612dc957600080fd5b50565b612dd581612a2a565b8114612de057600080fd5b5056fea2646970667358221220aabefef30e3e28ac9eb653d86f17dd3c84960ca1dd3b04b1b4ccff02c185e1d964736f6c63430008060033

Deployed ByteCode Sourcemap

22964:4979:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23055:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24239:180;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15099:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17271:167;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24793:107;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16226:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17909:273;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24460:180;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16061:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18591:214;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25379:108;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24114:86;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24950:103;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16397:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2650:103;;;:::i;:::-;;25782:130;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24646:98;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23831:85;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1999:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23099:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15318:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23171:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19308:224;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16737:173;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23488:34;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16973:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23962:115;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25059:107;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2908:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23712:78;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25172:103;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23397:37;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23055:20;;;;;;;;;;;;;:::o;24239:180::-;2230:12;:10;:12::i;:::-;2219:23;;:7;:5;:7::i;:::-;:23;;;2211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24371:8:::1;24348:13;:20;24362:5;24348:20;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;24407:6;24386:11;:18;24398:5;24386:18;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;24239:180:::0;;;:::o;15099:100::-;15153:13;15186:5;15179:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15099:100;:::o;17271:167::-;17354:4;17371:37;17380:10;17392:7;17401:6;17371:8;:37::i;:::-;17426:4;17419:11;;17271:167;;;;:::o;24793:107::-;24854:4;24874:13;:20;24888:5;24874:20;;;;;;;;;;;;;;;;;;;;;;;;;24867:27;;24793:107;;;:::o;16226:108::-;16287:7;16314:12;;16307:19;;16226:108;:::o;17909:273::-;18015:4;18032:36;18042:6;18050:9;18061:6;18032:9;:36::i;:::-;18079:73;18088:6;18096:10;18108:43;18144:6;18108:11;:19;18120:6;18108:19;;;;;;;;;;;;;;;:31;18128:10;18108:31;;;;;;;;;;;;;;;;:35;;:43;;;;:::i;:::-;18079:8;:73::i;:::-;18170:4;18163:11;;17909:273;;;;;:::o;24460:180::-;2230:12;:10;:12::i;:::-;2219:23;;:7;:5;:7::i;:::-;:23;;;2211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24592:8:::1;24569:13;:20;24583:5;24569:20;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;24628:6;24607:11;:18;24619:5;24607:18;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;24460:180:::0;;;:::o;16061:100::-;16119:5;16144:9;;;;;;;;;;;16137:16;;16061:100;:::o;18591:214::-;18679:4;18696:79;18705:10;18717:7;18726:48;18763:10;18726:11;:23;18738:10;18726:23;;;;;;;;;;;;;;;:32;18750:7;18726:32;;;;;;;;;;;;;;;;:36;;:48;;;;:::i;:::-;18696:8;:79::i;:::-;18793:4;18786:11;;18591:214;;;;:::o;25379:108::-;25425:4;25438:25;25444:10;25456:6;25438:5;:25::i;:::-;25477:4;25470:11;;25379:108;;;:::o;24114:86::-;2230:12;:10;:12::i;:::-;2219:23;;:7;:5;:7::i;:::-;:23;;;2211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24186:8:::1;24176:7;:18;;;;24114:86:::0;:::o;24950:103::-;25009:4;25029:11;:18;25041:5;25029:18;;;;;;;;;;;;;;;;;;;;;;;;;25022:25;;24950:103;;;:::o;16397:127::-;16471:7;16498:9;:18;16508:7;16498:18;;;;;;;;;;;;;;;;16491:25;;16397:127;;;:::o;2650:103::-;2230:12;:10;:12::i;:::-;2219:23;;:7;:5;:7::i;:::-;:23;;;2211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2715:30:::1;2742:1;2715:18;:30::i;:::-;2650:103::o:0;25782:130::-;25849:4;25862:26;25872:7;25881:6;25862:9;:26::i;:::-;25902:4;25895:11;;25782:130;;;;:::o;24646:98::-;2230:12;:10;:12::i;:::-;2219:23;;:7;:5;:7::i;:::-;:23;;;2211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24731:7:::1;24716:5;:12;24722:5;24716:12;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;24646:98:::0;;:::o;23831:85::-;2230:12;:10;:12::i;:::-;2219:23;;:7;:5;:7::i;:::-;:23;;;2211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23903:7:::1;23891:9;;:19;;;;;;;;;;;;;;;;;;23831:85:::0;:::o;1999:87::-;2045:7;2072:6;;;;;;;;;;;2065:13;;1999:87;:::o;23099:28::-;;;;;;;;;;;;;:::o;15318:104::-;15374:13;15407:7;15400:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15318:104;:::o;23171:28::-;;;;:::o;19308:224::-;19401:4;19418:84;19427:10;19439:7;19448:53;19485:15;19448:11;:23;19460:10;19448:23;;;;;;;;;;;;;;;:32;19472:7;19448:32;;;;;;;;;;;;;;;;:36;;:53;;;;:::i;:::-;19418:8;:84::i;:::-;19520:4;19513:11;;19308:224;;;;:::o;16737:173::-;16823:4;16840:40;16850:10;16862:9;16873:6;16840:9;:40::i;:::-;16898:4;16891:11;;16737:173;;;;:::o;23488:34::-;;;;;;;;;;;;;:::o;16973:151::-;17062:7;17089:11;:18;17101:5;17089:18;;;;;;;;;;;;;;;:27;17108:7;17089:27;;;;;;;;;;;;;;;;17082:34;;16973:151;;;;:::o;23962:115::-;2230:12;:10;:12::i;:::-;2219:23;;:7;:5;:7::i;:::-;:23;;;2211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24055:16:::1;24037:15;;:34;;;;;;;;;;;;;;;;;;23962:115:::0;:::o;25059:107::-;25120:4;25140:13;:20;25154:5;25140:20;;;;;;;;;;;;;;;;;;;;;;;;;25133:27;;25059:107;;;:::o;2908:201::-;2230:12;:10;:12::i;:::-;2219:23;;:7;:5;:7::i;:::-;:23;;;2211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3017:1:::1;2997:22;;:8;:22;;;;2989:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3073:28;3092:8;3073:18;:28::i;:::-;2908:201:::0;:::o;23712:78::-;2230:12;:10;:12::i;:::-;2219:23;;:7;:5;:7::i;:::-;:23;;;2211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23778:6:::1;23770:5;;:14;;;;;;;;;;;;;;;;;;23712:78:::0;:::o;25172:103::-;25231:4;25251:11;:18;25263:5;25251:18;;;;;;;;;;;;;;;;;;;;;;;;;25244:25;;25172:103;;;:::o;23397:37::-;;;;;;;;;;;;;;;;;;;;;;:::o;9962:98::-;10020:7;10051:1;10047;:5;;;;:::i;:::-;10040:12;;9962:98;;;;:::o;723:::-;776:7;803:10;796:17;;723:98;:::o;22152:343::-;22270:1;22253:19;;:5;:19;;;;22245:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22351:1;22332:21;;:7;:21;;;;22324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22435:5;22405:11;:18;22417:5;22405:18;;;;;;;;;;;;;;;:27;22424:7;22405:27;;;;;;;;;;;;;;;:35;;;;22472:7;22456:31;;22465:5;22456:31;;;22481:5;22456:31;;;;;;:::i;:::-;;;;;;;;22152:343;;;:::o;26372:457::-;26504:23;26520:6;26504:15;:23::i;:::-;26503:24;26495:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;26560:24;26574:9;26560:13;:24::i;:::-;26559:25;26551:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;26615:9;;;;;;;;;;;:24;;;;;26638:1;26628:7;;:11;26615:24;:47;;;;;26660:1;26643:19;;:5;;;;;;;;;;;:19;;;;26615:47;:65;;;;;26667:5;:13;26673:6;26667:13;;;;;;;;;;;;;;;;;;;;;;;;;26666:14;26615:65;:86;;;;;26685:5;:16;26691:9;26685:16;;;;;;;;;;;;;;;;;;;;;;;;;26684:17;26615:86;26611:213;;;26712:39;26725:6;26733:9;26744:6;26712:12;:39::i;:::-;26611:213;;;26774:42;26790:6;26798:9;26809:6;26774:15;:42::i;:::-;26611:213;26372:457;;;:::o;10343:98::-;10401:7;10432:1;10428;:5;;;;:::i;:::-;10421:12;;10343:98;;;;:::o;21398:314::-;21500:1;21481:21;;:7;:21;;;;21473:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21568:23;21585:5;21568:12;;:16;;:23;;;;:::i;:::-;21553:12;:38;;;;21623:29;21646:5;21623:9;:18;21633:7;21623:18;;;;;;;;;;;;;;;;:22;;:29;;;;:::i;:::-;21602:9;:18;21612:7;21602:18;;;;;;;;;;;;;;;:50;;;;21694:1;21668:36;;21677:7;21668:36;;;21698:5;21668:36;;;;;;:::i;:::-;;;;;;;;21398:314;;:::o;3269:191::-;3343:16;3362:6;;;;;;;;;;;3343:25;;3388:8;3379:6;;:17;;;;;;;;;;;;;;;;;;3443:8;3412:40;;3433:8;3412:40;;;;;;;;;;;;3332:128;3269:191;:::o;22680:196::-;22760:22;22766:7;22775:6;22760:5;:22::i;:::-;22793:75;22802:7;22811:10;22823:44;22860:6;22823:11;:20;22835:7;22823:20;;;;;;;;;;;;;;;:32;22844:10;22823:32;;;;;;;;;;;;;;;;:36;;:44;;;;:::i;:::-;22793:8;:75::i;:::-;22680:196;;:::o;26854:1086::-;26989:1;26971:20;;:6;:20;;;;26963:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;27069:1;27048:23;;:9;:23;;;;27040:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;27118:11;27140:15;;;;;;;;;;;27136:363;;;27207:23;27223:6;27207:15;:23::i;:::-;:51;;;;27234:24;27248:9;27234:13;:24::i;:::-;27207:51;27203:113;;;27277:29;27301:4;27277:19;27288:7;;27277:6;:10;;:19;;;;:::i;:::-;:23;;:29;;;;:::i;:::-;27271:35;;27203:113;27136:363;;;27382:23;27398:6;27382:15;:23::i;:::-;27381:24;:53;;;;;27410:24;27424:9;27410:13;:24::i;:::-;27409:25;27381:53;27377:115;;;27453:29;27477:4;27453:19;27464:7;;27453:6;:10;;:19;;;;:::i;:::-;:23;;:29;;;;:::i;:::-;27447:35;;27377:115;27136:363;27525:29;27547:6;27525:9;:17;27535:6;27525:17;;;;;;;;;;;;;;;;:21;;:29;;;;:::i;:::-;27505:9;:17;27515:6;27505:17;;;;;;;;;;;;;;;:49;;;;27571:1;27565:3;:7;27561:374;;;27602:25;27623:3;27602:9;:16;27612:5;;;;;;;;;;;27602:16;;;;;;;;;;;;;;;;:20;;:25;;;;:::i;:::-;27583:9;:16;27593:5;;;;;;;;;;;27583:16;;;;;;;;;;;;;;;:44;;;;27658:5;;;;;;;;;;;27641:28;;27650:6;27641:28;;;27665:3;27641:28;;;;;;:::i;:::-;;;;;;;;27701:41;27726:15;27737:3;27726:6;:10;;:15;;;;:::i;:::-;27701:9;:20;27711:9;27701:20;;;;;;;;;;;;;;;;:24;;:41;;;;:::i;:::-;27678:9;:20;27688:9;27678:20;;;;;;;;;;;;;;;:64;;;;27773:9;27756:44;;27765:6;27756:44;;;27784:15;27795:3;27784:6;:10;;:15;;;;:::i;:::-;27756:44;;;;;;:::i;:::-;;;;;;;;27561:374;;;27846:32;27871:6;27846:9;:20;27856:9;27846:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;27823:9;:20;27833:9;27823:20;;;;;;;;;;;;;;;:55;;;;27909:9;27892:35;;27901:6;27892:35;;;27920:6;27892:35;;;;;;:::i;:::-;;;;;;;;27561:374;26956:984;26854:1086;;;:::o;20022:447::-;20146:1;20128:20;;:6;:20;;;;20120:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;20230:1;20209:23;;:9;:23;;;;20201:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;20315:29;20337:6;20315:9;:17;20325:6;20315:17;;;;;;;;;;;;;;;;:21;;:29;;;;:::i;:::-;20295:9;:17;20305:6;20295:17;;;;;;;;;;;;;;;:49;;;;20378:32;20403:6;20378:9;:20;20388:9;20378:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;20355:9;:20;20365:9;20355:20;;;;;;;;;;;;;;;:55;;;;20443:9;20426:35;;20435:6;20426:35;;;20454:6;20426:35;;;;;;:::i;:::-;;;;;;;;20022:447;;;:::o;10700:98::-;10758:7;10789:1;10785;:5;;;;:::i;:::-;10778:12;;10700:98;;;;:::o;11099:::-;11157:7;11188:1;11184;:5;;;;:::i;:::-;11177:12;;11099:98;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:133::-;195:5;233:6;220:20;211:29;;249:30;273:5;249:30;:::i;:::-;201:84;;;;:::o;291:139::-;337:5;375:6;362:20;353:29;;391:33;418:5;391:33;:::i;:::-;343:87;;;;:::o;436:329::-;495:6;544:2;532:9;523:7;519:23;515:32;512:2;;;550:79;;:::i;:::-;512:2;670:1;695:53;740:7;731:6;720:9;716:22;695:53;:::i;:::-;685:63;;641:117;502:263;;;;:::o;771:474::-;839:6;847;896:2;884:9;875:7;871:23;867:32;864:2;;;902:79;;:::i;:::-;864:2;1022:1;1047:53;1092:7;1083:6;1072:9;1068:22;1047:53;:::i;:::-;1037:63;;993:117;1149:2;1175:53;1220:7;1211:6;1200:9;1196:22;1175:53;:::i;:::-;1165:63;;1120:118;854:391;;;;;:::o;1251:619::-;1328:6;1336;1344;1393:2;1381:9;1372:7;1368:23;1364:32;1361:2;;;1399:79;;:::i;:::-;1361:2;1519:1;1544:53;1589:7;1580:6;1569:9;1565:22;1544:53;:::i;:::-;1534:63;;1490:117;1646:2;1672:53;1717:7;1708:6;1697:9;1693:22;1672:53;:::i;:::-;1662:63;;1617:118;1774:2;1800:53;1845:7;1836:6;1825:9;1821:22;1800:53;:::i;:::-;1790:63;;1745:118;1351:519;;;;;:::o;1876:468::-;1941:6;1949;1998:2;1986:9;1977:7;1973:23;1969:32;1966:2;;;2004:79;;:::i;:::-;1966:2;2124:1;2149:53;2194:7;2185:6;2174:9;2170:22;2149:53;:::i;:::-;2139:63;;2095:117;2251:2;2277:50;2319:7;2310:6;2299:9;2295:22;2277:50;:::i;:::-;2267:60;;2222:115;1956:388;;;;;:::o;2350:607::-;2421:6;2429;2437;2486:2;2474:9;2465:7;2461:23;2457:32;2454:2;;;2492:79;;:::i;:::-;2454:2;2612:1;2637:53;2682:7;2673:6;2662:9;2658:22;2637:53;:::i;:::-;2627:63;;2583:117;2739:2;2765:50;2807:7;2798:6;2787:9;2783:22;2765:50;:::i;:::-;2755:60;;2710:115;2864:2;2890:50;2932:7;2923:6;2912:9;2908:22;2890:50;:::i;:::-;2880:60;;2835:115;2444:513;;;;;:::o;2963:474::-;3031:6;3039;3088:2;3076:9;3067:7;3063:23;3059:32;3056:2;;;3094:79;;:::i;:::-;3056:2;3214:1;3239:53;3284:7;3275:6;3264:9;3260:22;3239:53;:::i;:::-;3229:63;;3185:117;3341:2;3367:53;3412:7;3403:6;3392:9;3388:22;3367:53;:::i;:::-;3357:63;;3312:118;3046:391;;;;;:::o;3443:323::-;3499:6;3548:2;3536:9;3527:7;3523:23;3519:32;3516:2;;;3554:79;;:::i;:::-;3516:2;3674:1;3699:50;3741:7;3732:6;3721:9;3717:22;3699:50;:::i;:::-;3689:60;;3645:114;3506:260;;;;:::o;3772:329::-;3831:6;3880:2;3868:9;3859:7;3855:23;3851:32;3848:2;;;3886:79;;:::i;:::-;3848:2;4006:1;4031:53;4076:7;4067:6;4056:9;4052:22;4031:53;:::i;:::-;4021:63;;3977:117;3838:263;;;;:::o;4107:118::-;4194:24;4212:5;4194:24;:::i;:::-;4189:3;4182:37;4172:53;;:::o;4231:109::-;4312:21;4327:5;4312:21;:::i;:::-;4307:3;4300:34;4290:50;;:::o;4346:364::-;4434:3;4462:39;4495:5;4462:39;:::i;:::-;4517:71;4581:6;4576:3;4517:71;:::i;:::-;4510:78;;4597:52;4642:6;4637:3;4630:4;4623:5;4619:16;4597:52;:::i;:::-;4674:29;4696:6;4674:29;:::i;:::-;4669:3;4665:39;4658:46;;4438:272;;;;;:::o;4716:366::-;4858:3;4879:67;4943:2;4938:3;4879:67;:::i;:::-;4872:74;;4955:93;5044:3;4955:93;:::i;:::-;5073:2;5068:3;5064:12;5057:19;;4862:220;;;:::o;5088:366::-;5230:3;5251:67;5315:2;5310:3;5251:67;:::i;:::-;5244:74;;5327:93;5416:3;5327:93;:::i;:::-;5445:2;5440:3;5436:12;5429:19;;5234:220;;;:::o;5460:366::-;5602:3;5623:67;5687:2;5682:3;5623:67;:::i;:::-;5616:74;;5699:93;5788:3;5699:93;:::i;:::-;5817:2;5812:3;5808:12;5801:19;;5606:220;;;:::o;5832:366::-;5974:3;5995:67;6059:2;6054:3;5995:67;:::i;:::-;5988:74;;6071:93;6160:3;6071:93;:::i;:::-;6189:2;6184:3;6180:12;6173:19;;5978:220;;;:::o;6204:366::-;6346:3;6367:67;6431:2;6426:3;6367:67;:::i;:::-;6360:74;;6443:93;6532:3;6443:93;:::i;:::-;6561:2;6556:3;6552:12;6545:19;;6350:220;;;:::o;6576:366::-;6718:3;6739:67;6803:2;6798:3;6739:67;:::i;:::-;6732:74;;6815:93;6904:3;6815:93;:::i;:::-;6933:2;6928:3;6924:12;6917:19;;6722:220;;;:::o;6948:366::-;7090:3;7111:67;7175:2;7170:3;7111:67;:::i;:::-;7104:74;;7187:93;7276:3;7187:93;:::i;:::-;7305:2;7300:3;7296:12;7289:19;;7094:220;;;:::o;7320:366::-;7462:3;7483:67;7547:2;7542:3;7483:67;:::i;:::-;7476:74;;7559:93;7648:3;7559:93;:::i;:::-;7677:2;7672:3;7668:12;7661:19;;7466:220;;;:::o;7692:366::-;7834:3;7855:67;7919:2;7914:3;7855:67;:::i;:::-;7848:74;;7931:93;8020:3;7931:93;:::i;:::-;8049:2;8044:3;8040:12;8033:19;;7838:220;;;:::o;8064:118::-;8151:24;8169:5;8151:24;:::i;:::-;8146:3;8139:37;8129:53;;:::o;8188:112::-;8271:22;8287:5;8271:22;:::i;:::-;8266:3;8259:35;8249:51;;:::o;8306:222::-;8399:4;8437:2;8426:9;8422:18;8414:26;;8450:71;8518:1;8507:9;8503:17;8494:6;8450:71;:::i;:::-;8404:124;;;;:::o;8534:210::-;8621:4;8659:2;8648:9;8644:18;8636:26;;8672:65;8734:1;8723:9;8719:17;8710:6;8672:65;:::i;:::-;8626:118;;;;:::o;8750:313::-;8863:4;8901:2;8890:9;8886:18;8878:26;;8950:9;8944:4;8940:20;8936:1;8925:9;8921:17;8914:47;8978:78;9051:4;9042:6;8978:78;:::i;:::-;8970:86;;8868:195;;;;:::o;9069:419::-;9235:4;9273:2;9262:9;9258:18;9250:26;;9322:9;9316:4;9312:20;9308:1;9297:9;9293:17;9286:47;9350:131;9476:4;9350:131;:::i;:::-;9342:139;;9240:248;;;:::o;9494:419::-;9660:4;9698:2;9687:9;9683:18;9675:26;;9747:9;9741:4;9737:20;9733:1;9722:9;9718:17;9711:47;9775:131;9901:4;9775:131;:::i;:::-;9767:139;;9665:248;;;:::o;9919:419::-;10085:4;10123:2;10112:9;10108:18;10100:26;;10172:9;10166:4;10162:20;10158:1;10147:9;10143:17;10136:47;10200:131;10326:4;10200:131;:::i;:::-;10192:139;;10090:248;;;:::o;10344:419::-;10510:4;10548:2;10537:9;10533:18;10525:26;;10597:9;10591:4;10587:20;10583:1;10572:9;10568:17;10561:47;10625:131;10751:4;10625:131;:::i;:::-;10617:139;;10515:248;;;:::o;10769:419::-;10935:4;10973:2;10962:9;10958:18;10950:26;;11022:9;11016:4;11012:20;11008:1;10997:9;10993:17;10986:47;11050:131;11176:4;11050:131;:::i;:::-;11042:139;;10940:248;;;:::o;11194:419::-;11360:4;11398:2;11387:9;11383:18;11375:26;;11447:9;11441:4;11437:20;11433:1;11422:9;11418:17;11411:47;11475:131;11601:4;11475:131;:::i;:::-;11467:139;;11365:248;;;:::o;11619:419::-;11785:4;11823:2;11812:9;11808:18;11800:26;;11872:9;11866:4;11862:20;11858:1;11847:9;11843:17;11836:47;11900:131;12026:4;11900:131;:::i;:::-;11892:139;;11790:248;;;:::o;12044:419::-;12210:4;12248:2;12237:9;12233:18;12225:26;;12297:9;12291:4;12287:20;12283:1;12272:9;12268:17;12261:47;12325:131;12451:4;12325:131;:::i;:::-;12317:139;;12215:248;;;:::o;12469:419::-;12635:4;12673:2;12662:9;12658:18;12650:26;;12722:9;12716:4;12712:20;12708:1;12697:9;12693:17;12686:47;12750:131;12876:4;12750:131;:::i;:::-;12742:139;;12640:248;;;:::o;12894:222::-;12987:4;13025:2;13014:9;13010:18;13002:26;;13038:71;13106:1;13095:9;13091:17;13082:6;13038:71;:::i;:::-;12992:124;;;;:::o;13122:214::-;13211:4;13249:2;13238:9;13234:18;13226:26;;13262:67;13326:1;13315:9;13311:17;13302:6;13262:67;:::i;:::-;13216:120;;;;:::o;13423:99::-;13475:6;13509:5;13503:12;13493:22;;13482:40;;;:::o;13528:169::-;13612:11;13646:6;13641:3;13634:19;13686:4;13681:3;13677:14;13662:29;;13624:73;;;;:::o;13703:305::-;13743:3;13762:20;13780:1;13762:20;:::i;:::-;13757:25;;13796:20;13814:1;13796:20;:::i;:::-;13791:25;;13950:1;13882:66;13878:74;13875:1;13872:81;13869:2;;;13956:18;;:::i;:::-;13869:2;14000:1;13997;13993:9;13986:16;;13747:261;;;;:::o;14014:185::-;14054:1;14071:20;14089:1;14071:20;:::i;:::-;14066:25;;14105:20;14123:1;14105:20;:::i;:::-;14100:25;;14144:1;14134:2;;14149:18;;:::i;:::-;14134:2;14191:1;14188;14184:9;14179:14;;14056:143;;;;:::o;14205:348::-;14245:7;14268:20;14286:1;14268:20;:::i;:::-;14263:25;;14302:20;14320:1;14302:20;:::i;:::-;14297:25;;14490:1;14422:66;14418:74;14415:1;14412:81;14407:1;14400:9;14393:17;14389:105;14386:2;;;14497:18;;:::i;:::-;14386:2;14545:1;14542;14538:9;14527:20;;14253:300;;;;:::o;14559:191::-;14599:4;14619:20;14637:1;14619:20;:::i;:::-;14614:25;;14653:20;14671:1;14653:20;:::i;:::-;14648:25;;14692:1;14689;14686:8;14683:2;;;14697:18;;:::i;:::-;14683:2;14742:1;14739;14735:9;14727:17;;14604:146;;;;:::o;14756:96::-;14793:7;14822:24;14840:5;14822:24;:::i;:::-;14811:35;;14801:51;;;:::o;14858:90::-;14892:7;14935:5;14928:13;14921:21;14910:32;;14900:48;;;:::o;14954:126::-;14991:7;15031:42;15024:5;15020:54;15009:65;;14999:81;;;:::o;15086:77::-;15123:7;15152:5;15141:16;;15131:32;;;:::o;15169:86::-;15204:7;15244:4;15237:5;15233:16;15222:27;;15212:43;;;:::o;15261:307::-;15329:1;15339:113;15353:6;15350:1;15347:13;15339:113;;;15438:1;15433:3;15429:11;15423:18;15419:1;15414:3;15410:11;15403:39;15375:2;15372:1;15368:10;15363:15;;15339:113;;;15470:6;15467:1;15464:13;15461:2;;;15550:1;15541:6;15536:3;15532:16;15525:27;15461:2;15310:258;;;;:::o;15574:320::-;15618:6;15655:1;15649:4;15645:12;15635:22;;15702:1;15696:4;15692:12;15723:18;15713:2;;15779:4;15771:6;15767:17;15757:27;;15713:2;15841;15833:6;15830:14;15810:18;15807:38;15804:2;;;15860:18;;:::i;:::-;15804:2;15625:269;;;;:::o;15900:180::-;15948:77;15945:1;15938:88;16045:4;16042:1;16035:15;16069:4;16066:1;16059:15;16086:180;16134:77;16131:1;16124:88;16231:4;16228:1;16221:15;16255:4;16252:1;16245:15;16272:180;16320:77;16317:1;16310:88;16417:4;16414:1;16407:15;16441:4;16438:1;16431:15;16581:117;16690:1;16687;16680:12;16704:102;16745:6;16796:2;16792:7;16787:2;16780:5;16776:14;16772:28;16762:38;;16752:54;;;:::o;16812:222::-;16952:34;16948:1;16940:6;16936:14;16929:58;17021:5;17016:2;17008:6;17004:15;16997:30;16918:116;:::o;17040:165::-;17180:17;17176:1;17168:6;17164:14;17157:41;17146:59;:::o;17211:225::-;17351:34;17347:1;17339:6;17335:14;17328:58;17420:8;17415:2;17407:6;17403:15;17396:33;17317:119;:::o;17442:221::-;17582:34;17578:1;17570:6;17566:14;17559:58;17651:4;17646:2;17638:6;17634:15;17627:29;17548:115;:::o;17669:162::-;17809:14;17805:1;17797:6;17793:14;17786:38;17775:56;:::o;17837:182::-;17977:34;17973:1;17965:6;17961:14;17954:58;17943:76;:::o;18025:220::-;18165:34;18161:1;18153:6;18149:14;18142:58;18234:3;18229:2;18221:6;18217:15;18210:28;18131:114;:::o;18251:224::-;18391:34;18387:1;18379:6;18375:14;18368:58;18460:7;18455:2;18447:6;18443:15;18436:32;18357:118;:::o;18481:223::-;18621:34;18617:1;18609:6;18605:14;18598:58;18690:6;18685:2;18677:6;18673:15;18666:31;18587:117;:::o;18710:122::-;18783:24;18801:5;18783:24;:::i;:::-;18776:5;18773:35;18763:2;;18822:1;18819;18812:12;18763:2;18753:79;:::o;18838:116::-;18908:21;18923:5;18908:21;:::i;:::-;18901:5;18898:32;18888:2;;18944:1;18941;18934:12;18888:2;18878:76;:::o;18960:122::-;19033:24;19051:5;19033:24;:::i;:::-;19026:5;19023:35;19013:2;;19072:1;19069;19062:12;19013:2;19003:79;:::o

Swarm Source

ipfs://aabefef30e3e28ac9eb653d86f17dd3c84960ca1dd3b04b1b4ccff02c185e1d9
Block Transaction Gas Used Reward
Age Block Fee Address Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading