ERC-20
Security
Overview
Max Total Supply
60,000,000 CVNX
Holders
413 (0.00%)
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
CVNX
Compiler Version
v0.8.4+commit.c7e474f2
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: GPL-3.0 pragma solidity 0.8.4; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; import "./ICVNXGovernance.sol"; import "./ICVNX.sol"; /// @notice CVNX token contract. contract CVNX is ICVNX, ERC20("CVNX", "CVNX"), Ownable { event TokenLocked(uint256 indexed amount, address tokenOwner); event TokenUnlocked(uint256 indexed amount, address tokenOwner); /// @notice Governance contract. ICVNXGovernance public cvnxGovernanceContract; IERC20Metadata public cvnContract; struct Limit { uint256 percent; uint256 limitAmount; uint256 period; } Limit public limit; bool public isLimitsActive; mapping(address => uint256) public addressToEndLockTimestamp; mapping(address => bool) public fromLimitWhitelist; mapping(address => bool) public toLimitWhitelist; /// @notice Locked token amount for each address. mapping(address => uint256) public lockedAmount; /// @notice Governance contract created in constructor. constructor(address _cvnContract) { uint256 _toMint = 15000000000000000000000000; _mint(msg.sender, _toMint); approve(address(this), _toMint); cvnContract = IERC20Metadata(_cvnContract); } /// @notice Modifier describe that call available only from governance contract. modifier onlyGovContract() { require(msg.sender == address(cvnxGovernanceContract), "[E-31] - Not a governance contract."); _; } /// @notice Lock tokens on holder balance. /// @param _tokenOwner Token holder /// @param _tokenAmount Amount to lock function lock(address _tokenOwner, uint256 _tokenAmount) external override onlyGovContract { require(_tokenAmount > 0, "[E-41] - The amount to be locked must be greater than zero."); uint256 _balance = balanceOf(_tokenOwner); uint256 _toLock = lockedAmount[_tokenOwner] + _tokenAmount; require(_toLock <= _balance, "[E-42] - Not enough token on account."); lockedAmount[_tokenOwner] = _toLock; emit TokenLocked(_tokenAmount, _tokenOwner); } /// @notice Unlock tokens on holder balance. /// @param _tokenOwner Token holder /// @param _tokenAmount Amount to lock function unlock(address _tokenOwner, uint256 _tokenAmount) external override onlyGovContract { uint256 _lockedAmount = lockedAmount[_tokenOwner]; if (_tokenAmount > _lockedAmount) { _tokenAmount = _lockedAmount; } lockedAmount[_tokenOwner] = _lockedAmount - _tokenAmount; emit TokenUnlocked(_tokenAmount, _tokenOwner); } /// @notice Swap CVN to CVNX tokens /// @param _amount Token amount to swap function swap(uint256 _amount) external override returns (bool) { cvnContract.transferFrom(msg.sender, 0x4e07dc9D1aBCf1335d1EaF4B2e28b45d5892758E, _amount); uint256 _newAmount = _amount * (10 ** (decimals() - cvnContract.decimals())); this.transferFrom(owner(), msg.sender, _newAmount); return true; } /// @notice Transfer stuck tokens /// @param _token Token contract address /// @param _to Receiver address /// @param _amount Token amount function transferStuckERC20( IERC20 _token, address _to, uint256 _amount ) external override onlyOwner { require(_token.transfer(_to, _amount), "[E-56] - Transfer failed."); } /// @notice Set CVNXGovernance contract. /// @param _address CVNXGovernance contract address function setCvnxGovernanceContract(address _address) external override onlyOwner { if (address(cvnxGovernanceContract) != address(0)) { require(!cvnxGovernanceContract.getIsAvailableToCreate(), "[E-92] - Old governance contract still active."); } cvnxGovernanceContract = ICVNXGovernance(_address); } /// @notice Mint new CVNX tokens. /// @param _account Address that receive tokens /// @param _amount Tokens amount function mint(address _account, uint256 _amount) external override onlyOwner { require(totalSupply() + _amount <= 60000000000000000000000000, "[E-71] - Can't mint more."); _mint(_account, _amount); } /// @notice Set limit params. /// @param _percent Percentage of the total balance available for transfer /// @param _limitAmount Max amount available for transfer /// @param _period Lock period when user can't transfer tokens function setLimit(uint256 _percent, uint256 _limitAmount, uint256 _period) external override onlyOwner { require(_percent <= getDecimals(), "[E-89] - Percent should be less than 1."); require(_percent > 0, "[E-90] - Percent can't be a zero."); require(_limitAmount > 0, "[E-90] - Limit amount can't be a zero."); limit.percent = _percent; limit.limitAmount = _limitAmount; limit.period = _period; } /// @notice Add address to 'from' whitelist /// @param _newAddress New address function addFromWhitelist(address _newAddress) external override onlyOwner { fromLimitWhitelist[_newAddress] = true; } /// @notice Remove address from 'from' whitelist /// @param _oldAddress Old address function removeFromWhitelist(address _oldAddress) external override onlyOwner { fromLimitWhitelist[_oldAddress] = false; } /// @notice Add address to 'to' whitelist /// @param _newAddress New address function addToWhitelist(address _newAddress) external override onlyOwner { toLimitWhitelist[_newAddress] = true; } /// @notice Remove address from 'to' whitelist /// @param _oldAddress Old address function removeToWhitelist(address _oldAddress) external override onlyOwner { toLimitWhitelist[_oldAddress] = false; } /// @notice Change limit activity status. function changeLimitActivityStatus() external override onlyOwner { isLimitsActive = !isLimitsActive; } /// @notice Check that locked amount less then transfer amount. /// @notice Check limits. /// @param _from From address /// @param _to To address /// @param _amount Token amount function _beforeTokenTransfer(address _from, address _to, uint256 _amount) internal override { if (_from != address(0)) { uint256 _availableAmount = balanceOf(_from) - lockedAmount[_from]; require(_availableAmount >= _amount, "[E-61] - Transfer amount exceeds available tokens."); if (isLimitsActive && fromLimitWhitelist[_from] == false && toLimitWhitelist[_to] == false) { require(block.timestamp > addressToEndLockTimestamp[_from], "[E-62] - Tokens are locked until the end of the period."); require(_amount <= limit.limitAmount, "[E-63] - The maximum limit has been reached."); require(_amount <= _availableAmount * limit.percent / getDecimals(), "[E-64] - The maximum limit has been reached."); addressToEndLockTimestamp[_from] = block.timestamp + limit.period; } } } function getDecimals() private pure returns (uint256) { return 10 ** 27; } }
// SPDX-License-Identifier: GPL-3.0 pragma solidity 0.8.4; /// @notice ICVNXGovernance interface for CVNXGovernance contract. interface ICVNXGovernance { enum PollType {PROPOSAL, EXECUTIVE, EVENT, PRIVATE} enum PollStatus {PENDING, APPROVED, REJECTED, DRAW} enum VoteType {FOR, AGAINST} /// @notice Poll structure. struct Poll { uint64 pollDeadline; uint64 pollStopped; PollType pollType; address pollOwner; string pollInfo; uint256 forWeight; uint256 againstWeight; } /// @notice Address vote structure. struct Vote { VoteType voteType; uint256 voteWeight; } /// @notice Return variable isAvailableToCreate. function getIsAvailableToCreate() external view returns (bool); /// @notice Enable or disable possibility to create new poll in contract. function setIsAvailableToCreate() external; /// @notice Create PROPOSAL poll. /// @param _pollDeadline Poll deadline /// @param _pollInfo Info about poll function createProposalPoll(uint64 _pollDeadline, string memory _pollInfo) external; /// @notice Create EXECUTIVE poll. /// @param _pollDeadline Poll deadline /// @param _pollInfo Info about poll function createExecutivePoll(uint64 _pollDeadline, string memory _pollInfo) external; /// @notice Create EVENT poll. /// @param _pollDeadline Poll deadline /// @param _pollInfo Info about poll function createEventPoll(uint64 _pollDeadline, string memory _pollInfo) external; /// @notice Create PRIVATE poll. /// @param _pollDeadline Poll deadline /// @param _pollInfo Info about poll /// @param _verifiedAddresses Array of verified addresses for poll function createPrivatePoll( uint64 _pollDeadline, string memory _pollInfo, address[] memory _verifiedAddresses ) external; /// @notice Send tokens as vote in poll. Tokens will be lock. /// @param _pollNum Poll number /// @param _voteType Vote type (FOR, AGAINST) /// @param _voteWeight Vote weight in CVNX tokens function vote( uint256 _pollNum, VoteType _voteType, uint256 _voteWeight ) external; /// @notice Unlock tokens for poll. Poll should be ended. /// @param _pollNum Poll number function unlockTokensInPoll(uint256 _pollNum) external; /// @notice Stop poll before deadline. /// @param _pollNum Poll number function stopPoll(uint256 _pollNum) external; /// @notice Return poll status (PENDING, APPROVED, REJECTED, DRAW). /// @param _pollNum Poll number /// @return Poll number and status function getPollStatus(uint256 _pollNum) external view returns (uint256, PollStatus); /// @notice Return the poll expiration timestamp. /// @param _pollNum Poll number /// @return Poll deadline function getPollExpirationTime(uint256 _pollNum) external view returns (uint64); /// @notice Return the poll stop timestamp. /// @param _pollNum Poll number /// @return Poll stop time function getPollStopTime(uint256 _pollNum) external view returns (uint64); /// @notice Return the complete list of polls an address has voted in. /// @param _voter Voter address /// @return Index - poll number. True - if address voted in poll function getPollHistory(address _voter) external view returns (bool[] memory); /// @notice Return the vote info for a given poll for an address. /// @param _pollNum Poll number /// @param _voter Voter address /// @return Info about voter vote function getPollInfoForVoter(uint256 _pollNum, address _voter) external view returns (Vote memory); /// @notice Checks if a user address has voted for a specific poll. /// @param _pollNum Poll number /// @param _voter Voter address /// @return True if address voted in poll function getIfUserHasVoted(uint256 _pollNum, address _voter) external view returns (bool); /// @notice Return the amount of tokens that are locked for a given voter address. /// @param _voter Voter address /// @return Poll number function getLockedAmount(address _voter) external view returns (uint256); /// @notice Return the amount of locked tokens of the specific poll. /// @param _pollNum Poll number /// @param _voter Voter address /// @return Locked tokens amount for specific poll function getPollLockedAmount(uint256 _pollNum, address _voter) external view returns (uint256); }
// SPDX-License-Identifier: GPL-3.0 pragma solidity 0.8.4; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; /// @notice ICVNX interface for CVNX contract. interface ICVNX is IERC20 { /// @notice Mint new CVNX tokens. /// @param _account Address that receive tokens /// @param _amount Tokens amount function mint(address _account, uint256 _amount) external; /// @notice Lock tokens on holder balance. /// @param _tokenOwner Token holder /// @param _tokenAmount Amount to lock function lock(address _tokenOwner, uint256 _tokenAmount) external; /// @notice Unlock tokens on holder balance. /// @param _tokenOwner Token holder /// @param _tokenAmount Amount to lock function unlock(address _tokenOwner, uint256 _tokenAmount) external; /// @notice Swap CVN to CVNX tokens /// @param _amount Token amount to swap function swap(uint256 _amount) external returns (bool); /// @notice Transfer stuck tokens /// @param _token Token contract address /// @param _to Receiver address /// @param _amount Token amount function transferStuckERC20( IERC20 _token, address _to, uint256 _amount ) external; /// @notice Set CVNXGovernance contract. /// @param _address CVNXGovernance contract address function setCvnxGovernanceContract(address _address) external; /// @notice Set limit params. /// @param _percent Percentage of the total balance available for transfer /// @param _limitAmount Max amount available for transfer /// @param _period Lock period when user can't transfer tokens function setLimit(uint256 _percent, uint256 _limitAmount, uint256 _period) external; /// @notice Add address to 'from' whitelist /// @param _newAddress New address function addFromWhitelist(address _newAddress) external; /// @notice Remove address from 'from' whitelist /// @param _oldAddress Old address function removeFromWhitelist(address _oldAddress) external; /// @notice Add address to 'to' whitelist /// @param _newAddress New address function addToWhitelist(address _newAddress) external; /// @notice Remove address from 'to' whitelist /// @param _oldAddress Old address function removeToWhitelist(address _oldAddress) external; /// @notice Change limit activity status. function changeLimitActivityStatus() external; }
// SPDX-License-Identifier: MIT 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) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../IERC20.sol"; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC20.sol"; import "./extensions/IERC20Metadata.sol"; import "../../utils/Context.sol"; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin guidelines: functions revert instead * of returning `false` on failure. This behavior is nonetheless conventional * and does not conflict with the expectations of ERC20 applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The defaut 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"); _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"); _approve(_msgSender(), spender, currentAllowance - subtractedValue); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is 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"); _balances[sender] = senderBalance - amount; _balances[recipient] += amount; emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `to` 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); } /** * @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"); _balances[account] = accountBalance - amount; _totalSupply -= amount; emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve(address owner, address spender, uint256 amount) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev 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 to 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 { } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), 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 { emit OwnershipTransferred(_owner, address(0)); _owner = 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"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } }
{ "remappings": [], "optimizer": { "enabled": false, "runs": 200 }, "evmVersion": "istanbul", "libraries": {}, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_cvnContract","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"tokenOwner","type":"address"}],"name":"TokenLocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"tokenOwner","type":"address"}],"name":"TokenUnlocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"_newAddress","type":"address"}],"name":"addFromWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newAddress","type":"address"}],"name":"addToWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressToEndLockTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"changeLimitActivityStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cvnContract","outputs":[{"internalType":"contract IERC20Metadata","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cvnxGovernanceContract","outputs":[{"internalType":"contract ICVNXGovernance","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"fromLimitWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isLimitsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limit","outputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"limitAmount","type":"uint256"},{"internalType":"uint256","name":"period","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenOwner","type":"address"},{"internalType":"uint256","name":"_tokenAmount","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lockedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_oldAddress","type":"address"}],"name":"removeFromWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_oldAddress","type":"address"}],"name":"removeToWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setCvnxGovernanceContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"uint256","name":"_limitAmount","type":"uint256"},{"internalType":"uint256","name":"_period","type":"uint256"}],"name":"setLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"swap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"toLimitWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transferStuckERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenOwner","type":"address"},{"internalType":"uint256","name":"_tokenAmount","type":"uint256"}],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162004e6738038062004e678339818101604052810190620000379190620009e4565b6040518060400160405280600481526020017f43564e58000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f43564e58000000000000000000000000000000000000000000000000000000008152508160039080519060200190620000bb9291906200091d565b508060049080519060200190620000d49291906200091d565b5050506000620000e96200020660201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060006a0c685fa11e01ec6f0000009050620001aa33826200020e60201b60201c565b620001bc30826200037360201b60201c565b5081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050506200109d565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000281576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002789062000bfe565b60405180910390fd5b6200029560008383620003a160201b60201c565b8060026000828254620002a9919062000c4e565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000300919062000c4e565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000367919062000c20565b60405180910390a35050565b600062000397620003896200020660201b60201c565b8484620006ee60201b60201c565b6001905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614620006e9576000600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200042985620008c160201b60201c565b62000435919062000d44565b9050818110156200047d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004749062000b98565b60405180910390fd5b600b60009054906101000a900460ff168015620004ea575060001515600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b801562000547575060001515600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b15620006e757600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020544211620005d1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005c89062000b76565b60405180910390fd5b6008600101548211156200061c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006139062000b54565b60405180910390fd5b6200062c6200090960201b60201c565b600860000154826200063f919062000ce3565b6200064b919062000cab565b82111562000690576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006879062000bba565b60405180910390fd5b60086002015442620006a3919062000c4e565b600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141562000761576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007589062000bdc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620007d4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007cb9062000b32565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051620008b4919062000c20565b60405180910390a3505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006b033b2e3c9fd0803ce8000000905090565b8280546200092b9062000dbd565b90600052602060002090601f0160209004810192826200094f57600085556200099b565b82601f106200096a57805160ff19168380011785556200099b565b828001600101855582156200099b579182015b828111156200099a5782518255916020019190600101906200097d565b5b509050620009aa9190620009ae565b5090565b5b80821115620009c9576000816000905550600101620009af565b5090565b600081519050620009de8162001083565b92915050565b600060208284031215620009f757600080fd5b600062000a0784828501620009cd565b91505092915050565b600062000a1f60228362000c3d565b915062000a2c8262000e80565b604082019050919050565b600062000a46602c8362000c3d565b915062000a538262000ecf565b604082019050919050565b600062000a6d60378362000c3d565b915062000a7a8262000f1e565b604082019050919050565b600062000a9460328362000c3d565b915062000aa18262000f6d565b604082019050919050565b600062000abb602c8362000c3d565b915062000ac88262000fbc565b604082019050919050565b600062000ae260248362000c3d565b915062000aef826200100b565b604082019050919050565b600062000b09601f8362000c3d565b915062000b16826200105a565b602082019050919050565b62000b2c8162000db3565b82525050565b6000602082019050818103600083015262000b4d8162000a10565b9050919050565b6000602082019050818103600083015262000b6f8162000a37565b9050919050565b6000602082019050818103600083015262000b918162000a5e565b9050919050565b6000602082019050818103600083015262000bb38162000a85565b9050919050565b6000602082019050818103600083015262000bd58162000aac565b9050919050565b6000602082019050818103600083015262000bf78162000ad3565b9050919050565b6000602082019050818103600083015262000c198162000afa565b9050919050565b600060208201905062000c37600083018462000b21565b92915050565b600082825260208201905092915050565b600062000c5b8262000db3565b915062000c688362000db3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000ca05762000c9f62000df3565b5b828201905092915050565b600062000cb88262000db3565b915062000cc58362000db3565b92508262000cd85762000cd762000e22565b5b828204905092915050565b600062000cf08262000db3565b915062000cfd8362000db3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000d395762000d3862000df3565b5b828202905092915050565b600062000d518262000db3565b915062000d5e8362000db3565b92508282101562000d745762000d7362000df3565b5b828203905092915050565b600062000d8c8262000d93565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000600282049050600182168062000dd657607f821691505b6020821081141562000ded5762000dec62000e51565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f5b452d36335d202d20546865206d6178696d756d206c696d697420686173206260008201527f65656e20726561636865642e0000000000000000000000000000000000000000602082015250565b7f5b452d36325d202d20546f6b656e7320617265206c6f636b656420756e74696c60008201527f2074686520656e64206f662074686520706572696f642e000000000000000000602082015250565b7f5b452d36315d202d205472616e7366657220616d6f756e74206578636565647360008201527f20617661696c61626c6520746f6b656e732e0000000000000000000000000000602082015250565b7f5b452d36345d202d20546865206d6178696d756d206c696d697420686173206260008201527f65656e20726561636865642e0000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6200108e8162000d7f565b81146200109a57600080fd5b50565b613dba80620010ad6000396000f3fe608060405234801561001057600080fd5b50600436106102065760003560e01c80637488ab781161011a578063a153e708116100ad578063cf19e0c61161007c578063cf19e0c614610615578063dd62ed3e1461061f578063e43252d71461064f578063f2fde38b1461066b578063fe1ced5e1461068757610206565b8063a153e70814610565578063a457c2d714610595578063a4d66daf146105c5578063a9059cbb146105e557610206565b80638ab1d681116100e95780638ab1d681146104dd5780638da5cb5b146104f957806394b918de1461051757806395d89b411461054757610206565b80637488ab781461046b5780637eee288d14610487578063808de699146104a3578063855c6c58146104bf57610206565b8063395093511161019d578063555ba5711161016c578063555ba571146103c75780635c31a713146103f75780635f9db0b81461041357806370a0823114610431578063715018a61461046157610206565b806339509351146103415780633e43b4561461037157806340c10f191461038f578063531ae465146103ab57610206565b806318160ddd116101d957806318160ddd146102b957806323b872dd146102d7578063282d3fdf14610307578063313ce5671461032357610206565b8063054a0c321461020b57806306fdde031461023b578063095ea7b3146102595780630b1de47414610289575b600080fd5b610225600480360381019061022091906127ff565b6106a3565b604051610232919061318e565b60405180910390f35b6102436106bb565b6040516102509190612e8c565b60405180910390f35b610273600480360381019061026e91906128b3565b61074d565b6040516102809190612e3b565b60405180910390f35b6102a3600480360381019061029e91906127ff565b61076b565b6040516102b09190612e3b565b60405180910390f35b6102c161078b565b6040516102ce919061318e565b60405180910390f35b6102f160048036038101906102ec9190612864565b610795565b6040516102fe9190612e3b565b60405180910390f35b610321600480360381019061031c91906128b3565b610896565b005b61032b610a8a565b60405161033891906131e0565b60405180910390f35b61035b600480360381019061035691906128b3565b610a93565b6040516103689190612e3b565b60405180910390f35b610379610b3f565b6040516103869190612e71565b60405180910390f35b6103a960048036038101906103a491906128b3565b610b65565b005b6103c560048036038101906103c091906127ff565b610c4f565b005b6103e160048036038101906103dc91906127ff565b610d26565b6040516103ee9190612e3b565b60405180910390f35b610411600480360381019061040c9190612990565b610d46565b005b61041b610eb5565b6040516104289190612e56565b60405180910390f35b61044b600480360381019061044691906127ff565b610edb565b604051610458919061318e565b60405180910390f35b610469610f23565b005b61048560048036038101906104809190612918565b611060565b005b6104a1600480360381019061049c91906128b3565b6111ad565b005b6104bd60048036038101906104b891906127ff565b611319565b005b6104c7611510565b6040516104d49190612e3b565b60405180910390f35b6104f760048036038101906104f291906127ff565b611523565b005b6105016115fa565b60405161050e9190612dc0565b60405180910390f35b610531600480360381019061052c9190612967565b611624565b60405161053e9190612e3b565b60405180910390f35b61054f61185a565b60405161055c9190612e8c565b60405180910390f35b61057f600480360381019061057a91906127ff565b6118ec565b60405161058c919061318e565b60405180910390f35b6105af60048036038101906105aa91906128b3565b611904565b6040516105bc9190612e3b565b60405180910390f35b6105cd6119f8565b6040516105dc939291906131a9565b60405180910390f35b6105ff60048036038101906105fa91906128b3565b611a10565b60405161060c9190612e3b565b60405180910390f35b61061d611a2e565b005b61063960048036038101906106349190612828565b611ad6565b604051610646919061318e565b60405180910390f35b610669600480360381019061066491906127ff565b611b5d565b005b610685600480360381019061068091906127ff565b611c34565b005b6106a1600480360381019061069c91906127ff565b611de0565b005b600c6020528060005260406000206000915090505481565b6060600380546106ca906135b3565b80601f01602080910402602001604051908101604052809291908181526020018280546106f6906135b3565b80156107435780601f1061071857610100808354040283529160200191610743565b820191906000526020600020905b81548152906001019060200180831161072657829003601f168201915b5050505050905090565b600061076161075a611eb7565b8484611ebf565b6001905092915050565b600e6020528060005260406000206000915054906101000a900460ff1681565b6000600254905090565b60006107a284848461208a565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006107ed611eb7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561086d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108649061304e565b60405180910390fd5b61088a85610879611eb7565b85846108859190613469565b611ebf565b60019150509392505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610926576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091d9061312e565b60405180910390fd5b60008111610969576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109609061310e565b60405180910390fd5b600061097483610edb565b9050600082600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546109c39190613217565b905081811115610a08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ff90612fae565b60405180910390fd5b80600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550827f9ecfd70e9ff36df72989324a49559383d39f9290d700b10cf5ac10dcb68d264385604051610a7c9190612dc0565b60405180910390a250505050565b60006012905090565b6000610b35610aa0611eb7565b848460016000610aae611eb7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b309190613217565b611ebf565b6001905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610b6d611eb7565b73ffffffffffffffffffffffffffffffffffffffff16610b8b6115fa565b73ffffffffffffffffffffffffffffffffffffffff1614610be1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd89061306e565b60405180910390fd5b6a31a17e847807b1bc00000081610bf661078b565b610c009190613217565b1115610c41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3890612fce565b60405180910390fd5b610c4b8282612309565b5050565b610c57611eb7565b73ffffffffffffffffffffffffffffffffffffffff16610c756115fa565b73ffffffffffffffffffffffffffffffffffffffff1614610ccb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc29061306e565b60405180910390fd5b6001600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600d6020528060005260406000206000915054906101000a900460ff1681565b610d4e611eb7565b73ffffffffffffffffffffffffffffffffffffffff16610d6c6115fa565b73ffffffffffffffffffffffffffffffffffffffff1614610dc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db99061306e565b60405180910390fd5b610dca61245d565b831115610e0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0390612fee565b60405180910390fd5b60008311610e4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4690612f4e565b60405180910390fd5b60008211610e92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8990612f2e565b60405180910390fd5b826008600001819055508160086001018190555080600860020181905550505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f2b611eb7565b73ffffffffffffffffffffffffffffffffffffffff16610f496115fa565b73ffffffffffffffffffffffffffffffffffffffff1614610f9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f969061306e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611068611eb7565b73ffffffffffffffffffffffffffffffffffffffff166110866115fa565b73ffffffffffffffffffffffffffffffffffffffff16146110dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d39061306e565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401611117929190612e12565b602060405180830381600087803b15801561113157600080fd5b505af1158015611145573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116991906128ef565b6111a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119f906130ee565b60405180910390fd5b505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461123d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112349061312e565b60405180910390fd5b6000600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508082111561128d578091505b81816112999190613469565b600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550817f0fe7d9801197f79ef3b1595d19379eb58f0fff5f98b0f6d6f34c03cae5306c378460405161130c9190612dc0565b60405180910390a2505050565b611321611eb7565b73ffffffffffffffffffffffffffffffffffffffff1661133f6115fa565b73ffffffffffffffffffffffffffffffffffffffff1614611395576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138c9061306e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114cc57600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b8e4ae9b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561145357600080fd5b505afa158015611467573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148b91906128ef565b156114cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c29061302e565b60405180910390fd5b5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b60009054906101000a900460ff1681565b61152b611eb7565b73ffffffffffffffffffffffffffffffffffffffff166115496115fa565b73ffffffffffffffffffffffffffffffffffffffff161461159f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115969061306e565b60405180910390fd5b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd33734e07dc9d1abcf1335d1eaf4b2e28b45d5892758e856040518463ffffffff1660e01b815260040161169993929190612ddb565b602060405180830381600087803b1580156116b357600080fd5b505af11580156116c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116eb91906128ef565b506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561175657600080fd5b505afa15801561176a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178e91906129df565b611796610a8a565b6117a0919061349d565b600a6117ac91906132f1565b836117b7919061340f565b90503073ffffffffffffffffffffffffffffffffffffffff166323b872dd6117dd6115fa565b33846040518463ffffffff1660e01b81526004016117fd93929190612ddb565b602060405180830381600087803b15801561181757600080fd5b505af115801561182b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184f91906128ef565b506001915050919050565b606060048054611869906135b3565b80601f0160208091040260200160405190810160405280929190818152602001828054611895906135b3565b80156118e25780601f106118b7576101008083540402835291602001916118e2565b820191906000526020600020905b8154815290600101906020018083116118c557829003601f168201915b5050505050905090565b600f6020528060005260406000206000915090505481565b60008060016000611913611eb7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156119d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c79061314e565b60405180910390fd5b6119ed6119db611eb7565b8585846119e89190613469565b611ebf565b600191505092915050565b60088060000154908060010154908060020154905083565b6000611a24611a1d611eb7565b848461208a565b6001905092915050565b611a36611eb7565b73ffffffffffffffffffffffffffffffffffffffff16611a546115fa565b73ffffffffffffffffffffffffffffffffffffffff1614611aaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa19061306e565b60405180910390fd5b600b60009054906101000a900460ff1615600b60006101000a81548160ff021916908315150217905550565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611b65611eb7565b73ffffffffffffffffffffffffffffffffffffffff16611b836115fa565b73ffffffffffffffffffffffffffffffffffffffff1614611bd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd09061306e565b60405180910390fd5b6001600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611c3c611eb7565b73ffffffffffffffffffffffffffffffffffffffff16611c5a6115fa565b73ffffffffffffffffffffffffffffffffffffffff1614611cb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca79061306e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1790612ece565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611de8611eb7565b73ffffffffffffffffffffffffffffffffffffffff16611e066115fa565b73ffffffffffffffffffffffffffffffffffffffff1614611e5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e539061306e565b60405180910390fd5b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f26906130ce565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9690612eee565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161207d919061318e565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156120fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f1906130ae565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561216a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216190612eae565b60405180910390fd5b612175838383612471565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156121fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f290612f6e565b60405180910390fd5b81816122079190613469565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122979190613217565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516122fb919061318e565b60405180910390a350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612379576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123709061316e565b60405180910390fd5b61238560008383612471565b80600260008282546123979190613217565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123ec9190613217565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612451919061318e565b60405180910390a35050565b60006b033b2e3c9fd0803ce8000000905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612791576000600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124f085610edb565b6124fa9190613469565b90508181101561253f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125369061300e565b60405180910390fd5b600b60009054906101000a900460ff1680156125ab575060001515600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b8015612607575060001515600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b1561278f57600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054421161268d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268490612f8e565b60405180910390fd5b6008600101548211156126d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126cc90612f0e565b60405180910390fd5b6126dd61245d565b600860000154826126ee919061340f565b6126f8919061326d565b82111561273a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127319061308e565b60405180910390fd5b6008600201544261274b9190613217565b600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505b505050565b6000813590506127a581613d11565b92915050565b6000815190506127ba81613d28565b92915050565b6000813590506127cf81613d3f565b92915050565b6000813590506127e481613d56565b92915050565b6000815190506127f981613d6d565b92915050565b60006020828403121561281157600080fd5b600061281f84828501612796565b91505092915050565b6000806040838503121561283b57600080fd5b600061284985828601612796565b925050602061285a85828601612796565b9150509250929050565b60008060006060848603121561287957600080fd5b600061288786828701612796565b935050602061289886828701612796565b92505060406128a9868287016127d5565b9150509250925092565b600080604083850312156128c657600080fd5b60006128d485828601612796565b92505060206128e5858286016127d5565b9150509250929050565b60006020828403121561290157600080fd5b600061290f848285016127ab565b91505092915050565b60008060006060848603121561292d57600080fd5b600061293b868287016127c0565b935050602061294c86828701612796565b925050604061295d868287016127d5565b9150509250925092565b60006020828403121561297957600080fd5b6000612987848285016127d5565b91505092915050565b6000806000606084860312156129a557600080fd5b60006129b3868287016127d5565b93505060206129c4868287016127d5565b92505060406129d5868287016127d5565b9150509250925092565b6000602082840312156129f157600080fd5b60006129ff848285016127ea565b91505092915050565b612a11816134d1565b82525050565b612a20816134e3565b82525050565b612a2f81613538565b82525050565b612a3e8161355c565b82525050565b6000612a4f826131fb565b612a598185613206565b9350612a69818560208601613580565b612a7281613672565b840191505092915050565b6000612a8a602383613206565b9150612a9582613690565b604082019050919050565b6000612aad602683613206565b9150612ab8826136df565b604082019050919050565b6000612ad0602283613206565b9150612adb8261372e565b604082019050919050565b6000612af3602c83613206565b9150612afe8261377d565b604082019050919050565b6000612b16602683613206565b9150612b21826137cc565b604082019050919050565b6000612b39602183613206565b9150612b448261381b565b604082019050919050565b6000612b5c602683613206565b9150612b678261386a565b604082019050919050565b6000612b7f603783613206565b9150612b8a826138b9565b604082019050919050565b6000612ba2602583613206565b9150612bad82613908565b604082019050919050565b6000612bc5601983613206565b9150612bd082613957565b602082019050919050565b6000612be8602783613206565b9150612bf382613980565b604082019050919050565b6000612c0b603283613206565b9150612c16826139cf565b604082019050919050565b6000612c2e602e83613206565b9150612c3982613a1e565b604082019050919050565b6000612c51602883613206565b9150612c5c82613a6d565b604082019050919050565b6000612c74602083613206565b9150612c7f82613abc565b602082019050919050565b6000612c97602c83613206565b9150612ca282613ae5565b604082019050919050565b6000612cba602583613206565b9150612cc582613b34565b604082019050919050565b6000612cdd602483613206565b9150612ce882613b83565b604082019050919050565b6000612d00601983613206565b9150612d0b82613bd2565b602082019050919050565b6000612d23603b83613206565b9150612d2e82613bfb565b604082019050919050565b6000612d46602383613206565b9150612d5182613c4a565b604082019050919050565b6000612d69602583613206565b9150612d7482613c99565b604082019050919050565b6000612d8c601f83613206565b9150612d9782613ce8565b602082019050919050565b612dab81613521565b82525050565b612dba8161352b565b82525050565b6000602082019050612dd56000830184612a08565b92915050565b6000606082019050612df06000830186612a08565b612dfd6020830185612a08565b612e0a6040830184612da2565b949350505050565b6000604082019050612e276000830185612a08565b612e346020830184612da2565b9392505050565b6000602082019050612e506000830184612a17565b92915050565b6000602082019050612e6b6000830184612a26565b92915050565b6000602082019050612e866000830184612a35565b92915050565b60006020820190508181036000830152612ea68184612a44565b905092915050565b60006020820190508181036000830152612ec781612a7d565b9050919050565b60006020820190508181036000830152612ee781612aa0565b9050919050565b60006020820190508181036000830152612f0781612ac3565b9050919050565b60006020820190508181036000830152612f2781612ae6565b9050919050565b60006020820190508181036000830152612f4781612b09565b9050919050565b60006020820190508181036000830152612f6781612b2c565b9050919050565b60006020820190508181036000830152612f8781612b4f565b9050919050565b60006020820190508181036000830152612fa781612b72565b9050919050565b60006020820190508181036000830152612fc781612b95565b9050919050565b60006020820190508181036000830152612fe781612bb8565b9050919050565b6000602082019050818103600083015261300781612bdb565b9050919050565b6000602082019050818103600083015261302781612bfe565b9050919050565b6000602082019050818103600083015261304781612c21565b9050919050565b6000602082019050818103600083015261306781612c44565b9050919050565b6000602082019050818103600083015261308781612c67565b9050919050565b600060208201905081810360008301526130a781612c8a565b9050919050565b600060208201905081810360008301526130c781612cad565b9050919050565b600060208201905081810360008301526130e781612cd0565b9050919050565b6000602082019050818103600083015261310781612cf3565b9050919050565b6000602082019050818103600083015261312781612d16565b9050919050565b6000602082019050818103600083015261314781612d39565b9050919050565b6000602082019050818103600083015261316781612d5c565b9050919050565b6000602082019050818103600083015261318781612d7f565b9050919050565b60006020820190506131a36000830184612da2565b92915050565b60006060820190506131be6000830186612da2565b6131cb6020830185612da2565b6131d86040830184612da2565b949350505050565b60006020820190506131f56000830184612db1565b92915050565b600081519050919050565b600082825260208201905092915050565b600061322282613521565b915061322d83613521565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613262576132616135e5565b5b828201905092915050565b600061327882613521565b915061328383613521565b92508261329357613292613614565b5b828204905092915050565b6000808291508390505b60018511156132e8578086048111156132c4576132c36135e5565b5b60018516156132d35780820291505b80810290506132e185613683565b94506132a8565b94509492505050565b60006132fc82613521565b91506133078361352b565b92506133347fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461333c565b905092915050565b60008261334c5760019050613408565b8161335a5760009050613408565b8160018114613370576002811461337a576133a9565b6001915050613408565b60ff84111561338c5761338b6135e5565b5b8360020a9150848211156133a3576133a26135e5565b5b50613408565b5060208310610133831016604e8410600b84101617156133de5782820a9050838111156133d9576133d86135e5565b5b613408565b6133eb848484600161329e565b92509050818404811115613402576134016135e5565b5b81810290505b9392505050565b600061341a82613521565b915061342583613521565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561345e5761345d6135e5565b5b828202905092915050565b600061347482613521565b915061347f83613521565b925082821015613492576134916135e5565b5b828203905092915050565b60006134a88261352b565b91506134b38361352b565b9250828210156134c6576134c56135e5565b5b828203905092915050565b60006134dc82613501565b9050919050565b60008115159050919050565b60006134fa826134d1565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006135438261354a565b9050919050565b600061355582613501565b9050919050565b60006135678261356e565b9050919050565b600061357982613501565b9050919050565b60005b8381101561359e578082015181840152602081019050613583565b838111156135ad576000848401525b50505050565b600060028204905060018216806135cb57607f821691505b602082108114156135df576135de613643565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f5b452d36335d202d20546865206d6178696d756d206c696d697420686173206260008201527f65656e20726561636865642e0000000000000000000000000000000000000000602082015250565b7f5b452d39305d202d204c696d697420616d6f756e742063616e2774206265206160008201527f207a65726f2e0000000000000000000000000000000000000000000000000000602082015250565b7f5b452d39305d202d2050657263656e742063616e27742062652061207a65726f60008201527f2e00000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f5b452d36325d202d20546f6b656e7320617265206c6f636b656420756e74696c60008201527f2074686520656e64206f662074686520706572696f642e000000000000000000602082015250565b7f5b452d34325d202d204e6f7420656e6f75676820746f6b656e206f6e2061636360008201527f6f756e742e000000000000000000000000000000000000000000000000000000602082015250565b7f5b452d37315d202d2043616e2774206d696e74206d6f72652e00000000000000600082015250565b7f5b452d38395d202d2050657263656e742073686f756c64206265206c6573732060008201527f7468616e20312e00000000000000000000000000000000000000000000000000602082015250565b7f5b452d36315d202d205472616e7366657220616d6f756e74206578636565647360008201527f20617661696c61626c6520746f6b656e732e0000000000000000000000000000602082015250565b7f5b452d39325d202d204f6c6420676f7665726e616e636520636f6e747261637460008201527f207374696c6c206163746976652e000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5b452d36345d202d20546865206d6178696d756d206c696d697420686173206260008201527f65656e20726561636865642e0000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f5b452d35365d202d205472616e73666572206661696c65642e00000000000000600082015250565b7f5b452d34315d202d2054686520616d6f756e7420746f206265206c6f636b656460008201527f206d7573742062652067726561746572207468616e207a65726f2e0000000000602082015250565b7f5b452d33315d202d204e6f74206120676f7665726e616e636520636f6e74726160008201527f63742e0000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b613d1a816134d1565b8114613d2557600080fd5b50565b613d31816134e3565b8114613d3c57600080fd5b50565b613d48816134ef565b8114613d5357600080fd5b50565b613d5f81613521565b8114613d6a57600080fd5b50565b613d768161352b565b8114613d8157600080fd5b5056fea2646970667358221220c282434ddd9cb4951ce87610b52c3645bd6c291c3a7d774ee1d5d1ab4d96a00464736f6c6343000804003300000000000000000000000062aaf435273bc4baa78dcebd6590042d7e58ba6f
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102065760003560e01c80637488ab781161011a578063a153e708116100ad578063cf19e0c61161007c578063cf19e0c614610615578063dd62ed3e1461061f578063e43252d71461064f578063f2fde38b1461066b578063fe1ced5e1461068757610206565b8063a153e70814610565578063a457c2d714610595578063a4d66daf146105c5578063a9059cbb146105e557610206565b80638ab1d681116100e95780638ab1d681146104dd5780638da5cb5b146104f957806394b918de1461051757806395d89b411461054757610206565b80637488ab781461046b5780637eee288d14610487578063808de699146104a3578063855c6c58146104bf57610206565b8063395093511161019d578063555ba5711161016c578063555ba571146103c75780635c31a713146103f75780635f9db0b81461041357806370a0823114610431578063715018a61461046157610206565b806339509351146103415780633e43b4561461037157806340c10f191461038f578063531ae465146103ab57610206565b806318160ddd116101d957806318160ddd146102b957806323b872dd146102d7578063282d3fdf14610307578063313ce5671461032357610206565b8063054a0c321461020b57806306fdde031461023b578063095ea7b3146102595780630b1de47414610289575b600080fd5b610225600480360381019061022091906127ff565b6106a3565b604051610232919061318e565b60405180910390f35b6102436106bb565b6040516102509190612e8c565b60405180910390f35b610273600480360381019061026e91906128b3565b61074d565b6040516102809190612e3b565b60405180910390f35b6102a3600480360381019061029e91906127ff565b61076b565b6040516102b09190612e3b565b60405180910390f35b6102c161078b565b6040516102ce919061318e565b60405180910390f35b6102f160048036038101906102ec9190612864565b610795565b6040516102fe9190612e3b565b60405180910390f35b610321600480360381019061031c91906128b3565b610896565b005b61032b610a8a565b60405161033891906131e0565b60405180910390f35b61035b600480360381019061035691906128b3565b610a93565b6040516103689190612e3b565b60405180910390f35b610379610b3f565b6040516103869190612e71565b60405180910390f35b6103a960048036038101906103a491906128b3565b610b65565b005b6103c560048036038101906103c091906127ff565b610c4f565b005b6103e160048036038101906103dc91906127ff565b610d26565b6040516103ee9190612e3b565b60405180910390f35b610411600480360381019061040c9190612990565b610d46565b005b61041b610eb5565b6040516104289190612e56565b60405180910390f35b61044b600480360381019061044691906127ff565b610edb565b604051610458919061318e565b60405180910390f35b610469610f23565b005b61048560048036038101906104809190612918565b611060565b005b6104a1600480360381019061049c91906128b3565b6111ad565b005b6104bd60048036038101906104b891906127ff565b611319565b005b6104c7611510565b6040516104d49190612e3b565b60405180910390f35b6104f760048036038101906104f291906127ff565b611523565b005b6105016115fa565b60405161050e9190612dc0565b60405180910390f35b610531600480360381019061052c9190612967565b611624565b60405161053e9190612e3b565b60405180910390f35b61054f61185a565b60405161055c9190612e8c565b60405180910390f35b61057f600480360381019061057a91906127ff565b6118ec565b60405161058c919061318e565b60405180910390f35b6105af60048036038101906105aa91906128b3565b611904565b6040516105bc9190612e3b565b60405180910390f35b6105cd6119f8565b6040516105dc939291906131a9565b60405180910390f35b6105ff60048036038101906105fa91906128b3565b611a10565b60405161060c9190612e3b565b60405180910390f35b61061d611a2e565b005b61063960048036038101906106349190612828565b611ad6565b604051610646919061318e565b60405180910390f35b610669600480360381019061066491906127ff565b611b5d565b005b610685600480360381019061068091906127ff565b611c34565b005b6106a1600480360381019061069c91906127ff565b611de0565b005b600c6020528060005260406000206000915090505481565b6060600380546106ca906135b3565b80601f01602080910402602001604051908101604052809291908181526020018280546106f6906135b3565b80156107435780601f1061071857610100808354040283529160200191610743565b820191906000526020600020905b81548152906001019060200180831161072657829003601f168201915b5050505050905090565b600061076161075a611eb7565b8484611ebf565b6001905092915050565b600e6020528060005260406000206000915054906101000a900460ff1681565b6000600254905090565b60006107a284848461208a565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006107ed611eb7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561086d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108649061304e565b60405180910390fd5b61088a85610879611eb7565b85846108859190613469565b611ebf565b60019150509392505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610926576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091d9061312e565b60405180910390fd5b60008111610969576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109609061310e565b60405180910390fd5b600061097483610edb565b9050600082600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546109c39190613217565b905081811115610a08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ff90612fae565b60405180910390fd5b80600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550827f9ecfd70e9ff36df72989324a49559383d39f9290d700b10cf5ac10dcb68d264385604051610a7c9190612dc0565b60405180910390a250505050565b60006012905090565b6000610b35610aa0611eb7565b848460016000610aae611eb7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b309190613217565b611ebf565b6001905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610b6d611eb7565b73ffffffffffffffffffffffffffffffffffffffff16610b8b6115fa565b73ffffffffffffffffffffffffffffffffffffffff1614610be1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd89061306e565b60405180910390fd5b6a31a17e847807b1bc00000081610bf661078b565b610c009190613217565b1115610c41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3890612fce565b60405180910390fd5b610c4b8282612309565b5050565b610c57611eb7565b73ffffffffffffffffffffffffffffffffffffffff16610c756115fa565b73ffffffffffffffffffffffffffffffffffffffff1614610ccb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc29061306e565b60405180910390fd5b6001600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600d6020528060005260406000206000915054906101000a900460ff1681565b610d4e611eb7565b73ffffffffffffffffffffffffffffffffffffffff16610d6c6115fa565b73ffffffffffffffffffffffffffffffffffffffff1614610dc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db99061306e565b60405180910390fd5b610dca61245d565b831115610e0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0390612fee565b60405180910390fd5b60008311610e4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4690612f4e565b60405180910390fd5b60008211610e92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8990612f2e565b60405180910390fd5b826008600001819055508160086001018190555080600860020181905550505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f2b611eb7565b73ffffffffffffffffffffffffffffffffffffffff16610f496115fa565b73ffffffffffffffffffffffffffffffffffffffff1614610f9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f969061306e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611068611eb7565b73ffffffffffffffffffffffffffffffffffffffff166110866115fa565b73ffffffffffffffffffffffffffffffffffffffff16146110dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d39061306e565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401611117929190612e12565b602060405180830381600087803b15801561113157600080fd5b505af1158015611145573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116991906128ef565b6111a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119f906130ee565b60405180910390fd5b505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461123d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112349061312e565b60405180910390fd5b6000600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508082111561128d578091505b81816112999190613469565b600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550817f0fe7d9801197f79ef3b1595d19379eb58f0fff5f98b0f6d6f34c03cae5306c378460405161130c9190612dc0565b60405180910390a2505050565b611321611eb7565b73ffffffffffffffffffffffffffffffffffffffff1661133f6115fa565b73ffffffffffffffffffffffffffffffffffffffff1614611395576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138c9061306e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114cc57600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b8e4ae9b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561145357600080fd5b505afa158015611467573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148b91906128ef565b156114cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c29061302e565b60405180910390fd5b5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b60009054906101000a900460ff1681565b61152b611eb7565b73ffffffffffffffffffffffffffffffffffffffff166115496115fa565b73ffffffffffffffffffffffffffffffffffffffff161461159f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115969061306e565b60405180910390fd5b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd33734e07dc9d1abcf1335d1eaf4b2e28b45d5892758e856040518463ffffffff1660e01b815260040161169993929190612ddb565b602060405180830381600087803b1580156116b357600080fd5b505af11580156116c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116eb91906128ef565b506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561175657600080fd5b505afa15801561176a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178e91906129df565b611796610a8a565b6117a0919061349d565b600a6117ac91906132f1565b836117b7919061340f565b90503073ffffffffffffffffffffffffffffffffffffffff166323b872dd6117dd6115fa565b33846040518463ffffffff1660e01b81526004016117fd93929190612ddb565b602060405180830381600087803b15801561181757600080fd5b505af115801561182b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184f91906128ef565b506001915050919050565b606060048054611869906135b3565b80601f0160208091040260200160405190810160405280929190818152602001828054611895906135b3565b80156118e25780601f106118b7576101008083540402835291602001916118e2565b820191906000526020600020905b8154815290600101906020018083116118c557829003601f168201915b5050505050905090565b600f6020528060005260406000206000915090505481565b60008060016000611913611eb7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156119d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c79061314e565b60405180910390fd5b6119ed6119db611eb7565b8585846119e89190613469565b611ebf565b600191505092915050565b60088060000154908060010154908060020154905083565b6000611a24611a1d611eb7565b848461208a565b6001905092915050565b611a36611eb7565b73ffffffffffffffffffffffffffffffffffffffff16611a546115fa565b73ffffffffffffffffffffffffffffffffffffffff1614611aaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa19061306e565b60405180910390fd5b600b60009054906101000a900460ff1615600b60006101000a81548160ff021916908315150217905550565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611b65611eb7565b73ffffffffffffffffffffffffffffffffffffffff16611b836115fa565b73ffffffffffffffffffffffffffffffffffffffff1614611bd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd09061306e565b60405180910390fd5b6001600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611c3c611eb7565b73ffffffffffffffffffffffffffffffffffffffff16611c5a6115fa565b73ffffffffffffffffffffffffffffffffffffffff1614611cb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca79061306e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1790612ece565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611de8611eb7565b73ffffffffffffffffffffffffffffffffffffffff16611e066115fa565b73ffffffffffffffffffffffffffffffffffffffff1614611e5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e539061306e565b60405180910390fd5b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f26906130ce565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9690612eee565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161207d919061318e565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156120fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f1906130ae565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561216a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216190612eae565b60405180910390fd5b612175838383612471565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156121fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f290612f6e565b60405180910390fd5b81816122079190613469565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122979190613217565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516122fb919061318e565b60405180910390a350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612379576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123709061316e565b60405180910390fd5b61238560008383612471565b80600260008282546123979190613217565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123ec9190613217565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612451919061318e565b60405180910390a35050565b60006b033b2e3c9fd0803ce8000000905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612791576000600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124f085610edb565b6124fa9190613469565b90508181101561253f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125369061300e565b60405180910390fd5b600b60009054906101000a900460ff1680156125ab575060001515600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b8015612607575060001515600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b1561278f57600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054421161268d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268490612f8e565b60405180910390fd5b6008600101548211156126d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126cc90612f0e565b60405180910390fd5b6126dd61245d565b600860000154826126ee919061340f565b6126f8919061326d565b82111561273a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127319061308e565b60405180910390fd5b6008600201544261274b9190613217565b600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505b505050565b6000813590506127a581613d11565b92915050565b6000815190506127ba81613d28565b92915050565b6000813590506127cf81613d3f565b92915050565b6000813590506127e481613d56565b92915050565b6000815190506127f981613d6d565b92915050565b60006020828403121561281157600080fd5b600061281f84828501612796565b91505092915050565b6000806040838503121561283b57600080fd5b600061284985828601612796565b925050602061285a85828601612796565b9150509250929050565b60008060006060848603121561287957600080fd5b600061288786828701612796565b935050602061289886828701612796565b92505060406128a9868287016127d5565b9150509250925092565b600080604083850312156128c657600080fd5b60006128d485828601612796565b92505060206128e5858286016127d5565b9150509250929050565b60006020828403121561290157600080fd5b600061290f848285016127ab565b91505092915050565b60008060006060848603121561292d57600080fd5b600061293b868287016127c0565b935050602061294c86828701612796565b925050604061295d868287016127d5565b9150509250925092565b60006020828403121561297957600080fd5b6000612987848285016127d5565b91505092915050565b6000806000606084860312156129a557600080fd5b60006129b3868287016127d5565b93505060206129c4868287016127d5565b92505060406129d5868287016127d5565b9150509250925092565b6000602082840312156129f157600080fd5b60006129ff848285016127ea565b91505092915050565b612a11816134d1565b82525050565b612a20816134e3565b82525050565b612a2f81613538565b82525050565b612a3e8161355c565b82525050565b6000612a4f826131fb565b612a598185613206565b9350612a69818560208601613580565b612a7281613672565b840191505092915050565b6000612a8a602383613206565b9150612a9582613690565b604082019050919050565b6000612aad602683613206565b9150612ab8826136df565b604082019050919050565b6000612ad0602283613206565b9150612adb8261372e565b604082019050919050565b6000612af3602c83613206565b9150612afe8261377d565b604082019050919050565b6000612b16602683613206565b9150612b21826137cc565b604082019050919050565b6000612b39602183613206565b9150612b448261381b565b604082019050919050565b6000612b5c602683613206565b9150612b678261386a565b604082019050919050565b6000612b7f603783613206565b9150612b8a826138b9565b604082019050919050565b6000612ba2602583613206565b9150612bad82613908565b604082019050919050565b6000612bc5601983613206565b9150612bd082613957565b602082019050919050565b6000612be8602783613206565b9150612bf382613980565b604082019050919050565b6000612c0b603283613206565b9150612c16826139cf565b604082019050919050565b6000612c2e602e83613206565b9150612c3982613a1e565b604082019050919050565b6000612c51602883613206565b9150612c5c82613a6d565b604082019050919050565b6000612c74602083613206565b9150612c7f82613abc565b602082019050919050565b6000612c97602c83613206565b9150612ca282613ae5565b604082019050919050565b6000612cba602583613206565b9150612cc582613b34565b604082019050919050565b6000612cdd602483613206565b9150612ce882613b83565b604082019050919050565b6000612d00601983613206565b9150612d0b82613bd2565b602082019050919050565b6000612d23603b83613206565b9150612d2e82613bfb565b604082019050919050565b6000612d46602383613206565b9150612d5182613c4a565b604082019050919050565b6000612d69602583613206565b9150612d7482613c99565b604082019050919050565b6000612d8c601f83613206565b9150612d9782613ce8565b602082019050919050565b612dab81613521565b82525050565b612dba8161352b565b82525050565b6000602082019050612dd56000830184612a08565b92915050565b6000606082019050612df06000830186612a08565b612dfd6020830185612a08565b612e0a6040830184612da2565b949350505050565b6000604082019050612e276000830185612a08565b612e346020830184612da2565b9392505050565b6000602082019050612e506000830184612a17565b92915050565b6000602082019050612e6b6000830184612a26565b92915050565b6000602082019050612e866000830184612a35565b92915050565b60006020820190508181036000830152612ea68184612a44565b905092915050565b60006020820190508181036000830152612ec781612a7d565b9050919050565b60006020820190508181036000830152612ee781612aa0565b9050919050565b60006020820190508181036000830152612f0781612ac3565b9050919050565b60006020820190508181036000830152612f2781612ae6565b9050919050565b60006020820190508181036000830152612f4781612b09565b9050919050565b60006020820190508181036000830152612f6781612b2c565b9050919050565b60006020820190508181036000830152612f8781612b4f565b9050919050565b60006020820190508181036000830152612fa781612b72565b9050919050565b60006020820190508181036000830152612fc781612b95565b9050919050565b60006020820190508181036000830152612fe781612bb8565b9050919050565b6000602082019050818103600083015261300781612bdb565b9050919050565b6000602082019050818103600083015261302781612bfe565b9050919050565b6000602082019050818103600083015261304781612c21565b9050919050565b6000602082019050818103600083015261306781612c44565b9050919050565b6000602082019050818103600083015261308781612c67565b9050919050565b600060208201905081810360008301526130a781612c8a565b9050919050565b600060208201905081810360008301526130c781612cad565b9050919050565b600060208201905081810360008301526130e781612cd0565b9050919050565b6000602082019050818103600083015261310781612cf3565b9050919050565b6000602082019050818103600083015261312781612d16565b9050919050565b6000602082019050818103600083015261314781612d39565b9050919050565b6000602082019050818103600083015261316781612d5c565b9050919050565b6000602082019050818103600083015261318781612d7f565b9050919050565b60006020820190506131a36000830184612da2565b92915050565b60006060820190506131be6000830186612da2565b6131cb6020830185612da2565b6131d86040830184612da2565b949350505050565b60006020820190506131f56000830184612db1565b92915050565b600081519050919050565b600082825260208201905092915050565b600061322282613521565b915061322d83613521565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613262576132616135e5565b5b828201905092915050565b600061327882613521565b915061328383613521565b92508261329357613292613614565b5b828204905092915050565b6000808291508390505b60018511156132e8578086048111156132c4576132c36135e5565b5b60018516156132d35780820291505b80810290506132e185613683565b94506132a8565b94509492505050565b60006132fc82613521565b91506133078361352b565b92506133347fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461333c565b905092915050565b60008261334c5760019050613408565b8161335a5760009050613408565b8160018114613370576002811461337a576133a9565b6001915050613408565b60ff84111561338c5761338b6135e5565b5b8360020a9150848211156133a3576133a26135e5565b5b50613408565b5060208310610133831016604e8410600b84101617156133de5782820a9050838111156133d9576133d86135e5565b5b613408565b6133eb848484600161329e565b92509050818404811115613402576134016135e5565b5b81810290505b9392505050565b600061341a82613521565b915061342583613521565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561345e5761345d6135e5565b5b828202905092915050565b600061347482613521565b915061347f83613521565b925082821015613492576134916135e5565b5b828203905092915050565b60006134a88261352b565b91506134b38361352b565b9250828210156134c6576134c56135e5565b5b828203905092915050565b60006134dc82613501565b9050919050565b60008115159050919050565b60006134fa826134d1565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006135438261354a565b9050919050565b600061355582613501565b9050919050565b60006135678261356e565b9050919050565b600061357982613501565b9050919050565b60005b8381101561359e578082015181840152602081019050613583565b838111156135ad576000848401525b50505050565b600060028204905060018216806135cb57607f821691505b602082108114156135df576135de613643565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f5b452d36335d202d20546865206d6178696d756d206c696d697420686173206260008201527f65656e20726561636865642e0000000000000000000000000000000000000000602082015250565b7f5b452d39305d202d204c696d697420616d6f756e742063616e2774206265206160008201527f207a65726f2e0000000000000000000000000000000000000000000000000000602082015250565b7f5b452d39305d202d2050657263656e742063616e27742062652061207a65726f60008201527f2e00000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f5b452d36325d202d20546f6b656e7320617265206c6f636b656420756e74696c60008201527f2074686520656e64206f662074686520706572696f642e000000000000000000602082015250565b7f5b452d34325d202d204e6f7420656e6f75676820746f6b656e206f6e2061636360008201527f6f756e742e000000000000000000000000000000000000000000000000000000602082015250565b7f5b452d37315d202d2043616e2774206d696e74206d6f72652e00000000000000600082015250565b7f5b452d38395d202d2050657263656e742073686f756c64206265206c6573732060008201527f7468616e20312e00000000000000000000000000000000000000000000000000602082015250565b7f5b452d36315d202d205472616e7366657220616d6f756e74206578636565647360008201527f20617661696c61626c6520746f6b656e732e0000000000000000000000000000602082015250565b7f5b452d39325d202d204f6c6420676f7665726e616e636520636f6e747261637460008201527f207374696c6c206163746976652e000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5b452d36345d202d20546865206d6178696d756d206c696d697420686173206260008201527f65656e20726561636865642e0000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f5b452d35365d202d205472616e73666572206661696c65642e00000000000000600082015250565b7f5b452d34315d202d2054686520616d6f756e7420746f206265206c6f636b656460008201527f206d7573742062652067726561746572207468616e207a65726f2e0000000000602082015250565b7f5b452d33315d202d204e6f74206120676f7665726e616e636520636f6e74726160008201527f63742e0000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b613d1a816134d1565b8114613d2557600080fd5b50565b613d31816134e3565b8114613d3c57600080fd5b50565b613d48816134ef565b8114613d5357600080fd5b50565b613d5f81613521565b8114613d6a57600080fd5b50565b613d768161352b565b8114613d8157600080fd5b5056fea2646970667358221220c282434ddd9cb4951ce87610b52c3645bd6c291c3a7d774ee1d5d1ab4d96a00464736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000062aaf435273bc4baa78dcebd6590042d7e58ba6f
-----Decoded View---------------
Arg [0] : _cvnContract (address): 0x62aaF435273bc4baA78DcEbD6590042D7E58ba6F
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000062aaf435273bc4baa78dcebd6590042d7e58ba6f
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.