ETH Price: $3,146.91 (+0.88%)
Gas: 3 Gwei

Token

GoldBux (GDBX)
 

Overview

Max Total Supply

2,500,000 GDBX

Holders

438

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
98.61 GDBX

Value
$0.00
0xf8248e41da33091c07bf10674e0b2fc7d3ad775a
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:
GoldBux

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 5 of 10: GoldBux.sol
//SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "./ERC20.sol";
import "./Ownable.sol";
import "./ERC20Burnable.sol";
import "./ECDSA.sol";
import "./SafeMath.sol";

contract GoldBux is ERC20, ERC20Burnable, Ownable {
    using ECDSA for bytes32;
    using SafeMath for uint256;

    event Claimed(address account, uint256 amount);
    event Deposited(address account, uint256 amount);
    event Airdropped(address account, uint256 amount);
    event Burned(uint256 amount);

    // ECDSA signer
    address public claimSigner;

    // tax related
    uint256 public buyTax = 5;
    uint256 public sellTax = 10;
    bool public taxEnabled = false;
    mapping(address => bool) private taxExempt;
    mapping(address => bool) private dexPairs;
    uint256 public collectedTax = 0;
    address public devWallet;

    // limits
    bool public paused = false;
    bool public limitsEnabled = true;
    bool public tradingEnabled = false;
    uint256 public tradingStartBlock;
    bool public transferDelayEnabled = true;
    uint256 public maxTransactionAmount;
    uint256 public maxPerWallet;
    mapping(address => bool) private maxExempt;
    mapping(address => uint256) private lastTransferBlock;

    // blacklisted
    mapping(address => bool) private blacklisted;

    // on chain storage
    mapping(uint256 => bool) private usedNonces;

    constructor(address devAddress, address signer) ERC20("GoldBux", "GDBX") {
        devWallet = devAddress;
        claimSigner = signer;
        _mint(address(this), 1_750_000 * 1e18);
        _mint(devWallet, 750_000 * 1e18);

        // contract and owners are tax exempt
        taxExempt[address(this)] = true;
        taxExempt[devWallet] = true;
        maxExempt[address(this)] = true;
        maxExempt[devWallet] = true;

        // limits
        maxTransactionAmount = totalSupply() * 30 / 10000; // 0.3%
        maxPerWallet = totalSupply() * 100 / 10000; // 1%
    }

    function pause() external onlyOwner {
        paused = true;
    }

    function unpause() external onlyOwner {
        paused = false;
    }

    function setSigner(address signer) external onlyOwner {
        claimSigner = signer;
    }

    function setDevWallet(address account) external onlyOwner {
        devWallet = account;
    }

    ////////////////
    /// Claiming ///
    ////////////////

    /// @dev claim $GoldBux
    function claim(uint256 amount, uint256 nonce, uint256 expires, bytes memory signature) external {
        require(!paused, "Paused");
        require(!usedNonces[nonce], "Nonce already used");
        require(amount <= balanceOf(address(this)), "Not enough $GoldBux left");
        require(block.timestamp < expires, "Claim window expired");

        // verify signature
        bytes32 msgHash = keccak256(abi.encodePacked(_msgSender(), nonce, expires, amount));
        require(isValidSignature(msgHash, signature), "Invalid signature");
        usedNonces[nonce] = true;

        _transfer(address(this), _msgSender(), amount);
        emit Claimed(_msgSender(), amount);
    }

    function isValidSignature(bytes32 hash, bytes memory signature) internal view returns (bool isValid) {
        bytes32 signedHash = keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash));
        return signedHash.recover(signature) == claimSigner;
    }

    function deposit(uint256 amount) external {
        require(!paused, "Paused");
        _transfer(_msgSender(), address(this), amount);
        emit Deposited(_msgSender(), amount);
    }

    function airdrop(address account, uint256 amount) external onlyOwner {
        _transfer(address(this), account, amount);
        emit Airdropped(account, amount);
    }

    function burnSupply(uint256 amount) external onlyOwner {
        _burn(address(this), amount);
        emit Burned(amount);
    }

    //////////////
    /// LIMITS ///
    //////////////

    function setLimitsEnabled(bool enabled) external onlyOwner {
        limitsEnabled = enabled;
    }

    function startTrading() external onlyOwner {
        tradingEnabled = true;
        tradingStartBlock = block.number;
    }

    function pauseTrading() external onlyOwner {
        tradingEnabled = false;
    }

    function setMaxTransactionAmount(uint256 amount) external onlyOwner {
        require(amount >= ((totalSupply() * 2) / 1000), "Cannot set lower than 0.2%");
        maxTransactionAmount = amount;
    }

    function setMaxPerWallet(uint256 max) external onlyOwner {
        require(max >= ((totalSupply() * 2) / 1000), "Cannot set lower than 0.2%");
        maxPerWallet = max;
    }

    function addBlacklisted(address[] memory accounts) external onlyOwner {
        require(accounts.length > 0, "No accounts");
        for (uint256 i = 0; i < accounts.length; i++) {
            blacklisted[accounts[i]] = true;
        }
    }

    function removeBlacklisted(address[] memory accounts) external onlyOwner {
        require(accounts.length > 0, "No accounts");
        for (uint256 i = 0; i < accounts.length; i++) {
            blacklisted[accounts[i]] = false;
        }
    }

    function isBlacklisted(address account) public view virtual returns(bool) {
        return blacklisted[account];
    }

    function addMaxExempt(address[] memory accounts) external onlyOwner {
        require(accounts.length > 0, "No accounts");
        for (uint256 i = 0; i < accounts.length; i++) {
            maxExempt[accounts[i]] = true;
        }
    }

    function removeMaxExempt(address[] memory accounts) external onlyOwner {
        require(accounts.length > 0, "No accounts");
        for (uint256 i = 0; i < accounts.length; i++) {
            maxExempt[accounts[i]] = false;
        }
    }

    function isMaxExempt(address account) public view virtual returns(bool) {
        return maxExempt[account];
    }

    ///////////////////
    /// TAX RELATED ///
    ///////////////////

    function setTax(bool enabled, uint256 buyPercentage, uint256 sellPercentage) external onlyOwner {
        require(buyPercentage <= 20, "Buy tax should be less than or equal 20%");
        require(sellPercentage <= 20, "Sell tax should be less than or equal 20%");
        taxEnabled = enabled;
        buyTax = buyPercentage;
        sellTax = sellPercentage;
    }

    function addTaxExempt(address[] memory accounts) external onlyOwner {
        require(accounts.length > 0, "No accounts");
        for (uint256 i = 0; i < accounts.length; i++) {
            taxExempt[accounts[i]] = true;
        }
    }

    function removeTaxExempt(address[] memory accounts) external onlyOwner {
        require(accounts.length > 0, "No accounts");
        for (uint256 i = 0; i < accounts.length; i++) {
            taxExempt[accounts[i]] = false;
        }
    }

    function isTaxExempt(address account) public view virtual returns(bool) {
        return taxExempt[account];
    }

    function setDexPair(address pair, bool enabled) external onlyOwner {
        dexPairs[pair] = enabled;
    }

    function isDexPairEnabled(address pair) public view virtual returns(bool) {
        return dexPairs[pair];
    }

    // @dev override transfer so we can implement limits and taxes on buys/sells on DEX pairs
    function _transfer(address from, address to, uint256 amount) internal override {
        require(from != address(0), "Transfer from zero address");
        require(to != address(0), "Transfer to zero address");
        require(to != address(0xdead), "Transfer to dead address");
        require(balanceOf(from) >= amount, "Transfer amount exceeds balance");
        require(!blacklisted[from] && !blacklisted[to], "Blacklisted");

        // bot protection limits
        if (limitsEnabled && from != owner() && to != owner()) {
            if (!tradingEnabled) {
                require(taxExempt[from] || taxExempt[to], "Trading is not active");
            }

            require(block.number > tradingStartBlock, "0 block blackslist");

            if (transferDelayEnabled && !dexPairs[to]) {
                require(lastTransferBlock[tx.origin] < block.number, "One purchase per block allowed");
                lastTransferBlock[tx.origin] = block.number;
            }

            // buy/sell/transfer limits
            // when buying
            if (dexPairs[from] && !maxExempt[to]) {
                require(amount <= maxTransactionAmount, "Amount exceeds the max");
                require(amount + balanceOf(to) <= maxPerWallet, "Max per wallet exceeded");
            }
            // when selling
            else if (dexPairs[to] && !maxExempt[from]) {
                require(amount <= maxTransactionAmount, "Amount exceeds the max");
            }
            // when transferring
            else if (!maxExempt[to]) {
                require(amount + balanceOf(to) <= maxPerWallet, "Max per wallet exceeded");
            }
        }

        if (taxEnabled) {
            uint256 tax = 0;
            // buy
            if (dexPairs[from] && !taxExempt[to] && buyTax > 0) {
                tax = amount.mul(buyTax).div(100);
            }
            // sell
            else if (dexPairs[to] && !taxExempt[from] && sellTax > 0) {
                tax = amount.mul(sellTax).div(100);
            }

            if (tax > 0) {
                super._transfer(from, address(this), tax);
                amount -= tax;
                collectedTax += tax;
            }
        }

        super._transfer(from, to, amount);
    }

    // @dev withdraw collected tax to dev wallet
    function withdrawTax() external onlyOwner {
        require(collectedTax > 0, "No tax to withdraw");
        require(devWallet != address(0), "Dev wallet not set");
        // use parent transfer to avoid taxes in case dev wallet is not tax exempt
        super._transfer(address(this), devWallet, collectedTax);
        collectedTax = 0;
    }
}

File 1 of 10: Context.sol
// SPDX-License-Identifier: MIT
// 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 2 of 10: ECDSA.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (utils/cryptography/ECDSA.sol)

pragma solidity ^0.8.0;

import "./Strings.sol";

/**
 * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.
 *
 * These functions can be used to verify that a message was signed by the holder
 * of the private keys of a given address.
 */
library ECDSA {
    enum RecoverError {
        NoError,
        InvalidSignature,
        InvalidSignatureLength,
        InvalidSignatureS,
        InvalidSignatureV
    }

    function _throwError(RecoverError error) private pure {
        if (error == RecoverError.NoError) {
            return; // no error: do nothing
        } else if (error == RecoverError.InvalidSignature) {
            revert("ECDSA: invalid signature");
        } else if (error == RecoverError.InvalidSignatureLength) {
            revert("ECDSA: invalid signature length");
        } else if (error == RecoverError.InvalidSignatureS) {
            revert("ECDSA: invalid signature 's' value");
        } else if (error == RecoverError.InvalidSignatureV) {
            revert("ECDSA: invalid signature 'v' value");
        }
    }

    /**
     * @dev Returns the address that signed a hashed message (`hash`) with
     * `signature` or error string. This address can then be used for verification purposes.
     *
     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:
     * this function rejects them by requiring the `s` value to be in the lower
     * half order, and the `v` value to be either 27 or 28.
     *
     * IMPORTANT: `hash` _must_ be the result of a hash operation for the
     * verification to be secure: it is possible to craft signatures that
     * recover to arbitrary addresses for non-hashed data. A safe way to ensure
     * this is by receiving a hash of the original message (which may otherwise
     * be too long), and then calling {toEthSignedMessageHash} on it.
     *
     * Documentation for signature generation:
     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]
     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]
     *
     * _Available since v4.3._
     */
    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {
        // Check the signature length
        // - case 65: r,s,v signature (standard)
        // - case 64: r,vs signature (cf https://eips.ethereum.org/EIPS/eip-2098) _Available since v4.1._
        if (signature.length == 65) {
            bytes32 r;
            bytes32 s;
            uint8 v;
            // ecrecover takes the signature parameters, and the only way to get them
            // currently is to use assembly.
            assembly {
                r := mload(add(signature, 0x20))
                s := mload(add(signature, 0x40))
                v := byte(0, mload(add(signature, 0x60)))
            }
            return tryRecover(hash, v, r, s);
        } else if (signature.length == 64) {
            bytes32 r;
            bytes32 vs;
            // ecrecover takes the signature parameters, and the only way to get them
            // currently is to use assembly.
            assembly {
                r := mload(add(signature, 0x20))
                vs := mload(add(signature, 0x40))
            }
            return tryRecover(hash, r, vs);
        } else {
            return (address(0), RecoverError.InvalidSignatureLength);
        }
    }

    /**
     * @dev Returns the address that signed a hashed message (`hash`) with
     * `signature`. This address can then be used for verification purposes.
     *
     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:
     * this function rejects them by requiring the `s` value to be in the lower
     * half order, and the `v` value to be either 27 or 28.
     *
     * IMPORTANT: `hash` _must_ be the result of a hash operation for the
     * verification to be secure: it is possible to craft signatures that
     * recover to arbitrary addresses for non-hashed data. A safe way to ensure
     * this is by receiving a hash of the original message (which may otherwise
     * be too long), and then calling {toEthSignedMessageHash} on it.
     */
    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {
        (address recovered, RecoverError error) = tryRecover(hash, signature);
        _throwError(error);
        return recovered;
    }

    /**
     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.
     *
     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]
     *
     * _Available since v4.3._
     */
    function tryRecover(
        bytes32 hash,
        bytes32 r,
        bytes32 vs
    ) internal pure returns (address, RecoverError) {
        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);
        uint8 v = uint8((uint256(vs) >> 255) + 27);
        return tryRecover(hash, v, r, s);
    }

    /**
     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.
     *
     * _Available since v4.2._
     */
    function recover(
        bytes32 hash,
        bytes32 r,
        bytes32 vs
    ) internal pure returns (address) {
        (address recovered, RecoverError error) = tryRecover(hash, r, vs);
        _throwError(error);
        return recovered;
    }

    /**
     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,
     * `r` and `s` signature fields separately.
     *
     * _Available since v4.3._
     */
    function tryRecover(
        bytes32 hash,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal pure returns (address, RecoverError) {
        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature
        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines
        // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most
        // signatures from current libraries generate a unique signature with an s-value in the lower half order.
        //
        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value
        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or
        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept
        // these malleable signatures as well.
        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {
            return (address(0), RecoverError.InvalidSignatureS);
        }
        if (v != 27 && v != 28) {
            return (address(0), RecoverError.InvalidSignatureV);
        }

        // If the signature is valid (and not malleable), return the signer address
        address signer = ecrecover(hash, v, r, s);
        if (signer == address(0)) {
            return (address(0), RecoverError.InvalidSignature);
        }

        return (signer, RecoverError.NoError);
    }

    /**
     * @dev Overload of {ECDSA-recover} that receives the `v`,
     * `r` and `s` signature fields separately.
     */
    function recover(
        bytes32 hash,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal pure returns (address) {
        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);
        _throwError(error);
        return recovered;
    }

    /**
     * @dev Returns an Ethereum Signed Message, created from a `hash`. This
     * produces hash corresponding to the one signed with the
     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]
     * JSON-RPC method as part of EIP-191.
     *
     * See {recover}.
     */
    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {
        // 32 is the length in bytes of hash,
        // enforced by the type signature above
        return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash));
    }

    /**
     * @dev Returns an Ethereum Signed Message, created from `s`. This
     * produces hash corresponding to the one signed with the
     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]
     * JSON-RPC method as part of EIP-191.
     *
     * See {recover}.
     */
    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {
        return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n", Strings.toString(s.length), s));
    }

    /**
     * @dev Returns an Ethereum Signed Typed Data, created from a
     * `domainSeparator` and a `structHash`. This produces hash corresponding
     * to the one signed with the
     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]
     * JSON-RPC method as part of EIP-712.
     *
     * See {recover}.
     */
    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {
        return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash));
    }
}

