Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
17,532,630.000000000001 KRUN
Holders
2,106
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
3,912.194651927193514547 KRUNValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
KrunCoin
Compiler Version
v0.8.16+commit.07a7930e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-10-12 */ pragma solidity 0.8.16; // SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol) /** * @dev External interface of AccessControl declared to support ERC165 detection. */ interface IAccessControl { /** * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` * * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite * {RoleAdminChanged} not being emitted signaling this. * * _Available since v3.1._ */ event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole); /** * @dev Emitted when `account` is granted `role`. * * `sender` is the account that originated the contract call, an admin role * bearer except when using {AccessControl-_setupRole}. */ event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Emitted when `account` is revoked `role`. * * `sender` is the account that originated the contract call: * - if using `revokeRole`, it is the admin role bearer * - if using `renounceRole`, it is the role bearer (i.e. `account`) */ event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) external view returns (bool); /** * @dev Returns the admin role that controls `role`. See {grantRole} and * {revokeRole}. * * To change a role's admin, use {AccessControl-_setRoleAdmin}. */ function getRoleAdmin(bytes32 role) external view returns (bytes32); /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function grantRole(bytes32 role, address account) external; /** * @dev Revokes `role` from `account`. * * If `account` had been granted `role`, emits a {RoleRevoked} event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function revokeRole(bytes32 role, address account) external; /** * @dev Revokes `role` from the calling account. * * Roles are often managed via {grantRole} and {revokeRole}: this function's * purpose is to provide a mechanism for accounts to lose their privileges * if they are compromised (such as when a trusted device is misplaced). * * If the calling account had been granted `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `account`. */ function renounceRole(bytes32 role, address account) external; } // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // OpenZeppelin Contracts (last updated v4.6.0) (access/AccessControl.sol) /** * @dev Contract module that allows children to implement role-based access * control mechanisms. This is a lightweight version that doesn't allow enumerating role * members except through off-chain means by accessing the contract event logs. Some * applications may benefit from on-chain enumerability, for those cases see * {AccessControlEnumerable}. * * Roles are referred to by their `bytes32` identifier. These should be exposed * in the external API and be unique. The best way to achieve this is by * using `public constant` hash digests: * * ``` * bytes32 public constant MY_ROLE = keccak256("MY_ROLE"); * ``` * * Roles can be used to represent a set of permissions. To restrict access to a * function call, use {hasRole}: * * ``` * function foo() public { * require(hasRole(MY_ROLE, msg.sender)); * ... * } * ``` * * Roles can be granted and revoked dynamically via the {grantRole} and * {revokeRole} functions. Each role has an associated admin role, and only * accounts that have a role's admin role can call {grantRole} and {revokeRole}. * * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means * that only accounts with this role will be able to grant or revoke other * roles. More complex role relationships can be created by using * {_setRoleAdmin}. * * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to * grant and revoke this role. Extra precautions should be taken to secure * accounts that have been granted it. */ abstract contract AccessControl is Context, IAccessControl, ERC165 { struct RoleData { mapping(address => bool) members; bytes32 adminRole; } mapping(bytes32 => RoleData) private _roles; bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00; /** * @dev Modifier that checks that an account has a specific role. Reverts * with a standardized message including the required role. * * The format of the revert reason is given by the following regular expression: * * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/ * * _Available since v4.1._ */ modifier onlyRole(bytes32 role) { _checkRole(role); _; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId); } /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) public view virtual override returns (bool) { return _roles[role].members[account]; } /** * @dev Revert with a standard message if `_msgSender()` is missing `role`. * Overriding this function changes the behavior of the {onlyRole} modifier. * * Format of the revert message is described in {_checkRole}. * * _Available since v4.6._ */ function _checkRole(bytes32 role) internal view virtual { _checkRole(role, _msgSender()); } /** * @dev Revert with a standard message if `account` is missing `role`. * * The format of the revert reason is given by the following regular expression: * * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/ */ function _checkRole(bytes32 role, address account) internal view virtual { if (!hasRole(role, account)) { revert( string( abi.encodePacked( "AccessControl: account ", Strings.toHexString(uint160(account), 20), " is missing role ", Strings.toHexString(uint256(role), 32) ) ) ); } } /** * @dev Returns the admin role that controls `role`. See {grantRole} and * {revokeRole}. * * To change a role's admin, use {_setRoleAdmin}. */ function getRoleAdmin(bytes32 role) public view virtual override returns (bytes32) { return _roles[role].adminRole; } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) { _grantRole(role, account); } /** * @dev Revokes `role` from `account`. * * If `account` had been granted `role`, emits a {RoleRevoked} event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) { _revokeRole(role, account); } /** * @dev Revokes `role` from the calling account. * * Roles are often managed via {grantRole} and {revokeRole}: this function's * purpose is to provide a mechanism for accounts to lose their privileges * if they are compromised (such as when a trusted device is misplaced). * * If the calling account had been revoked `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `account`. */ function renounceRole(bytes32 role, address account) public virtual override { require(account == _msgSender(), "AccessControl: can only renounce roles for self"); _revokeRole(role, account); } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. Note that unlike {grantRole}, this function doesn't perform any * checks on the calling account. * * [WARNING] * ==== * This function should only be called from the constructor when setting * up the initial roles for the system. * * Using this function in any other way is effectively circumventing the admin * system imposed by {AccessControl}. * ==== * * NOTE: This function is deprecated in favor of {_grantRole}. */ function _setupRole(bytes32 role, address account) internal virtual { _grantRole(role, account); } /** * @dev Sets `adminRole` as ``role``'s admin role. * * Emits a {RoleAdminChanged} event. */ function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual { bytes32 previousAdminRole = getRoleAdmin(role); _roles[role].adminRole = adminRole; emit RoleAdminChanged(role, previousAdminRole, adminRole); } /** * @dev Grants `role` to `account`. * * Internal function without access restriction. */ function _grantRole(bytes32 role, address account) internal virtual { if (!hasRole(role, account)) { _roles[role].members[account] = true; emit RoleGranted(role, account, _msgSender()); } } /** * @dev Revokes `role` from `account`. * * Internal function without access restriction. */ function _revokeRole(bytes32 role, address account) internal virtual { if (hasRole(role, account)) { _roles[role].members[account] = false; emit RoleRevoked(role, account, _msgSender()); } } } // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @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); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); } // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.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); } // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/ERC20.sol) /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, spender) + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; } _balances[to] += amount; emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Updates `owner` s allowance for `spender` based on spent `amount`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } contract KrunCoin is Ownable, AccessControl, ERC20 { uint256 constant MILLION = 1_000_000 * 10**uint256(18); uint256 constant MAX_SUPPLY = 44 * MILLION; bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE"); constructor(address minter) ERC20("KRUN Coin", "KRUN") { _setupRole(MINTER_ROLE, minter); _setupRole(DEFAULT_ADMIN_ROLE, minter); } /// @notice Allows an account with the minter role to mint new tokens. /// @dev Cannot mint more than max supply /// @param account the account that will receive the minted tokens /// @param amount the amount of tokens to be minted function mint(address account, uint256 amount) external { require(hasRole(MINTER_ROLE, msg.sender), "MINTER_ROLE"); require(totalSupply() + amount <= MAX_SUPPLY, "MAX_SUPPLY"); _mint(account, amount); } /// Allows the owner of the contract to release tokens that were erronously sent to this /// ERC20 smart contract. /// @param token the token that we want to withdraw /// @param recipient the address that will receive the tokens /// @param amount the amount of tokens function tokenRescue( IERC20 token, address recipient, uint256 amount ) onlyOwner external { token.transfer(recipient, amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"minter","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":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINTER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"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":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"tokenRescue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162003212380380620032128339818101604052810190620000379190620003df565b6040518060400160405280600981526020017f4b52554e20436f696e00000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4b52554e00000000000000000000000000000000000000000000000000000000815250620000c3620000b76200013760201b60201c565b6200013f60201b60201c565b8160059081620000d491906200068b565b508060069081620000e691906200068b565b5050506200011b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6826200020360201b60201c565b620001306000801b826200020360201b60201c565b5062000772565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200021582826200021960201b60201c565b5050565b6200022b82826200030a60201b60201c565b6200030657600180600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620002ab6200013760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b60006001600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620003a7826200037a565b9050919050565b620003b9816200039a565b8114620003c557600080fd5b50565b600081519050620003d981620003ae565b92915050565b600060208284031215620003f857620003f762000375565b5b60006200040884828501620003c8565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200049357607f821691505b602082108103620004a957620004a86200044b565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620005137fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620004d4565b6200051f8683620004d4565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200056c62000566620005608462000537565b62000541565b62000537565b9050919050565b6000819050919050565b62000588836200054b565b620005a0620005978262000573565b848454620004e1565b825550505050565b600090565b620005b7620005a8565b620005c48184846200057d565b505050565b5b81811015620005ec57620005e0600082620005ad565b600181019050620005ca565b5050565b601f8211156200063b576200060581620004af565b6200061084620004c4565b8101602085101562000620578190505b620006386200062f85620004c4565b830182620005c9565b50505b505050565b600082821c905092915050565b6000620006606000198460080262000640565b1980831691505092915050565b60006200067b83836200064d565b9150826002028217905092915050565b620006968262000411565b67ffffffffffffffff811115620006b257620006b16200041c565b5b620006be82546200047a565b620006cb828285620005f0565b600060209050601f831160018114620007035760008415620006ee578287015190505b620006fa85826200066d565b8655506200076a565b601f1984166200071386620004af565b60005b828110156200073d5784890151825560018201915060208501945060208101905062000716565b868310156200075d578489015162000759601f8916826200064d565b8355505b6001600288020188555050505b505050505050565b612a9080620007826000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c8063715018a6116100c3578063a457c2d71161007c578063a457c2d7146103db578063a9059cbb1461040b578063d53913931461043b578063d547741f14610459578063dd62ed3e14610475578063f2fde38b146104a557610158565b8063715018a61461032b5780638bf8bd0b146103355780638da5cb5b1461035157806391d148541461036f57806395d89b411461039f578063a217fddf146103bd57610158565b80632f2ff15d116101155780632f2ff15d14610259578063313ce5671461027557806336568abe1461029357806339509351146102af57806340c10f19146102df57806370a08231146102fb57610158565b806301ffc9a71461015d57806306fdde031461018d578063095ea7b3146101ab57806318160ddd146101db57806323b872dd146101f9578063248a9ca314610229575b600080fd5b610177600480360381019061017291906119fe565b6104c1565b6040516101849190611a46565b60405180910390f35b61019561053b565b6040516101a29190611af1565b60405180910390f35b6101c560048036038101906101c09190611ba7565b6105cd565b6040516101d29190611a46565b60405180910390f35b6101e36105f0565b6040516101f09190611bf6565b60405180910390f35b610213600480360381019061020e9190611c11565b6105fa565b6040516102209190611a46565b60405180910390f35b610243600480360381019061023e9190611c9a565b610629565b6040516102509190611cd6565b60405180910390f35b610273600480360381019061026e9190611cf1565b610649565b005b61027d61066a565b60405161028a9190611d4d565b60405180910390f35b6102ad60048036038101906102a89190611cf1565b610673565b005b6102c960048036038101906102c49190611ba7565b6106f6565b6040516102d69190611a46565b60405180910390f35b6102f960048036038101906102f49190611ba7565b61072d565b005b61031560048036038101906103109190611d68565b610820565b6040516103229190611bf6565b60405180910390f35b610333610869565b005b61034f600480360381019061034a9190611dd3565b6108f1565b005b6103596109f1565b6040516103669190611e35565b60405180910390f35b61038960048036038101906103849190611cf1565b610a1a565b6040516103969190611a46565b60405180910390f35b6103a7610a85565b6040516103b49190611af1565b60405180910390f35b6103c5610b17565b6040516103d29190611cd6565b60405180910390f35b6103f560048036038101906103f09190611ba7565b610b1e565b6040516104029190611a46565b60405180910390f35b61042560048036038101906104209190611ba7565b610b95565b6040516104329190611a46565b60405180910390f35b610443610bb8565b6040516104509190611cd6565b60405180910390f35b610473600480360381019061046e9190611cf1565b610bdc565b005b61048f600480360381019061048a9190611e50565b610bfd565b60405161049c9190611bf6565b60405180910390f35b6104bf60048036038101906104ba9190611d68565b610c84565b005b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610534575061053382610d7b565b5b9050919050565b60606005805461054a90611ebf565b80601f016020809104026020016040519081016040528092919081815260200182805461057690611ebf565b80156105c35780601f10610598576101008083540402835291602001916105c3565b820191906000526020600020905b8154815290600101906020018083116105a657829003601f168201915b5050505050905090565b6000806105d8610de5565b90506105e5818585610ded565b600191505092915050565b6000600454905090565b600080610605610de5565b9050610612858285610fb6565b61061d858585611042565b60019150509392505050565b600060016000838152602001908152602001600020600101549050919050565b61065282610629565b61065b816112c4565b61066583836112d8565b505050565b60006012905090565b61067b610de5565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146106e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106df90611f62565b60405180910390fd5b6106f282826113b8565b5050565b600080610701610de5565b90506107228185856107138589610bfd565b61071d9190611fb1565b610ded565b600191505092915050565b6107577f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a633610a1a565b610796576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078d90612031565b60405180910390fd5b6012600a6107a49190612184565b620f42406107b291906121cf565b602c6107be91906121cf565b816107c76105f0565b6107d19190611fb1565b1115610812576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080990612275565b60405180910390fd5b61081c828261149a565b5050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610871610de5565b73ffffffffffffffffffffffffffffffffffffffff1661088f6109f1565b73ffffffffffffffffffffffffffffffffffffffff16146108e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108dc906122e1565b60405180910390fd5b6108ef60006115fa565b565b6108f9610de5565b73ffffffffffffffffffffffffffffffffffffffff166109176109f1565b73ffffffffffffffffffffffffffffffffffffffff161461096d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610964906122e1565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b81526004016109a8929190612301565b6020604051808303816000875af11580156109c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109eb9190612356565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006001600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b606060068054610a9490611ebf565b80601f0160208091040260200160405190810160405280929190818152602001828054610ac090611ebf565b8015610b0d5780601f10610ae257610100808354040283529160200191610b0d565b820191906000526020600020905b815481529060010190602001808311610af057829003601f168201915b5050505050905090565b6000801b81565b600080610b29610de5565b90506000610b378286610bfd565b905083811015610b7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b73906123f5565b60405180910390fd5b610b898286868403610ded565b60019250505092915050565b600080610ba0610de5565b9050610bad818585611042565b600191505092915050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b610be582610629565b610bee816112c4565b610bf883836113b8565b505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610c8c610de5565b73ffffffffffffffffffffffffffffffffffffffff16610caa6109f1565b73ffffffffffffffffffffffffffffffffffffffff1614610d00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf7906122e1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6690612487565b60405180910390fd5b610d78816115fa565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610e5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5390612519565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ecb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec2906125ab565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610fa99190611bf6565b60405180910390a3505050565b6000610fc28484610bfd565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461103c578181101561102e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102590612617565b60405180910390fd5b61103b8484848403610ded565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036110b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a8906126a9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611120576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111179061273b565b60405180910390fd5b61112b8383836116be565b6000600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156111b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a9906127cd565b60405180910390fd5b818103600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112479190611fb1565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516112ab9190611bf6565b60405180910390a36112be8484846116c3565b50505050565b6112d5816112d0610de5565b6116c8565b50565b6112e28282610a1a565b6113b457600180600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611359610de5565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6113c28282610a1a565b156114965760006001600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061143b610de5565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611509576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150090612839565b60405180910390fd5b611515600083836116be565b80600460008282546115279190611fb1565b9250508190555080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461157d9190611fb1565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516115e29190611bf6565b60405180910390a36115f6600083836116c3565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b6116d28282610a1a565b611761576116f78173ffffffffffffffffffffffffffffffffffffffff166014611765565b6117058360001c6020611765565b60405160200161171692919061292d565b6040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117589190611af1565b60405180910390fd5b5050565b60606000600283600261177891906121cf565b6117829190611fb1565b67ffffffffffffffff81111561179b5761179a612967565b5b6040519080825280601f01601f1916602001820160405280156117cd5781602001600182028036833780820191505090505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061180557611804612996565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061186957611868612996565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600060018460026118a991906121cf565b6118b39190611fb1565b90505b6001811115611953577f3031323334353637383961626364656600000000000000000000000000000000600f8616601081106118f5576118f4612996565b5b1a60f81b82828151811061190c5761190b612996565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c94508061194c906129c5565b90506118b6565b5060008414611997576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198e90612a3a565b60405180910390fd5b8091505092915050565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6119db816119a6565b81146119e657600080fd5b50565b6000813590506119f8816119d2565b92915050565b600060208284031215611a1457611a136119a1565b5b6000611a22848285016119e9565b91505092915050565b60008115159050919050565b611a4081611a2b565b82525050565b6000602082019050611a5b6000830184611a37565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611a9b578082015181840152602081019050611a80565b60008484015250505050565b6000601f19601f8301169050919050565b6000611ac382611a61565b611acd8185611a6c565b9350611add818560208601611a7d565b611ae681611aa7565b840191505092915050565b60006020820190508181036000830152611b0b8184611ab8565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611b3e82611b13565b9050919050565b611b4e81611b33565b8114611b5957600080fd5b50565b600081359050611b6b81611b45565b92915050565b6000819050919050565b611b8481611b71565b8114611b8f57600080fd5b50565b600081359050611ba181611b7b565b92915050565b60008060408385031215611bbe57611bbd6119a1565b5b6000611bcc85828601611b5c565b9250506020611bdd85828601611b92565b9150509250929050565b611bf081611b71565b82525050565b6000602082019050611c0b6000830184611be7565b92915050565b600080600060608486031215611c2a57611c296119a1565b5b6000611c3886828701611b5c565b9350506020611c4986828701611b5c565b9250506040611c5a86828701611b92565b9150509250925092565b6000819050919050565b611c7781611c64565b8114611c8257600080fd5b50565b600081359050611c9481611c6e565b92915050565b600060208284031215611cb057611caf6119a1565b5b6000611cbe84828501611c85565b91505092915050565b611cd081611c64565b82525050565b6000602082019050611ceb6000830184611cc7565b92915050565b60008060408385031215611d0857611d076119a1565b5b6000611d1685828601611c85565b9250506020611d2785828601611b5c565b9150509250929050565b600060ff82169050919050565b611d4781611d31565b82525050565b6000602082019050611d626000830184611d3e565b92915050565b600060208284031215611d7e57611d7d6119a1565b5b6000611d8c84828501611b5c565b91505092915050565b6000611da082611b33565b9050919050565b611db081611d95565b8114611dbb57600080fd5b50565b600081359050611dcd81611da7565b92915050565b600080600060608486031215611dec57611deb6119a1565b5b6000611dfa86828701611dbe565b9350506020611e0b86828701611b5c565b9250506040611e1c86828701611b92565b9150509250925092565b611e2f81611b33565b82525050565b6000602082019050611e4a6000830184611e26565b92915050565b60008060408385031215611e6757611e666119a1565b5b6000611e7585828601611b5c565b9250506020611e8685828601611b5c565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611ed757607f821691505b602082108103611eea57611ee9611e90565b5b50919050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b6000611f4c602f83611a6c565b9150611f5782611ef0565b604082019050919050565b60006020820190508181036000830152611f7b81611f3f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611fbc82611b71565b9150611fc783611b71565b9250828201905080821115611fdf57611fde611f82565b5b92915050565b7f4d494e5445525f524f4c45000000000000000000000000000000000000000000600082015250565b600061201b600b83611a6c565b915061202682611fe5565b602082019050919050565b6000602082019050818103600083015261204a8161200e565b9050919050565b60008160011c9050919050565b6000808291508390505b60018511156120a85780860481111561208457612083611f82565b5b60018516156120935780820291505b80810290506120a185612051565b9450612068565b94509492505050565b6000826120c1576001905061217d565b816120cf576000905061217d565b81600181146120e557600281146120ef5761211e565b600191505061217d565b60ff84111561210157612100611f82565b5b8360020a91508482111561211857612117611f82565b5b5061217d565b5060208310610133831016604e8410600b84101617156121535782820a90508381111561214e5761214d611f82565b5b61217d565b612160848484600161205e565b9250905081840481111561217757612176611f82565b5b81810290505b9392505050565b600061218f82611b71565b915061219a83611b71565b92506121c77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846120b1565b905092915050565b60006121da82611b71565b91506121e583611b71565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561221e5761221d611f82565b5b828202905092915050565b7f4d41585f535550504c5900000000000000000000000000000000000000000000600082015250565b600061225f600a83611a6c565b915061226a82612229565b602082019050919050565b6000602082019050818103600083015261228e81612252565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006122cb602083611a6c565b91506122d682612295565b602082019050919050565b600060208201905081810360008301526122fa816122be565b9050919050565b60006040820190506123166000830185611e26565b6123236020830184611be7565b9392505050565b61233381611a2b565b811461233e57600080fd5b50565b6000815190506123508161232a565b92915050565b60006020828403121561236c5761236b6119a1565b5b600061237a84828501612341565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006123df602583611a6c565b91506123ea82612383565b604082019050919050565b6000602082019050818103600083015261240e816123d2565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612471602683611a6c565b915061247c82612415565b604082019050919050565b600060208201905081810360008301526124a081612464565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612503602483611a6c565b915061250e826124a7565b604082019050919050565b60006020820190508181036000830152612532816124f6565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612595602283611a6c565b91506125a082612539565b604082019050919050565b600060208201905081810360008301526125c481612588565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612601601d83611a6c565b915061260c826125cb565b602082019050919050565b60006020820190508181036000830152612630816125f4565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612693602583611a6c565b915061269e82612637565b604082019050919050565b600060208201905081810360008301526126c281612686565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612725602383611a6c565b9150612730826126c9565b604082019050919050565b6000602082019050818103600083015261275481612718565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006127b7602683611a6c565b91506127c28261275b565b604082019050919050565b600060208201905081810360008301526127e6816127aa565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000612823601f83611a6c565b915061282e826127ed565b602082019050919050565b6000602082019050818103600083015261285281612816565b9050919050565b600081905092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b600061289a601783612859565b91506128a582612864565b601782019050919050565b60006128bb82611a61565b6128c58185612859565b93506128d5818560208601611a7d565b80840191505092915050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b6000612917601183612859565b9150612922826128e1565b601182019050919050565b60006129388261288d565b915061294482856128b0565b915061294f8261290a565b915061295b82846128b0565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006129d082611b71565b9150600082036129e3576129e2611f82565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b6000612a24602083611a6c565b9150612a2f826129ee565b602082019050919050565b60006020820190508181036000830152612a5381612a17565b905091905056fea26469706673582212206fc7213b70a9dd226813cfefc417c65a7b768a81028d8eeb081172bba091e96e64736f6c63430008100033000000000000000000000000901d23afda17215ee3455e67f7708f1f72f6e240
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101585760003560e01c8063715018a6116100c3578063a457c2d71161007c578063a457c2d7146103db578063a9059cbb1461040b578063d53913931461043b578063d547741f14610459578063dd62ed3e14610475578063f2fde38b146104a557610158565b8063715018a61461032b5780638bf8bd0b146103355780638da5cb5b1461035157806391d148541461036f57806395d89b411461039f578063a217fddf146103bd57610158565b80632f2ff15d116101155780632f2ff15d14610259578063313ce5671461027557806336568abe1461029357806339509351146102af57806340c10f19146102df57806370a08231146102fb57610158565b806301ffc9a71461015d57806306fdde031461018d578063095ea7b3146101ab57806318160ddd146101db57806323b872dd146101f9578063248a9ca314610229575b600080fd5b610177600480360381019061017291906119fe565b6104c1565b6040516101849190611a46565b60405180910390f35b61019561053b565b6040516101a29190611af1565b60405180910390f35b6101c560048036038101906101c09190611ba7565b6105cd565b6040516101d29190611a46565b60405180910390f35b6101e36105f0565b6040516101f09190611bf6565b60405180910390f35b610213600480360381019061020e9190611c11565b6105fa565b6040516102209190611a46565b60405180910390f35b610243600480360381019061023e9190611c9a565b610629565b6040516102509190611cd6565b60405180910390f35b610273600480360381019061026e9190611cf1565b610649565b005b61027d61066a565b60405161028a9190611d4d565b60405180910390f35b6102ad60048036038101906102a89190611cf1565b610673565b005b6102c960048036038101906102c49190611ba7565b6106f6565b6040516102d69190611a46565b60405180910390f35b6102f960048036038101906102f49190611ba7565b61072d565b005b61031560048036038101906103109190611d68565b610820565b6040516103229190611bf6565b60405180910390f35b610333610869565b005b61034f600480360381019061034a9190611dd3565b6108f1565b005b6103596109f1565b6040516103669190611e35565b60405180910390f35b61038960048036038101906103849190611cf1565b610a1a565b6040516103969190611a46565b60405180910390f35b6103a7610a85565b6040516103b49190611af1565b60405180910390f35b6103c5610b17565b6040516103d29190611cd6565b60405180910390f35b6103f560048036038101906103f09190611ba7565b610b1e565b6040516104029190611a46565b60405180910390f35b61042560048036038101906104209190611ba7565b610b95565b6040516104329190611a46565b60405180910390f35b610443610bb8565b6040516104509190611cd6565b60405180910390f35b610473600480360381019061046e9190611cf1565b610bdc565b005b61048f600480360381019061048a9190611e50565b610bfd565b60405161049c9190611bf6565b60405180910390f35b6104bf60048036038101906104ba9190611d68565b610c84565b005b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610534575061053382610d7b565b5b9050919050565b60606005805461054a90611ebf565b80601f016020809104026020016040519081016040528092919081815260200182805461057690611ebf565b80156105c35780601f10610598576101008083540402835291602001916105c3565b820191906000526020600020905b8154815290600101906020018083116105a657829003601f168201915b5050505050905090565b6000806105d8610de5565b90506105e5818585610ded565b600191505092915050565b6000600454905090565b600080610605610de5565b9050610612858285610fb6565b61061d858585611042565b60019150509392505050565b600060016000838152602001908152602001600020600101549050919050565b61065282610629565b61065b816112c4565b61066583836112d8565b505050565b60006012905090565b61067b610de5565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146106e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106df90611f62565b60405180910390fd5b6106f282826113b8565b5050565b600080610701610de5565b90506107228185856107138589610bfd565b61071d9190611fb1565b610ded565b600191505092915050565b6107577f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a633610a1a565b610796576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078d90612031565b60405180910390fd5b6012600a6107a49190612184565b620f42406107b291906121cf565b602c6107be91906121cf565b816107c76105f0565b6107d19190611fb1565b1115610812576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080990612275565b60405180910390fd5b61081c828261149a565b5050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610871610de5565b73ffffffffffffffffffffffffffffffffffffffff1661088f6109f1565b73ffffffffffffffffffffffffffffffffffffffff16146108e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108dc906122e1565b60405180910390fd5b6108ef60006115fa565b565b6108f9610de5565b73ffffffffffffffffffffffffffffffffffffffff166109176109f1565b73ffffffffffffffffffffffffffffffffffffffff161461096d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610964906122e1565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b81526004016109a8929190612301565b6020604051808303816000875af11580156109c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109eb9190612356565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006001600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b606060068054610a9490611ebf565b80601f0160208091040260200160405190810160405280929190818152602001828054610ac090611ebf565b8015610b0d5780601f10610ae257610100808354040283529160200191610b0d565b820191906000526020600020905b815481529060010190602001808311610af057829003601f168201915b5050505050905090565b6000801b81565b600080610b29610de5565b90506000610b378286610bfd565b905083811015610b7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b73906123f5565b60405180910390fd5b610b898286868403610ded565b60019250505092915050565b600080610ba0610de5565b9050610bad818585611042565b600191505092915050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b610be582610629565b610bee816112c4565b610bf883836113b8565b505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610c8c610de5565b73ffffffffffffffffffffffffffffffffffffffff16610caa6109f1565b73ffffffffffffffffffffffffffffffffffffffff1614610d00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf7906122e1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6690612487565b60405180910390fd5b610d78816115fa565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610e5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5390612519565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ecb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec2906125ab565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610fa99190611bf6565b60405180910390a3505050565b6000610fc28484610bfd565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461103c578181101561102e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102590612617565b60405180910390fd5b61103b8484848403610ded565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036110b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a8906126a9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611120576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111179061273b565b60405180910390fd5b61112b8383836116be565b6000600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156111b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a9906127cd565b60405180910390fd5b818103600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112479190611fb1565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516112ab9190611bf6565b60405180910390a36112be8484846116c3565b50505050565b6112d5816112d0610de5565b6116c8565b50565b6112e28282610a1a565b6113b457600180600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611359610de5565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6113c28282610a1a565b156114965760006001600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061143b610de5565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611509576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150090612839565b60405180910390fd5b611515600083836116be565b80600460008282546115279190611fb1565b9250508190555080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461157d9190611fb1565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516115e29190611bf6565b60405180910390a36115f6600083836116c3565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b6116d28282610a1a565b611761576116f78173ffffffffffffffffffffffffffffffffffffffff166014611765565b6117058360001c6020611765565b60405160200161171692919061292d565b6040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117589190611af1565b60405180910390fd5b5050565b60606000600283600261177891906121cf565b6117829190611fb1565b67ffffffffffffffff81111561179b5761179a612967565b5b6040519080825280601f01601f1916602001820160405280156117cd5781602001600182028036833780820191505090505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061180557611804612996565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061186957611868612996565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600060018460026118a991906121cf565b6118b39190611fb1565b90505b6001811115611953577f3031323334353637383961626364656600000000000000000000000000000000600f8616601081106118f5576118f4612996565b5b1a60f81b82828151811061190c5761190b612996565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c94508061194c906129c5565b90506118b6565b5060008414611997576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198e90612a3a565b60405180910390fd5b8091505092915050565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6119db816119a6565b81146119e657600080fd5b50565b6000813590506119f8816119d2565b92915050565b600060208284031215611a1457611a136119a1565b5b6000611a22848285016119e9565b91505092915050565b60008115159050919050565b611a4081611a2b565b82525050565b6000602082019050611a5b6000830184611a37565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611a9b578082015181840152602081019050611a80565b60008484015250505050565b6000601f19601f8301169050919050565b6000611ac382611a61565b611acd8185611a6c565b9350611add818560208601611a7d565b611ae681611aa7565b840191505092915050565b60006020820190508181036000830152611b0b8184611ab8565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611b3e82611b13565b9050919050565b611b4e81611b33565b8114611b5957600080fd5b50565b600081359050611b6b81611b45565b92915050565b6000819050919050565b611b8481611b71565b8114611b8f57600080fd5b50565b600081359050611ba181611b7b565b92915050565b60008060408385031215611bbe57611bbd6119a1565b5b6000611bcc85828601611b5c565b9250506020611bdd85828601611b92565b9150509250929050565b611bf081611b71565b82525050565b6000602082019050611c0b6000830184611be7565b92915050565b600080600060608486031215611c2a57611c296119a1565b5b6000611c3886828701611b5c565b9350506020611c4986828701611b5c565b9250506040611c5a86828701611b92565b9150509250925092565b6000819050919050565b611c7781611c64565b8114611c8257600080fd5b50565b600081359050611c9481611c6e565b92915050565b600060208284031215611cb057611caf6119a1565b5b6000611cbe84828501611c85565b91505092915050565b611cd081611c64565b82525050565b6000602082019050611ceb6000830184611cc7565b92915050565b60008060408385031215611d0857611d076119a1565b5b6000611d1685828601611c85565b9250506020611d2785828601611b5c565b9150509250929050565b600060ff82169050919050565b611d4781611d31565b82525050565b6000602082019050611d626000830184611d3e565b92915050565b600060208284031215611d7e57611d7d6119a1565b5b6000611d8c84828501611b5c565b91505092915050565b6000611da082611b33565b9050919050565b611db081611d95565b8114611dbb57600080fd5b50565b600081359050611dcd81611da7565b92915050565b600080600060608486031215611dec57611deb6119a1565b5b6000611dfa86828701611dbe565b9350506020611e0b86828701611b5c565b9250506040611e1c86828701611b92565b9150509250925092565b611e2f81611b33565b82525050565b6000602082019050611e4a6000830184611e26565b92915050565b60008060408385031215611e6757611e666119a1565b5b6000611e7585828601611b5c565b9250506020611e8685828601611b5c565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611ed757607f821691505b602082108103611eea57611ee9611e90565b5b50919050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b6000611f4c602f83611a6c565b9150611f5782611ef0565b604082019050919050565b60006020820190508181036000830152611f7b81611f3f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611fbc82611b71565b9150611fc783611b71565b9250828201905080821115611fdf57611fde611f82565b5b92915050565b7f4d494e5445525f524f4c45000000000000000000000000000000000000000000600082015250565b600061201b600b83611a6c565b915061202682611fe5565b602082019050919050565b6000602082019050818103600083015261204a8161200e565b9050919050565b60008160011c9050919050565b6000808291508390505b60018511156120a85780860481111561208457612083611f82565b5b60018516156120935780820291505b80810290506120a185612051565b9450612068565b94509492505050565b6000826120c1576001905061217d565b816120cf576000905061217d565b81600181146120e557600281146120ef5761211e565b600191505061217d565b60ff84111561210157612100611f82565b5b8360020a91508482111561211857612117611f82565b5b5061217d565b5060208310610133831016604e8410600b84101617156121535782820a90508381111561214e5761214d611f82565b5b61217d565b612160848484600161205e565b9250905081840481111561217757612176611f82565b5b81810290505b9392505050565b600061218f82611b71565b915061219a83611b71565b92506121c77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846120b1565b905092915050565b60006121da82611b71565b91506121e583611b71565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561221e5761221d611f82565b5b828202905092915050565b7f4d41585f535550504c5900000000000000000000000000000000000000000000600082015250565b600061225f600a83611a6c565b915061226a82612229565b602082019050919050565b6000602082019050818103600083015261228e81612252565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006122cb602083611a6c565b91506122d682612295565b602082019050919050565b600060208201905081810360008301526122fa816122be565b9050919050565b60006040820190506123166000830185611e26565b6123236020830184611be7565b9392505050565b61233381611a2b565b811461233e57600080fd5b50565b6000815190506123508161232a565b92915050565b60006020828403121561236c5761236b6119a1565b5b600061237a84828501612341565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006123df602583611a6c565b91506123ea82612383565b604082019050919050565b6000602082019050818103600083015261240e816123d2565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612471602683611a6c565b915061247c82612415565b604082019050919050565b600060208201905081810360008301526124a081612464565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612503602483611a6c565b915061250e826124a7565b604082019050919050565b60006020820190508181036000830152612532816124f6565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612595602283611a6c565b91506125a082612539565b604082019050919050565b600060208201905081810360008301526125c481612588565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612601601d83611a6c565b915061260c826125cb565b602082019050919050565b60006020820190508181036000830152612630816125f4565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612693602583611a6c565b915061269e82612637565b604082019050919050565b600060208201905081810360008301526126c281612686565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612725602383611a6c565b9150612730826126c9565b604082019050919050565b6000602082019050818103600083015261275481612718565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006127b7602683611a6c565b91506127c28261275b565b604082019050919050565b600060208201905081810360008301526127e6816127aa565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000612823601f83611a6c565b915061282e826127ed565b602082019050919050565b6000602082019050818103600083015261285281612816565b9050919050565b600081905092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b600061289a601783612859565b91506128a582612864565b601782019050919050565b60006128bb82611a61565b6128c58185612859565b93506128d5818560208601611a7d565b80840191505092915050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b6000612917601183612859565b9150612922826128e1565b601182019050919050565b60006129388261288d565b915061294482856128b0565b915061294f8261290a565b915061295b82846128b0565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006129d082611b71565b9150600082036129e3576129e2611f82565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b6000612a24602083611a6c565b9150612a2f826129ee565b602082019050919050565b60006020820190508181036000830152612a5381612a17565b905091905056fea26469706673582212206fc7213b70a9dd226813cfefc417c65a7b768a81028d8eeb081172bba091e96e64736f6c63430008100033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000901d23afda17215ee3455e67f7708f1f72f6e240
-----Decoded View---------------
Arg [0] : minter (address): 0x901d23AfDa17215EE3455e67F7708F1F72f6e240
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000901d23afda17215ee3455e67f7708f1f72f6e240
Deployed Bytecode Sourcemap
34174:1296:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12521:204;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23379:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25730:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24499:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26511:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14357:131;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14750:147;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24341:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15798:218;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27215:238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34799:222;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24670:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2493:103;;;:::i;:::-;;35312:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1842:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12817:147;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23598:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11922:49;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27956:436;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25003:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34336:62;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15142:149;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25259:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2751:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12521:204;12606:4;12645:32;12630:47;;;:11;:47;;;;:87;;;;12681:36;12705:11;12681:23;:36::i;:::-;12630:87;12623:94;;12521:204;;;:::o;23379:100::-;23433:13;23466:5;23459:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23379:100;:::o;25730:201::-;25813:4;25830:13;25846:12;:10;:12::i;:::-;25830:28;;25869:32;25878:5;25885:7;25894:6;25869:8;:32::i;:::-;25919:4;25912:11;;;25730:201;;;;:::o;24499:108::-;24560:7;24587:12;;24580:19;;24499:108;:::o;26511:295::-;26642:4;26659:15;26677:12;:10;:12::i;:::-;26659:30;;26700:38;26716:4;26722:7;26731:6;26700:15;:38::i;:::-;26749:27;26759:4;26765:2;26769:6;26749:9;:27::i;:::-;26794:4;26787:11;;;26511:295;;;;;:::o;14357:131::-;14431:7;14458:6;:12;14465:4;14458:12;;;;;;;;;;;:22;;;14451:29;;14357:131;;;:::o;14750:147::-;14833:18;14846:4;14833:12;:18::i;:::-;12413:16;12424:4;12413:10;:16::i;:::-;14864:25:::1;14875:4;14881:7;14864:10;:25::i;:::-;14750:147:::0;;;:::o;24341:93::-;24399:5;24424:2;24417:9;;24341:93;:::o;15798:218::-;15905:12;:10;:12::i;:::-;15894:23;;:7;:23;;;15886:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;15982:26;15994:4;16000:7;15982:11;:26::i;:::-;15798:218;;:::o;27215:238::-;27303:4;27320:13;27336:12;:10;:12::i;:::-;27320:28;;27359:64;27368:5;27375:7;27412:10;27384:25;27394:5;27401:7;27384:9;:25::i;:::-;:38;;;;:::i;:::-;27359:8;:64::i;:::-;27441:4;27434:11;;;27215:238;;;;:::o;34799:222::-;34870:32;34374:24;34891:10;34870:7;:32::i;:::-;34862:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;34281:2;34269;:15;;;;:::i;:::-;34257:9;:27;;;;:::i;:::-;34319:2;:12;;;;:::i;:::-;34949:6;34933:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:36;;34925:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;34993:22;34999:7;35008:6;34993:5;:22::i;:::-;34799:222;;:::o;24670:127::-;24744:7;24771:9;:18;24781:7;24771:18;;;;;;;;;;;;;;;;24764:25;;24670:127;;;:::o;2493:103::-;2073:12;:10;:12::i;:::-;2062:23;;:7;:5;:7::i;:::-;:23;;;2054:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2558:30:::1;2585:1;2558:18;:30::i;:::-;2493:103::o:0;35312:155::-;2073:12;:10;:12::i;:::-;2062:23;;:7;:5;:7::i;:::-;:23;;;2054:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35428:5:::1;:14;;;35443:9;35454:6;35428:33;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35312:155:::0;;;:::o;1842:87::-;1888:7;1915:6;;;;;;;;;;;1908:13;;1842:87;:::o;12817:147::-;12903:4;12927:6;:12;12934:4;12927:12;;;;;;;;;;;:20;;:29;12948:7;12927:29;;;;;;;;;;;;;;;;;;;;;;;;;12920:36;;12817:147;;;;:::o;23598:104::-;23654:13;23687:7;23680:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23598:104;:::o;11922:49::-;11967:4;11922:49;;;:::o;27956:436::-;28049:4;28066:13;28082:12;:10;:12::i;:::-;28066:28;;28105:24;28132:25;28142:5;28149:7;28132:9;:25::i;:::-;28105:52;;28196:15;28176:16;:35;;28168:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;28289:60;28298:5;28305:7;28333:15;28314:16;:34;28289:8;:60::i;:::-;28380:4;28373:11;;;;27956:436;;;;:::o;25003:193::-;25082:4;25099:13;25115:12;:10;:12::i;:::-;25099:28;;25138;25148:5;25155:2;25159:6;25138:9;:28::i;:::-;25184:4;25177:11;;;25003:193;;;;:::o;34336:62::-;34374:24;34336:62;:::o;15142:149::-;15226:18;15239:4;15226:12;:18::i;:::-;12413:16;12424:4;12413:10;:16::i;:::-;15257:26:::1;15269:4;15275:7;15257:11;:26::i;:::-;15142:149:::0;;;:::o;25259:151::-;25348:7;25375:11;:18;25387:5;25375:18;;;;;;;;;;;;;;;:27;25394:7;25375:27;;;;;;;;;;;;;;;;25368:34;;25259:151;;;;:::o;2751:201::-;2073:12;:10;:12::i;:::-;2062:23;;:7;:5;:7::i;:::-;:23;;;2054:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2860:1:::1;2840:22;;:8;:22;;::::0;2832:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2916:28;2935:8;2916:18;:28::i;:::-;2751:201:::0;:::o;9880:157::-;9965:4;10004:25;9989:40;;;:11;:40;;;;9982:47;;9880:157;;;:::o;654:98::-;707:7;734:10;727:17;;654:98;:::o;31590:380::-;31743:1;31726:19;;:5;:19;;;31718:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31824:1;31805:21;;:7;:21;;;31797:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31908:6;31878:11;:18;31890:5;31878:18;;;;;;;;;;;;;;;:27;31897:7;31878:27;;;;;;;;;;;;;;;:36;;;;31946:7;31930:32;;31939:5;31930:32;;;31955:6;31930:32;;;;;;:::i;:::-;;;;;;;;31590:380;;;:::o;32261:453::-;32396:24;32423:25;32433:5;32440:7;32423:9;:25::i;:::-;32396:52;;32483:17;32463:16;:37;32459:248;;32545:6;32525:16;:26;;32517:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32629:51;32638:5;32645:7;32673:6;32654:16;:25;32629:8;:51::i;:::-;32459:248;32385:329;32261:453;;;:::o;28871:671::-;29018:1;29002:18;;:4;:18;;;28994:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29095:1;29081:16;;:2;:16;;;29073:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;29150:38;29171:4;29177:2;29181:6;29150:20;:38::i;:::-;29201:19;29223:9;:15;29233:4;29223:15;;;;;;;;;;;;;;;;29201:37;;29272:6;29257:11;:21;;29249:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;29389:6;29375:11;:20;29357:9;:15;29367:4;29357:15;;;;;;;;;;;;;;;:38;;;;29434:6;29417:9;:13;29427:2;29417:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;29473:2;29458:26;;29467:4;29458:26;;;29477:6;29458:26;;;;;;:::i;:::-;;;;;;;;29497:37;29517:4;29523:2;29527:6;29497:19;:37::i;:::-;28983:559;28871:671;;;:::o;13268:105::-;13335:30;13346:4;13352:12;:10;:12::i;:::-;13335:10;:30::i;:::-;13268:105;:::o;17299:238::-;17383:22;17391:4;17397:7;17383;:22::i;:::-;17378:152;;17454:4;17422:6;:12;17429:4;17422:12;;;;;;;;;;;:20;;:29;17443:7;17422:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;17505:12;:10;:12::i;:::-;17478:40;;17496:7;17478:40;;17490:4;17478:40;;;;;;;;;;17378:152;17299:238;;:::o;17669:239::-;17753:22;17761:4;17767:7;17753;:22::i;:::-;17749:152;;;17824:5;17792:6;:12;17799:4;17792:12;;;;;;;;;;;:20;;:29;17813:7;17792:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;17876:12;:10;:12::i;:::-;17849:40;;17867:7;17849:40;;17861:4;17849:40;;;;;;;;;;17749:152;17669:239;;:::o;29829:399::-;29932:1;29913:21;;:7;:21;;;29905:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;29983:49;30012:1;30016:7;30025:6;29983:20;:49::i;:::-;30061:6;30045:12;;:22;;;;;;;:::i;:::-;;;;;;;;30100:6;30078:9;:18;30088:7;30078:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;30143:7;30122:37;;30139:1;30122:37;;;30152:6;30122:37;;;;;;:::i;:::-;;;;;;;;30172:48;30200:1;30204:7;30213:6;30172:19;:48::i;:::-;29829:399;;:::o;3112:191::-;3186:16;3205:6;;;;;;;;;;;3186:25;;3231:8;3222:6;;:17;;;;;;;;;;;;;;;;;;3286:8;3255:40;;3276:8;3255:40;;;;;;;;;;;;3175:128;3112:191;:::o;33314:125::-;;;;:::o;34043:124::-;;;;:::o;13663:505::-;13752:22;13760:4;13766:7;13752;:22::i;:::-;13747:414;;13940:41;13968:7;13940:41;;13978:2;13940:19;:41::i;:::-;14054:38;14082:4;14074:13;;14089:2;14054:19;:38::i;:::-;13845:270;;;;;;;;;:::i;:::-;;;;;;;;;;;;;13791:358;;;;;;;;;;;:::i;:::-;;;;;;;;13747:414;13663:505;;:::o;7839:451::-;7914:13;7940:19;7985:1;7976:6;7972:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;7962:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7940:47;;7998:15;:6;8005:1;7998:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;8024;:6;8031:1;8024:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;8055:9;8080:1;8071:6;8067:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;8055:26;;8050:135;8087:1;8083;:5;8050:135;;;8122:12;8143:3;8135:5;:11;8122:25;;;;;;;:::i;:::-;;;;;8110:6;8117:1;8110:9;;;;;;;;:::i;:::-;;;;;:37;;;;;;;;;;;8172:1;8162:11;;;;;8090:3;;;;:::i;:::-;;;8050:135;;;;8212:1;8203:5;:10;8195:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;8275:6;8261:21;;;7839:451;;;;:::o;88:117:1:-;197:1;194;187:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:246::-;1879:1;1889:113;1903:6;1900:1;1897:13;1889:113;;;1988:1;1983:3;1979:11;1973:18;1969:1;1964:3;1960:11;1953:39;1925:2;1922:1;1918:10;1913:15;;1889:113;;;2036:1;2027:6;2022:3;2018:16;2011:27;1860:184;1798:246;;;:::o;2050:102::-;2091:6;2142:2;2138:7;2133:2;2126:5;2122:14;2118:28;2108:38;;2050:102;;;:::o;2158:377::-;2246:3;2274:39;2307:5;2274:39;:::i;:::-;2329:71;2393:6;2388:3;2329:71;:::i;:::-;2322:78;;2409:65;2467:6;2462:3;2455:4;2448:5;2444:16;2409:65;:::i;:::-;2499:29;2521:6;2499:29;:::i;:::-;2494:3;2490:39;2483:46;;2250:285;2158:377;;;;:::o;2541:313::-;2654:4;2692:2;2681:9;2677:18;2669:26;;2741:9;2735:4;2731:20;2727:1;2716:9;2712:17;2705:47;2769:78;2842:4;2833:6;2769:78;:::i;:::-;2761:86;;2541:313;;;;:::o;2860:126::-;2897:7;2937:42;2930:5;2926:54;2915:65;;2860:126;;;:::o;2992:96::-;3029:7;3058:24;3076:5;3058:24;:::i;:::-;3047:35;;2992:96;;;:::o;3094:122::-;3167:24;3185:5;3167:24;:::i;:::-;3160:5;3157:35;3147:63;;3206:1;3203;3196:12;3147:63;3094:122;:::o;3222:139::-;3268:5;3306:6;3293:20;3284:29;;3322:33;3349:5;3322:33;:::i;:::-;3222:139;;;;:::o;3367:77::-;3404:7;3433:5;3422:16;;3367:77;;;:::o;3450:122::-;3523:24;3541:5;3523:24;:::i;:::-;3516:5;3513:35;3503:63;;3562:1;3559;3552:12;3503:63;3450:122;:::o;3578:139::-;3624:5;3662:6;3649:20;3640:29;;3678:33;3705:5;3678:33;:::i;:::-;3578:139;;;;:::o;3723:474::-;3791:6;3799;3848:2;3836:9;3827:7;3823:23;3819:32;3816:119;;;3854:79;;:::i;:::-;3816:119;3974:1;3999:53;4044:7;4035:6;4024:9;4020:22;3999:53;:::i;:::-;3989:63;;3945:117;4101:2;4127:53;4172:7;4163:6;4152:9;4148:22;4127:53;:::i;:::-;4117:63;;4072:118;3723:474;;;;;:::o;4203:118::-;4290:24;4308:5;4290:24;:::i;:::-;4285:3;4278:37;4203:118;;:::o;4327:222::-;4420:4;4458:2;4447:9;4443:18;4435:26;;4471:71;4539:1;4528:9;4524:17;4515:6;4471:71;:::i;:::-;4327:222;;;;:::o;4555:619::-;4632:6;4640;4648;4697:2;4685:9;4676:7;4672:23;4668:32;4665:119;;;4703:79;;:::i;:::-;4665:119;4823:1;4848:53;4893:7;4884:6;4873:9;4869:22;4848:53;:::i;:::-;4838:63;;4794:117;4950:2;4976:53;5021:7;5012:6;5001:9;4997:22;4976:53;:::i;:::-;4966:63;;4921:118;5078:2;5104:53;5149:7;5140:6;5129:9;5125:22;5104:53;:::i;:::-;5094:63;;5049:118;4555:619;;;;;:::o;5180:77::-;5217:7;5246:5;5235:16;;5180:77;;;:::o;5263:122::-;5336:24;5354:5;5336:24;:::i;:::-;5329:5;5326:35;5316:63;;5375:1;5372;5365:12;5316:63;5263:122;:::o;5391:139::-;5437:5;5475:6;5462:20;5453:29;;5491:33;5518:5;5491:33;:::i;:::-;5391:139;;;;:::o;5536:329::-;5595:6;5644:2;5632:9;5623:7;5619:23;5615:32;5612:119;;;5650:79;;:::i;:::-;5612:119;5770:1;5795:53;5840:7;5831:6;5820:9;5816:22;5795:53;:::i;:::-;5785:63;;5741:117;5536:329;;;;:::o;5871:118::-;5958:24;5976:5;5958:24;:::i;:::-;5953:3;5946:37;5871:118;;:::o;5995:222::-;6088:4;6126:2;6115:9;6111:18;6103:26;;6139:71;6207:1;6196:9;6192:17;6183:6;6139:71;:::i;:::-;5995:222;;;;:::o;6223:474::-;6291:6;6299;6348:2;6336:9;6327:7;6323:23;6319:32;6316:119;;;6354:79;;:::i;:::-;6316:119;6474:1;6499:53;6544:7;6535:6;6524:9;6520:22;6499:53;:::i;:::-;6489:63;;6445:117;6601:2;6627:53;6672:7;6663:6;6652:9;6648:22;6627:53;:::i;:::-;6617:63;;6572:118;6223:474;;;;;:::o;6703:86::-;6738:7;6778:4;6771:5;6767:16;6756:27;;6703:86;;;:::o;6795:112::-;6878:22;6894:5;6878:22;:::i;:::-;6873:3;6866:35;6795:112;;:::o;6913:214::-;7002:4;7040:2;7029:9;7025:18;7017:26;;7053:67;7117:1;7106:9;7102:17;7093:6;7053:67;:::i;:::-;6913:214;;;;:::o;7133:329::-;7192:6;7241:2;7229:9;7220:7;7216:23;7212:32;7209:119;;;7247:79;;:::i;:::-;7209:119;7367:1;7392:53;7437:7;7428:6;7417:9;7413:22;7392:53;:::i;:::-;7382:63;;7338:117;7133:329;;;;:::o;7468:110::-;7519:7;7548:24;7566:5;7548:24;:::i;:::-;7537:35;;7468:110;;;:::o;7584:150::-;7671:38;7703:5;7671:38;:::i;:::-;7664:5;7661:49;7651:77;;7724:1;7721;7714:12;7651:77;7584:150;:::o;7740:167::-;7800:5;7838:6;7825:20;7816:29;;7854:47;7895:5;7854:47;:::i;:::-;7740:167;;;;:::o;7913:647::-;8004:6;8012;8020;8069:2;8057:9;8048:7;8044:23;8040:32;8037:119;;;8075:79;;:::i;:::-;8037:119;8195:1;8220:67;8279:7;8270:6;8259:9;8255:22;8220:67;:::i;:::-;8210:77;;8166:131;8336:2;8362:53;8407:7;8398:6;8387:9;8383:22;8362:53;:::i;:::-;8352:63;;8307:118;8464:2;8490:53;8535:7;8526:6;8515:9;8511:22;8490:53;:::i;:::-;8480:63;;8435:118;7913:647;;;;;:::o;8566:118::-;8653:24;8671:5;8653:24;:::i;:::-;8648:3;8641:37;8566:118;;:::o;8690:222::-;8783:4;8821:2;8810:9;8806:18;8798:26;;8834:71;8902:1;8891:9;8887:17;8878:6;8834:71;:::i;:::-;8690:222;;;;:::o;8918:474::-;8986:6;8994;9043:2;9031:9;9022:7;9018:23;9014:32;9011:119;;;9049:79;;:::i;:::-;9011:119;9169:1;9194:53;9239:7;9230:6;9219:9;9215:22;9194:53;:::i;:::-;9184:63;;9140:117;9296:2;9322:53;9367:7;9358:6;9347:9;9343:22;9322:53;:::i;:::-;9312:63;;9267:118;8918:474;;;;;:::o;9398:180::-;9446:77;9443:1;9436:88;9543:4;9540:1;9533:15;9567:4;9564:1;9557:15;9584:320;9628:6;9665:1;9659:4;9655:12;9645:22;;9712:1;9706:4;9702:12;9733:18;9723:81;;9789:4;9781:6;9777:17;9767:27;;9723:81;9851:2;9843:6;9840:14;9820:18;9817:38;9814:84;;9870:18;;:::i;:::-;9814:84;9635:269;9584:320;;;:::o;9910:234::-;10050:34;10046:1;10038:6;10034:14;10027:58;10119:17;10114:2;10106:6;10102:15;10095:42;9910:234;:::o;10150:366::-;10292:3;10313:67;10377:2;10372:3;10313:67;:::i;:::-;10306:74;;10389:93;10478:3;10389:93;:::i;:::-;10507:2;10502:3;10498:12;10491:19;;10150:366;;;:::o;10522:419::-;10688:4;10726:2;10715:9;10711:18;10703:26;;10775:9;10769:4;10765:20;10761:1;10750:9;10746:17;10739:47;10803:131;10929:4;10803:131;:::i;:::-;10795:139;;10522:419;;;:::o;10947:180::-;10995:77;10992:1;10985:88;11092:4;11089:1;11082:15;11116:4;11113:1;11106:15;11133:191;11173:3;11192:20;11210:1;11192:20;:::i;:::-;11187:25;;11226:20;11244:1;11226:20;:::i;:::-;11221:25;;11269:1;11266;11262:9;11255:16;;11290:3;11287:1;11284:10;11281:36;;;11297:18;;:::i;:::-;11281:36;11133:191;;;;:::o;11330:161::-;11470:13;11466:1;11458:6;11454:14;11447:37;11330:161;:::o;11497:366::-;11639:3;11660:67;11724:2;11719:3;11660:67;:::i;:::-;11653:74;;11736:93;11825:3;11736:93;:::i;:::-;11854:2;11849:3;11845:12;11838:19;;11497:366;;;:::o;11869:419::-;12035:4;12073:2;12062:9;12058:18;12050:26;;12122:9;12116:4;12112:20;12108:1;12097:9;12093:17;12086:47;12150:131;12276:4;12150:131;:::i;:::-;12142:139;;11869:419;;;:::o;12294:102::-;12336:8;12383:5;12380:1;12376:13;12355:34;;12294:102;;;:::o;12402:848::-;12463:5;12470:4;12494:6;12485:15;;12518:5;12509:14;;12532:712;12553:1;12543:8;12540:15;12532:712;;;12648:4;12643:3;12639:14;12633:4;12630:24;12627:50;;;12657:18;;:::i;:::-;12627:50;12707:1;12697:8;12693:16;12690:451;;;13122:4;13115:5;13111:16;13102:25;;12690:451;13172:4;13166;13162:15;13154:23;;13202:32;13225:8;13202:32;:::i;:::-;13190:44;;12532:712;;;12402:848;;;;;;;:::o;13256:1073::-;13310:5;13501:8;13491:40;;13522:1;13513:10;;13524:5;;13491:40;13550:4;13540:36;;13567:1;13558:10;;13569:5;;13540:36;13636:4;13684:1;13679:27;;;;13720:1;13715:191;;;;13629:277;;13679:27;13697:1;13688:10;;13699:5;;;13715:191;13760:3;13750:8;13747:17;13744:43;;;13767:18;;:::i;:::-;13744:43;13816:8;13813:1;13809:16;13800:25;;13851:3;13844:5;13841:14;13838:40;;;13858:18;;:::i;:::-;13838:40;13891:5;;;13629:277;;14015:2;14005:8;14002:16;13996:3;13990:4;13987:13;13983:36;13965:2;13955:8;13952:16;13947:2;13941:4;13938:12;13934:35;13918:111;13915:246;;;14071:8;14065:4;14061:19;14052:28;;14106:3;14099:5;14096:14;14093:40;;;14113:18;;:::i;:::-;14093:40;14146:5;;13915:246;14186:42;14224:3;14214:8;14208:4;14205:1;14186:42;:::i;:::-;14171:57;;;;14260:4;14255:3;14251:14;14244:5;14241:25;14238:51;;;14269:18;;:::i;:::-;14238:51;14318:4;14311:5;14307:16;14298:25;;13256:1073;;;;;;:::o;14335:285::-;14395:5;14419:23;14437:4;14419:23;:::i;:::-;14411:31;;14463:27;14481:8;14463:27;:::i;:::-;14451:39;;14509:104;14546:66;14536:8;14530:4;14509:104;:::i;:::-;14500:113;;14335:285;;;;:::o;14626:348::-;14666:7;14689:20;14707:1;14689:20;:::i;:::-;14684:25;;14723:20;14741:1;14723:20;:::i;:::-;14718:25;;14911:1;14843:66;14839:74;14836:1;14833:81;14828:1;14821:9;14814:17;14810:105;14807:131;;;14918:18;;:::i;:::-;14807:131;14966:1;14963;14959:9;14948:20;;14626:348;;;;:::o;14980:160::-;15120:12;15116:1;15108:6;15104:14;15097:36;14980:160;:::o;15146:366::-;15288:3;15309:67;15373:2;15368:3;15309:67;:::i;:::-;15302:74;;15385:93;15474:3;15385:93;:::i;:::-;15503:2;15498:3;15494:12;15487:19;;15146:366;;;:::o;15518:419::-;15684:4;15722:2;15711:9;15707:18;15699:26;;15771:9;15765:4;15761:20;15757:1;15746:9;15742:17;15735:47;15799:131;15925:4;15799:131;:::i;:::-;15791:139;;15518:419;;;:::o;15943:182::-;16083:34;16079:1;16071:6;16067:14;16060:58;15943:182;:::o;16131:366::-;16273:3;16294:67;16358:2;16353:3;16294:67;:::i;:::-;16287:74;;16370:93;16459:3;16370:93;:::i;:::-;16488:2;16483:3;16479:12;16472:19;;16131:366;;;:::o;16503:419::-;16669:4;16707:2;16696:9;16692:18;16684:26;;16756:9;16750:4;16746:20;16742:1;16731:9;16727:17;16720:47;16784:131;16910:4;16784:131;:::i;:::-;16776:139;;16503:419;;;:::o;16928:332::-;17049:4;17087:2;17076:9;17072:18;17064:26;;17100:71;17168:1;17157:9;17153:17;17144:6;17100:71;:::i;:::-;17181:72;17249:2;17238:9;17234:18;17225:6;17181:72;:::i;:::-;16928:332;;;;;:::o;17266:116::-;17336:21;17351:5;17336:21;:::i;:::-;17329:5;17326:32;17316:60;;17372:1;17369;17362:12;17316:60;17266:116;:::o;17388:137::-;17442:5;17473:6;17467:13;17458:22;;17489:30;17513:5;17489:30;:::i;:::-;17388:137;;;;:::o;17531:345::-;17598:6;17647:2;17635:9;17626:7;17622:23;17618:32;17615:119;;;17653:79;;:::i;:::-;17615:119;17773:1;17798:61;17851:7;17842:6;17831:9;17827:22;17798:61;:::i;:::-;17788:71;;17744:125;17531:345;;;;:::o;17882:224::-;18022:34;18018:1;18010:6;18006:14;17999:58;18091:7;18086:2;18078:6;18074:15;18067:32;17882:224;:::o;18112:366::-;18254:3;18275:67;18339:2;18334:3;18275:67;:::i;:::-;18268:74;;18351:93;18440:3;18351:93;:::i;:::-;18469:2;18464:3;18460:12;18453:19;;18112:366;;;:::o;18484:419::-;18650:4;18688:2;18677:9;18673:18;18665:26;;18737:9;18731:4;18727:20;18723:1;18712:9;18708:17;18701:47;18765:131;18891:4;18765:131;:::i;:::-;18757:139;;18484:419;;;:::o;18909:225::-;19049:34;19045:1;19037:6;19033:14;19026:58;19118:8;19113:2;19105:6;19101:15;19094:33;18909:225;:::o;19140:366::-;19282:3;19303:67;19367:2;19362:3;19303:67;:::i;:::-;19296:74;;19379:93;19468:3;19379:93;:::i;:::-;19497:2;19492:3;19488:12;19481:19;;19140:366;;;:::o;19512:419::-;19678:4;19716:2;19705:9;19701:18;19693:26;;19765:9;19759:4;19755:20;19751:1;19740:9;19736:17;19729:47;19793:131;19919:4;19793:131;:::i;:::-;19785:139;;19512:419;;;:::o;19937:223::-;20077:34;20073:1;20065:6;20061:14;20054:58;20146:6;20141:2;20133:6;20129:15;20122:31;19937:223;:::o;20166:366::-;20308:3;20329:67;20393:2;20388:3;20329:67;:::i;:::-;20322:74;;20405:93;20494:3;20405:93;:::i;:::-;20523:2;20518:3;20514:12;20507:19;;20166:366;;;:::o;20538:419::-;20704:4;20742:2;20731:9;20727:18;20719:26;;20791:9;20785:4;20781:20;20777:1;20766:9;20762:17;20755:47;20819:131;20945:4;20819:131;:::i;:::-;20811:139;;20538:419;;;:::o;20963:221::-;21103:34;21099:1;21091:6;21087:14;21080:58;21172:4;21167:2;21159:6;21155:15;21148:29;20963:221;:::o;21190:366::-;21332:3;21353:67;21417:2;21412:3;21353:67;:::i;:::-;21346:74;;21429:93;21518:3;21429:93;:::i;:::-;21547:2;21542:3;21538:12;21531:19;;21190:366;;;:::o;21562:419::-;21728:4;21766:2;21755:9;21751:18;21743:26;;21815:9;21809:4;21805:20;21801:1;21790:9;21786:17;21779:47;21843:131;21969:4;21843:131;:::i;:::-;21835:139;;21562:419;;;:::o;21987:179::-;22127:31;22123:1;22115:6;22111:14;22104:55;21987:179;:::o;22172:366::-;22314:3;22335:67;22399:2;22394:3;22335:67;:::i;:::-;22328:74;;22411:93;22500:3;22411:93;:::i;:::-;22529:2;22524:3;22520:12;22513:19;;22172:366;;;:::o;22544:419::-;22710:4;22748:2;22737:9;22733:18;22725:26;;22797:9;22791:4;22787:20;22783:1;22772:9;22768:17;22761:47;22825:131;22951:4;22825:131;:::i;:::-;22817:139;;22544:419;;;:::o;22969:224::-;23109:34;23105:1;23097:6;23093:14;23086:58;23178:7;23173:2;23165:6;23161:15;23154:32;22969:224;:::o;23199:366::-;23341:3;23362:67;23426:2;23421:3;23362:67;:::i;:::-;23355:74;;23438:93;23527:3;23438:93;:::i;:::-;23556:2;23551:3;23547:12;23540:19;;23199:366;;;:::o;23571:419::-;23737:4;23775:2;23764:9;23760:18;23752:26;;23824:9;23818:4;23814:20;23810:1;23799:9;23795:17;23788:47;23852:131;23978:4;23852:131;:::i;:::-;23844:139;;23571:419;;;:::o;23996:222::-;24136:34;24132:1;24124:6;24120:14;24113:58;24205:5;24200:2;24192:6;24188:15;24181:30;23996:222;:::o;24224:366::-;24366:3;24387:67;24451:2;24446:3;24387:67;:::i;:::-;24380:74;;24463:93;24552:3;24463:93;:::i;:::-;24581:2;24576:3;24572:12;24565:19;;24224:366;;;:::o;24596:419::-;24762:4;24800:2;24789:9;24785:18;24777:26;;24849:9;24843:4;24839:20;24835:1;24824:9;24820:17;24813:47;24877:131;25003:4;24877:131;:::i;:::-;24869:139;;24596:419;;;:::o;25021:225::-;25161:34;25157:1;25149:6;25145:14;25138:58;25230:8;25225:2;25217:6;25213:15;25206:33;25021:225;:::o;25252:366::-;25394:3;25415:67;25479:2;25474:3;25415:67;:::i;:::-;25408:74;;25491:93;25580:3;25491:93;:::i;:::-;25609:2;25604:3;25600:12;25593:19;;25252:366;;;:::o;25624:419::-;25790:4;25828:2;25817:9;25813:18;25805:26;;25877:9;25871:4;25867:20;25863:1;25852:9;25848:17;25841:47;25905:131;26031:4;25905:131;:::i;:::-;25897:139;;25624:419;;;:::o;26049:181::-;26189:33;26185:1;26177:6;26173:14;26166:57;26049:181;:::o;26236:366::-;26378:3;26399:67;26463:2;26458:3;26399:67;:::i;:::-;26392:74;;26475:93;26564:3;26475:93;:::i;:::-;26593:2;26588:3;26584:12;26577:19;;26236:366;;;:::o;26608:419::-;26774:4;26812:2;26801:9;26797:18;26789:26;;26861:9;26855:4;26851:20;26847:1;26836:9;26832:17;26825:47;26889:131;27015:4;26889:131;:::i;:::-;26881:139;;26608:419;;;:::o;27033:148::-;27135:11;27172:3;27157:18;;27033:148;;;;:::o;27187:173::-;27327:25;27323:1;27315:6;27311:14;27304:49;27187:173;:::o;27366:402::-;27526:3;27547:85;27629:2;27624:3;27547:85;:::i;:::-;27540:92;;27641:93;27730:3;27641:93;:::i;:::-;27759:2;27754:3;27750:12;27743:19;;27366:402;;;:::o;27774:390::-;27880:3;27908:39;27941:5;27908:39;:::i;:::-;27963:89;28045:6;28040:3;27963:89;:::i;:::-;27956:96;;28061:65;28119:6;28114:3;28107:4;28100:5;28096:16;28061:65;:::i;:::-;28151:6;28146:3;28142:16;28135:23;;27884:280;27774:390;;;;:::o;28170:167::-;28310:19;28306:1;28298:6;28294:14;28287:43;28170:167;:::o;28343:402::-;28503:3;28524:85;28606:2;28601:3;28524:85;:::i;:::-;28517:92;;28618:93;28707:3;28618:93;:::i;:::-;28736:2;28731:3;28727:12;28720:19;;28343:402;;;:::o;28751:967::-;29133:3;29155:148;29299:3;29155:148;:::i;:::-;29148:155;;29320:95;29411:3;29402:6;29320:95;:::i;:::-;29313:102;;29432:148;29576:3;29432:148;:::i;:::-;29425:155;;29597:95;29688:3;29679:6;29597:95;:::i;:::-;29590:102;;29709:3;29702:10;;28751:967;;;;;:::o;29724:180::-;29772:77;29769:1;29762:88;29869:4;29866:1;29859:15;29893:4;29890:1;29883:15;29910:180;29958:77;29955:1;29948:88;30055:4;30052:1;30045:15;30079:4;30076:1;30069:15;30096:171;30135:3;30158:24;30176:5;30158:24;:::i;:::-;30149:33;;30204:4;30197:5;30194:15;30191:41;;30212:18;;:::i;:::-;30191:41;30259:1;30252:5;30248:13;30241:20;;30096:171;;;:::o;30273:182::-;30413:34;30409:1;30401:6;30397:14;30390:58;30273:182;:::o;30461:366::-;30603:3;30624:67;30688:2;30683:3;30624:67;:::i;:::-;30617:74;;30700:93;30789:3;30700:93;:::i;:::-;30818:2;30813:3;30809:12;30802:19;;30461:366;;;:::o;30833:419::-;30999:4;31037:2;31026:9;31022:18;31014:26;;31086:9;31080:4;31076:20;31072:1;31061:9;31057:17;31050:47;31114:131;31240:4;31114:131;:::i;:::-;31106:139;;30833:419;;;:::o
Swarm Source
ipfs://6fc7213b70a9dd226813cfefc417c65a7b768a81028d8eeb081172bba091e96e
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.