ERC-20
Overview
Max Total Supply
992,000,510.140899731370208405 TKNFY
Holders
14,678
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
3,845.895853 TKNFYValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Tokenfy
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity 0.8.10; import "./ERC20.sol"; import "@openzeppelin/contracts/utils/cryptography/draft-EIP712.sol"; import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; // .___________. ______ __ ___ _______ .__ __. ___________ ____ // | | / __ \ | |/ / | ____|| \ | | | ____\ \ / / // `---| |----`| | | | | ' / | |__ | \| | | |__ \ \/ / // | | | | | | | < | __| | . ` | | __| \_ _/ // | | | `--' | | . \ | |____ | |\ | | | | | // |__| \______/ |__|\__\ |_______||__| \__| |__| |__| contract Tokenfy is ERC20, EIP712, Ownable { // max supply uint256 public constant MAX_SUPPLY = uint256(1e9 ether); // for staking uint256 public constant STAKING_AMOUNT = MAX_SUPPLY / 100 * 20; address public constant STAKING_ADDRESS = 0x34d2F783c894F898e61162719029058f12Ed2C0a; // for LP uint256 public constant LP_AMOUNT = MAX_SUPPLY / 100 * 10; address public constant LP_ADDRESS = 0xb4abB3A17E48F49B72079f9db42c6A443BE8C30c; // for platform development and marketing uint256 public constant TREASURY_AMOUNT = MAX_SUPPLY / 100 * 5; address public constant TREASURY_ADDRESS = 0x269Fb5d729bA03710C522B0b4644CA2414F72f79; // for team, advisors, investors uint256 public constant TEAM_AMOUNT = MAX_SUPPLY / 100 * 10; address public constant TEAM_ADDRESS = 0xDf5deF1866f934A638454BFa80b75D5Bc1A301D2; // for referrals uint256 public constant REFERRALS_AMOUNT = MAX_SUPPLY / 100 * 5; // for free claim uint256 public constant AIRDROP_AMOUNT = MAX_SUPPLY - (STAKING_AMOUNT + LP_AMOUNT + TREASURY_AMOUNT + TEAM_AMOUNT + REFERRALS_AMOUNT); // claimed airdrop statuses mapping (address => bool) public claimed; // amount signer address public immutable signerAddress; // is free claim now live bool public claimLive = false; uint256 public claimedAmount = 0; uint256 public rewardsAmount = 0; // has minted to treasury bool public treasuryMint = false; bytes32 constant public MINT_CALL_HASH_TYPE = keccak256("mint(address receiver,uint256 amount)"); constructor( string memory _name, string memory _symbol, address _signerAddress, address stakingFeeAddress_, address LPFeeAddress_, address DAOFeeAddess_, address treasuryAddress_ ) ERC20(_name, _symbol, stakingFeeAddress_, LPFeeAddress_, DAOFeeAddess_, treasuryAddress_) EIP712("Tokenfy", "1") { _mint(STAKING_ADDRESS, STAKING_AMOUNT); _mint(LP_ADDRESS, LP_AMOUNT); _mint(TREASURY_ADDRESS, TREASURY_AMOUNT); _mint(TEAM_ADDRESS, TEAM_AMOUNT); signerAddress = _signerAddress; } /** * @dev mints free claim tokens and referral rewards * Referrals must claim to receive rewards from invitees */ function claim(uint256 amountV, bytes32 r, bytes32 s, address referral) external { require(claimLive, "Tokenfy: claim is not live"); uint256 amount = uint248(amountV); uint8 v = uint8(amountV >> 248); uint256 total = totalSupply() + amount; require(total <= MAX_SUPPLY, "Tokenfy: > max supply"); require(!claimed[msg.sender], "Tokenfy: Already claimed"); require(signerValid(v, r, s, msg.sender, amount, referral), "Tokenfy: Invalid signer"); claimed[msg.sender] = true; _mint(msg.sender, amount); claimedAmount += amount; if (referral != address(0) && claimed[referral] && referral != msg.sender && ((total + amount / 10) <= MAX_SUPPLY)) { uint256 reward = amount / 10; _mint(referral, reward); rewardsAmount += reward; } } /** * @dev checks signature validity */ function signerValid(uint8 v, bytes32 r, bytes32 s, address sender, uint256 amount, address referral) private view returns (bool) { bytes32 digest = keccak256(abi.encodePacked( "\x19Ethereum Signed Message:\n32", keccak256(abi.encodePacked( ECDSA.toTypedDataHash(_domainSeparatorV4(), keccak256(abi.encode(MINT_CALL_HASH_TYPE, sender, amount))), referral)) )); return ecrecover(digest, v, r, s) == signerAddress; } /** * @dev starts/stops free claim */ function setClaimLive(bool live) external onlyOwner { claimLive = live; } /** * @dev changes addresses that receive fees on transfer */ function setTransferFeesAddresses( address stakingAddress_, address LPAddress_, address DAOAddess_, address treasuryAddress_ ) external onlyOwner { _stakingAddress = stakingAddress_; _LPAddress = LPAddress_; _DAOAddess = DAOAddess_; _treasuryAddress = treasuryAddress_; } /** * @dev transfers unclaimed tokens to the treasury */ function transferToTreasury(address treasury) external onlyOwner { require(!claimLive, "Tokenfy: claim is live"); require(!treasuryMint, "Tokenfy: already transferred"); uint256 remainingTokens = AIRDROP_AMOUNT + REFERRALS_AMOUNT - claimedAmount - rewardsAmount; _mint(treasury, remainingTokens); treasuryMint = true; } /** * @dev changes status of address in the whitelist */ function changeWhitelistStatus(address whitelisted, bool from, bool to) external onlyOwner { whitelistedFrom[whitelisted] = from; whitelistedTo[whitelisted] = to; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC20/ERC20.sol) pragma solidity ^0.8.0; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; import "@openzeppelin/contracts/utils/Context.sol"; /** * @dev Implementation of the {IERC20} interface with Tokenfy fees * taken on transfer and burnable extension * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; mapping(address => bool) internal whitelistedFrom; mapping(address => bool) internal whitelistedTo; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev fees receiving addresses */ address internal _stakingAddress; address internal _LPAddress; address internal _DAOAddess; address internal _treasuryAddress; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor( string memory name_, string memory symbol_, address stakingAddress_, address LPAddress_, address DAOAddess_, address treasuryAddress_ ) { _name = name_; _symbol = symbol_; _stakingAddress = stakingAddress_; _LPAddress = LPAddress_; _DAOAddess = DAOAddess_; _treasuryAddress = treasuryAddress_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } _transfer(sender, recipient, amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient` and takes transaction fees. * 0.5% is burned * 0.5% goes to staking rewards * 0.25% goes to LP rewards * 0.25% goes to DAO * 1% goes to treasury * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); // if sender or receipient is whitelisted, fee is not applied if (whitelistedFrom[sender] || whitelistedTo[recipient]) { _transferStandard(sender, recipient, amount); } else { uint256 feeBurnStaking = amount * 5 / 1000; // 0.5% is burned _burn(sender, feeBurnStaking); // 0.5% is sent to staking address _transferStandard(sender, _stakingAddress, feeBurnStaking); uint feeLPDAO = amount * 25 / 10000; // 0.25% is sent to LP address _transferStandard(sender, _LPAddress, feeLPDAO); // 0.25% is sent to DAO address _transferStandard(sender, _DAOAddess, feeLPDAO); // 1% is sent to treasury uint256 feeTreasury = amount / 100; _transferStandard(sender, _treasuryAddress, feeTreasury); // transfer to recipient _transferStandard(sender, recipient, amount - feeBurnStaking * 2 - feeLPDAO * 2 - feeTreasury); } } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transferStandard( address sender, address recipient, uint256 amount ) private { uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Destroys `amount` tokens from the caller. * * See {ERC20-_burn}. */ function burn(uint256 amount) public virtual { _burn(_msgSender(), amount); } /** * @dev Destroys `amount` tokens from `account`, deducting from the caller's * allowance. * * See {ERC20-_burn} and {ERC20-allowance}. * * Requirements: * * - the caller must have allowance for ``accounts``'s tokens of at least * `amount`. */ function burnFrom(address account, uint256 amount) public virtual { uint256 currentAllowance = allowance(account, _msgSender()); require(currentAllowance >= amount, "ERC20: burn amount exceeds allowance"); unchecked { _approve(account, _msgSender(), currentAllowance - amount); } _burn(account, amount); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/cryptography/draft-EIP712.sol) pragma solidity ^0.8.0; import "./ECDSA.sol"; /** * @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; address private immutable _CACHED_THIS; 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) { 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 = block.chainid; _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(typeHash, hashedName, hashedVersion); _CACHED_THIS = address(this); _TYPE_HASH = typeHash; } /** * @dev Returns the domain separator for the current chain. */ function _domainSeparatorV4() internal view returns (bytes32) { if (address(this) == _CACHED_THIS && block.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) { return keccak256(abi.encode(typeHash, nameHash, versionHash, block.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); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/cryptography/ECDSA.sol) pragma solidity ^0.8.0; import "../Strings.sol"; /** * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations. * * These functions can be used to verify that a message was signed by the holder * of the private keys of a given address. */ library ECDSA { enum RecoverError { NoError, InvalidSignature, InvalidSignatureLength, InvalidSignatureS, InvalidSignatureV } function _throwError(RecoverError error) private pure { if (error == RecoverError.NoError) { return; // no error: do nothing } else if (error == RecoverError.InvalidSignature) { revert("ECDSA: invalid signature"); } else if (error == RecoverError.InvalidSignatureLength) { revert("ECDSA: invalid signature length"); } else if (error == RecoverError.InvalidSignatureS) { revert("ECDSA: invalid signature 's' value"); } else if (error == RecoverError.InvalidSignatureV) { revert("ECDSA: invalid signature 'v' value"); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature` or error string. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. * * Documentation for signature generation: * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js] * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers] * * _Available since v4.3._ */ function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) { // Check the signature length // - case 65: r,s,v signature (standard) // - case 64: r,vs signature (cf https://eips.ethereum.org/EIPS/eip-2098) _Available since v4.1._ if (signature.length == 65) { bytes32 r; bytes32 s; uint8 v; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. assembly { r := mload(add(signature, 0x20)) s := mload(add(signature, 0x40)) v := byte(0, mload(add(signature, 0x60))) } return tryRecover(hash, v, r, s); } else if (signature.length == 64) { bytes32 r; bytes32 vs; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. assembly { r := mload(add(signature, 0x20)) vs := mload(add(signature, 0x40)) } return tryRecover(hash, r, vs); } else { return (address(0), RecoverError.InvalidSignatureLength); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature`. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. */ function recover(bytes32 hash, bytes memory signature) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, signature); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately. * * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures] * * _Available since v4.3._ */ function tryRecover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address, RecoverError) { bytes32 s; 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 Message, created from `s`. This * produces hash corresponding to the one signed with the * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] * JSON-RPC method as part of EIP-191. * * See {recover}. */ function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n", Strings.toString(s.length), s)); } /** * @dev Returns an Ethereum Signed Typed Data, created from a * `domainSeparator` and a `structHash`. This produces hash corresponding * to the one signed with the * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] * JSON-RPC method as part of EIP-712. * * See {recover}. */ function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash)); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; import "../IERC20.sol"; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); }
{ "metadata": { "useLiteralContent": true }, "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"address","name":"_signerAddress","type":"address"},{"internalType":"address","name":"stakingFeeAddress_","type":"address"},{"internalType":"address","name":"LPFeeAddress_","type":"address"},{"internalType":"address","name":"DAOFeeAddess_","type":"address"},{"internalType":"address","name":"treasuryAddress_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"AIRDROP_AMOUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LP_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LP_AMOUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_CALL_HASH_TYPE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REFERRALS_AMOUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STAKING_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STAKING_AMOUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TEAM_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TEAM_AMOUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TREASURY_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TREASURY_AMOUNT","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":[{"internalType":"address","name":"whitelisted","type":"address"},{"internalType":"bool","name":"from","type":"bool"},{"internalType":"bool","name":"to","type":"bool"}],"name":"changeWhitelistStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountV","type":"uint256"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"address","name":"referral","type":"address"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimLive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"claimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardsAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"live","type":"bool"}],"name":"setClaimLive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"stakingAddress_","type":"address"},{"internalType":"address","name":"LPAddress_","type":"address"},{"internalType":"address","name":"DAOAddess_","type":"address"},{"internalType":"address","name":"treasuryAddress_","type":"address"}],"name":"setTransferFeesAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"signerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"treasury","type":"address"}],"name":"transferToTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
610160604052600d805460ff199081169091556000600e819055600f556010805490911690553480156200003257600080fd5b506040516200246038038062002460833981016040819052620000559162000587565b60405180604001604052806007815260200166546f6b656e667960c81b815250604051806040016040528060018152602001603160f81b8152508888878787878560059080519060200190620000ad929190620003f7565b508451620000c3906006906020880190620003f7565b50600780546001600160a01b039586166001600160a01b03199182161790915560088054948616948216949094179093556009805492851692841692909217909155600a80549190931691161790555050815160209283012081519183019190912060e08290526101008190524660a0818152604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818801819052818301969096526060810194909452608080850193909352308483018190528151808603909301835260c09485019091528151919095012090529190915261012052620001ae33620002bd565b620001f37334d2f783c894f898e61162719029058f12ed2c0a620001e060646b033b2e3c9fd0803ce800000062000664565b620001ed90601462000687565b6200030f565b6200023273b4abb3a17e48f49b72079f9db42c6a443be8c30c6200022560646b033b2e3c9fd0803ce800000062000664565b620001ed90600a62000687565b6200027173269fb5d729ba03710c522b0b4644ca2414f72f796200026460646b033b2e3c9fd0803ce800000062000664565b620001ed90600562000687565b620002a373df5def1866f934a638454bfa80b75d5bc1a301d26200022560646b033b2e3c9fd0803ce800000062000664565b505050506001600160a01b03166101405250620007019050565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166200036a5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b80600460008282546200037e9190620006a9565b90915550506001600160a01b03821660009081526020819052604081208054839290620003ad908490620006a9565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b8280546200040590620006c4565b90600052602060002090601f01602090048101928262000429576000855562000474565b82601f106200044457805160ff191683800117855562000474565b8280016001018555821562000474579182015b828111156200047457825182559160200191906001019062000457565b506200048292915062000486565b5090565b5b8082111562000482576000815560010162000487565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620004c557600080fd5b81516001600160401b0380821115620004e257620004e26200049d565b604051601f8301601f19908116603f011681019082821181831017156200050d576200050d6200049d565b816040528381526020925086838588010111156200052a57600080fd5b600091505b838210156200054e57858201830151818301840152908201906200052f565b83821115620005605760008385830101525b9695505050505050565b80516001600160a01b03811681146200058257600080fd5b919050565b600080600080600080600060e0888a031215620005a357600080fd5b87516001600160401b0380821115620005bb57600080fd5b620005c98b838c01620004b3565b985060208a0151915080821115620005e057600080fd5b50620005ef8a828b01620004b3565b96505062000600604089016200056a565b945062000610606089016200056a565b935062000620608089016200056a565b92506200063060a089016200056a565b91506200064060c089016200056a565b905092959891949750929550565b634e487b7160e01b600052601160045260246000fd5b6000826200068257634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615620006a457620006a46200064e565b500290565b60008219821115620006bf57620006bf6200064e565b500190565b600181811c90821680620006d957607f821691505b60208210811415620006fb57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c05160e051610100516101205161014051611cfd620007636000396000818161037401526116fc015260006118f901526000611948015260006119230152600061187c015260006118a6015260006118d00152611cfd6000f3fe608060405234801561001057600080fd5b506004361061023c5760003560e01c80637fbd1b5a1161013b578063c688387f116100b8578063e387721f1161007c578063e387721f1461052d578063e7f5aad914610540578063f2fde38b14610548578063f7fdf00b146103ed578063f871ed13146103f557600080fd5b8063c688387f1461047c578063c884ef83146104a3578063d56cf10f146104c6578063dd62ed3e146104e1578063dffad8641461051a57600080fd5b806395d89b41116100ff57806395d89b411461043c5780639668ceb814610444578063a457c2d71461044d578063a9059cbb14610460578063c13d995c1461047357600080fd5b80637fbd1b5a146103ed5780638b32f62a146103f55780638c20570b146103fd5780638da5cb5b146104185780638f0dbd251461042957600080fd5b8063313ce567116101c95780635b7633d01161018d5780635b7633d01461036f57806370a0823114610396578063715018a6146103bf578063783e1bab146103c757806379cc6790146103da57600080fd5b8063313ce5671461030d57806332cb6b0c1461031c578063351509a81461032e578063395093511461034957806342966c681461035c57600080fd5b806309f17bd51161021057806309f17bd5146102be57806318160ddd146102d357806323b872dd146102e55780632b5b6872146102f857806330922d781461030057600080fd5b80620322351461024157806306fdde031461026357806307604b1a14610278578063095ea7b3146102ab575b600080fd5b60105461024e9060ff1681565b60405190151581526020015b60405180910390f35b61026b61055b565b60405161025a9190611996565b61029373269fb5d729ba03710c522b0b4644ca2414f72f7981565b6040516001600160a01b03909116815260200161025a565b61024e6102b9366004611a07565b6105ed565b6102d16102cc366004611a31565b610603565b005b6004545b60405190815260200161025a565b61024e6102f3366004611a53565b61081d565b6102d76108c5565b600d5461024e9060ff1681565b6040516012815260200161025a565b6102d7676765c793fa10079d601b1b81565b61029373df5def1866f934a638454bfa80b75d5bc1a301d281565b61024e610357366004611a07565b6109aa565b6102d161036a366004611a8f565b6109e6565b6102937f000000000000000000000000000000000000000000000000000000000000000081565b6102d76103a4366004611a31565b6001600160a01b031660009081526020819052604090205490565b6102d16109f3565b6102d16103d5366004611ab8565b610a29565b6102d16103e8366004611a07565b610a66565b6102d7610aec565b6102d7610b0d565b6102937334d2f783c894f898e61162719029058f12ed2c0a81565b600b546001600160a01b0316610293565b6102d1610437366004611ad3565b610b2e565b61026b610d9f565b6102d7600e5481565b61024e61045b366004611a07565b610dae565b61024e61046e366004611a07565b610e47565b6102d7600f5481565b6102d77f6ac0707cac0c442e03ae738b183f3fb620ee941711ca779bae1b0422a39331ea81565b61024e6104b1366004611a31565b600c6020526000908152604090205460ff1681565b61029373b4abb3a17e48f49b72079f9db42c6a443be8c30c81565b6102d76104ef366004611b12565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6102d1610528366004611b45565b610e54565b6102d161053b366004611b8e565b610ece565b6102d7610f3a565b6102d1610556366004611a31565b610f5b565b60606005805461056a90611bd1565b80601f016020809104026020016040519081016040528092919081815260200182805461059690611bd1565b80156105e35780601f106105b8576101008083540402835291602001916105e3565b820191906000526020600020905b8154815290600101906020018083116105c657829003601f168201915b5050505050905090565b60006105fa338484610ff3565b50600192915050565b600b546001600160a01b031633146106365760405162461bcd60e51b815260040161062d90611c0c565b60405180910390fd5b600d5460ff16156106825760405162461bcd60e51b8152602060048201526016602482015275546f6b656e66793a20636c61696d206973206c69766560501b604482015260640161062d565b60105460ff16156106d55760405162461bcd60e51b815260206004820152601c60248201527f546f6b656e66793a20616c7265616479207472616e7366657272656400000000604482015260640161062d565b6000600f54600e546064676765c793fa10079d601b1b6106f59190611c57565b610700906005611c79565b6107166064676765c793fa10079d601b1b611c57565b610721906005611c79565b6107376064676765c793fa10079d601b1b611c57565b61074290600a611c79565b6107586064676765c793fa10079d601b1b611c57565b610763906005611c79565b6107796064676765c793fa10079d601b1b611c57565b61078490600a611c79565b61079a6064676765c793fa10079d601b1b611c57565b6107a5906014611c79565b6107af9190611c98565b6107b99190611c98565b6107c39190611c98565b6107cd9190611c98565b6107e290676765c793fa10079d601b1b611cb0565b6107ec9190611c98565b6107f69190611cb0565b6108009190611cb0565b905061080c8282611118565b50506010805460ff19166001179055565b6001600160a01b0383166000908152600160209081526040808320338452909152812054828110156108a25760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161062d565b6108af8533858403610ff3565b6108ba8585856111f7565b506001949350505050565b6108db6064676765c793fa10079d601b1b611c57565b6108e6906005611c79565b6108fc6064676765c793fa10079d601b1b611c57565b61090790600a611c79565b61091d6064676765c793fa10079d601b1b611c57565b610928906005611c79565b61093e6064676765c793fa10079d601b1b611c57565b61094990600a611c79565b61095f6064676765c793fa10079d601b1b611c57565b61096a906014611c79565b6109749190611c98565b61097e9190611c98565b6109889190611c98565b6109929190611c98565b6109a790676765c793fa10079d601b1b611cb0565b81565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916105fa9185906109e1908690611c98565b610ff3565b6109f03382611406565b50565b600b546001600160a01b03163314610a1d5760405162461bcd60e51b815260040161062d90611c0c565b610a27600061154c565b565b600b546001600160a01b03163314610a535760405162461bcd60e51b815260040161062d90611c0c565b600d805460ff1916911515919091179055565b6000610a7283336104ef565b905081811015610ad05760405162461bcd60e51b8152602060048201526024808201527f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f77604482015263616e636560e01b606482015260840161062d565b610add8333848403610ff3565b610ae78383611406565b505050565b610b026064676765c793fa10079d601b1b611c57565b6109a7906005611c79565b610b236064676765c793fa10079d601b1b611c57565b6109a790600a611c79565b600d5460ff16610b805760405162461bcd60e51b815260206004820152601a60248201527f546f6b656e66793a20636c61696d206973206e6f74206c697665000000000000604482015260640161062d565b6001600160f81b03841660f885901c600082610b9b60045490565b610ba59190611c98565b9050676765c793fa10079d601b1b811115610bfa5760405162461bcd60e51b8152602060048201526015602482015274546f6b656e66793a203e206d617820737570706c7960581b604482015260640161062d565b336000908152600c602052604090205460ff1615610c5a5760405162461bcd60e51b815260206004820152601860248201527f546f6b656e66793a20416c726561647920636c61696d65640000000000000000604482015260640161062d565b610c6882878733878961159e565b610cb45760405162461bcd60e51b815260206004820152601760248201527f546f6b656e66793a20496e76616c6964207369676e6572000000000000000000604482015260640161062d565b336000818152600c60205260409020805460ff19166001179055610cd89084611118565b82600e6000828254610cea9190611c98565b90915550506001600160a01b03841615801590610d1f57506001600160a01b0384166000908152600c602052604090205460ff165b8015610d3457506001600160a01b0384163314155b8015610d5f5750676765c793fa10079d601b1b610d52600a85611c57565b610d5c9083611c98565b11155b15610d96576000610d71600a85611c57565b9050610d7d8582611118565b80600f6000828254610d8f9190611c98565b9091555050505b50505050505050565b60606006805461056a90611bd1565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015610e305760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161062d565b610e3d3385858403610ff3565b5060019392505050565b60006105fa3384846111f7565b600b546001600160a01b03163314610e7e5760405162461bcd60e51b815260040161062d90611c0c565b600780546001600160a01b039586166001600160a01b03199182161790915560088054948616948216949094179093556009805492851692841692909217909155600a8054919093169116179055565b600b546001600160a01b03163314610ef85760405162461bcd60e51b815260040161062d90611c0c565b6001600160a01b039092166000908152600260209081526040808320805494151560ff1995861617905560039091529020805492151592909116919091179055565b610f506064676765c793fa10079d601b1b611c57565b6109a7906014611c79565b600b546001600160a01b03163314610f855760405162461bcd60e51b815260040161062d90611c0c565b6001600160a01b038116610fea5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161062d565b6109f08161154c565b6001600160a01b0383166110555760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161062d565b6001600160a01b0382166110b65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161062d565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b03821661116e5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161062d565b80600460008282546111809190611c98565b90915550506001600160a01b038216600090815260208190526040812080548392906111ad908490611c98565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b03831661125b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161062d565b6001600160a01b0382166112bd5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161062d565b6001600160a01b03831660009081526002602052604090205460ff16806112fc57506001600160a01b03821660009081526003602052604090205460ff165b1561130c57610ae7838383611766565b60006103e861131c836005611c79565b6113269190611c57565b90506113328482611406565b60075461134a9085906001600160a01b031683611766565b600061271061135a846019611c79565b6113649190611c57565b60085490915061137f9086906001600160a01b031683611766565b6009546113979086906001600160a01b031683611766565b60006113a4606485611c57565b600a549091506113bf9087906001600160a01b031683611766565b6113fe8686836113d0866002611c79565b6113db886002611c79565b6113e5908a611cb0565b6113ef9190611cb0565b6113f99190611cb0565b611766565b505050505050565b6001600160a01b0382166114665760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161062d565b6001600160a01b038216600090815260208190526040902054818110156114da5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161062d565b6001600160a01b0383166000908152602081905260408120838303905560048054849290611509908490611cb0565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200161110b565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008061163c6115ac61186f565b604080517f6ac0707cac0c442e03ae738b183f3fb620ee941711ca779bae1b0422a39331ea6020808301919091526001600160a01b038a168284015260608083018a90528351808403909101815260808301845280519082012061190160f01b60a084015260a283019490945260c2808301949094528251808303909401845260e2909101909152815191012090565b8360405160200161166992919091825260601b6bffffffffffffffffffffffff1916602082015260340190565b60408051601f198184030181529082905280516020918201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000091830191909152603c820152605c0160408051601f1981840301815282825280516020918201206000845290830180835281905260ff8b1691830191909152606082018990526080820188905291506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169060019060a0016020604051602081039080840390855afa158015611745573d6000803e3d6000fd5b505050602060405103516001600160a01b0316149150509695505050505050565b6001600160a01b038316600090815260208190526040902054818110156117de5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161062d565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611815908490611c98565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161186191815260200190565b60405180910390a350505050565b6000306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480156118c857507f000000000000000000000000000000000000000000000000000000000000000046145b156118f257507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b600060208083528351808285015260005b818110156119c3578581018301518582016040015282016119a7565b818111156119d5576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114611a0257600080fd5b919050565b60008060408385031215611a1a57600080fd5b611a23836119eb565b946020939093013593505050565b600060208284031215611a4357600080fd5b611a4c826119eb565b9392505050565b600080600060608486031215611a6857600080fd5b611a71846119eb565b9250611a7f602085016119eb565b9150604084013590509250925092565b600060208284031215611aa157600080fd5b5035919050565b80358015158114611a0257600080fd5b600060208284031215611aca57600080fd5b611a4c82611aa8565b60008060008060808587031215611ae957600080fd5b843593506020850135925060408501359150611b07606086016119eb565b905092959194509250565b60008060408385031215611b2557600080fd5b611b2e836119eb565b9150611b3c602084016119eb565b90509250929050565b60008060008060808587031215611b5b57600080fd5b611b64856119eb565b9350611b72602086016119eb565b9250611b80604086016119eb565b9150611b07606086016119eb565b600080600060608486031215611ba357600080fd5b611bac846119eb565b9250611bba60208501611aa8565b9150611bc860408501611aa8565b90509250925092565b600181811c90821680611be557607f821691505b60208210811415611c0657634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082611c7457634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615611c9357611c93611c41565b500290565b60008219821115611cab57611cab611c41565b500190565b600082821015611cc257611cc2611c41565b50039056fea264697066735822122002417521c9630bd8441104de1113e85f0f24097d9b15ddd949b1c45d50a8ab3464736f6c634300080a003300000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000b6614ef9e2797043273d22c898b63bc524e6838900000000000000000000000034d2f783c894f898e61162719029058f12ed2c0a000000000000000000000000b4abb3a17e48f49b72079f9db42c6a443be8c30c0000000000000000000000001def24532b25fd97bb986ae93f29866022012618000000000000000000000000269fb5d729ba03710c522b0b4644ca2414f72f790000000000000000000000000000000000000000000000000000000000000007546f6b656e6679000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005544b4e4659000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061023c5760003560e01c80637fbd1b5a1161013b578063c688387f116100b8578063e387721f1161007c578063e387721f1461052d578063e7f5aad914610540578063f2fde38b14610548578063f7fdf00b146103ed578063f871ed13146103f557600080fd5b8063c688387f1461047c578063c884ef83146104a3578063d56cf10f146104c6578063dd62ed3e146104e1578063dffad8641461051a57600080fd5b806395d89b41116100ff57806395d89b411461043c5780639668ceb814610444578063a457c2d71461044d578063a9059cbb14610460578063c13d995c1461047357600080fd5b80637fbd1b5a146103ed5780638b32f62a146103f55780638c20570b146103fd5780638da5cb5b146104185780638f0dbd251461042957600080fd5b8063313ce567116101c95780635b7633d01161018d5780635b7633d01461036f57806370a0823114610396578063715018a6146103bf578063783e1bab146103c757806379cc6790146103da57600080fd5b8063313ce5671461030d57806332cb6b0c1461031c578063351509a81461032e578063395093511461034957806342966c681461035c57600080fd5b806309f17bd51161021057806309f17bd5146102be57806318160ddd146102d357806323b872dd146102e55780632b5b6872146102f857806330922d781461030057600080fd5b80620322351461024157806306fdde031461026357806307604b1a14610278578063095ea7b3146102ab575b600080fd5b60105461024e9060ff1681565b60405190151581526020015b60405180910390f35b61026b61055b565b60405161025a9190611996565b61029373269fb5d729ba03710c522b0b4644ca2414f72f7981565b6040516001600160a01b03909116815260200161025a565b61024e6102b9366004611a07565b6105ed565b6102d16102cc366004611a31565b610603565b005b6004545b60405190815260200161025a565b61024e6102f3366004611a53565b61081d565b6102d76108c5565b600d5461024e9060ff1681565b6040516012815260200161025a565b6102d7676765c793fa10079d601b1b81565b61029373df5def1866f934a638454bfa80b75d5bc1a301d281565b61024e610357366004611a07565b6109aa565b6102d161036a366004611a8f565b6109e6565b6102937f000000000000000000000000b6614ef9e2797043273d22c898b63bc524e6838981565b6102d76103a4366004611a31565b6001600160a01b031660009081526020819052604090205490565b6102d16109f3565b6102d16103d5366004611ab8565b610a29565b6102d16103e8366004611a07565b610a66565b6102d7610aec565b6102d7610b0d565b6102937334d2f783c894f898e61162719029058f12ed2c0a81565b600b546001600160a01b0316610293565b6102d1610437366004611ad3565b610b2e565b61026b610d9f565b6102d7600e5481565b61024e61045b366004611a07565b610dae565b61024e61046e366004611a07565b610e47565b6102d7600f5481565b6102d77f6ac0707cac0c442e03ae738b183f3fb620ee941711ca779bae1b0422a39331ea81565b61024e6104b1366004611a31565b600c6020526000908152604090205460ff1681565b61029373b4abb3a17e48f49b72079f9db42c6a443be8c30c81565b6102d76104ef366004611b12565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6102d1610528366004611b45565b610e54565b6102d161053b366004611b8e565b610ece565b6102d7610f3a565b6102d1610556366004611a31565b610f5b565b60606005805461056a90611bd1565b80601f016020809104026020016040519081016040528092919081815260200182805461059690611bd1565b80156105e35780601f106105b8576101008083540402835291602001916105e3565b820191906000526020600020905b8154815290600101906020018083116105c657829003601f168201915b5050505050905090565b60006105fa338484610ff3565b50600192915050565b600b546001600160a01b031633146106365760405162461bcd60e51b815260040161062d90611c0c565b60405180910390fd5b600d5460ff16156106825760405162461bcd60e51b8152602060048201526016602482015275546f6b656e66793a20636c61696d206973206c69766560501b604482015260640161062d565b60105460ff16156106d55760405162461bcd60e51b815260206004820152601c60248201527f546f6b656e66793a20616c7265616479207472616e7366657272656400000000604482015260640161062d565b6000600f54600e546064676765c793fa10079d601b1b6106f59190611c57565b610700906005611c79565b6107166064676765c793fa10079d601b1b611c57565b610721906005611c79565b6107376064676765c793fa10079d601b1b611c57565b61074290600a611c79565b6107586064676765c793fa10079d601b1b611c57565b610763906005611c79565b6107796064676765c793fa10079d601b1b611c57565b61078490600a611c79565b61079a6064676765c793fa10079d601b1b611c57565b6107a5906014611c79565b6107af9190611c98565b6107b99190611c98565b6107c39190611c98565b6107cd9190611c98565b6107e290676765c793fa10079d601b1b611cb0565b6107ec9190611c98565b6107f69190611cb0565b6108009190611cb0565b905061080c8282611118565b50506010805460ff19166001179055565b6001600160a01b0383166000908152600160209081526040808320338452909152812054828110156108a25760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161062d565b6108af8533858403610ff3565b6108ba8585856111f7565b506001949350505050565b6108db6064676765c793fa10079d601b1b611c57565b6108e6906005611c79565b6108fc6064676765c793fa10079d601b1b611c57565b61090790600a611c79565b61091d6064676765c793fa10079d601b1b611c57565b610928906005611c79565b61093e6064676765c793fa10079d601b1b611c57565b61094990600a611c79565b61095f6064676765c793fa10079d601b1b611c57565b61096a906014611c79565b6109749190611c98565b61097e9190611c98565b6109889190611c98565b6109929190611c98565b6109a790676765c793fa10079d601b1b611cb0565b81565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916105fa9185906109e1908690611c98565b610ff3565b6109f03382611406565b50565b600b546001600160a01b03163314610a1d5760405162461bcd60e51b815260040161062d90611c0c565b610a27600061154c565b565b600b546001600160a01b03163314610a535760405162461bcd60e51b815260040161062d90611c0c565b600d805460ff1916911515919091179055565b6000610a7283336104ef565b905081811015610ad05760405162461bcd60e51b8152602060048201526024808201527f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f77604482015263616e636560e01b606482015260840161062d565b610add8333848403610ff3565b610ae78383611406565b505050565b610b026064676765c793fa10079d601b1b611c57565b6109a7906005611c79565b610b236064676765c793fa10079d601b1b611c57565b6109a790600a611c79565b600d5460ff16610b805760405162461bcd60e51b815260206004820152601a60248201527f546f6b656e66793a20636c61696d206973206e6f74206c697665000000000000604482015260640161062d565b6001600160f81b03841660f885901c600082610b9b60045490565b610ba59190611c98565b9050676765c793fa10079d601b1b811115610bfa5760405162461bcd60e51b8152602060048201526015602482015274546f6b656e66793a203e206d617820737570706c7960581b604482015260640161062d565b336000908152600c602052604090205460ff1615610c5a5760405162461bcd60e51b815260206004820152601860248201527f546f6b656e66793a20416c726561647920636c61696d65640000000000000000604482015260640161062d565b610c6882878733878961159e565b610cb45760405162461bcd60e51b815260206004820152601760248201527f546f6b656e66793a20496e76616c6964207369676e6572000000000000000000604482015260640161062d565b336000818152600c60205260409020805460ff19166001179055610cd89084611118565b82600e6000828254610cea9190611c98565b90915550506001600160a01b03841615801590610d1f57506001600160a01b0384166000908152600c602052604090205460ff165b8015610d3457506001600160a01b0384163314155b8015610d5f5750676765c793fa10079d601b1b610d52600a85611c57565b610d5c9083611c98565b11155b15610d96576000610d71600a85611c57565b9050610d7d8582611118565b80600f6000828254610d8f9190611c98565b9091555050505b50505050505050565b60606006805461056a90611bd1565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015610e305760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161062d565b610e3d3385858403610ff3565b5060019392505050565b60006105fa3384846111f7565b600b546001600160a01b03163314610e7e5760405162461bcd60e51b815260040161062d90611c0c565b600780546001600160a01b039586166001600160a01b03199182161790915560088054948616948216949094179093556009805492851692841692909217909155600a8054919093169116179055565b600b546001600160a01b03163314610ef85760405162461bcd60e51b815260040161062d90611c0c565b6001600160a01b039092166000908152600260209081526040808320805494151560ff1995861617905560039091529020805492151592909116919091179055565b610f506064676765c793fa10079d601b1b611c57565b6109a7906014611c79565b600b546001600160a01b03163314610f855760405162461bcd60e51b815260040161062d90611c0c565b6001600160a01b038116610fea5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161062d565b6109f08161154c565b6001600160a01b0383166110555760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161062d565b6001600160a01b0382166110b65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161062d565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b03821661116e5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161062d565b80600460008282546111809190611c98565b90915550506001600160a01b038216600090815260208190526040812080548392906111ad908490611c98565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b03831661125b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161062d565b6001600160a01b0382166112bd5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161062d565b6001600160a01b03831660009081526002602052604090205460ff16806112fc57506001600160a01b03821660009081526003602052604090205460ff165b1561130c57610ae7838383611766565b60006103e861131c836005611c79565b6113269190611c57565b90506113328482611406565b60075461134a9085906001600160a01b031683611766565b600061271061135a846019611c79565b6113649190611c57565b60085490915061137f9086906001600160a01b031683611766565b6009546113979086906001600160a01b031683611766565b60006113a4606485611c57565b600a549091506113bf9087906001600160a01b031683611766565b6113fe8686836113d0866002611c79565b6113db886002611c79565b6113e5908a611cb0565b6113ef9190611cb0565b6113f99190611cb0565b611766565b505050505050565b6001600160a01b0382166114665760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161062d565b6001600160a01b038216600090815260208190526040902054818110156114da5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161062d565b6001600160a01b0383166000908152602081905260408120838303905560048054849290611509908490611cb0565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200161110b565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008061163c6115ac61186f565b604080517f6ac0707cac0c442e03ae738b183f3fb620ee941711ca779bae1b0422a39331ea6020808301919091526001600160a01b038a168284015260608083018a90528351808403909101815260808301845280519082012061190160f01b60a084015260a283019490945260c2808301949094528251808303909401845260e2909101909152815191012090565b8360405160200161166992919091825260601b6bffffffffffffffffffffffff1916602082015260340190565b60408051601f198184030181529082905280516020918201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000091830191909152603c820152605c0160408051601f1981840301815282825280516020918201206000845290830180835281905260ff8b1691830191909152606082018990526080820188905291506001600160a01b037f000000000000000000000000b6614ef9e2797043273d22c898b63bc524e68389169060019060a0016020604051602081039080840390855afa158015611745573d6000803e3d6000fd5b505050602060405103516001600160a01b0316149150509695505050505050565b6001600160a01b038316600090815260208190526040902054818110156117de5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161062d565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611815908490611c98565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161186191815260200190565b60405180910390a350505050565b6000306001600160a01b037f000000000000000000000000a6dd98031551c23bb4a2fbe2c4d524e8f737c6f7161480156118c857507f000000000000000000000000000000000000000000000000000000000000000146145b156118f257507fb50b486044f3d59ced60e8389a556ee25041bf3950304caedda00690a920923490565b50604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6020808301919091527ff73ef67045837e3051c5e2ae2d49dbc2ad9f53f61d426fe18dd62aa4a6cca16e828401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b600060208083528351808285015260005b818110156119c3578581018301518582016040015282016119a7565b818111156119d5576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114611a0257600080fd5b919050565b60008060408385031215611a1a57600080fd5b611a23836119eb565b946020939093013593505050565b600060208284031215611a4357600080fd5b611a4c826119eb565b9392505050565b600080600060608486031215611a6857600080fd5b611a71846119eb565b9250611a7f602085016119eb565b9150604084013590509250925092565b600060208284031215611aa157600080fd5b5035919050565b80358015158114611a0257600080fd5b600060208284031215611aca57600080fd5b611a4c82611aa8565b60008060008060808587031215611ae957600080fd5b843593506020850135925060408501359150611b07606086016119eb565b905092959194509250565b60008060408385031215611b2557600080fd5b611b2e836119eb565b9150611b3c602084016119eb565b90509250929050565b60008060008060808587031215611b5b57600080fd5b611b64856119eb565b9350611b72602086016119eb565b9250611b80604086016119eb565b9150611b07606086016119eb565b600080600060608486031215611ba357600080fd5b611bac846119eb565b9250611bba60208501611aa8565b9150611bc860408501611aa8565b90509250925092565b600181811c90821680611be557607f821691505b60208210811415611c0657634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082611c7457634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615611c9357611c93611c41565b500290565b60008219821115611cab57611cab611c41565b500190565b600082821015611cc257611cc2611c41565b50039056fea264697066735822122002417521c9630bd8441104de1113e85f0f24097d9b15ddd949b1c45d50a8ab3464736f6c634300080a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000b6614ef9e2797043273d22c898b63bc524e6838900000000000000000000000034d2f783c894f898e61162719029058f12ed2c0a000000000000000000000000b4abb3a17e48f49b72079f9db42c6a443be8c30c0000000000000000000000001def24532b25fd97bb986ae93f29866022012618000000000000000000000000269fb5d729ba03710c522b0b4644ca2414f72f790000000000000000000000000000000000000000000000000000000000000007546f6b656e6679000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005544b4e4659000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): Tokenfy
Arg [1] : _symbol (string): TKNFY
Arg [2] : _signerAddress (address): 0xb6614ef9E2797043273D22c898B63bC524e68389
Arg [3] : stakingFeeAddress_ (address): 0x34d2F783c894F898e61162719029058f12Ed2C0a
Arg [4] : LPFeeAddress_ (address): 0xb4abB3A17E48F49B72079f9db42c6A443BE8C30c
Arg [5] : DAOFeeAddess_ (address): 0x1dEF24532b25Fd97bB986ae93F29866022012618
Arg [6] : treasuryAddress_ (address): 0x269Fb5d729bA03710C522B0b4644CA2414F72f79
-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [2] : 000000000000000000000000b6614ef9e2797043273d22c898b63bc524e68389
Arg [3] : 00000000000000000000000034d2f783c894f898e61162719029058f12ed2c0a
Arg [4] : 000000000000000000000000b4abb3a17e48f49b72079f9db42c6a443be8c30c
Arg [5] : 0000000000000000000000001def24532b25fd97bb986ae93f29866022012618
Arg [6] : 000000000000000000000000269fb5d729ba03710c522b0b4644ca2414f72f79
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [8] : 546f6b656e667900000000000000000000000000000000000000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [10] : 544b4e4659000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
729:5033:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2170:32;;;;;;;;;;;;179:14:9;;172:22;154:41;;142:2;127:18;2170:32:1;;;;;;;;2902:98:0;;;:::i;:::-;;;;;;;:::i;1318:85:1:-;;1361:42;1318:85;;;;;-1:-1:-1;;;;;972:32:9;;;954:51;;942:2;927:18;1318:85:1;808:203:9;4999:166:0;;;;;;:::i;:::-;;:::i;5136:364:1:-;;;;;;:::i;:::-;;:::i;:::-;;3990:106:0;4077:12;;3990:106;;;1790:25:9;;;1778:2;1763:18;3990:106:0;1644:177:9;5632:478:0;;;;;;:::i;:::-;;:::i;1713:133:1:-;;;:::i;2028:29::-;;;;;;;;;3839:91:0;;;3921:2;2301:36:9;;2289:2;2274:18;3839:91:0;2159:184:9;801:55:1;;-1:-1:-1;;;801:55:1;;1512:81;;1551:42;1512:81;;6505:212:0;;;;;;:::i;:::-;;:::i;12549:89::-;;;;;;:::i;:::-;;:::i;1953:38:1:-;;;;;4154:125:0;;;;;;:::i;:::-;-1:-1:-1;;;;;4254:18:0;4228:7;4254:18;;;;;;;;;;;;4154:125;1668:101:2;;;:::i;4553:85:1:-;;;;;;:::i;:::-;;:::i;12944:361:0:-;;;;;;:::i;:::-;;:::i;1250:62:1:-;;;:::i;1447:59::-;;;:::i;950:84::-;;992:42;950:84;;1036:85:2;1108:6;;-1:-1:-1;;;;;1108:6:2;1036:85;;3040:871:1;;;;;;:::i;:::-;;:::i;3113:102:0:-;;;:::i;2063:32:1:-;;;;;;7204:405:0;;;;;;:::i;:::-;;:::i;4482:172::-;;;;;;:::i;:::-;;:::i;2101:32:1:-;;;;;;2209:96;;2255:50;2209:96;;1885:40;;;;;;:::i;:::-;;;;;;;;;;;;;;;;1118:79;;1155:42;1118:79;;4712:149:0;;;;;;:::i;:::-;-1:-1:-1;;;;;4827:18:0;;;4801:7;4827:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4712:149;4718:343:1;;;;;;:::i;:::-;;:::i;5575:184::-;;;;;;:::i;:::-;;:::i;882:62::-;;;:::i;1918:198:2:-;;;;;;:::i;:::-;;:::i;2902:98:0:-;2956:13;2988:5;2981:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2902:98;:::o;4999:166::-;5082:4;5098:39;719:10:5;5121:7:0;5130:6;5098:8;:39::i;:::-;-1:-1:-1;5154:4:0;4999:166;;;;:::o;5136:364:1:-;1108:6:2;;-1:-1:-1;;;;;1108:6:2;719:10:5;1248:23:2;1240:68;;;;-1:-1:-1;;;1240:68:2;;;;;;;:::i;:::-;;;;;;;;;5220:9:1::1;::::0;::::1;;5219:10;5211:45;;;::::0;-1:-1:-1;;;5211:45:1;;5415:2:9;5211:45:1::1;::::0;::::1;5397:21:9::0;5454:2;5434:18;;;5427:30;-1:-1:-1;;;5473:18:9;;;5466:52;5535:18;;5211:45:1::1;5213:346:9::0;5211:45:1::1;5275:12;::::0;::::1;;5274:13;5266:54;;;::::0;-1:-1:-1;;;5266:54:1;;5766:2:9;5266:54:1::1;::::0;::::1;5748:21:9::0;5805:2;5785:18;;;5778:30;5844;5824:18;;;5817:58;5892:18;;5266:54:1::1;5564:352:9::0;5266:54:1::1;5330:23;5408:13;;5392;;1677:3;-1:-1:-1::0;;;1664:16:1::1;;;;:::i;:::-;:20;::::0;1683:1:::1;1664:20;:::i;:::-;:16;1677:3;-1:-1:-1::0;;;1664:16:1::1;:::i;:::-;:20;::::0;1683:1:::1;1664:20;:::i;:::-;1485:16;1498:3;-1:-1:-1::0;;;1485:16:1::1;:::i;:::-;:21;::::0;1504:2:::1;1485:21;:::i;:::-;1292:16;1305:3;-1:-1:-1::0;;;1292:16:1::1;:::i;:::-;:20;::::0;1311:1:::1;1292:20;:::i;:::-;1091:16;1104:3;-1:-1:-1::0;;;1091:16:1::1;:::i;:::-;:21;::::0;1110:2:::1;1091:21;:::i;:::-;923:16;936:3;-1:-1:-1::0;;;923:16:1::1;:::i;:::-;:21;::::0;942:2:::1;923:21;:::i;:::-;1768:26;;;;:::i;:::-;:44;;;;:::i;:::-;:58;;;;:::i;:::-;:77;;;;:::i;:::-;1754:92;::::0;-1:-1:-1;;;1754:92:1::1;:::i;:::-;5356:33;;;;:::i;:::-;:49;;;;:::i;:::-;:65;;;;:::i;:::-;5330:91;;5432:32;5438:8;5448:15;5432:5;:32::i;:::-;-1:-1:-1::0;;5474:12:1::1;:19:::0;;-1:-1:-1;;5474:19:1::1;5489:4;5474:19;::::0;;5136:364::o;5632:478:0:-;-1:-1:-1;;;;;5811:19:0;;5768:4;5811:19;;;:11;:19;;;;;;;;719:10:5;5811:33:0;;;;;;;;5862:26;;;;5854:79;;;;-1:-1:-1;;;5854:79:0;;6913:2:9;5854:79:0;;;6895:21:9;6952:2;6932:18;;;6925:30;6991:34;6971:18;;;6964:62;-1:-1:-1;;;7042:18:9;;;7035:38;7090:19;;5854:79:0;6711:404:9;5854:79:0;5967:57;5976:6;719:10:5;6017:6:0;5998:16;:25;5967:8;:57::i;:::-;6045:36;6055:6;6063:9;6074:6;6045:9;:36::i;:::-;-1:-1:-1;6099:4:0;;5632:478;-1:-1:-1;;;;5632:478:0:o;1713:133:1:-;1664:16;1677:3;-1:-1:-1;;;1664:16:1;:::i;:::-;:20;;1683:1;1664:20;:::i;:::-;1485:16;1498:3;-1:-1:-1;;;1485:16:1;:::i;:::-;:21;;1504:2;1485:21;:::i;:::-;1292:16;1305:3;-1:-1:-1;;;1292:16:1;:::i;:::-;:20;;1311:1;1292:20;:::i;:::-;1091:16;1104:3;-1:-1:-1;;;1091:16:1;:::i;:::-;:21;;1110:2;1091:21;:::i;:::-;923:16;936:3;-1:-1:-1;;;923:16:1;:::i;:::-;:21;;942:2;923:21;:::i;:::-;1768:26;;;;:::i;:::-;:44;;;;:::i;:::-;:58;;;;:::i;:::-;:77;;;;:::i;:::-;1754:92;;-1:-1:-1;;;1754:92:1;:::i;:::-;1713:133;:::o;6505:212:0:-;719:10:5;6593:4:0;6641:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6641:34:0;;;;;;;;;;6593:4;;6609:80;;6632:7;;6641:47;;6678:10;;6641:47;:::i;:::-;6609:8;:80::i;12549:89::-;12604:27;719:10:5;12624:6:0;12604:5;:27::i;:::-;12549:89;:::o;1668:101:2:-;1108:6;;-1:-1:-1;;;;;1108:6:2;719:10:5;1248:23:2;1240:68;;;;-1:-1:-1;;;1240:68:2;;;;;;;:::i;:::-;1732:30:::1;1759:1;1732:18;:30::i;:::-;1668:101::o:0;4553:85:1:-;1108:6:2;;-1:-1:-1;;;;;1108:6:2;719:10:5;1248:23:2;1240:68;;;;-1:-1:-1;;;1240:68:2;;;;;;;:::i;:::-;4615:9:1::1;:16:::0;;-1:-1:-1;;4615:16:1::1;::::0;::::1;;::::0;;;::::1;::::0;;4553:85::o;12944:361:0:-;13020:24;13047:32;13057:7;719:10:5;4712:149:0;:::i;13047:32::-;13020:59;;13117:6;13097:16;:26;;13089:75;;;;-1:-1:-1;;;13089:75:0;;7322:2:9;13089:75:0;;;7304:21:9;7361:2;7341:18;;;7334:30;7400:34;7380:18;;;7373:62;-1:-1:-1;;;7451:18:9;;;7444:34;7495:19;;13089:75:0;7120:400:9;13089:75:0;13198:58;13207:7;719:10:5;13249:6:0;13230:16;:25;13198:8;:58::i;:::-;13276:22;13282:7;13291:6;13276:5;:22::i;:::-;13010:295;12944:361;;:::o;1250:62:1:-;1292:16;1305:3;-1:-1:-1;;;1292:16:1;:::i;:::-;:20;;1311:1;1292:20;:::i;1447:59::-;1485:16;1498:3;-1:-1:-1;;;1485:16:1;:::i;:::-;:21;;1504:2;1485:21;:::i;3040:871::-;3139:9;;;;3131:48;;;;-1:-1:-1;;;3131:48:1;;7727:2:9;3131:48:1;;;7709:21:9;7766:2;7746:18;;;7739:30;7805:28;7785:18;;;7778:56;7851:18;;3131:48:1;7525:350:9;3131:48:1;-1:-1:-1;;;;;3190:33:1;;3260:3;3249:14;;;3190;:33;3290:13;4077:12:0;;;3990:106;3290:13:1;:22;;;;:::i;:::-;3274:38;;-1:-1:-1;;;3330:5:1;:19;;3322:53;;;;-1:-1:-1;;;3322:53:1;;8082:2:9;3322:53:1;;;8064:21:9;8121:2;8101:18;;;8094:30;-1:-1:-1;;;8140:18:9;;;8133:51;8201:18;;3322:53:1;7880:345:9;3322:53:1;3402:10;3394:19;;;;:7;:19;;;;;;;;3393:20;3385:57;;;;-1:-1:-1;;;3385:57:1;;8432:2:9;3385:57:1;;;8414:21:9;8471:2;8451:18;;;8444:30;8510:26;8490:18;;;8483:54;8554:18;;3385:57:1;8230:348:9;3385:57:1;3460:50;3472:1;3475;3478;3481:10;3493:6;3501:8;3460:11;:50::i;:::-;3452:86;;;;-1:-1:-1;;;3452:86:1;;8785:2:9;3452:86:1;;;8767:21:9;8824:2;8804:18;;;8797:30;8863:25;8843:18;;;8836:53;8906:18;;3452:86:1;8583:347:9;3452:86:1;3565:10;3557:19;;;;:7;:19;;;;;:26;;-1:-1:-1;;3557:26:1;3579:4;3557:26;;;3593:25;;3611:6;3593:5;:25::i;:::-;3645:6;3628:13;;:23;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;3666:22:1;;;;;;:43;;-1:-1:-1;;;;;;3692:17:1;;;;;;:7;:17;;;;;;;;3666:43;:69;;;;-1:-1:-1;;;;;;3713:22:1;;3725:10;3713:22;;3666:69;:110;;;;-1:-1:-1;;;;3749:11:1;3758:2;3749:6;:11;:::i;:::-;3741:19;;:5;:19;:::i;:::-;3740:35;;3666:110;3662:243;;;3792:14;3809:11;3818:2;3809:6;:11;:::i;:::-;3792:28;;3834:23;3840:8;3850:6;3834:5;:23::i;:::-;3888:6;3871:13;;:23;;;;;;;:::i;:::-;;;;-1:-1:-1;;;3662:243:1;3121:790;;;3040:871;;;;:::o;3113:102:0:-;3169:13;3201:7;3194:14;;;;;:::i;7204:405::-;719:10:5;7297:4:0;7340:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;7340:34:0;;;;;;;;;;7392:35;;;;7384:85;;;;-1:-1:-1;;;7384:85:0;;9137:2:9;7384:85:0;;;9119:21:9;9176:2;9156:18;;;9149:30;9215:34;9195:18;;;9188:62;-1:-1:-1;;;9266:18:9;;;9259:35;9311:19;;7384:85:0;8935:401:9;7384:85:0;7503:67;719:10:5;7526:7:0;7554:15;7535:16;:34;7503:8;:67::i;:::-;-1:-1:-1;7598:4:0;;7204:405;-1:-1:-1;;;7204:405:0:o;4482:172::-;4568:4;4584:42;719:10:5;4608:9:0;4619:6;4584:9;:42::i;4718:343:1:-;1108:6:2;;-1:-1:-1;;;;;1108:6:2;719:10:5;1248:23:2;1240:68;;;;-1:-1:-1;;;1240:68:2;;;;;;;:::i;:::-;4910:15:1::1;:33:::0;;-1:-1:-1;;;;;4910:33:1;;::::1;-1:-1:-1::0;;;;;;4910:33:1;;::::1;;::::0;;;4953:10:::1;:23:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;4986:10:::1;:23:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;5019:16:::1;:35:::0;;;;;::::1;::::0;::::1;;::::0;;4718:343::o;5575:184::-;1108:6:2;;-1:-1:-1;;;;;1108:6:2;719:10:5;1248:23:2;1240:68;;;;-1:-1:-1;;;1240:68:2;;;;;;;:::i;:::-;-1:-1:-1;;;;;5676:28:1;;::::1;;::::0;;;:15:::1;:28;::::0;;;;;;;:35;;;::::1;;-1:-1:-1::0;;5676:35:1;;::::1;;::::0;;5721:13:::1;:26:::0;;;;;:31;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;5575:184::o;882:62::-;923:16;936:3;-1:-1:-1;;;923:16:1;:::i;:::-;:21;;942:2;923:21;:::i;1918:198:2:-;1108:6;;-1:-1:-1;;;;;1108:6:2;719:10:5;1248:23:2;1240:68;;;;-1:-1:-1;;;1240:68:2;;;;;;;:::i;:::-;-1:-1:-1;;;;;2006:22:2;::::1;1998:73;;;::::0;-1:-1:-1;;;1998:73:2;;9543:2:9;1998:73:2::1;::::0;::::1;9525:21:9::0;9582:2;9562:18;;;9555:30;9621:34;9601:18;;;9594:62;-1:-1:-1;;;9672:18:9;;;9665:36;9718:19;;1998:73:2::1;9341:402:9::0;1998:73:2::1;2081:28;2100:8;2081:18;:28::i;12070:370:0:-:0;-1:-1:-1;;;;;12201:19:0;;12193:68;;;;-1:-1:-1;;;12193:68:0;;9950:2:9;12193:68:0;;;9932:21:9;9989:2;9969:18;;;9962:30;10028:34;10008:18;;;10001:62;-1:-1:-1;;;10079:18:9;;;10072:34;10123:19;;12193:68:0;9748:400:9;12193:68:0;-1:-1:-1;;;;;12279:21:0;;12271:68;;;;-1:-1:-1;;;12271:68:0;;10355:2:9;12271:68:0;;;10337:21:9;10394:2;10374:18;;;10367:30;10433:34;10413:18;;;10406:62;-1:-1:-1;;;10484:18:9;;;10477:32;10526:19;;12271:68:0;10153:398:9;12271:68:0;-1:-1:-1;;;;;12350:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;12401:32;;1790:25:9;;;12401:32:0;;1763:18:9;12401:32:0;;;;;;;;12070:370;;;:::o;10600:270::-;-1:-1:-1;;;;;10683:21:0;;10675:65;;;;-1:-1:-1;;;10675:65:0;;10758:2:9;10675:65:0;;;10740:21:9;10797:2;10777:18;;;10770:30;10836:33;10816:18;;;10809:61;10887:18;;10675:65:0;10556:355:9;10675:65:0;10767:6;10751:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;10783:18:0;;:9;:18;;;;;;;;;;:28;;10805:6;;10783:9;:28;;10805:6;;10783:28;:::i;:::-;;;;-1:-1:-1;;10826:37:0;;1790:25:9;;;-1:-1:-1;;;;;10826:37:0;;;10843:1;;10826:37;;1778:2:9;1763:18;10826:37:0;;;;;;;10600:270;;:::o;8097:1318::-;-1:-1:-1;;;;;8232:20:0;;8224:70;;;;-1:-1:-1;;;8224:70:0;;11118:2:9;8224:70:0;;;11100:21:9;11157:2;11137:18;;;11130:30;11196:34;11176:18;;;11169:62;-1:-1:-1;;;11247:18:9;;;11240:35;11292:19;;8224:70:0;10916:401:9;8224:70:0;-1:-1:-1;;;;;8312:23:0;;8304:71;;;;-1:-1:-1;;;8304:71:0;;11524:2:9;8304:71:0;;;11506:21:9;11563:2;11543:18;;;11536:30;11602:34;11582:18;;;11575:62;-1:-1:-1;;;11653:18:9;;;11646:33;11696:19;;8304:71:0;11322:399:9;8304:71:0;-1:-1:-1;;;;;8460:23:0;;;;;;:15;:23;;;;;;;;;:51;;-1:-1:-1;;;;;;8487:24:0;;;;;;:13;:24;;;;;;;;8460:51;8456:953;;;8527:44;8545:6;8553:9;8564:6;8527:17;:44::i;8456:953::-;8602:22;8640:4;8627:10;:6;8636:1;8627:10;:::i;:::-;:17;;;;:::i;:::-;8602:42;;8688:29;8694:6;8702:14;8688:5;:29::i;:::-;8804:15;;8778:58;;8796:6;;-1:-1:-1;;;;;8804:15:0;8821:14;8778:17;:58::i;:::-;8851:13;8881:5;8867:11;:6;8876:2;8867:11;:::i;:::-;:19;;;;:::i;:::-;8969:10;;8851:35;;-1:-1:-1;8943:47:0;;8961:6;;-1:-1:-1;;;;;8969:10:0;8851:35;8943:17;:47::i;:::-;9074:10;;9048:47;;9066:6;;-1:-1:-1;;;;;9074:10:0;9086:8;9048:17;:47::i;:::-;9148:19;9170:12;9179:3;9170:6;:12;:::i;:::-;9222:16;;9148:34;;-1:-1:-1;9196:56:0;;9214:6;;-1:-1:-1;;;;;9222:16:0;9148:34;9196:17;:56::i;:::-;9304:94;9322:6;9330:9;9386:11;9371:12;:8;9382:1;9371:12;:::i;:::-;9350:18;:14;9367:1;9350:18;:::i;:::-;9341:27;;:6;:27;:::i;:::-;:42;;;;:::i;:::-;:56;;;;:::i;:::-;9304:17;:94::i;:::-;8588:821;;;8097:1318;;;:::o;11190:457::-;-1:-1:-1;;;;;11273:21:0;;11265:67;;;;-1:-1:-1;;;11265:67:0;;11928:2:9;11265:67:0;;;11910:21:9;11967:2;11947:18;;;11940:30;12006:34;11986:18;;;11979:62;-1:-1:-1;;;12057:18:9;;;12050:31;12098:19;;11265:67:0;11726:397:9;11265:67:0;-1:-1:-1;;;;;11368:18:0;;11343:22;11368:18;;;;;;;;;;;11404:24;;;;11396:71;;;;-1:-1:-1;;;11396:71:0;;12330:2:9;11396:71:0;;;12312:21:9;12369:2;12349:18;;;12342:30;12408:34;12388:18;;;12381:62;-1:-1:-1;;;12459:18:9;;;12452:32;12501:19;;11396:71:0;12128:398:9;11396:71:0;-1:-1:-1;;;;;11501:18:0;;:9;:18;;;;;;;;;;11522:23;;;11501:44;;11565:12;:22;;11539:6;;11501:9;11565:22;;11539:6;;11565:22;:::i;:::-;;;;-1:-1:-1;;11603:37:0;;1790:25:9;;;11629:1:0;;-1:-1:-1;;;;;11603:37:0;;;;;1778:2:9;1763:18;11603:37:0;1644:177:9;2270:187:2;2362:6;;;-1:-1:-1;;;;;2378:17:2;;;-1:-1:-1;;;;;;2378:17:2;;;;;;;2410:40;;2362:6;;;2378:17;2362:6;;2410:40;;2343:16;;2410:40;2333:124;2270:187;:::o;3969:528:1:-;4093:4;4109:14;4259:123;4281:20;:18;:20::i;:::-;4333:47;;;2255:50;4333:47;;;;12733:25:9;;;;-1:-1:-1;;;;;12794:32:9;;12774:18;;;12767:60;12843:18;;;;12836:34;;;4333:47:1;;;;;;;;;;12706:18:9;;;4333:47:1;;4323:58;;;;;;-1:-1:-1;;;9254:57:7;;;14633:27:9;14676:11;;;14669:27;;;;14712:12;;;;14705:28;;;;9254:57:7;;;;;;;;;;14749:12:9;;;;9254:57:7;;;9244:68;;;;;;9125:194;4259:123:1;4400:8;4225:184;;;;;;;;13038:19:9;;;13095:2;13091:15;-1:-1:-1;;13087:53:9;13082:2;13073:12;;13066:75;13166:2;13157:12;;12881:294;4225:184:1;;;;-1:-1:-1;;4225:184:1;;;;;;;;;;4215:195;;4225:184;4215:195;;;;13422:66:9;4136:284:1;;;13410:79:9;;;;13505:12;;;13498:28;13542:12;;4136:284:1;;;-1:-1:-1;;4136:284:1;;;;;;;;;4126:295;;4136:284;4126:295;;;;4447:26;;;;;;;;;13792:25:9;;;13865:4;13853:17;;13833:18;;;13826:45;;;;13887:18;;;13880:34;;;13930:18;;;13923:34;;;4126:295:1;-1:-1:-1;;;;;;4477:13:1;4447:43;;:26;;13764:19:9;;4447:26:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4447:43:1;;4440:50;;;3969:528;;;;;;;;:::o;9889:435:0:-;-1:-1:-1;;;;;10039:17:0;;10015:21;10039:17;;;;;;;;;;;10074:23;;;;10066:74;;;;-1:-1:-1;;;10066:74:0;;14170:2:9;10066:74:0;;;14152:21:9;14209:2;14189:18;;;14182:30;14248:34;14228:18;;;14221:62;-1:-1:-1;;;14299:18:9;;;14292:36;14345:19;;10066:74:0;13968:402:9;10066:74:0;-1:-1:-1;;;;;10175:17:0;;;:9;:17;;;;;;;;;;;10195:22;;;10175:42;;10237:20;;;;;;;;:30;;10211:6;;10175:9;10237:30;;10211:6;;10237:30;:::i;:::-;;;;;;;;10299:9;-1:-1:-1;;;;;10282:35:0;10291:6;-1:-1:-1;;;;;10282:35:0;;10310:6;10282:35;;;;1790:25:9;;1778:2;1763:18;;1644:177;10282:35:0;;;;;;;;10005:319;9889:435;;;:::o;3143:308:8:-;3196:7;3227:4;-1:-1:-1;;;;;3236:12:8;3219:29;;:66;;;;;3269:16;3252:13;:33;3219:66;3215:230;;;-1:-1:-1;3308:24:8;;3143:308::o;3215:230::-;-1:-1:-1;3633:73:8;;;3392:10;3633:73;;;;15031:25:9;;;;3404:12:8;15072:18:9;;;15065:34;3418:15:8;15115:18:9;;;15108:34;3677:13:8;15158:18:9;;;15151:34;3700:4:8;15201:19:9;;;;15194:61;;;;3633:73:8;;;;;;;;;;15003:19:9;;;;3633:73:8;;;3623:84;;;;;;3143:308::o;206:597:9:-;318:4;347:2;376;365:9;358:21;408:6;402:13;451:6;446:2;435:9;431:18;424:34;476:1;486:140;500:6;497:1;494:13;486:140;;;595:14;;;591:23;;585:30;561:17;;;580:2;557:26;550:66;515:10;;486:140;;;644:6;641:1;638:13;635:91;;;714:1;709:2;700:6;689:9;685:22;681:31;674:42;635:91;-1:-1:-1;787:2:9;766:15;-1:-1:-1;;762:29:9;747:45;;;;794:2;743:54;;206:597;-1:-1:-1;;;206:597:9:o;1016:173::-;1084:20;;-1:-1:-1;;;;;1133:31:9;;1123:42;;1113:70;;1179:1;1176;1169:12;1113:70;1016:173;;;:::o;1194:254::-;1262:6;1270;1323:2;1311:9;1302:7;1298:23;1294:32;1291:52;;;1339:1;1336;1329:12;1291:52;1362:29;1381:9;1362:29;:::i;:::-;1352:39;1438:2;1423:18;;;;1410:32;;-1:-1:-1;;;1194:254:9:o;1453:186::-;1512:6;1565:2;1553:9;1544:7;1540:23;1536:32;1533:52;;;1581:1;1578;1571:12;1533:52;1604:29;1623:9;1604:29;:::i;:::-;1594:39;1453:186;-1:-1:-1;;;1453:186:9:o;1826:328::-;1903:6;1911;1919;1972:2;1960:9;1951:7;1947:23;1943:32;1940:52;;;1988:1;1985;1978:12;1940:52;2011:29;2030:9;2011:29;:::i;:::-;2001:39;;2059:38;2093:2;2082:9;2078:18;2059:38;:::i;:::-;2049:48;;2144:2;2133:9;2129:18;2116:32;2106:42;;1826:328;;;;;:::o;2348:180::-;2407:6;2460:2;2448:9;2439:7;2435:23;2431:32;2428:52;;;2476:1;2473;2466:12;2428:52;-1:-1:-1;2499:23:9;;2348:180;-1:-1:-1;2348:180:9:o;2533:160::-;2598:20;;2654:13;;2647:21;2637:32;;2627:60;;2683:1;2680;2673:12;2698:180;2754:6;2807:2;2795:9;2786:7;2782:23;2778:32;2775:52;;;2823:1;2820;2813:12;2775:52;2846:26;2862:9;2846:26;:::i;2883:391::-;2969:6;2977;2985;2993;3046:3;3034:9;3025:7;3021:23;3017:33;3014:53;;;3063:1;3060;3053:12;3014:53;3099:9;3086:23;3076:33;;3156:2;3145:9;3141:18;3128:32;3118:42;;3207:2;3196:9;3192:18;3179:32;3169:42;;3230:38;3264:2;3253:9;3249:18;3230:38;:::i;:::-;3220:48;;2883:391;;;;;;;:::o;3461:260::-;3529:6;3537;3590:2;3578:9;3569:7;3565:23;3561:32;3558:52;;;3606:1;3603;3596:12;3558:52;3629:29;3648:9;3629:29;:::i;:::-;3619:39;;3677:38;3711:2;3700:9;3696:18;3677:38;:::i;:::-;3667:48;;3461:260;;;;;:::o;3726:409::-;3812:6;3820;3828;3836;3889:3;3877:9;3868:7;3864:23;3860:33;3857:53;;;3906:1;3903;3896:12;3857:53;3929:29;3948:9;3929:29;:::i;:::-;3919:39;;3977:38;4011:2;4000:9;3996:18;3977:38;:::i;:::-;3967:48;;4034:38;4068:2;4057:9;4053:18;4034:38;:::i;:::-;4024:48;;4091:38;4125:2;4114:9;4110:18;4091:38;:::i;4140:322::-;4211:6;4219;4227;4280:2;4268:9;4259:7;4255:23;4251:32;4248:52;;;4296:1;4293;4286:12;4248:52;4319:29;4338:9;4319:29;:::i;:::-;4309:39;;4367:35;4398:2;4387:9;4383:18;4367:35;:::i;:::-;4357:45;;4421:35;4452:2;4441:9;4437:18;4421:35;:::i;:::-;4411:45;;4140:322;;;;;:::o;4467:380::-;4546:1;4542:12;;;;4589;;;4610:61;;4664:4;4656:6;4652:17;4642:27;;4610:61;4717:2;4709:6;4706:14;4686:18;4683:38;4680:161;;;4763:10;4758:3;4754:20;4751:1;4744:31;4798:4;4795:1;4788:15;4826:4;4823:1;4816:15;4680:161;;4467:380;;;:::o;4852:356::-;5054:2;5036:21;;;5073:18;;;5066:30;5132:34;5127:2;5112:18;;5105:62;5199:2;5184:18;;4852:356::o;5921:127::-;5982:10;5977:3;5973:20;5970:1;5963:31;6013:4;6010:1;6003:15;6037:4;6034:1;6027:15;6053:217;6093:1;6119;6109:132;;6163:10;6158:3;6154:20;6151:1;6144:31;6198:4;6195:1;6188:15;6226:4;6223:1;6216:15;6109:132;-1:-1:-1;6255:9:9;;6053:217::o;6275:168::-;6315:7;6381:1;6377;6373:6;6369:14;6366:1;6363:21;6358:1;6351:9;6344:17;6340:45;6337:71;;;6388:18;;:::i;:::-;-1:-1:-1;6428:9:9;;6275:168::o;6448:128::-;6488:3;6519:1;6515:6;6512:1;6509:13;6506:39;;;6525:18;;:::i;:::-;-1:-1:-1;6561:9:9;;6448:128::o;6581:125::-;6621:4;6649:1;6646;6643:8;6640:34;;;6654:18;;:::i;:::-;-1:-1:-1;6691:9:9;;6581:125::o
Swarm Source
ipfs://02417521c9630bd8441104de1113e85f0f24097d9b15ddd949b1c45d50a8ab34
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.