ETH Price: $3,578.86 (-0.92%)

Token

ERC-20: Wyverns Breath ($BREATH)
 

Overview

Max Total Supply

25,215 $BREATH

Holders

166

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
35 $BREATH

Value
$0.00
0xf2020193d2c978cdf0e694682e7f3ef89d06dc0a
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
WYVERNSBREATH

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

pragma solidity 0.8.0;

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

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

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

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

    /**
     * @dev Returns the bep token owner.
   */
    function getOwner() external view returns (address);

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

/*
 * @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.
 */
contract Context {
    // Empty internal constructor, to prevent people from mistakenly deploying
    // an instance of this contract, which should be used via inheritance.
    constructor ()  {}

    function _msgSender() internal view returns (address payable) {
        return payable (msg.sender);
    }

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

/**
 * @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) {
        // Solidity only automatically asserts when dividing by 0
        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;
    }
}

/**
 * @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.
 */
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 ()  {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
   */
    function owner() public view 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 Transfers ownership of the contract to a new account (`newOwner`).
   * Can only be called by the current owner.
   */
    function transferOwnership(address newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
   */
    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash =
        0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            codehash := extcodehash(account)
        }
        return (codehash != accountHash && codehash != 0x0);
    }

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

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success,) = recipient.call{value : amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }

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

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

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

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

    function _functionCallWithValue(
        address target,
        bytes memory data,
        uint256 weiValue,
        string memory errorMessage
    ) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) =
        target.call{value : weiValue}(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

contract WYVERNSBREATH is Context, IERC20, Ownable {
    using Address for address;
    using SafeMath for uint256;

    mapping(uint => uint) public lastUpdate;
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(uint => uint) public wyvernTypeToEarningsPerDay;
    mapping(uint => uint) public wyvernTokenToWyvernType;
    uint deployedTime = 1637427600; //epoch time deployed at 20th Nov 2021 ETC

    event mintOverflown (uint amountGiven, uint notgiven, string message);

    //todo : write a setter for maxSupply
    uint private maxSupply = 10000000 * (10 ** 18); // 10 million Breath tokens
    uint256 private _totalSupply;
    uint8 public _decimals;
    string public _symbol;
    string public _name;
    IERC721 private nft;
    uint public START;

    constructor()  {
        _name = "Wyverns Breath";
        _symbol = "$BREATH";
        _decimals = 18;
        _totalSupply = 0;

        nft = IERC721(0x01fE2358CC2CA3379cb5eD11442e85881997F22C);

        // 1 means Genesis
        wyvernTypeToEarningsPerDay[1] = 5;
        // 2 means Ascension
        wyvernTypeToEarningsPerDay[2] = 25;

        START = block.timestamp;
    }
    
    function setWyvernTokenToWyvernType(uint _fromId, uint _tillId, uint wyvernType) external onlyOwner{
        for (uint i = _fromId; i <= _tillId; i++) {
            wyvernTokenToWyvernType[i] = wyvernType;
            //  code 1  means Genesis
            //  code 2  means Ascension
        }
    }
    
    /**
     * @dev Returns the bep token owner.
   */
    function getOwner() external override view returns (address) {
        return owner();
    }

    /**
     * @dev Returns the token decimals.
   */
    function decimals() external override view returns (uint8) {
        return _decimals;
    }

    /**
     * @dev Returns the token symbol.
   */
    function symbol() external override view returns (string memory) {
        return _symbol;
    }

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

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

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

    //private setter
    function setWyvernTypeCodeAndEarnings(uint wyvernTypeCode, uint _amount) external onlyOwner {
        wyvernTypeToEarningsPerDay[wyvernTypeCode] = _amount;
    }
    //private setter
    function addTokenWyvernType(uint[] memory tokenIds, uint[] memory wyvernTypeCodes) external onlyOwner {
        require(tokenIds.length == wyvernTypeCodes.length, "Inputs provided with different no of values, should be EQUAL.");
        for (uint i = 0; i < tokenIds.length; i++) {
            wyvernTokenToWyvernType[tokenIds[i]] = wyvernTypeCodes[i];
        }
    }

    function setMaxSupply(uint newMaxSupply) external onlyOwner{
        maxSupply = newMaxSupply;
    }
    // public getter//trait1=>25
    function showWyvernTypeEarningsPerDay(uint wyvernTypeCode) external view returns (uint) {
        return wyvernTypeToEarningsPerDay[wyvernTypeCode];
    }

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

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

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

    /**
     * @dev See {ERC20-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 `amount`.
   * - the caller must have allowance for `sender`'s tokens of at least
   * `amount`.
   */
    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        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 {ERC20-approve}.
   *
   * Emits an {Approval} event indicating the updated allowance.
   *
   * Requirements:
   *
   * - `spender` cannot be the zero address.
   */
    function increaseAllowance(address spender, uint256 addedValue) public returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][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 {ERC20-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 returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    /**
     * @dev Burn `amount` tokens and decreasing the total supply.
   */
    function burn(uint256 amount) public returns (bool) {
        _burn(_msgSender(), 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 {
        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, "ERC20: transfer amount exceeds balance");
        _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 {
        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 Destroys `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 amount) internal {
        require(account != address(0), "ERC20: burn from the zero address");

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

    /**
     * @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 aumatic 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 amount) internal {
        require(owner != address(0), "ERC20: approve fromm the zero address");
        require(spender != address(0), "ERC20: approvee to the zero address");

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

    /**
     * @dev Destroys `amount` tokens from `account`.`amount` is then deducted
   * from the caller's allowance.
   *
   * See {_burn} and {_approve}.
   */
    function _burnFrom(address account, uint256 amount) internal {
        _burn(account, amount);
        _approve(account, _msgSender(), _allowances[account][_msgSender()].sub(amount, "ERC20: burn amount exceeds allowance"));
    }

    function claimToken(uint[] memory tokenIds) external {
        uint amount = 0;
        uint today_count = block.timestamp / (5 * 60);
        for (uint i = 0; i < tokenIds.length; i++) {
            if (nft.ownerOf(tokenIds[i]) == msg.sender) {
                uint tokenAccumulation = getPendingReward(tokenIds[i], today_count, wyvernTokenToWyvernType[tokenIds[i]]);
                if (tokenAccumulation > 0) {
                    if (maxSupply < _totalSupply + amount + tokenAccumulation) {
                        emit mintOverflown(amount, tokenAccumulation, "Minting Limit Reached");
                        break;
                    }
                    amount += tokenAccumulation;
                    lastUpdate[tokenIds[i]] = today_count;
                }
            }
        }
        require (amount > 0,"NO positive number of $BREADTH tokens are available to mint");
        _mint(msg.sender, amount);
    }

    function getPendingReward(uint tokenId, uint todayCount, uint wyvernTypeCode) internal view  returns (uint){
        uint wyvernEarningsPerDay;
        if (lastUpdate[tokenId] == 0) {
             if (wyvernTypeCode == 1) {// 1 means Genesis  
                wyvernEarningsPerDay = wyvernTypeToEarningsPerDay[wyvernTypeCode];
                uint daysPassedSinceNFTMinted = block.timestamp - deployedTime;
                daysPassedSinceNFTMinted = (daysPassedSinceNFTMinted / (24 * 60 * 60));
                return (daysPassedSinceNFTMinted * wyvernEarningsPerDay * (10 ** _decimals));
            } else if(wyvernTypeCode == 2){  // 2 means Ascension
                return 25 * (10 ** _decimals);
            }else{
                return 0;
            }
        } else {
            if (todayCount - lastUpdate[tokenId] >= 1) {
                uint daysElapsedSinceLastUpdate = todayCount - lastUpdate[tokenId];
                wyvernEarningsPerDay = wyvernTypeToEarningsPerDay[wyvernTypeCode];
                return daysElapsedSinceLastUpdate * (wyvernEarningsPerDay * (10 ** _decimals));
            } else {
                return 0;
            }
        }
    }
}

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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountGiven","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"notgiven","type":"uint256"},{"indexed":false,"internalType":"string","name":"message","type":"string"}],"name":"mintOverflown","type":"event"},{"inputs":[],"name":"START","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"uint256[]","name":"wyvernTypeCodes","type":"uint256[]"}],"name":"addTokenWyvernType","outputs":[],"stateMutability":"nonpayable","type":"function"},{"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":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"claimToken","outputs":[],"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":"getOwner","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":"uint256","name":"","type":"uint256"}],"name":"lastUpdate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"uint256","name":"newMaxSupply","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fromId","type":"uint256"},{"internalType":"uint256","name":"_tillId","type":"uint256"},{"internalType":"uint256","name":"wyvernType","type":"uint256"}],"name":"setWyvernTokenToWyvernType","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"wyvernTypeCode","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setWyvernTypeCodeAndEarnings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"wyvernTypeCode","type":"uint256"}],"name":"showWyvernTypeEarningsPerDay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"wyvernTokenToWyvernType","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"wyvernTypeToEarningsPerDay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

608060405263619929906006556a084595161401484a0000006007553480156200002857600080fd5b5060006200003b6200022f60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506040518060400160405280600e81526020017f57797665726e7320427265617468000000000000000000000000000000000000815250600b90805190602001906200012692919062000237565b506040518060400160405280600781526020017f2442524541544800000000000000000000000000000000000000000000000000815250600a90805190602001906200017492919062000237565b506012600960006101000a81548160ff021916908360ff16021790555060006008819055507301fe2358cc2ca3379cb5ed11442e85881997f22c600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506005600460006001815260200190815260200160002081905550601960046000600281526020019081526020016000208190555042600d819055506200034c565b600033905090565b8280546200024590620002e7565b90600052602060002090601f016020900481019282620002695760008555620002b5565b82601f106200028457805160ff1916838001178555620002b5565b82800160010185558215620002b5579182015b82811115620002b457825182559160200191906001019062000297565b5b509050620002c49190620002c8565b5090565b5b80821115620002e3576000816000905550600101620002c9565b5090565b600060028204905060018216806200030057607f821691505b602082108114156200031757620003166200031d565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b612f26806200035c6000396000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c8063893d20e8116100f9578063a9059cbb11610097578063ba9a061a11610071578063ba9a061a14610555578063d28d885214610573578063dd62ed3e14610591578063f2fde38b146105c1576101c4565b8063a9059cbb146104d7578063b09f126614610507578063b9a7e7a414610525576101c4565b806395d89b41116100d357806395d89b411461043d5780639b95c3ca1461045b578063a457c2d71461048b578063a5d598f7146104bb576101c4565b8063893d20e8146103e55780638da5cb5b1461040357806392fbe48114610421576101c4565b8063313ce5671161016657806342966c681161014057806342966c681461034d5780636c7451c51461037d5780636f8b44b01461039957806370a08231146103b5576101c4565b8063313ce567146102e157806332424aa3146102ff578063395093511461031d576101c4565b80630bc5dec4116101a25780630bc5dec41461023357806318160ddd146102635780631c0686361461028157806323b872dd146102b1576101c4565b806306fdde03146101c9578063083129bc146101e7578063095ea7b314610203575b600080fd5b6101d16105dd565b6040516101de919061275d565b60405180910390f35b61020160048036038101906101fc9190612233565b61066f565b005b61021d600480360381019061021891906120e5565b610742565b60405161022a9190612742565b60405180910390f35b61024d600480360381019061024891906121ce565b610760565b60405161025a91906128df565b60405180910390f35b61026b610778565b60405161027891906128df565b60405180910390f35b61029b600480360381019061029691906121ce565b610782565b6040516102a891906128df565b60405180910390f35b6102cb60048036038101906102c69190612096565b61079f565b6040516102d89190612742565b60405180910390f35b6102e9610878565b6040516102f69190612936565b60405180910390f35b61030761088f565b6040516103149190612936565b60405180910390f35b610337600480360381019061033291906120e5565b6108a2565b6040516103449190612742565b60405180910390f35b610367600480360381019061036291906121ce565b610955565b6040516103749190612742565b60405180910390f35b610397600480360381019061039291906121f7565b610971565b005b6103b360048036038101906103ae91906121ce565b610a22565b005b6103cf60048036038101906103ca9190612008565b610ac1565b6040516103dc91906128df565b60405180910390f35b6103ed610b0a565b6040516103fa9190612727565b60405180910390f35b61040b610b19565b6040516104189190612727565b60405180910390f35b61043b60048036038101906104369190612121565b610b42565b005b610445610e5a565b604051610452919061275d565b60405180910390f35b610475600480360381019061047091906121ce565b610eec565b60405161048291906128df565b60405180910390f35b6104a560048036038101906104a091906120e5565b610f04565b6040516104b29190612742565b60405180910390f35b6104d560048036038101906104d09190612162565b610fd1565b005b6104f160048036038101906104ec91906120e5565b611166565b6040516104fe9190612742565b60405180910390f35b61050f611184565b60405161051c919061275d565b60405180910390f35b61053f600480360381019061053a91906121ce565b611212565b60405161054c91906128df565b60405180910390f35b61055d61122a565b60405161056a91906128df565b60405180910390f35b61057b611230565b604051610588919061275d565b60405180910390f35b6105ab60048036038101906105a6919061205a565b6112be565b6040516105b891906128df565b60405180910390f35b6105db60048036038101906105d69190612008565b611345565b005b6060600b80546105ec90612cd8565b80601f016020809104026020016040519081016040528092919081815260200182805461061890612cd8565b80156106655780601f1061063a57610100808354040283529160200191610665565b820191906000526020600020905b81548152906001019060200180831161064857829003601f168201915b5050505050905090565b6106776113e6565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610704576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106fb9061281f565b60405180910390fd5b60008390505b82811161073c57816005600083815260200190815260200160002081905550808061073490612d0a565b91505061070a565b50505050565b600061075661074f6113e6565b84846113ee565b6001905092915050565b60016020528060005260406000206000915090505481565b6000600854905090565b600060046000838152602001908152602001600020549050919050565b60006107ac8484846115b9565b61086d846107b86113e6565b61086885604051806060016040528060288152602001612ea460289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061081e6113e6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118479092919063ffffffff16565b6113ee565b600190509392505050565b6000600960009054906101000a900460ff16905090565b600960009054906101000a900460ff1681565b600061094b6108af6113e6565b8461094685600360006108c06113e6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118ab90919063ffffffff16565b6113ee565b6001905092915050565b60006109686109626113e6565b83611909565b60019050919050565b6109796113e6565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fd9061281f565b60405180910390fd5b8060046000848152602001908152602001600020819055505050565b610a2a6113e6565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ab7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aae9061281f565b60405180910390fd5b8060078190555050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000610b14610b19565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008061012c42610b539190612a20565b905060005b8351811015610e07573373ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e868481518110610bef577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516040518263ffffffff1660e01b8152600401610c1391906128df565b60206040518083038186803b158015610c2b57600080fd5b505afa158015610c3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c639190612031565b73ffffffffffffffffffffffffffffffffffffffff161415610df4576000610d1f858381518110610cbd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518460056000898781518110610d03577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151815260200190815260200160002054611aad565b90506000811115610df2578084600854610d3991906129ca565b610d4391906129ca565b6007541015610d8b577f67cd89226dfede6d6ea7e276338f64ef08fa324a8ec00c212a37b319f1c05cab8482604051610d7d9291906128fa565b60405180910390a150610e07565b8084610d9791906129ca565b93508260016000878581518110610dd7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518152602001908152602001600020819055505b505b8080610dff90612d0a565b915050610b58565b5060008211610e4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e429061289f565b60405180910390fd5b610e553383611c32565b505050565b6060600a8054610e6990612cd8565b80601f0160208091040260200160405190810160405280929190818152602001828054610e9590612cd8565b8015610ee25780601f10610eb757610100808354040283529160200191610ee2565b820191906000526020600020905b815481529060010190602001808311610ec557829003601f168201915b5050505050905090565b60046020528060005260406000206000915090505481565b6000610fc7610f116113e6565b84610fc285604051806060016040528060258152602001612ecc6025913960036000610f3b6113e6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118479092919063ffffffff16565b6113ee565b6001905092915050565b610fd96113e6565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611066576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105d9061281f565b60405180910390fd5b80518251146110aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a1906127ff565b60405180910390fd5b60005b8251811015611161578181815181106110ef577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015160056000858481518110611134577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151815260200190815260200160002081905550808061115990612d0a565b9150506110ad565b505050565b600061117a6111736113e6565b84846115b9565b6001905092915050565b600a805461119190612cd8565b80601f01602080910402602001604051908101604052809291908181526020018280546111bd90612cd8565b801561120a5780601f106111df5761010080835404028352916020019161120a565b820191906000526020600020905b8154815290600101906020018083116111ed57829003601f168201915b505050505081565b60056020528060005260406000206000915090505481565b600d5481565b600b805461123d90612cd8565b80601f016020809104026020016040519081016040528092919081815260200182805461126990612cd8565b80156112b65780601f1061128b576101008083540402835291602001916112b6565b820191906000526020600020905b81548152906001019060200180831161129957829003601f168201915b505050505081565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61134d6113e6565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d19061281f565b60405180910390fd5b6113e381611dbc565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561145e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114559061279f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c59061283f565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516115ac91906128df565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611629576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116209061287f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611699576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116909061277f565b60405180910390fd5b61170581604051806060016040528060268152602001612e7e60269139600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118479092919063ffffffff16565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061179a81600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118ab90919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161183a91906128df565b60405180910390a3505050565b600083831115829061188f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611886919061275d565b60405180910390fd5b506000838561189e9190612c1c565b9050809150509392505050565b60008082846118ba91906129ca565b9050838110156118ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f6906127df565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611979576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119709061285f565b60405180910390fd5b6119e581604051806060016040528060228152602001612e5c60229139600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118479092919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a3d81600854611ee990919063ffffffff16565b600881905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611aa191906128df565b60405180910390a35050565b600080600060016000878152602001908152602001600020541415611b8c576001831415611b495760046000848152602001908152602001600020549050600060065442611afb9190612c1c565b90506201518081611b0c9190612a20565b9050600960009054906101000a900460ff16600a611b2a9190612aa4565b8282611b369190612bc2565b611b409190612bc2565b92505050611c2b565b6002831415611b8257600960009054906101000a900460ff16600a611b6e9190612aa4565b6019611b7a9190612bc2565b915050611c2b565b6000915050611c2b565b60018060008781526020019081526020016000205485611bac9190612c1c565b10611c25576000600160008781526020019081526020016000205485611bd29190612c1c565b905060046000858152602001908152602001600020549150600960009054906101000a900460ff16600a611c069190612aa4565b82611c119190612bc2565b81611c1c9190612bc2565b92505050611c2b565b60009150505b9392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ca2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c99906128bf565b60405180910390fd5b611cb7816008546118ab90919063ffffffff16565b600881905550611d0f81600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118ab90919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611db091906128df565b60405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e23906127bf565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000611f2b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611847565b905092915050565b6000611f46611f4184612982565b612951565b90508083825260208201905082856020860282011115611f6557600080fd5b60005b85811015611f955781611f7b8882611ff3565b845260208401935060208301925050600181019050611f68565b5050509392505050565b600081359050611fae81612e2d565b92915050565b600081519050611fc381612e2d565b92915050565b600082601f830112611fda57600080fd5b8135611fea848260208601611f33565b91505092915050565b60008135905061200281612e44565b92915050565b60006020828403121561201a57600080fd5b600061202884828501611f9f565b91505092915050565b60006020828403121561204357600080fd5b600061205184828501611fb4565b91505092915050565b6000806040838503121561206d57600080fd5b600061207b85828601611f9f565b925050602061208c85828601611f9f565b9150509250929050565b6000806000606084860312156120ab57600080fd5b60006120b986828701611f9f565b93505060206120ca86828701611f9f565b92505060406120db86828701611ff3565b9150509250925092565b600080604083850312156120f857600080fd5b600061210685828601611f9f565b925050602061211785828601611ff3565b9150509250929050565b60006020828403121561213357600080fd5b600082013567ffffffffffffffff81111561214d57600080fd5b61215984828501611fc9565b91505092915050565b6000806040838503121561217557600080fd5b600083013567ffffffffffffffff81111561218f57600080fd5b61219b85828601611fc9565b925050602083013567ffffffffffffffff8111156121b857600080fd5b6121c485828601611fc9565b9150509250929050565b6000602082840312156121e057600080fd5b60006121ee84828501611ff3565b91505092915050565b6000806040838503121561220a57600080fd5b600061221885828601611ff3565b925050602061222985828601611ff3565b9150509250929050565b60008060006060848603121561224857600080fd5b600061225686828701611ff3565b935050602061226786828701611ff3565b925050604061227886828701611ff3565b9150509250925092565b61228b81612c50565b82525050565b61229a81612c62565b82525050565b60006122ab826129ae565b6122b581856129b9565b93506122c5818560208601612ca5565b6122ce81612e0f565b840191505092915050565b60006122e66023836129b9565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061234c6025836129b9565b91507f45524332303a20617070726f76652066726f6d6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006123b26026836129b9565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612418601b836129b9565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b6000612458603d836129b9565b91507f496e707574732070726f7669646564207769746820646966666572656e74206e60008301527f6f206f662076616c7565732c2073686f756c6420626520455155414c2e0000006020830152604082019050919050565b60006124be6020836129b9565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006124fe6023836129b9565b91507f45524332303a20617070726f76656520746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006125646021836129b9565b91507f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006125ca6015836129b9565b91507f4d696e74696e67204c696d6974205265616368656400000000000000000000006000830152602082019050919050565b600061260a6025836129b9565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612670603b836129b9565b91507f4e4f20706f736974697665206e756d626572206f66202442524541445448207460008301527f6f6b656e732061726520617661696c61626c6520746f206d696e7400000000006020830152604082019050919050565b60006126d6601f836129b9565b91507f45524332303a206d696e7420746f20746865207a65726f2061646472657373006000830152602082019050919050565b61271281612c8e565b82525050565b61272181612c98565b82525050565b600060208201905061273c6000830184612282565b92915050565b60006020820190506127576000830184612291565b92915050565b6000602082019050818103600083015261277781846122a0565b905092915050565b60006020820190508181036000830152612798816122d9565b9050919050565b600060208201905081810360008301526127b88161233f565b9050919050565b600060208201905081810360008301526127d8816123a5565b9050919050565b600060208201905081810360008301526127f88161240b565b9050919050565b600060208201905081810360008301526128188161244b565b9050919050565b60006020820190508181036000830152612838816124b1565b9050919050565b60006020820190508181036000830152612858816124f1565b9050919050565b6000602082019050818103600083015261287881612557565b9050919050565b60006020820190508181036000830152612898816125fd565b9050919050565b600060208201905081810360008301526128b881612663565b9050919050565b600060208201905081810360008301526128d8816126c9565b9050919050565b60006020820190506128f46000830184612709565b92915050565b600060608201905061290f6000830185612709565b61291c6020830184612709565b818103604083015261292d816125bd565b90509392505050565b600060208201905061294b6000830184612718565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561297857612977612de0565b5b8060405250919050565b600067ffffffffffffffff82111561299d5761299c612de0565b5b602082029050602081019050919050565b600081519050919050565b600082825260208201905092915050565b60006129d582612c8e565b91506129e083612c8e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612a1557612a14612d53565b5b828201905092915050565b6000612a2b82612c8e565b9150612a3683612c8e565b925082612a4657612a45612d82565b5b828204905092915050565b6000808291508390505b6001851115612a9b57808604811115612a7757612a76612d53565b5b6001851615612a865780820291505b8081029050612a9485612e20565b9450612a5b565b94509492505050565b6000612aaf82612c8e565b9150612aba83612c98565b9250612ae77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612aef565b905092915050565b600082612aff5760019050612bbb565b81612b0d5760009050612bbb565b8160018114612b235760028114612b2d57612b5c565b6001915050612bbb565b60ff841115612b3f57612b3e612d53565b5b8360020a915084821115612b5657612b55612d53565b5b50612bbb565b5060208310610133831016604e8410600b8410161715612b915782820a905083811115612b8c57612b8b612d53565b5b612bbb565b612b9e8484846001612a51565b92509050818404811115612bb557612bb4612d53565b5b81810290505b9392505050565b6000612bcd82612c8e565b9150612bd883612c8e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612c1157612c10612d53565b5b828202905092915050565b6000612c2782612c8e565b9150612c3283612c8e565b925082821015612c4557612c44612d53565b5b828203905092915050565b6000612c5b82612c6e565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015612cc3578082015181840152602081019050612ca8565b83811115612cd2576000848401525b50505050565b60006002820490506001821680612cf057607f821691505b60208210811415612d0457612d03612db1565b5b50919050565b6000612d1582612c8e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612d4857612d47612d53565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b612e3681612c50565b8114612e4157600080fd5b50565b612e4d81612c8e565b8114612e5857600080fd5b5056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ec3431357d0ca94f913134ee7789bc4a1332eb9d99fd5c8bd9992f1bd720ae8764736f6c63430008000033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101c45760003560e01c8063893d20e8116100f9578063a9059cbb11610097578063ba9a061a11610071578063ba9a061a14610555578063d28d885214610573578063dd62ed3e14610591578063f2fde38b146105c1576101c4565b8063a9059cbb146104d7578063b09f126614610507578063b9a7e7a414610525576101c4565b806395d89b41116100d357806395d89b411461043d5780639b95c3ca1461045b578063a457c2d71461048b578063a5d598f7146104bb576101c4565b8063893d20e8146103e55780638da5cb5b1461040357806392fbe48114610421576101c4565b8063313ce5671161016657806342966c681161014057806342966c681461034d5780636c7451c51461037d5780636f8b44b01461039957806370a08231146103b5576101c4565b8063313ce567146102e157806332424aa3146102ff578063395093511461031d576101c4565b80630bc5dec4116101a25780630bc5dec41461023357806318160ddd146102635780631c0686361461028157806323b872dd146102b1576101c4565b806306fdde03146101c9578063083129bc146101e7578063095ea7b314610203575b600080fd5b6101d16105dd565b6040516101de919061275d565b60405180910390f35b61020160048036038101906101fc9190612233565b61066f565b005b61021d600480360381019061021891906120e5565b610742565b60405161022a9190612742565b60405180910390f35b61024d600480360381019061024891906121ce565b610760565b60405161025a91906128df565b60405180910390f35b61026b610778565b60405161027891906128df565b60405180910390f35b61029b600480360381019061029691906121ce565b610782565b6040516102a891906128df565b60405180910390f35b6102cb60048036038101906102c69190612096565b61079f565b6040516102d89190612742565b60405180910390f35b6102e9610878565b6040516102f69190612936565b60405180910390f35b61030761088f565b6040516103149190612936565b60405180910390f35b610337600480360381019061033291906120e5565b6108a2565b6040516103449190612742565b60405180910390f35b610367600480360381019061036291906121ce565b610955565b6040516103749190612742565b60405180910390f35b610397600480360381019061039291906121f7565b610971565b005b6103b360048036038101906103ae91906121ce565b610a22565b005b6103cf60048036038101906103ca9190612008565b610ac1565b6040516103dc91906128df565b60405180910390f35b6103ed610b0a565b6040516103fa9190612727565b60405180910390f35b61040b610b19565b6040516104189190612727565b60405180910390f35b61043b60048036038101906104369190612121565b610b42565b005b610445610e5a565b604051610452919061275d565b60405180910390f35b610475600480360381019061047091906121ce565b610eec565b60405161048291906128df565b60405180910390f35b6104a560048036038101906104a091906120e5565b610f04565b6040516104b29190612742565b60405180910390f35b6104d560048036038101906104d09190612162565b610fd1565b005b6104f160048036038101906104ec91906120e5565b611166565b6040516104fe9190612742565b60405180910390f35b61050f611184565b60405161051c919061275d565b60405180910390f35b61053f600480360381019061053a91906121ce565b611212565b60405161054c91906128df565b60405180910390f35b61055d61122a565b60405161056a91906128df565b60405180910390f35b61057b611230565b604051610588919061275d565b60405180910390f35b6105ab60048036038101906105a6919061205a565b6112be565b6040516105b891906128df565b60405180910390f35b6105db60048036038101906105d69190612008565b611345565b005b6060600b80546105ec90612cd8565b80601f016020809104026020016040519081016040528092919081815260200182805461061890612cd8565b80156106655780601f1061063a57610100808354040283529160200191610665565b820191906000526020600020905b81548152906001019060200180831161064857829003601f168201915b5050505050905090565b6106776113e6565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610704576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106fb9061281f565b60405180910390fd5b60008390505b82811161073c57816005600083815260200190815260200160002081905550808061073490612d0a565b91505061070a565b50505050565b600061075661074f6113e6565b84846113ee565b6001905092915050565b60016020528060005260406000206000915090505481565b6000600854905090565b600060046000838152602001908152602001600020549050919050565b60006107ac8484846115b9565b61086d846107b86113e6565b61086885604051806060016040528060288152602001612ea460289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061081e6113e6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118479092919063ffffffff16565b6113ee565b600190509392505050565b6000600960009054906101000a900460ff16905090565b600960009054906101000a900460ff1681565b600061094b6108af6113e6565b8461094685600360006108c06113e6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118ab90919063ffffffff16565b6113ee565b6001905092915050565b60006109686109626113e6565b83611909565b60019050919050565b6109796113e6565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fd9061281f565b60405180910390fd5b8060046000848152602001908152602001600020819055505050565b610a2a6113e6565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ab7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aae9061281f565b60405180910390fd5b8060078190555050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000610b14610b19565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008061012c42610b539190612a20565b905060005b8351811015610e07573373ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e868481518110610bef577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516040518263ffffffff1660e01b8152600401610c1391906128df565b60206040518083038186803b158015610c2b57600080fd5b505afa158015610c3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c639190612031565b73ffffffffffffffffffffffffffffffffffffffff161415610df4576000610d1f858381518110610cbd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518460056000898781518110610d03577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151815260200190815260200160002054611aad565b90506000811115610df2578084600854610d3991906129ca565b610d4391906129ca565b6007541015610d8b577f67cd89226dfede6d6ea7e276338f64ef08fa324a8ec00c212a37b319f1c05cab8482604051610d7d9291906128fa565b60405180910390a150610e07565b8084610d9791906129ca565b93508260016000878581518110610dd7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518152602001908152602001600020819055505b505b8080610dff90612d0a565b915050610b58565b5060008211610e4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e429061289f565b60405180910390fd5b610e553383611c32565b505050565b6060600a8054610e6990612cd8565b80601f0160208091040260200160405190810160405280929190818152602001828054610e9590612cd8565b8015610ee25780601f10610eb757610100808354040283529160200191610ee2565b820191906000526020600020905b815481529060010190602001808311610ec557829003601f168201915b5050505050905090565b60046020528060005260406000206000915090505481565b6000610fc7610f116113e6565b84610fc285604051806060016040528060258152602001612ecc6025913960036000610f3b6113e6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118479092919063ffffffff16565b6113ee565b6001905092915050565b610fd96113e6565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611066576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105d9061281f565b60405180910390fd5b80518251146110aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a1906127ff565b60405180910390fd5b60005b8251811015611161578181815181106110ef577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015160056000858481518110611134577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151815260200190815260200160002081905550808061115990612d0a565b9150506110ad565b505050565b600061117a6111736113e6565b84846115b9565b6001905092915050565b600a805461119190612cd8565b80601f01602080910402602001604051908101604052809291908181526020018280546111bd90612cd8565b801561120a5780601f106111df5761010080835404028352916020019161120a565b820191906000526020600020905b8154815290600101906020018083116111ed57829003601f168201915b505050505081565b60056020528060005260406000206000915090505481565b600d5481565b600b805461123d90612cd8565b80601f016020809104026020016040519081016040528092919081815260200182805461126990612cd8565b80156112b65780601f1061128b576101008083540402835291602001916112b6565b820191906000526020600020905b81548152906001019060200180831161129957829003601f168201915b505050505081565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61134d6113e6565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d19061281f565b60405180910390fd5b6113e381611dbc565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561145e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114559061279f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c59061283f565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516115ac91906128df565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611629576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116209061287f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611699576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116909061277f565b60405180910390fd5b61170581604051806060016040528060268152602001612e7e60269139600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118479092919063ffffffff16565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061179a81600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118ab90919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161183a91906128df565b60405180910390a3505050565b600083831115829061188f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611886919061275d565b60405180910390fd5b506000838561189e9190612c1c565b9050809150509392505050565b60008082846118ba91906129ca565b9050838110156118ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f6906127df565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611979576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119709061285f565b60405180910390fd5b6119e581604051806060016040528060228152602001612e5c60229139600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118479092919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a3d81600854611ee990919063ffffffff16565b600881905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611aa191906128df565b60405180910390a35050565b600080600060016000878152602001908152602001600020541415611b8c576001831415611b495760046000848152602001908152602001600020549050600060065442611afb9190612c1c565b90506201518081611b0c9190612a20565b9050600960009054906101000a900460ff16600a611b2a9190612aa4565b8282611b369190612bc2565b611b409190612bc2565b92505050611c2b565b6002831415611b8257600960009054906101000a900460ff16600a611b6e9190612aa4565b6019611b7a9190612bc2565b915050611c2b565b6000915050611c2b565b60018060008781526020019081526020016000205485611bac9190612c1c565b10611c25576000600160008781526020019081526020016000205485611bd29190612c1c565b905060046000858152602001908152602001600020549150600960009054906101000a900460ff16600a611c069190612aa4565b82611c119190612bc2565b81611c1c9190612bc2565b92505050611c2b565b60009150505b9392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ca2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c99906128bf565b60405180910390fd5b611cb7816008546118ab90919063ffffffff16565b600881905550611d0f81600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118ab90919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611db091906128df565b60405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e23906127bf565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000611f2b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611847565b905092915050565b6000611f46611f4184612982565b612951565b90508083825260208201905082856020860282011115611f6557600080fd5b60005b85811015611f955781611f7b8882611ff3565b845260208401935060208301925050600181019050611f68565b5050509392505050565b600081359050611fae81612e2d565b92915050565b600081519050611fc381612e2d565b92915050565b600082601f830112611fda57600080fd5b8135611fea848260208601611f33565b91505092915050565b60008135905061200281612e44565b92915050565b60006020828403121561201a57600080fd5b600061202884828501611f9f565b91505092915050565b60006020828403121561204357600080fd5b600061205184828501611fb4565b91505092915050565b6000806040838503121561206d57600080fd5b600061207b85828601611f9f565b925050602061208c85828601611f9f565b9150509250929050565b6000806000606084860312156120ab57600080fd5b60006120b986828701611f9f565b93505060206120ca86828701611f9f565b92505060406120db86828701611ff3565b9150509250925092565b600080604083850312156120f857600080fd5b600061210685828601611f9f565b925050602061211785828601611ff3565b9150509250929050565b60006020828403121561213357600080fd5b600082013567ffffffffffffffff81111561214d57600080fd5b61215984828501611fc9565b91505092915050565b6000806040838503121561217557600080fd5b600083013567ffffffffffffffff81111561218f57600080fd5b61219b85828601611fc9565b925050602083013567ffffffffffffffff8111156121b857600080fd5b6121c485828601611fc9565b9150509250929050565b6000602082840312156121e057600080fd5b60006121ee84828501611ff3565b91505092915050565b6000806040838503121561220a57600080fd5b600061221885828601611ff3565b925050602061222985828601611ff3565b9150509250929050565b60008060006060848603121561224857600080fd5b600061225686828701611ff3565b935050602061226786828701611ff3565b925050604061227886828701611ff3565b9150509250925092565b61228b81612c50565b82525050565b61229a81612c62565b82525050565b60006122ab826129ae565b6122b581856129b9565b93506122c5818560208601612ca5565b6122ce81612e0f565b840191505092915050565b60006122e66023836129b9565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061234c6025836129b9565b91507f45524332303a20617070726f76652066726f6d6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006123b26026836129b9565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612418601b836129b9565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b6000612458603d836129b9565b91507f496e707574732070726f7669646564207769746820646966666572656e74206e60008301527f6f206f662076616c7565732c2073686f756c6420626520455155414c2e0000006020830152604082019050919050565b60006124be6020836129b9565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006124fe6023836129b9565b91507f45524332303a20617070726f76656520746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006125646021836129b9565b91507f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006125ca6015836129b9565b91507f4d696e74696e67204c696d6974205265616368656400000000000000000000006000830152602082019050919050565b600061260a6025836129b9565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612670603b836129b9565b91507f4e4f20706f736974697665206e756d626572206f66202442524541445448207460008301527f6f6b656e732061726520617661696c61626c6520746f206d696e7400000000006020830152604082019050919050565b60006126d6601f836129b9565b91507f45524332303a206d696e7420746f20746865207a65726f2061646472657373006000830152602082019050919050565b61271281612c8e565b82525050565b61272181612c98565b82525050565b600060208201905061273c6000830184612282565b92915050565b60006020820190506127576000830184612291565b92915050565b6000602082019050818103600083015261277781846122a0565b905092915050565b60006020820190508181036000830152612798816122d9565b9050919050565b600060208201905081810360008301526127b88161233f565b9050919050565b600060208201905081810360008301526127d8816123a5565b9050919050565b600060208201905081810360008301526127f88161240b565b9050919050565b600060208201905081810360008301526128188161244b565b9050919050565b60006020820190508181036000830152612838816124b1565b9050919050565b60006020820190508181036000830152612858816124f1565b9050919050565b6000602082019050818103600083015261287881612557565b9050919050565b60006020820190508181036000830152612898816125fd565b9050919050565b600060208201905081810360008301526128b881612663565b9050919050565b600060208201905081810360008301526128d8816126c9565b9050919050565b60006020820190506128f46000830184612709565b92915050565b600060608201905061290f6000830185612709565b61291c6020830184612709565b818103604083015261292d816125bd565b90509392505050565b600060208201905061294b6000830184612718565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561297857612977612de0565b5b8060405250919050565b600067ffffffffffffffff82111561299d5761299c612de0565b5b602082029050602081019050919050565b600081519050919050565b600082825260208201905092915050565b60006129d582612c8e565b91506129e083612c8e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612a1557612a14612d53565b5b828201905092915050565b6000612a2b82612c8e565b9150612a3683612c8e565b925082612a4657612a45612d82565b5b828204905092915050565b6000808291508390505b6001851115612a9b57808604811115612a7757612a76612d53565b5b6001851615612a865780820291505b8081029050612a9485612e20565b9450612a5b565b94509492505050565b6000612aaf82612c8e565b9150612aba83612c98565b9250612ae77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612aef565b905092915050565b600082612aff5760019050612bbb565b81612b0d5760009050612bbb565b8160018114612b235760028114612b2d57612b5c565b6001915050612bbb565b60ff841115612b3f57612b3e612d53565b5b8360020a915084821115612b5657612b55612d53565b5b50612bbb565b5060208310610133831016604e8410600b8410161715612b915782820a905083811115612b8c57612b8b612d53565b5b612bbb565b612b9e8484846001612a51565b92509050818404811115612bb557612bb4612d53565b5b81810290505b9392505050565b6000612bcd82612c8e565b9150612bd883612c8e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612c1157612c10612d53565b5b828202905092915050565b6000612c2782612c8e565b9150612c3283612c8e565b925082821015612c4557612c44612d53565b5b828203905092915050565b6000612c5b82612c6e565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015612cc3578082015181840152602081019050612ca8565b83811115612cd2576000848401525b50505050565b60006002820490506001821680612cf057607f821691505b60208210811415612d0457612d03612db1565b5b50919050565b6000612d1582612c8e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612d4857612d47612d53565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b612e3681612c50565b8114612e4157600080fd5b50565b612e4d81612c8e565b8114612e5857600080fd5b5056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ec3431357d0ca94f913134ee7789bc4a1332eb9d99fd5c8bd9992f1bd720ae8764736f6c63430008000033

Deployed Bytecode Sourcemap

22801:12148:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24928:94;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24080:305;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26975:163;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22926:39;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25084:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26109:156;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27589:315;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24614:94;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23538:22;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28292:210;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29332:120;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25395:163;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25967:102;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25244:121;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24455:94;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10336:79;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32798:944;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24771:98;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23098:55;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28980:261;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25586:373;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26465:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23567:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23160:52;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23647:17;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23595:19;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26694:145;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10776:109;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24928:94;24976:13;25009:5;25002:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24928:94;:::o;24080:305::-;10556:12;:10;:12::i;:::-;10546:22;;:6;;;;;;;;;;:22;;;10538:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24195:6:::1;24204:7;24195:16;;24190:188;24218:7;24213:1;:12;24190:188;;24276:10;24247:23;:26;24271:1;24247:26;;;;;;;;;;;:39;;;;24227:3;;;;;:::i;:::-;;;;24190:188;;;;24080:305:::0;;;:::o;26975:163::-;27052:4;27069:39;27078:12;:10;:12::i;:::-;27092:7;27101:6;27069:8;:39::i;:::-;27126:4;27119:11;;26975:163;;;;:::o;22926:39::-;;;;;;;;;;;;;;;;;:::o;25084:100::-;25137:7;25164:12;;25157:19;;25084:100;:::o;26109:156::-;26191:4;26215:26;:42;26242:14;26215:42;;;;;;;;;;;;26208:49;;26109:156;;;:::o;27589:315::-;27689:4;27706:36;27716:6;27724:9;27735:6;27706:9;:36::i;:::-;27753:121;27762:6;27770:12;:10;:12::i;:::-;27784:89;27822:6;27784:89;;;;;;;;;;;;;;;;;:11;:19;27796:6;27784:19;;;;;;;;;;;;;;;:33;27804:12;:10;:12::i;:::-;27784:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;27753:8;:121::i;:::-;27892:4;27885:11;;27589:315;;;;;:::o;24614:94::-;24666:5;24691:9;;;;;;;;;;;24684:16;;24614:94;:::o;23538:22::-;;;;;;;;;;;;;:::o;28292:210::-;28372:4;28389:83;28398:12;:10;:12::i;:::-;28412:7;28421:50;28460:10;28421:11;:25;28433:12;:10;:12::i;:::-;28421:25;;;;;;;;;;;;;;;:34;28447:7;28421:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;28389:8;:83::i;:::-;28490:4;28483:11;;28292:210;;;;:::o;29332:120::-;29378:4;29395:27;29401:12;:10;:12::i;:::-;29415:6;29395:5;:27::i;:::-;29440:4;29433:11;;29332:120;;;:::o;25395:163::-;10556:12;:10;:12::i;:::-;10546:22;;:6;;;;;;;;;;:22;;;10538:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25543:7:::1;25498:26;:42;25525:14;25498:42;;;;;;;;;;;:52;;;;25395:163:::0;;:::o;25967:102::-;10556:12;:10;:12::i;:::-;10546:22;;:6;;;;;;;;;;:22;;;10538:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26049:12:::1;26037:9;:24;;;;25967:102:::0;:::o;25244:121::-;25312:7;25339:9;:18;25349:7;25339:18;;;;;;;;;;;;;;;;25332:25;;25244:121;;;:::o;24455:94::-;24507:7;24534;:5;:7::i;:::-;24527:14;;24455:94;:::o;10336:79::-;10374:7;10401:6;;;;;;;;;;;10394:13;;10336:79;:::o;32798:944::-;32862:11;32888:16;32926:6;32907:15;:26;;;;:::i;:::-;32888:45;;32949:6;32944:662;32965:8;:15;32961:1;:19;32944:662;;;33034:10;33006:38;;:3;;;;;;;;;;;:11;;;33018:8;33027:1;33018:11;;;;;;;;;;;;;;;;;;;;;;33006:24;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:38;;;33002:593;;;33065:22;33090:80;33107:8;33116:1;33107:11;;;;;;;;;;;;;;;;;;;;;;33120;33133:23;:36;33157:8;33166:1;33157:11;;;;;;;;;;;;;;;;;;;;;;33133:36;;;;;;;;;;;;33090:16;:80::i;:::-;33065:105;;33213:1;33193:17;:21;33189:391;;;33279:17;33270:6;33255:12;;:21;;;;:::i;:::-;:41;;;;:::i;:::-;33243:9;;:53;33239:212;;;33330:65;33344:6;33352:17;33330:65;;;;;;;:::i;:::-;;;;;;;;33422:5;;;33239:212;33483:17;33473:27;;;;;:::i;:::-;;;33549:11;33523:10;:23;33534:8;33543:1;33534:11;;;;;;;;;;;;;;;;;;;;;;33523:23;;;;;;;;;;;:37;;;;33189:391;33002:593;;32982:3;;;;;:::i;:::-;;;;32944:662;;;;33634:1;33625:6;:10;33616:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;33709:25;33715:10;33727:6;33709:5;:25::i;:::-;32798:944;;;:::o;24771:98::-;24821:13;24854:7;24847:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24771:98;:::o;23098:55::-;;;;;;;;;;;;;;;;;:::o;28980:261::-;29065:4;29082:129;29091:12;:10;:12::i;:::-;29105:7;29114:96;29153:15;29114:96;;;;;;;;;;;;;;;;;:11;:25;29126:12;:10;:12::i;:::-;29114:25;;;;;;;;;;;;;;;:34;29140:7;29114:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;29082:8;:129::i;:::-;29229:4;29222:11;;28980:261;;;;:::o;25586:373::-;10556:12;:10;:12::i;:::-;10546:22;;:6;;;;;;;;;;:22;;;10538:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25726:15:::1;:22;25707:8;:15;:41;25699:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;25830:6;25825:127;25846:8;:15;25842:1;:19;25825:127;;;25922:15;25938:1;25922:18;;;;;;;;;;;;;;;;;;;;;;25883:23;:36;25907:8;25916:1;25907:11;;;;;;;;;;;;;;;;;;;;;;25883:36;;;;;;;;;;;:57;;;;25863:3;;;;;:::i;:::-;;;;25825:127;;;;25586:373:::0;;:::o;26465:169::-;26545:4;26562:42;26572:12;:10;:12::i;:::-;26586:9;26597:6;26562:9;:42::i;:::-;26622:4;26615:11;;26465:169;;;;:::o;23567:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23160:52::-;;;;;;;;;;;;;;;;;:::o;23647:17::-;;;;:::o;23595:19::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26694:145::-;26777:7;26804:11;:18;26816:5;26804:18;;;;;;;;;;;;;;;:27;26823:7;26804:27;;;;;;;;;;;;;;;;26797:34;;26694:145;;;;:::o;10776:109::-;10556:12;:10;:12::i;:::-;10546:22;;:6;;;;;;;;;;:22;;;10538:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;10849:28:::1;10868:8;10849:18;:28::i;:::-;10776:109:::0;:::o;3808:108::-;3853:15;3897:10;3881:27;;3808:108;:::o;32040:340::-;32151:1;32134:19;;:5;:19;;;;32126:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;32233:1;32214:21;;:7;:21;;;;32206:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;32318:6;32288:11;:18;32300:5;32288:18;;;;;;;;;;;;;;;:27;32307:7;32288:27;;;;;;;;;;;;;;;:36;;;;32356:7;32340:32;;32349:5;32340:32;;;32365:6;32340:32;;;;;;:::i;:::-;;;;;;;;32040:340;;;:::o;29918:471::-;30034:1;30016:20;;:6;:20;;;;30008:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;30118:1;30097:23;;:9;:23;;;;30089:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;30193;30215:6;30193:71;;;;;;;;;;;;;;;;;:9;:17;30203:6;30193:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;30173:9;:17;30183:6;30173:17;;;;;;;;;;;;;;;:91;;;;30298:32;30323:6;30298:9;:20;30308:9;30298:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;30275:9;:20;30285:9;30275:20;;;;;;;;;;;;;;;:55;;;;30363:9;30346:35;;30355:6;30346:35;;;30374:6;30346:35;;;;;;:::i;:::-;;;;;;;;29918:471;;;:::o;5842:192::-;5928:7;5961:1;5956;:6;;5964:12;5948:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;5988:9;6004:1;6000;:5;;;;:::i;:::-;5988:17;;6025:1;6018:8;;;5842:192;;;;;:::o;4983:181::-;5041:7;5061:9;5077:1;5073;:5;;;;:::i;:::-;5061:17;;5102:1;5097;:6;;5089:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;5155:1;5148:8;;;4983:181;;;;:::o;31276:348::-;31371:1;31352:21;;:7;:21;;;;31344:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31445:68;31468:6;31445:68;;;;;;;;;;;;;;;;;:9;:18;31455:7;31445:18;;;;;;;;;;;;;;;;:22;;:68;;;;;:::i;:::-;31424:9;:18;31434:7;31424:18;;;;;;;;;;;;;;;:89;;;;31539:24;31556:6;31539:12;;:16;;:24;;;;:::i;:::-;31524:12;:39;;;;31605:1;31579:37;;31588:7;31579:37;;;31609:6;31579:37;;;;;;:::i;:::-;;;;;;;;31276:348;;:::o;33750:1196::-;33852:4;33868:25;33931:1;33908:10;:19;33919:7;33908:19;;;;;;;;;;;;:24;33904:1035;;;33972:1;33954:14;:19;33950:572;;;34037:26;:42;34064:14;34037:42;;;;;;;;;;;;34014:65;;34098:29;34148:12;;34130:15;:30;;;;:::i;:::-;34098:62;;34235:12;34207:24;:41;;;;:::i;:::-;34179:70;;34333:9;;;;;;;;;;;34327:2;:15;;;;:::i;:::-;34303:20;34276:24;:47;;;;:::i;:::-;:67;;;;:::i;:::-;34268:76;;;;;;33950:572;34387:1;34369:14;:19;34366:156;;;34449:9;;;;;;;;;;;34443:2;:15;;;;:::i;:::-;34437:2;:22;;;;:::i;:::-;34430:29;;;;;34366:156;34505:1;34498:8;;;;;33904:1035;34594:1;34571:10;:19;34582:7;34571:19;;;;;;;;;;;;34558:10;:32;;;;:::i;:::-;:37;34554:374;;34616:31;34663:10;:19;34674:7;34663:19;;;;;;;;;;;;34650:10;:32;;;;:::i;:::-;34616:66;;34724:26;:42;34751:14;34724:42;;;;;;;;;;;;34701:65;;34852:9;;;;;;;;;;;34846:2;:15;;;;:::i;:::-;34822:20;:40;;;;:::i;:::-;34792:26;:71;;;;:::i;:::-;34785:78;;;;;;34554:374;34911:1;34904:8;;;33750:1196;;;;;;:::o;30654:308::-;30749:1;30730:21;;:7;:21;;;;30722:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30815:24;30832:6;30815:12;;:16;;:24;;;;:::i;:::-;30800:12;:39;;;;30871:30;30894:6;30871:9;:18;30881:7;30871:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;30850:9;:18;30860:7;30850:18;;;;;;;;;;;;;;;:51;;;;30938:7;30917:37;;30934:1;30917:37;;;30947:6;30917:37;;;;;;:::i;:::-;;;;;;;;30654:308;;:::o;10989:229::-;11083:1;11063:22;;:8;:22;;;;11055:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;11173:8;11144:38;;11165:6;;;;;;;;;;11144:38;;;;;;;;;;;;11202:8;11193:6;;:17;;;;;;;;;;;;;;;;;;10989:229;:::o;5425:136::-;5483:7;5510:43;5514:1;5517;5510:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;5503:50;;5425:136;;;;:::o;24:622:1:-;;145:80;160:64;217:6;160:64;:::i;:::-;145:80;:::i;:::-;136:89;;245:5;273:6;266:5;259:21;299:4;292:5;288:16;281:23;;324:6;374:3;366:4;358:6;354:17;349:3;345:27;342:36;339:2;;;391:1;388;381:12;339:2;419:1;404:236;429:6;426:1;423:13;404:236;;;496:3;524:37;557:3;545:10;524:37;:::i;:::-;519:3;512:50;591:4;586:3;582:14;575:21;;625:4;620:3;616:14;609:21;;464:176;451:1;448;444:9;439:14;;404:236;;;408:14;126:520;;;;;;;:::o;652:139::-;;736:6;723:20;714:29;;752:33;779:5;752:33;:::i;:::-;704:87;;;;:::o;797:143::-;;885:6;879:13;870:22;;901:33;928:5;901:33;:::i;:::-;860:80;;;;:::o;963:303::-;;1083:3;1076:4;1068:6;1064:17;1060:27;1050:2;;1101:1;1098;1091:12;1050:2;1141:6;1128:20;1166:94;1256:3;1248:6;1241:4;1233:6;1229:17;1166:94;:::i;:::-;1157:103;;1040:226;;;;;:::o;1272:139::-;;1356:6;1343:20;1334:29;;1372:33;1399:5;1372:33;:::i;:::-;1324:87;;;;:::o;1417:262::-;;1525:2;1513:9;1504:7;1500:23;1496:32;1493:2;;;1541:1;1538;1531:12;1493:2;1584:1;1609:53;1654:7;1645:6;1634:9;1630:22;1609:53;:::i;:::-;1599:63;;1555:117;1483:196;;;;:::o;1685:284::-;;1804:2;1792:9;1783:7;1779:23;1775:32;1772:2;;;1820:1;1817;1810:12;1772:2;1863:1;1888:64;1944:7;1935:6;1924:9;1920:22;1888:64;:::i;:::-;1878:74;;1834:128;1762:207;;;;:::o;1975:407::-;;;2100:2;2088:9;2079:7;2075:23;2071:32;2068:2;;;2116:1;2113;2106:12;2068:2;2159:1;2184:53;2229:7;2220:6;2209:9;2205:22;2184:53;:::i;:::-;2174:63;;2130:117;2286:2;2312:53;2357:7;2348:6;2337:9;2333:22;2312:53;:::i;:::-;2302:63;;2257:118;2058:324;;;;;:::o;2388:552::-;;;;2530:2;2518:9;2509:7;2505:23;2501:32;2498:2;;;2546:1;2543;2536:12;2498:2;2589:1;2614:53;2659:7;2650:6;2639:9;2635:22;2614:53;:::i;:::-;2604:63;;2560:117;2716:2;2742:53;2787:7;2778:6;2767:9;2763:22;2742:53;:::i;:::-;2732:63;;2687:118;2844:2;2870:53;2915:7;2906:6;2895:9;2891:22;2870:53;:::i;:::-;2860:63;;2815:118;2488:452;;;;;:::o;2946:407::-;;;3071:2;3059:9;3050:7;3046:23;3042:32;3039:2;;;3087:1;3084;3077:12;3039:2;3130:1;3155:53;3200:7;3191:6;3180:9;3176:22;3155:53;:::i;:::-;3145:63;;3101:117;3257:2;3283:53;3328:7;3319:6;3308:9;3304:22;3283:53;:::i;:::-;3273:63;;3228:118;3029:324;;;;;:::o;3359:405::-;;3492:2;3480:9;3471:7;3467:23;3463:32;3460:2;;;3508:1;3505;3498:12;3460:2;3579:1;3568:9;3564:17;3551:31;3609:18;3601:6;3598:30;3595:2;;;3641:1;3638;3631:12;3595:2;3669:78;3739:7;3730:6;3719:9;3715:22;3669:78;:::i;:::-;3659:88;;3522:235;3450:314;;;;:::o;3770:693::-;;;3945:2;3933:9;3924:7;3920:23;3916:32;3913:2;;;3961:1;3958;3951:12;3913:2;4032:1;4021:9;4017:17;4004:31;4062:18;4054:6;4051:30;4048:2;;;4094:1;4091;4084:12;4048:2;4122:78;4192:7;4183:6;4172:9;4168:22;4122:78;:::i;:::-;4112:88;;3975:235;4277:2;4266:9;4262:18;4249:32;4308:18;4300:6;4297:30;4294:2;;;4340:1;4337;4330:12;4294:2;4368:78;4438:7;4429:6;4418:9;4414:22;4368:78;:::i;:::-;4358:88;;4220:236;3903:560;;;;;:::o;4469:262::-;;4577:2;4565:9;4556:7;4552:23;4548:32;4545:2;;;4593:1;4590;4583:12;4545:2;4636:1;4661:53;4706:7;4697:6;4686:9;4682:22;4661:53;:::i;:::-;4651:63;;4607:117;4535:196;;;;:::o;4737:407::-;;;4862:2;4850:9;4841:7;4837:23;4833:32;4830:2;;;4878:1;4875;4868:12;4830:2;4921:1;4946:53;4991:7;4982:6;4971:9;4967:22;4946:53;:::i;:::-;4936:63;;4892:117;5048:2;5074:53;5119:7;5110:6;5099:9;5095:22;5074:53;:::i;:::-;5064:63;;5019:118;4820:324;;;;;:::o;5150:552::-;;;;5292:2;5280:9;5271:7;5267:23;5263:32;5260:2;;;5308:1;5305;5298:12;5260:2;5351:1;5376:53;5421:7;5412:6;5401:9;5397:22;5376:53;:::i;:::-;5366:63;;5322:117;5478:2;5504:53;5549:7;5540:6;5529:9;5525:22;5504:53;:::i;:::-;5494:63;;5449:118;5606:2;5632:53;5677:7;5668:6;5657:9;5653:22;5632:53;:::i;:::-;5622:63;;5577:118;5250:452;;;;;:::o;5708:118::-;5795:24;5813:5;5795:24;:::i;:::-;5790:3;5783:37;5773:53;;:::o;5832:109::-;5913:21;5928:5;5913:21;:::i;:::-;5908:3;5901:34;5891:50;;:::o;5947:364::-;;6063:39;6096:5;6063:39;:::i;:::-;6118:71;6182:6;6177:3;6118:71;:::i;:::-;6111:78;;6198:52;6243:6;6238:3;6231:4;6224:5;6220:16;6198:52;:::i;:::-;6275:29;6297:6;6275:29;:::i;:::-;6270:3;6266:39;6259:46;;6039:272;;;;;:::o;6317:367::-;;6480:67;6544:2;6539:3;6480:67;:::i;:::-;6473:74;;6577:34;6573:1;6568:3;6564:11;6557:55;6643:5;6638:2;6633:3;6629:12;6622:27;6675:2;6670:3;6666:12;6659:19;;6463:221;;;:::o;6690:369::-;;6853:67;6917:2;6912:3;6853:67;:::i;:::-;6846:74;;6950:34;6946:1;6941:3;6937:11;6930:55;7016:7;7011:2;7006:3;7002:12;6995:29;7050:2;7045:3;7041:12;7034:19;;6836:223;;;:::o;7065:370::-;;7228:67;7292:2;7287:3;7228:67;:::i;:::-;7221:74;;7325:34;7321:1;7316:3;7312:11;7305:55;7391:8;7386:2;7381:3;7377:12;7370:30;7426:2;7421:3;7417:12;7410:19;;7211:224;;;:::o;7441:325::-;;7604:67;7668:2;7663:3;7604:67;:::i;:::-;7597:74;;7701:29;7697:1;7692:3;7688:11;7681:50;7757:2;7752:3;7748:12;7741:19;;7587:179;;;:::o;7772:393::-;;7935:67;7999:2;7994:3;7935:67;:::i;:::-;7928:74;;8032:34;8028:1;8023:3;8019:11;8012:55;8098:31;8093:2;8088:3;8084:12;8077:53;8156:2;8151:3;8147:12;8140:19;;7918:247;;;:::o;8171:330::-;;8334:67;8398:2;8393:3;8334:67;:::i;:::-;8327:74;;8431:34;8427:1;8422:3;8418:11;8411:55;8492:2;8487:3;8483:12;8476:19;;8317:184;;;:::o;8507:367::-;;8670:67;8734:2;8729:3;8670:67;:::i;:::-;8663:74;;8767:34;8763:1;8758:3;8754:11;8747:55;8833:5;8828:2;8823:3;8819:12;8812:27;8865:2;8860:3;8856:12;8849:19;;8653:221;;;:::o;8880:365::-;;9043:67;9107:2;9102:3;9043:67;:::i;:::-;9036:74;;9140:34;9136:1;9131:3;9127:11;9120:55;9206:3;9201:2;9196:3;9192:12;9185:25;9236:2;9231:3;9227:12;9220:19;;9026:219;;;:::o;9251:319::-;;9414:67;9478:2;9473:3;9414:67;:::i;:::-;9407:74;;9511:23;9507:1;9502:3;9498:11;9491:44;9561:2;9556:3;9552:12;9545:19;;9397:173;;;:::o;9576:369::-;;9739:67;9803:2;9798:3;9739:67;:::i;:::-;9732:74;;9836:34;9832:1;9827:3;9823:11;9816:55;9902:7;9897:2;9892:3;9888:12;9881:29;9936:2;9931:3;9927:12;9920:19;;9722:223;;;:::o;9951:391::-;;10114:67;10178:2;10173:3;10114:67;:::i;:::-;10107:74;;10211:34;10207:1;10202:3;10198:11;10191:55;10277:29;10272:2;10267:3;10263:12;10256:51;10333:2;10328:3;10324:12;10317:19;;10097:245;;;:::o;10348:329::-;;10511:67;10575:2;10570:3;10511:67;:::i;:::-;10504:74;;10608:33;10604:1;10599:3;10595:11;10588:54;10668:2;10663:3;10659:12;10652:19;;10494:183;;;:::o;10683:118::-;10770:24;10788:5;10770:24;:::i;:::-;10765:3;10758:37;10748:53;;:::o;10807:112::-;10890:22;10906:5;10890:22;:::i;:::-;10885:3;10878:35;10868:51;;:::o;10925:222::-;;11056:2;11045:9;11041:18;11033:26;;11069:71;11137:1;11126:9;11122:17;11113:6;11069:71;:::i;:::-;11023:124;;;;:::o;11153:210::-;;11278:2;11267:9;11263:18;11255:26;;11291:65;11353:1;11342:9;11338:17;11329:6;11291:65;:::i;:::-;11245:118;;;;:::o;11369:313::-;;11520:2;11509:9;11505:18;11497:26;;11569:9;11563:4;11559:20;11555:1;11544:9;11540:17;11533:47;11597:78;11670:4;11661:6;11597:78;:::i;:::-;11589:86;;11487:195;;;;:::o;11688:419::-;;11892:2;11881:9;11877:18;11869:26;;11941:9;11935:4;11931:20;11927:1;11916:9;11912:17;11905:47;11969:131;12095:4;11969:131;:::i;:::-;11961:139;;11859:248;;;:::o;12113:419::-;;12317:2;12306:9;12302:18;12294:26;;12366:9;12360:4;12356:20;12352:1;12341:9;12337:17;12330:47;12394:131;12520:4;12394:131;:::i;:::-;12386:139;;12284:248;;;:::o;12538:419::-;;12742:2;12731:9;12727:18;12719:26;;12791:9;12785:4;12781:20;12777:1;12766:9;12762:17;12755:47;12819:131;12945:4;12819:131;:::i;:::-;12811:139;;12709:248;;;:::o;12963:419::-;;13167:2;13156:9;13152:18;13144:26;;13216:9;13210:4;13206:20;13202:1;13191:9;13187:17;13180:47;13244:131;13370:4;13244:131;:::i;:::-;13236:139;;13134:248;;;:::o;13388:419::-;;13592:2;13581:9;13577:18;13569:26;;13641:9;13635:4;13631:20;13627:1;13616:9;13612:17;13605:47;13669:131;13795:4;13669:131;:::i;:::-;13661:139;;13559:248;;;:::o;13813:419::-;;14017:2;14006:9;14002:18;13994:26;;14066:9;14060:4;14056:20;14052:1;14041:9;14037:17;14030:47;14094:131;14220:4;14094:131;:::i;:::-;14086:139;;13984:248;;;:::o;14238:419::-;;14442:2;14431:9;14427:18;14419:26;;14491:9;14485:4;14481:20;14477:1;14466:9;14462:17;14455:47;14519:131;14645:4;14519:131;:::i;:::-;14511:139;;14409:248;;;:::o;14663:419::-;;14867:2;14856:9;14852:18;14844:26;;14916:9;14910:4;14906:20;14902:1;14891:9;14887:17;14880:47;14944:131;15070:4;14944:131;:::i;:::-;14936:139;;14834:248;;;:::o;15088:419::-;;15292:2;15281:9;15277:18;15269:26;;15341:9;15335:4;15331:20;15327:1;15316:9;15312:17;15305:47;15369:131;15495:4;15369:131;:::i;:::-;15361:139;;15259:248;;;:::o;15513:419::-;;15717:2;15706:9;15702:18;15694:26;;15766:9;15760:4;15756:20;15752:1;15741:9;15737:17;15730:47;15794:131;15920:4;15794:131;:::i;:::-;15786:139;;15684:248;;;:::o;15938:419::-;;16142:2;16131:9;16127:18;16119:26;;16191:9;16185:4;16181:20;16177:1;16166:9;16162:17;16155:47;16219:131;16345:4;16219:131;:::i;:::-;16211:139;;16109:248;;;:::o;16363:222::-;;16494:2;16483:9;16479:18;16471:26;;16507:71;16575:1;16564:9;16560:17;16551:6;16507:71;:::i;:::-;16461:124;;;;:::o;16591:639::-;;16851:2;16840:9;16836:18;16828:26;;16864:71;16932:1;16921:9;16917:17;16908:6;16864:71;:::i;:::-;16945:72;17013:2;17002:9;16998:18;16989:6;16945:72;:::i;:::-;17064:9;17058:4;17054:20;17049:2;17038:9;17034:18;17027:48;17092:131;17218:4;17092:131;:::i;:::-;17084:139;;16818:412;;;;;:::o;17236:214::-;;17363:2;17352:9;17348:18;17340:26;;17376:67;17440:1;17429:9;17425:17;17416:6;17376:67;:::i;:::-;17330:120;;;;:::o;17456:283::-;;17522:2;17516:9;17506:19;;17564:4;17556:6;17552:17;17671:6;17659:10;17656:22;17635:18;17623:10;17620:34;17617:62;17614:2;;;17682:18;;:::i;:::-;17614:2;17722:10;17718:2;17711:22;17496:243;;;;:::o;17745:311::-;;17912:18;17904:6;17901:30;17898:2;;;17934:18;;:::i;:::-;17898:2;17984:4;17976:6;17972:17;17964:25;;18044:4;18038;18034:15;18026:23;;17827:229;;;:::o;18062:99::-;;18148:5;18142:12;18132:22;;18121:40;;;:::o;18167:169::-;;18285:6;18280:3;18273:19;18325:4;18320:3;18316:14;18301:29;;18263:73;;;;:::o;18342:305::-;;18401:20;18419:1;18401:20;:::i;:::-;18396:25;;18435:20;18453:1;18435:20;:::i;:::-;18430:25;;18589:1;18521:66;18517:74;18514:1;18511:81;18508:2;;;18595:18;;:::i;:::-;18508:2;18639:1;18636;18632:9;18625:16;;18386:261;;;;:::o;18653:185::-;;18710:20;18728:1;18710:20;:::i;:::-;18705:25;;18744:20;18762:1;18744:20;:::i;:::-;18739:25;;18783:1;18773:2;;18788:18;;:::i;:::-;18773:2;18830:1;18827;18823:9;18818:14;;18695:143;;;;:::o;18844:848::-;;;18936:6;18927:15;;18960:5;18951:14;;18974:712;18995:1;18985:8;18982:15;18974:712;;;19090:4;19085:3;19081:14;19075:4;19072:24;19069:2;;;19099:18;;:::i;:::-;19069:2;19149:1;19139:8;19135:16;19132:2;;;19564:4;19557:5;19553:16;19544:25;;19132:2;19614:4;19608;19604:15;19596:23;;19644:32;19667:8;19644:32;:::i;:::-;19632:44;;18974:712;;;18917:775;;;;;;;:::o;19698:281::-;;19780:23;19798:4;19780:23;:::i;:::-;19772:31;;19824:25;19840:8;19824:25;:::i;:::-;19812:37;;19868:104;19905:66;19895:8;19889:4;19868:104;:::i;:::-;19859:113;;19762:217;;;;:::o;19985:1073::-;;20230:8;20220:2;;20251:1;20242:10;;20253:5;;20220:2;20279:4;20269:2;;20296:1;20287:10;;20298:5;;20269:2;20365:4;20413:1;20408:27;;;;20449:1;20444:191;;;;20358:277;;20408:27;20426:1;20417:10;;20428:5;;;20444:191;20489:3;20479:8;20476:17;20473:2;;;20496:18;;:::i;:::-;20473:2;20545:8;20542:1;20538:16;20529:25;;20580:3;20573:5;20570:14;20567:2;;;20587:18;;:::i;:::-;20567:2;20620:5;;;20358:277;;20744:2;20734:8;20731:16;20725:3;20719:4;20716:13;20712:36;20694:2;20684:8;20681:16;20676:2;20670:4;20667:12;20663:35;20647:111;20644:2;;;20800:8;20794:4;20790:19;20781:28;;20835:3;20828:5;20825:14;20822:2;;;20842:18;;:::i;:::-;20822:2;20875:5;;20644:2;20915:42;20953:3;20943:8;20937:4;20934:1;20915:42;:::i;:::-;20900:57;;;;20989:4;20984:3;20980:14;20973:5;20970:25;20967:2;;;20998:18;;:::i;:::-;20967:2;21047:4;21040:5;21036:16;21027:25;;20045:1013;;;;;;:::o;21064:348::-;;21127:20;21145:1;21127:20;:::i;:::-;21122:25;;21161:20;21179:1;21161:20;:::i;:::-;21156:25;;21349:1;21281:66;21277:74;21274:1;21271:81;21266:1;21259:9;21252:17;21248:105;21245:2;;;21356:18;;:::i;:::-;21245:2;21404:1;21401;21397:9;21386:20;;21112:300;;;;:::o;21418:191::-;;21478:20;21496:1;21478:20;:::i;:::-;21473:25;;21512:20;21530:1;21512:20;:::i;:::-;21507:25;;21551:1;21548;21545:8;21542:2;;;21556:18;;:::i;:::-;21542:2;21601:1;21598;21594:9;21586:17;;21463:146;;;;:::o;21615:96::-;;21681:24;21699:5;21681:24;:::i;:::-;21670:35;;21660:51;;;:::o;21717:90::-;;21794:5;21787:13;21780:21;21769:32;;21759:48;;;:::o;21813:126::-;;21890:42;21883:5;21879:54;21868:65;;21858:81;;;:::o;21945:77::-;;22011:5;22000:16;;21990:32;;;:::o;22028:86::-;;22103:4;22096:5;22092:16;22081:27;;22071:43;;;:::o;22120:307::-;22188:1;22198:113;22212:6;22209:1;22206:13;22198:113;;;22297:1;22292:3;22288:11;22282:18;22278:1;22273:3;22269:11;22262:39;22234:2;22231:1;22227:10;22222:15;;22198:113;;;22329:6;22326:1;22323:13;22320:2;;;22409:1;22400:6;22395:3;22391:16;22384:27;22320:2;22169:258;;;;:::o;22433:320::-;;22514:1;22508:4;22504:12;22494:22;;22561:1;22555:4;22551:12;22582:18;22572:2;;22638:4;22630:6;22626:17;22616:27;;22572:2;22700;22692:6;22689:14;22669:18;22666:38;22663:2;;;22719:18;;:::i;:::-;22663:2;22484:269;;;;:::o;22759:233::-;;22821:24;22839:5;22821:24;:::i;:::-;22812:33;;22867:66;22860:5;22857:77;22854:2;;;22937:18;;:::i;:::-;22854:2;22984:1;22977:5;22973:13;22966:20;;22802:190;;;:::o;22998:180::-;23046:77;23043:1;23036:88;23143:4;23140:1;23133:15;23167:4;23164:1;23157:15;23184:180;23232:77;23229:1;23222:88;23329:4;23326:1;23319:15;23353:4;23350:1;23343:15;23370:180;23418:77;23415:1;23408:88;23515:4;23512:1;23505:15;23539:4;23536:1;23529:15;23556:180;23604:77;23601:1;23594:88;23701:4;23698:1;23691:15;23725:4;23722:1;23715:15;23742:102;;23834:2;23830:7;23825:2;23818:5;23814:14;23810:28;23800:38;;23790:54;;;:::o;23850:102::-;;23939:5;23936:1;23932:13;23911:34;;23901:51;;;:::o;23958:122::-;24031:24;24049:5;24031:24;:::i;:::-;24024:5;24021:35;24011:2;;24070:1;24067;24060:12;24011:2;24001:79;:::o;24086:122::-;24159:24;24177:5;24159:24;:::i;:::-;24152:5;24149:35;24139:2;;24198:1;24195;24188:12;24139:2;24129:79;:::o

Swarm Source

ipfs://ec3431357d0ca94f913134ee7789bc4a1332eb9d99fd5c8bd9992f1bd720ae87
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.