BNB Price: $631.49 (+0.63%)
 

Overview

Max Total Supply

5,506,486,517.535449APD

Holders

677,951

Market

Price

$0.00 @ 0.000000 BNB

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
100 APD

Value
$0.00
0xdb4f92ff54fb3917cfcfd1f5915ab7cebe1e432c
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
APWithPremium

Compiler Version
v0.8.24+commit.e11b9ed9

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license
/**
 *Submitted for verification at BscScan.com on 2025-08-08
*/

// SPDX-License-Identifier: AGPL-3.0
pragma solidity ^0.8.10;
/**
 * @dev External interface of AccessControl declared to support ERC-165 detection.
 */
interface IAccessControl {
    /**
     * @dev The `account` is missing a role.
     */
    error AccessControlUnauthorizedAccount(address account, bytes32 neededRole);

    /**
     * @dev The caller of a function is not the expected one.
     *
     * NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.
     */
    error AccessControlBadConfirmation();

    /**
     * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`
     *
     * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite
     * {RoleAdminChanged} not being emitted signaling this.
     */
    event RoleAdminChanged(
        bytes32 indexed role,
        bytes32 indexed previousAdminRole,
        bytes32 indexed newAdminRole
    );

    /**
     * @dev Emitted when `account` is granted `role`.
     *
     * `sender` is the account that originated the contract call. This account bears the admin role (for the granted role).
     * Expected in cases where the role was granted using the internal {AccessControl-_grantRole}.
     */
    event RoleGranted(
        bytes32 indexed role,
        address indexed account,
        address indexed sender
    );

    /**
     * @dev Emitted when `account` is revoked `role`.
     *
     * `sender` is the account that originated the contract call:
     *   - if using `revokeRole`, it is the admin role bearer
     *   - if using `renounceRole`, it is the role bearer (i.e. `account`)
     */
    event RoleRevoked(
        bytes32 indexed role,
        address indexed account,
        address indexed sender
    );

    /**
     * @dev Returns `true` if `account` has been granted `role`.
     */
    function hasRole(
        bytes32 role,
        address account
    ) external view returns (bool);

    /**
     * @dev Returns the admin role that controls `role`. See {grantRole} and
     * {revokeRole}.
     *
     * To change a role's admin, use {AccessControl-_setRoleAdmin}.
     */
    function getRoleAdmin(bytes32 role) external view returns (bytes32);

    /**
     * @dev Grants `role` to `account`.
     *
     * If `account` had not been already granted `role`, emits a {RoleGranted}
     * event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     */
    function grantRole(bytes32 role, address account) external;

    /**
     * @dev Revokes `role` from `account`.
     *
     * If `account` had been granted `role`, emits a {RoleRevoked} event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     */
    function revokeRole(bytes32 role, address account) external;

    /**
     * @dev Revokes `role` from the calling account.
     *
     * Roles are often managed via {grantRole} and {revokeRole}: this function's
     * purpose is to provide a mechanism for accounts to lose their privileges
     * if they are compromised (such as when a trusted device is misplaced).
     *
     * If the calling account had been granted `role`, emits a {RoleRevoked}
     * event.
     *
     * Requirements:
     *
     * - the caller must be `callerConfirmation`.
     */
    function renounceRole(bytes32 role, address callerConfirmation) external;
}

// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)

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

    function _contextSuffixLength() internal view virtual returns (uint256) {
        return 0;
    }
}

// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)

/**
 * @dev Interface of the ERC-165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[ERC].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

/**
 * @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;
        uint8 v;
        assembly {
            s := and(
                vs,
                0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
            )
            v := add(shr(255, vs), 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 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)
            );
    }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(
        address recipient,
        uint256 amount
    ) external returns (bool);

    function allowance(
        address owner,
        address spender
    ) external view returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    function burn(uint256 amount) external;

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

/**
 * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in
 * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].
 *
 * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by
 * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't
 * need to send a transaction, and thus is not required to hold Ether at all.
 */
interface IERC20Permit {
    /**
     * @dev Sets `value` as th xe allowance of `spender` over ``owner``'s tokens,
     * given ``owner``'s signed approval.
     *
     * IMPORTANT: The same issues {IERC20-approve} has related to transaction
     * ordering also apply here.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `deadline` must be a timestamp in the future.
     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`
     * over the EIP712-formatted function arguments.
     * - the signature must use ``owner``'s current nonce (see {nonces}).
     *
     * For more information on the signature format, see the
     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP
     * section].
     */
    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    /**
     * @dev Returns the current nonce for `owner`. This value must be
     * included whenever a signature is generated for {permit}.
     *
     * Every successful call to {permit} increases ``owner``'s nonce by one. This
     * prevents a signature from being used multiple times.
     */
    function nonces(address owner) external view returns (uint256);

    /**
     * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.
     */
    // solhint-disable-next-line func-name-mixedcase
    function DOMAIN_SEPARATOR() external view returns (bytes32);
}

// TODO(zx): Replace all instances of SafeMath with OZ implementation
library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        assert(a == b * c + (a % b)); // There is no case in which this doesn't hold

        return c;
    }

    // Only used in the  BondingCalculator.sol
    function sqrrt(uint256 a) internal pure returns (uint256 c) {
        if (a > 3) {
            c = a;
            uint256 b = add(div(a, 2), 1);
            while (b < c) {
                c = b;
                b = div(add(div(a, b), b), 2);
            }
        } else if (a != 0) {
            c = 1;
        }
    }
}

// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/ERC165.sol)

/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC-165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(
        bytes4 interfaceId
    ) public view virtual returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

/**
 * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.
 *
 * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,
 * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding
 * they need in their contracts using a combination of `abi.encode` and `keccak256`.
 *
 * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding
 * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA
 * ({_hashTypedDataV4}).
 *
 * The implementation of the domain separator was designed to be as efficient as possible while still properly updating
 * the chain id to protect against replay attacks on an eventual fork of the chain.
 *
 * NOTE: This contract implements the version of the encoding known as "v4", as implemented by the JSON RPC method
 * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].
 *
 * _Available since v3.4._
 */
abstract contract EIP712 {
    /* solhint-disable var-name-mixedcase */
    // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to
    // invalidate the cached domain separator if the chain id changes.
    bytes32 private immutable _CACHED_DOMAIN_SEPARATOR;
    uint256 private immutable _CACHED_CHAIN_ID;

    bytes32 private immutable _HASHED_NAME;
    bytes32 private immutable _HASHED_VERSION;
    bytes32 private immutable _TYPE_HASH;

    /* solhint-enable var-name-mixedcase */

    /**
     * @dev Initializes the domain separator and parameter caches.
     *
     * The meaning of `name` and `version` is specified in
     * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:
     *
     * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.
     * - `version`: the current major version of the signing domain.
     *
     * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart
     * contract upgrade].
     */
    constructor(string memory name, string memory version) {
        uint256 chainID;
        assembly {
            chainID := chainid()
        }

        bytes32 hashedName = keccak256(bytes(name));
        bytes32 hashedVersion = keccak256(bytes(version));
        bytes32 typeHash = keccak256(
            "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"
        );
        _HASHED_NAME = hashedName;
        _HASHED_VERSION = hashedVersion;
        _CACHED_CHAIN_ID = chainID;
        _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(
            typeHash,
            hashedName,
            hashedVersion
        );
        _TYPE_HASH = typeHash;
    }

    /**
     * @dev Returns the domain separator for the current chain.
     */
    function _domainSeparatorV4() internal view returns (bytes32) {
        uint256 chainID;
        assembly {
            chainID := chainid()
        }

        if (chainID == _CACHED_CHAIN_ID) {
            return _CACHED_DOMAIN_SEPARATOR;
        } else {
            return
                _buildDomainSeparator(
                    _TYPE_HASH,
                    _HASHED_NAME,
                    _HASHED_VERSION
                );
        }
    }

    function _buildDomainSeparator(
        bytes32 typeHash,
        bytes32 nameHash,
        bytes32 versionHash
    ) private view returns (bytes32) {
        uint256 chainID;
        assembly {
            chainID := chainid()
        }

        return
            keccak256(
                abi.encode(
                    typeHash,
                    nameHash,
                    versionHash,
                    chainID,
                    address(this)
                )
            );
    }

    /**
     * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this
     * function returns the hash of the fully encoded EIP712 message for this domain.
     *
     * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:
     *
     * ```solidity
     * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(
     *     keccak256("Mail(address to,string contents)"),
     *     mailTo,
     *     keccak256(bytes(mailContents))
     * )));
     * address signer = ECDSA.recover(digest, signature);
     * ```
     */
    function _hashTypedDataV4(
        bytes32 structHash
    ) internal view virtual returns (bytes32) {
        return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);
    }
}

interface IAP is IERC20 {
    function mint(address account_, uint256 amount_) external;

    function burn(uint256 amount) external;

    function burnFrom(address account_, uint256 amount_) external;
}

library Counters {
    using SafeMath for uint256;

    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        // The {SafeMath} overflow check can be skipped here, see the comment at the top
        counter._value += 1;
    }

    function decrement(Counter storage counter) internal {
        counter._value = counter._value.sub(1);
    }
}

abstract contract ERC20 is IERC20 {
    using SafeMath for uint256;

    // TODO comment actual hash value.
    bytes32 private constant ERC20TOKEN_ERC1820_INTERFACE_ID =
        keccak256("ERC20Token");

    mapping(address => uint256) internal _balances;

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

    uint256 internal _totalSupply;

    string internal _name;

    string internal _symbol;

    uint8 internal immutable _decimals;

    constructor(string memory name_, string memory symbol_, uint8 decimals_) {
        _name = name_;
        _symbol = symbol_;
        _decimals = decimals_;
    }

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual returns (uint8) {
        return _decimals;
    }

    function totalSupply() public view override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(
        address account
    ) public view virtual override returns (uint256) {
        return _balances[account];
    }

    function transfer(
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

    function allowance(
        address owner,
        address spender
    ) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(
        address spender,
        uint256 amount
    ) public virtual override returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(
            sender,
            msg.sender,
            _allowances[sender][msg.sender].sub(
                amount,
                "ERC20: transfer amount exceeds allowance"
            )
        );
        return true;
    }

    function increaseAllowance(
        address spender,
        uint256 addedValue
    ) public virtual returns (bool) {
        _approve(
            msg.sender,
            spender,
            _allowances[msg.sender][spender].add(addedValue)
        );
        return true;
    }

    function decreaseAllowance(
        address spender,
        uint256 subtractedValue
    ) public virtual returns (bool) {
        _approve(
            msg.sender,
            spender,
            _allowances[msg.sender][spender].sub(
                subtractedValue,
                "ERC20: decreased allowance below zero"
            )
        );
        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(
            amount,
            "ERC20: transfer amount exceeds balance"
        );
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");
        _beforeTokenTransfer(address(0), account, amount);
        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }


    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

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

    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);
    }

    function _beforeTokenTransfer(
        address from_,
        address to_,
        uint256 amount_
    ) internal virtual {}
}

// OpenZeppelin Contracts (last updated v5.0.0) (access/AccessControl.sol)

/**
 * @dev Contract module that allows children to implement role-based access
 * control mechanisms. This is a lightweight version that doesn't allow enumerating role
 * members except through off-chain means by accessing the contract event logs. Some
 * applications may benefit from on-chain enumerability, for those cases see
 * {AccessControlEnumerable}.
 *
 * Roles are referred to by their `bytes32` identifier. These should be exposed
 * in the external API and be unique. The best way to achieve this is by
 * using `public constant` hash digests:
 *
 * ```solidity
 * bytes32 public constant MY_ROLE = keccak256("MY_ROLE");
 * ```
 *
 * Roles can be used to represent a set of permissions. To restrict access to a
 * function call, use {hasRole}:
 *
 * ```solidity
 * function foo() public {
 *     require(hasRole(MY_ROLE, msg.sender));
 *     ...
 * }
 * ```
 *
 * Roles can be granted and revoked dynamically via the {grantRole} and
 * {revokeRole} functions. Each role has an associated admin role, and only
 * accounts that have a role's admin role can call {grantRole} and {revokeRole}.
 *
 * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means
 * that only accounts with this role will be able to grant or revoke other
 * roles. More complex role relationships can be created by using
 * {_setRoleAdmin}.
 *
 * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to
 * grant and revoke this role. Extra precautions should be taken to secure
 * accounts that have been granted it. We recommend using {AccessControlDefaultAdminRules}
 * to enforce additional security measures for this role.
 */