File 3 of 10: ERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;

import "./IERC20.sol";
import "./IERC20Metadata.sol";
import "./Context.sol";

/**
 * @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:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, 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}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, 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}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, 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) {
        address owner = _msgSender();
        _approve(owner, spender, _allowances[owner][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) {
        address owner = _msgSender();
        uint256 currentAllowance = _allowances[owner][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, 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:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, 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 Spend `amount` form the allowance of `owner` toward `spender`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - 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 {}
}

File 4 of 10: ERC20Burnable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol)

pragma solidity ^0.8.0;

import "./ERC20.sol";
import "./Context.sol";

/**
 * @dev Extension of {ERC20} that allows token holders to destroy both their own
 * tokens and those that they have an allowance for, in a way that can be
 * recognized off-chain (via event analysis).
 */
abstract contract ERC20Burnable is Context, ERC20 {
    /**
     * @dev Destroys `amount` tokens from the caller.
     *
     * See {ERC20-_burn}.
     */
    function burn(uint256 amount) public virtual {
        _burn(_msgSender(), amount);
    }

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

File 6 of 10: IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

File 7 of 10: IERC20Metadata.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;

import "./IERC20.sol";

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

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

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

File 8 of 10: Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

import "./Context.sol";

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

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

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

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

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

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

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

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

File 9 of 10: SafeMath.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

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

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

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

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

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

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

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

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

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

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

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

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

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

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

File 10 of 10: Strings.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)

