ERC-20
Fashion
Overview
Max Total Supply
999,800,000.000000499482 LUXO
Holders
293 ( 0.341%)
Market
Price
$0.05 @ 0.000018 ETH (-1.69%)
Onchain Market Cap
$50,777,737.92
Circulating Supply Market Cap
$0.00
Other Info
Token Contract (WITH 18 Decimals)
Balance
31,667.4 LUXOValue
$1,608.32 ( ~0.58562687702188 Eth) [0.0032%]Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
NokuCustomERC20AdvancedLite
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-10-14 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @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); } /** * @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); } } /** * @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; } } /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @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); } /** * @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: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be 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 {} } /** * @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() { _setOwner(_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 { _setOwner(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"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } /** * @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; } /** * @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; } } /** * @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, _msgSender()); _; } /** * @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 override returns (bool) { return _roles[role].members[account]; } /** * @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 { 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 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 granted `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}. * ==== */ 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); } function _grantRole(bytes32 role, address account) private { if (!hasRole(role, account)) { _roles[role].members[account] = true; emit RoleGranted(role, account, _msgSender()); } } function _revokeRole(bytes32 role, address account) private { if (hasRole(role, account)) { _roles[role].members[account] = false; emit RoleRevoked(role, account, _msgSender()); } } } /** * @title SupportsInterfaceWithLookup * @dev Implements ERC165 using a lookup table. */ contract SupportsInterfaceWithLookup is AccessControl { bytes4 public constant InterfaceId_ERC165 = 0x01ffc9a7; /** * 0x01ffc9a7 === * bytes4(keccak256('supportsInterface(bytes4)')) */ /** * @dev a mapping of interface id to whether or not it's supported */ mapping(bytes4 => bool) internal supportedInterfaces; /** * @dev A contract implementing SupportsInterfaceWithLookup * implement ERC165 itself */ constructor() { _registerInterface(InterfaceId_ERC165); } /** * @dev implement supportsInterface(bytes4) using a lookup table */ function supportsInterface(bytes4 _interfaceId) public view virtual override returns (bool) { return super.supportsInterface(_interfaceId) || supportedInterfaces[_interfaceId]; } /** * @dev private method for registering an interface */ function _registerInterface(bytes4 _interfaceId) internal { require(_interfaceId != 0xffffffff); supportedInterfaces[_interfaceId] = true; } } /** * @title Issuable * @dev The Issuable contract defines the issuer role who can perform certain kind of actions * even if he is not the owner. * An issuer can transfer his role to a new address. */ contract Issuable is Ownable, SupportsInterfaceWithLookup { bytes32 public constant ISSUER_ROLE = keccak256("ISSUER_ROLE"); /** * @dev Throws if called by any account that's not a issuer. */ modifier onlyIssuer() { require(isIssuer(_msgSender()), 'Issuable: caller is not the issuer'); _; } modifier onlyOwnerOrIssuer() { require(_msgSender() == owner() || isIssuer(_msgSender()), 'Issuable: caller is not the issuer or the owner'); _; } /** * @dev getter to determine if address has issuer role */ function isIssuer(address _operator) public view returns (bool) { return hasRole(ISSUER_ROLE, _operator); } /** * @dev add a new issuer address * @param _operator address */ function addIssuer(address _operator) public onlyOwner { grantRole(ISSUER_ROLE, _operator); } /** * @dev remove an address from issuers * @param _operator address */ function removeIssuer(address _operator) public onlyOwner { revokeRole(ISSUER_ROLE, _operator); } /** * @dev Allows the current issuer to transfer his role to a newIssuer. * @param _newIssuer The address to transfer the issuer role to. */ function transferIssuer(address _newIssuer) public onlyIssuer { require(_newIssuer != address(0)); revokeRole(ISSUER_ROLE, _msgSender()); grantRole(ISSUER_ROLE, _newIssuer); } } // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } abstract contract NokuCustomTokenLite { using SafeMath for uint256; /** * @dev Presence of this function indicates the contract is a Custom Token Lite. */ function isCustomTokenLite() public pure returns(bool) { return true; } } /** * @dev Extension of {ERC20} that allows token holders to destroy both their own * tokens and those that they have an allowance for, in a way that can be * recognized off-chain (via event analysis). */ abstract contract ERC20Burnable is Context, ERC20 { /** * @dev Destroys `amount` tokens from the caller. * * See {ERC20-_burn}. */ function burn(uint256 amount) public virtual { _burn(_msgSender(), amount); } /** * @dev Destroys `amount` tokens from `account`, deducting from the caller's * allowance. * * See {ERC20-_burn} and {ERC20-allowance}. * * Requirements: * * - the caller must have allowance for ``accounts``'s tokens of at least * `amount`. */ function burnFrom(address account, uint256 amount) public virtual { uint256 currentAllowance = allowance(account, _msgSender()); require(currentAllowance >= amount, "ERC20: burn amount exceeds allowance"); unchecked { _approve(account, _msgSender(), currentAllowance - amount); } _burn(account, amount); } } abstract contract ERC20BurnableWithFinish is Ownable, ERC20Burnable { event LogBurnFinished(); // Flag indicating if Custom Token burning has been permanently finished or not. bool public burningFinished; modifier canBurn() { require(!burningFinished, "burning finished"); _; } /** * @dev Stop burning new tokens. * @return true if the operation was successful. */ function finishBurning() public onlyOwner canBurn returns(bool) { burningFinished = true; emit LogBurnFinished(); return true; } function burn(uint256 amount) public override virtual canBurn { super.burn(amount); } function burnFrom(address account, uint256 amount) public override virtual canBurn { super.burnFrom(account, amount); } } /** * @title Mintable token */ abstract contract ERC20Mintable is Context, Ownable, ERC20 { event Mint(address indexed to, uint256 amount); event MintFinished(); bool public mintingFinished = false; modifier canMint() { require(!mintingFinished); _; } modifier hasMintPermission() { require(_msgSender() == owner()); _; } /** * @dev Function to mint tokens * @param _to The address that will receive the minted tokens. * @param _amount The amount of tokens to mint. */ function mint(address _to, uint256 _amount) virtual hasMintPermission canMint public { _mint(_to, _amount); } /** * @dev Function to stop minting new tokens. * @return True if the operation was successful. */ function finishMinting() onlyOwner canMint public returns (bool) { mintingFinished = true; emit MintFinished(); return true; } } /** * @title Frozenlist * @dev The Frozenlist contract has a frozen list of addresses, and provides basic authorization control functions. * This simplifies the implementation of "user permissions". */ contract Frozenlist is Issuable { event FundsFrozen(address target); bytes32 public constant FROZENLISTED_ROLE = keccak256("FROZENLISTED_ROLE"); /** * @dev Throws if operator is frozen. * @param _operator address */ modifier onlyIfNotFrozen(address _operator) { require(!hasRole(FROZENLISTED_ROLE, _operator), "Account frozen"); _; } /** * @dev add an address to the frozenlist * @param _operator address */ function addAddressToFrozenlist(address _operator) public onlyIssuer { grantRole(FROZENLISTED_ROLE, _operator); emit FundsFrozen(_operator); } /** * @dev getter to determine if address is in frozenlist */ function frozenlist(address _operator) public view returns (bool) { return hasRole(FROZENLISTED_ROLE, _operator); } /** * @dev add addresses to the frozenlist * @param _operators addresses */ function addAddressesToFrozenlist(address[] memory _operators) public onlyIssuer { for (uint256 i = 0; i < _operators.length; i++) { addAddressToFrozenlist(_operators[i]); } } /** * @dev remove an address from the frozenlist * @param _operator address */ function removeAddressFromFrozenlist(address _operator) public onlyIssuer { revokeRole(FROZENLISTED_ROLE, _operator); } /** * @dev remove addresses from the frozenlist * @param _operators addresses */ function removeAddressesFromFrozenlist(address[] memory _operators) public onlyIssuer { for (uint256 i = 0; i < _operators.length; i++) { removeAddressFromFrozenlist(_operators[i]); } } } /** * @title Whitelist * @dev The Whitelist contract has a whitelist of addresses, and provides basic authorization control functions. * This simplifies the implementation of "user permissions". By default whitelist in not enabled. */ contract Whitelist is Issuable { bytes32 public constant WHITELISTED_ROLE = keccak256("WHITELISTED_ROLE"); bool public whitelistEnabled; constructor(bool _enableWhitelist) { whitelistEnabled = _enableWhitelist; } /** * @dev Throws if operator is not whitelisted and whitelist is enabled. * @param _operator address */ modifier onlyIfWhitelisted(address _operator) { if(whitelistEnabled) { require(hasRole(WHITELISTED_ROLE, _operator), "Account not whitelisted"); } _; } function enableWhitelist() public onlyOwner { whitelistEnabled = true; } function disableWhitelist() public onlyOwner { whitelistEnabled = false; } /** * @dev add an address to the whitelist * @param _operator address */ function addAddressToWhitelist(address _operator) public onlyIssuer { grantRole(WHITELISTED_ROLE, _operator); } /** * @dev getter to determine if address is in whitelist */ function whitelist(address _operator) public view returns (bool) { return hasRole(WHITELISTED_ROLE, _operator); } /** * @dev add addresses to the whitelist * @param _operators addresses */ function addAddressesToWhitelist(address[] memory _operators) public onlyIssuer { for (uint256 i = 0; i < _operators.length; i++) { addAddressToWhitelist(_operators[i]); } } /** * @dev remove an address from the whitelist * @param _operator address */ function removeAddressFromWhitelist(address _operator) public onlyIssuer { revokeRole(WHITELISTED_ROLE, _operator); } /** * @dev remove addresses from the whitelist * @param _operators addresses */ function removeAddressesFromWhitelist(address[] memory _operators) public onlyIssuer { for (uint256 i = 0; i < _operators.length; i++) { removeAddressFromWhitelist(_operators[i]); } } } contract BasicSecurityToken is ERC20BurnableWithFinish, ERC20Mintable, Frozenlist, Whitelist { /// @dev This emits when funds are reassigned event FundsReassigned(address from, address to, uint256 amount); /// @dev This emits when funds are revoked event FundsRevoked(address from, uint256 amount); bytes4 internal constant InterfaceId_BasicSecurityToken = 0x4d1e390c; /** * 0x4d1e390c === * bytes4(keccak256('revoke(address)')) ^ * bytes4(keccak256('reassign(address,address)')) ^ * bytes4(keccak256('frozenlist(address)')) */ constructor(string memory name, string memory symbol, bool enableWhitelist) Ownable() ERC20(name, symbol) Whitelist(enableWhitelist) { require(bytes(name).length > 0, "name is empty"); require(bytes(symbol).length > 0, "symbol is empty"); _registerInterface(InterfaceId_BasicSecurityToken); _setupRole(DEFAULT_ADMIN_ROLE, owner()); addIssuer(owner()); if(enableWhitelist) { addAddressToWhitelist(owner()); } } function decimals() public view virtual override returns (uint8) { return 0; } //Public functions (place the view and pure functions last) function mint(address account, uint256 amount) override public onlyOwner onlyIfNotFrozen(account) onlyIfWhitelisted(account) { super.mint(account, amount); } function transfer(address recipient, uint256 amount) override public onlyIfNotFrozen(_msgSender()) onlyIfNotFrozen(recipient) onlyIfWhitelisted(recipient) returns (bool) { require(super.transfer(recipient, amount), "Transfer failed"); return true; } function transferFrom(address sender, address recipient, uint256 amount) override public onlyIfNotFrozen(sender) onlyIfNotFrozen(recipient) onlyIfWhitelisted(recipient) returns (bool) { require(super.transferFrom(sender, recipient, amount), "Transfer failed"); return true; } function reassign(address from, address to) public onlyIssuer { uint256 fundsReassigned = balanceOf(from); _transfer(from, to, fundsReassigned); emit FundsReassigned(from, to, fundsReassigned); } function reassign(address from, address to, uint256 amount) public onlyIssuer { _transfer(from, to, amount); emit FundsReassigned(from, to, amount); } function revoke(address from) public onlyIssuer { uint256 fundsRevoked = balanceOf(from); _transfer(from, _msgSender(), fundsRevoked); emit FundsRevoked(from, fundsRevoked); } function revoke(address from, uint256 amount) public onlyIssuer { _transfer(from, _msgSender(), amount); emit FundsRevoked(from, amount); } function transferOwnership(address _newOwner) override public onlyOwner { if(isIssuer(owner())) { if(whitelistEnabled) { removeAddressFromWhitelist(owner()); addAddressToWhitelist(_newOwner); } transferIssuer(_newOwner); } _setupRole(DEFAULT_ADMIN_ROLE, _newOwner); renounceRole(DEFAULT_ADMIN_ROLE, owner()); super.transferOwnership(_newOwner); } function renounceOwnership() override public onlyOwner { if(whitelistEnabled) { removeAddressFromWhitelist(owner()); } removeIssuer(owner()); renounceRole(DEFAULT_ADMIN_ROLE, owner()); super.renounceOwnership(); } //Private functions } contract BasicSecurityTokenWithDecimals is BasicSecurityToken { uint8 private __decimals; bytes4 internal constant InterfaceId_BasicSecurityTokenWithDecimals = 0x7c22dc6b; /** * 0x7c22dc6b === * bytes4(keccak256('decimals()')) ^ * bytes4(keccak256('revoke(address)')) ^ * bytes4(keccak256('reassign(address,address)')) ^ * bytes4(keccak256('frozenlist(address)')) */ constructor(string memory name, string memory symbol, uint8 _decimals, bool enableWhitelist) BasicSecurityToken(name, symbol, enableWhitelist) { _registerInterface(InterfaceId_BasicSecurityTokenWithDecimals); __decimals = _decimals; } function decimals() public view virtual override returns (uint8) { return __decimals; } } /** * @dev The NokuCustomERC20AdvancedToken contract is a custom ERC20AdvancedLite, a security token ERC20-compliant, token available in the Noku Service Platform (NSP). * The Noku customer is able to choose the token name, symbol, decimals, initial supply and to administer its lifecycle * by minting or burning tokens in order to increase or decrease the token supply. */ contract NokuCustomERC20AdvancedLite is NokuCustomTokenLite, BasicSecurityTokenWithDecimals { event LogNokuCustomERC20AdvancedLiteCreated( address indexed caller, string indexed name, string indexed symbol, uint8 decimals ); constructor( string memory _name, string memory _symbol, uint8 _decimals, bool _enableWhitelist ) NokuCustomTokenLite() BasicSecurityTokenWithDecimals(_name, _symbol, _decimals, _enableWhitelist) { emit LogNokuCustomERC20AdvancedLiteCreated( _msgSender(), _name, _symbol, _decimals ); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint8","name":"_decimals","type":"uint8"},{"internalType":"bool","name":"_enableWhitelist","type":"bool"}],"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":false,"internalType":"address","name":"target","type":"address"}],"name":"FundsFrozen","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"FundsReassigned","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"FundsRevoked","type":"event"},{"anonymous":false,"inputs":[],"name":"LogBurnFinished","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"string","name":"name","type":"string"},{"indexed":true,"internalType":"string","name":"symbol","type":"string"},{"indexed":false,"internalType":"uint8","name":"decimals","type":"uint8"}],"name":"LogNokuCustomERC20AdvancedLiteCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[],"name":"MintFinished","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":"FROZENLISTED_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ISSUER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"InterfaceId_ERC165","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WHITELISTED_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"}],"name":"addAddressToFrozenlist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"}],"name":"addAddressToWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_operators","type":"address[]"}],"name":"addAddressesToFrozenlist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_operators","type":"address[]"}],"name":"addAddressesToWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"}],"name":"addIssuer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burningFinished","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"disableWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"finishBurning","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"finishMinting","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"}],"name":"frozenlist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isCustomTokenLite","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"}],"name":"isIssuer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintingFinished","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"reassign","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"reassign","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"}],"name":"removeAddressFromFrozenlist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"}],"name":"removeAddressFromWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_operators","type":"address[]"}],"name":"removeAddressesFromFrozenlist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_operators","type":"address[]"}],"name":"removeAddressesFromWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"}],"name":"removeIssuer","outputs":[],"stateMutability":"nonpayable","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":"address","name":"from","type":"address"}],"name":"revoke","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"revoke","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":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newIssuer","type":"address"}],"name":"transferIssuer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526006805461ff00191690553480156200001c57600080fd5b506040516200346b3803806200346b8339810160408190526200003f9162000822565b838383838383828083836200005d6200005762000210565b62000214565b815162000072906004906020850190620006f3565b50805162000088906005906020840190620006f3565b506200009f91506301ffc9a760e01b905062000264565b6009805460ff19169115159190911790558251620000da5760405162461bcd60e51b8152600401620000d190620009bb565b60405180910390fd5b6000825111620000fe5760405162461bcd60e51b8152600401620000d19062000a59565b620001106313478e4360e21b62000264565b62000126600062000120620002a1565b620002b0565b6200013a62000134620002a1565b620002c0565b80156200015557620001556200014f620002a1565b62000324565b506200016c9150637c22dc6b60e01b905062000264565b506009805460ff9092166101000261ff0019909216919091179055505060405162000199908490620008ba565b604051809103902084604051620001b19190620008ba565b604051908190039020620001c462000210565b6001600160a01b03167feaaef49d075811da513f82b121deabe59a00fdcf2bf5f686d8d011800a70642a85604051620001fe919062000a82565b60405180910390a45050505062000b83565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160e01b031980821614156200027c57600080fd5b6001600160e01b0319166000908152600860205260409020805460ff19166001179055565b6000546001600160a01b031690565b620002bc828262000383565b5050565b620002ca62000210565b6001600160a01b0316620002dd620002a1565b6001600160a01b031614620003065760405162461bcd60e51b8152600401620000d190620009e2565b620003216000805160206200344b833981519152826200040f565b50565b620003386200033262000210565b62000440565b620003575760405162461bcd60e51b8152600401620000d19062000a17565b620003217f8429d542926e6695b59ac6fbdcd9b37e8b1aeb757afab06ab60b1bb5878c3b49826200040f565b6200038f828262000463565b620002bc5760008281526007602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620003cb62000210565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6200041a826200048e565b6200042f816200042962000210565b620004a3565b6200043b838362000383565b505050565b60006200045d6000805160206200344b8339815191528362000463565b92915050565b60009182526007602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60009081526007602052604090206001015490565b620004af828262000463565b620002bc57620004d5816001600160a01b031660146200052660201b620015c81760201c565b620004eb836020620015c862000526821b17811c565b604051602001620004fe929190620008d8565b60408051601f198184030181529082905262461bcd60e51b8252620000d19160040162000951565b606060006200053783600262000aab565b6200054490600262000a90565b6001600160401b038111156200056a57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801562000595576020820181803683370190505b509050600360fc1b81600081518110620005bf57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110620005fd57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060006200062384600262000aab565b6200063090600162000a90565b90505b6001811115620006ca576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106200067457634e487b7160e01b600052603260045260246000fd5b1a60f81b8282815181106200069957634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060049490941c93620006c28162000b00565b905062000633565b508315620006ec5760405162461bcd60e51b8152600401620000d19062000986565b9392505050565b828054620007019062000b1a565b90600052602060002090601f01602090048101928262000725576000855562000770565b82601f106200074057805160ff191683800117855562000770565b8280016001018555821562000770579182015b828111156200077057825182559160200191906001019062000753565b506200077e92915062000782565b5090565b5b808211156200077e576000815560010162000783565b600082601f830112620007aa578081fd5b81516001600160401b0380821115620007c757620007c762000b6d565b604051601f8301601f191681016020018281118282101715620007ee57620007ee62000b6d565b60405282815284830160200186101562000806578384fd5b6200081983602083016020880162000acd565b95945050505050565b6000806000806080858703121562000838578384fd5b84516001600160401b03808211156200084f578586fd5b6200085d8883890162000799565b9550602087015191508082111562000873578485fd5b50620008828782880162000799565b935050604085015160ff8116811462000899578283fd5b60608601519092508015158114620008af578182fd5b939692955090935050565b60008251620008ce81846020870162000acd565b9190910192915050565b60007f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000825283516200091281601785016020880162000acd565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516200094581602884016020880162000acd565b01602801949350505050565b60006020825282518060208401526200097281604085016020870162000acd565b601f01601f19169190910160400192915050565b6020808252818101527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604082015260600190565b6020808252600d908201526c6e616d6520697320656d70747960981b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526022908201527f4973737561626c653a2063616c6c6572206973206e6f7420746865206973737560408201526132b960f11b606082015260800190565b6020808252600f908201526e73796d626f6c20697320656d70747960881b604082015260600190565b60ff91909116815260200190565b6000821982111562000aa65762000aa662000b57565b500190565b600081600019048311821515161562000ac85762000ac862000b57565b500290565b60005b8381101562000aea57818101518382015260200162000ad0565b8381111562000afa576000848401525b50505050565b60008162000b125762000b1262000b57565b506000190190565b60028104600182168062000b2f57607f821691505b6020821081141562000b5157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6128b88062000b936000396000f3fe608060405234801561001057600080fd5b50600436106103425760003560e01c80636c058858116101b857806395d89b4111610104578063d547741f116100a2578063dd62ed3e1161007c578063dd62ed3e14610685578063e2ec6ec314610698578063eac449d9146106ab578063f2fde38b146106be57610342565b8063d547741f14610662578063d6b0f48414610675578063d8bf0ef81461067d57610342565b8063a372b26f116100de578063a372b26f14610621578063a457c2d714610634578063a9059cbb14610647578063cdfb2b4e1461065a57610342565b806395d89b41146105fe5780639b19251a14610606578063a217fddf1461061957610342565b80637b9417c811610171578063877b9a671161014b578063877b9a67146105b05780638b4dd229146105c35780638da5cb5b146105d657806391d14854146105eb57610342565b80637b9417c81461058d5780637d64bcb4146105a057806382aefa24146105a857610342565b80636c0588581461053c57806370a0823114610544578063715018a61461055757806374a8f1031461055f57806379cc6790146105725780637a3226ec1461058557610342565b8063286dd3f511610292578063459f659a11610230578063529441231161020a57806352944123146104f05780635fff8cd314610503578063664944dc146105165780636849cb9d1461052957610342565b8063459f659a146104c257806347bc7093146104d557806351fb012d146104e857610342565b806336568abe1161026c57806336568abe14610476578063395093511461048957806340c10f191461049c57806342966c68146104af57610342565b8063286dd3f51461043b5780632f2ff15d1461044e578063313ce5671461046157610342565b806318160ddd116102ff57806320694db0116102d957806320694db0146103ef57806323b872dd14610402578063248a9ca31461041557806324953eaa1461042857610342565b806318160ddd146103bd57806319fa8f50146103c55780631afe839c146103da57610342565b806301ffc9a71461034757806305d1a9461461037057806305d2035b1461037857806306fdde0314610380578063095ea7b314610395578063168e684b146103a8575b600080fd5b61035a6103553660046120e5565b6106d1565b60405161036791906121d3565b60405180910390f35b61035a610708565b61035a610711565b61038861071f565b60405161036791906121fc565b61035a6103a3366004611fc1565b6107b1565b6103b06107ce565b60405161036791906121de565b6103b06107e0565b6103cd6107e6565b60405161036791906121e7565b6103ed6103e8366004611f3a565b6107f1565b005b6103ed6103fd366004611f3a565b610873565b61035a610410366004611f86565b6108cd565b6103b06104233660046120ab565b6109b0565b6103ed610436366004611fea565b6109c5565b6103ed610449366004611f3a565b610a3e565b6103ed61045c3660046120c3565b610a7d565b610469610aa6565b6040516103679190612701565b6103ed6104843660046120c3565b610ab4565b61035a610497366004611fc1565b610af6565b6103ed6104aa366004611fc1565b610b4a565b6103ed6104bd3660046120ab565b610c10565b6103ed6104d0366004611f3a565b610c3c565b6103ed6104e3366004611f3a565b610c7b565b61035a610cd2565b6103ed6104fe366004611f86565b610cdb565b6103ed610511366004611f54565b610d4d565b61035a610524366004611f3a565b610d8c565b6103ed610537366004611f3a565b610da6565b61035a610dfa565b6103b0610552366004611f3a565b610dff565b6103ed610e1a565b6103ed61056d366004611f3a565b610e91565b6103ed610580366004611fc1565b610f14565b6103b0610f41565b6103ed61059b366004611f3a565b610f53565b61035a610f92565b6103b0611026565b61035a6105be366004611f3a565b611038565b6103ed6105d1366004611fea565b611052565b6105de6110c7565b6040516103679190612182565b61035a6105f93660046120c3565b6110d6565b610388611101565b61035a610614366004611f3a565b611110565b6103b061112a565b6103ed61062f366004611fea565b61112f565b61035a610642366004611fc1565b6111a4565b61035a610655366004611fc1565b61121d565b6103ed611305565b6103ed6106703660046120c3565b611353565b6103ed611372565b61035a6113bd565b6103b0610693366004611f54565b61145d565b6103ed6106a6366004611fea565b611488565b6103ed6106b9366004611fc1565b6114fd565b6103ed6106cc366004611f3a565b611530565b60006106dc82611781565b8061070057506001600160e01b0319821660009081526008602052604090205460ff165b90505b919050565b60065460ff1681565b600654610100900460ff1681565b60606004805461072e906127a0565b80601f016020809104026020016040519081016040528092919081815260200182805461075a906127a0565b80156107a75780601f1061077c576101008083540402835291602001916107a7565b820191906000526020600020905b81548152906001019060200180831161078a57829003601f168201915b5050505050905090565b60006107c56107be6117a6565b84846117aa565b50600192915050565b60008051602061282383398151915281565b60035490565b6301ffc9a760e01b81565b6107fc6105be6117a6565b6108215760405162461bcd60e51b8152600401610818906125bd565b60405180910390fd5b61083960008051602061282383398151915282610a7d565b7f1b994db1a6d945cc30132de7ed4aa052f750744469da7327b463cc0f94df87c0816040516108689190612182565b60405180910390a150565b61087b6117a6565b6001600160a01b031661088c6110c7565b6001600160a01b0316146108b25760405162461bcd60e51b81526004016108189061247a565b6108ca60008051602061284383398151915282610a7d565b50565b6000836108e8600080516020612823833981519152826110d6565b156109055760405162461bcd60e51b81526004016108189061240a565b8361091e600080516020612823833981519152826110d6565b1561093b5760405162461bcd60e51b81526004016108189061240a565b600954859060ff161561097c57610960600080516020612863833981519152826110d6565b61097c5760405162461bcd60e51b8152600401610818906125ff565b61098787878761185e565b6109a35760405162461bcd60e51b815260040161081890612371565b5060019695505050505050565b60009081526007602052604090206001015490565b6109d06105be6117a6565b6109ec5760405162461bcd60e51b8152600401610818906125bd565b60005b8151811015610a3a57610a28828281518110610a1b57634e487b7160e01b600052603260045260246000fd5b6020026020010151610a3e565b80610a32816127db565b9150506109ef565b5050565b610a496105be6117a6565b610a655760405162461bcd60e51b8152600401610818906125bd565b6108ca60008051602061286383398151915282611353565b610a86826109b0565b610a9781610a926117a6565b6118ee565b610aa18383611952565b505050565b600954610100900460ff1690565b610abc6117a6565b6001600160a01b0316816001600160a01b031614610aec5760405162461bcd60e51b81526004016108189061267b565b610a3a82826119d9565b60006107c5610b036117a6565b848460026000610b116117a6565b6001600160a01b03908116825260208083019390935260409182016000908120918b1681529252902054610b45919061270f565b6117aa565b610b526117a6565b6001600160a01b0316610b636110c7565b6001600160a01b031614610b895760405162461bcd60e51b81526004016108189061247a565b81610ba2600080516020612823833981519152826110d6565b15610bbf5760405162461bcd60e51b81526004016108189061240a565b600954839060ff1615610c0057610be4600080516020612863833981519152826110d6565b610c005760405162461bcd60e51b8152600401610818906125ff565b610c0a8484611a5e565b50505050565b60065460ff1615610c335760405162461bcd60e51b8152600401610818906123e0565b6108ca81611aa9565b610c476105be6117a6565b610c635760405162461bcd60e51b8152600401610818906125bd565b6108ca60008051602061282383398151915282611353565b610c836117a6565b6001600160a01b0316610c946110c7565b6001600160a01b031614610cba5760405162461bcd60e51b81526004016108189061247a565b6108ca60008051602061284383398151915282611353565b60095460ff1681565b610ce66105be6117a6565b610d025760405162461bcd60e51b8152600401610818906125bd565b610d0d838383611aba565b7f95791f1c4aac383dc757e59da6599f6317ec2579228e1a9eeeafb80d7418c534838383604051610d4093929190612196565b60405180910390a1505050565b610d586105be6117a6565b610d745760405162461bcd60e51b8152600401610818906125bd565b6000610d7f83610dff565b9050610d0d838383611aba565b6000610700600080516020612823833981519152836110d6565b610db16105be6117a6565b610dcd5760405162461bcd60e51b8152600401610818906125bd565b6001600160a01b038116610de057600080fd5b6108b26000805160206128438339815191526106706117a6565b600190565b6001600160a01b031660009081526001602052604090205490565b610e226117a6565b6001600160a01b0316610e336110c7565b6001600160a01b031614610e595760405162461bcd60e51b81526004016108189061247a565b60095460ff1615610e6f57610e6f6104496110c7565b610e7a6104e36110c7565b610e8760006104846110c7565b610e8f611bde565b565b610e9c6105be6117a6565b610eb85760405162461bcd60e51b8152600401610818906125bd565b6000610ec382610dff565b9050610ed782610ed16117a6565b83611aba565b7fc2a82dd1d41e6a3fbca08bb53dc147df1241ab3942b5a540e1e2630dd05cf3938282604051610f089291906121ba565b60405180910390a15050565b60065460ff1615610f375760405162461bcd60e51b8152600401610818906123e0565b610a3a8282611c27565b60008051602061286383398151915281565b610f5e6105be6117a6565b610f7a5760405162461bcd60e51b8152600401610818906125bd565b6108ca60008051602061286383398151915282610a7d565b6000610f9c6117a6565b6001600160a01b0316610fad6110c7565b6001600160a01b031614610fd35760405162461bcd60e51b81526004016108189061247a565b600654610100900460ff1615610fe857600080fd5b6006805461ff0019166101001790556040517fae5184fba832cb2b1f702aca6117b8d265eaf03ad33eb133f19dde0f5920fa0890600090a150600190565b60008051602061284383398151915281565b6000610700600080516020612843833981519152836110d6565b61105d6105be6117a6565b6110795760405162461bcd60e51b8152600401610818906125bd565b60005b8151811015610a3a576110b58282815181106110a857634e487b7160e01b600052603260045260246000fd5b6020026020010151610c3c565b806110bf816127db565b91505061107c565b6000546001600160a01b031690565b60009182526007602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60606005805461072e906127a0565b6000610700600080516020612863833981519152836110d6565b600081565b61113a6105be6117a6565b6111565760405162461bcd60e51b8152600401610818906125bd565b60005b8151811015610a3a5761119282828151811061118557634e487b7160e01b600052603260045260246000fd5b60200260200101516107f1565b8061119c816127db565b915050611159565b600080600260006111b36117a6565b6001600160a01b03908116825260208083019390935260409182016000908120918816815292529020549050828110156111ff5760405162461bcd60e51b815260040161081890612636565b61121361120a6117a6565b858584036117aa565b5060019392505050565b60006112276117a6565b61123f600080516020612823833981519152826110d6565b1561125c5760405162461bcd60e51b81526004016108189061240a565b83611275600080516020612823833981519152826110d6565b156112925760405162461bcd60e51b81526004016108189061240a565b600954859060ff16156112d3576112b7600080516020612863833981519152826110d6565b6112d35760405162461bcd60e51b8152600401610818906125ff565b6112dd8686611c75565b6112f95760405162461bcd60e51b815260040161081890612371565b50600195945050505050565b61130d6117a6565b6001600160a01b031661131e6110c7565b6001600160a01b0316146113445760405162461bcd60e51b81526004016108189061247a565b6009805460ff19166001179055565b61135c826109b0565b61136881610a926117a6565b610aa183836119d9565b61137a6117a6565b6001600160a01b031661138b6110c7565b6001600160a01b0316146113b15760405162461bcd60e51b81526004016108189061247a565b6009805460ff19169055565b60006113c76117a6565b6001600160a01b03166113d86110c7565b6001600160a01b0316146113fe5760405162461bcd60e51b81526004016108189061247a565b60065460ff16156114215760405162461bcd60e51b8152600401610818906123e0565b6006805460ff191660011790556040517f568cefe030b2537eb3dba37e9ebf22cfc3e51ae8aca52125c6053a0c16ca730a90600090a150600190565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b6114936105be6117a6565b6114af5760405162461bcd60e51b8152600401610818906125bd565b60005b8151811015610a3a576114eb8282815181106114de57634e487b7160e01b600052603260045260246000fd5b6020026020010151610f53565b806114f5816127db565b9150506114b2565b6115086105be6117a6565b6115245760405162461bcd60e51b8152600401610818906125bd565b610ed782610ed16117a6565b6115386117a6565b6001600160a01b03166115496110c7565b6001600160a01b03161461156f5760405162461bcd60e51b81526004016108189061247a565b61157a6105be6110c7565b156115a75760095460ff161561159e576115956104496110c7565b61159e81610f53565b6115a781610da6565b6115b2600082611c89565b6115bf60006104846110c7565b6108ca81611c93565b606060006115d7836002612727565b6115e290600261270f565b67ffffffffffffffff81111561160857634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611632576020820181803683370190505b509050600360fc1b8160008151811061165b57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061169857634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060006116bc846002612727565b6116c790600161270f565b90505b600181111561175b576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061170957634e487b7160e01b600052603260045260246000fd5b1a60f81b82828151811061172d57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060049490941c9361175481612789565b90506116ca565b50831561177a5760405162461bcd60e51b81526004016108189061222f565b9392505050565b60006001600160e01b03198216637965db0b60e01b1480610700575061070082611d01565b3390565b6001600160a01b0383166117d05760405162461bcd60e51b815260040161081890612579565b6001600160a01b0382166117f65760405162461bcd60e51b81526004016108189061232f565b6001600160a01b0380841660008181526002602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906118519085906121de565b60405180910390a3505050565b600061186b848484611aba565b6001600160a01b03841660009081526002602052604081208161188c6117a6565b6001600160a01b03166001600160a01b03168152602001908152602001600020549050828110156118cf5760405162461bcd60e51b815260040161081890612432565b6118e3856118db6117a6565b8584036117aa565b506001949350505050565b6118f882826110d6565b610a3a57611910816001600160a01b031660146115c8565b61191b8360206115c8565b60405160200161192c92919061210d565b60408051601f198184030181529082905262461bcd60e51b8252610818916004016121fc565b61195c82826110d6565b610a3a5760008281526007602090815260408083206001600160a01b03851684529091529020805460ff191660011790556119956117a6565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6119e382826110d6565b15610a3a5760008281526007602090815260408083206001600160a01b03851684529091529020805460ff19169055611a1a6117a6565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b611a666110c7565b6001600160a01b0316611a776117a6565b6001600160a01b031614611a8a57600080fd5b600654610100900460ff1615611a9f57600080fd5b610a3a8282611d1a565b6108ca611ab46117a6565b82611de2565b6001600160a01b038316611ae05760405162461bcd60e51b815260040161081890612534565b6001600160a01b038216611b065760405162461bcd60e51b815260040161081890612264565b611b11838383610aa1565b6001600160a01b03831660009081526001602052604090205481811015611b4a5760405162461bcd60e51b81526004016108189061239a565b6001600160a01b03808516600090815260016020526040808220858503905591851681529081208054849290611b8190849061270f565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611bcb91906121de565b60405180910390a3610c0a848484610aa1565b611be66117a6565b6001600160a01b0316611bf76110c7565b6001600160a01b031614611c1d5760405162461bcd60e51b81526004016108189061247a565b610e8f6000611ed3565b6000611c35836106936117a6565b905081811015611c575760405162461bcd60e51b8152600401610818906124af565b611c6b83611c636117a6565b8484036117aa565b610aa18383611de2565b60006107c5611c826117a6565b8484611aba565b610a3a8282611952565b611c9b6117a6565b6001600160a01b0316611cac6110c7565b6001600160a01b031614611cd25760405162461bcd60e51b81526004016108189061247a565b6001600160a01b038116611cf85760405162461bcd60e51b8152600401610818906122e9565b6108ca81611ed3565b6001600160e01b031981166301ffc9a760e01b14919050565b6001600160a01b038216611d405760405162461bcd60e51b8152600401610818906126ca565b611d4c60008383610aa1565b8060036000828254611d5e919061270f565b90915550506001600160a01b03821660009081526001602052604081208054839290611d8b90849061270f565b90915550506040516001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611dce9085906121de565b60405180910390a3610a3a60008383610aa1565b6001600160a01b038216611e085760405162461bcd60e51b8152600401610818906124f3565b611e1482600083610aa1565b6001600160a01b03821660009081526001602052604090205481811015611e4d5760405162461bcd60e51b8152600401610818906122a7565b6001600160a01b0383166000908152600160205260408120838303905560038054849290611e7c908490612746565b90915550506040516000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611ebf9086906121de565b60405180910390a3610aa183600084610aa1565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80356001600160a01b038116811461070357600080fd5b600060208284031215611f4b578081fd5b61177a82611f23565b60008060408385031215611f66578081fd5b611f6f83611f23565b9150611f7d60208401611f23565b90509250929050565b600080600060608486031215611f9a578081fd5b611fa384611f23565b9250611fb160208501611f23565b9150604084013590509250925092565b60008060408385031215611fd3578182fd5b611fdc83611f23565b946020939093013593505050565b60006020808385031215611ffc578182fd5b823567ffffffffffffffff80821115612013578384fd5b818501915085601f830112612026578384fd5b8135818111156120385761203861280c565b838102604051858282010181811085821117156120575761205761280c565b604052828152858101935084860182860187018a1015612075578788fd5b8795505b8386101561209e5761208a81611f23565b855260019590950194938601938601612079565b5098975050505050505050565b6000602082840312156120bc578081fd5b5035919050565b600080604083850312156120d5578182fd5b82359150611f7d60208401611f23565b6000602082840312156120f6578081fd5b81356001600160e01b03198116811461177a578182fd5b60007f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008252835161214581601785016020880161275d565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161217681602884016020880161275d565b01602801949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b90815260200190565b6001600160e01b031991909116815260200190565b600060208252825180602084015261221b81604085016020870161275d565b601f01601f19169190910160400192915050565b6020808252818101527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604082015260600190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526022908201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604082015261636560f01b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252600f908201526e151c985b9cd9995c8819985a5b1959608a1b604082015260600190565b60208082526026908201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604082015265616c616e636560d01b606082015260800190565b60208082526010908201526f189d5c9b9a5b99c8199a5b9a5cda195960821b604082015260600190565b6020808252600e908201526d20b1b1b7bab73a10333937bd32b760911b604082015260600190565b60208082526028908201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616040820152676c6c6f77616e636560c01b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526024908201527f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f77604082015263616e636560e01b606082015260800190565b60208082526021908201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736040820152607360f81b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526022908201527f4973737561626c653a2063616c6c6572206973206e6f7420746865206973737560408201526132b960f11b606082015260800190565b60208082526017908201527f4163636f756e74206e6f742077686974656c6973746564000000000000000000604082015260600190565b60208082526025908201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604082015264207a65726f60d81b606082015260800190565b6020808252602f908201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560408201526e103937b632b9903337b91039b2b63360891b606082015260800190565b6020808252601f908201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604082015260600190565b60ff91909116815260200190565b60008219821115612722576127226127f6565b500190565b6000816000190483118215151615612741576127416127f6565b500290565b600082821015612758576127586127f6565b500390565b60005b83811015612778578181015183820152602001612760565b83811115610c0a5750506000910152565b600081612798576127986127f6565b506000190190565b6002810460018216806127b457607f821691505b602082108114156127d557634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156127ef576127ef6127f6565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fdfe5ae1a86f3259dd5e645b16d46c0f10288e217210804c242f259c0323883b9c13114e74f6ea3bd819998f78687bfcb11b140da08e9b7d222fa9c1f1ba1f2aa1228429d542926e6695b59ac6fbdcd9b37e8b1aeb757afab06ab60b1bb5878c3b49a26469706673582212201f96b411c47b38bdbadc31a65371e6d749441bc4a1b05d00f12ad6fa1275489164736f6c63430008000033114e74f6ea3bd819998f78687bfcb11b140da08e9b7d222fa9c1f1ba1f2aa122000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094c75786f636861696e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044c55584f00000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106103425760003560e01c80636c058858116101b857806395d89b4111610104578063d547741f116100a2578063dd62ed3e1161007c578063dd62ed3e14610685578063e2ec6ec314610698578063eac449d9146106ab578063f2fde38b146106be57610342565b8063d547741f14610662578063d6b0f48414610675578063d8bf0ef81461067d57610342565b8063a372b26f116100de578063a372b26f14610621578063a457c2d714610634578063a9059cbb14610647578063cdfb2b4e1461065a57610342565b806395d89b41146105fe5780639b19251a14610606578063a217fddf1461061957610342565b80637b9417c811610171578063877b9a671161014b578063877b9a67146105b05780638b4dd229146105c35780638da5cb5b146105d657806391d14854146105eb57610342565b80637b9417c81461058d5780637d64bcb4146105a057806382aefa24146105a857610342565b80636c0588581461053c57806370a0823114610544578063715018a61461055757806374a8f1031461055f57806379cc6790146105725780637a3226ec1461058557610342565b8063286dd3f511610292578063459f659a11610230578063529441231161020a57806352944123146104f05780635fff8cd314610503578063664944dc146105165780636849cb9d1461052957610342565b8063459f659a146104c257806347bc7093146104d557806351fb012d146104e857610342565b806336568abe1161026c57806336568abe14610476578063395093511461048957806340c10f191461049c57806342966c68146104af57610342565b8063286dd3f51461043b5780632f2ff15d1461044e578063313ce5671461046157610342565b806318160ddd116102ff57806320694db0116102d957806320694db0146103ef57806323b872dd14610402578063248a9ca31461041557806324953eaa1461042857610342565b806318160ddd146103bd57806319fa8f50146103c55780631afe839c146103da57610342565b806301ffc9a71461034757806305d1a9461461037057806305d2035b1461037857806306fdde0314610380578063095ea7b314610395578063168e684b146103a8575b600080fd5b61035a6103553660046120e5565b6106d1565b60405161036791906121d3565b60405180910390f35b61035a610708565b61035a610711565b61038861071f565b60405161036791906121fc565b61035a6103a3366004611fc1565b6107b1565b6103b06107ce565b60405161036791906121de565b6103b06107e0565b6103cd6107e6565b60405161036791906121e7565b6103ed6103e8366004611f3a565b6107f1565b005b6103ed6103fd366004611f3a565b610873565b61035a610410366004611f86565b6108cd565b6103b06104233660046120ab565b6109b0565b6103ed610436366004611fea565b6109c5565b6103ed610449366004611f3a565b610a3e565b6103ed61045c3660046120c3565b610a7d565b610469610aa6565b6040516103679190612701565b6103ed6104843660046120c3565b610ab4565b61035a610497366004611fc1565b610af6565b6103ed6104aa366004611fc1565b610b4a565b6103ed6104bd3660046120ab565b610c10565b6103ed6104d0366004611f3a565b610c3c565b6103ed6104e3366004611f3a565b610c7b565b61035a610cd2565b6103ed6104fe366004611f86565b610cdb565b6103ed610511366004611f54565b610d4d565b61035a610524366004611f3a565b610d8c565b6103ed610537366004611f3a565b610da6565b61035a610dfa565b6103b0610552366004611f3a565b610dff565b6103ed610e1a565b6103ed61056d366004611f3a565b610e91565b6103ed610580366004611fc1565b610f14565b6103b0610f41565b6103ed61059b366004611f3a565b610f53565b61035a610f92565b6103b0611026565b61035a6105be366004611f3a565b611038565b6103ed6105d1366004611fea565b611052565b6105de6110c7565b6040516103679190612182565b61035a6105f93660046120c3565b6110d6565b610388611101565b61035a610614366004611f3a565b611110565b6103b061112a565b6103ed61062f366004611fea565b61112f565b61035a610642366004611fc1565b6111a4565b61035a610655366004611fc1565b61121d565b6103ed611305565b6103ed6106703660046120c3565b611353565b6103ed611372565b61035a6113bd565b6103b0610693366004611f54565b61145d565b6103ed6106a6366004611fea565b611488565b6103ed6106b9366004611fc1565b6114fd565b6103ed6106cc366004611f3a565b611530565b60006106dc82611781565b8061070057506001600160e01b0319821660009081526008602052604090205460ff165b90505b919050565b60065460ff1681565b600654610100900460ff1681565b60606004805461072e906127a0565b80601f016020809104026020016040519081016040528092919081815260200182805461075a906127a0565b80156107a75780601f1061077c576101008083540402835291602001916107a7565b820191906000526020600020905b81548152906001019060200180831161078a57829003601f168201915b5050505050905090565b60006107c56107be6117a6565b84846117aa565b50600192915050565b60008051602061282383398151915281565b60035490565b6301ffc9a760e01b81565b6107fc6105be6117a6565b6108215760405162461bcd60e51b8152600401610818906125bd565b60405180910390fd5b61083960008051602061282383398151915282610a7d565b7f1b994db1a6d945cc30132de7ed4aa052f750744469da7327b463cc0f94df87c0816040516108689190612182565b60405180910390a150565b61087b6117a6565b6001600160a01b031661088c6110c7565b6001600160a01b0316146108b25760405162461bcd60e51b81526004016108189061247a565b6108ca60008051602061284383398151915282610a7d565b50565b6000836108e8600080516020612823833981519152826110d6565b156109055760405162461bcd60e51b81526004016108189061240a565b8361091e600080516020612823833981519152826110d6565b1561093b5760405162461bcd60e51b81526004016108189061240a565b600954859060ff161561097c57610960600080516020612863833981519152826110d6565b61097c5760405162461bcd60e51b8152600401610818906125ff565b61098787878761185e565b6109a35760405162461bcd60e51b815260040161081890612371565b5060019695505050505050565b60009081526007602052604090206001015490565b6109d06105be6117a6565b6109ec5760405162461bcd60e51b8152600401610818906125bd565b60005b8151811015610a3a57610a28828281518110610a1b57634e487b7160e01b600052603260045260246000fd5b6020026020010151610a3e565b80610a32816127db565b9150506109ef565b5050565b610a496105be6117a6565b610a655760405162461bcd60e51b8152600401610818906125bd565b6108ca60008051602061286383398151915282611353565b610a86826109b0565b610a9781610a926117a6565b6118ee565b610aa18383611952565b505050565b600954610100900460ff1690565b610abc6117a6565b6001600160a01b0316816001600160a01b031614610aec5760405162461bcd60e51b81526004016108189061267b565b610a3a82826119d9565b60006107c5610b036117a6565b848460026000610b116117a6565b6001600160a01b03908116825260208083019390935260409182016000908120918b1681529252902054610b45919061270f565b6117aa565b610b526117a6565b6001600160a01b0316610b636110c7565b6001600160a01b031614610b895760405162461bcd60e51b81526004016108189061247a565b81610ba2600080516020612823833981519152826110d6565b15610bbf5760405162461bcd60e51b81526004016108189061240a565b600954839060ff1615610c0057610be4600080516020612863833981519152826110d6565b610c005760405162461bcd60e51b8152600401610818906125ff565b610c0a8484611a5e565b50505050565b60065460ff1615610c335760405162461bcd60e51b8152600401610818906123e0565b6108ca81611aa9565b610c476105be6117a6565b610c635760405162461bcd60e51b8152600401610818906125bd565b6108ca60008051602061282383398151915282611353565b610c836117a6565b6001600160a01b0316610c946110c7565b6001600160a01b031614610cba5760405162461bcd60e51b81526004016108189061247a565b6108ca60008051602061284383398151915282611353565b60095460ff1681565b610ce66105be6117a6565b610d025760405162461bcd60e51b8152600401610818906125bd565b610d0d838383611aba565b7f95791f1c4aac383dc757e59da6599f6317ec2579228e1a9eeeafb80d7418c534838383604051610d4093929190612196565b60405180910390a1505050565b610d586105be6117a6565b610d745760405162461bcd60e51b8152600401610818906125bd565b6000610d7f83610dff565b9050610d0d838383611aba565b6000610700600080516020612823833981519152836110d6565b610db16105be6117a6565b610dcd5760405162461bcd60e51b8152600401610818906125bd565b6001600160a01b038116610de057600080fd5b6108b26000805160206128438339815191526106706117a6565b600190565b6001600160a01b031660009081526001602052604090205490565b610e226117a6565b6001600160a01b0316610e336110c7565b6001600160a01b031614610e595760405162461bcd60e51b81526004016108189061247a565b60095460ff1615610e6f57610e6f6104496110c7565b610e7a6104e36110c7565b610e8760006104846110c7565b610e8f611bde565b565b610e9c6105be6117a6565b610eb85760405162461bcd60e51b8152600401610818906125bd565b6000610ec382610dff565b9050610ed782610ed16117a6565b83611aba565b7fc2a82dd1d41e6a3fbca08bb53dc147df1241ab3942b5a540e1e2630dd05cf3938282604051610f089291906121ba565b60405180910390a15050565b60065460ff1615610f375760405162461bcd60e51b8152600401610818906123e0565b610a3a8282611c27565b60008051602061286383398151915281565b610f5e6105be6117a6565b610f7a5760405162461bcd60e51b8152600401610818906125bd565b6108ca60008051602061286383398151915282610a7d565b6000610f9c6117a6565b6001600160a01b0316610fad6110c7565b6001600160a01b031614610fd35760405162461bcd60e51b81526004016108189061247a565b600654610100900460ff1615610fe857600080fd5b6006805461ff0019166101001790556040517fae5184fba832cb2b1f702aca6117b8d265eaf03ad33eb133f19dde0f5920fa0890600090a150600190565b60008051602061284383398151915281565b6000610700600080516020612843833981519152836110d6565b61105d6105be6117a6565b6110795760405162461bcd60e51b8152600401610818906125bd565b60005b8151811015610a3a576110b58282815181106110a857634e487b7160e01b600052603260045260246000fd5b6020026020010151610c3c565b806110bf816127db565b91505061107c565b6000546001600160a01b031690565b60009182526007602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60606005805461072e906127a0565b6000610700600080516020612863833981519152836110d6565b600081565b61113a6105be6117a6565b6111565760405162461bcd60e51b8152600401610818906125bd565b60005b8151811015610a3a5761119282828151811061118557634e487b7160e01b600052603260045260246000fd5b60200260200101516107f1565b8061119c816127db565b915050611159565b600080600260006111b36117a6565b6001600160a01b03908116825260208083019390935260409182016000908120918816815292529020549050828110156111ff5760405162461bcd60e51b815260040161081890612636565b61121361120a6117a6565b858584036117aa565b5060019392505050565b60006112276117a6565b61123f600080516020612823833981519152826110d6565b1561125c5760405162461bcd60e51b81526004016108189061240a565b83611275600080516020612823833981519152826110d6565b156112925760405162461bcd60e51b81526004016108189061240a565b600954859060ff16156112d3576112b7600080516020612863833981519152826110d6565b6112d35760405162461bcd60e51b8152600401610818906125ff565b6112dd8686611c75565b6112f95760405162461bcd60e51b815260040161081890612371565b50600195945050505050565b61130d6117a6565b6001600160a01b031661131e6110c7565b6001600160a01b0316146113445760405162461bcd60e51b81526004016108189061247a565b6009805460ff19166001179055565b61135c826109b0565b61136881610a926117a6565b610aa183836119d9565b61137a6117a6565b6001600160a01b031661138b6110c7565b6001600160a01b0316146113b15760405162461bcd60e51b81526004016108189061247a565b6009805460ff19169055565b60006113c76117a6565b6001600160a01b03166113d86110c7565b6001600160a01b0316146113fe5760405162461bcd60e51b81526004016108189061247a565b60065460ff16156114215760405162461bcd60e51b8152600401610818906123e0565b6006805460ff191660011790556040517f568cefe030b2537eb3dba37e9ebf22cfc3e51ae8aca52125c6053a0c16ca730a90600090a150600190565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b6114936105be6117a6565b6114af5760405162461bcd60e51b8152600401610818906125bd565b60005b8151811015610a3a576114eb8282815181106114de57634e487b7160e01b600052603260045260246000fd5b6020026020010151610f53565b806114f5816127db565b9150506114b2565b6115086105be6117a6565b6115245760405162461bcd60e51b8152600401610818906125bd565b610ed782610ed16117a6565b6115386117a6565b6001600160a01b03166115496110c7565b6001600160a01b03161461156f5760405162461bcd60e51b81526004016108189061247a565b61157a6105be6110c7565b156115a75760095460ff161561159e576115956104496110c7565b61159e81610f53565b6115a781610da6565b6115b2600082611c89565b6115bf60006104846110c7565b6108ca81611c93565b606060006115d7836002612727565b6115e290600261270f565b67ffffffffffffffff81111561160857634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611632576020820181803683370190505b509050600360fc1b8160008151811061165b57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061169857634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060006116bc846002612727565b6116c790600161270f565b90505b600181111561175b576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061170957634e487b7160e01b600052603260045260246000fd5b1a60f81b82828151811061172d57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060049490941c9361175481612789565b90506116ca565b50831561177a5760405162461bcd60e51b81526004016108189061222f565b9392505050565b60006001600160e01b03198216637965db0b60e01b1480610700575061070082611d01565b3390565b6001600160a01b0383166117d05760405162461bcd60e51b815260040161081890612579565b6001600160a01b0382166117f65760405162461bcd60e51b81526004016108189061232f565b6001600160a01b0380841660008181526002602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906118519085906121de565b60405180910390a3505050565b600061186b848484611aba565b6001600160a01b03841660009081526002602052604081208161188c6117a6565b6001600160a01b03166001600160a01b03168152602001908152602001600020549050828110156118cf5760405162461bcd60e51b815260040161081890612432565b6118e3856118db6117a6565b8584036117aa565b506001949350505050565b6118f882826110d6565b610a3a57611910816001600160a01b031660146115c8565b61191b8360206115c8565b60405160200161192c92919061210d565b60408051601f198184030181529082905262461bcd60e51b8252610818916004016121fc565b61195c82826110d6565b610a3a5760008281526007602090815260408083206001600160a01b03851684529091529020805460ff191660011790556119956117a6565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6119e382826110d6565b15610a3a5760008281526007602090815260408083206001600160a01b03851684529091529020805460ff19169055611a1a6117a6565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b611a666110c7565b6001600160a01b0316611a776117a6565b6001600160a01b031614611a8a57600080fd5b600654610100900460ff1615611a9f57600080fd5b610a3a8282611d1a565b6108ca611ab46117a6565b82611de2565b6001600160a01b038316611ae05760405162461bcd60e51b815260040161081890612534565b6001600160a01b038216611b065760405162461bcd60e51b815260040161081890612264565b611b11838383610aa1565b6001600160a01b03831660009081526001602052604090205481811015611b4a5760405162461bcd60e51b81526004016108189061239a565b6001600160a01b03808516600090815260016020526040808220858503905591851681529081208054849290611b8190849061270f565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611bcb91906121de565b60405180910390a3610c0a848484610aa1565b611be66117a6565b6001600160a01b0316611bf76110c7565b6001600160a01b031614611c1d5760405162461bcd60e51b81526004016108189061247a565b610e8f6000611ed3565b6000611c35836106936117a6565b905081811015611c575760405162461bcd60e51b8152600401610818906124af565b611c6b83611c636117a6565b8484036117aa565b610aa18383611de2565b60006107c5611c826117a6565b8484611aba565b610a3a8282611952565b611c9b6117a6565b6001600160a01b0316611cac6110c7565b6001600160a01b031614611cd25760405162461bcd60e51b81526004016108189061247a565b6001600160a01b038116611cf85760405162461bcd60e51b8152600401610818906122e9565b6108ca81611ed3565b6001600160e01b031981166301ffc9a760e01b14919050565b6001600160a01b038216611d405760405162461bcd60e51b8152600401610818906126ca565b611d4c60008383610aa1565b8060036000828254611d5e919061270f565b90915550506001600160a01b03821660009081526001602052604081208054839290611d8b90849061270f565b90915550506040516001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611dce9085906121de565b60405180910390a3610a3a60008383610aa1565b6001600160a01b038216611e085760405162461bcd60e51b8152600401610818906124f3565b611e1482600083610aa1565b6001600160a01b03821660009081526001602052604090205481811015611e4d5760405162461bcd60e51b8152600401610818906122a7565b6001600160a01b0383166000908152600160205260408120838303905560038054849290611e7c908490612746565b90915550506040516000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611ebf9086906121de565b60405180910390a3610aa183600084610aa1565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80356001600160a01b038116811461070357600080fd5b600060208284031215611f4b578081fd5b61177a82611f23565b60008060408385031215611f66578081fd5b611f6f83611f23565b9150611f7d60208401611f23565b90509250929050565b600080600060608486031215611f9a578081fd5b611fa384611f23565b9250611fb160208501611f23565b9150604084013590509250925092565b60008060408385031215611fd3578182fd5b611fdc83611f23565b946020939093013593505050565b60006020808385031215611ffc578182fd5b823567ffffffffffffffff80821115612013578384fd5b818501915085601f830112612026578384fd5b8135818111156120385761203861280c565b838102604051858282010181811085821117156120575761205761280c565b604052828152858101935084860182860187018a1015612075578788fd5b8795505b8386101561209e5761208a81611f23565b855260019590950194938601938601612079565b5098975050505050505050565b6000602082840312156120bc578081fd5b5035919050565b600080604083850312156120d5578182fd5b82359150611f7d60208401611f23565b6000602082840312156120f6578081fd5b81356001600160e01b03198116811461177a578182fd5b60007f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008252835161214581601785016020880161275d565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161217681602884016020880161275d565b01602801949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b90815260200190565b6001600160e01b031991909116815260200190565b600060208252825180602084015261221b81604085016020870161275d565b601f01601f19169190910160400192915050565b6020808252818101527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604082015260600190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526022908201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604082015261636560f01b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252600f908201526e151c985b9cd9995c8819985a5b1959608a1b604082015260600190565b60208082526026908201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604082015265616c616e636560d01b606082015260800190565b60208082526010908201526f189d5c9b9a5b99c8199a5b9a5cda195960821b604082015260600190565b6020808252600e908201526d20b1b1b7bab73a10333937bd32b760911b604082015260600190565b60208082526028908201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616040820152676c6c6f77616e636560c01b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526024908201527f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f77604082015263616e636560e01b606082015260800190565b60208082526021908201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736040820152607360f81b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526022908201527f4973737561626c653a2063616c6c6572206973206e6f7420746865206973737560408201526132b960f11b606082015260800190565b60208082526017908201527f4163636f756e74206e6f742077686974656c6973746564000000000000000000604082015260600190565b60208082526025908201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604082015264207a65726f60d81b606082015260800190565b6020808252602f908201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560408201526e103937b632b9903337b91039b2b63360891b606082015260800190565b6020808252601f908201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604082015260600190565b60ff91909116815260200190565b60008219821115612722576127226127f6565b500190565b6000816000190483118215151615612741576127416127f6565b500290565b600082821015612758576127586127f6565b500390565b60005b83811015612778578181015183820152602001612760565b83811115610c0a5750506000910152565b600081612798576127986127f6565b506000190190565b6002810460018216806127b457607f821691505b602082108114156127d557634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156127ef576127ef6127f6565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fdfe5ae1a86f3259dd5e645b16d46c0f10288e217210804c242f259c0323883b9c13114e74f6ea3bd819998f78687bfcb11b140da08e9b7d222fa9c1f1ba1f2aa1228429d542926e6695b59ac6fbdcd9b37e8b1aeb757afab06ab60b1bb5878c3b49a26469706673582212201f96b411c47b38bdbadc31a65371e6d749441bc4a1b05d00f12ad6fa1275489164736f6c63430008000033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094c75786f636861696e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044c55584f00000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): Luxochain
Arg [1] : _symbol (string): LUXO
Arg [2] : _decimals (uint8): 18
Arg [3] : _enableWhitelist (bool): False
-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [5] : 4c75786f636861696e0000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [7] : 4c55584f00000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
53738:701:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32573:186;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43193:27;;;:::i;44048:35::-;;;:::i;8864:100::-;;;:::i;:::-;;;;;;;:::i;11031:169::-;;;;;;:::i;:::-;;:::i;45101:74::-;;;:::i;:::-;;;;;;;:::i;9984:108::-;;;:::i;32019:54::-;;;:::i;:::-;;;;;;;:::i;45493:155::-;;;;;;:::i;:::-;;:::i;:::-;;33975:101;;;;;;:::i;:::-;;:::i;50638:300::-;;;;;;:::i;:::-;;:::i;28639:123::-;;;;;;:::i;:::-;;:::i;48681:203::-;;;;;;:::i;:::-;;:::i;48455:125::-;;;;;;:::i;:::-;;:::i;29024:147::-;;;;;;:::i;:::-;;:::i;53249:101::-;;;:::i;:::-;;;;;;;:::i;30072:218::-;;;;;;:::i;:::-;;:::i;12583:215::-;;;;;;:::i;:::-;;:::i;50177:171::-;;;;;;:::i;:::-;;:::i;43607:99::-;;;;;;:::i;:::-;;:::i;46242:127::-;;;;;;:::i;:::-;;:::i;34169:105::-;;;;;;:::i;:::-;;:::i;47059:28::-;;;:::i;51183:175::-;;;;;;:::i;:::-;;:::i;50946:229::-;;;;;;:::i;:::-;;:::i;45727:123::-;;;;;;:::i;:::-;;:::i;34436:193::-;;;;;;:::i;:::-;;:::i;41706:85::-;;;:::i;10155:127::-;;;;;;:::i;:::-;;:::i;52232:284::-;;;:::i;51366:209::-;;;;;;:::i;:::-;;:::i;43714:133::-;;;;;;:::i;:::-;;:::i;46980:72::-;;;:::i;47749:119::-;;;;;;:::i;:::-;;:::i;44652:144::-;;;:::i;33271:62::-;;;:::i;33773:115::-;;;;;;:::i;:::-;;:::i;46471:205::-;;;;;;:::i;:::-;;:::i;19745:87::-;;;:::i;:::-;;;;;;;:::i;27524:139::-;;;;;;:::i;:::-;;:::i;9083:104::-;;;:::i;47946:121::-;;;;;;:::i;:::-;;:::i;26615:49::-;;;:::i;45947:195::-;;;;;;:::i;:::-;;:::i;13301:413::-;;;;;;:::i;:::-;;:::i;50356:274::-;;;;;;:::i;:::-;;:::i;47487:80::-;;;:::i;29416:149::-;;;;;;:::i;:::-;;:::i;47573:82::-;;;:::i;43439:160::-;;;:::i;10733:151::-;;;;;;:::i;:::-;;:::i;48163:193::-;;;;;;:::i;:::-;;:::i;51583:164::-;;;;;;:::i;:::-;;:::i;51755:469::-;;;;;;:::i;:::-;;:::i;32573:186::-;32659:4;32679:37;32703:12;32679:23;:37::i;:::-;:74;;;-1:-1:-1;;;;;;;32720:33:0;;;;;;:19;:33;;;;;;;;32679:74;32672:81;;32573:186;;;;:::o;43193:27::-;;;;;;:::o;44048:35::-;;;;;;;;;:::o;8864:100::-;8918:13;8951:5;8944:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8864:100;:::o;11031:169::-;11114:4;11131:39;11140:12;:10;:12::i;:::-;11154:7;11163:6;11131:8;:39::i;:::-;-1:-1:-1;11188:4:0;11031:169;;;;:::o;45101:74::-;-1:-1:-1;;;;;;;;;;;45101:74:0;:::o;9984:108::-;10072:12;;9984:108;:::o;32019:54::-;-1:-1:-1;;;32019:54:0;:::o;45493:155::-;33455:22;33464:12;:10;:12::i;33455:22::-;33447:69;;;;-1:-1:-1;;;33447:69:0;;;;;;;:::i;:::-;;;;;;;;;45569:39:::1;-1:-1:-1::0;;;;;;;;;;;45598:9:0::1;45569;:39::i;:::-;45620:22;45632:9;45620:22;;;;;;:::i;:::-;;;;;;;;45493:155:::0;:::o;33975:101::-;19976:12;:10;:12::i;:::-;-1:-1:-1;;;;;19965:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;19965:23:0;;19957:68;;;;-1:-1:-1;;;19957:68:0;;;;;;;:::i;:::-;34037:33:::1;-1:-1:-1::0;;;;;;;;;;;34060:9:0::1;34037;:33::i;:::-;33975:101:::0;:::o;50638:300::-;50816:4;50743:6;45328:37;-1:-1:-1;;;;;;;;;;;45355:9:0;45328:7;:37::i;:::-;45327:38;45319:65;;;;-1:-1:-1;;;45319:65:0;;;;;;;:::i;:::-;50767:9:::1;45328:37;-1:-1:-1::0;;;;;;;;;;;45355:9:0::1;45328:7;:37::i;:::-;45327:38;45319:65;;;;-1:-1:-1::0;;;45319:65:0::1;;;;;;;:::i;:::-;47361:16:::2;::::0;50796:9;;47361:16:::2;;47358:110;;;47396:36;-1:-1:-1::0;;;;;;;;;;;47422:9:0::2;47396:7;:36::i;:::-;47388:72;;;;-1:-1:-1::0;;;47388:72:0::2;;;;;;;:::i;:::-;50841:45:::3;50860:6;50868:9;50879:6;50841:18;:45::i;:::-;50833:73;;;;-1:-1:-1::0;;;50833:73:0::3;;;;;;;:::i;:::-;-1:-1:-1::0;50926:4:0::3;::::0;50638:300;-1:-1:-1;;;;;;50638:300:0:o;28639:123::-;28705:7;28732:12;;;:6;:12;;;;;:22;;;;28639:123::o;48681:203::-;33455:22;33464:12;:10;:12::i;33455:22::-;33447:69;;;;-1:-1:-1;;;33447:69:0;;;;;;;:::i;:::-;48778:9:::1;48773:106;48797:10;:17;48793:1;:21;48773:106;;;48830:41;48857:10;48868:1;48857:13;;;;;;-1:-1:-1::0;;;48857:13:0::1;;;;;;;;;;;;;;;48830:26;:41::i;:::-;48816:3:::0;::::1;::::0;::::1;:::i;:::-;;;;48773:106;;;;48681:203:::0;:::o;48455:125::-;33455:22;33464:12;:10;:12::i;33455:22::-;33447:69;;;;-1:-1:-1;;;33447:69:0;;;;;;;:::i;:::-;48535:39:::1;-1:-1:-1::0;;;;;;;;;;;48564:9:0::1;48535:10;:39::i;29024:147::-:0;29107:18;29120:4;29107:12;:18::i;:::-;27106:30;27117:4;27123:12;:10;:12::i;:::-;27106:10;:30::i;:::-;29138:25:::1;29149:4;29155:7;29138:10;:25::i;:::-;29024:147:::0;;;:::o;53249:101::-;53332:10;;;;;;;;53249:101::o;30072:218::-;30179:12;:10;:12::i;:::-;-1:-1:-1;;;;;30168:23:0;:7;-1:-1:-1;;;;;30168:23:0;;30160:83;;;;-1:-1:-1;;;30160:83:0;;;;;;;:::i;:::-;30256:26;30268:4;30274:7;30256:11;:26::i;12583:215::-;12671:4;12688:80;12697:12;:10;:12::i;:::-;12711:7;12757:10;12720:11;:25;12732:12;:10;:12::i;:::-;-1:-1:-1;;;;;12720:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;12720:25:0;;;:34;;;;;;;;;;:47;;;;:::i;:::-;12688:8;:80::i;50177:171::-;19976:12;:10;:12::i;:::-;-1:-1:-1;;;;;19965:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;19965:23:0;;19957:68;;;;-1:-1:-1;;;19957:68:0;;;;;;;:::i;:::-;50266:7:::1;45328:37;-1:-1:-1::0;;;;;;;;;;;45355:9:0::1;45328:7;:37::i;:::-;45327:38;45319:65;;;;-1:-1:-1::0;;;45319:65:0::1;;;;;;;:::i;:::-;47361:16:::2;::::0;50293:7;;47361:16:::2;;47358:110;;;47396:36;-1:-1:-1::0;;;;;;;;;;;47422:9:0::2;47396:7;:36::i;:::-;47388:72;;;;-1:-1:-1::0;;;47388:72:0::2;;;;;;;:::i;:::-;50313:27:::3;50324:7;50333:6;50313:10;:27::i;:::-;45391:1:::2;20036::::1;50177:171:::0;;:::o;43607:99::-;43268:15;;;;43267:16;43259:45;;;;-1:-1:-1;;;43259:45:0;;;;;;;:::i;:::-;43680:18:::1;43691:6;43680:10;:18::i;46242:127::-:0;33455:22;33464:12;:10;:12::i;33455:22::-;33447:69;;;;-1:-1:-1;;;33447:69:0;;;;;;;:::i;:::-;46323:40:::1;-1:-1:-1::0;;;;;;;;;;;46353:9:0::1;46323:10;:40::i;34169:105::-:0;19976:12;:10;:12::i;:::-;-1:-1:-1;;;;;19965:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;19965:23:0;;19957:68;;;;-1:-1:-1;;;19957:68:0;;;;;;;:::i;:::-;34234:34:::1;-1:-1:-1::0;;;;;;;;;;;34258:9:0::1;34234:10;:34::i;47059:28::-:0;;;;;;:::o;51183:175::-;33455:22;33464:12;:10;:12::i;33455:22::-;33447:69;;;;-1:-1:-1;;;33447:69:0;;;;;;;:::i;:::-;51272:27:::1;51282:4;51288:2;51292:6;51272:9;:27::i;:::-;51317:33;51333:4;51339:2;51343:6;51317:33;;;;;;;;:::i;:::-;;;;;;;;51183:175:::0;;;:::o;50946:229::-;33455:22;33464:12;:10;:12::i;33455:22::-;33447:69;;;;-1:-1:-1;;;33447:69:0;;;;;;;:::i;:::-;51019:23:::1;51045:15;51055:4;51045:9;:15::i;:::-;51019:41;;51071:36;51081:4;51087:2;51091:15;51071:9;:36::i;45727:123::-:0;45787:4;45807:37;-1:-1:-1;;;;;;;;;;;45834:9:0;45807:7;:37::i;34436:193::-;33455:22;33464:12;:10;:12::i;33455:22::-;33447:69;;;;-1:-1:-1;;;33447:69:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34513:24:0;::::1;34505:33;;;::::0;::::1;;34545:37;-1:-1:-1::0;;;;;;;;;;;34569:12:0::1;:10;:12::i;41706:85::-:0;41779:4;41706:85;:::o;10155:127::-;-1:-1:-1;;;;;10256:18:0;10229:7;10256:18;;;:9;:18;;;;;;;10155:127::o;52232:284::-;19976:12;:10;:12::i;:::-;-1:-1:-1;;;;;19965:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;19965:23:0;;19957:68;;;;-1:-1:-1;;;19957:68:0;;;;;;;:::i;:::-;52309:16:::1;::::0;::::1;;52306:83;;;52342:35;52369:7;:5;:7::i;52342:35::-;52399:21;52412:7;:5;:7::i;52399:21::-;52431:41;26660:4;52464:7;:5;:7::i;52431:41::-;52483:25;:23;:25::i;:::-;52232:284::o:0;51366:209::-;33455:22;33464:12;:10;:12::i;33455:22::-;33447:69;;;;-1:-1:-1;;;33447:69:0;;;;;;;:::i;:::-;51425:20:::1;51448:15;51458:4;51448:9;:15::i;:::-;51425:38;;51474:43;51484:4;51490:12;:10;:12::i;:::-;51504;51474:9;:43::i;:::-;51535:32;51548:4;51554:12;51535:32;;;;;;;:::i;:::-;;;;;;;;33523:1;51366:209:::0;:::o;43714:133::-;43268:15;;;;43267:16;43259:45;;;;-1:-1:-1;;;43259:45:0;;;;;;;:::i;:::-;43808:31:::1;43823:7;43832:6;43808:14;:31::i;46980:72::-:0;-1:-1:-1;;;;;;;;;;;46980:72:0;:::o;47749:119::-;33455:22;33464:12;:10;:12::i;33455:22::-;33447:69;;;;-1:-1:-1;;;33447:69:0;;;;;;;:::i;:::-;47824:38:::1;-1:-1:-1::0;;;;;;;;;;;47852:9:0::1;47824;:38::i;44652:144::-:0;44711:4;19976:12;:10;:12::i;:::-;-1:-1:-1;;;;;19965:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;19965:23:0;;19957:68;;;;-1:-1:-1;;;19957:68:0;;;;;;;:::i;:::-;44125:15:::1;::::0;::::1;::::0;::::1;;;44124:16;44116:25;;;::::0;::::1;;44724:15:::2;:22:::0;;-1:-1:-1;;44724:22:0::2;;;::::0;;44758:14:::2;::::0;::::2;::::0;44724:22;;44758:14:::2;-1:-1:-1::0;44786:4:0::2;44652:144:::0;:::o;33271:62::-;-1:-1:-1;;;;;;;;;;;33271:62:0;:::o;33773:115::-;33831:4;33851:31;-1:-1:-1;;;;;;;;;;;33872:9:0;33851:7;:31::i;46471:205::-;33455:22;33464:12;:10;:12::i;33455:22::-;33447:69;;;;-1:-1:-1;;;33447:69:0;;;;;;;:::i;:::-;46569:9:::1;46564:107;46588:10;:17;46584:1;:21;46564:107;;;46621:42;46649:10;46660:1;46649:13;;;;;;-1:-1:-1::0;;;46649:13:0::1;;;;;;;;;;;;;;;46621:27;:42::i;:::-;46607:3:::0;::::1;::::0;::::1;:::i;:::-;;;;46564:107;;19745:87:::0;19791:7;19818:6;-1:-1:-1;;;;;19818:6:0;19745:87;:::o;27524:139::-;27602:4;27626:12;;;:6;:12;;;;;;;;-1:-1:-1;;;;;27626:29:0;;;;;;;;;;;;;;;27524:139::o;9083:104::-;9139:13;9172:7;9165:14;;;;;:::i;47946:121::-;48005:4;48025:36;-1:-1:-1;;;;;;;;;;;48051:9:0;48025:7;:36::i;26615:49::-;26660:4;26615:49;:::o;45947:195::-;33455:22;33464:12;:10;:12::i;33455:22::-;33447:69;;;;-1:-1:-1;;;33447:69:0;;;;;;;:::i;:::-;46040:9:::1;46035:102;46059:10;:17;46055:1;:21;46035:102;;;46092:37;46115:10;46126:1;46115:13;;;;;;-1:-1:-1::0;;;46115:13:0::1;;;;;;;;;;;;;;;46092:22;:37::i;:::-;46078:3:::0;::::1;::::0;::::1;:::i;:::-;;;;46035:102;;13301:413:::0;13394:4;13411:24;13438:11;:25;13450:12;:10;:12::i;:::-;-1:-1:-1;;;;;13438:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;13438:25:0;;;:34;;;;;;;;;;;-1:-1:-1;13491:35:0;;;;13483:85;;;;-1:-1:-1;;;13483:85:0;;;;;;;:::i;:::-;13604:67;13613:12;:10;:12::i;:::-;13627:7;13655:15;13636:16;:34;13604:8;:67::i;:::-;-1:-1:-1;13702:4:0;;13301:413;-1:-1:-1;;;13301:413:0:o;50356:274::-;50520:4;50441:12;:10;:12::i;:::-;45328:37;-1:-1:-1;;;;;;;;;;;45355:9:0;45328:7;:37::i;:::-;45327:38;45319:65;;;;-1:-1:-1;;;45319:65:0;;;;;;;:::i;:::-;50471:9:::1;45328:37;-1:-1:-1::0;;;;;;;;;;;45355:9:0::1;45328:7;:37::i;:::-;45327:38;45319:65;;;;-1:-1:-1::0;;;45319:65:0::1;;;;;;;:::i;:::-;47361:16:::2;::::0;50500:9;;47361:16:::2;;47358:110;;;47396:36;-1:-1:-1::0;;;;;;;;;;;47422:9:0::2;47396:7;:36::i;:::-;47388:72;;;;-1:-1:-1::0;;;47388:72:0::2;;;;;;;:::i;:::-;50545:33:::3;50560:9;50571:6;50545:14;:33::i;:::-;50537:61;;;;-1:-1:-1::0;;;50537:61:0::3;;;;;;;:::i;:::-;-1:-1:-1::0;50618:4:0::3;::::0;50356:274;-1:-1:-1;;;;;50356:274:0:o;47487:80::-;19976:12;:10;:12::i;:::-;-1:-1:-1;;;;;19965:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;19965:23:0;;19957:68;;;;-1:-1:-1;;;19957:68:0;;;;;;;:::i;:::-;47538:16:::1;:23:::0;;-1:-1:-1;;47538:23:0::1;47557:4;47538:23;::::0;;47487:80::o;29416:149::-;29500:18;29513:4;29500:12;:18::i;:::-;27106:30;27117:4;27123:12;:10;:12::i;27106:30::-;29531:26:::1;29543:4;29549:7;29531:11;:26::i;47573:82::-:0;19976:12;:10;:12::i;:::-;-1:-1:-1;;;;;19965:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;19965:23:0;;19957:68;;;;-1:-1:-1;;;19957:68:0;;;;;;;:::i;:::-;47625:16:::1;:24:::0;;-1:-1:-1;;47625:24:0::1;::::0;;47573:82::o;43439:160::-;43497:4;19976:12;:10;:12::i;:::-;-1:-1:-1;;;;;19965:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;19965:23:0;;19957:68;;;;-1:-1:-1;;;19957:68:0;;;;;;;:::i;:::-;43268:15:::1;::::0;::::1;;43267:16;43259:45;;;;-1:-1:-1::0;;;43259:45:0::1;;;;;;;:::i;:::-;43514:15:::2;:22:::0;;-1:-1:-1;;43514:22:0::2;43532:4;43514:22;::::0;;43552:17:::2;::::0;::::2;::::0;43514:15:::2;::::0;43552:17:::2;-1:-1:-1::0;43587:4:0::2;43439:160:::0;:::o;10733:151::-;-1:-1:-1;;;;;10849:18:0;;;10822:7;10849:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;10733:151::o;48163:193::-;33455:22;33464:12;:10;:12::i;33455:22::-;33447:69;;;;-1:-1:-1;;;33447:69:0;;;;;;;:::i;:::-;48255:9:::1;48250:101;48274:10;:17;48270:1;:21;48250:101;;;48307:36;48329:10;48340:1;48329:13;;;;;;-1:-1:-1::0;;;48329:13:0::1;;;;;;;;;;;;;;;48307:21;:36::i;:::-;48293:3:::0;::::1;::::0;::::1;:::i;:::-;;;;48250:101;;51583:164:::0;33455:22;33464:12;:10;:12::i;33455:22::-;33447:69;;;;-1:-1:-1;;;33447:69:0;;;;;;;:::i;:::-;51658:37:::1;51668:4;51674:12;:10;:12::i;51755:469::-:0;19976:12;:10;:12::i;:::-;-1:-1:-1;;;;;19965:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;19965:23:0;;19957:68;;;;-1:-1:-1;;;19957:68:0;;;;;;;:::i;:::-;51841:17:::1;51850:7;:5;:7::i;51841:17::-;51838:230;;;51878:16;::::0;::::1;;51875:142;;;51915:35;51942:7;:5;:7::i;51915:35::-;51969:32;51991:9;51969:21;:32::i;:::-;52031:25;52046:9;52031:14;:25::i;:::-;52078:41;26660:4;52109:9:::0;52078:10:::1;:41::i;:::-;52130;26660:4;52163:7;:5;:7::i;52130:41::-;52182:34;52206:9;52182:23;:34::i;2345:451::-:0;2420:13;2446:19;2478:10;2482:6;2478:1;:10;:::i;:::-;:14;;2491:1;2478:14;:::i;:::-;2468:25;;;;;;-1:-1:-1;;;2468:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2468:25:0;;2446:47;;-1:-1:-1;;;2504:6:0;2511:1;2504:9;;;;;;-1:-1:-1;;;2504:9:0;;;;;;;;;;;;:15;-1:-1:-1;;;;;2504:15:0;;;;;;;;;-1:-1:-1;;;2530:6:0;2537:1;2530:9;;;;;;-1:-1:-1;;;2530:9:0;;;;;;;;;;;;:15;-1:-1:-1;;;;;2530:15:0;;;;;;;;-1:-1:-1;2561:9:0;2573:10;2577:6;2573:1;:10;:::i;:::-;:14;;2586:1;2573:14;:::i;:::-;2561:26;;2556:135;2593:1;2589;:5;2556:135;;;-1:-1:-1;;;2641:5:0;2649:3;2641:11;2628:25;;;;;-1:-1:-1;;;2628:25:0;;;;;;;;;;;;2616:6;2623:1;2616:9;;;;;;-1:-1:-1;;;2616:9:0;;;;;;;;;;;;:37;-1:-1:-1;;;;;2616:37:0;;;;;;;;-1:-1:-1;2678:1:0;2668:11;;;;;2596:3;;;:::i;:::-;;;2556:135;;;-1:-1:-1;2709:10:0;;2701:55;;;;-1:-1:-1;;;2701:55:0;;;;;;;:::i;:::-;2781:6;2345:451;-1:-1:-1;;;2345:451:0:o;27228:204::-;27313:4;-1:-1:-1;;;;;;27337:47:0;;-1:-1:-1;;;27337:47:0;;:87;;;27388:36;27412:11;27388:23;:36::i;3349:98::-;3429:10;3349:98;:::o;16985:380::-;-1:-1:-1;;;;;17121:19:0;;17113:68;;;;-1:-1:-1;;;17113:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17200:21:0;;17192:68;;;;-1:-1:-1;;;17192:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17273:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;;:36;;;17325:32;;;;;17303:6;;17325:32;:::i;:::-;;;;;;;;16985:380;;;:::o;11682:492::-;11822:4;11839:36;11849:6;11857:9;11868:6;11839:9;:36::i;:::-;-1:-1:-1;;;;;11915:19:0;;11888:24;11915:19;;;:11;:19;;;;;11888:24;11935:12;:10;:12::i;:::-;-1:-1:-1;;;;;11915:33:0;-1:-1:-1;;;;;11915:33:0;;;;;;;;;;;;;11888:60;;11987:6;11967:16;:26;;11959:79;;;;-1:-1:-1;;;11959:79:0;;;;;;;:::i;:::-;12074:57;12083:6;12091:12;:10;:12::i;:::-;12124:6;12105:16;:25;12074:8;:57::i;:::-;-1:-1:-1;12162:4:0;;11682:492;-1:-1:-1;;;;11682:492:0:o;27953:497::-;28034:22;28042:4;28048:7;28034;:22::i;:::-;28029:414;;28222:41;28250:7;-1:-1:-1;;;;;28222:41:0;28260:2;28222:19;:41::i;:::-;28336:38;28364:4;28371:2;28336:19;:38::i;:::-;28127:270;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;28127:270:0;;;;;;;;;;-1:-1:-1;;;28073:358:0;;;;;;;:::i;31376:229::-;31451:22;31459:4;31465:7;31451;:22::i;:::-;31446:152;;31490:12;;;;:6;:12;;;;;;;;-1:-1:-1;;;;;31490:29:0;;;;;;;;;:36;;-1:-1:-1;;31490:36:0;31522:4;31490:36;;;31573:12;:10;:12::i;:::-;-1:-1:-1;;;;;31546:40:0;31564:7;-1:-1:-1;;;;;31546:40:0;31558:4;31546:40;;;;;;;;;;31376:229;;:::o;31613:230::-;31688:22;31696:4;31702:7;31688;:22::i;:::-;31684:152;;;31759:5;31727:12;;;:6;:12;;;;;;;;-1:-1:-1;;;;;31727:29:0;;;;;;;;;:37;;-1:-1:-1;;31727:37:0;;;31811:12;:10;:12::i;:::-;-1:-1:-1;;;;;31784:40:0;31802:7;-1:-1:-1;;;;;31784:40:0;31796:4;31784:40;;;;;;;;;;31613:230;;:::o;44415:117::-;44221:7;:5;:7::i;:::-;-1:-1:-1;;;;;44205:23:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;44205:23:0;;44197:32;;;;;;44125:15:::1;::::0;::::1;::::0;::::1;;;44124:16;44116:25;;;::::0;::::1;;44507:19:::2;44513:3;44518:7;44507:5;:19::i;42209:91::-:0;42265:27;42271:12;:10;:12::i;:::-;42285:6;42265:5;:27::i;14204:733::-;-1:-1:-1;;;;;14344:20:0;;14336:70;;;;-1:-1:-1;;;14336:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14425:23:0;;14417:71;;;;-1:-1:-1;;;14417:71:0;;;;;;;:::i;:::-;14501:47;14522:6;14530:9;14541:6;14501:20;:47::i;:::-;-1:-1:-1;;;;;14585:17:0;;14561:21;14585:17;;;:9;:17;;;;;;14621:23;;;;14613:74;;;;-1:-1:-1;;;14613:74:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14723:17:0;;;;;;;:9;:17;;;;;;14743:22;;;14723:42;;14787:20;;;;;;;;:30;;14759:6;;14723:17;14787:30;;14759:6;;14787:30;:::i;:::-;;;;;;;;14852:9;-1:-1:-1;;;;;14835:35:0;14844:6;-1:-1:-1;;;;;14835:35:0;;14863:6;14835:35;;;;;;:::i;:::-;;;;;;;;14883:46;14903:6;14911:9;14922:6;14883:19;:46::i;20396:94::-;19976:12;:10;:12::i;:::-;-1:-1:-1;;;;;19965:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;19965:23:0;;19957:68;;;;-1:-1:-1;;;19957:68:0;;;;;;;:::i;:::-;20461:21:::1;20479:1;20461:9;:21::i;42619:368::-:0;42696:24;42723:32;42733:7;42742:12;:10;:12::i;42723:32::-;42696:59;;42794:6;42774:16;:26;;42766:75;;;;-1:-1:-1;;;42766:75:0;;;;;;;:::i;:::-;42877:58;42886:7;42895:12;:10;:12::i;:::-;42928:6;42909:16;:25;42877:8;:58::i;:::-;42957:22;42963:7;42972:6;42957:5;:22::i;10495:175::-;10581:4;10598:42;10608:12;:10;:12::i;:::-;10622:9;10633:6;10598:9;:42::i;30873:112::-;30952:25;30963:4;30969:7;30952:10;:25::i;20645:192::-;19976:12;:10;:12::i;:::-;-1:-1:-1;;;;;19965:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;19965:23:0;;19957:68;;;;-1:-1:-1;;;19957:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20734:22:0;::::1;20726:73;;;;-1:-1:-1::0;;;20726:73:0::1;;;;;;;:::i;:::-;20810:19;20820:8;20810:9;:19::i;24647:157::-:0;-1:-1:-1;;;;;;24756:40:0;;-1:-1:-1;;;24756:40:0;24647:157;;;:::o;15224:399::-;-1:-1:-1;;;;;15308:21:0;;15300:65;;;;-1:-1:-1;;;15300:65:0;;;;;;;:::i;:::-;15378:49;15407:1;15411:7;15420:6;15378:20;:49::i;:::-;15456:6;15440:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;15473:18:0;;;;;;:9;:18;;;;;:28;;15495:6;;15473:18;:28;;15495:6;;15473:28;:::i;:::-;;;;-1:-1:-1;;15517:37:0;;-1:-1:-1;;;;;15517:37:0;;;15534:1;;15517:37;;;;15547:6;;15517:37;:::i;:::-;;;;;;;;15567:48;15595:1;15599:7;15608:6;15567:19;:48::i;15956:591::-;-1:-1:-1;;;;;16040:21:0;;16032:67;;;;-1:-1:-1;;;16032:67:0;;;;;;;:::i;:::-;16112:49;16133:7;16150:1;16154:6;16112:20;:49::i;:::-;-1:-1:-1;;;;;16199:18:0;;16174:22;16199:18;;;:9;:18;;;;;;16236:24;;;;16228:71;;;;-1:-1:-1;;;16228:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16335:18:0;;;;;;:9;:18;;;;;16356:23;;;16335:44;;16401:12;:22;;16373:6;;16335:18;16401:22;;16373:6;;16401:22;:::i;:::-;;;;-1:-1:-1;;16441:37:0;;16467:1;;-1:-1:-1;;;;;16441:37:0;;;;;;;16471:6;;16441:37;:::i;:::-;;;;;;;;16491:48;16511:7;16528:1;16532:6;16491:19;:48::i;20845:173::-;20901:16;20920:6;;-1:-1:-1;;;;;20937:17:0;;;-1:-1:-1;;;;;;20937:17:0;;;;;;20970:40;;20920:6;;;;;;;20970:40;;20901:16;20970:40;20845:173;;:::o;14:175:1:-;84:20;;-1:-1:-1;;;;;133:31:1;;123:42;;113:2;;179:1;176;169:12;194:198;;306:2;294:9;285:7;281:23;277:32;274:2;;;327:6;319;312:22;274:2;355:31;376:9;355:31;:::i;397:274::-;;;526:2;514:9;505:7;501:23;497:32;494:2;;;547:6;539;532:22;494:2;575:31;596:9;575:31;:::i;:::-;565:41;;625:40;661:2;650:9;646:18;625:40;:::i;:::-;615:50;;484:187;;;;;:::o;676:342::-;;;;822:2;810:9;801:7;797:23;793:32;790:2;;;843:6;835;828:22;790:2;871:31;892:9;871:31;:::i;:::-;861:41;;921:40;957:2;946:9;942:18;921:40;:::i;:::-;911:50;;1008:2;997:9;993:18;980:32;970:42;;780:238;;;;;:::o;1023:266::-;;;1152:2;1140:9;1131:7;1127:23;1123:32;1120:2;;;1173:6;1165;1158:22;1120:2;1201:31;1222:9;1201:31;:::i;:::-;1191:41;1279:2;1264:18;;;;1251:32;;-1:-1:-1;;;1110:179:1:o;1294:1166::-;;1409:2;1452;1440:9;1431:7;1427:23;1423:32;1420:2;;;1473:6;1465;1458:22;1420:2;1518:9;1505:23;1547:18;1588:2;1580:6;1577:14;1574:2;;;1609:6;1601;1594:22;1574:2;1652:6;1641:9;1637:22;1627:32;;1697:7;1690:4;1686:2;1682:13;1678:27;1668:2;;1724:6;1716;1709:22;1668:2;1765;1752:16;1787:2;1783;1780:10;1777:2;;;1793:18;;:::i;:::-;1840:2;1836;1832:11;1872:2;1866:9;1923:2;1918;1910:6;1906:15;1902:24;1976:6;1964:10;1961:22;1956:2;1944:10;1941:18;1938:46;1935:2;;;1987:18;;:::i;:::-;2023:2;2016:22;2073:18;;;2107:15;;;;-1:-1:-1;2142:11:1;;;2172;;;2168:20;;2165:33;-1:-1:-1;2162:2:1;;;2216:6;2208;2201:22;2162:2;2243:6;2234:15;;2258:171;2272:2;2269:1;2266:9;2258:171;;;2329:25;2350:3;2329:25;:::i;:::-;2317:38;;2290:1;2283:9;;;;;2375:12;;;;2407;;2258:171;;;-1:-1:-1;2448:6:1;1389:1071;-1:-1:-1;;;;;;;;1389:1071:1:o;2465:190::-;;2577:2;2565:9;2556:7;2552:23;2548:32;2545:2;;;2598:6;2590;2583:22;2545:2;-1:-1:-1;2626:23:1;;2535:120;-1:-1:-1;2535:120:1:o;2660:266::-;;;2789:2;2777:9;2768:7;2764:23;2760:32;2757:2;;;2810:6;2802;2795:22;2757:2;2851:9;2838:23;2828:33;;2880:40;2916:2;2905:9;2901:18;2880:40;:::i;2931:306::-;;3042:2;3030:9;3021:7;3017:23;3013:32;3010:2;;;3063:6;3055;3048:22;3010:2;3094:23;;-1:-1:-1;;;;;;3146:32:1;;3136:43;;3126:2;;3198:6;3190;3183:22;3437:786;;3848:25;3843:3;3836:38;3903:6;3897:13;3919:62;3974:6;3969:2;3964:3;3960:12;3953:4;3945:6;3941:17;3919:62;:::i;:::-;-1:-1:-1;;;4040:2:1;4000:16;;;4032:11;;;4025:40;4090:13;;4112:63;4090:13;4161:2;4153:11;;4146:4;4134:17;;4112:63;:::i;:::-;4195:17;4214:2;4191:26;;3826:397;-1:-1:-1;;;;3826:397:1:o;4228:203::-;-1:-1:-1;;;;;4392:32:1;;;;4374:51;;4362:2;4347:18;;4329:102::o;4436:375::-;-1:-1:-1;;;;;4694:15:1;;;4676:34;;4746:15;;;;4741:2;4726:18;;4719:43;4793:2;4778:18;;4771:34;;;;4626:2;4611:18;;4593:218::o;4816:274::-;-1:-1:-1;;;;;5008:32:1;;;;4990:51;;5072:2;5057:18;;5050:34;4978:2;4963:18;;4945:145::o;5095:187::-;5260:14;;5253:22;5235:41;;5223:2;5208:18;;5190:92::o;5287:177::-;5433:25;;;5421:2;5406:18;;5388:76::o;5469:202::-;-1:-1:-1;;;;;;5631:33:1;;;;5613:52;;5601:2;5586:18;;5568:103::o;5676:383::-;;5825:2;5814:9;5807:21;5857:6;5851:13;5900:6;5895:2;5884:9;5880:18;5873:34;5916:66;5975:6;5970:2;5959:9;5955:18;5950:2;5942:6;5938:15;5916:66;:::i;:::-;6043:2;6022:15;-1:-1:-1;;6018:29:1;6003:45;;;;6050:2;5999:54;;5797:262;-1:-1:-1;;5797:262:1:o;6064:356::-;6266:2;6248:21;;;6285:18;;;6278:30;6344:34;6339:2;6324:18;;6317:62;6411:2;6396:18;;6238:182::o;6425:399::-;6627:2;6609:21;;;6666:2;6646:18;;;6639:30;6705:34;6700:2;6685:18;;6678:62;-1:-1:-1;;;6771:2:1;6756:18;;6749:33;6814:3;6799:19;;6599:225::o;6829:398::-;7031:2;7013:21;;;7070:2;7050:18;;;7043:30;7109:34;7104:2;7089:18;;7082:62;-1:-1:-1;;;7175:2:1;7160:18;;7153:32;7217:3;7202:19;;7003:224::o;7232:402::-;7434:2;7416:21;;;7473:2;7453:18;;;7446:30;7512:34;7507:2;7492:18;;7485:62;-1:-1:-1;;;7578:2:1;7563:18;;7556:36;7624:3;7609:19;;7406:228::o;7639:398::-;7841:2;7823:21;;;7880:2;7860:18;;;7853:30;7919:34;7914:2;7899:18;;7892:62;-1:-1:-1;;;7985:2:1;7970:18;;7963:32;8027:3;8012:19;;7813:224::o;8042:339::-;8244:2;8226:21;;;8283:2;8263:18;;;8256:30;-1:-1:-1;;;8317:2:1;8302:18;;8295:45;8372:2;8357:18;;8216:165::o;8386:402::-;8588:2;8570:21;;;8627:2;8607:18;;;8600:30;8666:34;8661:2;8646:18;;8639:62;-1:-1:-1;;;8732:2:1;8717:18;;8710:36;8778:3;8763:19;;8560:228::o;8793:340::-;8995:2;8977:21;;;9034:2;9014:18;;;9007:30;-1:-1:-1;;;9068:2:1;9053:18;;9046:46;9124:2;9109:18;;8967:166::o;9138:338::-;9340:2;9322:21;;;9379:2;9359:18;;;9352:30;-1:-1:-1;;;9413:2:1;9398:18;;9391:44;9467:2;9452:18;;9312:164::o;9481:404::-;9683:2;9665:21;;;9722:2;9702:18;;;9695:30;9761:34;9756:2;9741:18;;9734:62;-1:-1:-1;;;9827:2:1;9812:18;;9805:38;9875:3;9860:19;;9655:230::o;9890:356::-;10092:2;10074:21;;;10111:18;;;10104:30;10170:34;10165:2;10150:18;;10143:62;10237:2;10222:18;;10064:182::o;10251:400::-;10453:2;10435:21;;;10492:2;10472:18;;;10465:30;10531:34;10526:2;10511:18;;10504:62;-1:-1:-1;;;10597:2:1;10582:18;;10575:34;10641:3;10626:19;;10425:226::o;10656:397::-;10858:2;10840:21;;;10897:2;10877:18;;;10870:30;10936:34;10931:2;10916:18;;10909:62;-1:-1:-1;;;11002:2:1;10987:18;;10980:31;11043:3;11028:19;;10830:223::o;11058:401::-;11260:2;11242:21;;;11299:2;11279:18;;;11272:30;11338:34;11333:2;11318:18;;11311:62;-1:-1:-1;;;11404:2:1;11389:18;;11382:35;11449:3;11434:19;;11232:227::o;11464:400::-;11666:2;11648:21;;;11705:2;11685:18;;;11678:30;11744:34;11739:2;11724:18;;11717:62;-1:-1:-1;;;11810:2:1;11795:18;;11788:34;11854:3;11839:19;;11638:226::o;11869:398::-;12071:2;12053:21;;;12110:2;12090:18;;;12083:30;12149:34;12144:2;12129:18;;12122:62;-1:-1:-1;;;12215:2:1;12200:18;;12193:32;12257:3;12242:19;;12043:224::o;12272:347::-;12474:2;12456:21;;;12513:2;12493:18;;;12486:30;12552:25;12547:2;12532:18;;12525:53;12610:2;12595:18;;12446:173::o;12624:401::-;12826:2;12808:21;;;12865:2;12845:18;;;12838:30;12904:34;12899:2;12884:18;;12877:62;-1:-1:-1;;;12970:2:1;12955:18;;12948:35;13015:3;13000:19;;12798:227::o;13030:411::-;13232:2;13214:21;;;13271:2;13251:18;;;13244:30;13310:34;13305:2;13290:18;;13283:62;-1:-1:-1;;;13376:2:1;13361:18;;13354:45;13431:3;13416:19;;13204:237::o;13446:355::-;13648:2;13630:21;;;13687:2;13667:18;;;13660:30;13726:33;13721:2;13706:18;;13699:61;13792:2;13777:18;;13620:181::o;13988:184::-;14160:4;14148:17;;;;14130:36;;14118:2;14103:18;;14085:87::o;14177:128::-;;14248:1;14244:6;14241:1;14238:13;14235:2;;;14254:18;;:::i;:::-;-1:-1:-1;14290:9:1;;14225:80::o;14310:168::-;;14416:1;14412;14408:6;14404:14;14401:1;14398:21;14393:1;14386:9;14379:17;14375:45;14372:2;;;14423:18;;:::i;:::-;-1:-1:-1;14463:9:1;;14362:116::o;14483:125::-;;14551:1;14548;14545:8;14542:2;;;14556:18;;:::i;:::-;-1:-1:-1;14593:9:1;;14532:76::o;14613:258::-;14685:1;14695:113;14709:6;14706:1;14703:13;14695:113;;;14785:11;;;14779:18;14766:11;;;14759:39;14731:2;14724:10;14695:113;;;14826:6;14823:1;14820:13;14817:2;;;-1:-1:-1;;14861:1:1;14843:16;;14836:27;14666:205::o;14876:136::-;;14943:5;14933:2;;14952:18;;:::i;:::-;-1:-1:-1;;;14988:18:1;;14923:89::o;15017:380::-;15102:1;15092:12;;15149:1;15139:12;;;15160:2;;15214:4;15206:6;15202:17;15192:27;;15160:2;15267;15259:6;15256:14;15236:18;15233:38;15230:2;;;15313:10;15308:3;15304:20;15301:1;15294:31;15348:4;15345:1;15338:15;15376:4;15373:1;15366:15;15230:2;;15072:325;;;:::o;15402:135::-;;-1:-1:-1;;15462:17:1;;15459:2;;;15482:18;;:::i;:::-;-1:-1:-1;15529:1:1;15518:13;;15449:88::o;15542:127::-;15603:10;15598:3;15594:20;15591:1;15584:31;15634:4;15631:1;15624:15;15658:4;15655:1;15648:15;15674:127;15735:10;15730:3;15726:20;15723:1;15716:31;15766:4;15763:1;15756:15;15790:4;15787:1;15780:15
Swarm Source
ipfs://1f96b411c47b38bdbadc31a65371e6d749441bc4a1b05d00f12ad6fa12754891
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.