abstract contract AccessControl is Context, IAccessControl, ERC165 {
    struct RoleData {
        mapping(address account => bool) hasRole;
        bytes32 adminRole;
    }

    mapping(bytes32 role => RoleData) private _roles;

    bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;

    /**
     * @dev Modifier that checks that an account has a specific role. Reverts
     * with an {AccessControlUnauthorizedAccount} error including the required role.
     */
    modifier onlyRole(bytes32 role) {
        _checkRole(role);
        _;
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(
        bytes4 interfaceId
    ) public view virtual override returns (bool) {
        return
            interfaceId == type(IAccessControl).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    /**
     * @dev Returns `true` if `account` has been granted `role`.
     */
    function hasRole(
        bytes32 role,
        address account
    ) public view virtual returns (bool) {
        return _roles[role].hasRole[account];
    }

    /**
     * @dev Reverts with an {AccessControlUnauthorizedAccount} error if `_msgSender()`
     * is missing `role`. Overriding this function changes the behavior of the {onlyRole} modifier.
     */
    function _checkRole(bytes32 role) internal view virtual {
        _checkRole(role, _msgSender());
    }

    /**
     * @dev Reverts with an {AccessControlUnauthorizedAccount} error if `account`
     * is missing `role`.
     */
    function _checkRole(bytes32 role, address account) internal view virtual {
        if (!hasRole(role, account)) {
            revert AccessControlUnauthorizedAccount(account, role);
        }
    }

    /**
     * @dev Returns the admin role that controls `role`. See {grantRole} and
     * {revokeRole}.
     *
     * To change a role's admin, use {_setRoleAdmin}.
     */
    function getRoleAdmin(bytes32 role) public view virtual returns (bytes32) {
        return _roles[role].adminRole;
    }

    /**
     * @dev Grants `role` to `account`.
     *
     * If `account` had not been already granted `role`, emits a {RoleGranted}
     * event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     *
     * May emit a {RoleGranted} event.
     */
    function grantRole(
        bytes32 role,
        address account
    ) public virtual onlyRole(getRoleAdmin(role)) {
        _grantRole(role, account);
    }

    /**
     * @dev Revokes `role` from `account`.
     *
     * If `account` had been granted `role`, emits a {RoleRevoked} event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     *
     * May emit a {RoleRevoked} event.
     */
    function revokeRole(
        bytes32 role,
        address account
    ) public virtual onlyRole(getRoleAdmin(role)) {
        _revokeRole(role, account);
    }

    /**
     * @dev Revokes `role` from the calling account.
     *
     * Roles are often managed via {grantRole} and {revokeRole}: this function's
     * purpose is to provide a mechanism for accounts to lose their privileges
     * if they are compromised (such as when a trusted device is misplaced).
     *
     * If the calling account had been revoked `role`, emits a {RoleRevoked}
     * event.
     *
     * Requirements:
     *
     * - the caller must be `callerConfirmation`.
     *
     * May emit a {RoleRevoked} event.
     */
    function renounceRole(
        bytes32 role,
        address callerConfirmation
    ) public virtual {
        if (callerConfirmation != _msgSender()) {
            revert AccessControlBadConfirmation();
        }

        _revokeRole(role, callerConfirmation);
    }

    /**
     * @dev Sets `adminRole` as ``role``'s admin role.
     *
     * Emits a {RoleAdminChanged} event.
     */
    function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {
        bytes32 previousAdminRole = getRoleAdmin(role);
        _roles[role].adminRole = adminRole;
        emit RoleAdminChanged(role, previousAdminRole, adminRole);
    }

    /**
     * @dev Attempts to grant `role` to `account` and returns a boolean indicating if `role` was granted.
     *
     * Internal function without access restriction.
     *
     * May emit a {RoleGranted} event.
     */
    function _grantRole(
        bytes32 role,
        address account
    ) internal virtual returns (bool) {
        if (!hasRole(role, account)) {
            _roles[role].hasRole[account] = true;
            emit RoleGranted(role, account, _msgSender());
            return true;
        } else {
            return false;
        }
    }

    /**
     * @dev Attempts to revoke `role` to `account` and returns a boolean indicating if `role` was revoked.
     *
     * Internal function without access restriction.
     *
     * May emit a {RoleRevoked} event.
     */
    function _revokeRole(
        bytes32 role,
        address account
    ) internal virtual returns (bool) {
        if (hasRole(role, account)) {
            _roles[role].hasRole[account] = false;
            emit RoleRevoked(role, account, _msgSender());
            return true;
        } else {
            return false;
        }
    }
}

/**
 * @dev Implementation of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in
 * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].
 *
 * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by
 * presenting a message signed by the account. By not relying on `{IERC20-approve}`, the token holder account doesn't
 * need to send a transaction, and thus is not required to hold Ether at all.
 *
 * _Available since v3.4._
 */
abstract contract ERC20Permit is ERC20, IERC20Permit, EIP712 {
    using Counters for Counters.Counter;

    mapping(address => Counters.Counter) private _nonces;

    // solhint-disable-next-line var-name-mixedcase
    bytes32 private immutable _PERMIT_TYPEHASH =
        keccak256(
            "Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"
        );

    /**
     * @dev Initializes the {EIP712} domain separator using the `name` parameter, and setting `version` to `"1"`.
     *
     * It's a good idea to use the same `name` that is defined as the ERC20 token name.
     */
    constructor(string memory name) EIP712(name, "1") {}

    /**
     * @dev See {IERC20Permit-permit}.
     */
    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) public virtual override {
        require(block.timestamp <= deadline, "ERC20Permit: expired deadline");

        bytes32 structHash = keccak256(
            abi.encode(
                _PERMIT_TYPEHASH,
                owner,
                spender,
                value,
                _useNonce(owner),
                deadline
            )
        );

        bytes32 hash = _hashTypedDataV4(structHash);

        address signer = ECDSA.recover(hash, v, r, s);
        require(signer == owner, "ERC20Permit: invalid signature");

        _approve(owner, spender, value);
    }

    /**
     * @dev See {IERC20Permit-nonces}.
     */
    function nonces(
        address owner
    ) public view virtual override returns (uint256) {
        return _nonces[owner].current();
    }

    /**
     * @dev See {IERC20Permit-DOMAIN_SEPARATOR}.
     */
    // solhint-disable-next-line func-name-mixedcase
    function DOMAIN_SEPARATOR() external view override returns (bytes32) {
        return _domainSeparatorV4();
    }

    /**
     * @dev "Consume a nonce": return the current value and increment.
     *
     * _Available since v4.1._
     */
    function _useNonce(
        address owner
    ) internal virtual returns (uint256 current) {
        Counters.Counter storage nonce = _nonces[owner];
        current = nonce.current();
        nonce.increment();
    }
}

contract VaultOwned is AccessControl {
    bytes32 public constant MINT = keccak256("MINT");

    constructor() {
        _setRoleAdmin(MINT, DEFAULT_ADMIN_ROLE);
        _grantRole(DEFAULT_ADMIN_ROLE, msg.sender);
    }

    modifier onlyVault() {
        require(
            hasRole(MINT, msg.sender),
            "VaultOwned: caller is not the Vault"
        );
        _;
    }
}

contract APERC20Token is ERC20Permit, IAP, VaultOwned {
    using SafeMath for uint256;

    // Maximum supply: 92.8 billion tokens with 9 decimals
    uint256 public constant MAX_SUPPLY = 92800000000 * 10**9;

    constructor() ERC20("APD", "APD", 9) ERC20Permit("AP") {}

    function mint(
        address account_,
        uint256 amount_
    ) external override onlyVault {
        require(
            totalSupply().add(amount_) <= MAX_SUPPLY,
            "APERC20Token: minting would exceed max supply"
        );
        _mint(account_, amount_);
    }

    function burn(uint256 amount) external override(IERC20, IAP) {
        _burn(msg.sender, amount);
    }

    function burnFrom(address account_, uint256 amount_) external override {
        _burnFrom(account_, amount_);
    }

    function _burnFrom(address account_, uint256 amount_) internal {
        require(
            allowance(account_, msg.sender) >= amount_,
            "ERC20: burn amount exceeds allowance"
        );
        uint256 decreasedAllowance = allowance(account_, msg.sender) - amount_;

        _approve(account_, msg.sender, decreasedAllowance);
        _burn(account_, amount_);
    }
}

contract APWithPremium is APERC20Token {
    using SafeMath for uint256;

    address public mainPair;
    address public buyTaxReceiver;
    address public sellTaxReceiver;

    uint256 public constant PRECISION = 10000;
    uint256 public swapBuyTaxRatio = 0;
    uint256 public swapSellTaxRatio = 5 * 100; //500 = 5%

    bytes32 public constant INTERN_SYSTEM = keccak256("INTERN_SYSTEM");

    event FeeRatioChanged(uint256 _swapBuyTaxRatio, uint256 _swapSellTaxRatio);
    event FeeTaken(
        address indexed sender,
        address indexed receiver,
        uint256 amount,
        uint256 fee
    );

    modifier onlyDefaultAdmin() {
        require(hasRole(DEFAULT_ADMIN_ROLE, msg.sender), "Caller is not admin");
        _;
    }

    constructor(
        address _buyTaxReceiver,
        address _sellTaxReceiver
    ) APERC20Token() {
        buyTaxReceiver = _buyTaxReceiver;
        sellTaxReceiver = _sellTaxReceiver;

        _setRoleAdmin(INTERN_SYSTEM, DEFAULT_ADMIN_ROLE);
        _grantRole(INTERN_SYSTEM, msg.sender);
        _grantRole(INTERN_SYSTEM, buyTaxReceiver);
        _grantRole(INTERN_SYSTEM, sellTaxReceiver);
    }

    function setMainPair(address _pair) external onlyDefaultAdmin {
        mainPair = _pair;
    }

    function setSwapTaxRatio(
        uint256 _swapBuyTaxRatio,
        uint256 _swapSellTaxRatio
    ) external onlyDefaultAdmin {
        require(
            _swapBuyTaxRatio <= 1 * 1e4 && _swapSellTaxRatio < 1 * 1e4,
            "tax too high!"
        );
        swapBuyTaxRatio = _swapBuyTaxRatio;
        swapSellTaxRatio = _swapSellTaxRatio;

        emit FeeRatioChanged(_swapBuyTaxRatio, _swapSellTaxRatio);
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual override {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        // take fee when non-whitelist users trade
        if (_isTradeAndNotInSystem(sender, recipient)) {
            // buyer or remove lp
            if (sender == mainPair) {
                uint buyFee = (amount * (swapBuyTaxRatio)) / (PRECISION);
                if (buyFee > 0) {
                    amount = amount - buyFee;
                    super._transfer(sender, buyTaxReceiver, buyFee);
                    emit FeeTaken(sender, buyTaxReceiver, amount, buyFee);
                }
            }
            // seller or add lp
            else if (recipient == mainPair) {
                // take fee

                uint256 fee = (amount * (swapSellTaxRatio)) / (PRECISION);
                if (fee > 0) {
                    amount = amount - fee;
                    super._transfer(sender, sellTaxReceiver, fee);
                    emit FeeTaken(sender, sellTaxReceiver, amount, fee);
                }
            }
        }

        super._transfer(sender, recipient, amount);
    }

    function _isTradeAndNotInSystem(
        address _from,
        address _to
    ) internal view returns (bool) {
        return
            (_from == mainPair && !hasRole(INTERN_SYSTEM, _to)) ||
            (_to == mainPair && !hasRole(INTERN_SYSTEM, _from));
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_buyTaxReceiver","type":"address"},{"internalType":"address","name":"_sellTaxReceiver","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AccessControlBadConfirmation","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"neededRole","type":"bytes32"}],"name":"AccessControlUnauthorizedAccount","type":"error"},{"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":"_swapBuyTaxRatio","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_swapSellTaxRatio","type":"uint256"}],"name":"FeeRatioChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"}],"name":"FeeTaken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","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":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INTERN_SYSTEM","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRECISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[],"name":"buyTaxReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"mainPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account_","type":"address"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"callerConfirmation","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTaxReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"}],"name":"setMainPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swapBuyTaxRatio","type":"uint256"},{"internalType":"uint256","name":"_swapSellTaxRatio","type":"uint256"}],"name":"setSwapTaxRatio","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapBuyTaxRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapSellTaxRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