pragma solidity ^0.8.0;

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

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"devAddress","type":"address"},{"internalType":"address","name":"signer","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Airdropped","type":"event"},{"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":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Burned","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Claimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposited","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":"accounts","type":"address[]"}],"name":"addBlacklisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"addMaxExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"addTaxExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"expires","type":"uint256"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimSigner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"collectedTax","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":"uint256","name":"amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"}],"name":"isDexPairEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isMaxExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isTaxExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"removeBlacklisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"removeMaxExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"removeTaxExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"setDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setDexPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLimitsEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"max","type":"uint256"}],"name":"setMaxPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"signer","type":"address"}],"name":"setSigner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"},{"internalType":"uint256","name":"buyPercentage","type":"uint256"},{"internalType":"uint256","name":"sellPercentage","type":"uint256"}],"name":"setTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingStartBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","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":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawTax","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526005600755600a6008556009805460ff199081169091556000600c55600d805462ffffff60a01b1916600160a81b179055600f805490911660011790553480156200004e57600080fd5b506040516200320438038062003204833981016040819052620000719162000418565b604080518082018252600781526608eded8c884eaf60cb1b60208083019182528351808501909452600484526308e8884b60e31b908401528151919291620000bc9160039162000355565b508051620000d290600490602084019062000355565b505050620000ef620000e96200021760201b60201c565b6200021b565b600d80546001600160a01b038085166001600160a01b031992831617909255600680549284169290911691909117905562000136306a017293b0a9e69fd9c000006200026d565b600d5462000158906001600160a01b0316699ed194db19b238c000006200026d565b306000818152600a602090815260408083208054600160ff199182168117909255600d80546001600160a01b0390811687528487208054841685179055968652601290945282852080548216831790559254909416835290912080549091169091179055612710620001c960025490565b620001d690601e6200048e565b620001e291906200046b565b601055612710620001f260025490565b620001ff9060646200048e565b6200020b91906200046b565b60115550620005039050565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216620002c85760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060026000828254620002dc919062000450565b90915550506001600160a01b038216600090815260208190526040812080548392906200030b90849062000450565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b8280546200036390620004b0565b90600052602060002090601f016020900481019282620003875760008555620003d2565b82601f10620003a257805160ff1916838001178555620003d2565b82800160010185558215620003d2579182015b82811115620003d2578251825591602001919060010190620003b5565b50620003e0929150620003e4565b5090565b5b80821115620003e05760008155600101620003e5565b80516001600160a01b03811681146200041357600080fd5b919050565b600080604083850312156200042c57600080fd5b6200043783620003fb565b91506200044760208401620003fb565b90509250929050565b60008219821115620004665762000466620004ed565b500190565b6000826200048957634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615620004ab57620004ab620004ed565b500290565b600181811c90821680620004c557607f821691505b60208210811415620004e757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b612cf180620005136000396000f3fe608060405234801561001057600080fd5b506004361061035d5760003560e01c806370a08231116101d3578063a9059cbb11610104578063d8ee36cb116100a2578063e268e4d31161007c578063e268e4d31461074a578063e55648f41461075d578063f2fde38b14610770578063fe575a871461078357600080fd5b8063d8ee36cb146106f6578063dd62ed3e14610709578063dfa20f0a1461074257600080fd5b8063c8c8ebe4116100de578063c8c8ebe4146106c8578063cc1776d3146106d1578063d595c331146106da578063d798cbd2146106ed57600080fd5b8063a9059cbb14610695578063b6b55f25146106a8578063c876d0b9146106bb57600080fd5b80638ba4cc3c116101715780638ea5220f1161014b5780638ea5220f1461065457806395d89b41146106675780639f5ec3f81461066f578063a457c2d71461068257600080fd5b80638ba4cc3c146106095780638c220ebd1461061c5780638da5cb5b1461062f57600080fd5b80637b234b8f116101ad5780637b234b8f146105b5578063807fb8c5146105c85780638456cb59146105f4578063870bd30b146105fc57600080fd5b806370a0823114610571578063715018a61461059a57806379cc6790146105a257600080fd5b806339509351116102ad5780634f7041a51161024b5780635c975abb116102255780635c975abb1461050b5780636548b7ae1461051f578063690e0ecb146105325780636c19e7831461055e57600080fd5b80634f7041a5146104dc57806350ad2367146104e557806356ba4186146104f857600080fd5b806341aea9de1161028757806341aea9de1461049957806342966c68146104ac578063453c2310146104bf5780634ada218b146104c857600080fd5b806339509351146104755780633f25d84b146104885780633f4ba83a1461049157600080fd5b80631e293c101161031a578063293230b8116102f4578063293230b8146104375780632bb089691461043f578063313ce567146104525780633582ad231461046157600080fd5b80631e293c10146103fe5780631f53ac021461041157806323b872dd1461042457600080fd5b806306fdde03146103625780630823d4d114610380578063095ea7b3146103955780631031e36e146103b857806316c2be6b146103c057806318160ddd146103ec575b600080fd5b61036a6107af565b6040516103779190612abd565b60405180910390f35b61039361038e3660046128f0565b610841565b005b6103a86103a33660046128c6565b610901565b6040519015158152602001610377565b610393610919565b6103a86103ce366004612812565b6001600160a01b03166000908152600a602052604090205460ff1690565b6002545b604051908152602001610377565b61039361040c3660046129f2565b610952565b61039361041f366004612812565b6109f1565b6103a8610432366004612860565b610a3d565b610393610a61565b61039361044d3660046129bf565b610aa4565b60405160128152602001610377565b600d546103a890600160a81b900460ff1681565b6103a86104833660046128c6565b610bad565b6103f0600c5481565b610393610bec565b6103936104a73660046129a4565b610c25565b6103936104ba3660046129f2565b610c6d565b6103f060115481565b600d546103a890600160b01b900460ff1681565b6103f060075481565b6103936104f33660046128f0565b610c7a565b6103936105063660046128f0565b610d2d565b600d546103a890600160a01b900460ff1681565b61039361052d366004612a0b565b610de0565b6103a8610540366004612812565b6001600160a01b03166000908152600b602052604090205460ff1690565b61039361056c366004612812565b61102a565b6103f061057f366004612812565b6001600160a01b031660009081526020819052604090205490565b610393611076565b6103936105b03660046128c6565b6110ac565b6103936105c33660046128f0565b6110c1565b6103a86105d6366004612812565b6001600160a01b031660009081526012602052604090205460ff1690565b610393611174565b6009546103a89060ff1681565b6103936106173660046128c6565b6111b3565b61039361062a3660046128f0565b61122e565b6005546001600160a01b03165b6040516001600160a01b039091168152602001610377565b600d5461063c906001600160a01b031681565b61036a6112e1565b61039361067d3660046128f0565b6112f0565b6103a86106903660046128c6565b6113a3565b6103a86106a33660046128c6565b611435565b6103936106b63660046129f2565b611443565b600f546103a89060ff1681565b6103f060105481565b6103f060085481565b6103936106e83660046129f2565b6114ce565b6103f0600e5481565b60065461063c906001600160a01b031681565b6103f061071736600461282d565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610393611532565b6103936107583660046129f2565b611614565b61039361076b36600461289c565b6116b3565b61039361077e366004612812565b611708565b6103a8610791366004612812565b6001600160a01b031660009081526014602052604090205460ff1690565b6060600380546107be90612c0d565b80601f01602080910402602001604051908101604052809291908181526020018280546107ea90612c0d565b80156108375780601f1061080c57610100808354040283529160200191610837565b820191906000526020600020905b81548152906001019060200180831161081a57829003601f168201915b5050505050905090565b6005546001600160a01b031633146108745760405162461bcd60e51b815260040161086b90612b37565b60405180910390fd5b60008151116108955760405162461bcd60e51b815260040161086b90612b12565b60005b81518110156108fd576000601260008484815181106108b9576108b9612c8f565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806108f581612c48565b915050610898565b5050565b60003361090f8185856117a0565b5060019392505050565b6005546001600160a01b031633146109435760405162461bcd60e51b815260040161086b90612b37565b600d805460ff60b01b19169055565b6005546001600160a01b0316331461097c5760405162461bcd60e51b815260040161086b90612b37565b6103e861098860025490565b610993906002612bd7565b61099d9190612bb5565b8110156109ec5760405162461bcd60e51b815260206004820152601a60248201527f43616e6e6f7420736574206c6f776572207468616e20302e3225000000000000604482015260640161086b565b601055565b6005546001600160a01b03163314610a1b5760405162461bcd60e51b815260040161086b90612b37565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b600033610a4b8582856118c4565b610a56858585611956565b506001949350505050565b6005546001600160a01b03163314610a8b5760405162461bcd60e51b815260040161086b90612b37565b600d805460ff60b01b1916600160b01b17905543600e55565b6005546001600160a01b03163314610ace5760405162461bcd60e51b815260040161086b90612b37565b6014821115610b305760405162461bcd60e51b815260206004820152602860248201527f427579207461782073686f756c64206265206c657373207468616e206f7220656044820152677175616c2032302560c01b606482015260840161086b565b6014811115610b935760405162461bcd60e51b815260206004820152602960248201527f53656c6c207461782073686f756c64206265206c657373207468616e206f7220604482015268657175616c2032302560b81b606482015260840161086b565b6009805460ff191693151593909317909255600755600855565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919061090f9082908690610be7908790612b9d565b6117a0565b6005546001600160a01b03163314610c165760405162461bcd60e51b815260040161086b90612b37565b600d805460ff60a01b19169055565b6005546001600160a01b03163314610c4f5760405162461bcd60e51b815260040161086b90612b37565b600d8054911515600160a81b0260ff60a81b19909216919091179055565b610c773382612069565b50565b6005546001600160a01b03163314610ca45760405162461bcd60e51b815260040161086b90612b37565b6000815111610cc55760405162461bcd60e51b815260040161086b90612b12565b60005b81518110156108fd57600160146000848481518110610ce957610ce9612c8f565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610d2581612c48565b915050610cc8565b6005546001600160a01b03163314610d575760405162461bcd60e51b815260040161086b90612b37565b6000815111610d785760405162461bcd60e51b815260040161086b90612b12565b60005b81518110156108fd576001600a6000848481518110610d9c57610d9c612c8f565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610dd881612c48565b915050610d7b565b600d54600160a01b900460ff1615610e235760405162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015260640161086b565b60008381526015602052604090205460ff1615610e775760405162461bcd60e51b8152602060048201526012602482015271139bdb98d948185b1c9958591e481d5cd95960721b604482015260640161086b565b30600090815260208190526040902054841115610ed65760405162461bcd60e51b815260206004820152601860248201527f4e6f7420656e6f7567682024476f6c64427578206c6566740000000000000000604482015260640161086b565b814210610f1c5760405162461bcd60e51b815260206004820152601460248201527310db185a5b481dda5b991bddc8195e1c1a5c995960621b604482015260640161086b565b60003360405160609190911b6bffffffffffffffffffffffff19166020820152603481018590526054810184905260748101869052609401604051602081830303815290604052805190602001209050610f7681836121b7565b610fb65760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b604482015260640161086b565b6000848152601560205260409020805460ff19166001179055610fe030610fda3390565b87611956565b7fd8138f8a3f377c5259ca548e70e4c2de94f129f5a11036a15b69513cba2b426a33604080516001600160a01b039092168252602082018890520160405180910390a15050505050565b6005546001600160a01b031633146110545760405162461bcd60e51b815260040161086b90612b37565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146110a05760405162461bcd60e51b815260040161086b90612b37565b6110aa6000612232565b565b6110b78233836118c4565b6108fd8282612069565b6005546001600160a01b031633146110eb5760405162461bcd60e51b815260040161086b90612b37565b600081511161110c5760405162461bcd60e51b815260040161086b90612b12565b60005b81518110156108fd576000600a600084848151811061113057611130612c8f565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061116c81612c48565b91505061110f565b6005546001600160a01b0316331461119e5760405162461bcd60e51b815260040161086b90612b37565b600d805460ff60a01b1916600160a01b179055565b6005546001600160a01b031633146111dd5760405162461bcd60e51b815260040161086b90612b37565b6111e8308383611956565b604080516001600160a01b0384168152602081018390527f7bd6d4be1decdc27a9ed9c7ccdf5bb7cc38e31b3647b958c6b37162a2296c0fa910160405180910390a15050565b6005546001600160a01b031633146112585760405162461bcd60e51b815260040161086b90612b37565b60008151116112795760405162461bcd60e51b815260040161086b90612b12565b60005b81518110156108fd5760006014600084848151811061129d5761129d612c8f565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806112d981612c48565b91505061127c565b6060600480546107be90612c0d565b6005546001600160a01b0316331461131a5760405162461bcd60e51b815260040161086b90612b37565b600081511161133b5760405162461bcd60e51b815260040161086b90612b12565b60005b81518110156108fd5760016012600084848151811061135f5761135f612c8f565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061139b81612c48565b91505061133e565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190838110156114285760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161086b565b610a5682868684036117a0565b60003361090f818585611956565b600d54600160a01b900460ff16156114865760405162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015260640161086b565b611491333083611956565b60408051338152602081018390527f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c491015b60405180910390a150565b6005546001600160a01b031633146114f85760405162461bcd60e51b815260040161086b90612b37565b6115023082612069565b6040518181527fd83c63197e8e676d80ab0122beba9a9d20f3828839e9a1d6fe81d242e9cd7e6e906020016114c3565b6005546001600160a01b0316331461155c5760405162461bcd60e51b815260040161086b90612b37565b6000600c54116115a35760405162461bcd60e51b81526020600482015260126024820152714e6f2074617820746f20776974686472617760701b604482015260640161086b565b600d546001600160a01b03166115f05760405162461bcd60e51b815260206004820152601260248201527111195d881dd85b1b195d081b9bdd081cd95d60721b604482015260640161086b565b600d54600c5461160d9130916001600160a01b0390911690612284565b6000600c55565b6005546001600160a01b0316331461163e5760405162461bcd60e51b815260040161086b90612b37565b6103e861164a60025490565b611655906002612bd7565b61165f9190612bb5565b8110156116ae5760405162461bcd60e51b815260206004820152601a60248201527f43616e6e6f7420736574206c6f776572207468616e20302e3225000000000000604482015260640161086b565b601155565b6005546001600160a01b031633146116dd5760405162461bcd60e51b815260040161086b90612b37565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146117325760405162461bcd60e51b815260040161086b90612b37565b6001600160a01b0381166117975760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161086b565b610c7781612232565b6001600160a01b0383166118025760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161086b565b6001600160a01b0382166118635760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161086b565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03838116600090815260016020908152604080832093861683529290522054600019811461195057818110156119435760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161086b565b61195084848484036117a0565b50505050565b6001600160a01b0383166119ac5760405162461bcd60e51b815260206004820152601a60248201527f5472616e736665722066726f6d207a65726f2061646472657373000000000000604482015260640161086b565b6001600160a01b038216611a025760405162461bcd60e51b815260206004820152601860248201527f5472616e7366657220746f207a65726f20616464726573730000000000000000604482015260640161086b565b6001600160a01b03821661dead1415611a5d5760405162461bcd60e51b815260206004820152601860248201527f5472616e7366657220746f206465616420616464726573730000000000000000604482015260640161086b565b80611a7d846001600160a01b031660009081526020819052604090205490565b1015611acb5760405162461bcd60e51b815260206004820152601f60248201527f5472616e7366657220616d6f756e7420657863656564732062616c616e636500604482015260640161086b565b6001600160a01b03831660009081526014602052604090205460ff16158015611b0d57506001600160a01b03821660009081526014602052604090205460ff16155b611b475760405162461bcd60e51b815260206004820152600b60248201526a109b1858dadb1a5cdd195960aa1b604482015260640161086b565b600d54600160a81b900460ff168015611b6e57506005546001600160a01b03848116911614155b8015611b8857506005546001600160a01b03838116911614155b15611f2b57600d54600160b01b900460ff16611c21576001600160a01b0383166000908152600a602052604090205460ff1680611bdd57506001600160a01b0382166000908152600a602052604090205460ff165b611c215760405162461bcd60e51b815260206004820152601560248201527454726164696e67206973206e6f742061637469766560581b604482015260640161086b565b600e544311611c675760405162461bcd60e51b81526020600482015260126024820152710c08189b1bd8dac8189b1858dadcdb1a5cdd60721b604482015260640161086b565b600f5460ff168015611c9257506001600160a01b0382166000908152600b602052604090205460ff16155b15611d0857326000908152601360205260409020544311611cf55760405162461bcd60e51b815260206004820152601e60248201527f4f6e652070757263686173652070657220626c6f636b20616c6c6f7765640000604482015260640161086b565b3260009081526013602052604090204390555b6001600160a01b0383166000908152600b602052604090205460ff168015611d4957506001600160a01b03821660009081526012602052604090205460ff16155b15611e0c57601054811115611d995760405162461bcd60e51b8152602060048201526016602482015275082dadeeadce840caf0c6cacac8e640e8d0ca40dac2f60531b604482015260640161086b565b6011546001600160a01b038316600090815260208190526040902054611dbf9083612b9d565b1115611e075760405162461bcd60e51b815260206004820152601760248201527613585e081c195c881dd85b1b195d08195e18d959591959604a1b604482015260640161086b565b611f2b565b6001600160a01b0382166000908152600b602052604090205460ff168015611e4d57506001600160a01b03831660009081526012602052604090205460ff16155b15611e9d57601054811115611e075760405162461bcd60e51b8152602060048201526016602482015275082dadeeadce840caf0c6cacac8e640e8d0ca40dac2f60531b604482015260640161086b565b6001600160a01b03821660009081526012602052604090205460ff16611f2b576011546001600160a01b038316600090815260208190526040902054611ee39083612b9d565b1115611f2b5760405162461bcd60e51b815260206004820152601760248201527613585e081c195c881dd85b1b195d08195e18d959591959604a1b604482015260640161086b565b60095460ff1615612059576001600160a01b0383166000908152600b602052604081205460ff168015611f7757506001600160a01b0383166000908152600a602052604090205460ff16155b8015611f8557506000600754115b15611fb157611faa6064611fa46007548561245290919063ffffffff16565b90612465565b9050612022565b6001600160a01b0383166000908152600b602052604090205460ff168015611ff257506001600160a01b0384166000908152600a602052604090205460ff16155b801561200057506000600854115b156120225761201f6064611fa46008548561245290919063ffffffff16565b90505b801561205757612033843083612284565b61203d8183612bf6565b915080600c60008282546120519190612b9d565b90915550505b505b612064838383612284565b505050565b6001600160a01b0382166120c95760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161086b565b6001600160a01b0382166000908152602081905260409020548181101561213d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161086b565b6001600160a01b038316600090815260208190526040812083830390556002805484929061216c908490612bf6565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c81018390526000908190605c0160408051601f1981840301815291905280516020909101206006549091506001600160a01b03166122208285612471565b6001600160a01b031614949350505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0383166122e85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161086b565b6001600160a01b03821661234a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161086b565b6001600160a01b038316600090815260208190526040902054818110156123c25760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161086b565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906123f9908490612b9d565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161244591815260200190565b60405180910390a3611950565b600061245e8284612bd7565b9392505050565b600061245e8284612bb5565b60008060006124808585612495565b9150915061248d81612505565b509392505050565b6000808251604114156124cc5760208301516040840151606085015160001a6124c0878285856126c0565b945094505050506124fe565b8251604014156124f657602083015160408401516124eb8683836127ad565b9350935050506124fe565b506000905060025b9250929050565b600081600481111561251957612519612c79565b14156125225750565b600181600481111561253657612536612c79565b14156125845760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161086b565b600281600481111561259857612598612c79565b14156125e65760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161086b565b60038160048111156125fa576125fa612c79565b14156126535760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b606482015260840161086b565b600481600481111561266757612667612c79565b1415610c775760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b606482015260840161086b565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156126f757506000905060036127a4565b8460ff16601b1415801561270f57508460ff16601c14155b1561272057506000905060046127a4565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612774573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661279d576000600192509250506127a4565b9150600090505b94509492505050565b6000806001600160ff1b038316816127ca60ff86901c601b612b9d565b90506127d8878288856126c0565b935093505050935093915050565b80356001600160a01b03811681146127fd57600080fd5b919050565b803580151581146127fd57600080fd5b60006020828403121561282457600080fd5b61245e826127e6565b6000806040838503121561284057600080fd5b612849836127e6565b9150612857602084016127e6565b90509250929050565b60008060006060848603121561287557600080fd5b61287e846127e6565b925061288c602085016127e6565b9150604084013590509250925092565b600080604083850312156128af57600080fd5b6128b8836127e6565b915061285760208401612802565b600080604083850312156128d957600080fd5b6128e2836127e6565b946020939093013593505050565b6000602080838503121561290357600080fd5b823567ffffffffffffffff8082111561291b57600080fd5b818501915085601f83011261292f57600080fd5b81358181111561294157612941612ca5565b8060051b9150612952848301612b6c565b8181528481019084860184860187018a101561296d57600080fd5b600095505b8386101561299757612983816127e6565b835260019590950194918601918601612972565b5098975050505050505050565b6000602082840312156129b657600080fd5b61245e82612802565b6000806000606084860312156129d457600080fd5b6129dd84612802565b95602085013595506040909401359392505050565b600060208284031215612a0457600080fd5b5035919050565b60008060008060808587031215612a2157600080fd5b84359350602080860135935060408601359250606086013567ffffffffffffffff80821115612a4f57600080fd5b818801915088601f830112612a6357600080fd5b813581811115612a7557612a75612ca5565b612a87601f8201601f19168501612b6c565b91508082528984828501011115612a9d57600080fd5b808484018584013760008482840101525080935050505092959194509250565b600060208083528351808285015260005b81811015612aea57858101830151858201604001528201612ace565b81811115612afc576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252600b908201526a4e6f206163636f756e747360a81b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b604051601f8201601f1916810167ffffffffffffffff81118282101715612b9557612b95612ca5565b604052919050565b60008219821115612bb057612bb0612c63565b500190565b600082612bd257634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612bf157612bf1612c63565b500290565b600082821015612c0857612c08612c63565b500390565b600181811c90821680612c2157607f821691505b60208210811415612c4257634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612c5c57612c5c612c63565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fdfea2646970667358221220ced927fbd0f2b613525a5afbf49137b881b1d99218fe5687cea64c25e046042264736f6c6343000807003300000000000000000000000003fe9cf9eda8a01246c87aa4108e286becf2af920000000000000000000000007dfd9697c6a7ab3ed5f26f4fa38d967a4a687f29

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061035d5760003560e01c806370a08231116101d3578063a9059cbb11610104578063d8ee36cb116100a2578063e268e4d31161007c578063e268e4d31461074a578063e55648f41461075d578063f2fde38b14610770578063fe575a871461078357600080fd5b8063d8ee36cb146106f6578063dd62ed3e14610709578063dfa20f0a1461074257600080fd5b8063c8c8ebe4116100de578063c8c8ebe4146106c8578063cc1776d3146106d1578063d595c331146106da578063d798cbd2146106ed57600080fd5b8063a9059cbb14610695578063b6b55f25146106a8578063c876d0b9146106bb57600080fd5b80638ba4cc3c116101715780638ea5220f1161014b5780638ea5220f1461065457806395d89b41146106675780639f5ec3f81461066f578063a457c2d71461068257600080fd5b80638ba4cc3c146106095780638c220ebd1461061c5780638da5cb5b1461062f57600080fd5b80637b234b8f116101ad5780637b234b8f146105b5578063807fb8c5146105c85780638456cb59146105f4578063870bd30b146105fc57600080fd5b806370a0823114610571578063715018a61461059a57806379cc6790146105a257600080fd5b806339509351116102ad5780634f7041a51161024b5780635c975abb116102255780635c975abb1461050b5780636548b7ae1461051f578063690e0ecb146105325780636c19e7831461055e57600080fd5b80634f7041a5146104dc57806350ad2367146104e557806356ba4186146104f857600080fd5b806341aea9de1161028757806341aea9de1461049957806342966c68146104ac578063453c2310146104bf5780634ada218b146104c857600080fd5b806339509351146104755780633f25d84b146104885780633f4ba83a1461049157600080fd5b80631e293c101161031a578063293230b8116102f4578063293230b8146104375780632bb089691461043f578063313ce567146104525780633582ad231461046157600080fd5b80631e293c10146103fe5780631f53ac021461041157806323b872dd1461042457600080fd5b806306fdde03146103625780630823d4d114610380578063095ea7b3146103955780631031e36e146103b857806316c2be6b146103c057806318160ddd146103ec575b600080fd5b61036a6107af565b6040516103779190612abd565b60405180910390f35b61039361038e3660046128f0565b610841565b005b6103a86103a33660046128c6565b610901565b6040519015158152602001610377565b610393610919565b6103a86103ce366004612812565b6001600160a01b03166000908152600a602052604090205460ff1690565b6002545b604051908152602001610377565b61039361040c3660046129f2565b610952565b61039361041f366004612812565b6109f1565b6103a8610432366004612860565b610a3d565b610393610a61565b61039361044d3660046129bf565b610aa4565b60405160128152602001610377565b600d546103a890600160a81b900460ff1681565b6103a86104833660046128c6565b610bad565b6103f0600c5481565b610393610bec565b6103936104a73660046129a4565b610c25565b6103936104ba3660046129f2565b610c6d565b6103f060115481565b600d546103a890600160b01b900460ff1681565b6103f060075481565b6103936104f33660046128f0565b610c7a565b6103936105063660046128f0565b610d2d565b600d546103a890600160a01b900460ff1681565b61039361052d366004612a0b565b610de0565b6103a8610540366004612812565b6001600160a01b03166000908152600b602052604090205460ff1690565b61039361056c366004612812565b61102a565b6103f061057f366004612812565b6001600160a01b031660009081526020819052604090205490565b610393611076565b6103936105b03660046128c6565b6110ac565b6103936105c33660046128f0565b6110c1565b6103a86105d6366004612812565b6001600160a01b031660009081526012602052604090205460ff1690565b610393611174565b6009546103a89060ff1681565b6103936106173660046128c6565b6111b3565b61039361062a3660046128f0565b61122e565b6005546001600160a01b03165b6040516001600160a01b039091168152602001610377565b600d5461063c906001600160a01b031681565b61036a6112e1565b61039361067d3660046128f0565b6112f0565b6103a86106903660046128c6565b6113a3565b6103a86106a33660046128c6565b611435565b6103936106b63660046129f2565b611443565b600f546103a89060ff1681565b6103f060105481565b6103f060085481565b6103936106e83660046129f2565b6114ce565b6103f0600e5481565b60065461063c906001600160a01b031681565b6103f061071736600461282d565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610393611532565b6103936107583660046129f2565b611614565b61039361076b36600461289c565b6116b3565b61039361077e366004612812565b611708565b6103a8610791366004612812565b6001600160a01b031660009081526014602052604090205460ff1690565b6060600380546107be90612c0d565b80601f01602080910402602001604051908101604052809291908181526020018280546107ea90612c0d565b80156108375780601f1061080c57610100808354040283529160200191610837565b820191906000526020600020905b81548152906001019060200180831161081a57829003601f168201915b5050505050905090565b6005546001600160a01b031633146108745760405162461bcd60e51b815260040161086b90612b37565b60405180910390fd5b60008151116108955760405162461bcd60e51b815260040161086b90612b12565b60005b81518110156108fd576000601260008484815181106108b9576108b9612c8f565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806108f581612c48565b915050610898565b5050565b60003361090f8185856117a0565b5060019392505050565b6005546001600160a01b031633146109435760405162461bcd60e51b815260040161086b90612b37565b600d805460ff60b01b19169055565b6005546001600160a01b0316331461097c5760405162461bcd60e51b815260040161086b90612b37565b6103e861098860025490565b610993906002612bd7565b61099d9190612bb5565b8110156109ec5760405162461bcd60e51b815260206004820152601a60248201527f43616e6e6f7420736574206c6f776572207468616e20302e3225000000000000604482015260640161086b565b601055565b6005546001600160a01b03163314610a1b5760405162461bcd60e51b815260040161086b90612b37565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b600033610a4b8582856118c4565b610a56858585611956565b506001949350505050565b6005546001600160a01b03163314610a8b5760405162461bcd60e51b815260040161086b90612b37565b600d805460ff60b01b1916600160b01b17905543600e55565b6005546001600160a01b03163314610ace5760405162461bcd60e51b815260040161086b90612b37565b6014821115610b305760405162461bcd60e51b815260206004820152602860248201527f427579207461782073686f756c64206265206c657373207468616e206f7220656044820152677175616c2032302560c01b606482015260840161086b565b6014811115610b935760405162461bcd60e51b815260206004820152602960248201527f53656c6c207461782073686f756c64206265206c657373207468616e206f7220604482015268657175616c2032302560b81b606482015260840161086b565b6009805460ff191693151593909317909255600755600855565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919061090f9082908690610be7908790612b9d565b6117a0565b6005546001600160a01b03163314610c165760405162461bcd60e51b815260040161086b90612b37565b600d805460ff60a01b19169055565b6005546001600160a01b03163314610c4f5760405162461bcd60e51b815260040161086b90612b37565b600d8054911515600160a81b0260ff60a81b19909216919091179055565b610c773382612069565b50565b6005546001600160a01b03163314610ca45760405162461bcd60e51b815260040161086b90612b37565b6000815111610cc55760405162461bcd60e51b815260040161086b90612b12565b60005b81518110156108fd57600160146000848481518110610ce957610ce9612c8f565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610d2581612c48565b915050610cc8565b6005546001600160a01b03163314610d575760405162461bcd60e51b815260040161086b90612b37565b6000815111610d785760405162461bcd60e51b815260040161086b90612b12565b60005b81518110156108fd576001600a6000848481518110610d9c57610d9c612c8f565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610dd881612c48565b915050610d7b565b600d54600160a01b900460ff1615610e235760405162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015260640161086b565b60008381526015602052604090205460ff1615610e775760405162461bcd60e51b8152602060048201526012602482015271139bdb98d948185b1c9958591e481d5cd95960721b604482015260640161086b565b30600090815260208190526040902054841115610ed65760405162461bcd60e51b815260206004820152601860248201527f4e6f7420656e6f7567682024476f6c64427578206c6566740000000000000000604482015260640161086b565b814210610f1c5760405162461bcd60e51b815260206004820152601460248201527310db185a5b481dda5b991bddc8195e1c1a5c995960621b604482015260640161086b565b60003360405160609190911b6bffffffffffffffffffffffff19166020820152603481018590526054810184905260748101869052609401604051602081830303815290604052805190602001209050610f7681836121b7565b610fb65760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b604482015260640161086b565b6000848152601560205260409020805460ff19166001179055610fe030610fda3390565b87611956565b7fd8138f8a3f377c5259ca548e70e4c2de94f129f5a11036a15b69513cba2b426a33604080516001600160a01b039092168252602082018890520160405180910390a15050505050565b6005546001600160a01b031633146110545760405162461bcd60e51b815260040161086b90612b37565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146110a05760405162461bcd60e51b815260040161086b90612b37565b6110aa6000612232565b565b6110b78233836118c4565b6108fd8282612069565b6005546001600160a01b031633146110eb5760405162461bcd60e51b815260040161086b90612b37565b600081511161110c5760405162461bcd60e51b815260040161086b90612b12565b60005b81518110156108fd576000600a600084848151811061113057611130612c8f565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061116c81612c48565b91505061110f565b6005546001600160a01b0316331461119e5760405162461bcd60e51b815260040161086b90612b37565b600d805460ff60a01b1916600160a01b179055565b6005546001600160a01b031633146111dd5760405162461bcd60e51b815260040161086b90612b37565b6111e8308383611956565b604080516001600160a01b0384168152602081018390527f7bd6d4be1decdc27a9ed9c7ccdf5bb7cc38e31b3647b958c6b37162a2296c0fa910160405180910390a15050565b6005546001600160a01b031633146112585760405162461bcd60e51b815260040161086b90612b37565b60008151116112795760405162461bcd60e51b815260040161086b90612b12565b60005b81518110156108fd5760006014600084848151811061129d5761129d612c8f565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806112d981612c48565b91505061127c565b6060600480546107be90612c0d565b6005546001600160a01b0316331461131a5760405162461bcd60e51b815260040161086b90612b37565b600081511161133b5760405162461bcd60e51b815260040161086b90612b12565b60005b81518110156108fd5760016012600084848151811061135f5761135f612c8f565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061139b81612c48565b91505061133e565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190838110156114285760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161086b565b610a5682868684036117a0565b60003361090f818585611956565b600d54600160a01b900460ff16156114865760405162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015260640161086b565b611491333083611956565b60408051338152602081018390527f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c491015b60405180910390a150565b6005546001600160a01b031633146114f85760405162461bcd60e51b815260040161086b90612b37565b6115023082612069565b6040518181527fd83c63197e8e676d80ab0122beba9a9d20f3828839e9a1d6fe81d242e9cd7e6e906020016114c3565b6005546001600160a01b0316331461155c5760405162461bcd60e51b815260040161086b90612b37565b6000600c54116115a35760405162461bcd60e51b81526020600482015260126024820152714e6f2074617820746f20776974686472617760701b604482015260640161086b565b600d546001600160a01b03166115f05760405162461bcd60e51b815260206004820152601260248201527111195d881dd85b1b195d081b9bdd081cd95d60721b604482015260640161086b565b600d54600c5461160d9130916001600160a01b0390911690612284565b6000600c55565b6005546001600160a01b0316331461163e5760405162461bcd60e51b815260040161086b90612b37565b6103e861164a60025490565b611655906002612bd7565b61165f9190612bb5565b8110156116ae5760405162461bcd60e51b815260206004820152601a60248201527f43616e6e6f7420736574206c6f776572207468616e20302e3225000000000000604482015260640161086b565b601155565b6005546001600160a01b031633146116dd5760405162461bcd60e51b815260040161086b90612b37565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146117325760405162461bcd60e51b815260040161086b90612b37565b6001600160a01b0381166117975760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161086b565b610c7781612232565b6001600160a01b0383166118025760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161086b565b6001600160a01b0382166118635760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161086b565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03838116600090815260016020908152604080832093861683529290522054600019811461195057818110156119435760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161086b565b61195084848484036117a0565b50505050565b6001600160a01b0383166119ac5760405162461bcd60e51b815260206004820152601a60248201527f5472616e736665722066726f6d207a65726f2061646472657373000000000000604482015260640161086b565b6001600160a01b038216611a025760405162461bcd60e51b815260206004820152601860248201527f5472616e7366657220746f207a65726f20616464726573730000000000000000604482015260640161086b565b6001600160a01b03821661dead1415611a5d5760405162461bcd60e51b815260206004820152601860248201527f5472616e7366657220746f206465616420616464726573730000000000000000604482015260640161086b565b80611a7d846001600160a01b031660009081526020819052604090205490565b1015611acb5760405162461bcd60e51b815260206004820152601f60248201527f5472616e7366657220616d6f756e7420657863656564732062616c616e636500604482015260640161086b565b6001600160a01b03831660009081526014602052604090205460ff16158015611b0d57506001600160a01b03821660009081526014602052604090205460ff16155b611b475760405162461bcd60e51b815260206004820152600b60248201526a109b1858dadb1a5cdd195960aa1b604482015260640161086b565b600d54600160a81b900460ff168015611b6e57506005546001600160a01b03848116911614155b8015611b8857506005546001600160a01b03838116911614155b15611f2b57600d54600160b01b900460ff16611c21576001600160a01b0383166000908152600a602052604090205460ff1680611bdd57506001600160a01b0382166000908152600a602052604090205460ff165b611c215760405162461bcd60e51b815260206004820152601560248201527454726164696e67206973206e6f742061637469766560581b604482015260640161086b565b600e544311611c675760405162461bcd60e51b81526020600482015260126024820152710c08189b1bd8dac8189b1858dadcdb1a5cdd60721b604482015260640161086b565b600f5460ff168015611c9257506001600160a01b0382166000908152600b602052604090205460ff16155b15611d0857326000908152601360205260409020544311611cf55760405162461bcd60e51b815260206004820152601e60248201527f4f6e652070757263686173652070657220626c6f636b20616c6c6f7765640000604482015260640161086b565b3260009081526013602052604090204390555b6001600160a01b0383166000908152600b602052604090205460ff168015611d4957506001600160a01b03821660009081526012602052604090205460ff16155b15611e0c57601054811115611d995760405162461bcd60e51b8152602060048201526016602482015275082dadeeadce840caf0c6cacac8e640e8d0ca40dac2f60531b604482015260640161086b565b6011546001600160a01b038316600090815260208190526040902054611dbf9083612b9d565b1115611e075760405162461bcd60e51b815260206004820152601760248201527613585e081c195c881dd85b1b195d08195e18d959591959604a1b604482015260640161086b565b611f2b565b6001600160a01b0382166000908152600b602052604090205460ff168015611e4d57506001600160a01b03831660009081526012602052604090205460ff16155b15611e9d57601054811115611e075760405162461bcd60e51b8152602060048201526016602482015275082dadeeadce840caf0c6cacac8e640e8d0ca40dac2f60531b604482015260640161086b565b6001600160a01b03821660009081526012602052604090205460ff16611f2b576011546001600160a01b038316600090815260208190526040902054611ee39083612b9d565b1115611f2b5760405162461bcd60e51b815260206004820152601760248201527613585e081c195c881dd85b1b195d08195e18d959591959604a1b604482015260640161086b565b60095460ff1615612059576001600160a01b0383166000908152600b602052604081205460ff168015611f7757506001600160a01b0383166000908152600a602052604090205460ff16155b8015611f8557506000600754115b15611fb157611faa6064611fa46007548561245290919063ffffffff16565b90612465565b9050612022565b6001600160a01b0383166000908152600b602052604090205460ff168015611ff257506001600160a01b0384166000908152600a602052604090205460ff16155b801561200057506000600854115b156120225761201f6064611fa46008548561245290919063ffffffff16565b90505b801561205757612033843083612284565b61203d8183612bf6565b915080600c60008282546120519190612b9d565b90915550505b505b612064838383612284565b505050565b6001600160a01b0382166120c95760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161086b565b6001600160a01b0382166000908152602081905260409020548181101561213d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161086b565b6001600160a01b038316600090815260208190526040812083830390556002805484929061216c908490612bf6565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c81018390526000908190605c0160408051601f1981840301815291905280516020909101206006549091506001600160a01b03166122208285612471565b6001600160a01b031614949350505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0383166122e85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161086b565b6001600160a01b03821661234a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161086b565b6001600160a01b038316600090815260208190526040902054818110156123c25760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161086b565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906123f9908490612b9d565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161244591815260200190565b60405180910390a3611950565b600061245e8284612bd7565b9392505050565b600061245e8284612bb5565b60008060006124808585612495565b9150915061248d81612505565b509392505050565b6000808251604114156124cc5760208301516040840151606085015160001a6124c0878285856126c0565b945094505050506124fe565b8251604014156124f657602083015160408401516124eb8683836127ad565b9350935050506124fe565b506000905060025b9250929050565b600081600481111561251957612519612c79565b14156125225750565b600181600481111561253657612536612c79565b14156125845760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161086b565b600281600481111561259857612598612c79565b14156125e65760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161086b565b60038160048111156125fa576125fa612c79565b14156126535760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b606482015260840161086b565b600481600481111561266757612667612c79565b1415610c775760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b606482015260840161086b565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156126f757506000905060036127a4565b8460ff16601b1415801561270f57508460ff16601c14155b1561272057506000905060046127a4565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612774573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661279d576000600192509250506127a4565b9150600090505b94509492505050565b6000806001600160ff1b038316816127ca60ff86901c601b612b9d565b90506127d8878288856126c0565b935093505050935093915050565b80356001600160a01b03811681146127fd57600080fd5b919050565b803580151581146127fd57600080fd5b60006020828403121561282457600080fd5b61245e826127e6565b6000806040838503121561284057600080fd5b612849836127e6565b9150612857602084016127e6565b90509250929050565b60008060006060848603121561287557600080fd5b61287e846127e6565b925061288c602085016127e6565b9150604084013590509250925092565b600080604083850312156128af57600080fd5b6128b8836127e6565b915061285760208401612802565b600080604083850312156128d957600080fd5b6128e2836127e6565b946020939093013593505050565b6000602080838503121561290357600080fd5b823567ffffffffffffffff8082111561291b57600080fd5b818501915085601f83011261292f57600080fd5b81358181111561294157612941612ca5565b8060051b9150612952848301612b6c565b8181528481019084860184860187018a101561296d57600080fd5b600095505b8386101561299757612983816127e6565b835260019590950194918601918601612972565b5098975050505050505050565b6000602082840312156129b657600080fd5b61245e82612802565b6000806000606084860312156129d457600080fd5b6129dd84612802565b95602085013595506040909401359392505050565b600060208284031215612a0457600080fd5b5035919050565b60008060008060808587031215612a2157600080fd5b84359350602080860135935060408601359250606086013567ffffffffffffffff80821115612a4f57600080fd5b818801915088601f830112612a6357600080fd5b813581811115612a7557612a75612ca5565b612a87601f8201601f19168501612b6c565b91508082528984828501011115612a9d57600080fd5b808484018584013760008482840101525080935050505092959194509250565b600060208083528351808285015260005b81811015612aea57858101830151858201604001528201612ace565b81811115612afc576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252600b908201526a4e6f206163636f756e747360a81b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b604051601f8201601f1916810167ffffffffffffffff81118282101715612b9557612b95612ca5565b604052919050565b60008219821115612bb057612bb0612c63565b500190565b600082612bd257634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612bf157612bf1612c63565b500290565b600082821015612c0857612c08612c63565b500390565b600181811c90821680612c2157607f821691505b60208210811415612c4257634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612c5c57612c5c612c63565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fdfea2646970667358221220ced927fbd0f2b613525a5afbf49137b881b1d99218fe5687cea64c25e046042264736f6c63430008070033

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

