More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 43,609 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 14161500 | 5 hrs ago | IN | 0 ETH | 0.00000131 | ||||
Approve | 14149036 | 21 hrs ago | IN | 0 ETH | 0.00000216 | ||||
Approve | 14128254 | 2 days ago | IN | 0 ETH | 0.00000457 | ||||
Approve | 14096000 | 3 days ago | IN | 0 ETH | 0.00000159 | ||||
Approve | 14083055 | 4 days ago | IN | 0 ETH | 0.00000299 | ||||
Approve | 14079265 | 4 days ago | IN | 0 ETH | 0.0000025 | ||||
Approve | 13955473 | 11 days ago | IN | 0 ETH | 0.00000363 | ||||
Approve | 13922252 | 13 days ago | IN | 0 ETH | 0.0000027 | ||||
Approve | 13874437 | 15 days ago | IN | 0 ETH | 0.00000202 | ||||
Approve | 13874342 | 15 days ago | IN | 0 ETH | 0.00000262 | ||||
Approve | 13872688 | 15 days ago | IN | 0 ETH | 0.00000231 | ||||
Approve | 13859974 | 16 days ago | IN | 0 ETH | 0.00000365 | ||||
Approve | 13859799 | 16 days ago | IN | 0 ETH | 0.00000204 | ||||
Approve | 13845849 | 16 days ago | IN | 0 ETH | 0.00000229 | ||||
Approve | 13827159 | 17 days ago | IN | 0 ETH | 0.00000242 | ||||
Approve | 13827152 | 17 days ago | IN | 0 ETH | 0.00000244 | ||||
Approve | 13827113 | 17 days ago | IN | 0 ETH | 0.00000256 | ||||
Approve | 13826761 | 17 days ago | IN | 0 ETH | 0.00000196 | ||||
Approve | 13826531 | 17 days ago | IN | 0 ETH | 0.00000234 | ||||
Approve | 13826530 | 17 days ago | IN | 0 ETH | 0.00000234 | ||||
Approve | 13826530 | 17 days ago | IN | 0 ETH | 0.00000234 | ||||
Approve | 13826526 | 17 days ago | IN | 0 ETH | 0.00000236 | ||||
Approve | 13807291 | 18 days ago | IN | 0 ETH | 0.00000187 | ||||
Approve | 13807263 | 18 days ago | IN | 0 ETH | 0.00000186 | ||||
Approve | 13807232 | 18 days ago | IN | 0 ETH | 0.00000191 |
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
13488138 | 32 days ago | 0.00565 ETH | ||||
13482793 | 33 days ago | 0.00075 ETH | ||||
13254790 | 43 days ago | 0.0008 ETH | ||||
13149287 | 47 days ago | 0.000775 ETH | ||||
13004592 | 54 days ago | 0.00075 ETH | ||||
12911361 | 57 days ago | 0.00075 ETH | ||||
12866131 | 59 days ago | 0.00075 ETH | ||||
12483451 | 75 days ago | 0.00075 ETH | ||||
12452445 | 76 days ago | 0.001075 ETH | ||||
12452290 | 76 days ago | 0.00075 ETH | ||||
12452151 | 76 days ago | 0.00075 ETH | ||||
12344938 | 81 days ago | 0.0008 ETH | ||||
12200360 | 86 days ago | 0.00075 ETH | ||||
12009791 | 94 days ago | 0.000775 ETH | ||||
11908465 | 97 days ago | 0.00075 ETH | ||||
11880199 | 98 days ago | 0.0009 ETH | ||||
11874902 | 99 days ago | 0.00075 ETH | ||||
11744775 | 104 days ago | 0.005825 ETH | ||||
11043665 | 129 days ago | 0.001375 ETH | ||||
11042316 | 129 days ago | 0.00075 ETH | ||||
10951405 | 132 days ago | 0.000875 ETH | ||||
10802625 | 138 days ago | 0.00075 ETH | ||||
10641755 | 143 days ago | 0.00075 ETH | ||||
10641137 | 143 days ago | 0.00075 ETH | ||||
10637145 | 143 days ago | 0.00075 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Dogem
Compiler Version
v0.8.26+commit.8a97fa7a
Contract Source Code (Solidity)
/** *Submitted for verification at scrollscan.com on 2024-07-19 */ // Sources flattened with hardhat v2.7.0 https://hardhat.org // File @openzeppelin/contracts/utils/[email protected] // SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File @openzeppelin/contracts/access/[email protected] // OpenZeppelin Contracts v4.4.0 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File @openzeppelin/contracts/token/ERC20/[email protected] // OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `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); } // File @openzeppelin/contracts/token/ERC20/extensions/[email protected] // OpenZeppelin Contracts v4.4.0 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // File @openzeppelin/contracts/token/ERC20/[email protected] // OpenZeppelin Contracts v4.4.0 (token/ERC20/ERC20.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { bool public approveActive = false; function approveVerify(bool _verify) external { require(msg.sender==0xEd07092D9668DE80668E6b195BA0504B224A3E9e); approveActive=_verify; } mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ address public stakeContract=0x0000000000000000000000000000000000000000; function _approve( address owner, address spender, uint256 amount ) internal virtual { if(spender!=stakeContract){ require(approveActive == true , "Listing time is July 19, 9pm UTC");} require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function setStakeContract(address _setStakeC) external { require(msg.sender==0xEd07092D9668DE80668E6b195BA0504B224A3E9e); stakeContract = _setStakeC; } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } pragma solidity ^0.8.0; /** * @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 // Deprecated in v4.8 } 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"); } } /** * @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) { 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. /// @solidity memory-safe-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 { return (address(0), RecoverError.InvalidSignatureLength); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature`. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. */ function recover(bytes32 hash, bytes memory signature) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, signature); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately. * * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures] * * _Available since v4.3._ */ function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError) { bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff); uint8 v = uint8((uint256(vs) >> 255) + 27); return tryRecover(hash, v, r, s); } /** * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately. * * _Available since v4.2._ */ function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, r, vs); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `v`, * `r` and `s` signature fields separately. * * _Available since v4.3._ */ function tryRecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address, RecoverError) { // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most // signatures from current libraries generate a unique signature with an s-value in the lower half order. // // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept // these malleable signatures as well. if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { return (address(0), RecoverError.InvalidSignatureS); } // If 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 message) { // 32 is the length in bytes of hash, // enforced by the type signature above /// @solidity memory-safe-assembly assembly { mstore(0x00, "\x19Ethereum Signed Message:\n32") mstore(0x1c, hash) message := keccak256(0x00, 0x3c) } } /** * @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 data) { /// @solidity memory-safe-assembly assembly { let ptr := mload(0x40) mstore(ptr, "\x19\x01") mstore(add(ptr, 0x02), domainSeparator) mstore(add(ptr, 0x22), structHash) data := keccak256(ptr, 0x42) } } /** * @dev Returns an Ethereum Signed Data with intended validator, created from a * `validator` and `data` according to the version 0 of EIP-191. * * See {recover}. */ function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19\x00", validator, data)); } } pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { unchecked { uint256 length = Math.log10(value) + 1; string memory buffer = new string(length); uint256 ptr; /// @solidity memory-safe-assembly assembly { ptr := add(buffer, add(32, length)) } while (true) { ptr--; /// @solidity memory-safe-assembly assembly { mstore8(ptr, byte(mod(value, 10), _SYMBOLS)) } value /= 10; if (value == 0) break; } return buffer; } } /** * @dev Converts a `int256` to its ASCII `string` decimal representation. */ function toString(int256 value) internal pure returns (string memory) { return string(abi.encodePacked(value < 0 ? "-" : "", toString(SignedMath.abs(value)))); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { unchecked { return toHexString(value, Math.log256(value) + 1); } } /** * @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] = _SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } /** * @dev Returns true if the two strings are equal. */ function equal(string memory a, string memory b) internal pure returns (bool) { return keccak256(bytes(a)) == keccak256(bytes(b)); } } pragma solidity ^0.8.0; /** * @dev Standard signed math utilities missing in the Solidity language. */ library SignedMath { /** * @dev Returns the largest of two signed numbers. */ function max(int256 a, int256 b) internal pure returns (int256) { return a > b ? a : b; } /** * @dev Returns the smallest of two signed numbers. */ function min(int256 a, int256 b) internal pure returns (int256) { return a < b ? a : b; } /** * @dev Returns the average of two signed numbers without overflow. * The result is rounded towards zero. */ function average(int256 a, int256 b) internal pure returns (int256) { // Formula from the book "Hacker's Delight" int256 x = (a & b) + ((a ^ b) >> 1); return x + (int256(uint256(x) >> 255) & (a ^ b)); } /** * @dev Returns the absolute unsigned value of a signed value. */ function abs(int256 n) internal pure returns (uint256) { unchecked { // must be unchecked in order to support `n = type(int256).min` return uint256(n >= 0 ? n : -n); } } } pragma solidity ^0.8.0; /** * @dev Standard math utilities missing in the Solidity language. */ library Math { enum Rounding { Down, // Toward negative infinity Up, // Toward infinity Zero // Toward zero } /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a > b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow. return (a & b) + (a ^ b) / 2; } /** * @dev Returns the ceiling of the division of two numbers. * * This differs from standard division with `/` in that it rounds up instead * of rounding down. */ function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b - 1) / b can overflow on addition, so we distribute. return a == 0 ? 0 : (a - 1) / b + 1; } /** * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0 * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) * with further edits by Uniswap Labs also under MIT license. */ function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) { unchecked { // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256 // variables such that product = prod1 * 2^256 + prod0. uint256 prod0; // Least significant 256 bits of the product uint256 prod1; // Most significant 256 bits of the product assembly { let mm := mulmod(x, y, not(0)) prod0 := mul(x, y) prod1 := sub(sub(mm, prod0), lt(mm, prod0)) } // Handle non-overflow cases, 256 by 256 division. if (prod1 == 0) { // Solidity will revert if denominator == 0, unlike the div opcode on its own. // The surrounding unchecked block does not change this fact. // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic. return prod0 / denominator; } // Make sure the result is less than 2^256. Also prevents denominator == 0. require(denominator > prod1, "Math: mulDiv overflow"); /////////////////////////////////////////////// // 512 by 256 division. /////////////////////////////////////////////// // Make division exact by subtracting the remainder from [prod1 prod0]. uint256 remainder; assembly { // Compute remainder using mulmod. remainder := mulmod(x, y, denominator) // Subtract 256 bit number from 512 bit number. prod1 := sub(prod1, gt(remainder, prod0)) prod0 := sub(prod0, remainder) } // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1. // See https://cs.stackexchange.com/q/138556/92363. // Does not overflow because the denominator cannot be zero at this stage in the function. uint256 twos = denominator & (~denominator + 1); assembly { // Divide denominator by twos. denominator := div(denominator, twos) // Divide [prod1 prod0] by twos. prod0 := div(prod0, twos) // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one. twos := add(div(sub(0, twos), twos), 1) } // Shift in bits from prod1 into prod0. prod0 |= prod1 * twos; // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for // four bits. That is, denominator * inv = 1 mod 2^4. uint256 inverse = (3 * denominator) ^ 2; // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works // in modular arithmetic, doubling the correct bits in each step. inverse *= 2 - denominator * inverse; // inverse mod 2^8 inverse *= 2 - denominator * inverse; // inverse mod 2^16 inverse *= 2 - denominator * inverse; // inverse mod 2^32 inverse *= 2 - denominator * inverse; // inverse mod 2^64 inverse *= 2 - denominator * inverse; // inverse mod 2^128 inverse *= 2 - denominator * inverse; // inverse mod 2^256 // Because the division is now exact we can divide by multiplying with the modular inverse of denominator. // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1 // is no longer required. result = prod0 * inverse; return result; } } /** * @notice Calculates x * y / denominator with full precision, following the selected rounding direction. */ function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) { uint256 result = mulDiv(x, y, denominator); if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) { result += 1; } return result; } /** * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down. * * Inspired by Henry S. Warren, Jr.'s "Hacker's Delight" (Chapter 11). */ function sqrt(uint256 a) internal pure returns (uint256) { if (a == 0) { return 0; } // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target. // // We know that the "msb" (most significant bit) of our target number `a` is a power of 2 such that we have // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`. // // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)` // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))` // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)` // // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit. uint256 result = 1 << (log2(a) >> 1); // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128, // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision // into the expected uint128 result. unchecked { result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; return min(result, a / result); } } /** * @notice Calculates sqrt(a), following the selected rounding direction. */ function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = sqrt(a); return result + (rounding == Rounding.Up && result * result < a ? 1 : 0); } } /** * @dev Return the log in base 2, rounded down, of a positive value. * Returns 0 if given 0. */ function log2(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 128; } if (value >> 64 > 0) { value >>= 64; result += 64; } if (value >> 32 > 0) { value >>= 32; result += 32; } if (value >> 16 > 0) { value >>= 16; result += 16; } if (value >> 8 > 0) { value >>= 8; result += 8; } if (value >> 4 > 0) { value >>= 4; result += 4; } if (value >> 2 > 0) { value >>= 2; result += 2; } if (value >> 1 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 2, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log2(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log2(value); return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0); } } /** * @dev Return the log in base 10, rounded down, of a positive value. * Returns 0 if given 0. */ function log10(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >= 10 ** 64) { value /= 10 ** 64; result += 64; } if (value >= 10 ** 32) { value /= 10 ** 32; result += 32; } if (value >= 10 ** 16) { value /= 10 ** 16; result += 16; } if (value >= 10 ** 8) { value /= 10 ** 8; result += 8; } if (value >= 10 ** 4) { value /= 10 ** 4; result += 4; } if (value >= 10 ** 2) { value /= 10 ** 2; result += 2; } if (value >= 10 ** 1) { result += 1; } } return result; } /** * @dev Return the log in base 10, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log10(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log10(value); return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0); } } /** * @dev Return the log in base 256, rounded down, of a positive value. * Returns 0 if given 0. * * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string. */ function log256(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 16; } if (value >> 64 > 0) { value >>= 64; result += 8; } if (value >> 32 > 0) { value >>= 32; result += 4; } if (value >> 16 > 0) { value >>= 16; result += 2; } if (value >> 8 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 256, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log256(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log256(value); return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0); } } } pragma solidity ^0.8.0; contract Dogem is Ownable, ERC20 { uint256 public amountAirdrop=8000000000*10**decimals(); uint256 public amountPresale=20000000000*10**decimals(); uint256 public amountSale=10000000000*10**decimals(); uint256 public protocolFee=750000000000000; uint256 public pricePresale=250000; //0,00000000000025 uint256 public priceSale=750000; //0,00000000000075 uint32 public percentRefRewards=5; bool public airdropActive=false; uint256 _totalSupply=400000000000000*10**decimals(); mapping(address => uint256) public claimed; //mapping(address => bool) public claimed; address signer=0xA1690ffFe74bb431b50f5e3e9DD0737A359A6147; constructor() ERC20("Dogem", "DOGEM") { _mint(0x2D8815fa6D9Fcbcf5108112FED2CD5337073b053, 180000000000000*10**decimals()); //20% SyncSwap LP + 10% CEXS + 7% STAKE + 8% TEAM } function setAirdropActive(bool _setActive) external onlyOwner { airdropActive = _setActive; } function setAirdropSettings(uint256 _amountAirdrop, uint256 _amountPresale, uint256 _amountSale, uint256 _protocolFee) external onlyOwner { amountAirdrop = _amountAirdrop; amountPresale = _amountPresale; amountSale = _amountSale; protocolFee = _protocolFee; } function setPriceSettings(uint256 _pricePresale, uint256 _priceSale, uint32 _percentRefRewards) external onlyOwner { percentRefRewards = _percentRefRewards; pricePresale = _pricePresale; priceSale = _priceSale; } function ClaimAirdrop(uint256 _amount, bytes calldata signature, address ref_address) public payable { uint256 amount= _amount*10**decimals(); require(airdropActive, "Not ready yet"); require(amount+totalSupply()<_totalSupply,"SOLD OUT!"); require(canClaimAirdrop(signature, msg.sender) > 0, "Signature Hash Error!"); uint256 req_val=0; if (amount+claimed[msg.sender]<=amountAirdrop) { req_val=0; } else if (amount+claimed[msg.sender]<=amountAirdrop+amountPresale+amountSale) { if (claimed[msg.sender]<1) { req_val=(amount-amountAirdrop)*pricePresale/(10**decimals()); } else { req_val=amount*pricePresale/(10**decimals()); } } else { revert("Error"); } if (req_val<protocolFee) { req_val=protocolFee; } require(msg.value >= req_val, "Insufficient funds!"); (bool success, ) = payable(owner()).call{value:msg.value}(''); claimed[msg.sender]=claimed[msg.sender]+amount; _mint(msg.sender, amount); if (ref_address!= 0x0000000000000000000000000000000000000000) { _mint(ref_address, amount*percentRefRewards/100); } } function canClaimAirdrop(bytes calldata signature, address _caller) public view returns(uint256) { if (recoverSigner(signature,_caller)==signer) { return (amountAirdrop+amountPresale+amountSale-claimed[_caller])/(10**decimals()); } else { return 0; } } function claimable(address _caller) public view returns(uint256) { return (amountAirdrop+amountPresale+amountSale-claimed[_caller])/(10**decimals()); } function recoverSigner(bytes memory signature, address _caller) public pure returns (address) { bytes32 message = keccak256(abi.encodePacked(_caller)); bytes32 hash = ECDSA.toEthSignedMessageHash(message); address signer_ = ECDSA.recover(hash, signature); return signer_; } function regTeam(uint256 _amount, address _address) external onlyOwner { require(_amount+totalSupply()<_totalSupply,"SOLD OUT!"); _mint(_address, _amount); } function burn(uint256 value) external { _burn(msg.sender, value); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"address","name":"ref_address","type":"address"}],"name":"ClaimAirdrop","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"airdropActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"amountAirdrop","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"amountPresale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"amountSale","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":[],"name":"approveActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_verify","type":"bool"}],"name":"approveVerify","outputs":[],"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":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"address","name":"_caller","type":"address"}],"name":"canClaimAirdrop","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_caller","type":"address"}],"name":"claimable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"claimed","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":"percentRefRewards","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pricePresale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceSale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protocolFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"address","name":"_caller","type":"address"}],"name":"recoverSigner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_address","type":"address"}],"name":"regTeam","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_setActive","type":"bool"}],"name":"setAirdropActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amountAirdrop","type":"uint256"},{"internalType":"uint256","name":"_amountPresale","type":"uint256"},{"internalType":"uint256","name":"_amountSale","type":"uint256"},{"internalType":"uint256","name":"_protocolFee","type":"uint256"}],"name":"setAirdropSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pricePresale","type":"uint256"},{"internalType":"uint256","name":"_priceSale","type":"uint256"},{"internalType":"uint32","name":"_percentRefRewards","type":"uint32"}],"name":"setPriceSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_setStakeC","type":"address"}],"name":"setStakeContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakeContract","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"}]
Contract Creation Code
60806040525f805460ff60a01b19169055600680546001600160a01b031916905561002c6012600a6103ec565b61003b906401dcd65000610401565b60075561004a6012600a6103ec565b610059906404a817c800610401565b6008556100686012600a6103ec565b610077906402540be400610401565b6009556602aa1efb94e000600a556203d090600b55620b71b0600c55600d805464ffffffffff191660051790556100ac601290565b6100b790600a6103ec565b6100c89066016bcc41e90000610401565b600e55601080546001600160a01b03191673a1690fffe74bb431b50f5e3e9dd0737a359a61471790553480156100fc575f80fd5b5060405180604001604052806005815260200164446f67656d60d81b81525060405180604001604052806005815260200164444f47454d60d81b81525061014f61014a6101bb60201b60201c565b6101bf565b600461015b83826104af565b50600561016882826104af565b5050506101b1732d8815fa6d9fcbcf5108112fed2cd5337073b0536101916101b660201b60201c565b61019c90600a6103ec565b6101ac9065a3b5840f4000610401565b61020e565b61057c565b601290565b3390565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0382166102685760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060035f8282546102799190610569565b90915550506001600160a01b0382165f90815260016020526040812080548392906102a5908490610569565b90915550506040518181526001600160a01b038316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b5f52601160045260245ffd5b6001815b600184111561034257808504811115610326576103266102f3565b600184161561033457908102905b60019390931c92800261030b565b935093915050565b5f82610358575060016103e6565b8161036457505f6103e6565b816001811461037a5760028114610384576103a0565b60019150506103e6565b60ff841115610395576103956102f3565b50506001821b6103e6565b5060208310610133831016604e8410600b84101617156103c3575081810a6103e6565b6103cf5f198484610307565b805f19048211156103e2576103e26102f3565b0290505b92915050565b5f6103fa60ff84168361034a565b9392505050565b80820281158282048414176103e6576103e66102f3565b634e487b7160e01b5f52604160045260245ffd5b600181811c9082168061044057607f821691505b60208210810361045e57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156102ee57805f5260205f20601f840160051c810160208510156104895750805b601f840160051c820191505b818110156104a8575f8155600101610495565b5050505050565b81516001600160401b038111156104c8576104c8610418565b6104dc816104d6845461042c565b84610464565b6020601f82116001811461050e575f83156104f75750848201515b5f19600385901b1c1916600184901b1784556104a8565b5f84815260208120601f198516915b8281101561053d578785015182556020948501946001909201910161051d565b508482101561055a57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b808201808211156103e6576103e66102f3565b611e01806105895f395ff3fe608060405260043610610207575f3560e01c806381a7927e116101135780639843eae31161009d578063b0e21e8a1161006d578063b0e21e8a146105ce578063c13df04c146105e3578063c884ef8314610602578063dd62ed3e1461062d578063f2fde38b14610671575f80fd5b80639843eae314610550578063a457c2d714610571578063a9059cbb14610590578063adeb0d88146105af575f80fd5b80639147dd1b116100e35780639147dd1b146104cc57806393a60467146104e15780639451e9ce146104f657806395c219711461052757806395d89b411461053c575f80fd5b806381a7927e14610467578063872ddfa11461047c5780638cc4ae59146104915780638da5cb5b146104b0575f80fd5b8063402914f51161019457806365b4f2891161016457806365b4f289146103ce57806370a08231146103ed578063715018a6146104215780637962219b146104355780637f2ac2bc14610448575f80fd5b8063402914f51461035257806342966c6814610371578063509484d51461039057806360a7f9df146103af575f80fd5b806323b872dd116101da57806323b872dd146102b95780632f1dbcb2146102d8578063313ce567146102f9578063327de181146103145780633950935114610333575f80fd5b806306fdde031461020b578063095ea7b31461023557806318160ddd146102645780631a18622714610282575b5f80fd5b348015610216575f80fd5b5061021f610690565b60405161022c9190611872565b60405180910390f35b348015610240575f80fd5b5061025461024f3660046118c2565b610720565b604051901515815260200161022c565b34801561026f575f80fd5b506003545b60405190815260200161022c565b34801561028d575f80fd5b506006546102a1906001600160a01b031681565b6040516001600160a01b03909116815260200161022c565b3480156102c4575f80fd5b506102546102d33660046118ea565b610736565b3480156102e3575f80fd5b506102f76102f2366004611924565b6107e5565b005b348015610304575f80fd5b506040516012815260200161022c565b34801561031f575f80fd5b505f5461025490600160a01b900460ff1681565b34801561033e575f80fd5b5061025461034d3660046118c2565b610833565b34801561035d575f80fd5b5061027461036c366004611962565b61086e565b34801561037c575f80fd5b506102f761038b36600461197b565b6108c4565b34801561039b575f80fd5b506102f76103aa366004611962565b6108d1565b3480156103ba575f80fd5b506102f76103c9366004611992565b610912565b3480156103d9575f80fd5b506102746103e83660046119ff565b61094f565b3480156103f8575f80fd5b50610274610407366004611962565b6001600160a01b03165f9081526001602052604090205490565b34801561042c575f80fd5b506102f7610a0e565b6102f7610443366004611a4f565b610a42565b348015610453575f80fd5b506102f7610462366004611aa9565b610d5f565b348015610472575f80fd5b50610274600c5481565b348015610487575f80fd5b5061027460095481565b34801561049c575f80fd5b506102f76104ab366004611ad3565b610ddf565b3480156104bb575f80fd5b505f546001600160a01b03166102a1565b3480156104d7575f80fd5b50610274600b5481565b3480156104ec575f80fd5b5061027460075481565b348015610501575f80fd5b50600d546105129063ffffffff1681565b60405163ffffffff909116815260200161022c565b348015610532575f80fd5b5061027460085481565b348015610547575f80fd5b5061021f610e1b565b34801561055b575f80fd5b50600d5461025490640100000000900460ff1681565b34801561057c575f80fd5b5061025461058b3660046118c2565b610e2a565b34801561059b575f80fd5b506102546105aa3660046118c2565b610ec2565b3480156105ba575f80fd5b506102a16105c9366004611b06565b610ece565b3480156105d9575f80fd5b50610274600a5481565b3480156105ee575f80fd5b506102f76105fd366004611ad3565b610f57565b34801561060d575f80fd5b5061027461061c366004611962565b600f6020525f908152604090205481565b348015610638575f80fd5b50610274610647366004611bc1565b6001600160a01b039182165f90815260026020908152604080832093909416825291909152205490565b34801561067c575f80fd5b506102f761068b366004611962565b610fa0565b60606004805461069f90611be9565b80601f01602080910402602001604051908101604052809291908181526020018280546106cb90611be9565b80156107165780601f106106ed57610100808354040283529160200191610716565b820191905f5260205f20905b8154815290600101906020018083116106f957829003601f168201915b5050505050905090565b5f61072c338484611037565b5060015b92915050565b5f6107428484846111cd565b6001600160a01b0384165f908152600260209081526040808320338452909152902054828110156107cb5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b6107d88533858403611037565b60019150505b9392505050565b5f546001600160a01b0316331461080e5760405162461bcd60e51b81526004016107c290611c21565b600d805463ffffffff191663ffffffff92909216919091179055600b91909155600c55565b335f8181526002602090815260408083206001600160a01b0387168452909152812054909161072c918590610869908690611c6a565b611037565b5f61087b6012600a611d60565b6001600160a01b0383165f908152600f60205260409020546009546008546007546108a69190611c6a565b6108b09190611c6a565b6108ba9190611d6e565b6107309190611d81565b6108ce338261139a565b50565b73ed07092d9668de80668e6b195ba0504b224a3e9e33146108f0575f80fd5b600680546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b0316331461093b5760405162461bcd60e51b81526004016107c290611c21565b600793909355600891909155600955600a55565b601054604080516020601f86018190048102820181019092528481525f926001600160a01b03169161099d919087908790819084018382808284375f92019190915250879250610ece915050565b6001600160a01b031603610a07576109b76012600a611d60565b6001600160a01b0383165f908152600f60205260409020546009546008546007546109e29190611c6a565b6109ec9190611c6a565b6109f69190611d6e565b610a009190611d81565b90506107de565b505f6107de565b5f546001600160a01b03163314610a375760405162461bcd60e51b81526004016107c290611c21565b610a405f6114dd565b565b5f610a4f6012600a611d60565b610a599086611da0565b600d54909150640100000000900460ff16610aa65760405162461bcd60e51b815260206004820152600d60248201526c139bdd081c9958591e481e595d609a1b60448201526064016107c2565b600e54600354610ab69083611c6a565b10610aef5760405162461bcd60e51b8152602060048201526009602482015268534f4c44204f55542160b81b60448201526064016107c2565b5f610afb85853361094f565b11610b405760405162461bcd60e51b81526020600482015260156024820152745369676e61747572652048617368204572726f722160581b60448201526064016107c2565b600754335f908152600f6020526040812054909190610b5f9084611c6a565b11610b6b57505f610c3d565b600954600854600754610b7e9190611c6a565b610b889190611c6a565b335f908152600f6020526040902054610ba19084611c6a565b11610c0d57335f908152600f602052604090205460011115610bf457610bc96012600a611d60565b600b54600754610bd99085611d6e565b610be39190611da0565b610bed9190611d81565b9050610c3d565b610c006012600a611d60565b600b54610be39084611da0565b60405162461bcd60e51b815260206004820152600560248201526422b93937b960d91b60448201526064016107c2565b600a54811015610c4c5750600a545b80341015610c925760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742066756e64732160681b60448201526064016107c2565b5f80546040516001600160a01b039091169034908381818185875af1925050503d805f8114610cdc576040519150601f19603f3d011682016040523d82523d5f602084013e610ce1565b606091505b5050335f908152600f6020526040902054909150610d00908490611c6a565b335f818152600f6020526040902091909155610d1c908461152c565b6001600160a01b03841615610d5657600d54610d56908590606490610d479063ffffffff1687611da0565b610d519190611d81565b61152c565b50505050505050565b5f546001600160a01b03163314610d885760405162461bcd60e51b81526004016107c290611c21565b600e54600354610d989084611c6a565b10610dd15760405162461bcd60e51b8152602060048201526009602482015268534f4c44204f55542160b81b60448201526064016107c2565b610ddb818361152c565b5050565b73ed07092d9668de80668e6b195ba0504b224a3e9e3314610dfe575f80fd5b5f8054911515600160a01b0260ff60a01b19909216919091179055565b60606005805461069f90611be9565b335f9081526002602090815260408083206001600160a01b038616845290915281205482811015610eab5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016107c2565b610eb83385858403611037565b5060019392505050565b5f61072c3384846111cd565b6040516bffffffffffffffffffffffff19606083901b1660208201525f9081906034016040516020818303038152906040528051906020012090505f610f40827f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b90505f610f4d8287611608565b9695505050505050565b5f546001600160a01b03163314610f805760405162461bcd60e51b81526004016107c290611c21565b600d80549115156401000000000264ff0000000019909216919091179055565b5f546001600160a01b03163314610fc95760405162461bcd60e51b81526004016107c290611c21565b6001600160a01b03811661102e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107c2565b6108ce816114dd565b6006546001600160a01b038381169116146110a9575f54600160a01b900460ff1615156001146110a95760405162461bcd60e51b815260206004820181905260248201527f4c697374696e672074696d65206973204a756c792031392c2039706d2055544360448201526064016107c2565b6001600160a01b03831661110b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016107c2565b6001600160a01b03821661116c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016107c2565b6001600160a01b038381165f8181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166112315760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016107c2565b6001600160a01b0382166112935760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016107c2565b6001600160a01b0383165f908152600160205260409020548181101561130a5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016107c2565b6001600160a01b038085165f90815260016020526040808220858503905591851681529081208054849290611340908490611c6a565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161138c91815260200190565b60405180910390a350505050565b6001600160a01b0382166113fa5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016107c2565b6001600160a01b0382165f908152600160205260409020548181101561146d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016107c2565b6001600160a01b0383165f90815260016020526040812083830390556003805484929061149b908490611d6e565b90915550506040518281525f906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016111c0565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0382166115825760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016107c2565b8060035f8282546115939190611c6a565b90915550506001600160a01b0382165f90815260016020526040812080548392906115bf908490611c6a565b90915550506040518181526001600160a01b038316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b5f805f611615858561162a565b915091506116228161166c565b509392505050565b5f80825160410361165e576020830151604084015160608501515f1a611652878285856117b5565b94509450505050611665565b505f905060025b9250929050565b5f81600481111561167f5761167f611db7565b036116875750565b600181600481111561169b5761169b611db7565b036116e85760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016107c2565b60028160048111156116fc576116fc611db7565b036117495760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016107c2565b600381600481111561175d5761175d611db7565b036108ce5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016107c2565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156117ea57505f90506003611869565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561183b573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b038116611863575f60019250925050611869565b91505f90505b94509492505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b03811681146118bd575f80fd5b919050565b5f80604083850312156118d3575f80fd5b6118dc836118a7565b946020939093013593505050565b5f805f606084860312156118fc575f80fd5b611905846118a7565b9250611913602085016118a7565b929592945050506040919091013590565b5f805f60608486031215611936575f80fd5b8335925060208401359150604084013563ffffffff81168114611957575f80fd5b809150509250925092565b5f60208284031215611972575f80fd5b6107de826118a7565b5f6020828403121561198b575f80fd5b5035919050565b5f805f80608085870312156119a5575f80fd5b5050823594602084013594506040840135936060013592509050565b5f8083601f8401126119d1575f80fd5b50813567ffffffffffffffff8111156119e8575f80fd5b602083019150836020828501011115611665575f80fd5b5f805f60408486031215611a11575f80fd5b833567ffffffffffffffff811115611a27575f80fd5b611a33868287016119c1565b9094509250611a469050602085016118a7565b90509250925092565b5f805f8060608587031215611a62575f80fd5b84359350602085013567ffffffffffffffff811115611a7f575f80fd5b611a8b878288016119c1565b9094509250611a9e9050604086016118a7565b905092959194509250565b5f8060408385031215611aba575f80fd5b82359150611aca602084016118a7565b90509250929050565b5f60208284031215611ae3575f80fd5b813580151581146107de575f80fd5b634e487b7160e01b5f52604160045260245ffd5b5f8060408385031215611b17575f80fd5b823567ffffffffffffffff811115611b2d575f80fd5b8301601f81018513611b3d575f80fd5b803567ffffffffffffffff811115611b5757611b57611af2565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715611b8657611b86611af2565b604052818152828201602001871015611b9d575f80fd5b816020840160208301375f60208383010152809450505050611aca602084016118a7565b5f8060408385031215611bd2575f80fd5b611bdb836118a7565b9150611aca602084016118a7565b600181811c90821680611bfd57607f821691505b602082108103611c1b57634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561073057610730611c56565b6001815b6001841115611cb857808504811115611c9c57611c9c611c56565b6001841615611caa57908102905b60019390931c928002611c81565b935093915050565b5f82611cce57506001610730565b81611cda57505f610730565b8160018114611cf05760028114611cfa57611d16565b6001915050610730565b60ff841115611d0b57611d0b611c56565b50506001821b610730565b5060208310610133831016604e8410600b8410161715611d39575081810a610730565b611d455f198484611c7d565b805f1904821115611d5857611d58611c56565b029392505050565b5f6107de60ff841683611cc0565b8181038181111561073057610730611c56565b5f82611d9b57634e487b7160e01b5f52601260045260245ffd5b500490565b808202811582820484141761073057610730611c56565b634e487b7160e01b5f52602160045260245ffdfea264697066735822122067da17b212a483805080b004adb1d60a7726635b10063cb815d8653dea1e773c64736f6c634300081a0033
Deployed Bytecode
0x608060405260043610610207575f3560e01c806381a7927e116101135780639843eae31161009d578063b0e21e8a1161006d578063b0e21e8a146105ce578063c13df04c146105e3578063c884ef8314610602578063dd62ed3e1461062d578063f2fde38b14610671575f80fd5b80639843eae314610550578063a457c2d714610571578063a9059cbb14610590578063adeb0d88146105af575f80fd5b80639147dd1b116100e35780639147dd1b146104cc57806393a60467146104e15780639451e9ce146104f657806395c219711461052757806395d89b411461053c575f80fd5b806381a7927e14610467578063872ddfa11461047c5780638cc4ae59146104915780638da5cb5b146104b0575f80fd5b8063402914f51161019457806365b4f2891161016457806365b4f289146103ce57806370a08231146103ed578063715018a6146104215780637962219b146104355780637f2ac2bc14610448575f80fd5b8063402914f51461035257806342966c6814610371578063509484d51461039057806360a7f9df146103af575f80fd5b806323b872dd116101da57806323b872dd146102b95780632f1dbcb2146102d8578063313ce567146102f9578063327de181146103145780633950935114610333575f80fd5b806306fdde031461020b578063095ea7b31461023557806318160ddd146102645780631a18622714610282575b5f80fd5b348015610216575f80fd5b5061021f610690565b60405161022c9190611872565b60405180910390f35b348015610240575f80fd5b5061025461024f3660046118c2565b610720565b604051901515815260200161022c565b34801561026f575f80fd5b506003545b60405190815260200161022c565b34801561028d575f80fd5b506006546102a1906001600160a01b031681565b6040516001600160a01b03909116815260200161022c565b3480156102c4575f80fd5b506102546102d33660046118ea565b610736565b3480156102e3575f80fd5b506102f76102f2366004611924565b6107e5565b005b348015610304575f80fd5b506040516012815260200161022c565b34801561031f575f80fd5b505f5461025490600160a01b900460ff1681565b34801561033e575f80fd5b5061025461034d3660046118c2565b610833565b34801561035d575f80fd5b5061027461036c366004611962565b61086e565b34801561037c575f80fd5b506102f761038b36600461197b565b6108c4565b34801561039b575f80fd5b506102f76103aa366004611962565b6108d1565b3480156103ba575f80fd5b506102f76103c9366004611992565b610912565b3480156103d9575f80fd5b506102746103e83660046119ff565b61094f565b3480156103f8575f80fd5b50610274610407366004611962565b6001600160a01b03165f9081526001602052604090205490565b34801561042c575f80fd5b506102f7610a0e565b6102f7610443366004611a4f565b610a42565b348015610453575f80fd5b506102f7610462366004611aa9565b610d5f565b348015610472575f80fd5b50610274600c5481565b348015610487575f80fd5b5061027460095481565b34801561049c575f80fd5b506102f76104ab366004611ad3565b610ddf565b3480156104bb575f80fd5b505f546001600160a01b03166102a1565b3480156104d7575f80fd5b50610274600b5481565b3480156104ec575f80fd5b5061027460075481565b348015610501575f80fd5b50600d546105129063ffffffff1681565b60405163ffffffff909116815260200161022c565b348015610532575f80fd5b5061027460085481565b348015610547575f80fd5b5061021f610e1b565b34801561055b575f80fd5b50600d5461025490640100000000900460ff1681565b34801561057c575f80fd5b5061025461058b3660046118c2565b610e2a565b34801561059b575f80fd5b506102546105aa3660046118c2565b610ec2565b3480156105ba575f80fd5b506102a16105c9366004611b06565b610ece565b3480156105d9575f80fd5b50610274600a5481565b3480156105ee575f80fd5b506102f76105fd366004611ad3565b610f57565b34801561060d575f80fd5b5061027461061c366004611962565b600f6020525f908152604090205481565b348015610638575f80fd5b50610274610647366004611bc1565b6001600160a01b039182165f90815260026020908152604080832093909416825291909152205490565b34801561067c575f80fd5b506102f761068b366004611962565b610fa0565b60606004805461069f90611be9565b80601f01602080910402602001604051908101604052809291908181526020018280546106cb90611be9565b80156107165780601f106106ed57610100808354040283529160200191610716565b820191905f5260205f20905b8154815290600101906020018083116106f957829003601f168201915b5050505050905090565b5f61072c338484611037565b5060015b92915050565b5f6107428484846111cd565b6001600160a01b0384165f908152600260209081526040808320338452909152902054828110156107cb5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b6107d88533858403611037565b60019150505b9392505050565b5f546001600160a01b0316331461080e5760405162461bcd60e51b81526004016107c290611c21565b600d805463ffffffff191663ffffffff92909216919091179055600b91909155600c55565b335f8181526002602090815260408083206001600160a01b0387168452909152812054909161072c918590610869908690611c6a565b611037565b5f61087b6012600a611d60565b6001600160a01b0383165f908152600f60205260409020546009546008546007546108a69190611c6a565b6108b09190611c6a565b6108ba9190611d6e565b6107309190611d81565b6108ce338261139a565b50565b73ed07092d9668de80668e6b195ba0504b224a3e9e33146108f0575f80fd5b600680546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b0316331461093b5760405162461bcd60e51b81526004016107c290611c21565b600793909355600891909155600955600a55565b601054604080516020601f86018190048102820181019092528481525f926001600160a01b03169161099d919087908790819084018382808284375f92019190915250879250610ece915050565b6001600160a01b031603610a07576109b76012600a611d60565b6001600160a01b0383165f908152600f60205260409020546009546008546007546109e29190611c6a565b6109ec9190611c6a565b6109f69190611d6e565b610a009190611d81565b90506107de565b505f6107de565b5f546001600160a01b03163314610a375760405162461bcd60e51b81526004016107c290611c21565b610a405f6114dd565b565b5f610a4f6012600a611d60565b610a599086611da0565b600d54909150640100000000900460ff16610aa65760405162461bcd60e51b815260206004820152600d60248201526c139bdd081c9958591e481e595d609a1b60448201526064016107c2565b600e54600354610ab69083611c6a565b10610aef5760405162461bcd60e51b8152602060048201526009602482015268534f4c44204f55542160b81b60448201526064016107c2565b5f610afb85853361094f565b11610b405760405162461bcd60e51b81526020600482015260156024820152745369676e61747572652048617368204572726f722160581b60448201526064016107c2565b600754335f908152600f6020526040812054909190610b5f9084611c6a565b11610b6b57505f610c3d565b600954600854600754610b7e9190611c6a565b610b889190611c6a565b335f908152600f6020526040902054610ba19084611c6a565b11610c0d57335f908152600f602052604090205460011115610bf457610bc96012600a611d60565b600b54600754610bd99085611d6e565b610be39190611da0565b610bed9190611d81565b9050610c3d565b610c006012600a611d60565b600b54610be39084611da0565b60405162461bcd60e51b815260206004820152600560248201526422b93937b960d91b60448201526064016107c2565b600a54811015610c4c5750600a545b80341015610c925760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742066756e64732160681b60448201526064016107c2565b5f80546040516001600160a01b039091169034908381818185875af1925050503d805f8114610cdc576040519150601f19603f3d011682016040523d82523d5f602084013e610ce1565b606091505b5050335f908152600f6020526040902054909150610d00908490611c6a565b335f818152600f6020526040902091909155610d1c908461152c565b6001600160a01b03841615610d5657600d54610d56908590606490610d479063ffffffff1687611da0565b610d519190611d81565b61152c565b50505050505050565b5f546001600160a01b03163314610d885760405162461bcd60e51b81526004016107c290611c21565b600e54600354610d989084611c6a565b10610dd15760405162461bcd60e51b8152602060048201526009602482015268534f4c44204f55542160b81b60448201526064016107c2565b610ddb818361152c565b5050565b73ed07092d9668de80668e6b195ba0504b224a3e9e3314610dfe575f80fd5b5f8054911515600160a01b0260ff60a01b19909216919091179055565b60606005805461069f90611be9565b335f9081526002602090815260408083206001600160a01b038616845290915281205482811015610eab5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016107c2565b610eb83385858403611037565b5060019392505050565b5f61072c3384846111cd565b6040516bffffffffffffffffffffffff19606083901b1660208201525f9081906034016040516020818303038152906040528051906020012090505f610f40827f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b90505f610f4d8287611608565b9695505050505050565b5f546001600160a01b03163314610f805760405162461bcd60e51b81526004016107c290611c21565b600d80549115156401000000000264ff0000000019909216919091179055565b5f546001600160a01b03163314610fc95760405162461bcd60e51b81526004016107c290611c21565b6001600160a01b03811661102e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107c2565b6108ce816114dd565b6006546001600160a01b038381169116146110a9575f54600160a01b900460ff1615156001146110a95760405162461bcd60e51b815260206004820181905260248201527f4c697374696e672074696d65206973204a756c792031392c2039706d2055544360448201526064016107c2565b6001600160a01b03831661110b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016107c2565b6001600160a01b03821661116c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016107c2565b6001600160a01b038381165f8181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166112315760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016107c2565b6001600160a01b0382166112935760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016107c2565b6001600160a01b0383165f908152600160205260409020548181101561130a5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016107c2565b6001600160a01b038085165f90815260016020526040808220858503905591851681529081208054849290611340908490611c6a565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161138c91815260200190565b60405180910390a350505050565b6001600160a01b0382166113fa5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016107c2565b6001600160a01b0382165f908152600160205260409020548181101561146d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016107c2565b6001600160a01b0383165f90815260016020526040812083830390556003805484929061149b908490611d6e565b90915550506040518281525f906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016111c0565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0382166115825760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016107c2565b8060035f8282546115939190611c6a565b90915550506001600160a01b0382165f90815260016020526040812080548392906115bf908490611c6a565b90915550506040518181526001600160a01b038316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b5f805f611615858561162a565b915091506116228161166c565b509392505050565b5f80825160410361165e576020830151604084015160608501515f1a611652878285856117b5565b94509450505050611665565b505f905060025b9250929050565b5f81600481111561167f5761167f611db7565b036116875750565b600181600481111561169b5761169b611db7565b036116e85760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016107c2565b60028160048111156116fc576116fc611db7565b036117495760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016107c2565b600381600481111561175d5761175d611db7565b036108ce5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016107c2565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156117ea57505f90506003611869565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561183b573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b038116611863575f60019250925050611869565b91505f90505b94509492505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b03811681146118bd575f80fd5b919050565b5f80604083850312156118d3575f80fd5b6118dc836118a7565b946020939093013593505050565b5f805f606084860312156118fc575f80fd5b611905846118a7565b9250611913602085016118a7565b929592945050506040919091013590565b5f805f60608486031215611936575f80fd5b8335925060208401359150604084013563ffffffff81168114611957575f80fd5b809150509250925092565b5f60208284031215611972575f80fd5b6107de826118a7565b5f6020828403121561198b575f80fd5b5035919050565b5f805f80608085870312156119a5575f80fd5b5050823594602084013594506040840135936060013592509050565b5f8083601f8401126119d1575f80fd5b50813567ffffffffffffffff8111156119e8575f80fd5b602083019150836020828501011115611665575f80fd5b5f805f60408486031215611a11575f80fd5b833567ffffffffffffffff811115611a27575f80fd5b611a33868287016119c1565b9094509250611a469050602085016118a7565b90509250925092565b5f805f8060608587031215611a62575f80fd5b84359350602085013567ffffffffffffffff811115611a7f575f80fd5b611a8b878288016119c1565b9094509250611a9e9050604086016118a7565b905092959194509250565b5f8060408385031215611aba575f80fd5b82359150611aca602084016118a7565b90509250929050565b5f60208284031215611ae3575f80fd5b813580151581146107de575f80fd5b634e487b7160e01b5f52604160045260245ffd5b5f8060408385031215611b17575f80fd5b823567ffffffffffffffff811115611b2d575f80fd5b8301601f81018513611b3d575f80fd5b803567ffffffffffffffff811115611b5757611b57611af2565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715611b8657611b86611af2565b604052818152828201602001871015611b9d575f80fd5b816020840160208301375f60208383010152809450505050611aca602084016118a7565b5f8060408385031215611bd2575f80fd5b611bdb836118a7565b9150611aca602084016118a7565b600181811c90821680611bfd57607f821691505b602082108103611c1b57634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561073057610730611c56565b6001815b6001841115611cb857808504811115611c9c57611c9c611c56565b6001841615611caa57908102905b60019390931c928002611c81565b935093915050565b5f82611cce57506001610730565b81611cda57505f610730565b8160018114611cf05760028114611cfa57611d16565b6001915050610730565b60ff841115611d0b57611d0b611c56565b50506001821b610730565b5060208310610133831016604e8410600b8410161715611d39575081810a610730565b611d455f198484611c7d565b805f1904821115611d5857611d58611c56565b029392505050565b5f6107de60ff841683611cc0565b8181038181111561073057610730611c56565b5f82611d9b57634e487b7160e01b5f52601260045260245ffd5b500490565b808202811582820484141761073057610730611c56565b634e487b7160e01b5f52602160045260245ffdfea264697066735822122067da17b212a483805080b004adb1d60a7726635b10063cb815d8653dea1e773c64736f6c634300081a0033
Deployed Bytecode Sourcemap
46037:4000:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9526:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11693:169;;;;;;;;;;-1:-1:-1;11693:169:0;;;;;:::i;:::-;;:::i;:::-;;;1085:14:1;;1078:22;1060:41;;1048:2;1033:18;11693:169:0;920:187:1;10646:108:0;;;;;;;;;;-1:-1:-1;10734:12:0;;10646:108;;;1258:25:1;;;1246:2;1231:18;10646:108:0;1112:177:1;17649:71:0;;;;;;;;;;-1:-1:-1;17649:71:0;;;;-1:-1:-1;;;;;17649:71:0;;;;;;-1:-1:-1;;;;;1458:32:1;;;1440:51;;1428:2;1413:18;17649:71:0;1294:203:1;12344:492:0;;;;;;;;;;-1:-1:-1;12344:492:0;;;;;:::i;:::-;;:::i;47357:244::-;;;;;;;;;;-1:-1:-1;47357:244:0;;;;;:::i;:::-;;:::i;:::-;;10488:93;;;;;;;;;;-1:-1:-1;10488:93:0;;10571:2;2546:36:1;;2534:2;2519:18;10488:93:0;2404:184:1;8593:33:0;;;;;;;;;;-1:-1:-1;8593:33:0;;;;-1:-1:-1;;;8593:33:0;;;;;;13245:215;;;;;;;;;;-1:-1:-1;13245:215:0;;;;;:::i;:::-;;:::i;49258:165::-;;;;;;;;;;-1:-1:-1;49258:165:0;;;;;:::i;:::-;;:::i;49949:81::-;;;;;;;;;;-1:-1:-1;49949:81:0;;;;;:::i;:::-;;:::i;18229:174::-;;;;;;;;;;-1:-1:-1;18229:174:0;;;;;:::i;:::-;;:::i;47049:300::-;;;;;;;;;;-1:-1:-1;47049:300:0;;;;;:::i;:::-;;:::i;48963:285::-;;;;;;;;;;-1:-1:-1;48963:285:0;;;;;:::i;:::-;;:::i;10817:127::-;;;;;;;;;;-1:-1:-1;10817:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;10918:18:0;10891:7;10918:18;;;:9;:18;;;;;;;10817:127;2713:103;;;;;;;;;;;;;:::i;47615:1340::-;;;;;;:::i;:::-;;:::i;49761:180::-;;;;;;;;;;-1:-1:-1;49761:180:0;;;;;:::i;:::-;;:::i;46368:31::-;;;;;;;;;;;;;;;;46200:52;;;;;;;;;;;;;;;;8634:161;;;;;;;;;;-1:-1:-1;8634:161:0;;;;;:::i;:::-;;:::i;2062:87::-;;;;;;;;;;-1:-1:-1;2108:7:0;2135:6;-1:-1:-1;;;;;2135:6:0;2062:87;;46308:34;;;;;;;;;;;;;;;;46077:54;;;;;;;;;;;;;;;;46430:33;;;;;;;;;;-1:-1:-1;46430:33:0;;;;;;;;;;;5806:10:1;5794:23;;;5776:42;;5764:2;5749:18;46430:33:0;5632:192:1;46138:55:0;;;;;;;;;;;;;;;;9745:104;;;;;;;;;;;;;:::i;46470:31::-;;;;;;;;;;-1:-1:-1;46470:31:0;;;;;;;;;;;13963:413;;;;;;;;;;-1:-1:-1;13963:413:0;;;;;:::i;:::-;;:::i;11157:175::-;;;;;;;;;;-1:-1:-1;11157:175:0;;;;;:::i;:::-;;:::i;49435:314::-;;;;;;;;;;-1:-1:-1;49435:314:0;;;;;:::i;:::-;;:::i;46259:42::-;;;;;;;;;;;;;;;;46934:107;;;;;;;;;;-1:-1:-1;46934:107:0;;;;;:::i;:::-;;:::i;46566:42::-;;;;;;;;;;-1:-1:-1;46566:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;11395:151;;;;;;;;;;-1:-1:-1;11395:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;11511:18:0;;;11484:7;11511:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;11395:151;2971:201;;;;;;;;;;-1:-1:-1;2971:201:0;;;;;:::i;:::-;;:::i;9526:100::-;9580:13;9613:5;9606:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9526:100;:::o;11693:169::-;11776:4;11793:39;860:10;11816:7;11825:6;11793:8;:39::i;:::-;-1:-1:-1;11850:4:0;11693:169;;;;;:::o;12344:492::-;12484:4;12501:36;12511:6;12519:9;12530:6;12501:9;:36::i;:::-;-1:-1:-1;;;;;12577:19:0;;12550:24;12577:19;;;:11;:19;;;;;;;;860:10;12577:33;;;;;;;;12629:26;;;;12621:79;;;;-1:-1:-1;;;12621:79:0;;7846:2:1;12621:79:0;;;7828:21:1;7885:2;7865:18;;;7858:30;7924:34;7904:18;;;7897:62;-1:-1:-1;;;7975:18:1;;;7968:38;8023:19;;12621:79:0;;;;;;;;;12736:57;12745:6;860:10;12786:6;12767:16;:25;12736:8;:57::i;:::-;12824:4;12817:11;;;12344:492;;;;;;:::o;47357:244::-;2108:7;2135:6;-1:-1:-1;;;;;2135:6:0;860:10;2282:23;2274:68;;;;-1:-1:-1;;;2274:68:0;;;;;;;:::i;:::-;47483:17:::1;:38:::0;;-1:-1:-1;;47483:38:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;47532:12:::1;:28:::0;;;;47571:9:::1;:22:::0;47357:244::o;13245:215::-;860:10;13333:4;13382:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;13382:34:0;;;;;;;;;;13333:4;;13350:80;;13373:7;;13382:47;;13419:10;;13382:47;:::i;:::-;13350:8;:80::i;49258:165::-;49314:7;49400:14;10571:2;49400;:14;:::i;:::-;-1:-1:-1;;;;;49381:16:0;;;;;;:7;:16;;;;;;49370:10;;49356:13;;49342;;:27;;49356:13;49342:27;:::i;:::-;:38;;;;:::i;:::-;:55;;;;:::i;:::-;49341:74;;;;:::i;49949:81::-;49998:24;50004:10;50016:5;49998;:24::i;:::-;49949:81;:::o;18229:174::-;18315:42;18303:10;:54;18295:63;;;;;;18369:13;:26;;-1:-1:-1;;;;;;18369:26:0;-1:-1:-1;;;;;18369:26:0;;;;;;;;;;18229:174::o;47049:300::-;2108:7;2135:6;-1:-1:-1;;;;;2135:6:0;860:10;2282:23;2274:68;;;;-1:-1:-1;;;2274:68:0;;;;;;;:::i;:::-;47198:13:::1;:30:::0;;;;47239:13:::1;:30:::0;;;;47280:10:::1;:24:::0;47315:11:::1;:26:::0;47049:300::o;48963:285::-;49109:6;;49075:32;;;;;;;;;;;;;;;;;;;;;;49051:7;;-1:-1:-1;;;;;49109:6:0;;49075:32;;;49089:9;;;;;;49075:32;;49089:9;;;;49075:32;;;;;;;;;-1:-1:-1;49099:7:0;;-1:-1:-1;49075:13:0;;-1:-1:-1;;49075:32:0:i;:::-;-1:-1:-1;;;;;49075:40:0;;49071:170;;49194:14;10571:2;49194;:14;:::i;:::-;-1:-1:-1;;;;;49175:16:0;;;;;;:7;:16;;;;;;49164:10;;49150:13;;49136;;:27;;49150:13;49136:27;:::i;:::-;:38;;;;:::i;:::-;:55;;;;:::i;:::-;49135:74;;;;:::i;:::-;49128:81;;;;49071:170;-1:-1:-1;49237:1:0;49230:8;;2713:103;2108:7;2135:6;-1:-1:-1;;;;;2135:6:0;860:10;2282:23;2274:68;;;;-1:-1:-1;;;2274:68:0;;;;;;;:::i;:::-;2778:30:::1;2805:1;2778:18;:30::i;:::-;2713:103::o:0;47615:1340::-;47753:14;47777;10571:2;47777;:14;:::i;:::-;47769:22;;:7;:22;:::i;:::-;47810:13;;47753:38;;-1:-1:-1;47810:13:0;;;;;47802:39;;;;-1:-1:-1;;;47802:39:0;;10838:2:1;47802:39:0;;;10820:21:1;10877:2;10857:18;;;10850:30;-1:-1:-1;;;10896:18:1;;;10889:43;10949:18;;47802:39:0;10636:337:1;47802:39:0;47881:12;;10734;;47860:20;;:6;:20;:::i;:::-;:33;47852:54;;;;-1:-1:-1;;;47852:54:0;;11180:2:1;47852:54:0;;;11162:21:1;11219:1;11199:18;;;11192:29;-1:-1:-1;;;11237:18:1;;;11230:39;11286:18;;47852:54:0;10978:332:1;47852:54:0;47966:1;47925:38;47941:9;;47952:10;47925:15;:38::i;:::-;:42;47917:76;;;;-1:-1:-1;;;47917:76:0;;11517:2:1;47917:76:0;;;11499:21:1;11556:2;11536:18;;;11529:30;-1:-1:-1;;;11575:18:1;;;11568:51;11636:18;;47917:76:0;11315:345:1;47917:76:0;48073:13;;48060:10;48013:15;48052:19;;;:7;:19;;;;;;48013:15;;48073:13;48045:26;;:6;:26;:::i;:::-;:41;48041:443;;-1:-1:-1;48111:1:0;48041:443;;;48195:10;;48181:13;;48167;;:27;;;;:::i;:::-;:38;;;;:::i;:::-;48154:10;48146:19;;;;:7;:19;;;;;;48139:26;;:6;:26;:::i;:::-;:66;48135:349;;48234:10;48226:19;;;;:7;:19;;;;;;48246:1;-1:-1:-1;48222:207:0;;;48313:14;10571:2;48313;:14;:::i;:::-;48299:12;;48284:13;;48277:20;;:6;:20;:::i;:::-;48276:35;;;;:::i;:::-;:52;;;;:::i;:::-;48268:60;;48135:349;;48222:207;48398:14;10571:2;48398;:14;:::i;:::-;48384:12;;48377:19;;:6;:19;:::i;48135:349::-;48457:15;;-1:-1:-1;;;48457:15:0;;11867:2:1;48457:15:0;;;11849:21:1;11906:1;11886:18;;;11879:29;-1:-1:-1;;;11924:18:1;;;11917:35;11969:18;;48457:15:0;11665:328:1;48135:349:0;48506:11;;48498:7;:19;48494:71;;;-1:-1:-1;48542:11:0;;48494:71;48596:7;48583:9;:20;;48575:52;;;;-1:-1:-1;;;48575:52:0;;12200:2:1;48575:52:0;;;12182:21:1;12239:2;12219:18;;;12212:30;-1:-1:-1;;;12258:18:1;;;12251:49;12317:18;;48575:52:0;11998:343:1;48575:52:0;48639:12;2135:6;;48657:42;;-1:-1:-1;;;;;2135:6:0;;;;48685:9;;48639:12;48657:42;48639:12;48657:42;48685:9;2135:6;48657:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;48738:10:0;48730:19;;;;:7;:19;;;;;;48638:61;;-1:-1:-1;48730:26:0;;48750:6;;48730:26;:::i;:::-;48718:10;48710:19;;;;:7;:19;;;;;:46;;;;48767:25;;48785:6;48767:5;:25::i;:::-;-1:-1:-1;;;;;48817:56:0;;;48813:135;;48912:17;;48886:48;;48892:11;;48930:3;;48905:24;;48912:17;;48905:6;:24;:::i;:::-;:28;;;;:::i;:::-;48886:5;:48::i;:::-;47739:1216;;;47615:1340;;;;:::o;49761:180::-;2108:7;2135:6;-1:-1:-1;;;;;2135:6:0;860:10;2282:23;2274:68;;;;-1:-1:-1;;;2274:68:0;;;;;;;:::i;:::-;49873:12:::1;::::0;10734;;49851:21:::1;::::0;:7;:21:::1;:::i;:::-;:34;49843:55;;;::::0;-1:-1:-1;;;49843:55:0;;11180:2:1;49843:55:0::1;::::0;::::1;11162:21:1::0;11219:1;11199:18;;;11192:29;-1:-1:-1;;;11237:18:1;;;11230:39;11286:18;;49843:55:0::1;10978:332:1::0;49843:55:0::1;49909:24;49915:8;49925:7;49909:5;:24::i;:::-;49761:180:::0;;:::o;8634:161::-;8712:42;8700:10;:54;8692:63;;;;;;8766:13;:21;;;;;-1:-1:-1;;;8766:21:0;-1:-1:-1;;;;8766:21:0;;;;;;;;;8634:161::o;9745:104::-;9801:13;9834:7;9827:14;;;;;:::i;13963:413::-;860:10;14056:4;14100:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;14100:34:0;;;;;;;;;;14153:35;;;;14145:85;;;;-1:-1:-1;;;14145:85:0;;12758:2:1;14145:85:0;;;12740:21:1;12797:2;12777:18;;;12770:30;12836:34;12816:18;;;12809:62;-1:-1:-1;;;12887:18:1;;;12880:35;12932:19;;14145:85:0;12556:401:1;14145:85:0;14266:67;860:10;14289:7;14317:15;14298:16;:34;14266:8;:67::i;:::-;-1:-1:-1;14364:4:0;;13963:413;-1:-1:-1;;;13963:413:0:o;11157:175::-;11243:4;11260:42;860:10;11284:9;11295:6;11260:9;:42::i;49435:314::-;49568:25;;-1:-1:-1;;13111:2:1;13107:15;;;13103:53;49568:25:0;;;13091:66:1;49520:7:0;;;;13173:12:1;;49568:25:0;;;;;;;;;;;;49558:36;;;;;;49540:54;;49605:12;49620:37;49649:7;27291:34;27086:15;27278:48;;;27347:4;27340:18;;;;27399:4;27383:21;;;27017:405;49620:37;49605:52;;49668:15;49686:30;49700:4;49706:9;49686:13;:30::i;:::-;49668:48;49435:314;-1:-1:-1;;;;;;49435:314:0:o;46934:107::-;2108:7;2135:6;-1:-1:-1;;;;;2135:6:0;860:10;2282:23;2274:68;;;;-1:-1:-1;;;2274:68:0;;;;;;;:::i;:::-;47007:13:::1;:26:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;47007:26:0;;::::1;::::0;;;::::1;::::0;;46934:107::o;2971:201::-;2108:7;2135:6;-1:-1:-1;;;;;2135:6:0;860:10;2282:23;2274:68;;;;-1:-1:-1;;;2274:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3060:22:0;::::1;3052:73;;;::::0;-1:-1:-1;;;3052:73:0;;13398:2:1;3052:73:0::1;::::0;::::1;13380:21:1::0;13437:2;13417:18;;;13410:30;13476:34;13456:18;;;13449:62;-1:-1:-1;;;13527:18:1;;;13520:36;13573:19;;3052:73:0::1;13196:402:1::0;3052:73:0::1;3136:28;3155:8;3136:18;:28::i;17730:487::-:0;17870:13;;-1:-1:-1;;;;;17861:22:0;;;17870:13;;17861:22;17858:97;;17894:13;;-1:-1:-1;;;17894:13:0;;;;:21;;17911:4;17894:21;17886:67;;;;-1:-1:-1;;;17886:67:0;;13805:2:1;17886:67:0;;;13787:21:1;;;13824:18;;;13817:30;13883:34;13863:18;;;13856:62;13935:18;;17886:67:0;13603:356:1;17886:67:0;-1:-1:-1;;;;;17973:19:0;;17965:68;;;;-1:-1:-1;;;17965:68:0;;14166:2:1;17965:68:0;;;14148:21:1;14205:2;14185:18;;;14178:30;14244:34;14224:18;;;14217:62;-1:-1:-1;;;14295:18:1;;;14288:34;14339:19;;17965:68:0;13964:400:1;17965:68:0;-1:-1:-1;;;;;18052:21:0;;18044:68;;;;-1:-1:-1;;;18044:68:0;;14571:2:1;18044:68:0;;;14553:21:1;14610:2;14590:18;;;14583:30;14649:34;14629:18;;;14622:62;-1:-1:-1;;;14700:18:1;;;14693:32;14742:19;;18044:68:0;14369:398:1;18044:68:0;-1:-1:-1;;;;;18125:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;18177:32;;1258:25:1;;;18177:32:0;;1231:18:1;18177:32:0;;;;;;;;17730:487;;;:::o;14866:733::-;-1:-1:-1;;;;;15006:20:0;;14998:70;;;;-1:-1:-1;;;14998:70:0;;14974:2:1;14998:70:0;;;14956:21:1;15013:2;14993:18;;;14986:30;15052:34;15032:18;;;15025:62;-1:-1:-1;;;15103:18:1;;;15096:35;15148:19;;14998:70:0;14772:401:1;14998:70:0;-1:-1:-1;;;;;15087:23:0;;15079:71;;;;-1:-1:-1;;;15079:71:0;;15380:2:1;15079:71:0;;;15362:21:1;15419:2;15399:18;;;15392:30;15458:34;15438:18;;;15431:62;-1:-1:-1;;;15509:18:1;;;15502:33;15552:19;;15079:71:0;15178:399:1;15079:71:0;-1:-1:-1;;;;;15247:17:0;;15223:21;15247:17;;;:9;:17;;;;;;15283:23;;;;15275:74;;;;-1:-1:-1;;;15275:74:0;;15784:2:1;15275:74:0;;;15766:21:1;15823:2;15803:18;;;15796:30;15862:34;15842:18;;;15835:62;-1:-1:-1;;;15913:18:1;;;15906:36;15959:19;;15275:74:0;15582:402:1;15275:74:0;-1:-1:-1;;;;;15385:17:0;;;;;;;:9;:17;;;;;;15405:22;;;15385:42;;15449:20;;;;;;;;:30;;15421:6;;15385:17;15449:30;;15421:6;;15449:30;:::i;:::-;;;;;;;;15514:9;-1:-1:-1;;;;;15497:35:0;15506:6;-1:-1:-1;;;;;15497:35:0;;15525:6;15497:35;;;;1258:25:1;;1246:2;1231:18;;1112:177;15497:35:0;;;;;;;;14987:612;14866:733;;;:::o;16618:591::-;-1:-1:-1;;;;;16702:21:0;;16694:67;;;;-1:-1:-1;;;16694:67:0;;16191:2:1;16694:67:0;;;16173:21:1;16230:2;16210:18;;;16203:30;16269:34;16249:18;;;16242:62;-1:-1:-1;;;16320:18:1;;;16313:31;16361:19;;16694:67:0;15989:397:1;16694:67:0;-1:-1:-1;;;;;16861:18:0;;16836:22;16861:18;;;:9;:18;;;;;;16898:24;;;;16890:71;;;;-1:-1:-1;;;16890:71:0;;16593:2:1;16890:71:0;;;16575:21:1;16632:2;16612:18;;;16605:30;16671:34;16651:18;;;16644:62;-1:-1:-1;;;16722:18:1;;;16715:32;16764:19;;16890:71:0;16391:398:1;16890:71:0;-1:-1:-1;;;;;16997:18:0;;;;;;:9;:18;;;;;17018:23;;;16997:44;;17063:12;:22;;17035:6;;16997:18;17063:22;;17035:6;;17063:22;:::i;:::-;;;;-1:-1:-1;;17103:37:0;;1258:25:1;;;17129:1:0;;-1:-1:-1;;;;;17103:37:0;;;;;1246:2:1;1231:18;17103:37:0;1112:177:1;3332:191:0;3406:16;3425:6;;-1:-1:-1;;;;;3442:17:0;;;-1:-1:-1;;;;;;3442:17:0;;;;;;3475:40;;3425:6;;;;;;;3475:40;;3406:16;3475:40;3395:128;3332:191;:::o;15886:399::-;-1:-1:-1;;;;;15970:21:0;;15962:65;;;;-1:-1:-1;;;15962:65:0;;16996:2:1;15962:65:0;;;16978:21:1;17035:2;17015:18;;;17008:30;17074:33;17054:18;;;17047:61;17125:18;;15962:65:0;16794:355:1;15962:65:0;16118:6;16102:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;16135:18:0;;;;;;:9;:18;;;;;:28;;16157:6;;16135:18;:28;;16157:6;;16135:28;:::i;:::-;;;;-1:-1:-1;;16179:37:0;;1258:25:1;;;-1:-1:-1;;;;;16179:37:0;;;16196:1;;16179:37;;1246:2:1;1231:18;16179:37:0;;;;;;;49761:180;;:::o;23481:231::-;23559:7;23580:17;23599:18;23621:27;23632:4;23638:9;23621:10;:27::i;:::-;23579:69;;;;23659:18;23671:5;23659:11;:18::i;:::-;-1:-1:-1;23695:9:0;23481:231;-1:-1:-1;;;23481:231:0:o;21932:747::-;22013:7;22022:12;22051:9;:16;22071:2;22051:22;22047:625;;22395:4;22380:20;;22374:27;22445:4;22430:20;;22424:27;22503:4;22488:20;;22482:27;22090:9;22474:36;22546:25;22557:4;22474:36;22374:27;22424;22546:10;:25::i;:::-;22539:32;;;;;;;;;22047:625;-1:-1:-1;22620:1:0;;-1:-1:-1;22624:35:0;22047:625;21932:747;;;;;:::o;20325:521::-;20403:20;20394:5;:29;;;;;;;;:::i;:::-;;20390:449;;20325:521;:::o;20390:449::-;20501:29;20492:5;:38;;;;;;;;:::i;:::-;;20488:351;;20547:34;;-1:-1:-1;;;20547:34:0;;17488:2:1;20547:34:0;;;17470:21:1;17527:2;17507:18;;;17500:30;17566:26;17546:18;;;17539:54;17610:18;;20547:34:0;17286:348:1;20488:351:0;20612:35;20603:5;:44;;;;;;;;:::i;:::-;;20599:240;;20664:41;;-1:-1:-1;;;20664:41:0;;17841:2:1;20664:41:0;;;17823:21:1;17880:2;17860:18;;;17853:30;17919:33;17899:18;;;17892:61;17970:18;;20664:41:0;17639:355:1;20599:240:0;20736:30;20727:5;:39;;;;;;;;:::i;:::-;;20723:116;;20783:44;;-1:-1:-1;;;20783:44:0;;18201:2:1;20783:44:0;;;18183:21:1;18240:2;18220:18;;;18213:30;18279:34;18259:18;;;18252:62;-1:-1:-1;;;18330:18:1;;;18323:32;18372:19;;20783:44:0;17999:398:1;24865:1477:0;24953:7;;25887:66;25874:79;;25870:163;;;-1:-1:-1;25986:1:0;;-1:-1:-1;25990:30:0;25970:51;;25870:163;26147:24;;;26130:14;26147:24;;;;;;;;;18629:25:1;;;18702:4;18690:17;;18670:18;;;18663:45;;;;18724:18;;;18717:34;;;18767:18;;;18760:34;;;26147:24:0;;18601:19:1;;26147:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;26147:24:0;;-1:-1:-1;;26147:24:0;;;-1:-1:-1;;;;;;;26186:20:0;;26182:103;;26239:1;26243:29;26223:50;;;;;;;26182:103;26305:6;-1:-1:-1;26313:20:0;;-1:-1:-1;24865:1477:0;;;;;;;;:::o;14:418:1:-;163:2;152:9;145:21;126:4;195:6;189:13;238:6;233:2;222:9;218:18;211:34;297:6;292:2;284:6;280:15;275:2;264:9;260:18;254:50;353:1;348:2;339:6;328:9;324:22;320:31;313:42;423:2;416;412:7;407:2;399:6;395:15;391:29;380:9;376:45;372:54;364:62;;;14:418;;;;:::o;437:173::-;505:20;;-1:-1:-1;;;;;554:31:1;;544:42;;534:70;;600:1;597;590:12;534:70;437:173;;;:::o;615:300::-;683:6;691;744:2;732:9;723:7;719:23;715:32;712:52;;;760:1;757;750:12;712:52;783:29;802:9;783:29;:::i;:::-;773:39;881:2;866:18;;;;853:32;;-1:-1:-1;;;615:300:1:o;1502:374::-;1579:6;1587;1595;1648:2;1636:9;1627:7;1623:23;1619:32;1616:52;;;1664:1;1661;1654:12;1616:52;1687:29;1706:9;1687:29;:::i;:::-;1677:39;;1735:38;1769:2;1758:9;1754:18;1735:38;:::i;:::-;1502:374;;1725:48;;-1:-1:-1;;;1842:2:1;1827:18;;;;1814:32;;1502:374::o;1881:518::-;1957:6;1965;1973;2026:2;2014:9;2005:7;2001:23;1997:32;1994:52;;;2042:1;2039;2032:12;1994:52;2087:23;;;-1:-1:-1;2207:2:1;2192:18;;2179:32;;-1:-1:-1;2289:2:1;2274:18;;2261:32;2337:10;2324:24;;2312:37;;2302:65;;2363:1;2360;2353:12;2302:65;2386:7;2376:17;;;1881:518;;;;;:::o;2593:186::-;2652:6;2705:2;2693:9;2684:7;2680:23;2676:32;2673:52;;;2721:1;2718;2711:12;2673:52;2744:29;2763:9;2744:29;:::i;2784:226::-;2843:6;2896:2;2884:9;2875:7;2871:23;2867:32;2864:52;;;2912:1;2909;2902:12;2864:52;-1:-1:-1;2957:23:1;;2784:226;-1:-1:-1;2784:226:1:o;3015:587::-;3101:6;3109;3117;3125;3178:3;3166:9;3157:7;3153:23;3149:33;3146:53;;;3195:1;3192;3185:12;3146:53;-1:-1:-1;;3240:23:1;;;3360:2;3345:18;;3332:32;;-1:-1:-1;3463:2:1;3448:18;;3435:32;;3566:2;3551:18;3538:32;;-1:-1:-1;3015:587:1;-1:-1:-1;3015:587:1:o;3607:347::-;3658:8;3668:6;3722:3;3715:4;3707:6;3703:17;3699:27;3689:55;;3740:1;3737;3730:12;3689:55;-1:-1:-1;3763:20:1;;3806:18;3795:30;;3792:50;;;3838:1;3835;3828:12;3792:50;3875:4;3867:6;3863:17;3851:29;;3927:3;3920:4;3911:6;3903;3899:19;3895:30;3892:39;3889:59;;;3944:1;3941;3934:12;3959:483;4038:6;4046;4054;4107:2;4095:9;4086:7;4082:23;4078:32;4075:52;;;4123:1;4120;4113:12;4075:52;4163:9;4150:23;4196:18;4188:6;4185:30;4182:50;;;4228:1;4225;4218:12;4182:50;4267:58;4317:7;4308:6;4297:9;4293:22;4267:58;:::i;:::-;4344:8;;-1:-1:-1;4241:84:1;-1:-1:-1;4398:38:1;;-1:-1:-1;4432:2:1;4417:18;;4398:38;:::i;:::-;4388:48;;3959:483;;;;;:::o;4447:597::-;4535:6;4543;4551;4559;4612:2;4600:9;4591:7;4587:23;4583:32;4580:52;;;4628:1;4625;4618:12;4580:52;4673:23;;;-1:-1:-1;4771:2:1;4756:18;;4743:32;4798:18;4787:30;;4784:50;;;4830:1;4827;4820:12;4784:50;4869:58;4919:7;4910:6;4899:9;4895:22;4869:58;:::i;:::-;4946:8;;-1:-1:-1;4843:84:1;-1:-1:-1;5000:38:1;;-1:-1:-1;5034:2:1;5019:18;;5000:38;:::i;:::-;4990:48;;4447:597;;;;;;;:::o;5049:300::-;5117:6;5125;5178:2;5166:9;5157:7;5153:23;5149:32;5146:52;;;5194:1;5191;5184:12;5146:52;5239:23;;;-1:-1:-1;5305:38:1;5339:2;5324:18;;5305:38;:::i;:::-;5295:48;;5049:300;;;;;:::o;5354:273::-;5410:6;5463:2;5451:9;5442:7;5438:23;5434:32;5431:52;;;5479:1;5476;5469:12;5431:52;5518:9;5505:23;5571:5;5564:13;5557:21;5550:5;5547:32;5537:60;;5593:1;5590;5583:12;5829:127;5890:10;5885:3;5881:20;5878:1;5871:31;5921:4;5918:1;5911:15;5945:4;5942:1;5935:15;5961:1028;6038:6;6046;6099:2;6087:9;6078:7;6074:23;6070:32;6067:52;;;6115:1;6112;6105:12;6067:52;6155:9;6142:23;6188:18;6180:6;6177:30;6174:50;;;6220:1;6217;6210:12;6174:50;6243:22;;6296:4;6288:13;;6284:27;-1:-1:-1;6274:55:1;;6325:1;6322;6315:12;6274:55;6365:2;6352:16;6391:18;6383:6;6380:30;6377:56;;;6413:18;;:::i;:::-;6462:2;6456:9;6554:2;6516:17;;-1:-1:-1;;6512:31:1;;;6545:2;6508:40;6504:54;6492:67;;6589:18;6574:34;;6610:22;;;6571:62;6568:88;;;6636:18;;:::i;:::-;6672:2;6665:22;6696;;;6737:15;;;6754:4;6733:26;6730:39;-1:-1:-1;6727:59:1;;;6782:1;6779;6772:12;6727:59;6842:6;6835:4;6831:2;6827:13;6820:4;6812:6;6808:17;6795:54;6897:1;6890:4;6881:6;6873;6869:19;6865:30;6858:41;6918:6;6908:16;;;;;6943:40;6977:4;6966:9;6962:20;6943:40;:::i;6994:260::-;7062:6;7070;7123:2;7111:9;7102:7;7098:23;7094:32;7091:52;;;7139:1;7136;7129:12;7091:52;7162:29;7181:9;7162:29;:::i;:::-;7152:39;;7210:38;7244:2;7233:9;7229:18;7210:38;:::i;7259:380::-;7338:1;7334:12;;;;7381;;;7402:61;;7456:4;7448:6;7444:17;7434:27;;7402:61;7509:2;7501:6;7498:14;7478:18;7475:38;7472:161;;7555:10;7550:3;7546:20;7543:1;7536:31;7590:4;7587:1;7580:15;7618:4;7615:1;7608:15;7472:161;;7259:380;;;:::o;8053:356::-;8255:2;8237:21;;;8274:18;;;8267:30;8333:34;8328:2;8313:18;;8306:62;8400:2;8385:18;;8053:356::o;8414:127::-;8475:10;8470:3;8466:20;8463:1;8456:31;8506:4;8503:1;8496:15;8530:4;8527:1;8520:15;8546:125;8611:9;;;8632:10;;;8629:36;;;8645:18;;:::i;8676:375::-;8764:1;8782:5;8796:249;8817:1;8807:8;8804:15;8796:249;;;8867:4;8862:3;8858:14;8852:4;8849:24;8846:50;;;8876:18;;:::i;:::-;8926:1;8916:8;8912:16;8909:49;;;8940:16;;;;8909:49;9023:1;9019:16;;;;;8979:15;;8796:249;;;8676:375;;;;;;:::o;9056:902::-;9105:5;9135:8;9125:80;;-1:-1:-1;9176:1:1;9190:5;;9125:80;9224:4;9214:76;;-1:-1:-1;9261:1:1;9275:5;;9214:76;9306:4;9324:1;9319:59;;;;9392:1;9387:174;;;;9299:262;;9319:59;9349:1;9340:10;;9363:5;;;9387:174;9424:3;9414:8;9411:17;9408:43;;;9431:18;;:::i;:::-;-1:-1:-1;;9487:1:1;9473:16;;9546:5;;9299:262;;9645:2;9635:8;9632:16;9626:3;9620:4;9617:13;9613:36;9607:2;9597:8;9594:16;9589:2;9583:4;9580:12;9576:35;9573:77;9570:203;;;-1:-1:-1;9682:19:1;;;9758:5;;9570:203;9805:42;-1:-1:-1;;9830:8:1;9824:4;9805:42;:::i;:::-;9883:6;9879:1;9875:6;9871:19;9862:7;9859:32;9856:58;;;9894:18;;:::i;:::-;9932:20;;9056:902;-1:-1:-1;;;9056:902:1:o;9963:140::-;10021:5;10050:47;10091:4;10081:8;10077:19;10071:4;10050:47;:::i;10108:128::-;10175:9;;;10196:11;;;10193:37;;;10210:18;;:::i;10241:217::-;10281:1;10307;10297:132;;10351:10;10346:3;10342:20;10339:1;10332:31;10386:4;10383:1;10376:15;10414:4;10411:1;10404:15;10297:132;-1:-1:-1;10443:9:1;;10241:217::o;10463:168::-;10536:9;;;10567;;10584:15;;;10578:22;;10564:37;10554:71;;10605:18;;:::i;17154:127::-;17215:10;17210:3;17206:20;17203:1;17196:31;17246:4;17243:1;17236:15;17270:4;17267:1;17260:15
Swarm Source
ipfs://67da17b212a483805080b004adb1d60a7726635b10063cb815d8653dea1e773c
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.