6101606040527f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9610140908152505f600a556101f4600b5534801562000043575f80fd5b506040516200446438038062004464833981810160405281019062000069919062000664565b6040518060400160405280600281526020017f4150000000000000000000000000000000000000000000000000000000000000815250806040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f41504400000000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f4150440000000000000000000000000000000000000000000000000000000000815250600982600390816200015591906200090d565b5081600490816200016791906200090d565b508060ff1660808160ff16815250505050505f4690505f838051906020012090505f838051906020012090505f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f90508260e081815250508161010081815250508360c08181525050620001e3818484620003da60201b60201c565b60a08181525050806101208181525050505050505050506200022e7ffdf81848136595c31bb5f76217767372bc4bf906663038eb38381131ea27ecba5f801b6200041a60201b60201c565b620002425f801b336200047b60201b60201c565b508160085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620002f77f849ce89bfb011047badb624cc7bca584328cbe2b50dc206a08607a3818d8f2725f801b6200041a60201b60201c565b620003297f849ce89bfb011047badb624cc7bca584328cbe2b50dc206a08607a3818d8f272336200047b60201b60201c565b506200037d7f849ce89bfb011047badb624cc7bca584328cbe2b50dc206a08607a3818d8f27260085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166200047b60201b60201c565b50620003d17f849ce89bfb011047badb624cc7bca584328cbe2b50dc206a08607a3818d8f27260095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166200047b60201b60201c565b50505062000a88565b5f804690508484848330604051602001620003fa95949392919062000a2d565b604051602081830303815290604052805190602001209150509392505050565b5f6200042c836200057760201b60201c565b90508160065f8581526020019081526020015f20600101819055508181847fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff60405160405180910390a4505050565b5f6200048e83836200059460201b60201c565b6200056d57600160065f8581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555062000509620005f860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001905062000571565b5f90505b92915050565b5f60065f8381526020019081526020015f20600101549050919050565b5f60065f8481526020019081526020015f205f015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b5f33905090565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6200062e8262000603565b9050919050565b620006408162000622565b81146200064b575f80fd5b50565b5f815190506200065e8162000635565b92915050565b5f80604083850312156200067d576200067c620005ff565b5b5f6200068c858286016200064e565b92505060206200069f858286016200064e565b9150509250929050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200072557607f821691505b6020821081036200073b576200073a620006e0565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026200079f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000762565b620007ab868362000762565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620007f5620007ef620007e984620007c3565b620007cc565b620007c3565b9050919050565b5f819050919050565b6200081083620007d5565b620008286200081f82620007fc565b8484546200076e565b825550505050565b5f90565b6200083e62000830565b6200084b81848462000805565b505050565b5b818110156200087257620008665f8262000834565b60018101905062000851565b5050565b601f821115620008c1576200088b8162000741565b620008968462000753565b81016020851015620008a6578190505b620008be620008b58562000753565b83018262000850565b50505b505050565b5f82821c905092915050565b5f620008e35f1984600802620008c6565b1980831691505092915050565b5f620008fd8383620008d2565b9150826002028217905092915050565b6200091882620006a9565b67ffffffffffffffff811115620009345762000933620006b3565b5b6200094082546200070d565b6200094d82828562000876565b5f60209050601f83116001811462000983575f84156200096e578287015190505b6200097a8582620008f0565b865550620009e9565b601f198416620009938662000741565b5f5b82811015620009bc5784890151825560018201915060208501945060208101905062000995565b86831015620009dc5784890151620009d8601f891682620008d2565b8355505b6001600288020188555050505b505050505050565b5f819050919050565b62000a0581620009f1565b82525050565b62000a1681620007c3565b82525050565b62000a278162000622565b82525050565b5f60a08201905062000a425f830188620009fa565b62000a516020830187620009fa565b62000a606040830186620009fa565b62000a6f606083018562000a0b565b62000a7e608083018462000a1c565b9695505050505050565b60805160a05160c05160e05161010051610120516101405161398a62000ada5f395f610f6501525f61194501525f61198701525f61196601525f6118f201525f61191901525f610935015261398a5ff3fe608060405234801561000f575f80fd5b506004361061020f575f3560e01c806370a0823111610123578063aaf5eb68116100ab578063dd62ed3e1161007a578063dd62ed3e1461063b578063de1be77a1461066b578063f30e85bc14610689578063f6a904db146106a5578063fe4de3ae146106c35761020f565b8063aaf5eb68146105c7578063b24e145c146105e5578063d505accf14610603578063d547741f1461061f5761020f565b806391d14854116100f257806391d14854146104fb57806395d89b411461052b578063a217fddf14610549578063a457c2d714610567578063a9059cbb146105975761020f565b806370a082311461046157806379cc6790146104915780637ecebe00146104ad57806385af30c5146104dd5761020f565b8063313ce567116101a6578063395093511161017557806339509351146103bf5780633e36f4c7146103ef57806340c10f191461040d57806342966c681461042957806356a2187c146104455761020f565b8063313ce5671461034957806332cb6b0c146103675780633644e5151461038557806336568abe146103a35761020f565b80631f9bbe20116101e25780631f9bbe20146102af57806323b872dd146102cd578063248a9ca3146102fd5780632f2ff15d1461032d5761020f565b806301ffc9a71461021357806306fdde0314610243578063095ea7b31461026157806318160ddd14610291575b5f80fd5b61022d60048036038101906102289190612749565b6106e1565b60405161023a919061278e565b60405180910390f35b61024b61075a565b6040516102589190612831565b60405180910390f35b61027b600480360381019061027691906128de565b6107ea565b604051610288919061278e565b60405180910390f35b610299610800565b6040516102a6919061292b565b60405180910390f35b6102b7610809565b6040516102c4919061295c565b60405180910390f35b6102e760048036038101906102e29190612975565b61082d565b6040516102f4919061278e565b60405180910390f35b610317600480360381019061031291906129ef565b6108f3565b604051610324919061295c565b60405180910390f35b61034760048036038101906103429190612a1a565b610910565b005b610351610932565b60405161035e9190612a73565b60405180910390f35b61036f610959565b60405161037c919061292b565b60405180910390f35b61038d610966565b60405161039a919061295c565b60405180910390f35b6103bd60048036038101906103b89190612a1a565b610974565b005b6103d960048036038101906103d491906128de565b6109ef565b6040516103e6919061278e565b60405180910390f35b6103f7610a8f565b604051610404919061295c565b60405180910390f35b610427600480360381019061042291906128de565b610ab3565b005b610443600480360381019061043e9190612a8c565b610b8f565b005b61045f600480360381019061045a9190612ab7565b610b9c565b005b61047b60048036038101906104769190612af5565b610c84565b604051610488919061292b565b60405180910390f35b6104ab60048036038101906104a691906128de565b610cc9565b005b6104c760048036038101906104c29190612af5565b610cd7565b6040516104d4919061292b565b60405180910390f35b6104e5610d24565b6040516104f29190612b2f565b60405180910390f35b61051560048036038101906105109190612a1a565b610d49565b604051610522919061278e565b60405180910390f35b610533610dad565b6040516105409190612831565b60405180910390f35b610551610e3d565b60405161055e919061295c565b60405180910390f35b610581600480360381019061057c91906128de565b610e43565b60405161058e919061278e565b60405180910390f35b6105b160048036038101906105ac91906128de565b610efd565b6040516105be919061278e565b60405180910390f35b6105cf610f13565b6040516105dc919061292b565b60405180910390f35b6105ed610f19565b6040516105fa919061292b565b60405180910390f35b61061d60048036038101906106189190612b72565b610f1f565b005b61063960048036038101906106349190612a1a565b61105e565b005b61065560048036038101906106509190612c0f565b611080565b604051610662919061292b565b60405180910390f35b610673611102565b604051610680919061292b565b60405180910390f35b6106a3600480360381019061069e9190612af5565b611108565b005b6106ad611196565b6040516106ba9190612b2f565b60405180910390f35b6106cb6111bb565b6040516106d89190612b2f565b60405180910390f35b5f7f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107535750610752826111e0565b5b9050919050565b60606003805461076990612c7a565b80601f016020809104026020016040519081016040528092919081815260200182805461079590612c7a565b80156107e05780601f106107b7576101008083540402835291602001916107e0565b820191905f5260205f20905b8154815290600101906020018083116107c357829003601f168201915b5050505050905090565b5f6107f6338484611249565b6001905092915050565b5f600254905090565b7f849ce89bfb011047badb624cc7bca584328cbe2b50dc206a08607a3818d8f27281565b5f61083984848461140c565b6108e884336108e3856040518060600160405280602881526020016139086028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461178b9092919063ffffffff16565b611249565b600190509392505050565b5f60065f8381526020019081526020015f20600101549050919050565b610919826108f3565b610922816117ed565b61092c8383611801565b50505050565b5f7f0000000000000000000000000000000000000000000000000000000000000000905090565b680507dbd4531440000081565b5f61096f6118eb565b905090565b61097c6119b2565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146109e0576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109ea82826119b9565b505050565b5f610a853384610a808560015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611aa390919063ffffffff16565b611249565b6001905092915050565b7ffdf81848136595c31bb5f76217767372bc4bf906663038eb38381131ea27ecba81565b610add7ffdf81848136595c31bb5f76217767372bc4bf906663038eb38381131ea27ecba33610d49565b610b1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1390612d1a565b60405180910390fd5b680507dbd45314400000610b4082610b32610800565b611aa390919063ffffffff16565b1115610b81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7890612da8565b60405180910390fd5b610b8b8282611b00565b5050565b610b993382611c8c565b50565b610ba85f801b33610d49565b610be7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bde90612e10565b60405180910390fd5b6127108211158015610bfa575061271081105b610c39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3090612e78565b60405180910390fd5b81600a8190555080600b819055507fbd1c2baf15ce9efeda58ba0e407ce12e928eb6105bde1c2df27e8d1aea7054478282604051610c78929190612e96565b60405180910390a15050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610cd38282611e32565b5050565b5f610d1d60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20611eb0565b9050919050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60065f8481526020019081526020015f205f015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b606060048054610dbc90612c7a565b80601f0160208091040260200160405190810160405280929190818152602001828054610de890612c7a565b8015610e335780601f10610e0a57610100808354040283529160200191610e33565b820191905f5260205f20905b815481529060010190602001808311610e1657829003601f168201915b5050505050905090565b5f801b81565b5f610ef33384610eee856040518060600160405280602581526020016139306025913960015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461178b9092919063ffffffff16565b611249565b6001905092915050565b5f610f0933848461140c565b6001905092915050565b61271081565b600a5481565b83421115610f62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5990612f07565b60405180910390fd5b5f7f0000000000000000000000000000000000000000000000000000000000000000888888610f908c611ebc565b89604051602001610fa696959493929190612f25565b6040516020818303038152906040528051906020012090505f610fc882611f17565b90505f610fd782878787611f30565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611047576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103e90612fce565b60405180910390fd5b6110528a8a8a611249565b50505050505050505050565b611067826108f3565b611070816117ed565b61107a83836119b9565b50505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600b5481565b6111145f801b33610d49565b611153576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114a90612e10565b60405180910390fd5b8060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036112b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ae9061305c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611325576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131c906130ea565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516113ff919061292b565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361147a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147190613178565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036114e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114df90613206565b60405180910390fd5b6114f28383611f59565b1561177b5760075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361163a575f612710600a548361155d9190613251565b61156791906132bf565b90505f81111561163457808261157d91906132ef565b91506115ab8460085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361206f565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f916b8175cd5c46d919fd13bb22ffc701a10dec261c617873a53c55d45569a4e4848460405161162b929190612e96565b60405180910390a35b5061177a565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611779575f612710600b54836116a09190613251565b6116aa91906132bf565b90505f8111156117775780826116c091906132ef565b91506116ee8460095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361206f565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f916b8175cd5c46d919fd13bb22ffc701a10dec261c617873a53c55d45569a4e4848460405161176e929190612e96565b60405180910390a35b505b5b5b61178683838361206f565b505050565b5f8383111582906117d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c99190612831565b60405180910390fd5b505f83856117e091906132ef565b9050809150509392505050565b6117fe816117f96119b2565b6122f8565b50565b5f61180c8383610d49565b6118e157600160065f8581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555061187e6119b2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600190506118e5565b5f90505b92915050565b5f804690507f00000000000000000000000000000000000000000000000000000000000000008103611940577f00000000000000000000000000000000000000000000000000000000000000009150506119af565b6119ab7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000612349565b9150505b90565b5f33905090565b5f6119c48383610d49565b15611a99575f60065f8581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550611a366119b2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a460019050611a9d565b5f90505b92915050565b5f808284611ab19190613322565b905083811015611af6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aed9061339f565b60405180910390fd5b8091505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6590613407565b60405180910390fd5b611b795f8383612387565b611b8e81600254611aa390919063ffffffff16565b600281905550611be3815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611aa390919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611c80919061292b565b60405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611cfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf190613495565b60405180910390fd5b611d05825f83612387565b611d6e816040518060600160405280602281526020016138c0602291395f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461178b9092919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550611dc38160025461238c90919063ffffffff16565b6002819055505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611e26919061292b565b60405180910390a35050565b80611e3d8333611080565b1015611e7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7590613523565b60405180910390fd5b5f81611e8a8433611080565b611e9491906132ef565b9050611ea1833383611249565b611eab8383611c8c565b505050565b5f815f01549050919050565b5f8060055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f209050611f0681611eb0565b9150611f11816123d5565b50919050565b5f611f29611f236118eb565b836123f2565b9050919050565b5f805f611f3f87878787612424565b91509150611f4c81612525565b8192505050949350505050565b5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611fdd5750611fdb7f849ce89bfb011047badb624cc7bca584328cbe2b50dc206a08607a3818d8f27283610d49565b155b80612067575060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614801561206657506120647f849ce89bfb011047badb624cc7bca584328cbe2b50dc206a08607a3818d8f27284610d49565b155b5b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d490613178565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361214b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214290613206565b60405180910390fd5b612156838383612387565b6121bf816040518060600160405280602681526020016138e2602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461178b9092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061224e815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611aa390919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516122eb919061292b565b60405180910390a3505050565b6123028282610d49565b6123455780826040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161233c929190613541565b60405180910390fd5b5050565b5f804690508484848330604051602001612367959493929190613568565b604051602081830303815290604052805190602001209150509392505050565b505050565b5f6123cd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061178b565b905092915050565b6001815f015f8282546123e89190613322565b9250508190555050565b5f828260405160200161240692919061362d565b60405160208183030381529060405280519060200120905092915050565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0835f1c111561245c575f60039150915061251c565b601b8560ff16141580156124745750601c8560ff1614155b15612485575f60049150915061251c565b5f6001878787876040515f81526020016040526040516124a89493929190613663565b6020604051602081039080840390855afa1580156124c8573d5f803e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612514575f6001925092505061251c565b805f92509250505b94509492505050565b5f6004811115612538576125376136a6565b5b81600481111561254b5761254a6136a6565b5b03156126ed5760016004811115612565576125646136a6565b5b816004811115612578576125776136a6565b5b036125b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125af9061371d565b60405180910390fd5b600260048111156125cc576125cb6136a6565b5b8160048111156125df576125de6136a6565b5b0361261f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261690613785565b60405180910390fd5b60036004811115612633576126326136a6565b5b816004811115612646576126456136a6565b5b03612686576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267d90613813565b60405180910390fd5b600480811115612699576126986136a6565b5b8160048111156126ac576126ab6136a6565b5b036126ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e3906138a1565b60405180910390fd5b5b50565b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612728816126f4565b8114612732575f80fd5b50565b5f813590506127438161271f565b92915050565b5f6020828403121561275e5761275d6126f0565b5b5f61276b84828501612735565b91505092915050565b5f8115159050919050565b61278881612774565b82525050565b5f6020820190506127a15f83018461277f565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156127de5780820151818401526020810190506127c3565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612803826127a7565b61280d81856127b1565b935061281d8185602086016127c1565b612826816127e9565b840191505092915050565b5f6020820190508181035f83015261284981846127f9565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61287a82612851565b9050919050565b61288a81612870565b8114612894575f80fd5b50565b5f813590506128a581612881565b92915050565b5f819050919050565b6128bd816128ab565b81146128c7575f80fd5b50565b5f813590506128d8816128b4565b92915050565b5f80604083850312156128f4576128f36126f0565b5b5f61290185828601612897565b9250506020612912858286016128ca565b9150509250929050565b612925816128ab565b82525050565b5f60208201905061293e5f83018461291c565b92915050565b5f819050919050565b61295681612944565b82525050565b5f60208201905061296f5f83018461294d565b92915050565b5f805f6060848603121561298c5761298b6126f0565b5b5f61299986828701612897565b93505060206129aa86828701612897565b92505060406129bb868287016128ca565b9150509250925092565b6129ce81612944565b81146129d8575f80fd5b50565b5f813590506129e9816129c5565b92915050565b5f60208284031215612a0457612a036126f0565b5b5f612a11848285016129db565b91505092915050565b5f8060408385031215612a3057612a2f6126f0565b5b5f612a3d858286016129db565b9250506020612a4e85828601612897565b9150509250929050565b5f60ff82169050919050565b612a6d81612a58565b82525050565b5f602082019050612a865f830184612a64565b92915050565b5f60208284031215612aa157612aa06126f0565b5b5f612aae848285016128ca565b91505092915050565b5f8060408385031215612acd57612acc6126f0565b5b5f612ada858286016128ca565b9250506020612aeb858286016128ca565b9150509250929050565b5f60208284031215612b0a57612b096126f0565b5b5f612b1784828501612897565b91505092915050565b612b2981612870565b82525050565b5f602082019050612b425f830184612b20565b92915050565b612b5181612a58565b8114612b5b575f80fd5b50565b5f81359050612b6c81612b48565b92915050565b5f805f805f805f60e0888a031215612b8d57612b8c6126f0565b5b5f612b9a8a828b01612897565b9750506020612bab8a828b01612897565b9650506040612bbc8a828b016128ca565b9550506060612bcd8a828b016128ca565b9450506080612bde8a828b01612b5e565b93505060a0612bef8a828b016129db565b92505060c0612c008a828b016129db565b91505092959891949750929550565b5f8060408385031215612c2557612c246126f0565b5b5f612c3285828601612897565b9250506020612c4385828601612897565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612c9157607f821691505b602082108103612ca457612ca3612c4d565b5b50919050565b7f5661756c744f776e65643a2063616c6c6572206973206e6f74207468652056615f8201527f756c740000000000000000000000000000000000000000000000000000000000602082015250565b5f612d046023836127b1565b9150612d0f82612caa565b604082019050919050565b5f6020820190508181035f830152612d3181612cf8565b9050919050565b7f41504552433230546f6b656e3a206d696e74696e6720776f756c6420657863655f8201527f6564206d617820737570706c7900000000000000000000000000000000000000602082015250565b5f612d92602d836127b1565b9150612d9d82612d38565b604082019050919050565b5f6020820190508181035f830152612dbf81612d86565b9050919050565b7f43616c6c6572206973206e6f742061646d696e000000000000000000000000005f82015250565b5f612dfa6013836127b1565b9150612e0582612dc6565b602082019050919050565b5f6020820190508181035f830152612e2781612dee565b9050919050565b7f74617820746f6f206869676821000000000000000000000000000000000000005f82015250565b5f612e62600d836127b1565b9150612e6d82612e2e565b602082019050919050565b5f6020820190508181035f830152612e8f81612e56565b9050919050565b5f604082019050612ea95f83018561291c565b612eb6602083018461291c565b9392505050565b7f45524332305065726d69743a206578706972656420646561646c696e650000005f82015250565b5f612ef1601d836127b1565b9150612efc82612ebd565b602082019050919050565b5f6020820190508181035f830152612f1e81612ee5565b9050919050565b5f60c082019050612f385f83018961294d565b612f456020830188612b20565b612f526040830187612b20565b612f5f606083018661291c565b612f6c608083018561291c565b612f7960a083018461291c565b979650505050505050565b7f45524332305065726d69743a20696e76616c6964207369676e617475726500005f82015250565b5f612fb8601e836127b1565b9150612fc382612f84565b602082019050919050565b5f6020820190508181035f830152612fe581612fac565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6130466024836127b1565b915061305182612fec565b604082019050919050565b5f6020820190508181035f8301526130738161303a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6130d46022836127b1565b91506130df8261307a565b604082019050919050565b5f6020820190508181035f830152613101816130c8565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6131626025836127b1565b915061316d82613108565b604082019050919050565b5f6020820190508181035f83015261318f81613156565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6131f06023836127b1565b91506131fb82613196565b604082019050919050565b5f6020820190508181035f83015261321d816131e4565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61325b826128ab565b9150613266836128ab565b9250828202613274816128ab565b9150828204841483151761328b5761328a613224565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6132c9826128ab565b91506132d4836128ab565b9250826132e4576132e3613292565b5b828204905092915050565b5f6132f9826128ab565b9150613304836128ab565b925082820390508181111561331c5761331b613224565b5b92915050565b5f61332c826128ab565b9150613337836128ab565b925082820190508082111561334f5761334e613224565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f613389601b836127b1565b915061339482613355565b602082019050919050565b5f6020820190508181035f8301526133b68161337d565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f6133f1601f836127b1565b91506133fc826133bd565b602082019050919050565b5f6020820190508181035f83015261341e816133e5565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f61347f6021836127b1565b915061348a82613425565b604082019050919050565b5f6020820190508181035f8301526134ac81613473565b9050919050565b7f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f775f8201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b5f61350d6024836127b1565b9150613518826134b3565b604082019050919050565b5f6020820190508181035f83015261353a81613501565b9050919050565b5f6040820190506135545f830185612b20565b613561602083018461294d565b9392505050565b5f60a08201905061357b5f83018861294d565b613588602083018761294d565b613595604083018661294d565b6135a2606083018561291c565b6135af6080830184612b20565b9695505050505050565b5f81905092915050565b7f19010000000000000000000000000000000000000000000000000000000000005f82015250565b5f6135f76002836135b9565b9150613602826135c3565b600282019050919050565b5f819050919050565b61362761362282612944565b61360d565b82525050565b5f613637826135eb565b91506136438285613616565b6020820191506136538284613616565b6020820191508190509392505050565b5f6080820190506136765f83018761294d565b6136836020830186612a64565b613690604083018561294d565b61369d606083018461294d565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b7f45434453413a20696e76616c6964207369676e617475726500000000000000005f82015250565b5f6137076018836127b1565b9150613712826136d3565b602082019050919050565b5f6020820190508181035f830152613734816136fb565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e677468005f82015250565b5f61376f601f836127b1565b915061377a8261373b565b602082019050919050565b5f6020820190508181035f83015261379c81613763565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c5f8201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b5f6137fd6022836127b1565b9150613808826137a3565b604082019050919050565b5f6020820190508181035f83015261382a816137f1565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c5f8201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b5f61388b6022836127b1565b915061389682613831565b604082019050919050565b5f6020820190508181035f8301526138b88161387f565b905091905056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205a6dc8c0207036baa49093fe1e9110de8c68bb8f7afaab6bd7a557cc6155b0e364736f6c63430008180033000000000000000000000000a0ee7fe1143624e998bfe1a3523d6519c7b48f65000000000000000000000000a0ee7fe1143624e998bfe1a3523d6519c7b48f65