00000000000000000000000003fe9cf9eda8a01246c87aa4108e286becf2af920000000000000000000000007dfd9697c6a7ab3ed5f26f4fa38d967a4a687f29

-----Decoded View---------------
Arg [0] : devAddress (address): 0x03fe9Cf9edA8A01246C87aA4108e286BeCf2AF92
Arg [1] : signer (address): 0x7Dfd9697C6a7AB3Ed5F26f4fa38d967A4A687f29

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000003fe9cf9eda8a01246c87aa4108e286becf2af92
Arg [1] : 0000000000000000000000007dfd9697c6a7ab3ed5f26f4fa38d967a4a687f29


Deployed Bytecode Sourcemap

180:9697:4:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2135:98:2;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5481:241:4;;;;;;:::i;:::-;;:::i;:::-;;4412:197:2;;;;;;:::i;:::-;;:::i;:::-;;;5763:14:10;;5756:22;5738:41;;5726:2;5711:18;4412:197:2;5598:187:10;4139:82:4;;;:::i;6782:114::-;;;;;;:::i;:::-;-1:-1:-1;;;;;6871:18:4;6848:4;6871:18;;;:9;:18;;;;;;;;;6782:114;3223:106:2;3310:12;;3223:106;;;20279:25:10;;;20267:2;20252:18;3223:106:2;20133:177:10;4227:201:4;;;;;;:::i;:::-;;:::i;2191:94::-;;;;;;:::i;:::-;;:::i;5171:286:2:-;;;;;;:::i;:::-;;:::i;4010:123:4:-;;;:::i;5921:365::-;;;;;;:::i;:::-;;:::i;3072:91:2:-;;;3154:2;20457:36:10;;20445:2;20430:18;3072:91:2;20315:184:10;875:32:4;;;;;-1:-1:-1;;;875:32:4;;;;;;5852:236:2;;;;;;:::i;:::-;;:::i;761:31:4:-;;;;;;2019:69;;;:::i;3905:99::-;;;;;;:::i;:::-;;:::i;564:89:3:-;;;;;;:::i;:::-;;:::i;1077:27:4:-;;;;;;913:34;;;;;-1:-1:-1;;;913:34:4;;;;;;566:25;;;;;;4616:241;;;;;;:::i;:::-;;:::i;6292:237::-;;;;;;:::i;:::-;;:::i;843:26::-;;;;;-1:-1:-1;;;843:26:4;;;;;;2383:680;;;;;;:::i;:::-;;:::i;7016:112::-;;;;;;:::i;:::-;-1:-1:-1;;;;;7107:14:4;7084:4;7107:14;;;:8;:14;;;;;;;;;7016:112;2094:91;;;;;;:::i;:::-;;:::i;3387:125:2:-;;;;;;:::i;:::-;-1:-1:-1;;;;;3487:18:2;3461:7;3487:18;;;;;;;;;;;;3387:125;1661:101:7;;;:::i;959:161:3:-;;;;;;:::i;:::-;;:::i;6535:241:4:-;;;;;;:::i;:::-;;:::i;5728:114::-;;;;;;:::i;:::-;-1:-1:-1;;;;;5817:18:4;5794:4;5817:18;;;:9;:18;;;;;;;;;5728:114;1947:66;;;:::i;630:30::-;;;;;;;;;3537:169;;;;;;:::i;:::-;;:::i;4863:245::-;;;;;;:::i;:::-;;:::i;1029:85:7:-;1101:6;;-1:-1:-1;;;;;1101:6:7;1029:85;;;-1:-1:-1;;;;;5275:32:10;;;5257:51;;5245:2;5230:18;1029:85:7;5111:203:10;798:24:4;;;;;-1:-1:-1;;;;;798:24:4;;;2346:102:2;;;:::i;5238:237:4:-;;;;;;:::i;:::-;;:::i;6575:429:2:-;;;;;;:::i;:::-;;:::i;3708:189::-;;;;;;:::i;:::-;;:::i;3344:187:4:-;;;;;;:::i;:::-;;:::i;991:39::-;;;;;;;;;1036:35;;;;;;597:27;;;;;;3712:129;;;;;;:::i;:::-;;:::i;953:32::-;;;;;;514:26;;;;;-1:-1:-1;;;;;514:26:4;;;3955:149:2;;;;;;:::i;:::-;-1:-1:-1;;;;;4070:18:2;;;4044:7;4070:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3955:149;9531:344:4;;;:::i;4434:176::-;;;;;;:::i;:::-;;:::i;6902:108::-;;;;;;:::i;:::-;;:::i;1911:198:7:-;;;;;;:::i;:::-;;:::i;5114:118:4:-;;;;;;:::i;:::-;-1:-1:-1;;;;;5205:20:4;5182:4;5205:20;;;:11;:20;;;;;;;;;5114:118;2135:98:2;2189:13;2221:5;2214:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2135:98;:::o;5481:241:4:-;1101:6:7;;-1:-1:-1;;;;;1101:6:7;719:10:0;1241:23:7;1233:68;;;;-1:-1:-1;;;1233:68:7;;;;;;;:::i;:::-;;;;;;;;;5588:1:4::1;5570:8;:15;:19;5562:43;;;;-1:-1:-1::0;;;5562:43:4::1;;;;;;;:::i;:::-;5620:9;5615:101;5639:8;:15;5635:1;:19;5615:101;;;5700:5;5675:9;:22;5685:8;5694:1;5685:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;5675:22:4::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;5675:22:4;:30;;-1:-1:-1;;5675:30:4::1;::::0;::::1;;::::0;;;::::1;::::0;;5656:3;::::1;::::0;::::1;:::i;:::-;;;;5615:101;;;;5481:241:::0;:::o;4412:197:2:-;4495:4;719:10:0;4549:32:2;719:10:0;4565:7:2;4574:6;4549:8;:32::i;:::-;-1:-1:-1;4598:4:2;;4412:197;-1:-1:-1;;;4412:197:2:o;4139:82:4:-;1101:6:7;;-1:-1:-1;;;;;1101:6:7;719:10:0;1241:23:7;1233:68;;;;-1:-1:-1;;;1233:68:7;;;;;;;:::i;:::-;4192:14:4::1;:22:::0;;-1:-1:-1;;;;4192:22:4::1;::::0;;4139:82::o;4227:201::-;1101:6:7;;-1:-1:-1;;;;;1101:6:7;719:10:0;1241:23:7;1233:68;;;;-1:-1:-1;;;1233:68:7;;;;;;;:::i;:::-;4346:4:4::1;4325:13;3310:12:2::0;;;3223:106;4325:13:4::1;:17;::::0;4341:1:::1;4325:17;:::i;:::-;4324:26;;;;:::i;:::-;4313:6;:38;;4305:77;;;::::0;-1:-1:-1;;;4305:77:4;;17319:2:10;4305:77:4::1;::::0;::::1;17301:21:10::0;17358:2;17338:18;;;17331:30;17397:28;17377:18;;;17370:56;17443:18;;4305:77:4::1;17117:350:10::0;4305:77:4::1;4392:20;:29:::0;4227:201::o;2191:94::-;1101:6:7;;-1:-1:-1;;;;;1101:6:7;719:10:0;1241:23:7;1233:68;;;;-1:-1:-1;;;1233:68:7;;;;;;;:::i;:::-;2259:9:4::1;:19:::0;;-1:-1:-1;;;;;;2259:19:4::1;-1:-1:-1::0;;;;;2259:19:4;;;::::1;::::0;;;::::1;::::0;;2191:94::o;5171:286:2:-;5298:4;719:10:0;5354:38:2;5370:4;719:10:0;5385:6:2;5354:15;:38::i;:::-;5402:27;5412:4;5418:2;5422:6;5402:9;:27::i;:::-;-1:-1:-1;5446:4:2;;5171:286;-1:-1:-1;;;;5171:286:2:o;4010:123:4:-;1101:6:7;;-1:-1:-1;;;;;1101:6:7;719:10:0;1241:23:7;1233:68;;;;-1:-1:-1;;;1233:68:7;;;;;;;:::i;:::-;4063:14:4::1;:21:::0;;-1:-1:-1;;;;4063:21:4::1;-1:-1:-1::0;;;4063:21:4::1;::::0;;4114:12:::1;4094:17;:32:::0;4010:123::o;5921:365::-;1101:6:7;;-1:-1:-1;;;;;1101:6:7;719:10:0;1241:23:7;1233:68;;;;-1:-1:-1;;;1233:68:7;;;;;;;:::i;:::-;6052:2:4::1;6035:13;:19;;6027:72;;;::::0;-1:-1:-1;;;6027:72:4;;9201:2:10;6027:72:4::1;::::0;::::1;9183:21:10::0;9240:2;9220:18;;;9213:30;9279:34;9259:18;;;9252:62;-1:-1:-1;;;9330:18:10;;;9323:38;9378:19;;6027:72:4::1;8999:404:10::0;6027:72:4::1;6135:2;6117:14;:20;;6109:74;;;::::0;-1:-1:-1;;;6109:74:4;;15133:2:10;6109:74:4::1;::::0;::::1;15115:21:10::0;15172:2;15152:18;;;15145:30;15211:34;15191:18;;;15184:62;-1:-1:-1;;;15262:18:10;;;15255:39;15311:19;;6109:74:4::1;14931:405:10::0;6109:74:4::1;6193:10;:20:::0;;-1:-1:-1;;6193:20:4::1;::::0;::::1;;::::0;;;::::1;::::0;;;6223:6:::1;:22:::0;6255:7:::1;:24:::0;5921:365::o;5852:236:2:-;719:10:0;5940:4:2;6019:18;;;:11;:18;;;;;;;;-1:-1:-1;;;;;6019:27:2;;;;;;;;;;5940:4;;719:10:0;5994:66:2;;719:10:0;;6019:27:2;;:40;;6049:10;;6019:40;:::i;:::-;5994:8;:66::i;2019:69:4:-;1101:6:7;;-1:-1:-1;;;;;1101:6:7;719:10:0;1241:23:7;1233:68;;;;-1:-1:-1;;;1233:68:7;;;;;;;:::i;:::-;2067:6:4::1;:14:::0;;-1:-1:-1;;;;2067:14:4::1;::::0;;2019:69::o;3905:99::-;1101:6:7;;-1:-1:-1;;;;;1101:6:7;719:10:0;1241:23:7;1233:68;;;;-1:-1:-1;;;1233:68:7;;;;;;;:::i;:::-;3974:13:4::1;:23:::0;;;::::1;;-1:-1:-1::0;;;3974:23:4::1;-1:-1:-1::0;;;;3974:23:4;;::::1;::::0;;;::::1;::::0;;3905:99::o;564:89:3:-;619:27;719:10:0;639:6:3;619:5;:27::i;:::-;564:89;:::o;4616:241:4:-;1101:6:7;;-1:-1:-1;;;;;1101:6:7;719:10:0;1241:23:7;1233:68;;;;-1:-1:-1;;;1233:68:7;;;;;;;:::i;:::-;4722:1:4::1;4704:8;:15;:19;4696:43;;;;-1:-1:-1::0;;;4696:43:4::1;;;;;;;:::i;:::-;4754:9;4749:102;4773:8;:15;4769:1;:19;4749:102;;;4836:4;4809:11;:24;4821:8;4830:1;4821:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;4809:24:4::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;4809:24:4;:31;;-1:-1:-1;;4809:31:4::1;::::0;::::1;;::::0;;;::::1;::::0;;4790:3;::::1;::::0;::::1;:::i;:::-;;;;4749:102;;6292:237:::0;1101:6:7;;-1:-1:-1;;;;;1101:6:7;719:10:0;1241:23:7;1233:68;;;;-1:-1:-1;;;1233:68:7;;;;;;;:::i;:::-;6396:1:4::1;6378:8;:15;:19;6370:43;;;;-1:-1:-1::0;;;6370:43:4::1;;;;;;;:::i;:::-;6428:9;6423:100;6447:8;:15;6443:1;:19;6423:100;;;6508:4;6483:9;:22;6493:8;6502:1;6493:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;6483:22:4::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;6483:22:4;:29;;-1:-1:-1;;6483:29:4::1;::::0;::::1;;::::0;;;::::1;::::0;;6464:3;::::1;::::0;::::1;:::i;:::-;;;;6423:100;;2383:680:::0;2498:6;;-1:-1:-1;;;2498:6:4;;;;2497:7;2489:26;;;;-1:-1:-1;;;2489:26:4;;7754:2:10;2489:26:4;;;7736:21:10;7793:1;7773:18;;;7766:29;-1:-1:-1;;;7811:18:10;;;7804:36;7857:18;;2489:26:4;7552:329:10;2489:26:4;2534:17;;;;:10;:17;;;;;;;;2533:18;2525:49;;;;-1:-1:-1;;;2525:49:4;;15903:2:10;2525:49:4;;;15885:21:10;15942:2;15922:18;;;15915:30;-1:-1:-1;;;15961:18:10;;;15954:48;16019:18;;2525:49:4;15701:342:10;2525:49:4;2620:4;3461:7:2;3487:18;;;;;;;;;;;2592:6:4;:34;;2584:71;;;;-1:-1:-1;;;2584:71:4;;11137:2:10;2584:71:4;;;11119:21:10;11176:2;11156:18;;;11149:30;11215:26;11195:18;;;11188:54;11259:18;;2584:71:4;10935:348:10;2584:71:4;2691:7;2673:15;:25;2665:58;;;;-1:-1:-1;;;2665:58:4;;17674:2:10;2665:58:4;;;17656:21:10;17713:2;17693:18;;;17686:30;-1:-1:-1;;;17732:18:10;;;17725:50;17792:18;;2665:58:4;17472:344:10;2665:58:4;2762:15;719:10:0;2790:54:4;;4529:2:10;4525:15;;;;-1:-1:-1;;4521:53:10;2790:54:4;;;4509:66:10;4591:12;;;4584:28;;;4628:12;;;4621:28;;;4665:12;;;4658:28;;;4702:13;;2790:54:4;;;;;;;;;;;;2780:65;;;;;;2762:83;;2863:36;2880:7;2889:9;2863:16;:36::i;:::-;2855:66;;;;-1:-1:-1;;;2855:66:4;;11897:2:10;2855:66:4;;;11879:21:10;11936:2;11916:18;;;11909:30;-1:-1:-1;;;11955:18:10;;;11948:47;12012:18;;2855:66:4;11695:341:10;2855:66:4;2931:17;;;;:10;:17;;;;;:24;;-1:-1:-1;;2931:24:4;2951:4;2931:24;;;2966:46;2984:4;2991:12;719:10:0;;640:96;2991:12:4;3005:6;2966:9;:46::i;:::-;3027:29;719:10:0;3027:29:4;;;-1:-1:-1;;;;;5511:32:10;;;5493:51;;5575:2;5560:18;;5553:34;;;5466:18;3027:29:4;;;;;;;2479:584;2383:680;;;;:::o;2094:91::-;1101:6:7;;-1:-1:-1;;;;;1101:6:7;719:10:0;1241:23:7;1233:68;;;;-1:-1:-1;;;1233:68:7;;;;;;;:::i;:::-;2158:11:4::1;:20:::0;;-1:-1:-1;;;;;;2158:20:4::1;-1:-1:-1::0;;;;;2158:20:4;;;::::1;::::0;;;::::1;::::0;;2094:91::o;1661:101:7:-;1101:6;;-1:-1:-1;;;;;1101:6:7;719:10:0;1241:23:7;1233:68;;;;-1:-1:-1;;;1233:68:7;;;;;;;:::i;:::-;1725:30:::1;1752:1;1725:18;:30::i;:::-;1661:101::o:0;959:161:3:-;1035:46;1051:7;719:10:0;1074:6:3;1035:15;:46::i;:::-;1091:22;1097:7;1106:6;1091:5;:22::i;6535:241:4:-;1101:6:7;;-1:-1:-1;;;;;1101:6:7;719:10:0;1241:23:7;1233:68;;;;-1:-1:-1;;;1233:68:7;;;;;;;:::i;:::-;6642:1:4::1;6624:8;:15;:19;6616:43;;;;-1:-1:-1::0;;;6616:43:4::1;;;;;;;:::i;:::-;6674:9;6669:101;6693:8;:15;6689:1;:19;6669:101;;;6754:5;6729:9;:22;6739:8;6748:1;6739:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;6729:22:4::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;6729:22:4;:30;;-1:-1:-1;;6729:30:4::1;::::0;::::1;;::::0;;;::::1;::::0;;6710:3;::::1;::::0;::::1;:::i;:::-;;;;6669:101;;1947:66:::0;1101:6:7;;-1:-1:-1;;;;;1101:6:7;719:10:0;1241:23:7;1233:68;;;;-1:-1:-1;;;1233:68:7;;;;;;;:::i;:::-;1993:6:4::1;:13:::0;;-1:-1:-1;;;;1993:13:4::1;-1:-1:-1::0;;;1993:13:4::1;::::0;;1947:66::o;3537:169::-;1101:6:7;;-1:-1:-1;;;;;1101:6:7;719:10:0;1241:23:7;1233:68;;;;-1:-1:-1;;;1233:68:7;;;;;;;:::i;:::-;3616:41:4::1;3634:4;3641:7;3650:6;3616:9;:41::i;:::-;3672:27;::::0;;-1:-1:-1;;;;;5511:32:10;;5493:51;;5575:2;5560:18;;5553:34;;;3672:27:4::1;::::0;5466:18:10;3672:27:4::1;;;;;;;3537:169:::0;;:::o;4863:245::-;1101:6:7;;-1:-1:-1;;;;;1101:6:7;719:10:0;1241:23:7;1233:68;;;;-1:-1:-1;;;1233:68:7;;;;;;;:::i;:::-;4972:1:4::1;4954:8;:15;:19;4946:43;;;;-1:-1:-1::0;;;4946:43:4::1;;;;;;;:::i;:::-;5004:9;4999:103;5023:8;:15;5019:1;:19;4999:103;;;5086:5;5059:11;:24;5071:8;5080:1;5071:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;5059:24:4::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;5059:24:4;:32;;-1:-1:-1;;5059:32:4::1;::::0;::::1;;::::0;;;::::1;::::0;;5040:3;::::1;::::0;::::1;:::i;:::-;;;;4999:103;;2346:102:2::0;2402:13;2434:7;2427:14;;;;;:::i;5238:237:4:-;1101:6:7;;-1:-1:-1;;;;;1101:6:7;719:10:0;1241:23:7;1233:68;;;;-1:-1:-1;;;1233:68:7;;;;;;;:::i;:::-;5342:1:4::1;5324:8;:15;:19;5316:43;;;;-1:-1:-1::0;;;5316:43:4::1;;;;;;;:::i;:::-;5374:9;5369:100;5393:8;:15;5389:1;:19;5369:100;;;5454:4;5429:9;:22;5439:8;5448:1;5439:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;5429:22:4::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;5429:22:4;:29;;-1:-1:-1;;5429:29:4::1;::::0;::::1;;::::0;;;::::1;::::0;;5410:3;::::1;::::0;::::1;:::i;:::-;;;;5369:100;;6575:429:2::0;719:10:0;6668:4:2;6749:18;;;:11;:18;;;;;;;;-1:-1:-1;;;;;6749:27:2;;;;;;;;;;6668:4;;719:10:0;6794:35:2;;;;6786:85;;;;-1:-1:-1;;;6786:85:2;;19589:2:10;6786:85:2;;;19571:21:10;19628:2;19608:18;;;19601:30;19667:34;19647:18;;;19640:62;-1:-1:-1;;;19718:18:10;;;19711:35;19763:19;;6786:85:2;19387:401:10;6786:85:2;6905:60;6914:5;6921:7;6949:15;6930:16;:34;6905:8;:60::i;3708:189::-;3787:4;719:10:0;3841:28:2;719:10:0;3858:2:2;3862:6;3841:9;:28::i;3344:187:4:-;3405:6;;-1:-1:-1;;;3405:6:4;;;;3404:7;3396:26;;;;-1:-1:-1;;;3396:26:4;;7754:2:10;3396:26:4;;;7736:21:10;7793:1;7773:18;;;7766:29;-1:-1:-1;;;7811:18:10;;;7804:36;7857:18;;3396:26:4;7552:329:10;3396:26:4;3432:46;719:10:0;3464:4:4;3471:6;3432:9;:46::i;:::-;3493:31;;;719:10:0;5493:51:10;;5575:2;5560:18;;5553:34;;;3493:31:4;;5466:18:10;3493:31:4;;;;;;;;3344:187;:::o;3712:129::-;1101:6:7;;-1:-1:-1;;;;;1101:6:7;719:10:0;1241:23:7;1233:68;;;;-1:-1:-1;;;1233:68:7;;;;;;;:::i;:::-;3777:28:4::1;3791:4;3798:6;3777:5;:28::i;:::-;3820:14;::::0;20279:25:10;;;3820:14:4::1;::::0;20267:2:10;20252:18;3820:14:4::1;20133:177:10::0;9531:344:4;1101:6:7;;-1:-1:-1;;;;;1101:6:7;719:10:0;1241:23:7;1233:68;;;;-1:-1:-1;;;1233:68:7;;;;;;;:::i;:::-;9606:1:4::1;9591:12;;:16;9583:47;;;::::0;-1:-1:-1;;;9583:47:4;;14383:2:10;9583:47:4::1;::::0;::::1;14365:21:10::0;14422:2;14402:18;;;14395:30;-1:-1:-1;;;14441:18:10;;;14434:48;14499:18;;9583:47:4::1;14181:342:10::0;9583:47:4::1;9648:9;::::0;-1:-1:-1;;;;;9648:9:4::1;9640:54;;;::::0;-1:-1:-1;;;9640:54:4;;13684:2:10;9640:54:4::1;::::0;::::1;13666:21:10::0;13723:2;13703:18;;;13696:30;-1:-1:-1;;;13742:18:10;;;13735:48;13800:18;;9640:54:4::1;13482:342:10::0;9640:54:4::1;9818:9;::::0;9829:12:::1;::::0;9787:55:::1;::::0;9811:4:::1;::::0;-1:-1:-1;;;;;9818:9:4;;::::1;::::0;9787:15:::1;:55::i;:::-;9867:1;9852:12;:16:::0;9531:344::o;4434:176::-;1101:6:7;;-1:-1:-1;;;;;1101:6:7;719:10:0;1241:23:7;1233:68;;;;-1:-1:-1;;;1233:68:7;;;;;;;:::i;:::-;4539:4:4::1;4518:13;3310:12:2::0;;;3223:106;4518:13:4::1;:17;::::0;4534:1:::1;4518:17;:::i;:::-;4517:26;;;;:::i;:::-;4509:3;:35;;4501:74;;;::::0;-1:-1:-1;;;4501:74:4;;17319:2:10;4501:74:4::1;::::0;::::1;17301:21:10::0;17358:2;17338:18;;;17331:30;17397:28;17377:18;;;17370:56;17443:18;;4501:74:4::1;17117:350:10::0;4501:74:4::1;4585:12;:18:::0;4434:176::o;6902:108::-;1101:6:7;;-1:-1:-1;;;;;1101:6:7;719:10:0;1241:23:7;1233:68;;;;-1:-1:-1;;;1233:68:7;;;;;;;:::i;:::-;-1:-1:-1;;;;;6979:14:4;;;::::1;;::::0;;;:8:::1;:14;::::0;;;;:24;;-1:-1:-1;;6979:24:4::1;::::0;::::1;;::::0;;;::::1;::::0;;6902:108::o;1911:198:7:-;1101:6;;-1:-1:-1;;;;;1101:6:7;719:10:0;1241:23:7;1233:68;;;;-1:-1:-1;;;1233:68:7;;;;;;;:::i;:::-;-1:-1:-1;;;;;1999:22:7;::::1;1991:73;;;::::0;-1:-1:-1;;;1991:73:7;;9610:2:10;1991:73:7::1;::::0;::::1;9592:21:10::0;9649:2;9629:18;;;9622:30;9688:34;9668:18;;;9661:62;-1:-1:-1;;;9739:18:10;;;9732:36;9785:19;;1991:73:7::1;9408:402:10::0;1991:73:7::1;2074:28;2093:8;2074:18;:28::i;10102:370:2:-:0;-1:-1:-1;;;;;10233:19:2;;10225:68;;;;-1:-1:-1;;;10225:68:2;;18831:2:10;10225:68:2;;;18813:21:10;18870:2;18850:18;;;18843:30;18909:34;18889:18;;;18882:62;-1:-1:-1;;;18960:18:10;;;18953:34;19004:19;;10225:68:2;18629:400:10;10225:68:2;-1:-1:-1;;;;;10311:21:2;;10303:68;;;;-1:-1:-1;;;10303:68:2;;10017:2:10;10303:68:2;;;9999:21:10;10056:2;10036:18;;;10029:30;10095:34;10075:18;;;10068:62;-1:-1:-1;;;10146:18:10;;;10139:32;10188:19;;10303:68:2;9815:398:10;10303:68:2;-1:-1:-1;;;;;10382:18:2;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;10433:32;;20279:25:10;;;10433:32:2;;20252:18:10;10433:32:2;;;;;;;10102:370;;;:::o;10749:441::-;-1:-1:-1;;;;;4070:18:2;;;10879:24;4070:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;-1:-1:-1;;10945:37:2;;10941:243;;11026:6;11006:16;:26;;10998:68;;;;-1:-1:-1;;;10998:68:2;;10779:2:10;10998:68:2;;;10761:21:10;10818:2;10798:18;;;10791:30;10857:31;10837:18;;;10830:59;10906:18;;10998:68:2;10577:353:10;10998:68:2;11108:51;11117:5;11124:7;11152:6;11133:16;:25;11108:8;:51::i;:::-;10869:321;10749:441;;;:::o;7228:2248:4:-;-1:-1:-1;;;;;7325:18:4;;7317:57;;;;-1:-1:-1;;;7317:57:4;;16250:2:10;7317:57:4;;;16232:21:10;16289:2;16269:18;;;16262:30;16328:28;16308:18;;;16301:56;16374:18;;7317:57:4;16048:350:10;7317:57:4;-1:-1:-1;;;;;7392:16:4;;7384:53;;;;-1:-1:-1;;;7384:53:4;;19236:2:10;7384:53:4;;;19218:21:10;19275:2;19255:18;;;19248:30;19314:26;19294:18;;;19287:54;19358:18;;7384:53:4;19034:348:10;7384:53:4;-1:-1:-1;;;;;7455:21:4;;7469:6;7455:21;;7447:58;;;;-1:-1:-1;;;7447:58:4;;16605:2:10;7447:58:4;;;16587:21:10;16644:2;16624:18;;;16617:30;16683:26;16663:18;;;16656:54;16727:18;;7447:58:4;16403:348:10;7447:58:4;7542:6;7523:15;7533:4;-1:-1:-1;;;;;3487:18:2;3461:7;3487:18;;;;;;;;;;;;3387:125;7523:15:4;:25;;7515:69;;;;-1:-1:-1;;;7515:69:4;;15543:2:10;7515:69:4;;;15525:21:10;15582:2;15562:18;;;15555:30;15621:33;15601:18;;;15594:61;15672:18;;7515:69:4;15341:355:10;7515:69:4;-1:-1:-1;;;;;7603:17:4;;;;;;:11;:17;;;;;;;;7602:18;:38;;;;-1:-1:-1;;;;;;7625:15:4;;;;;;:11;:15;;;;;;;;7624:16;7602:38;7594:62;;;;-1:-1:-1;;;7594:62:4;;19995:2:10;7594:62:4;;;19977:21:10;20034:2;20014:18;;;20007:30;-1:-1:-1;;;20053:18:10;;;20046:41;20104:18;;7594:62:4;19793:335:10;7594:62:4;7704:13;;-1:-1:-1;;;7704:13:4;;;;:32;;;;-1:-1:-1;1101:6:7;;-1:-1:-1;;;;;7721:15:4;;;1101:6:7;;7721:15:4;;7704:32;:49;;;;-1:-1:-1;1101:6:7;;-1:-1:-1;;;;;7740:13:4;;;1101:6:7;;7740:13:4;;7704:49;7700:1183;;;7774:14;;-1:-1:-1;;;7774:14:4;;;;7769:120;;-1:-1:-1;;;;;7816:15:4;;;;;;:9;:15;;;;;;;;;:32;;-1:-1:-1;;;;;;7835:13:4;;;;;;:9;:13;;;;;;;;7816:32;7808:66;;;;-1:-1:-1;;;7808:66:4;;8851:2:10;7808:66:4;;;8833:21:10;8890:2;8870:18;;;8863:30;-1:-1:-1;;;8909:18:10;;;8902:51;8970:18;;7808:66:4;8649:345:10;7808:66:4;7926:17;;7911:12;:32;7903:63;;;;-1:-1:-1;;;7903:63:4;;12986:2:10;7903:63:4;;;12968:21:10;13025:2;13005:18;;;12998:30;-1:-1:-1;;;13044:18:10;;;13037:48;13102:18;;7903:63:4;12784:342:10;7903:63:4;7985:20;;;;:37;;;;-1:-1:-1;;;;;;8010:12:4;;;;;;:8;:12;;;;;;;;8009:13;7985:37;7981:223;;;8068:9;8050:28;;;;:17;:28;;;;;;8081:12;-1:-1:-1;8042:86:4;;;;-1:-1:-1;;;8042:86:4;;10420:2:10;8042:86:4;;;10402:21:10;10459:2;10439:18;;;10432:30;10498:32;10478:18;;;10471:60;10548:18;;8042:86:4;10218:354:10;8042:86:4;8164:9;8146:28;;;;:17;:28;;;;;8177:12;8146:43;;7981:223;-1:-1:-1;;;;;8289:14:4;;;;;;:8;:14;;;;;;;;:32;;;;-1:-1:-1;;;;;;8308:13:4;;;;;;:9;:13;;;;;;;;8307:14;8289:32;8285:588;;;8359:20;;8349:6;:30;;8341:65;;;;-1:-1:-1;;;8341:65:4;;13333:2:10;8341:65:4;;;13315:21:10;13372:2;13352:18;;;13345:30;-1:-1:-1;;;13391:18:10;;;13384:52;13453:18;;8341:65:4;13131:346:10;8341:65:4;8458:12;;-1:-1:-1;;;;;3487:18:2;;3461:7;3487:18;;;;;;;;;;;8432:22:4;;:6;:22;:::i;:::-;:38;;8424:74;;;;-1:-1:-1;;;8424:74:4;;14031:2:10;8424:74:4;;;14013:21:10;14070:2;14050:18;;;14043:30;-1:-1:-1;;;14089:18:10;;;14082:53;14152:18;;8424:74:4;13829:347:10;8424:74:4;8285:588;;;-1:-1:-1;;;;;8563:12:4;;;;;;:8;:12;;;;;;;;:32;;;;-1:-1:-1;;;;;;8580:15:4;;;;;;:9;:15;;;;;;;;8579:16;8563:32;8559:314;;;8633:20;;8623:6;:30;;8615:65;;;;-1:-1:-1;;;8615:65:4;;13333:2:10;8615:65:4;;;13315:21:10;13372:2;13352:18;;;13345:30;-1:-1:-1;;;13391:18:10;;;13384:52;13453:18;;8615:65:4;13131:346:10;8559:314:4;-1:-1:-1;;;;;8751:13:4;;;;;;:9;:13;;;;;;;;8746:127;;8818:12;;-1:-1:-1;;;;;3487:18:2;;3461:7;3487:18;;;;;;;;;;;8792:22:4;;:6;:22;:::i;:::-;:38;;8784:74;;;;-1:-1:-1;;;8784:74:4;;14031:2:10;8784:74:4;;;14013:21:10;14070:2;14050:18;;;14043:30;-1:-1:-1;;;14089:18:10;;;14082:53;14152:18;;8784:74:4;13829:347:10;8784:74:4;8897:10;;;;8893:533;;;-1:-1:-1;;;;;8975:14:4;;8923:11;8975:14;;;:8;:14;;;;;;;;:32;;;;-1:-1:-1;;;;;;8994:13:4;;;;;;:9;:13;;;;;;;;8993:14;8975:32;:46;;;;;9020:1;9011:6;;:10;8975:46;8971:276;;;9047:27;9070:3;9047:18;9058:6;;9047;:10;;:18;;;;:::i;:::-;:22;;:27::i;:::-;9041:33;;8971:276;;;-1:-1:-1;;;;;9131:12:4;;;;;;:8;:12;;;;;;;;:32;;;;-1:-1:-1;;;;;;9148:15:4;;;;;;:9;:15;;;;;;;;9147:16;9131:32;:47;;;;;9177:1;9167:7;;:11;9131:47;9127:120;;;9204:28;9228:3;9204:19;9215:7;;9204:6;:10;;:19;;;;:::i;:28::-;9198:34;;9127:120;9265:7;;9261:155;;9292:41;9308:4;9322;9329:3;9292:15;:41::i;:::-;9351:13;9361:3;9351:13;;:::i;:::-;;;9398:3;9382:12;;:19;;;;;;;:::i;:::-;;;;-1:-1:-1;;9261:155:4;8909:517;8893:533;9436:33;9452:4;9458:2;9462:6;9436:15;:33::i;:::-;7228:2248;;;:::o;9103:576:2:-;-1:-1:-1;;;;;9186:21:2;;9178:67;;;;-1:-1:-1;;;9178:67:2;;18023:2:10;9178:67:2;;;18005:21:10;18062:2;18042:18;;;18035:30;18101:34;18081:18;;;18074:62;-1:-1:-1;;;18152:18:10;;;18145:31;18193:19;;9178:67:2;17821:397:10;9178:67:2;-1:-1:-1;;;;;9341:18:2;;9316:22;9341:18;;;;;;;;;;;9377:24;;;;9369:71;;;;-1:-1:-1;;;9369:71:2;;8088:2:10;9369:71:2;;;8070:21:10;8127:2;8107:18;;;8100:30;8166:34;8146:18;;;8139:62;-1:-1:-1;;;8217:18:10;;;8210:32;8259:19;;9369:71:2;7886:398:10;9369:71:2;-1:-1:-1;;;;;9474:18:2;;:9;:18;;;;;;;;;;9495:23;;;9474:44;;9538:12;:22;;9512:6;;9474:9;9538:22;;9512:6;;9538:22;:::i;:::-;;;;-1:-1:-1;;9576:37:2;;20279:25:10;;;9602:1:2;;-1:-1:-1;;;;;9576:37:2;;;;;20267:2:10;20252:18;9576:37:2;;;;;;;7228:2248:4;;;:::o;3069:269::-;3211:58;;4968:66:10;3211:58:4;;;4956:79:10;5051:12;;;5044:28;;;3156:12:4;;;;5088::10;;3211:58:4;;;-1:-1:-1;;3211:58:4;;;;;;;;;3201:69;;3211:58;3201:69;;;;3320:11;;3201:69;;-1:-1:-1;;;;;;3320:11:4;3287:29;3201:69;3306:9;3287:18;:29::i;:::-;-1:-1:-1;;;;;3287:44:4;;;3069:269;-1:-1:-1;;;;3069:269:4:o;2263:187:7:-;2355:6;;;-1:-1:-1;;;;;2371:17:7;;;-1:-1:-1;;;;;;2371:17:7;;;;;;;2403:40;;2355:6;;;2371:17;2355:6;;2403:40;;2336:16;;2403:40;2326:124;2263:187;:::o;7467:651:2:-;-1:-1:-1;;;;;7593:18:2;;7585:68;;;;-1:-1:-1;;;7585:68:2;;18425:2:10;7585:68:2;;;18407:21:10;18464:2;18444:18;;;18437:30;18503:34;18483:18;;;18476:62;-1:-1:-1;;;18554:18:10;;;18547:35;18599:19;;7585:68:2;18223:401:10;7585:68:2;-1:-1:-1;;;;;7671:16:2;;7663:64;;;;-1:-1:-1;;;7663:64:2;;7350:2:10;7663:64:2;;;7332:21:10;7389:2;7369:18;;;7362:30;7428:34;7408:18;;;7401:62;-1:-1:-1;;;7479:18:10;;;7472:33;7522:19;;7663:64:2;7148:399:10;7663:64:2;-1:-1:-1;;;;;7809:15:2;;7787:19;7809:15;;;;;;;;;;;7842:21;;;;7834:72;;;;-1:-1:-1;;;7834:72:2;;11490:2:10;7834:72:2;;;11472:21:10;11529:2;11509:18;;;11502:30;11568:34;11548:18;;;11541:62;-1:-1:-1;;;11619:18:10;;;11612:36;11665:19;;7834:72:2;11288:402:10;7834:72:2;-1:-1:-1;;;;;7940:15:2;;;:9;:15;;;;;;;;;;;7958:20;;;7940:38;;7998:13;;;;;;;;:23;;7972:6;;7940:9;7998:23;;7972:6;;7998:23;:::i;:::-;;;;;;;;8052:2;-1:-1:-1;;;;;8037:26:2;8046:4;-1:-1:-1;;;;;8037:26:2;;8056:6;8037:26;;;;20279:25:10;;20267:2;20252:18;;20133:177;8037:26:2;;;;;;;;8074:37;7228:2248:4;3451:96:8;3509:7;3535:5;3539:1;3535;:5;:::i;:::-;3528:12;3451:96;-1:-1:-1;;;3451:96:8:o;3836:::-;3894:7;3920:5;3924:1;3920;:5;:::i;4307:227:1:-;4385:7;4405:17;4424:18;4446:27;4457:4;4463:9;4446:10;:27::i;:::-;4404:69;;;;4483:18;4495:5;4483:11;:18::i;:::-;-1:-1:-1;4518:9:1;4307:227;-1:-1:-1;;;4307:227:1:o;2242:1279::-;2323:7;2332:12;2553:9;:16;2573:2;2553:22;2549:966;;;2842:4;2827:20;;2821:27;2891:4;2876:20;;2870:27;2948:4;2933:20;;2927:27;2591:9;2919:36;2989:25;3000:4;2919:36;2821:27;2870;2989:10;:25::i;:::-;2982:32;;;;;;;;;2549:966;3035:9;:16;3055:2;3035:22;3031:484;;;3304:4;3289:20;;3283:27;3354:4;3339:20;;3333:27;3394:23;3405:4;3283:27;3333;3394:10;:23::i;:::-;3387:30;;;;;;;;3031:484;-1:-1:-1;3464:1:1;;-1:-1:-1;3468:35:1;3031:484;2242:1279;;;;;:::o;547:631::-;624:20;615:5;:29;;;;;;;;:::i;:::-;;611:561;;;547:631;:::o;611:561::-;720:29;711:5;:38;;;;;;;;:::i;:::-;;707:465;;;765:34;;-1:-1:-1;;;765:34:1;;6997:2:10;765:34:1;;;6979:21:10;7036:2;7016:18;;;7009:30;7075:26;7055:18;;;7048:54;7119:18;;765:34:1;6795:348:10;707:465:1;829:35;820:5;:44;;;;;;;;:::i;:::-;;816:356;;;880:41;;-1:-1:-1;;;880:41:1;;8491:2:10;880:41:1;;;8473:21:10;8530:2;8510:18;;;8503:30;8569:33;8549:18;;;8542:61;8620:18;;880:41:1;8289:355:10;816:356:1;951:30;942:5;:39;;;;;;;;:::i;:::-;;938:234;;;997:44;;-1:-1:-1;;;997:44:1;;12243:2:10;997:44:1;;;12225:21:10;12282:2;12262:18;;;12255:30;12321:34;12301:18;;;12294:62;-1:-1:-1;;;12372:18:10;;;12365:32;12414:19;;997:44:1;12041:398:10;938:234:1;1071:30;1062:5;:39;;;;;;;;:::i;:::-;;1058:114;;;1117:44;;-1:-1:-1;;;1117:44:1;;14730:2:10;1117:44:1;;;14712:21:10;14769:2;14749:18;;;14742:30;14808:34;14788:18;;;14781:62;-1:-1:-1;;;14859:18:10;;;14852:32;14901:19;;1117:44:1;14528:398:10;5715:1603:1;5841:7;;6765:66;6752:79;;6748:161;;;-1:-1:-1;6863:1:1;;-1:-1:-1;6867:30:1;6847:51;;6748:161;6922:1;:7;;6927:2;6922:7;;:18;;;;;6933:1;:7;;6938:2;6933:7;;6922:18;6918:100;;;-1:-1:-1;6972:1:1;;-1:-1:-1;6976:30:1;6956:51;;6918:100;7129:24;;;7112:14;7129:24;;;;;;;;;6017:25:10;;;6090:4;6078:17;;6058:18;;;6051:45;;;;6112:18;;;6105:34;;;6155:18;;;6148:34;;;7129:24:1;;5989:19:10;;7129:24:1;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7129:24:1;;-1:-1:-1;;7129:24:1;;;-1:-1:-1;;;;;;;7167:20:1;;7163:101;;7219:1;7223:29;7203:50;;;;;;;7163:101;7282:6;-1:-1:-1;7290:20:1;;-1:-1:-1;5715:1603:1;;;;;;;;:::o;4788:336::-;4898:7;;-1:-1:-1;;;;;4943:80:1;;4898:7;5049:25;5065:3;5050:18;;;5072:2;5049:25;:::i;:::-;5033:42;;5092:25;5103:4;5109:1;5112;5115;5092:10;:25::i;:::-;5085:32;;;;;;4788:336;;;;;;:::o;14:173:10:-;82:20;;-1:-1:-1;;;;;131:31:10;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:160::-;257:20;;313:13;;306:21;296:32;;286:60;;342:1;339;332:12;357:186;416:6;469:2;457:9;448:7;444:23;440:32;437:52;;;485:1;482;475:12;437:52;508:29;527:9;508:29;:::i;548:260::-;616:6;624;677:2;665:9;656:7;652:23;648:32;645:52;;;693:1;690;683:12;645:52;716:29;735:9;716:29;:::i;:::-;706:39;;764:38;798:2;787:9;783:18;764:38;:::i;:::-;754:48;;548:260;;;;;:::o;813:328::-;890:6;898;906;959:2;947:9;938:7;934:23;930:32;927:52;;;975:1;972;965:12;927:52;998:29;1017:9;998:29;:::i;:::-;988:39;;1046:38;1080:2;1069:9;1065:18;1046:38;:::i;:::-;1036:48;;1131:2;1120:9;1116:18;1103:32;1093:42;;813:328;;;;;:::o;1146:254::-;1211:6;1219;1272:2;1260:9;1251:7;1247:23;1243:32;1240:52;;;1288:1;1285;1278:12;1240:52;1311:29;1330:9;1311:29;:::i;:::-;1301:39;;1359:35;1390:2;1379:9;1375:18;1359:35;:::i;1405:254::-;1473:6;1481;1534:2;1522:9;1513:7;1509:23;1505:32;1502:52;;;1550:1;1547;1540:12;1502:52;1573:29;1592:9;1573:29;:::i;:::-;1563:39;1649:2;1634:18;;;;1621:32;;-1:-1:-1;;;1405:254:10:o;1664:963::-;1748:6;1779:2;1822;1810:9;1801:7;1797:23;1793:32;1790:52;;;1838:1;1835;1828:12;1790:52;1878:9;1865:23;1907:18;1948:2;1940:6;1937:14;1934:34;;;1964:1;1961;1954:12;1934:34;2002:6;1991:9;1987:22;1977:32;;2047:7;2040:4;2036:2;2032:13;2028:27;2018:55;;2069:1;2066;2059:12;2018:55;2105:2;2092:16;2127:2;2123;2120:10;2117:36;;;2133:18;;:::i;:::-;2179:2;2176:1;2172:10;2162:20;;2202:28;2226:2;2222;2218:11;2202:28;:::i;:::-;2264:15;;;2295:12;;;;2327:11;;;2357;;;2353:20;;2350:33;-1:-1:-1;2347:53:10;;;2396:1;2393;2386:12;2347:53;2418:1;2409:10;;2428:169;2442:2;2439:1;2436:9;2428:169;;;2499:23;2518:3;2499:23;:::i;:::-;2487:36;;2460:1;2453:9;;;;;2543:12;;;;2575;;2428:169;;;-1:-1:-1;2616:5:10;1664:963;-1:-1:-1;;;;;;;;1664:963:10:o;2632:180::-;2688:6;2741:2;2729:9;2720:7;2716:23;2712:32;2709:52;;;2757:1;2754;2747:12;2709:52;2780:26;2796:9;2780:26;:::i;2817:316::-;2891:6;2899;2907;2960:2;2948:9;2939:7;2935:23;2931:32;2928:52;;;2976:1;2973;2966:12;2928:52;2999:26;3015:9;2999:26;:::i;:::-;2989:36;3072:2;3057:18;;3044:32;;-1:-1:-1;3123:2:10;3108:18;;;3095:32;;2817:316;-1:-1:-1;;;2817:316:10:o;3138:180::-;3197:6;3250:2;3238:9;3229:7;3225:23;3221:32;3218:52;;;3266:1;3263;3256:12;3218:52;-1:-1:-1;3289:23:10;;3138:180;-1:-1:-1;3138:180:10:o;3323:968::-;3418:6;3426;3434;3442;3495:3;3483:9;3474:7;3470:23;3466:33;3463:53;;;3512:1;3509;3502:12;3463:53;3548:9;3535:23;3525:33;;3577:2;3626;3615:9;3611:18;3598:32;3588:42;;3677:2;3666:9;3662:18;3649:32;3639:42;;3732:2;3721:9;3717:18;3704:32;3755:18;3796:2;3788:6;3785:14;3782:34;;;3812:1;3809;3802:12;3782:34;3850:6;3839:9;3835:22;3825:32;;3895:7;3888:4;3884:2;3880:13;3876:27;3866:55;;3917:1;3914;3907:12;3866:55;3953:2;3940:16;3975:2;3971;3968:10;3965:36;;;3981:18;;:::i;:::-;4023:53;4066:2;4047:13;;-1:-1:-1;;4043:27:10;4039:36;;4023:53;:::i;:::-;4010:66;;4099:2;4092:5;4085:17;4139:7;4134:2;4129;4125;4121:11;4117:20;4114:33;4111:53;;;4160:1;4157;4150:12;4111:53;4215:2;4210;4206;4202:11;4197:2;4190:5;4186:14;4173:45;4259:1;4254:2;4249;4242:5;4238:14;4234:23;4227:34;;4280:5;4270:15;;;;;3323:968;;;;;;;:::o;6193:597::-;6305:4;6334:2;6363;6352:9;6345:21;6395:6;6389:13;6438:6;6433:2;6422:9;6418:18;6411:34;6463:1;6473:140;6487:6;6484:1;6481:13;6473:140;;;6582:14;;;6578:23;;6572:30;6548:17;;;6567:2;6544:26;6537:66;6502:10;;6473:140;;;6631:6;6628:1;6625:13;6622:91;;;6701:1;6696:2;6687:6;6676:9;6672:22;6668:31;6661:42;6622:91;-1:-1:-1;6774:2:10;6753:15;-1:-1:-1;;6749:29:10;6734:45;;;;6781:2;6730:54;;6193:597;-1:-1:-1;;;6193:597:10:o;12444:335::-;12646:2;12628:21;;;12685:2;12665:18;;;12658:30;-1:-1:-1;;;12719:2:10;12704:18;;12697:41;12770:2;12755:18;;12444:335::o;16756:356::-;16958:2;16940:21;;;16977:18;;;16970:30;17036:34;17031:2;17016:18;;17009:62;17103:2;17088:18;;16756:356::o;20504:275::-;20575:2;20569:9;20640:2;20621:13;;-1:-1:-1;;20617:27:10;20605:40;;20675:18;20660:34;;20696:22;;;20657:62;20654:88;;;20722:18;;:::i;:::-;20758:2;20751:22;20504:275;;-1:-1:-1;20504:275:10:o;20784:128::-;20824:3;20855:1;20851:6;20848:1;20845:13;20842:39;;;20861:18;;:::i;:::-;-1:-1:-1;20897:9:10;;20784:128::o;20917:217::-;20957:1;20983;20973:132;;21027:10;21022:3;21018:20;21015:1;21008:31;21062:4;21059:1;21052:15;21090:4;21087:1;21080:15;20973:132;-1:-1:-1;21119:9:10;;20917:217::o;21139:168::-;21179:7;21245:1;21241;21237:6;21233:14;21230:1;21227:21;21222:1;21215:9;21208:17;21204:45;21201:71;;;21252:18;;:::i;:::-;-1:-1:-1;21292:9:10;;21139:168::o;21312:125::-;21352:4;21380:1;21377;21374:8;21371:34;;;21385:18;;:::i;:::-;-1:-1:-1;21422:9:10;;21312:125::o;21442:380::-;21521:1;21517:12;;;;21564;;;21585:61;;21639:4;21631:6;21627:17;21617:27;;21585:61;21692:2;21684:6;21681:14;21661:18;21658:38;21655:161;;;21738:10;21733:3;21729:20;21726:1;21719:31;21773:4;21770:1;21763:15;21801:4;21798:1;21791:15;21655:161;;21442:380;;;:::o;21827:135::-;21866:3;-1:-1:-1;;21887:17:10;;21884:43;;;21907:18;;:::i;:::-;-1:-1:-1;21954:1:10;21943:13;;21827:135::o;21967:127::-;22028:10;22023:3;22019:20;22016:1;22009:31;22059:4;22056:1;22049:15;22083:4;22080:1;22073:15;22099:127;22160:10;22155:3;22151:20;22148:1;22141:31;22191:4;22188:1;22181:15;22215:4;22212:1;22205:15;22231:127;22292:10;22287:3;22283:20;22280:1;22273:31;22323:4;22320:1;22313:15;22347:4;22344:1;22337:15;22363:127;22424:10;22419:3;22415:20;22412:1;22405:31;22455:4;22452:1;22445:15;22479:4;22476:1;22469:15

Swarm Source

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