ETH Price: $3,321.02 (-3.72%)

Token

BloodMark (BM)
 

Overview

Max Total Supply

50,012,000 BM

Holders

19

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
itsmoma.eth
Balance
1,474 BM

Value
$0.00
0xa86B1ab5bc759FB0B7fc8611e1705688b747f487
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:
BloodMark

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-09-11
*/

// File: @openzeppelin/contracts/utils/Address.sol


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

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

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


// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

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

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

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

// File: @openzeppelin/contracts/utils/Strings.sol


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

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
    uint8 private constant _ADDRESS_LENGTH = 20;

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }

    /**
     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.
     */
    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
    }
}

// File: contracts/bloodmark.sol





pragma solidity ^0.8.10;

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

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

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

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

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

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

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

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

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

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

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

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(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:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(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 virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

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

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

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}


interface ERC721Interface {
    function balanceOf(address whom) external view returns (uint);
}

contract BloodMark is ERC20, Ownable {

    address private GAME_WALLET = 0xbb43fcEFF7Cb40F87f88D34F37f9b7b311D3a6fD;
    address private constant OWNER = 0xD3090CF8D7ECD9c1f41ebFb07c915B637BF4F466; //TC
    address private constant MARKETING = 0xb23e3c30CEE40b6F07cee3705E3Ab2198c3b9F2D; //LL

    ERC721Interface AOW = ERC721Interface(0x08066d3ED45c68dC7DEAcE081d55F9ABB63432ED);

    mapping(address =>  bool) private didPurchaseBundle;
    
    mapping(address => uint256) lastClaimedTime;
    uint256 public bundlePrice = 0.007 ether;
    uint256 public bundleSize = 3000 * (10**decimals());
    uint256 public maxBundleCount = 5000;

    uint256 constant public tokenMaxSupply = 100000000 ether;

    constructor(
        string memory name,
        string memory symbol,
        uint256 initialSupply
    ) ERC20(name, symbol) {
        _mint(GAME_WALLET, initialSupply);
    }

    modifier securityCheck() {
        require(
            msg.sender == owner() ||
            msg.sender == OWNER ||
            msg.sender == MARKETING,
            "Only specific wallets can withdraw"
        );
        
        _;  
    }

    function withdraw() external securityCheck {
        require(address(this).balance > 0, "No balance to withdraw");
        uint256 balance = address(this).balance;

        payable(OWNER).transfer(balance / 100 * 70); // 70% of balance
        payable(MARKETING).transfer(balance / 100 * 30); // 30% of balance
    }

    function mintGameTreasury(uint256 amount) external securityCheck {
        require(totalSupply() + amount < tokenMaxSupply, "Can't mint more than max supply!");
        _mint(GAME_WALLET, amount);
    }

    function purchaseBundle() public payable {
       require(msg.sender == tx.origin, "No Contract Redirect allowed");
       require(AOW.balanceOf(msg.sender) >= 0, "need to hold at least 1 AllOutWar NFT");
       require(balanceOf(msg.sender) == 0, "You can only purchase a bundle if you don't hold any!");
       require(msg.value >= bundlePrice, "Bundle price is 0.007 ETH");
       require(didPurchaseBundle[msg.sender] == false, "You have already purchased a bundle");
       require(maxBundleCount > 0,"Bundles sold out");

       didPurchaseBundle[msg.sender] =  true;
       maxBundleCount -=1;
       _mint(msg.sender, bundleSize );
    }

    function setAOWContract(address aowContract) external securityCheck  {
        AOW = ERC721Interface(aowContract);
    }

    function setGameWallet(address wallet) external securityCheck  {
        GAME_WALLET = wallet;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256","name":"initialSupply","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bundlePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bundleSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[{"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":[],"name":"maxBundleCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintGameTreasury","outputs":[],"stateMutability":"nonpayable","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":[],"name":"purchaseBundle","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"aowContract","type":"address"}],"name":"setAOWContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"setGameWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenMaxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405273bb43fceff7cb40f87f88d34f37f9b7b311d3a6fd600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507308066d3ed45c68dc7deace081d55f9abb63432ed600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506618de76816d8000600a55620000c9620001a760201b60201c565b600a620000d791906200059a565b610bb8620000e69190620005eb565b600b55611388600c55348015620000fc57600080fd5b506040516200376d3803806200376d8339818101604052810190620001229190620007fa565b8282816003908162000135919062000ad5565b50806004908162000147919062000ad5565b5050506200016a6200015e620001b060201b60201c565b620001b860201b60201c565b6200019e600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826200027e60201b60201c565b50505062000ca8565b60006012905090565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620002f0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002e79062000c1d565b60405180910390fd5b6200030460008383620003f660201b60201c565b806002600082825462000318919062000c3f565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200036f919062000c3f565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620003d6919062000c8b565b60405180910390a3620003f260008383620003fb60201b60201c565b5050565b505050565b505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156200048e5780860481111562000466576200046562000400565b5b6001851615620004765780820291505b808102905062000486856200042f565b945062000446565b94509492505050565b600082620004a957600190506200057c565b81620004b957600090506200057c565b8160018114620004d25760028114620004dd5762000513565b60019150506200057c565b60ff841115620004f257620004f162000400565b5b8360020a9150848211156200050c576200050b62000400565b5b506200057c565b5060208310610133831016604e8410600b84101617156200054d5782820a90508381111562000547576200054662000400565b5b6200057c565b6200055c84848460016200043c565b9250905081840481111562000576576200057562000400565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b6000620005a78262000583565b9150620005b4836200058d565b9250620005e37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000497565b905092915050565b6000620005f88262000583565b9150620006058362000583565b9250828202620006158162000583565b915082820484148315176200062f576200062e62000400565b5b5092915050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200069f8262000654565b810181811067ffffffffffffffff82111715620006c157620006c062000665565b5b80604052505050565b6000620006d662000636565b9050620006e4828262000694565b919050565b600067ffffffffffffffff82111562000707576200070662000665565b5b620007128262000654565b9050602081019050919050565b60005b838110156200073f57808201518184015260208101905062000722565b60008484015250505050565b6000620007626200075c84620006e9565b620006ca565b9050828152602081018484840111156200078157620007806200064f565b5b6200078e8482856200071f565b509392505050565b600082601f830112620007ae57620007ad6200064a565b5b8151620007c08482602086016200074b565b91505092915050565b620007d48162000583565b8114620007e057600080fd5b50565b600081519050620007f481620007c9565b92915050565b60008060006060848603121562000816576200081562000640565b5b600084015167ffffffffffffffff81111562000837576200083662000645565b5b620008458682870162000796565b935050602084015167ffffffffffffffff81111562000869576200086862000645565b5b620008778682870162000796565b92505060406200088a86828701620007e3565b9150509250925092565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620008e757607f821691505b602082108103620008fd57620008fc6200089f565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620009677fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000928565b62000973868362000928565b95508019841693508086168417925050509392505050565b6000819050919050565b6000620009b6620009b0620009aa8462000583565b6200098b565b62000583565b9050919050565b6000819050919050565b620009d28362000995565b620009ea620009e182620009bd565b84845462000935565b825550505050565b600090565b62000a01620009f2565b62000a0e818484620009c7565b505050565b5b8181101562000a365762000a2a600082620009f7565b60018101905062000a14565b5050565b601f82111562000a855762000a4f8162000903565b62000a5a8462000918565b8101602085101562000a6a578190505b62000a8262000a798562000918565b83018262000a13565b50505b505050565b600082821c905092915050565b600062000aaa6000198460080262000a8a565b1980831691505092915050565b600062000ac5838362000a97565b9150826002028217905092915050565b62000ae08262000894565b67ffffffffffffffff81111562000afc5762000afb62000665565b5b62000b088254620008ce565b62000b1582828562000a3a565b600060209050601f83116001811462000b4d576000841562000b38578287015190505b62000b44858262000ab7565b86555062000bb4565b601f19841662000b5d8662000903565b60005b8281101562000b875784890151825560018201915060208501945060208101905062000b60565b8683101562000ba7578489015162000ba3601f89168262000a97565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000c05601f8362000bbc565b915062000c128262000bcd565b602082019050919050565b6000602082019050818103600083015262000c388162000bf6565b9050919050565b600062000c4c8262000583565b915062000c598362000583565b925082820190508082111562000c745762000c7362000400565b5b92915050565b62000c858162000583565b82525050565b600060208201905062000ca2600083018462000c7a565b92915050565b612ab58062000cb86000396000f3fe6080604052600436106101405760003560e01c8063808a0a01116100b6578063b1e9f25f1161006f578063b1e9f25f1461045e578063d4e5c6b814610468578063dd62ed3e14610493578063e60cf6af146104d0578063f2fde38b146104fb578063f99cc96e1461052457610140565b8063808a0a011461033a5780638da5cb5b146103635780638dca9e1a1461038e57806395d89b41146103b9578063a457c2d7146103e4578063a9059cbb1461042157610140565b8063395093511161010857806339509351146102405780633ccfd60b1461027d5780636ad634a7146102945780636fc0be3a146102bd57806370a08231146102e6578063715018a61461032357610140565b806306fdde0314610145578063095ea7b31461017057806318160ddd146101ad57806323b872dd146101d8578063313ce56714610215575b600080fd5b34801561015157600080fd5b5061015a61054f565b6040516101679190611c2f565b60405180910390f35b34801561017c57600080fd5b5061019760048036038101906101929190611cea565b6105e1565b6040516101a49190611d45565b60405180910390f35b3480156101b957600080fd5b506101c26105ff565b6040516101cf9190611d6f565b60405180910390f35b3480156101e457600080fd5b506101ff60048036038101906101fa9190611d8a565b610609565b60405161020c9190611d45565b60405180910390f35b34801561022157600080fd5b5061022a610701565b6040516102379190611df9565b60405180910390f35b34801561024c57600080fd5b5061026760048036038101906102629190611cea565b61070a565b6040516102749190611d45565b60405180910390f35b34801561028957600080fd5b506102926107b6565b005b3480156102a057600080fd5b506102bb60048036038101906102b69190611e14565b6109f0565b005b3480156102c957600080fd5b506102e460048036038101906102df9190611e41565b610b3d565b005b3480156102f257600080fd5b5061030d60048036038101906103089190611e14565b610cd4565b60405161031a9190611d6f565b60405180910390f35b34801561032f57600080fd5b50610338610d1c565b005b34801561034657600080fd5b50610361600480360381019061035c9190611e14565b610d30565b005b34801561036f57600080fd5b50610378610e7d565b6040516103859190611e7d565b60405180910390f35b34801561039a57600080fd5b506103a3610ea7565b6040516103b09190611d6f565b60405180910390f35b3480156103c557600080fd5b506103ce610ead565b6040516103db9190611c2f565b60405180910390f35b3480156103f057600080fd5b5061040b60048036038101906104069190611cea565b610f3f565b6040516104189190611d45565b60405180910390f35b34801561042d57600080fd5b5061044860048036038101906104439190611cea565b61102a565b6040516104559190611d45565b60405180910390f35b610466611048565b005b34801561047457600080fd5b5061047d61137d565b60405161048a9190611d6f565b60405180910390f35b34801561049f57600080fd5b506104ba60048036038101906104b59190611e98565b611383565b6040516104c79190611d6f565b60405180910390f35b3480156104dc57600080fd5b506104e561140a565b6040516104f29190611d6f565b60405180910390f35b34801561050757600080fd5b50610522600480360381019061051d9190611e14565b611410565b005b34801561053057600080fd5b50610539611493565b6040516105469190611d6f565b60405180910390f35b60606003805461055e90611f07565b80601f016020809104026020016040519081016040528092919081815260200182805461058a90611f07565b80156105d75780601f106105ac576101008083540402835291602001916105d7565b820191906000526020600020905b8154815290600101906020018083116105ba57829003601f168201915b5050505050905090565b60006105f56105ee6114a2565b84846114aa565b6001905092915050565b6000600254905090565b6000610616848484611673565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006106616114a2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156106e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d890611faa565b60405180910390fd5b6106f5856106ed6114a2565b8584036114aa565b60019150509392505050565b60006012905090565b60006107ac6107176114a2565b8484600160006107256114a2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546107a79190611ff9565b6114aa565b6001905092915050565b6107be610e7d565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610836575073d3090cf8d7ecd9c1f41ebfb07c915b637bf4f46673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80610880575073b23e3c30cee40b6f07cee3705e3ab2198c3b9f2d73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6108bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b69061209f565b60405180910390fd5b60004711610902576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f99061210b565b60405180910390fd5b600047905073d3090cf8d7ecd9c1f41ebfb07c915b637bf4f46673ffffffffffffffffffffffffffffffffffffffff166108fc6046606484610944919061215a565b61094e919061218b565b9081150290604051600060405180830381858888f19350505050158015610979573d6000803e3d6000fd5b5073b23e3c30cee40b6f07cee3705e3ab2198c3b9f2d73ffffffffffffffffffffffffffffffffffffffff166108fc601e6064846109b7919061215a565b6109c1919061218b565b9081150290604051600060405180830381858888f193505050501580156109ec573d6000803e3d6000fd5b5050565b6109f8610e7d565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610a70575073d3090cf8d7ecd9c1f41ebfb07c915b637bf4f46673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80610aba575073b23e3c30cee40b6f07cee3705e3ab2198c3b9f2d73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610af9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af09061209f565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610b45610e7d565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610bbd575073d3090cf8d7ecd9c1f41ebfb07c915b637bf4f46673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80610c07575073b23e3c30cee40b6f07cee3705e3ab2198c3b9f2d73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610c46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3d9061209f565b60405180910390fd5b6a52b7d2dcc80cd2e400000081610c5b6105ff565b610c659190611ff9565b10610ca5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9c90612219565b60405180910390fd5b610cd1600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826118f2565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d24611a51565b610d2e6000611acf565b565b610d38610e7d565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610db0575073d3090cf8d7ecd9c1f41ebfb07c915b637bf4f46673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80610dfa575073b23e3c30cee40b6f07cee3705e3ab2198c3b9f2d73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610e39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e309061209f565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600a5481565b606060048054610ebc90611f07565b80601f0160208091040260200160405190810160405280929190818152602001828054610ee890611f07565b8015610f355780601f10610f0a57610100808354040283529160200191610f35565b820191906000526020600020905b815481529060010190602001808311610f1857829003601f168201915b5050505050905090565b60008060016000610f4e6114a2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561100b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611002906122ab565b60405180910390fd5b61101f6110166114a2565b858584036114aa565b600191505092915050565b600061103e6110376114a2565b8484611673565b6001905092915050565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ad90612317565b60405180910390fd5b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016111139190611e7d565b602060405180830381865afa158015611130573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611154919061234c565b1015611195576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118c906123eb565b60405180910390fd5b60006111a033610cd4565b146111e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d79061247d565b60405180910390fd5b600a54341015611225576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121c906124e9565b60405180910390fd5b60001515600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146112b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112af9061257b565b60405180910390fd5b6000600c54116112fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f4906125e7565b60405180910390fd5b6001600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60008282546113689190612607565b9250508190555061137b33600b546118f2565b565b600b5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600c5481565b611418611a51565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611487576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147e906126ad565b60405180910390fd5b61149081611acf565b50565b6a52b7d2dcc80cd2e400000081565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611519576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115109061273f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611588576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157f906127d1565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516116669190611d6f565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036116e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d990612863565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611751576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611748906128f5565b60405180910390fd5b61175c838383611b95565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156117e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d990612987565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118759190611ff9565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516118d99190611d6f565b60405180910390a36118ec848484611b9a565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611961576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611958906129f3565b60405180910390fd5b61196d60008383611b95565b806002600082825461197f9190611ff9565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119d49190611ff9565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611a399190611d6f565b60405180910390a3611a4d60008383611b9a565b5050565b611a596114a2565b73ffffffffffffffffffffffffffffffffffffffff16611a77610e7d565b73ffffffffffffffffffffffffffffffffffffffff1614611acd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac490612a5f565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611bd9578082015181840152602081019050611bbe565b60008484015250505050565b6000601f19601f8301169050919050565b6000611c0182611b9f565b611c0b8185611baa565b9350611c1b818560208601611bbb565b611c2481611be5565b840191505092915050565b60006020820190508181036000830152611c498184611bf6565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611c8182611c56565b9050919050565b611c9181611c76565b8114611c9c57600080fd5b50565b600081359050611cae81611c88565b92915050565b6000819050919050565b611cc781611cb4565b8114611cd257600080fd5b50565b600081359050611ce481611cbe565b92915050565b60008060408385031215611d0157611d00611c51565b5b6000611d0f85828601611c9f565b9250506020611d2085828601611cd5565b9150509250929050565b60008115159050919050565b611d3f81611d2a565b82525050565b6000602082019050611d5a6000830184611d36565b92915050565b611d6981611cb4565b82525050565b6000602082019050611d846000830184611d60565b92915050565b600080600060608486031215611da357611da2611c51565b5b6000611db186828701611c9f565b9350506020611dc286828701611c9f565b9250506040611dd386828701611cd5565b9150509250925092565b600060ff82169050919050565b611df381611ddd565b82525050565b6000602082019050611e0e6000830184611dea565b92915050565b600060208284031215611e2a57611e29611c51565b5b6000611e3884828501611c9f565b91505092915050565b600060208284031215611e5757611e56611c51565b5b6000611e6584828501611cd5565b91505092915050565b611e7781611c76565b82525050565b6000602082019050611e926000830184611e6e565b92915050565b60008060408385031215611eaf57611eae611c51565b5b6000611ebd85828601611c9f565b9250506020611ece85828601611c9f565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611f1f57607f821691505b602082108103611f3257611f31611ed8565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000611f94602883611baa565b9150611f9f82611f38565b604082019050919050565b60006020820190508181036000830152611fc381611f87565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061200482611cb4565b915061200f83611cb4565b925082820190508082111561202757612026611fca565b5b92915050565b7f4f6e6c792073706563696669632077616c6c6574732063616e2077697468647260008201527f6177000000000000000000000000000000000000000000000000000000000000602082015250565b6000612089602283611baa565b91506120948261202d565b604082019050919050565b600060208201905081810360008301526120b88161207c565b9050919050565b7f4e6f2062616c616e636520746f20776974686472617700000000000000000000600082015250565b60006120f5601683611baa565b9150612100826120bf565b602082019050919050565b60006020820190508181036000830152612124816120e8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061216582611cb4565b915061217083611cb4565b9250826121805761217f61212b565b5b828204905092915050565b600061219682611cb4565b91506121a183611cb4565b92508282026121af81611cb4565b915082820484148315176121c6576121c5611fca565b5b5092915050565b7f43616e2774206d696e74206d6f7265207468616e206d617820737570706c7921600082015250565b6000612203602083611baa565b915061220e826121cd565b602082019050919050565b60006020820190508181036000830152612232816121f6565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612295602583611baa565b91506122a082612239565b604082019050919050565b600060208201905081810360008301526122c481612288565b9050919050565b7f4e6f20436f6e747261637420526564697265637420616c6c6f77656400000000600082015250565b6000612301601c83611baa565b915061230c826122cb565b602082019050919050565b60006020820190508181036000830152612330816122f4565b9050919050565b60008151905061234681611cbe565b92915050565b60006020828403121561236257612361611c51565b5b600061237084828501612337565b91505092915050565b7f6e65656420746f20686f6c64206174206c65617374203120416c6c4f7574576160008201527f72204e4654000000000000000000000000000000000000000000000000000000602082015250565b60006123d5602583611baa565b91506123e082612379565b604082019050919050565b60006020820190508181036000830152612404816123c8565b9050919050565b7f596f752063616e206f6e6c7920707572636861736520612062756e646c65206960008201527f6620796f7520646f6e277420686f6c6420616e79210000000000000000000000602082015250565b6000612467603583611baa565b91506124728261240b565b604082019050919050565b600060208201905081810360008301526124968161245a565b9050919050565b7f42756e646c6520707269636520697320302e3030372045544800000000000000600082015250565b60006124d3601983611baa565b91506124de8261249d565b602082019050919050565b60006020820190508181036000830152612502816124c6565b9050919050565b7f596f75206861766520616c72656164792070757263686173656420612062756e60008201527f646c650000000000000000000000000000000000000000000000000000000000602082015250565b6000612565602383611baa565b915061257082612509565b604082019050919050565b6000602082019050818103600083015261259481612558565b9050919050565b7f42756e646c657320736f6c64206f757400000000000000000000000000000000600082015250565b60006125d1601083611baa565b91506125dc8261259b565b602082019050919050565b60006020820190508181036000830152612600816125c4565b9050919050565b600061261282611cb4565b915061261d83611cb4565b925082820390508181111561263557612634611fca565b5b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612697602683611baa565b91506126a28261263b565b604082019050919050565b600060208201905081810360008301526126c68161268a565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612729602483611baa565b9150612734826126cd565b604082019050919050565b600060208201905081810360008301526127588161271c565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006127bb602283611baa565b91506127c68261275f565b604082019050919050565b600060208201905081810360008301526127ea816127ae565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061284d602583611baa565b9150612858826127f1565b604082019050919050565b6000602082019050818103600083015261287c81612840565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006128df602383611baa565b91506128ea82612883565b604082019050919050565b6000602082019050818103600083015261290e816128d2565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612971602683611baa565b915061297c82612915565b604082019050919050565b600060208201905081810360008301526129a081612964565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006129dd601f83611baa565b91506129e8826129a7565b602082019050919050565b60006020820190508181036000830152612a0c816129d0565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612a49602083611baa565b9150612a5482612a13565b602082019050919050565b60006020820190508181036000830152612a7881612a3c565b905091905056fea2646970667358221220904eaa02ca844da109354814eae023e53167320cfb6273011755333eaef5d1fb64736f6c63430008110033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000295be96e640669720000000000000000000000000000000000000000000000000000000000000000000009426c6f6f644d61726b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002424d000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106101405760003560e01c8063808a0a01116100b6578063b1e9f25f1161006f578063b1e9f25f1461045e578063d4e5c6b814610468578063dd62ed3e14610493578063e60cf6af146104d0578063f2fde38b146104fb578063f99cc96e1461052457610140565b8063808a0a011461033a5780638da5cb5b146103635780638dca9e1a1461038e57806395d89b41146103b9578063a457c2d7146103e4578063a9059cbb1461042157610140565b8063395093511161010857806339509351146102405780633ccfd60b1461027d5780636ad634a7146102945780636fc0be3a146102bd57806370a08231146102e6578063715018a61461032357610140565b806306fdde0314610145578063095ea7b31461017057806318160ddd146101ad57806323b872dd146101d8578063313ce56714610215575b600080fd5b34801561015157600080fd5b5061015a61054f565b6040516101679190611c2f565b60405180910390f35b34801561017c57600080fd5b5061019760048036038101906101929190611cea565b6105e1565b6040516101a49190611d45565b60405180910390f35b3480156101b957600080fd5b506101c26105ff565b6040516101cf9190611d6f565b60405180910390f35b3480156101e457600080fd5b506101ff60048036038101906101fa9190611d8a565b610609565b60405161020c9190611d45565b60405180910390f35b34801561022157600080fd5b5061022a610701565b6040516102379190611df9565b60405180910390f35b34801561024c57600080fd5b5061026760048036038101906102629190611cea565b61070a565b6040516102749190611d45565b60405180910390f35b34801561028957600080fd5b506102926107b6565b005b3480156102a057600080fd5b506102bb60048036038101906102b69190611e14565b6109f0565b005b3480156102c957600080fd5b506102e460048036038101906102df9190611e41565b610b3d565b005b3480156102f257600080fd5b5061030d60048036038101906103089190611e14565b610cd4565b60405161031a9190611d6f565b60405180910390f35b34801561032f57600080fd5b50610338610d1c565b005b34801561034657600080fd5b50610361600480360381019061035c9190611e14565b610d30565b005b34801561036f57600080fd5b50610378610e7d565b6040516103859190611e7d565b60405180910390f35b34801561039a57600080fd5b506103a3610ea7565b6040516103b09190611d6f565b60405180910390f35b3480156103c557600080fd5b506103ce610ead565b6040516103db9190611c2f565b60405180910390f35b3480156103f057600080fd5b5061040b60048036038101906104069190611cea565b610f3f565b6040516104189190611d45565b60405180910390f35b34801561042d57600080fd5b5061044860048036038101906104439190611cea565b61102a565b6040516104559190611d45565b60405180910390f35b610466611048565b005b34801561047457600080fd5b5061047d61137d565b60405161048a9190611d6f565b60405180910390f35b34801561049f57600080fd5b506104ba60048036038101906104b59190611e98565b611383565b6040516104c79190611d6f565b60405180910390f35b3480156104dc57600080fd5b506104e561140a565b6040516104f29190611d6f565b60405180910390f35b34801561050757600080fd5b50610522600480360381019061051d9190611e14565b611410565b005b34801561053057600080fd5b50610539611493565b6040516105469190611d6f565b60405180910390f35b60606003805461055e90611f07565b80601f016020809104026020016040519081016040528092919081815260200182805461058a90611f07565b80156105d75780601f106105ac576101008083540402835291602001916105d7565b820191906000526020600020905b8154815290600101906020018083116105ba57829003601f168201915b5050505050905090565b60006105f56105ee6114a2565b84846114aa565b6001905092915050565b6000600254905090565b6000610616848484611673565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006106616114a2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156106e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d890611faa565b60405180910390fd5b6106f5856106ed6114a2565b8584036114aa565b60019150509392505050565b60006012905090565b60006107ac6107176114a2565b8484600160006107256114a2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546107a79190611ff9565b6114aa565b6001905092915050565b6107be610e7d565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610836575073d3090cf8d7ecd9c1f41ebfb07c915b637bf4f46673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80610880575073b23e3c30cee40b6f07cee3705e3ab2198c3b9f2d73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6108bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b69061209f565b60405180910390fd5b60004711610902576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f99061210b565b60405180910390fd5b600047905073d3090cf8d7ecd9c1f41ebfb07c915b637bf4f46673ffffffffffffffffffffffffffffffffffffffff166108fc6046606484610944919061215a565b61094e919061218b565b9081150290604051600060405180830381858888f19350505050158015610979573d6000803e3d6000fd5b5073b23e3c30cee40b6f07cee3705e3ab2198c3b9f2d73ffffffffffffffffffffffffffffffffffffffff166108fc601e6064846109b7919061215a565b6109c1919061218b565b9081150290604051600060405180830381858888f193505050501580156109ec573d6000803e3d6000fd5b5050565b6109f8610e7d565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610a70575073d3090cf8d7ecd9c1f41ebfb07c915b637bf4f46673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80610aba575073b23e3c30cee40b6f07cee3705e3ab2198c3b9f2d73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610af9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af09061209f565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610b45610e7d565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610bbd575073d3090cf8d7ecd9c1f41ebfb07c915b637bf4f46673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80610c07575073b23e3c30cee40b6f07cee3705e3ab2198c3b9f2d73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610c46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3d9061209f565b60405180910390fd5b6a52b7d2dcc80cd2e400000081610c5b6105ff565b610c659190611ff9565b10610ca5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9c90612219565b60405180910390fd5b610cd1600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826118f2565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d24611a51565b610d2e6000611acf565b565b610d38610e7d565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610db0575073d3090cf8d7ecd9c1f41ebfb07c915b637bf4f46673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80610dfa575073b23e3c30cee40b6f07cee3705e3ab2198c3b9f2d73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610e39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e309061209f565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600a5481565b606060048054610ebc90611f07565b80601f0160208091040260200160405190810160405280929190818152602001828054610ee890611f07565b8015610f355780601f10610f0a57610100808354040283529160200191610f35565b820191906000526020600020905b815481529060010190602001808311610f1857829003601f168201915b5050505050905090565b60008060016000610f4e6114a2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561100b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611002906122ab565b60405180910390fd5b61101f6110166114a2565b858584036114aa565b600191505092915050565b600061103e6110376114a2565b8484611673565b6001905092915050565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ad90612317565b60405180910390fd5b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016111139190611e7d565b602060405180830381865afa158015611130573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611154919061234c565b1015611195576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118c906123eb565b60405180910390fd5b60006111a033610cd4565b146111e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d79061247d565b60405180910390fd5b600a54341015611225576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121c906124e9565b60405180910390fd5b60001515600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146112b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112af9061257b565b60405180910390fd5b6000600c54116112fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f4906125e7565b60405180910390fd5b6001600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60008282546113689190612607565b9250508190555061137b33600b546118f2565b565b600b5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600c5481565b611418611a51565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611487576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147e906126ad565b60405180910390fd5b61149081611acf565b50565b6a52b7d2dcc80cd2e400000081565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611519576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115109061273f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611588576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157f906127d1565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516116669190611d6f565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036116e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d990612863565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611751576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611748906128f5565b60405180910390fd5b61175c838383611b95565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156117e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d990612987565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118759190611ff9565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516118d99190611d6f565b60405180910390a36118ec848484611b9a565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611961576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611958906129f3565b60405180910390fd5b61196d60008383611b95565b806002600082825461197f9190611ff9565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119d49190611ff9565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611a399190611d6f565b60405180910390a3611a4d60008383611b9a565b5050565b611a596114a2565b73ffffffffffffffffffffffffffffffffffffffff16611a77610e7d565b73ffffffffffffffffffffffffffffffffffffffff1614611acd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac490612a5f565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611bd9578082015181840152602081019050611bbe565b60008484015250505050565b6000601f19601f8301169050919050565b6000611c0182611b9f565b611c0b8185611baa565b9350611c1b818560208601611bbb565b611c2481611be5565b840191505092915050565b60006020820190508181036000830152611c498184611bf6565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611c8182611c56565b9050919050565b611c9181611c76565b8114611c9c57600080fd5b50565b600081359050611cae81611c88565b92915050565b6000819050919050565b611cc781611cb4565b8114611cd257600080fd5b50565b600081359050611ce481611cbe565b92915050565b60008060408385031215611d0157611d00611c51565b5b6000611d0f85828601611c9f565b9250506020611d2085828601611cd5565b9150509250929050565b60008115159050919050565b611d3f81611d2a565b82525050565b6000602082019050611d5a6000830184611d36565b92915050565b611d6981611cb4565b82525050565b6000602082019050611d846000830184611d60565b92915050565b600080600060608486031215611da357611da2611c51565b5b6000611db186828701611c9f565b9350506020611dc286828701611c9f565b9250506040611dd386828701611cd5565b9150509250925092565b600060ff82169050919050565b611df381611ddd565b82525050565b6000602082019050611e0e6000830184611dea565b92915050565b600060208284031215611e2a57611e29611c51565b5b6000611e3884828501611c9f565b91505092915050565b600060208284031215611e5757611e56611c51565b5b6000611e6584828501611cd5565b91505092915050565b611e7781611c76565b82525050565b6000602082019050611e926000830184611e6e565b92915050565b60008060408385031215611eaf57611eae611c51565b5b6000611ebd85828601611c9f565b9250506020611ece85828601611c9f565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611f1f57607f821691505b602082108103611f3257611f31611ed8565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000611f94602883611baa565b9150611f9f82611f38565b604082019050919050565b60006020820190508181036000830152611fc381611f87565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061200482611cb4565b915061200f83611cb4565b925082820190508082111561202757612026611fca565b5b92915050565b7f4f6e6c792073706563696669632077616c6c6574732063616e2077697468647260008201527f6177000000000000000000000000000000000000000000000000000000000000602082015250565b6000612089602283611baa565b91506120948261202d565b604082019050919050565b600060208201905081810360008301526120b88161207c565b9050919050565b7f4e6f2062616c616e636520746f20776974686472617700000000000000000000600082015250565b60006120f5601683611baa565b9150612100826120bf565b602082019050919050565b60006020820190508181036000830152612124816120e8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061216582611cb4565b915061217083611cb4565b9250826121805761217f61212b565b5b828204905092915050565b600061219682611cb4565b91506121a183611cb4565b92508282026121af81611cb4565b915082820484148315176121c6576121c5611fca565b5b5092915050565b7f43616e2774206d696e74206d6f7265207468616e206d617820737570706c7921600082015250565b6000612203602083611baa565b915061220e826121cd565b602082019050919050565b60006020820190508181036000830152612232816121f6565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612295602583611baa565b91506122a082612239565b604082019050919050565b600060208201905081810360008301526122c481612288565b9050919050565b7f4e6f20436f6e747261637420526564697265637420616c6c6f77656400000000600082015250565b6000612301601c83611baa565b915061230c826122cb565b602082019050919050565b60006020820190508181036000830152612330816122f4565b9050919050565b60008151905061234681611cbe565b92915050565b60006020828403121561236257612361611c51565b5b600061237084828501612337565b91505092915050565b7f6e65656420746f20686f6c64206174206c65617374203120416c6c4f7574576160008201527f72204e4654000000000000000000000000000000000000000000000000000000602082015250565b60006123d5602583611baa565b91506123e082612379565b604082019050919050565b60006020820190508181036000830152612404816123c8565b9050919050565b7f596f752063616e206f6e6c7920707572636861736520612062756e646c65206960008201527f6620796f7520646f6e277420686f6c6420616e79210000000000000000000000602082015250565b6000612467603583611baa565b91506124728261240b565b604082019050919050565b600060208201905081810360008301526124968161245a565b9050919050565b7f42756e646c6520707269636520697320302e3030372045544800000000000000600082015250565b60006124d3601983611baa565b91506124de8261249d565b602082019050919050565b60006020820190508181036000830152612502816124c6565b9050919050565b7f596f75206861766520616c72656164792070757263686173656420612062756e60008201527f646c650000000000000000000000000000000000000000000000000000000000602082015250565b6000612565602383611baa565b915061257082612509565b604082019050919050565b6000602082019050818103600083015261259481612558565b9050919050565b7f42756e646c657320736f6c64206f757400000000000000000000000000000000600082015250565b60006125d1601083611baa565b91506125dc8261259b565b602082019050919050565b60006020820190508181036000830152612600816125c4565b9050919050565b600061261282611cb4565b915061261d83611cb4565b925082820390508181111561263557612634611fca565b5b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612697602683611baa565b91506126a28261263b565b604082019050919050565b600060208201905081810360008301526126c68161268a565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612729602483611baa565b9150612734826126cd565b604082019050919050565b600060208201905081810360008301526127588161271c565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006127bb602283611baa565b91506127c68261275f565b604082019050919050565b600060208201905081810360008301526127ea816127ae565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061284d602583611baa565b9150612858826127f1565b604082019050919050565b6000602082019050818103600083015261287c81612840565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006128df602383611baa565b91506128ea82612883565b604082019050919050565b6000602082019050818103600083015261290e816128d2565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612971602683611baa565b915061297c82612915565b604082019050919050565b600060208201905081810360008301526129a081612964565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006129dd601f83611baa565b91506129e8826129a7565b602082019050919050565b60006020820190508181036000830152612a0c816129d0565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612a49602083611baa565b9150612a5482612a13565b602082019050919050565b60006020820190508181036000830152612a7881612a3c565b905091905056fea2646970667358221220904eaa02ca844da109354814eae023e53167320cfb6273011755333eaef5d1fb64736f6c63430008110033

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000295be96e640669720000000000000000000000000000000000000000000000000000000000000000000009426c6f6f644d61726b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002424d000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name (string): BloodMark
Arg [1] : symbol (string): BM
Arg [2] : initialSupply (uint256): 50000000000000000000000000

-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 000000000000000000000000000000000000000000295be96e64066972000000
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [4] : 426c6f6f644d61726b0000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [6] : 424d000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

30051:2614:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19986:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22153:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21106:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22804:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20948:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23705:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31223:322;;;;;;;;;;;;;:::i;:::-;;32430:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31553:205;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21277:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11329:103;;;;;;;;;;;;;:::i;:::-;;32560:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10681:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30560:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20205:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24423:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21617:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31766:656;;;:::i;:::-;;30607:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21855:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30665:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11587:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30710:56;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19986:100;20040:13;20073:5;20066:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19986:100;:::o;22153:169::-;22236:4;22253:39;22262:12;:10;:12::i;:::-;22276:7;22285:6;22253:8;:39::i;:::-;22310:4;22303:11;;22153:169;;;;:::o;21106:108::-;21167:7;21194:12;;21187:19;;21106:108;:::o;22804:492::-;22944:4;22961:36;22971:6;22979:9;22990:6;22961:9;:36::i;:::-;23010:24;23037:11;:19;23049:6;23037:19;;;;;;;;;;;;;;;:33;23057:12;:10;:12::i;:::-;23037:33;;;;;;;;;;;;;;;;23010:60;;23109:6;23089:16;:26;;23081:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;23196:57;23205:6;23213:12;:10;:12::i;:::-;23246:6;23227:16;:25;23196:8;:57::i;:::-;23284:4;23277:11;;;22804:492;;;;;:::o;20948:93::-;21006:5;21031:2;21024:9;;20948:93;:::o;23705:215::-;23793:4;23810:80;23819:12;:10;:12::i;:::-;23833:7;23879:10;23842:11;:25;23854:12;:10;:12::i;:::-;23842:25;;;;;;;;;;;;;;;:34;23868:7;23842:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;23810:8;:80::i;:::-;23908:4;23901:11;;23705:215;;;;:::o;31223:322::-;31038:7;:5;:7::i;:::-;31024:21;;:10;:21;;;:57;;;;30209:42;31062:19;;:10;:19;;;31024:57;:97;;;;30300:42;31098:23;;:10;:23;;;31024:97;31002:181;;;;;;;;;;;;:::i;:::-;;;;;;;;;31309:1:::1;31285:21;:25;31277:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;31348:15;31366:21;31348:39;;30209:42;31400:23;;:43;31440:2;31434:3;31424:7;:13;;;;:::i;:::-;:18;;;;:::i;:::-;31400:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;30300:42;31472:27;;:47;31516:2;31510:3;31500:7;:13;;;;:::i;:::-;:18;;;;:::i;:::-;31472:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;31266:279;31223:322::o:0;32430:122::-;31038:7;:5;:7::i;:::-;31024:21;;:10;:21;;;:57;;;;30209:42;31062:19;;:10;:19;;;31024:57;:97;;;;30300:42;31098:23;;:10;:23;;;31024:97;31002:181;;;;;;;;;;;;:::i;:::-;;;;;;;;;32532:11:::1;32510:3;;:34;;;;;;;;;;;;;;;;;;32430:122:::0;:::o;31553:205::-;31038:7;:5;:7::i;:::-;31024:21;;:10;:21;;;:57;;;;30209:42;31062:19;;:10;:19;;;31024:57;:97;;;;30300:42;31098:23;;:10;:23;;;31024:97;31002:181;;;;;;;;;;;;:::i;:::-;;;;;;;;;30751:15:::1;31653:6;31637:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:39;31629:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;31724:26;31730:11;;;;;;;;;;;31743:6;31724:5;:26::i;:::-;31553:205:::0;:::o;21277:127::-;21351:7;21378:9;:18;21388:7;21378:18;;;;;;;;;;;;;;;;21371:25;;21277:127;;;:::o;11329:103::-;10567:13;:11;:13::i;:::-;11394:30:::1;11421:1;11394:18;:30::i;:::-;11329:103::o:0;32560:102::-;31038:7;:5;:7::i;:::-;31024:21;;:10;:21;;;:57;;;;30209:42;31062:19;;:10;:19;;;31024:57;:97;;;;30300:42;31098:23;;:10;:23;;;31024:97;31002:181;;;;;;;;;;;;:::i;:::-;;;;;;;;;32648:6:::1;32634:11;;:20;;;;;;;;;;;;;;;;;;32560:102:::0;:::o;10681:87::-;10727:7;10754:6;;;;;;;;;;;10747:13;;10681:87;:::o;30560:40::-;;;;:::o;20205:104::-;20261:13;20294:7;20287:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20205:104;:::o;24423:413::-;24516:4;24533:24;24560:11;:25;24572:12;:10;:12::i;:::-;24560:25;;;;;;;;;;;;;;;:34;24586:7;24560:34;;;;;;;;;;;;;;;;24533:61;;24633:15;24613:16;:35;;24605:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;24726:67;24735:12;:10;:12::i;:::-;24749:7;24777:15;24758:16;:34;24726:8;:67::i;:::-;24824:4;24817:11;;;24423:413;;;;:::o;21617:175::-;21703:4;21720:42;21730:12;:10;:12::i;:::-;21744:9;21755:6;21720:9;:42::i;:::-;21780:4;21773:11;;21617:175;;;;:::o;31766:656::-;31839:9;31825:23;;:10;:23;;;31817:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31928:1;31899:3;;;;;;;;;;;:13;;;31913:10;31899:25;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:30;;31891:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;32014:1;31989:21;31999:10;31989:9;:21::i;:::-;:26;31981:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;32104:11;;32091:9;:24;;32083:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;32196:5;32163:38;;:17;:29;32181:10;32163:29;;;;;;;;;;;;;;;;;;;;;;;;;:38;;;32155:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;32276:1;32259:14;;:18;32251:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;32342:4;32309:17;:29;32327:10;32309:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;32373:1;32356:14;;:18;;;;;;;:::i;:::-;;;;;;;;32384:30;32390:10;32402;;32384:5;:30::i;:::-;31766:656::o;30607:51::-;;;;:::o;21855:151::-;21944:7;21971:11;:18;21983:5;21971:18;;;;;;;;;;;;;;;:27;21990:7;21971:27;;;;;;;;;;;;;;;;21964:34;;21855:151;;;;:::o;30665:36::-;;;;:::o;11587:201::-;10567:13;:11;:13::i;:::-;11696:1:::1;11676:22;;:8;:22;;::::0;11668:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;11752:28;11771:8;11752:18;:28::i;:::-;11587:201:::0;:::o;30710:56::-;30751:15;30710:56;:::o;9232:98::-;9285:7;9312:10;9305:17;;9232:98;:::o;28107:380::-;28260:1;28243:19;;:5;:19;;;28235:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28341:1;28322:21;;:7;:21;;;28314:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28425:6;28395:11;:18;28407:5;28395:18;;;;;;;;;;;;;;;:27;28414:7;28395:27;;;;;;;;;;;;;;;:36;;;;28463:7;28447:32;;28456:5;28447:32;;;28472:6;28447:32;;;;;;:::i;:::-;;;;;;;;28107:380;;;:::o;25326:733::-;25484:1;25466:20;;:6;:20;;;25458:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;25568:1;25547:23;;:9;:23;;;25539:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;25623:47;25644:6;25652:9;25663:6;25623:20;:47::i;:::-;25683:21;25707:9;:17;25717:6;25707:17;;;;;;;;;;;;;;;;25683:41;;25760:6;25743:13;:23;;25735:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25881:6;25865:13;:22;25845:9;:17;25855:6;25845:17;;;;;;;;;;;;;;;:42;;;;25933:6;25909:9;:20;25919:9;25909:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;25974:9;25957:35;;25966:6;25957:35;;;25985:6;25957:35;;;;;;:::i;:::-;;;;;;;;26005:46;26025:6;26033:9;26044:6;26005:19;:46::i;:::-;25447:612;25326:733;;;:::o;26346:399::-;26449:1;26430:21;;:7;:21;;;26422:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;26500:49;26529:1;26533:7;26542:6;26500:20;:49::i;:::-;26578:6;26562:12;;:22;;;;;;;:::i;:::-;;;;;;;;26617:6;26595:9;:18;26605:7;26595:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;26660:7;26639:37;;26656:1;26639:37;;;26669:6;26639:37;;;;;;:::i;:::-;;;;;;;;26689:48;26717:1;26721:7;26730:6;26689:19;:48::i;:::-;26346:399;;:::o;10846:132::-;10921:12;:10;:12::i;:::-;10910:23;;:7;:5;:7::i;:::-;:23;;;10902:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10846:132::o;11948:191::-;12022:16;12041:6;;;;;;;;;;;12022:25;;12067:8;12058:6;;:17;;;;;;;;;;;;;;;;;;12122:8;12091:40;;12112:8;12091:40;;;;;;;;;;;;12011:128;11948:191;:::o;29087:125::-;;;;:::o;29816:124::-;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:619::-;3875:6;3883;3891;3940:2;3928:9;3919:7;3915:23;3911:32;3908:119;;;3946:79;;:::i;:::-;3908:119;4066:1;4091:53;4136:7;4127:6;4116:9;4112:22;4091:53;:::i;:::-;4081:63;;4037:117;4193:2;4219:53;4264:7;4255:6;4244:9;4240:22;4219:53;:::i;:::-;4209:63;;4164:118;4321:2;4347:53;4392:7;4383:6;4372:9;4368:22;4347:53;:::i;:::-;4337:63;;4292:118;3798:619;;;;;:::o;4423:86::-;4458:7;4498:4;4491:5;4487:16;4476:27;;4423:86;;;:::o;4515:112::-;4598:22;4614:5;4598:22;:::i;:::-;4593:3;4586:35;4515:112;;:::o;4633:214::-;4722:4;4760:2;4749:9;4745:18;4737:26;;4773:67;4837:1;4826:9;4822:17;4813:6;4773:67;:::i;:::-;4633:214;;;;:::o;4853:329::-;4912:6;4961:2;4949:9;4940:7;4936:23;4932:32;4929:119;;;4967:79;;:::i;:::-;4929:119;5087:1;5112:53;5157:7;5148:6;5137:9;5133:22;5112:53;:::i;:::-;5102:63;;5058:117;4853:329;;;;:::o;5188:::-;5247:6;5296:2;5284:9;5275:7;5271:23;5267:32;5264:119;;;5302:79;;:::i;:::-;5264:119;5422:1;5447:53;5492:7;5483:6;5472:9;5468:22;5447:53;:::i;:::-;5437:63;;5393:117;5188:329;;;;:::o;5523:118::-;5610:24;5628:5;5610:24;:::i;:::-;5605:3;5598:37;5523:118;;:::o;5647:222::-;5740:4;5778:2;5767:9;5763:18;5755:26;;5791:71;5859:1;5848:9;5844:17;5835:6;5791:71;:::i;:::-;5647:222;;;;:::o;5875:474::-;5943:6;5951;6000:2;5988:9;5979:7;5975:23;5971:32;5968:119;;;6006:79;;:::i;:::-;5968:119;6126:1;6151:53;6196:7;6187:6;6176:9;6172:22;6151:53;:::i;:::-;6141:63;;6097:117;6253:2;6279:53;6324:7;6315:6;6304:9;6300:22;6279:53;:::i;:::-;6269:63;;6224:118;5875:474;;;;;:::o;6355:180::-;6403:77;6400:1;6393:88;6500:4;6497:1;6490:15;6524:4;6521:1;6514:15;6541:320;6585:6;6622:1;6616:4;6612:12;6602:22;;6669:1;6663:4;6659:12;6690:18;6680:81;;6746:4;6738:6;6734:17;6724:27;;6680:81;6808:2;6800:6;6797:14;6777:18;6774:38;6771:84;;6827:18;;:::i;:::-;6771:84;6592:269;6541:320;;;:::o;6867:227::-;7007:34;7003:1;6995:6;6991:14;6984:58;7076:10;7071:2;7063:6;7059:15;7052:35;6867:227;:::o;7100:366::-;7242:3;7263:67;7327:2;7322:3;7263:67;:::i;:::-;7256:74;;7339:93;7428:3;7339:93;:::i;:::-;7457:2;7452:3;7448:12;7441:19;;7100:366;;;:::o;7472:419::-;7638:4;7676:2;7665:9;7661:18;7653:26;;7725:9;7719:4;7715:20;7711:1;7700:9;7696:17;7689:47;7753:131;7879:4;7753:131;:::i;:::-;7745:139;;7472:419;;;:::o;7897:180::-;7945:77;7942:1;7935:88;8042:4;8039:1;8032:15;8066:4;8063:1;8056:15;8083:191;8123:3;8142:20;8160:1;8142:20;:::i;:::-;8137:25;;8176:20;8194:1;8176:20;:::i;:::-;8171:25;;8219:1;8216;8212:9;8205:16;;8240:3;8237:1;8234:10;8231:36;;;8247:18;;:::i;:::-;8231:36;8083:191;;;;:::o;8280:221::-;8420:34;8416:1;8408:6;8404:14;8397:58;8489:4;8484:2;8476:6;8472:15;8465:29;8280:221;:::o;8507:366::-;8649:3;8670:67;8734:2;8729:3;8670:67;:::i;:::-;8663:74;;8746:93;8835:3;8746:93;:::i;:::-;8864:2;8859:3;8855:12;8848:19;;8507:366;;;:::o;8879:419::-;9045:4;9083:2;9072:9;9068:18;9060:26;;9132:9;9126:4;9122:20;9118:1;9107:9;9103:17;9096:47;9160:131;9286:4;9160:131;:::i;:::-;9152:139;;8879:419;;;:::o;9304:172::-;9444:24;9440:1;9432:6;9428:14;9421:48;9304:172;:::o;9482:366::-;9624:3;9645:67;9709:2;9704:3;9645:67;:::i;:::-;9638:74;;9721:93;9810:3;9721:93;:::i;:::-;9839:2;9834:3;9830:12;9823:19;;9482:366;;;:::o;9854:419::-;10020:4;10058:2;10047:9;10043:18;10035:26;;10107:9;10101:4;10097:20;10093:1;10082:9;10078:17;10071:47;10135:131;10261:4;10135:131;:::i;:::-;10127:139;;9854:419;;;:::o;10279:180::-;10327:77;10324:1;10317:88;10424:4;10421:1;10414:15;10448:4;10445:1;10438:15;10465:185;10505:1;10522:20;10540:1;10522:20;:::i;:::-;10517:25;;10556:20;10574:1;10556:20;:::i;:::-;10551:25;;10595:1;10585:35;;10600:18;;:::i;:::-;10585:35;10642:1;10639;10635:9;10630:14;;10465:185;;;;:::o;10656:410::-;10696:7;10719:20;10737:1;10719:20;:::i;:::-;10714:25;;10753:20;10771:1;10753:20;:::i;:::-;10748:25;;10808:1;10805;10801:9;10830:30;10848:11;10830:30;:::i;:::-;10819:41;;11009:1;11000:7;10996:15;10993:1;10990:22;10970:1;10963:9;10943:83;10920:139;;11039:18;;:::i;:::-;10920:139;10704:362;10656:410;;;;:::o;11072:182::-;11212:34;11208:1;11200:6;11196:14;11189:58;11072:182;:::o;11260:366::-;11402:3;11423:67;11487:2;11482:3;11423:67;:::i;:::-;11416:74;;11499:93;11588:3;11499:93;:::i;:::-;11617:2;11612:3;11608:12;11601:19;;11260:366;;;:::o;11632:419::-;11798:4;11836:2;11825:9;11821:18;11813:26;;11885:9;11879:4;11875:20;11871:1;11860:9;11856:17;11849:47;11913:131;12039:4;11913:131;:::i;:::-;11905:139;;11632:419;;;:::o;12057:224::-;12197:34;12193:1;12185:6;12181:14;12174:58;12266:7;12261:2;12253:6;12249:15;12242:32;12057:224;:::o;12287:366::-;12429:3;12450:67;12514:2;12509:3;12450:67;:::i;:::-;12443:74;;12526:93;12615:3;12526:93;:::i;:::-;12644:2;12639:3;12635:12;12628:19;;12287:366;;;:::o;12659:419::-;12825:4;12863:2;12852:9;12848:18;12840:26;;12912:9;12906:4;12902:20;12898:1;12887:9;12883:17;12876:47;12940:131;13066:4;12940:131;:::i;:::-;12932:139;;12659:419;;;:::o;13084:178::-;13224:30;13220:1;13212:6;13208:14;13201:54;13084:178;:::o;13268:366::-;13410:3;13431:67;13495:2;13490:3;13431:67;:::i;:::-;13424:74;;13507:93;13596:3;13507:93;:::i;:::-;13625:2;13620:3;13616:12;13609:19;;13268:366;;;:::o;13640:419::-;13806:4;13844:2;13833:9;13829:18;13821:26;;13893:9;13887:4;13883:20;13879:1;13868:9;13864:17;13857:47;13921:131;14047:4;13921:131;:::i;:::-;13913:139;;13640:419;;;:::o;14065:143::-;14122:5;14153:6;14147:13;14138:22;;14169:33;14196:5;14169:33;:::i;:::-;14065:143;;;;:::o;14214:351::-;14284:6;14333:2;14321:9;14312:7;14308:23;14304:32;14301:119;;;14339:79;;:::i;:::-;14301:119;14459:1;14484:64;14540:7;14531:6;14520:9;14516:22;14484:64;:::i;:::-;14474:74;;14430:128;14214:351;;;;:::o;14571:224::-;14711:34;14707:1;14699:6;14695:14;14688:58;14780:7;14775:2;14767:6;14763:15;14756:32;14571:224;:::o;14801:366::-;14943:3;14964:67;15028:2;15023:3;14964:67;:::i;:::-;14957:74;;15040:93;15129:3;15040:93;:::i;:::-;15158:2;15153:3;15149:12;15142:19;;14801:366;;;:::o;15173:419::-;15339:4;15377:2;15366:9;15362:18;15354:26;;15426:9;15420:4;15416:20;15412:1;15401:9;15397:17;15390:47;15454:131;15580:4;15454:131;:::i;:::-;15446:139;;15173:419;;;:::o;15598:240::-;15738:34;15734:1;15726:6;15722:14;15715:58;15807:23;15802:2;15794:6;15790:15;15783:48;15598:240;:::o;15844:366::-;15986:3;16007:67;16071:2;16066:3;16007:67;:::i;:::-;16000:74;;16083:93;16172:3;16083:93;:::i;:::-;16201:2;16196:3;16192:12;16185:19;;15844:366;;;:::o;16216:419::-;16382:4;16420:2;16409:9;16405:18;16397:26;;16469:9;16463:4;16459:20;16455:1;16444:9;16440:17;16433:47;16497:131;16623:4;16497:131;:::i;:::-;16489:139;;16216:419;;;:::o;16641:175::-;16781:27;16777:1;16769:6;16765:14;16758:51;16641:175;:::o;16822:366::-;16964:3;16985:67;17049:2;17044:3;16985:67;:::i;:::-;16978:74;;17061:93;17150:3;17061:93;:::i;:::-;17179:2;17174:3;17170:12;17163:19;;16822:366;;;:::o;17194:419::-;17360:4;17398:2;17387:9;17383:18;17375:26;;17447:9;17441:4;17437:20;17433:1;17422:9;17418:17;17411:47;17475:131;17601:4;17475:131;:::i;:::-;17467:139;;17194:419;;;:::o;17619:222::-;17759:34;17755:1;17747:6;17743:14;17736:58;17828:5;17823:2;17815:6;17811:15;17804:30;17619:222;:::o;17847:366::-;17989:3;18010:67;18074:2;18069:3;18010:67;:::i;:::-;18003:74;;18086:93;18175:3;18086:93;:::i;:::-;18204:2;18199:3;18195:12;18188:19;;17847:366;;;:::o;18219:419::-;18385:4;18423:2;18412:9;18408:18;18400:26;;18472:9;18466:4;18462:20;18458:1;18447:9;18443:17;18436:47;18500:131;18626:4;18500:131;:::i;:::-;18492:139;;18219:419;;;:::o;18644:166::-;18784:18;18780:1;18772:6;18768:14;18761:42;18644:166;:::o;18816:366::-;18958:3;18979:67;19043:2;19038:3;18979:67;:::i;:::-;18972:74;;19055:93;19144:3;19055:93;:::i;:::-;19173:2;19168:3;19164:12;19157:19;;18816:366;;;:::o;19188:419::-;19354:4;19392:2;19381:9;19377:18;19369:26;;19441:9;19435:4;19431:20;19427:1;19416:9;19412:17;19405:47;19469:131;19595:4;19469:131;:::i;:::-;19461:139;;19188:419;;;:::o;19613:194::-;19653:4;19673:20;19691:1;19673:20;:::i;:::-;19668:25;;19707:20;19725:1;19707:20;:::i;:::-;19702:25;;19751:1;19748;19744:9;19736:17;;19775:1;19769:4;19766:11;19763:37;;;19780:18;;:::i;:::-;19763:37;19613:194;;;;:::o;19813:225::-;19953:34;19949:1;19941:6;19937:14;19930:58;20022:8;20017:2;20009:6;20005:15;19998:33;19813:225;:::o;20044:366::-;20186:3;20207:67;20271:2;20266:3;20207:67;:::i;:::-;20200:74;;20283:93;20372:3;20283:93;:::i;:::-;20401:2;20396:3;20392:12;20385:19;;20044:366;;;:::o;20416:419::-;20582:4;20620:2;20609:9;20605:18;20597:26;;20669:9;20663:4;20659:20;20655:1;20644:9;20640:17;20633:47;20697:131;20823:4;20697:131;:::i;:::-;20689:139;;20416:419;;;:::o;20841:223::-;20981:34;20977:1;20969:6;20965:14;20958:58;21050:6;21045:2;21037:6;21033:15;21026:31;20841:223;:::o;21070:366::-;21212:3;21233:67;21297:2;21292:3;21233:67;:::i;:::-;21226:74;;21309:93;21398:3;21309:93;:::i;:::-;21427:2;21422:3;21418:12;21411:19;;21070:366;;;:::o;21442:419::-;21608:4;21646:2;21635:9;21631:18;21623:26;;21695:9;21689:4;21685:20;21681:1;21670:9;21666:17;21659:47;21723:131;21849:4;21723:131;:::i;:::-;21715:139;;21442:419;;;:::o;21867:221::-;22007:34;22003:1;21995:6;21991:14;21984:58;22076:4;22071:2;22063:6;22059:15;22052:29;21867:221;:::o;22094:366::-;22236:3;22257:67;22321:2;22316:3;22257:67;:::i;:::-;22250:74;;22333:93;22422:3;22333:93;:::i;:::-;22451:2;22446:3;22442:12;22435:19;;22094:366;;;:::o;22466:419::-;22632:4;22670:2;22659:9;22655:18;22647:26;;22719:9;22713:4;22709:20;22705:1;22694:9;22690:17;22683:47;22747:131;22873:4;22747:131;:::i;:::-;22739:139;;22466:419;;;:::o;22891:224::-;23031:34;23027:1;23019:6;23015:14;23008:58;23100:7;23095:2;23087:6;23083:15;23076:32;22891:224;:::o;23121:366::-;23263:3;23284:67;23348:2;23343:3;23284:67;:::i;:::-;23277:74;;23360:93;23449:3;23360:93;:::i;:::-;23478:2;23473:3;23469:12;23462:19;;23121:366;;;:::o;23493:419::-;23659:4;23697:2;23686:9;23682:18;23674:26;;23746:9;23740:4;23736:20;23732:1;23721:9;23717:17;23710:47;23774:131;23900:4;23774:131;:::i;:::-;23766:139;;23493:419;;;:::o;23918:222::-;24058:34;24054:1;24046:6;24042:14;24035:58;24127:5;24122:2;24114:6;24110:15;24103:30;23918:222;:::o;24146:366::-;24288:3;24309:67;24373:2;24368:3;24309:67;:::i;:::-;24302:74;;24385:93;24474:3;24385:93;:::i;:::-;24503:2;24498:3;24494:12;24487:19;;24146:366;;;:::o;24518:419::-;24684:4;24722:2;24711:9;24707:18;24699:26;;24771:9;24765:4;24761:20;24757:1;24746:9;24742:17;24735:47;24799:131;24925:4;24799:131;:::i;:::-;24791:139;;24518:419;;;:::o;24943:225::-;25083:34;25079:1;25071:6;25067:14;25060:58;25152:8;25147:2;25139:6;25135:15;25128:33;24943:225;:::o;25174:366::-;25316:3;25337:67;25401:2;25396:3;25337:67;:::i;:::-;25330:74;;25413:93;25502:3;25413:93;:::i;:::-;25531:2;25526:3;25522:12;25515:19;;25174:366;;;:::o;25546:419::-;25712:4;25750:2;25739:9;25735:18;25727:26;;25799:9;25793:4;25789:20;25785:1;25774:9;25770:17;25763:47;25827:131;25953:4;25827:131;:::i;:::-;25819:139;;25546:419;;;:::o;25971:181::-;26111:33;26107:1;26099:6;26095:14;26088:57;25971:181;:::o;26158:366::-;26300:3;26321:67;26385:2;26380:3;26321:67;:::i;:::-;26314:74;;26397:93;26486:3;26397:93;:::i;:::-;26515:2;26510:3;26506:12;26499:19;;26158:366;;;:::o;26530:419::-;26696:4;26734:2;26723:9;26719:18;26711:26;;26783:9;26777:4;26773:20;26769:1;26758:9;26754:17;26747:47;26811:131;26937:4;26811:131;:::i;:::-;26803:139;;26530:419;;;:::o;26955:182::-;27095:34;27091:1;27083:6;27079:14;27072:58;26955:182;:::o;27143:366::-;27285:3;27306:67;27370:2;27365:3;27306:67;:::i;:::-;27299:74;;27382:93;27471:3;27382:93;:::i;:::-;27500:2;27495:3;27491:12;27484:19;;27143:366;;;:::o;27515:419::-;27681:4;27719:2;27708:9;27704:18;27696:26;;27768:9;27762:4;27758:20;27754:1;27743:9;27739:17;27732:47;27796:131;27922:4;27796:131;:::i;:::-;27788:139;;27515:419;;;:::o

Swarm Source

ipfs://904eaa02ca844da109354814eae023e53167320cfb6273011755333eaef5d1fb
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.