Deployed Bytecode

0x608060405234801561000f575f80fd5b506004361061020f575f3560e01c806370a0823111610123578063aaf5eb68116100ab578063dd62ed3e1161007a578063dd62ed3e1461063b578063de1be77a1461066b578063f30e85bc14610689578063f6a904db146106a5578063fe4de3ae146106c35761020f565b8063aaf5eb68146105c7578063b24e145c146105e5578063d505accf14610603578063d547741f1461061f5761020f565b806391d14854116100f257806391d14854146104fb57806395d89b411461052b578063a217fddf14610549578063a457c2d714610567578063a9059cbb146105975761020f565b806370a082311461046157806379cc6790146104915780637ecebe00146104ad57806385af30c5146104dd5761020f565b8063313ce567116101a6578063395093511161017557806339509351146103bf5780633e36f4c7146103ef57806340c10f191461040d57806342966c681461042957806356a2187c146104455761020f565b8063313ce5671461034957806332cb6b0c146103675780633644e5151461038557806336568abe146103a35761020f565b80631f9bbe20116101e25780631f9bbe20146102af57806323b872dd146102cd578063248a9ca3146102fd5780632f2ff15d1461032d5761020f565b806301ffc9a71461021357806306fdde0314610243578063095ea7b31461026157806318160ddd14610291575b5f80fd5b61022d60048036038101906102289190612749565b6106e1565b60405161023a919061278e565b60405180910390f35b61024b61075a565b6040516102589190612831565b60405180910390f35b61027b600480360381019061027691906128de565b6107ea565b604051610288919061278e565b60405180910390f35b610299610800565b6040516102a6919061292b565b60405180910390f35b6102b7610809565b6040516102c4919061295c565b60405180910390f35b6102e760048036038101906102e29190612975565b61082d565b6040516102f4919061278e565b60405180910390f35b610317600480360381019061031291906129ef565b6108f3565b604051610324919061295c565b60405180910390f35b61034760048036038101906103429190612a1a565b610910565b005b610351610932565b60405161035e9190612a73565b60405180910390f35b61036f610959565b60405161037c919061292b565b60405180910390f35b61038d610966565b60405161039a919061295c565b60405180910390f35b6103bd60048036038101906103b89190612a1a565b610974565b005b6103d960048036038101906103d491906128de565b6109ef565b6040516103e6919061278e565b60405180910390f35b6103f7610a8f565b604051610404919061295c565b60405180910390f35b610427600480360381019061042291906128de565b610ab3565b005b610443600480360381019061043e9190612a8c565b610b8f565b005b61045f600480360381019061045a9190612ab7565b610b9c565b005b61047b60048036038101906104769190612af5565b610c84565b604051610488919061292b565b60405180910390f35b6104ab60048036038101906104a691906128de565b610cc9565b005b6104c760048036038101906104c29190612af5565b610cd7565b6040516104d4919061292b565b60405180910390f35b6104e5610d24565b6040516104f29190612b2f565b60405180910390f35b61051560048036038101906105109190612a1a565b610d49565b604051610522919061278e565b60405180910390f35b610533610dad565b6040516105409190612831565b60405180910390f35b610551610e3d565b60405161055e919061295c565b60405180910390f35b610581600480360381019061057c91906128de565b610e43565b60405161058e919061278e565b60405180910390f35b6105b160048036038101906105ac91906128de565b610efd565b6040516105be919061278e565b60405180910390f35b6105cf610f13565b6040516105dc919061292b565b60405180910390f35b6105ed610f19565b6040516105fa919061292b565b60405180910390f35b61061d60048036038101906106189190612b72565b610f1f565b005b61063960048036038101906106349190612a1a565b61105e565b005b61065560048036038101906106509190612c0f565b611080565b604051610662919061292b565b60405180910390f35b610673611102565b604051610680919061292b565b60405180910390f35b6106a3600480360381019061069e9190612af5565b611108565b005b6106ad611196565b6040516106ba9190612b2f565b60405180910390f35b6106cb6111bb565b6040516106d89190612b2f565b60405180910390f35b5f7f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107535750610752826111e0565b5b9050919050565b60606003805461076990612c7a565b80601f016020809104026020016040519081016040528092919081815260200182805461079590612c7a565b80156107e05780601f106107b7576101008083540402835291602001916107e0565b820191905f5260205f20905b8154815290600101906020018083116107c357829003601f168201915b5050505050905090565b5f6107f6338484611249565b6001905092915050565b5f600254905090565b7f849ce89bfb011047badb624cc7bca584328cbe2b50dc206a08607a3818d8f27281565b5f61083984848461140c565b6108e884336108e3856040518060600160405280602881526020016139086028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461178b9092919063ffffffff16565b611249565b600190509392505050565b5f60065f8381526020019081526020015f20600101549050919050565b610919826108f3565b610922816117ed565b61092c8383611801565b50505050565b5f7f0000000000000000000000000000000000000000000000000000000000000009905090565b680507dbd4531440000081565b5f61096f6118eb565b905090565b61097c6119b2565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146109e0576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109ea82826119b9565b505050565b5f610a853384610a808560015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611aa390919063ffffffff16565b611249565b6001905092915050565b7ffdf81848136595c31bb5f76217767372bc4bf906663038eb38381131ea27ecba81565b610add7ffdf81848136595c31bb5f76217767372bc4bf906663038eb38381131ea27ecba33610d49565b610b1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1390612d1a565b60405180910390fd5b680507dbd45314400000610b4082610b32610800565b611aa390919063ffffffff16565b1115610b81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7890612da8565b60405180910390fd5b610b8b8282611b00565b5050565b610b993382611c8c565b50565b610ba85f801b33610d49565b610be7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bde90612e10565b60405180910390fd5b6127108211158015610bfa575061271081105b610c39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3090612e78565b60405180910390fd5b81600a8190555080600b819055507fbd1c2baf15ce9efeda58ba0e407ce12e928eb6105bde1c2df27e8d1aea7054478282604051610c78929190612e96565b60405180910390a15050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610cd38282611e32565b5050565b5f610d1d60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20611eb0565b9050919050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60065f8481526020019081526020015f205f015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b606060048054610dbc90612c7a565b80601f0160208091040260200160405190810160405280929190818152602001828054610de890612c7a565b8015610e335780601f10610e0a57610100808354040283529160200191610e33565b820191905f5260205f20905b815481529060010190602001808311610e1657829003601f168201915b5050505050905090565b5f801b81565b5f610ef33384610eee856040518060600160405280602581526020016139306025913960015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461178b9092919063ffffffff16565b611249565b6001905092915050565b5f610f0933848461140c565b6001905092915050565b61271081565b600a5481565b83421115610f62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5990612f07565b60405180910390fd5b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888610f908c611ebc565b89604051602001610fa696959493929190612f25565b6040516020818303038152906040528051906020012090505f610fc882611f17565b90505f610fd782878787611f30565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611047576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103e90612fce565b60405180910390fd5b6110528a8a8a611249565b50505050505050505050565b611067826108f3565b611070816117ed565b61107a83836119b9565b50505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600b5481565b6111145f801b33610d49565b611153576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114a90612e10565b60405180910390fd5b8060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036112b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ae9061305c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611325576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131c906130ea565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516113ff919061292b565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361147a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147190613178565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036114e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114df90613206565b60405180910390fd5b6114f28383611f59565b1561177b5760075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361163a575f612710600a548361155d9190613251565b61156791906132bf565b90505f81111561163457808261157d91906132ef565b91506115ab8460085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361206f565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f916b8175cd5c46d919fd13bb22ffc701a10dec261c617873a53c55d45569a4e4848460405161162b929190612e96565b60405180910390a35b5061177a565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611779575f612710600b54836116a09190613251565b6116aa91906132bf565b90505f8111156117775780826116c091906132ef565b91506116ee8460095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361206f565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f916b8175cd5c46d919fd13bb22ffc701a10dec261c617873a53c55d45569a4e4848460405161176e929190612e96565b60405180910390a35b505b5b5b61178683838361206f565b505050565b5f8383111582906117d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c99190612831565b60405180910390fd5b505f83856117e091906132ef565b9050809150509392505050565b6117fe816117f96119b2565b6122f8565b50565b5f61180c8383610d49565b6118e157600160065f8581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555061187e6119b2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600190506118e5565b5f90505b92915050565b5f804690507f00000000000000000000000000000000000000000000000000000000000000388103611940577fb5dc6b16c15cbd81cab8eb04a206ceec542214169d21dfb1186c3fb5254d444e9150506119af565b6119ab7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f0cc8ab7de9d981eca4ad7299b5443a93ffd01850d63cd6b84203336bdd4c657f7fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6612349565b9150505b90565b5f33905090565b5f6119c48383610d49565b15611a99575f60065f8581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550611a366119b2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a460019050611a9d565b5f90505b92915050565b5f808284611ab19190613322565b905083811015611af6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aed9061339f565b60405180910390fd5b8091505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6590613407565b60405180910390fd5b611b795f8383612387565b611b8e81600254611aa390919063ffffffff16565b600281905550611be3815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611aa390919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611c80919061292b565b60405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611cfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf190613495565b60405180910390fd5b611d05825f83612387565b611d6e816040518060600160405280602281526020016138c0602291395f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461178b9092919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550611dc38160025461238c90919063ffffffff16565b6002819055505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611e26919061292b565b60405180910390a35050565b80611e3d8333611080565b1015611e7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7590613523565b60405180910390fd5b5f81611e8a8433611080565b611e9491906132ef565b9050611ea1833383611249565b611eab8383611c8c565b505050565b5f815f01549050919050565b5f8060055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f209050611f0681611eb0565b9150611f11816123d5565b50919050565b5f611f29611f236118eb565b836123f2565b9050919050565b5f805f611f3f87878787612424565b91509150611f4c81612525565b8192505050949350505050565b5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611fdd5750611fdb7f849ce89bfb011047badb624cc7bca584328cbe2b50dc206a08607a3818d8f27283610d49565b155b80612067575060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614801561206657506120647f849ce89bfb011047badb624cc7bca584328cbe2b50dc206a08607a3818d8f27284610d49565b155b5b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d490613178565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361214b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214290613206565b60405180910390fd5b612156838383612387565b6121bf816040518060600160405280602681526020016138e2602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461178b9092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061224e815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611aa390919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516122eb919061292b565b60405180910390a3505050565b6123028282610d49565b6123455780826040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161233c929190613541565b60405180910390fd5b5050565b5f804690508484848330604051602001612367959493929190613568565b604051602081830303815290604052805190602001209150509392505050565b505050565b5f6123cd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061178b565b905092915050565b6001815f015f8282546123e89190613322565b9250508190555050565b5f828260405160200161240692919061362d565b60405160208183030381529060405280519060200120905092915050565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0835f1c111561245c575f60039150915061251c565b601b8560ff16141580156124745750601c8560ff1614155b15612485575f60049150915061251c565b5f6001878787876040515f81526020016040526040516124a89493929190613663565b6020604051602081039080840390855afa1580156124c8573d5f803e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612514575f6001925092505061251c565b805f92509250505b94509492505050565b5f6004811115612538576125376136a6565b5b81600481111561254b5761254a6136a6565b5b03156126ed5760016004811115612565576125646136a6565b5b816004811115612578576125776136a6565b5b036125b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125af9061371d565b60405180910390fd5b600260048111156125cc576125cb6136a6565b5b8160048111156125df576125de6136a6565b5b0361261f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261690613785565b60405180910390fd5b60036004811115612633576126326136a6565b5b816004811115612646576126456136a6565b5b03612686576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267d90613813565b60405180910390fd5b600480811115612699576126986136a6565b5b8160048111156126ac576126ab6136a6565b5b036126ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e3906138a1565b60405180910390fd5b5b50565b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612728816126f4565b8114612732575f80fd5b50565b5f813590506127438161271f565b92915050565b5f6020828403121561275e5761275d6126f0565b5b5f61276b84828501612735565b91505092915050565b5f8115159050919050565b61278881612774565b82525050565b5f6020820190506127a15f83018461277f565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156127de5780820151818401526020810190506127c3565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612803826127a7565b61280d81856127b1565b935061281d8185602086016127c1565b612826816127e9565b840191505092915050565b5f6020820190508181035f83015261284981846127f9565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61287a82612851565b9050919050565b61288a81612870565b8114612894575f80fd5b50565b5f813590506128a581612881565b92915050565b5f819050919050565b6128bd816128ab565b81146128c7575f80fd5b50565b5f813590506128d8816128b4565b92915050565b5f80604083850312156128f4576128f36126f0565b5b5f61290185828601612897565b9250506020612912858286016128ca565b9150509250929050565b612925816128ab565b82525050565b5f60208201905061293e5f83018461291c565b92915050565b5f819050919050565b61295681612944565b82525050565b5f60208201905061296f5f83018461294d565b92915050565b5f805f6060848603121561298c5761298b6126f0565b5b5f61299986828701612897565b93505060206129aa86828701612897565b92505060406129bb868287016128ca565b9150509250925092565b6129ce81612944565b81146129d8575f80fd5b50565b5f813590506129e9816129c5565b92915050565b5f60208284031215612a0457612a036126f0565b5b5f612a11848285016129db565b91505092915050565b5f8060408385031215612a3057612a2f6126f0565b5b5f612a3d858286016129db565b9250506020612a4e85828601612897565b9150509250929050565b5f60ff82169050919050565b612a6d81612a58565b82525050565b5f602082019050612a865f830184612a64565b92915050565b5f60208284031215612aa157612aa06126f0565b5b5f612aae848285016128ca565b91505092915050565b5f8060408385031215612acd57612acc6126f0565b5b5f612ada858286016128ca565b9250506020612aeb858286016128ca565b9150509250929050565b5f60208284031215612b0a57612b096126f0565b5b5f612b1784828501612897565b91505092915050565b612b2981612870565b82525050565b5f602082019050612b425f830184612b20565b92915050565b612b5181612a58565b8114612b5b575f80fd5b50565b5f81359050612b6c81612b48565b92915050565b5f805f805f805f60e0888a031215612b8d57612b8c6126f0565b5b5f612b9a8a828b01612897565b9750506020612bab8a828b01612897565b9650506040612bbc8a828b016128ca565b9550506060612bcd8a828b016128ca565b9450506080612bde8a828b01612b5e565b93505060a0612bef8a828b016129db565b92505060c0612c008a828b016129db565b91505092959891949750929550565b5f8060408385031215612c2557612c246126f0565b5b5f612c3285828601612897565b9250506020612c4385828601612897565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612c9157607f821691505b602082108103612ca457612ca3612c4d565b5b50919050565b7f5661756c744f776e65643a2063616c6c6572206973206e6f74207468652056615f8201527f756c740000000000000000000000000000000000000000000000000000000000602082015250565b5f612d046023836127b1565b9150612d0f82612caa565b604082019050919050565b5f6020820190508181035f830152612d3181612cf8565b9050919050565b7f41504552433230546f6b656e3a206d696e74696e6720776f756c6420657863655f8201527f6564206d617820737570706c7900000000000000000000000000000000000000602082015250565b5f612d92602d836127b1565b9150612d9d82612d38565b604082019050919050565b5f6020820190508181035f830152612dbf81612d86565b9050919050565b7f43616c6c6572206973206e6f742061646d696e000000000000000000000000005f82015250565b5f612dfa6013836127b1565b9150612e0582612dc6565b602082019050919050565b5f6020820190508181035f830152612e2781612dee565b9050919050565b7f74617820746f6f206869676821000000000000000000000000000000000000005f82015250565b5f612e62600d836127b1565b9150612e6d82612e2e565b602082019050919050565b5f6020820190508181035f830152612e8f81612e56565b9050919050565b5f604082019050612ea95f83018561291c565b612eb6602083018461291c565b9392505050565b7f45524332305065726d69743a206578706972656420646561646c696e650000005f82015250565b5f612ef1601d836127b1565b9150612efc82612ebd565b602082019050919050565b5f6020820190508181035f830152612f1e81612ee5565b9050919050565b5f60c082019050612f385f83018961294d565b612f456020830188612b20565b612f526040830187612b20565b612f5f606083018661291c565b612f6c608083018561291c565b612f7960a083018461291c565b979650505050505050565b7f45524332305065726d69743a20696e76616c6964207369676e617475726500005f82015250565b5f612fb8601e836127b1565b9150612fc382612f84565b602082019050919050565b5f6020820190508181035f830152612fe581612fac565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6130466024836127b1565b915061305182612fec565b604082019050919050565b5f6020820190508181035f8301526130738161303a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6130d46022836127b1565b91506130df8261307a565b604082019050919050565b5f6020820190508181035f830152613101816130c8565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6131626025836127b1565b915061316d82613108565b604082019050919050565b5f6020820190508181035f83015261318f81613156565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6131f06023836127b1565b91506131fb82613196565b604082019050919050565b5f6020820190508181035f83015261321d816131e4565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61325b826128ab565b9150613266836128ab565b9250828202613274816128ab565b9150828204841483151761328b5761328a613224565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6132c9826128ab565b91506132d4836128ab565b9250826132e4576132e3613292565b5b828204905092915050565b5f6132f9826128ab565b9150613304836128ab565b925082820390508181111561331c5761331b613224565b5b92915050565b5f61332c826128ab565b9150613337836128ab565b925082820190508082111561334f5761334e613224565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f613389601b836127b1565b915061339482613355565b602082019050919050565b5f6020820190508181035f8301526133b68161337d565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f6133f1601f836127b1565b91506133fc826133bd565b602082019050919050565b5f6020820190508181035f83015261341e816133e5565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f61347f6021836127b1565b915061348a82613425565b604082019050919050565b5f6020820190508181035f8301526134ac81613473565b9050919050565b7f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f775f8201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b5f61350d6024836127b1565b9150613518826134b3565b604082019050919050565b5f6020820190508181035f83015261353a81613501565b9050919050565b5f6040820190506135545f830185612b20565b613561602083018461294d565b9392505050565b5f60a08201905061357b5f83018861294d565b613588602083018761294d565b613595604083018661294d565b6135a2606083018561291c565b6135af6080830184612b20565b9695505050505050565b5f81905092915050565b7f19010000000000000000000000000000000000000000000000000000000000005f82015250565b5f6135f76002836135b9565b9150613602826135c3565b600282019050919050565b5f819050919050565b61362761362282612944565b61360d565b82525050565b5f613637826135eb565b91506136438285613616565b6020820191506136538284613616565b6020820191508190509392505050565b5f6080820190506136765f83018761294d565b6136836020830186612a64565b613690604083018561294d565b61369d606083018461294d565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b7f45434453413a20696e76616c6964207369676e617475726500000000000000005f82015250565b5f6137076018836127b1565b9150613712826136d3565b602082019050919050565b5f6020820190508181035f830152613734816136fb565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e677468005f82015250565b5f61376f601f836127b1565b915061377a8261373b565b602082019050919050565b5f6020820190508181035f83015261379c81613763565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c5f8201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b5f6137fd6022836127b1565b9150613808826137a3565b604082019050919050565b5f6020820190508181035f83015261382a816137f1565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c5f8201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b5f61388b6022836127b1565b915061389682613831565b604082019050919050565b5f6020820190508181035f8301526138b88161387f565b905091905056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205a6dc8c0207036baa49093fe1e9110de8c68bb8f7afaab6bd7a557cc6155b0e364736f6c63430008180033

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

000000000000000000000000a0ee7fe1143624e998bfe1a3523d6519c7b48f65000000000000000000000000a0ee7fe1143624e998bfe1a3523d6519c7b48f65

-----Decoded View---------------
Arg [0] : _buyTaxReceiver (address): 0xA0Ee7fE1143624e998BFe1a3523d6519c7b48f65
Arg [1] : _sellTaxReceiver (address): 0xA0Ee7fE1143624e998BFe1a3523d6519c7b48f65

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000a0ee7fe1143624e998bfe1a3523d6519c7b48f65
Arg [1] : 000000000000000000000000a0ee7fe1143624e998bfe1a3523d6519c7b48f65


Deployed Bytecode Sourcemap

42789:3352:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33455:246;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26769:83;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27703:192;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27054:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43125:66;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27903:450;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34802:122;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35234:163;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26955:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41725:56;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40683:115;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36421:276;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28361:289;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41210:48;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41855:291;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42154:105;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44090:431;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27162:143;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42267:118;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40409:144;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42870:23;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33793:163;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26860:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33063:49;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28658:389;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27313:198;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42975:41;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43023:34;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39557:786;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35690:165;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27519:176;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43064:41;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43985:97;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42900:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42936:30;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33455:246;33556:4;33608:32;33593:47;;;:11;:47;;;;:100;;;;33657:36;33681:11;33657:23;:36::i;:::-;33593:100;33573:120;;33455:246;;;:::o;26769:83::-;26806:13;26839:5;26832:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26769:83;:::o;27703:192::-;27811:4;27828:37;27837:10;27849:7;27858:6;27828:8;:37::i;:::-;27883:4;27876:11;;27703:192;;;;:::o;27054:100::-;27107:7;27134:12;;27127:19;;27054:100;:::o;43125:66::-;43165:26;43125:66;:::o;27903:450::-;28043:4;28060:36;28070:6;28078:9;28089:6;28060:9;:36::i;:::-;28107:216;28130:6;28151:10;28176:136;28230:6;28176:136;;;;;;;;;;;;;;;;;:11;:19;28188:6;28176:19;;;;;;;;;;;;;;;:31;28196:10;28176:31;;;;;;;;;;;;;;;;:35;;:136;;;;;:::i;:::-;28107:8;:216::i;:::-;28341:4;28334:11;;27903:450;;;;;:::o;34802:122::-;34867:7;34894:6;:12;34901:4;34894:12;;;;;;;;;;;:22;;;34887:29;;34802:122;;;:::o;35234:163::-;35333:18;35346:4;35333:12;:18::i;:::-;33347:16;33358:4;33347:10;:16::i;:::-;35364:25:::1;35375:4;35381:7;35364:10;:25::i;:::-;;35234:163:::0;;;:::o;26955:91::-;27004:5;27029:9;27022:16;;26955:91;:::o;41725:56::-;41762:19;41725:56;:::o;40683:115::-;40743:7;40770:20;:18;:20::i;:::-;40763:27;;40683:115;:::o;36421:276::-;36562:12;:10;:12::i;:::-;36540:34;;:18;:34;;;36536:104;;36598:30;;;;;;;;;;;;;;36536:104;36652:37;36664:4;36670:18;36652:11;:37::i;:::-;;36421:276;;:::o;28361:289::-;28474:4;28491:129;28514:10;28539:7;28561:48;28598:10;28561:11;:23;28573:10;28561:23;;;;;;;;;;;;;;;:32;28585:7;28561:32;;;;;;;;;;;;;;;;:36;;:48;;;;:::i;:::-;28491:8;:129::i;:::-;28638:4;28631:11;;28361:289;;;;:::o;41210:48::-;41241:17;41210:48;:::o;41855:291::-;41454:25;41241:17;41468:10;41454:7;:25::i;:::-;41432:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;41762:19:::1;41990:26;42008:7;41990:13;:11;:13::i;:::-;:17;;:26;;;;:::i;:::-;:40;;41968:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;42114:24;42120:8;42130:7;42114:5;:24::i;:::-;41855:291:::0;;:::o;42154:105::-;42226:25;42232:10;42244:6;42226:5;:25::i;:::-;42154:105;:::o;44090:431::-;43473:39;33108:4;43481:18;;43501:10;43473:7;:39::i;:::-;43465:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;44272:7:::1;44252:16;:27;;:58;;;;;44303:7;44283:17;:27;44252:58;44230:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;44380:16;44362:15;:34;;;;44426:17;44407:16;:36;;;;44461:52;44477:16;44495:17;44461:52;;;;;;;:::i;:::-;;;;;;;;44090:431:::0;;:::o;27162:143::-;27252:7;27279:9;:18;27289:7;27279:18;;;;;;;;;;;;;;;;27272:25;;27162:143;;;:::o;42267:118::-;42349:28;42359:8;42369:7;42349:9;:28::i;:::-;42267:118;;:::o;40409:144::-;40494:7;40521:24;:7;:14;40529:5;40521:14;;;;;;;;;;;;;;;:22;:24::i;:::-;40514:31;;40409:144;;;:::o;42870:23::-;;;;;;;;;;;;;:::o;33793:163::-;33895:4;33919:6;:12;33926:4;33919:12;;;;;;;;;;;:20;;:29;33940:7;33919:29;;;;;;;;;;;;;;;;;;;;;;;;;33912:36;;33793:163;;;;:::o;26860:87::-;26899:13;26932:7;26925:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26860:87;:::o;33063:49::-;33108:4;33063:49;;;:::o;28658:389::-;28776:4;28793:224;28816:10;28841:7;28863:143;28918:15;28863:143;;;;;;;;;;;;;;;;;:11;:23;28875:10;28863:23;;;;;;;;;;;;;;;:32;28887:7;28863:32;;;;;;;;;;;;;;;;:36;;:143;;;;;:::i;:::-;28793:8;:224::i;:::-;29035:4;29028:11;;28658:389;;;;:::o;27313:198::-;27424:4;27441:40;27451:10;27463:9;27474:6;27441:9;:40::i;:::-;27499:4;27492:11;;27313:198;;;;:::o;42975:41::-;43011:5;42975:41;:::o;43023:34::-;;;;:::o;39557:786::-;39801:8;39782:15;:27;;39774:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;39856:18;39930:16;39965:5;39989:7;40015:5;40039:16;40049:5;40039:9;:16::i;:::-;40074:8;39901:196;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;39877:231;;;;;;39856:252;;40121:12;40136:28;40153:10;40136:16;:28::i;:::-;40121:43;;40177:14;40194:28;40208:4;40214:1;40217;40220;40194:13;:28::i;:::-;40177:45;;40251:5;40241:15;;:6;:15;;;40233:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;40304:31;40313:5;40320:7;40329:5;40304:8;:31::i;:::-;39763:580;;;39557:786;;;;;;;:::o;35690:165::-;35790:18;35803:4;35790:12;:18::i;:::-;33347:16;33358:4;33347:10;:16::i;:::-;35821:26:::1;35833:4;35839:7;35821:11;:26::i;:::-;;35690:165:::0;;;:::o;27519:176::-;27633:7;27660:11;:18;27672:5;27660:18;;;;;;;;;;;;;;;:27;27679:7;27660:27;;;;;;;;;;;;;;;;27653:34;;27519:176;;;;:::o;43064:41::-;;;;:::o;43985:97::-;43473:39;33108:4;43481:18;;43501:10;43473:7;:39::i;:::-;43465:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;44069:5:::1;44058:8;;:16;;;;;;;;;;;;;;;;;;43985:97:::0;:::o;42900:29::-;;;;;;;;;;;;;:::o;42936:30::-;;;;;;;;;;;;;:::o;19915:164::-;20007:4;20046:25;20031:40;;;:11;:40;;;;20024:47;;19915:164;;;:::o;30520:380::-;30673:1;30656:19;;:5;:19;;;30648:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30754:1;30735:21;;:7;:21;;;30727:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30838:6;30808:11;:18;30820:5;30808:18;;;;;;;;;;;;;;;:27;30827:7;30808:27;;;;;;;;;;;;;;;:36;;;;30876:7;30860:32;;30869:5;30860:32;;;30885:6;30860:32;;;;;;:::i;:::-;;;;;;;;30520:380;;;:::o;44529:1329::-;44696:1;44678:20;;:6;:20;;;44670:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;44780:1;44759:23;;:9;:23;;;44751:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;44891:41;44914:6;44922:9;44891:22;:41::i;:::-;44887:909;;;44998:8;;;;;;;;;;;44988:18;;:6;:18;;;44984:801;;45027:11;43011:5;45052:15;;45042:6;:26;;;;:::i;:::-;45041:42;;;;:::i;:::-;45027:56;;45115:1;45106:6;:10;45102:229;;;45159:6;45150;:15;;;;:::i;:::-;45141:24;;45188:47;45204:6;45212:14;;;;;;;;;;;45228:6;45188:15;:47::i;:::-;45280:14;;;;;;;;;;;45263:48;;45272:6;45263:48;;;45296:6;45304;45263:48;;;;;;;:::i;:::-;;;;;;;;45102:229;45008:338;44984:801;;;45415:8;;;;;;;;;;;45402:21;;:9;:21;;;45398:387;;45475:11;43011:5;45500:16;;45490:6;:27;;;;:::i;:::-;45489:43;;;;:::i;:::-;45475:57;;45561:1;45555:3;:7;45551:219;;;45605:3;45596:6;:12;;;;:::i;:::-;45587:21;;45631:45;45647:6;45655:15;;;;;;;;;;;45672:3;45631:15;:45::i;:::-;45721:15;;;;;;;;;;;45704:46;;45713:6;45704:46;;;45738:6;45746:3;45704:46;;;;;;;:::i;:::-;;;;;;;;45551:219;45425:360;45398:387;44984:801;44887:909;45808:42;45824:6;45832:9;45843:6;45808:15;:42::i;:::-;44529:1329;;;:::o;17895:226::-;18015:7;18048:1;18043;:6;;18051:12;18035:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;18075:9;18091:1;18087;:5;;;;:::i;:::-;18075:17;;18112:1;18105:8;;;17895:226;;;;;:::o;34171:105::-;34238:30;34249:4;34255:12;:10;:12::i;:::-;34238:10;:30::i;:::-;34171:105;:::o;37323:349::-;37425:4;37447:22;37455:4;37461:7;37447;:22::i;:::-;37442:223;;37518:4;37486:6;:12;37493:4;37486:12;;;;;;;;;;;:20;;:29;37507:7;37486:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;37569:12;:10;:12::i;:::-;37542:40;;37560:7;37542:40;;37554:4;37542:40;;;;;;;;;;37604:4;37597:11;;;;37442:223;37648:5;37641:12;;37323:349;;;;;:::o;23192:467::-;23245:7;23265:15;23326:9;23315:20;;23373:16;23362:7;:27;23358:294;;23413:24;23406:31;;;;;23358:294;23494:146;23538:10;23571:12;23606:15;23494:21;:146::i;:::-;23470:170;;;23192:467;;:::o;4105:98::-;4158:7;4185:10;4178:17;;4105:98;:::o;37916:350::-;38019:4;38040:22;38048:4;38054:7;38040;:22::i;:::-;38036:223;;;38111:5;38079:6;:12;38086:4;38079:12;;;;;;;;;;;:20;;:29;38100:7;38079:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;38163:12;:10;:12::i;:::-;38136:40;;38154:7;38136:40;;38148:4;38136:40;;;;;;;;;;38198:4;38191:11;;;;38036:223;38242:5;38235:12;;37916:350;;;;;:::o;17562:181::-;17620:7;17640:9;17656:1;17652;:5;;;;:::i;:::-;17640:17;;17681:1;17676;:6;;17668:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;17734:1;17727:8;;;17562:181;;;;:::o;29673:374::-;29776:1;29757:21;;:7;:21;;;29749:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;29825:49;29854:1;29858:7;29867:6;29825:20;:49::i;:::-;29900:24;29917:6;29900:12;;:16;;:24;;;;:::i;:::-;29885:12;:39;;;;29956:30;29979:6;29956:9;:18;29966:7;29956:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;29935:9;:18;29945:7;29935:18;;;;;;;;;;;;;;;:51;;;;30023:7;30002:37;;30019:1;30002:37;;;30032:6;30002:37;;;;;;:::i;:::-;;;;;;;;29673:374;;:::o;30057:455::-;30160:1;30141:21;;:7;:21;;;30133:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30213:49;30234:7;30251:1;30255:6;30213:20;:49::i;:::-;30296:105;30333:6;30296:105;;;;;;;;;;;;;;;;;:9;:18;30306:7;30296:18;;;;;;;;;;;;;;;;:22;;:105;;;;;:::i;:::-;30275:9;:18;30285:7;30275:18;;;;;;;;;;;;;;;:126;;;;30427:24;30444:6;30427:12;;:16;;:24;;;;:::i;:::-;30412:12;:39;;;;30493:1;30467:37;;30476:7;30467:37;;;30497:6;30467:37;;;;;;:::i;:::-;;;;;;;;30057:455;;:::o;42393:389::-;42524:7;42489:31;42499:8;42509:10;42489:9;:31::i;:::-;:42;;42467:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;42606:26;42669:7;42635:31;42645:8;42655:10;42635:9;:31::i;:::-;:41;;;;:::i;:::-;42606:70;;42689:50;42698:8;42708:10;42720:18;42689:8;:50::i;:::-;42750:24;42756:8;42766:7;42750:5;:24::i;:::-;42456:326;42393:389;;:::o;25677:114::-;25742:7;25769;:14;;;25762:21;;25677:114;;;:::o;40936:223::-;41012:15;41040:30;41073:7;:14;41081:5;41073:14;;;;;;;;;;;;;;;41040:47;;41108:15;:5;:13;:15::i;:::-;41098:25;;41134:17;:5;:15;:17::i;:::-;41029:130;40936:223;;;:::o;24828:183::-;24921:7;24948:55;24970:20;:18;:20::i;:::-;24992:10;24948:21;:55::i;:::-;24941:62;;24828:183;;;:::o;12907:279::-;13035:7;13056:17;13075:18;13097:25;13108:4;13114:1;13117;13120;13097:10;:25::i;:::-;13055:67;;;;13133:18;13145:5;13133:11;:18::i;:::-;13169:9;13162:16;;;;12907:279;;;;;;:::o;45866:272::-;45974:4;46021:8;;;;;;;;;;;46012:17;;:5;:17;;;:49;;;;;46034:27;43165:26;46057:3;46034:7;:27::i;:::-;46033:28;46012:49;46011:119;;;;46087:8;;;;;;;;;;;46080:15;;:3;:15;;;:49;;;;;46100:29;43165:26;46123:5;46100:7;:29::i;:::-;46099:30;46080:49;46011:119;45991:139;;45866:272;;;;:::o;29055:610::-;29213:1;29195:20;;:6;:20;;;29187:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;29297:1;29276:23;;:9;:23;;;29268:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;29352:47;29373:6;29381:9;29392:6;29352:20;:47::i;:::-;29432:108;29468:6;29432:108;;;;;;;;;;;;;;;;;:9;:17;29442:6;29432:17;;;;;;;;;;;;;;;;:21;;:108;;;;;:::i;:::-;29412:9;:17;29422:6;29412:17;;;;;;;;;;;;;;;:128;;;;29574:32;29599:6;29574:9;:20;29584:9;29574:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;29551:9;:20;29561:9;29551:20;;;;;;;;;;;;;;;:55;;;;29639:9;29622:35;;29631:6;29622:35;;;29650:6;29622:35;;;;;;:::i;:::-;;;;;;;;29055:610;;;:::o;34412:201::-;34501:22;34509:4;34515:7;34501;:22::i;:::-;34496:110;;34580:7;34589:4;34547:47;;;;;;;;;;;;:::i;:::-;;;;;;;;34496:110;34412:201;;:::o;23667:519::-;23811:7;23831:15;23892:9;23881:20;;24005:8;24036;24067:11;24101:7;24139:4;23972:191;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;23944:234;;;;;;23924:254;;;23667:519;;;;;:::o;30908:128::-;;;;:::o;17751:136::-;17809:7;17836:43;17840:1;17843;17836:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;17829:50;;17751:136;;;;:::o;25799:181::-;25971:1;25953:7;:14;;;:19;;;;;;;:::i;:::-;;;;;;;;25799:181;:::o;14166:266::-;14284:7;14381:15;14398:10;14352:57;;;;;;;;;:::i;:::-;;;;;;;;;;;;;14324:100;;;;;;14304:120;;14166:266;;;;:::o;11099:1669::-;11230:7;11239:12;12191:66;12173:1;12165:10;;:92;12147:200;;;12300:1;12304:30;12284:51;;;;;;12147:200;12366:2;12361:1;:7;;;;:18;;;;;12377:2;12372:1;:7;;;;12361:18;12357:102;;;12412:1;12416:30;12396:51;;;;;;12357:102;12556:14;12573:24;12583:4;12589:1;12592;12595;12573:24;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12556:41;;12630:1;12612:20;;:6;:20;;;12608:103;;12665:1;12669:29;12649:50;;;;;;;12608:103;12731:6;12739:20;12723:37;;;;;11099:1669;;;;;;;;:::o;5662:643::-;5740:20;5731:29;;;;;;;;:::i;:::-;;:5;:29;;;;;;;;:::i;:::-;;;5727:571;5777:7;5727:571;5838:29;5829:38;;;;;;;;:::i;:::-;;:5;:38;;;;;;;;:::i;:::-;;;5825:473;;5884:34;;;;;;;;;;:::i;:::-;;;;;;;;5825:473;5949:35;5940:44;;;;;;;;:::i;:::-;;:5;:44;;;;;;;;:::i;:::-;;;5936:362;;6001:41;;;;;;;;;;:::i;:::-;;;;;;;;5936:362;6073:30;6064:39;;;;;;;;:::i;:::-;;:5;:39;;;;;;;;:::i;:::-;;;6060:238;;6120:44;;;;;;;;;;:::i;:::-;;;;;;;;6060:238;6195:30;6186:39;;;;;;;;:::i;:::-;;:5;:39;;;;;;;;:::i;:::-;;;6182:116;;6242:44;;;;;;;;;;:::i;:::-;;;;;;;;6182:116;5662:643;;:::o;88:117:1:-;197:1;194;187:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:246::-;1879:1;1889:113;1903:6;1900:1;1897:13;1889:113;;;1988:1;1983:3;1979:11;1973:18;1969:1;1964:3;1960:11;1953:39;1925:2;1922:1;1918:10;1913:15;;1889:113;;;2036:1;2027:6;2022:3;2018:16;2011:27;1860:184;1798:246;;;:::o;2050:102::-;2091:6;2142:2;2138:7;2133:2;2126:5;2122:14;2118:28;2108:38;;2050:102;;;:::o;2158:377::-;2246:3;2274:39;2307:5;2274:39;:::i;:::-;2329:71;2393:6;2388:3;2329:71;:::i;:::-;2322:78;;2409:65;2467:6;2462:3;2455:4;2448:5;2444:16;2409:65;:::i;:::-;2499:29;2521:6;2499:29;:::i;:::-;2494:3;2490:39;2483:46;;2250:285;2158:377;;;;:::o;2541:313::-;2654:4;2692:2;2681:9;2677:18;2669:26;;2741:9;2735:4;2731:20;2727:1;2716:9;2712:17;2705:47;2769:78;2842:4;2833:6;2769:78;:::i;:::-;2761:86;;2541:313;;;;:::o;2860:126::-;2897:7;2937:42;2930:5;2926:54;2915:65;;2860:126;;;:::o;2992:96::-;3029:7;3058:24;3076:5;3058:24;:::i;:::-;3047:35;;2992:96;;;:::o;3094:122::-;3167:24;3185:5;3167:24;:::i;:::-;3160:5;3157:35;3147:63;;3206:1;3203;3196:12;3147:63;3094:122;:::o;3222:139::-;3268:5;3306:6;3293:20;3284:29;;3322:33;3349:5;3322:33;:::i;:::-;3222:139;;;;:::o;3367:77::-;3404:7;3433:5;3422:16;;3367:77;;;:::o;3450:122::-;3523:24;3541:5;3523:24;:::i;:::-;3516:5;3513:35;3503:63;;3562:1;3559;3552:12;3503:63;3450:122;:::o;3578:139::-;3624:5;3662:6;3649:20;3640:29;;3678:33;3705:5;3678:33;:::i;:::-;3578:139;;;;:::o;3723:474::-;3791:6;3799;3848:2;3836:9;3827:7;3823:23;3819:32;3816:119;;;3854:79;;:::i;:::-;3816:119;3974:1;3999:53;4044:7;4035:6;4024:9;4020:22;3999:53;:::i;:::-;3989:63;;3945:117;4101:2;4127:53;4172:7;4163:6;4152:9;4148:22;4127:53;:::i;:::-;4117:63;;4072:118;3723:474;;;;;:::o;4203:118::-;4290:24;4308:5;4290:24;:::i;:::-;4285:3;4278:37;4203:118;;:::o;4327:222::-;4420:4;4458:2;4447:9;4443:18;4435:26;;4471:71;4539:1;4528:9;4524:17;4515:6;4471:71;:::i;:::-;4327:222;;;;:::o;4555:77::-;4592:7;4621:5;4610:16;;4555:77;;;:::o;4638:118::-;4725:24;4743:5;4725:24;:::i;:::-;4720:3;4713:37;4638:118;;:::o;4762:222::-;4855:4;4893:2;4882:9;4878:18;4870:26;;4906:71;4974:1;4963:9;4959:17;4950:6;4906:71;:::i;:::-;4762:222;;;;:::o;4990:619::-;5067:6;5075;5083;5132:2;5120:9;5111:7;5107:23;5103:32;5100:119;;;5138:79;;:::i;:::-;5100:119;5258:1;5283:53;5328:7;5319:6;5308:9;5304:22;5283:53;:::i;:::-;5273:63;;5229:117;5385:2;5411:53;5456:7;5447:6;5436:9;5432:22;5411:53;:::i;:::-;5401:63;;5356:118;5513:2;5539:53;5584:7;5575:6;5564:9;5560:22;5539:53;:::i;:::-;5529:63;;5484:118;4990:619;;;;;:::o;5615:122::-;5688:24;5706:5;5688:24;:::i;:::-;5681:5;5678:35;5668:63;;5727:1;5724;5717:12;5668:63;5615:122;:::o;5743:139::-;5789:5;5827:6;5814:20;5805:29;;5843:33;5870:5;5843:33;:::i;:::-;5743:139;;;;:::o;5888:329::-;5947:6;5996:2;5984:9;5975:7;5971:23;5967:32;5964:119;;;6002:79;;:::i;:::-;5964:119;6122:1;6147:53;6192:7;6183:6;6172:9;6168:22;6147:53;:::i;:::-;6137:63;;6093:117;5888:329;;;;:::o;6223:474::-;6291:6;6299;6348:2;6336:9;6327:7;6323:23;6319:32;6316:119;;;6354:79;;:::i;:::-;6316:119;6474:1;6499:53;6544:7;6535:6;6524:9;6520:22;6499:53;:::i;:::-;6489:63;;6445:117;6601:2;6627:53;6672:7;6663:6;6652:9;6648:22;6627:53;:::i;:::-;6617:63;;6572:118;6223:474;;;;;:::o;6703:86::-;6738:7;6778:4;6771:5;6767:16;6756:27;;6703:86;;;:::o;6795:112::-;6878:22;6894:5;6878:22;:::i;:::-;6873:3;6866:35;6795:112;;:::o;6913:214::-;7002:4;7040:2;7029:9;7025:18;7017:26;;7053:67;7117:1;7106:9;7102:17;7093:6;7053:67;:::i;:::-;6913:214;;;;:::o;7133:329::-;7192:6;7241:2;7229:9;7220:7;7216:23;7212:32;7209:119;;;7247:79;;:::i;:::-;7209:119;7367:1;7392:53;7437:7;7428:6;7417:9;7413:22;7392:53;:::i;:::-;7382:63;;7338:117;7133:329;;;;:::o;7468:474::-;7536:6;7544;7593:2;7581:9;7572:7;7568:23;7564:32;7561:119;;;7599:79;;:::i;:::-;7561:119;7719:1;7744:53;7789:7;7780:6;7769:9;7765:22;7744:53;:::i;:::-;7734:63;;7690:117;7846:2;7872:53;7917:7;7908:6;7897:9;7893:22;7872:53;:::i;:::-;7862:63;;7817:118;7468:474;;;;;:::o;7948:329::-;8007:6;8056:2;8044:9;8035:7;8031:23;8027:32;8024:119;;;8062:79;;:::i;:::-;8024:119;8182:1;8207:53;8252:7;8243:6;8232:9;8228:22;8207:53;:::i;:::-;8197:63;;8153:117;7948:329;;;;:::o;8283:118::-;8370:24;8388:5;8370:24;:::i;:::-;8365:3;8358:37;8283:118;;:::o;8407:222::-;8500:4;8538:2;8527:9;8523:18;8515:26;;8551:71;8619:1;8608:9;8604:17;8595:6;8551:71;:::i;:::-;8407:222;;;;:::o;8635:118::-;8706:22;8722:5;8706:22;:::i;:::-;8699:5;8696:33;8686:61;;8743:1;8740;8733:12;8686:61;8635:118;:::o;8759:135::-;8803:5;8841:6;8828:20;8819:29;;8857:31;8882:5;8857:31;:::i;:::-;8759:135;;;;:::o;8900:1199::-;9011:6;9019;9027;9035;9043;9051;9059;9108:3;9096:9;9087:7;9083:23;9079:33;9076:120;;;9115:79;;:::i;:::-;9076:120;9235:1;9260:53;9305:7;9296:6;9285:9;9281:22;9260:53;:::i;:::-;9250:63;;9206:117;9362:2;9388:53;9433:7;9424:6;9413:9;9409:22;9388:53;:::i;:::-;9378:63;;9333:118;9490:2;9516:53;9561:7;9552:6;9541:9;9537:22;9516:53;:::i;:::-;9506:63;;9461:118;9618:2;9644:53;9689:7;9680:6;9669:9;9665:22;9644:53;:::i;:::-;9634:63;;9589:118;9746:3;9773:51;9816:7;9807:6;9796:9;9792:22;9773:51;:::i;:::-;9763:61;;9717:117;9873:3;9900:53;9945:7;9936:6;9925:9;9921:22;9900:53;:::i;:::-;9890:63;;9844:119;10002:3;10029:53;10074:7;10065:6;10054:9;10050:22;10029:53;:::i;:::-;10019:63;;9973:119;8900:1199;;;;;;;;;;:::o;10105:474::-;10173:6;10181;10230:2;10218:9;10209:7;10205:23;10201:32;10198:119;;;10236:79;;:::i;:::-;10198:119;10356:1;10381:53;10426:7;10417:6;10406:9;10402:22;10381:53;:::i;:::-;10371:63;;10327:117;10483:2;10509:53;10554:7;10545:6;10534:9;10530:22;10509:53;:::i;:::-;10499:63;;10454:118;10105:474;;;;;:::o;10585:180::-;10633:77;10630:1;10623:88;10730:4;10727:1;10720:15;10754:4;10751:1;10744:15;10771:320;10815:6;10852:1;10846:4;10842:12;10832:22;;10899:1;10893:4;10889:12;10920:18;10910:81;;10976:4;10968:6;10964:17;10954:27;;10910:81;11038:2;11030:6;11027:14;11007:18;11004:38;11001:84;;11057:18;;:::i;:::-;11001:84;10822:269;10771:320;;;:::o;11097:222::-;11237:34;11233:1;11225:6;11221:14;11214:58;11306:5;11301:2;11293:6;11289:15;11282:30;11097:222;:::o;11325:366::-;11467:3;11488:67;11552:2;11547:3;11488:67;:::i;:::-;11481:74;;11564:93;11653:3;11564:93;:::i;:::-;11682:2;11677:3;11673:12;11666:19;;11325:366;;;:::o;11697:419::-;11863:4;11901:2;11890:9;11886:18;11878:26;;11950:9;11944:4;11940:20;11936:1;11925:9;11921:17;11914:47;11978:131;12104:4;11978:131;:::i;:::-;11970:139;;11697:419;;;:::o;12122:232::-;12262:34;12258:1;12250:6;12246:14;12239:58;12331:15;12326:2;12318:6;12314:15;12307:40;12122:232;:::o;12360:366::-;12502:3;12523:67;12587:2;12582:3;12523:67;:::i;:::-;12516:74;;12599:93;12688:3;12599:93;:::i;:::-;12717:2;12712:3;12708:12;12701:19;;12360:366;;;:::o;12732:419::-;12898:4;12936:2;12925:9;12921:18;12913:26;;12985:9;12979:4;12975:20;12971:1;12960:9;12956:17;12949:47;13013:131;13139:4;13013:131;:::i;:::-;13005:139;;12732:419;;;:::o;13157:169::-;13297:21;13293:1;13285:6;13281:14;13274:45;13157:169;:::o;13332:366::-;13474:3;13495:67;13559:2;13554:3;13495:67;:::i;:::-;13488:74;;13571:93;13660:3;13571:93;:::i;:::-;13689:2;13684:3;13680:12;13673:19;;13332:366;;;:::o;13704:419::-;13870:4;13908:2;13897:9;13893:18;13885:26;;13957:9;13951:4;13947:20;13943:1;13932:9;13928:17;13921:47;13985:131;14111:4;13985:131;:::i;:::-;13977:139;;13704:419;;;:::o;14129:163::-;14269:15;14265:1;14257:6;14253:14;14246:39;14129:163;:::o;14298:366::-;14440:3;14461:67;14525:2;14520:3;14461:67;:::i;:::-;14454:74;;14537:93;14626:3;14537:93;:::i;:::-;14655:2;14650:3;14646:12;14639:19;;14298:366;;;:::o;14670:419::-;14836:4;14874:2;14863:9;14859:18;14851:26;;14923:9;14917:4;14913:20;14909:1;14898:9;14894:17;14887:47;14951:131;15077:4;14951:131;:::i;:::-;14943:139;;14670:419;;;:::o;15095:332::-;15216:4;15254:2;15243:9;15239:18;15231:26;;15267:71;15335:1;15324:9;15320:17;15311:6;15267:71;:::i;:::-;15348:72;15416:2;15405:9;15401:18;15392:6;15348:72;:::i;:::-;15095:332;;;;;:::o;15433:179::-;15573:31;15569:1;15561:6;15557:14;15550:55;15433:179;:::o;15618:366::-;15760:3;15781:67;15845:2;15840:3;15781:67;:::i;:::-;15774:74;;15857:93;15946:3;15857:93;:::i;:::-;15975:2;15970:3;15966:12;15959:19;;15618:366;;;:::o;15990:419::-;16156:4;16194:2;16183:9;16179:18;16171:26;;16243:9;16237:4;16233:20;16229:1;16218:9;16214:17;16207:47;16271:131;16397:4;16271:131;:::i;:::-;16263:139;;15990:419;;;:::o;16415:775::-;16648:4;16686:3;16675:9;16671:19;16663:27;;16700:71;16768:1;16757:9;16753:17;16744:6;16700:71;:::i;:::-;16781:72;16849:2;16838:9;16834:18;16825:6;16781:72;:::i;:::-;16863;16931:2;16920:9;16916:18;16907:6;16863:72;:::i;:::-;16945;17013:2;17002:9;16998:18;16989:6;16945:72;:::i;:::-;17027:73;17095:3;17084:9;17080:19;17071:6;17027:73;:::i;:::-;17110;17178:3;17167:9;17163:19;17154:6;17110:73;:::i;:::-;16415:775;;;;;;;;;:::o;17196:180::-;17336:32;17332:1;17324:6;17320:14;17313:56;17196:180;:::o;17382:366::-;17524:3;17545:67;17609:2;17604:3;17545:67;:::i;:::-;17538:74;;17621:93;17710:3;17621:93;:::i;:::-;17739:2;17734:3;17730:12;17723:19;;17382:366;;;:::o;17754:419::-;17920:4;17958:2;17947:9;17943:18;17935:26;;18007:9;18001:4;17997:20;17993:1;17982:9;17978:17;17971:47;18035:131;18161:4;18035:131;:::i;:::-;18027:139;;17754:419;;;:::o;18179:223::-;18319:34;18315:1;18307:6;18303:14;18296:58;18388:6;18383:2;18375:6;18371:15;18364:31;18179:223;:::o;18408:366::-;18550:3;18571:67;18635:2;18630:3;18571:67;:::i;:::-;18564:74;;18647:93;18736:3;18647:93;:::i;:::-;18765:2;18760:3;18756:12;18749:19;;18408:366;;;:::o;18780:419::-;18946:4;18984:2;18973:9;18969:18;18961:26;;19033:9;19027:4;19023:20;19019:1;19008:9;19004:17;18997:47;19061:131;19187:4;19061:131;:::i;:::-;19053:139;;18780:419;;;:::o;19205:221::-;19345:34;19341:1;19333:6;19329:14;19322:58;19414:4;19409:2;19401:6;19397:15;19390:29;19205:221;:::o;19432:366::-;19574:3;19595:67;19659:2;19654:3;19595:67;:::i;:::-;19588:74;;19671:93;19760:3;19671:93;:::i;:::-;19789:2;19784:3;19780:12;19773:19;;19432:366;;;:::o;19804:419::-;19970:4;20008:2;19997:9;19993:18;19985:26;;20057:9;20051:4;20047:20;20043:1;20032:9;20028:17;20021:47;20085:131;20211:4;20085:131;:::i;:::-;20077:139;;19804:419;;;:::o;20229:224::-;20369:34;20365:1;20357:6;20353:14;20346:58;20438:7;20433:2;20425:6;20421:15;20414:32;20229:224;:::o;20459:366::-;20601:3;20622:67;20686:2;20681:3;20622:67;:::i;:::-;20615:74;;20698:93;20787:3;20698:93;:::i;:::-;20816:2;20811:3;20807:12;20800:19;;20459:366;;;:::o;20831:419::-;20997:4;21035:2;21024:9;21020:18;21012:26;;21084:9;21078:4;21074:20;21070:1;21059:9;21055:17;21048:47;21112:131;21238:4;21112:131;:::i;:::-;21104:139;;20831:419;;;:::o;21256:222::-;21396:34;21392:1;21384:6;21380:14;21373:58;21465:5;21460:2;21452:6;21448:15;21441:30;21256:222;:::o;21484:366::-;21626:3;21647:67;21711:2;21706:3;21647:67;:::i;:::-;21640:74;;21723:93;21812:3;21723:93;:::i;:::-;21841:2;21836:3;21832:12;21825:19;;21484:366;;;:::o;21856:419::-;22022:4;22060:2;22049:9;22045:18;22037:26;;22109:9;22103:4;22099:20;22095:1;22084:9;22080:17;22073:47;22137:131;22263:4;22137:131;:::i;:::-;22129:139;;21856:419;;;:::o;22281:180::-;22329:77;22326:1;22319:88;22426:4;22423:1;22416:15;22450:4;22447:1;22440:15;22467:410;22507:7;22530:20;22548:1;22530:20;:::i;:::-;22525:25;;22564:20;22582:1;22564:20;:::i;:::-;22559:25;;22619:1;22616;22612:9;22641:30;22659:11;22641:30;:::i;:::-;22630:41;;22820:1;22811:7;22807:15;22804:1;22801:22;22781:1;22774:9;22754:83;22731:139;;22850:18;;:::i;:::-;22731:139;22515:362;22467:410;;;;:::o;22883:180::-;22931:77;22928:1;22921:88;23028:4;23025:1;23018:15;23052:4;23049:1;23042:15;23069:185;23109:1;23126:20;23144:1;23126:20;:::i;:::-;23121:25;;23160:20;23178:1;23160:20;:::i;:::-;23155:25;;23199:1;23189:35;;23204:18;;:::i;:::-;23189:35;23246:1;23243;23239:9;23234:14;;23069:185;;;;:::o;23260:194::-;23300:4;23320:20;23338:1;23320:20;:::i;:::-;23315:25;;23354:20;23372:1;23354:20;:::i;:::-;23349:25;;23398:1;23395;23391:9;23383:17;;23422:1;23416:4;23413:11;23410:37;;;23427:18;;:::i;:::-;23410:37;23260:194;;;;:::o;23460:191::-;23500:3;23519:20;23537:1;23519:20;:::i;:::-;23514:25;;23553:20;23571:1;23553:20;:::i;:::-;23548:25;;23596:1;23593;23589:9;23582:16;;23617:3;23614:1;23611:10;23608:36;;;23624:18;;:::i;:::-;23608:36;23460:191;;;;:::o;23657:177::-;23797:29;23793:1;23785:6;23781:14;23774:53;23657:177;:::o;23840:366::-;23982:3;24003:67;24067:2;24062:3;24003:67;:::i;:::-;23996:74;;24079:93;24168:3;24079:93;:::i;:::-;24197:2;24192:3;24188:12;24181:19;;23840:366;;;:::o;24212:419::-;24378:4;24416:2;24405:9;24401:18;24393:26;;24465:9;24459:4;24455:20;24451:1;24440:9;24436:17;24429:47;24493:131;24619:4;24493:131;:::i;:::-;24485:139;;24212:419;;;:::o;24637:181::-;24777:33;24773:1;24765:6;24761:14;24754:57;24637:181;:::o;24824:366::-;24966:3;24987:67;25051:2;25046:3;24987:67;:::i;:::-;24980:74;;25063:93;25152:3;25063:93;:::i;:::-;25181:2;25176:3;25172:12;25165:19;;24824:366;;;:::o;25196:419::-;25362:4;25400:2;25389:9;25385:18;25377:26;;25449:9;25443:4;25439:20;25435:1;25424:9;25420:17;25413:47;25477:131;25603:4;25477:131;:::i;:::-;25469:139;;25196:419;;;:::o;25621:220::-;25761:34;25757:1;25749:6;25745:14;25738:58;25830:3;25825:2;25817:6;25813:15;25806:28;25621:220;:::o;25847:366::-;25989:3;26010:67;26074:2;26069:3;26010:67;:::i;:::-;26003:74;;26086:93;26175:3;26086:93;:::i;:::-;26204:2;26199:3;26195:12;26188:19;;25847:366;;;:::o;26219:419::-;26385:4;26423:2;26412:9;26408:18;26400:26;;26472:9;26466:4;26462:20;26458:1;26447:9;26443:17;26436:47;26500:131;26626:4;26500:131;:::i;:::-;26492:139;;26219:419;;;:::o;26644:223::-;26784:34;26780:1;26772:6;26768:14;26761:58;26853:6;26848:2;26840:6;26836:15;26829:31;26644:223;:::o;26873:366::-;27015:3;27036:67;27100:2;27095:3;27036:67;:::i;:::-;27029:74;;27112:93;27201:3;27112:93;:::i;:::-;27230:2;27225:3;27221:12;27214:19;;26873:366;;;:::o;27245:419::-;27411:4;27449:2;27438:9;27434:18;27426:26;;27498:9;27492:4;27488:20;27484:1;27473:9;27469:17;27462:47;27526:131;27652:4;27526:131;:::i;:::-;27518:139;;27245:419;;;:::o;27670:332::-;27791:4;27829:2;27818:9;27814:18;27806:26;;27842:71;27910:1;27899:9;27895:17;27886:6;27842:71;:::i;:::-;27923:72;27991:2;27980:9;27976:18;27967:6;27923:72;:::i;:::-;27670:332;;;;;:::o;28008:664::-;28213:4;28251:3;28240:9;28236:19;28228:27;;28265:71;28333:1;28322:9;28318:17;28309:6;28265:71;:::i;:::-;28346:72;28414:2;28403:9;28399:18;28390:6;28346:72;:::i;:::-;28428;28496:2;28485:9;28481:18;28472:6;28428:72;:::i;:::-;28510;28578:2;28567:9;28563:18;28554:6;28510:72;:::i;:::-;28592:73;28660:3;28649:9;28645:19;28636:6;28592:73;:::i;:::-;28008:664;;;;;;;;:::o;28678:148::-;28780:11;28817:3;28802:18;;28678:148;;;;:::o;28832:214::-;28972:66;28968:1;28960:6;28956:14;28949:90;28832:214;:::o;29052:400::-;29212:3;29233:84;29315:1;29310:3;29233:84;:::i;:::-;29226:91;;29326:93;29415:3;29326:93;:::i;:::-;29444:1;29439:3;29435:11;29428:18;;29052:400;;;:::o;29458:79::-;29497:7;29526:5;29515:16;;29458:79;;;:::o;29543:157::-;29648:45;29668:24;29686:5;29668:24;:::i;:::-;29648:45;:::i;:::-;29643:3;29636:58;29543:157;;:::o;29706:663::-;29947:3;29969:148;30113:3;29969:148;:::i;:::-;29962:155;;30127:75;30198:3;30189:6;30127:75;:::i;:::-;30227:2;30222:3;30218:12;30211:19;;30240:75;30311:3;30302:6;30240:75;:::i;:::-;30340:2;30335:3;30331:12;30324:19;;30360:3;30353:10;;29706:663;;;;;:::o;30375:545::-;30548:4;30586:3;30575:9;30571:19;30563:27;;30600:71;30668:1;30657:9;30653:17;30644:6;30600:71;:::i;:::-;30681:68;30745:2;30734:9;30730:18;30721:6;30681:68;:::i;:::-;30759:72;30827:2;30816:9;30812:18;30803:6;30759:72;:::i;:::-;30841;30909:2;30898:9;30894:18;30885:6;30841:72;:::i;:::-;30375:545;;;;;;;:::o;30926:180::-;30974:77;30971:1;30964:88;31071:4;31068:1;31061:15;31095:4;31092:1;31085:15;31112:174;31252:26;31248:1;31240:6;31236:14;31229:50;31112:174;:::o;31292:366::-;31434:3;31455:67;31519:2;31514:3;31455:67;:::i;:::-;31448:74;;31531:93;31620:3;31531:93;:::i;:::-;31649:2;31644:3;31640:12;31633:19;;31292:366;;;:::o;31664:419::-;31830:4;31868:2;31857:9;31853:18;31845:26;;31917:9;31911:4;31907:20;31903:1;31892:9;31888:17;31881:47;31945:131;32071:4;31945:131;:::i;:::-;31937:139;;31664:419;;;:::o;32089:181::-;32229:33;32225:1;32217:6;32213:14;32206:57;32089:181;:::o;32276:366::-;32418:3;32439:67;32503:2;32498:3;32439:67;:::i;:::-;32432:74;;32515:93;32604:3;32515:93;:::i;:::-;32633:2;32628:3;32624:12;32617:19;;32276:366;;;:::o;32648:419::-;32814:4;32852:2;32841:9;32837:18;32829:26;;32901:9;32895:4;32891:20;32887:1;32876:9;32872:17;32865:47;32929:131;33055:4;32929:131;:::i;:::-;32921:139;;32648:419;;;:::o;33073:221::-;33213:34;33209:1;33201:6;33197:14;33190:58;33282:4;33277:2;33269:6;33265:15;33258:29;33073:221;:::o;33300:366::-;33442:3;33463:67;33527:2;33522:3;33463:67;:::i;:::-;33456:74;;33539:93;33628:3;33539:93;:::i;:::-;33657:2;33652:3;33648:12;33641:19;;33300:366;;;:::o;33672:419::-;33838:4;33876:2;33865:9;33861:18;33853:26;;33925:9;33919:4;33915:20;33911:1;33900:9;33896:17;33889:47;33953:131;34079:4;33953:131;:::i;:::-;33945:139;;33672:419;;;:::o;34097:221::-;34237:34;34233:1;34225:6;34221:14;34214:58;34306:4;34301:2;34293:6;34289:15;34282:29;34097:221;:::o;34324:366::-;34466:3;34487:67;34551:2;34546:3;34487:67;:::i;:::-;34480:74;;34563:93;34652:3;34563:93;:::i;:::-;34681:2;34676:3;34672:12;34665:19;;34324:366;;;:::o;34696:419::-;34862:4;34900:2;34889:9;34885:18;34877:26;;34949:9;34943:4;34939:20;34935:1;34924:9;34920:17;34913:47;34977:131;35103:4;34977:131;:::i;:::-;34969:139;;34696:419;;;:::o

Swarm Source

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