ERC-20
Overview
Max Total Supply
54,917.93217601688713632 GLX
Holders
133
Market
Price
$0.00 @ 0.000000 GLMR
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.000000646999162488 GLXValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
Galaxy
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at moonbeam.moonscan.io on 2022-02-07 */ // Sources flattened with hardhat v2.8.3 https://hardhat.org // File @openzeppelin/contracts/token/ERC20/[email protected] // SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File @openzeppelin/contracts/token/ERC20/extensions/[email protected] // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File @openzeppelin/contracts/token/ERC20/[email protected] // OpenZeppelin Contracts v4.4.1 (token/ERC20/ERC20.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { 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 {} } // File @openzeppelin/contracts/token/ERC20/extensions/[email protected] // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/ERC20Burnable.sol) pragma solidity ^0.8.0; /** * @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); } } // File @openzeppelin/contracts/utils/math/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // 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 generally not needed starting with Solidity 0.8, since 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; } } } // File contracts/lib/SafeMath8.sol pragma solidity ^0.8.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath8 { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint8 a, uint8 b) internal pure returns (uint8) { uint8 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @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(uint8 a, uint8 b) internal pure returns (uint8) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint8 a, uint8 b, string memory errorMessage) internal pure returns (uint8) { require(b <= a, errorMessage); uint8 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint8 a, uint8 b) internal pure returns (uint8) { // 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 0; } uint8 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts 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(uint8 a, uint8 b) internal pure returns (uint8) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts 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(uint8 a, uint8 b, string memory errorMessage) internal pure returns (uint8) { require(b > 0, errorMessage); uint8 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts 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(uint8 a, uint8 b) internal pure returns (uint8) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message 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(uint8 a, uint8 b, string memory errorMessage) internal pure returns (uint8) { require(b != 0, errorMessage); return a % b; } } // File @openzeppelin/contracts/access/[email protected] // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File contracts/owner/Operator.sol pragma solidity ^0.8.0; contract Operator is Context, Ownable { address private _operator; event OperatorTransferred(address indexed previousOperator, address indexed newOperator); constructor () { _operator = _msgSender(); emit OperatorTransferred(address(0), _operator); } function operator() public view returns (address) { return _operator; } modifier onlyOperator() { require(_operator == msg.sender, "operator: caller is not the operator"); _; } function isOperator() public view returns (bool) { return _msgSender() == _operator; } function transferOperator(address newOperator_) public onlyOwner { _transferOperator(newOperator_); } function _transferOperator(address newOperator_) internal { require(newOperator_ != address(0), "operator: zero address given for new operator"); emit OperatorTransferred(address(0), newOperator_); _operator = newOperator_; } } // File contracts/interfaces/IOracle.sol pragma solidity ^0.8.0; interface IOracle { function update() external; function consult(address _token, uint256 _amountIn) external view returns (uint144 amountOut); function twap(address _token, uint256 _amountIn) external view returns (uint144 _amountOut); } // File contracts/Galaxy.sol pragma solidity ^0.8.4; /* _____ __ .__ _____ / _ \_/ |_| |__ ____ ____ _____ / \ ____ ____ ____ ___.__. / /_\ \ __\ | \_/ __ \ / \\__ \ / \ / \ / _ \ / \_/ __ < | | / | \ | | Y \ ___/| | \/ __ \_ / Y ( <_> ) | \ ___/\___ | \____|__ /__| |___| /\___ >___| (____ / \____|__ /\____/|___| /\___ > ____| \/ \/ \/ \/ \/ \/ \/ \/\/ http://galaxy.money */ contract Galaxy is ERC20Burnable, Operator { using SafeMath8 for uint8; using SafeMath for uint256; // Initial distribution for the first 24h genesis pools uint256 public constant INITIAL_GENESIS_POOL_DISTRIBUTION = 100 ether; // Initial distribution for the day 2-5 GLX-WFTM LP -> GLX pool uint256 public constant INITIAL_GLX_POOL_DISTRIBUTION = 1200 ether; // Distribution for airdrops wallet uint256 public constant INITIAL_AIRDROP_WALLET_DISTRIBUTION = 50 ether; // Have the rewards been distributed to the pools bool public rewardPoolDistributed = false; /* ================= Taxation =============== */ // Address of the Oracle address public galaxyOracle; // Address of the Tax Office address public taxOffice; // Current tax rate uint256 public taxRate; // Price threshold below which taxes will get burned uint256 public burnThreshold = 1.10e18; // Address of the tax collector wallet address public taxCollectorAddress; // Should the taxes be calculated using the tax tiers bool public autoCalculateTax; // Tax Tiers uint256[] public taxTiersTwaps = [0, 5e17, 6e17, 7e17, 8e17, 9e17, 9.5e17, 1e18, 1.05e18, 1.10e18, 1.20e18, 1.30e18, 1.40e18, 1.50e18]; uint256[] public taxTiersRates = [2000, 1900, 1800, 1700, 1600, 1500, 1500, 1500, 1500, 1400, 900, 400, 200, 100]; // Sender addresses excluded from Tax mapping(address => bool) public excludedAddresses; event TaxOfficeTransferred(address oldAddress, address newAddress); modifier onlyTaxOffice() { require(taxOffice == msg.sender, "Caller is not the tax office"); _; } modifier onlyOperatorOrTaxOffice() { require(isOperator() || taxOffice == msg.sender, "Caller is not the operator or the tax office"); _; } /** * @notice Constructs the GLX ERC-20 contract. */ constructor(uint256 _taxRate, address _taxCollectorAddress) ERC20("Galaxy", "GLX") { // Mints 1 GLX to contract creator for initial pool setup require(_taxRate < 10000, "tax equal or bigger to 100%"); require(_taxCollectorAddress != address(0), "tax collector address must be non-zero address"); excludeAddress(address(this)); _mint(msg.sender, 200 ether); taxRate = _taxRate; taxCollectorAddress = _taxCollectorAddress; } /* ============= Taxation ============= */ function getTaxTiersTwapsCount() public view returns (uint256 count) { return taxTiersTwaps.length; } function getTaxTiersRatesCount() public view returns (uint256 count) { return taxTiersRates.length; } function isAddressExcluded(address _address) public view returns (bool) { return excludedAddresses[_address]; } function setTaxTiersTwap(uint8 _index, uint256 _value) public onlyTaxOffice returns (bool) { require(_index >= 0, "Index has to be higher than 0"); require(_index < getTaxTiersTwapsCount(), "Index has to lower than count of tax tiers"); if (_index > 0) { require(_value > taxTiersTwaps[_index - 1]); } if (_index < getTaxTiersTwapsCount().sub(1)) { require(_value < taxTiersTwaps[_index + 1]); } taxTiersTwaps[_index] = _value; return true; } function setTaxTiersRate(uint8 _index, uint256 _value) public onlyTaxOffice returns (bool) { require(_index >= 0, "Index has to be higher than 0"); require(_index < getTaxTiersRatesCount(), "Index has to lower than count of tax tiers"); taxTiersRates[_index] = _value; return true; } function setBurnThreshold(uint256 _burnThreshold) public onlyTaxOffice returns (bool) { burnThreshold = _burnThreshold; } function _getGalaxyPrice() internal view returns (uint256 _galaxyPrice) { try IOracle(galaxyOracle).consult(address(this), 1e18) returns (uint144 _price) { return uint256(_price); } catch { revert("Galaxy: failed to fetch GLX price from Oracle"); } } function _updateTaxRate(uint256 _galaxyPrice) internal returns (uint256){ if (autoCalculateTax) { for (uint8 tierId = uint8(getTaxTiersTwapsCount()).sub(1); tierId >= 0; --tierId) { if (_galaxyPrice >= taxTiersTwaps[tierId]) { require(taxTiersRates[tierId] < 10000, "tax equal or bigger to 100%"); taxRate = taxTiersRates[tierId]; return taxTiersRates[tierId]; } } } } function enableAutoCalculateTax() public onlyTaxOffice { autoCalculateTax = true; } function disableAutoCalculateTax() public onlyTaxOffice { autoCalculateTax = false; } function setGalaxyOracle(address _galaxyOracle) public onlyOperatorOrTaxOffice { require(_galaxyOracle != address(0), "oracle address cannot be 0 address"); galaxyOracle = _galaxyOracle; } function setTaxOffice(address _taxOffice) public onlyOperatorOrTaxOffice { require(_taxOffice != address(0), "tax office address cannot be 0 address"); emit TaxOfficeTransferred(taxOffice, _taxOffice); taxOffice = _taxOffice; } function setTaxCollectorAddress(address _taxCollectorAddress) public onlyTaxOffice { require(_taxCollectorAddress != address(0), "tax collector address must be non-zero address"); taxCollectorAddress = _taxCollectorAddress; } function setTaxRate(uint256 _taxRate) public onlyTaxOffice { require(!autoCalculateTax, "auto calculate tax cannot be enabled"); require(_taxRate < 10000, "tax equal or bigger to 100%"); taxRate = _taxRate; } function excludeAddress(address _address) public onlyOperatorOrTaxOffice returns (bool) { require(!excludedAddresses[_address], "address can't be excluded"); excludedAddresses[_address] = true; return true; } function includeAddress(address _address) public onlyOperatorOrTaxOffice returns (bool) { require(excludedAddresses[_address], "address can't be included"); excludedAddresses[_address] = false; return true; } /** * @notice Operator mints GLX to a recipient * @param recipient_ The address of recipient * @param amount_ The amount of GLX to mint to * @return whether the process has been done */ function mint(address recipient_, uint256 amount_) public onlyOperator returns (bool) { uint256 balanceBefore = balanceOf(recipient_); _mint(recipient_, amount_); uint256 balanceAfter = balanceOf(recipient_); return balanceAfter > balanceBefore; } function burn(uint256 amount) public override { super.burn(amount); } function burnFrom(address account, uint256 amount) public override onlyOperator { super.burnFrom(account, amount); } function transferFrom( address sender, address recipient, uint256 amount ) public override returns (bool) { uint256 currentTaxRate = 0; bool burnTax = false; if (autoCalculateTax) { uint256 currentGalaxyPrice = _getGalaxyPrice(); currentTaxRate = _updateTaxRate(currentGalaxyPrice); if (currentGalaxyPrice < burnThreshold) { burnTax = true; } } if (currentTaxRate == 0 || excludedAddresses[sender]) { _transfer(sender, recipient, amount); } else { _transferWithTax(sender, recipient, amount, burnTax); } _approve(sender, _msgSender(), allowance(sender, _msgSender()).sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function _transferWithTax( address sender, address recipient, uint256 amount, bool burnTax ) internal returns (bool) { uint256 taxAmount = amount.mul(taxRate).div(10000); uint256 amountAfterTax = amount.sub(taxAmount); if(burnTax) { // Burn tax super.burnFrom(sender, taxAmount); } else { // Transfer tax to tax collector _transfer(sender, taxCollectorAddress, taxAmount); } // Transfer amount after tax to recipient _transfer(sender, recipient, amountAfterTax); return true; } /** * @notice distribute to reward pool (only once) */ function distributeReward( address _genesisPool, address _galaxyPool, address _airdropWallet ) external onlyOperator { require(!rewardPoolDistributed, "only can distribute once"); require(_genesisPool != address(0), "!_genesisPool"); require(_galaxyPool != address(0), "!_galaxyPool"); require(_airdropWallet != address(0), "!_airdropWallet"); rewardPoolDistributed = true; _mint(_genesisPool, INITIAL_GENESIS_POOL_DISTRIBUTION); _mint(_galaxyPool, INITIAL_GLX_POOL_DISTRIBUTION); _mint(_airdropWallet, INITIAL_AIRDROP_WALLET_DISTRIBUTION); } function governanceRecoverUnsupported( IERC20 _token, uint256 _amount, address _to ) external onlyOperator { _token.transfer(_to, _amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"_taxRate","type":"uint256"},{"internalType":"address","name":"_taxCollectorAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOperator","type":"address"},{"indexed":true,"internalType":"address","name":"newOperator","type":"address"}],"name":"OperatorTransferred","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":false,"internalType":"address","name":"oldAddress","type":"address"},{"indexed":false,"internalType":"address","name":"newAddress","type":"address"}],"name":"TaxOfficeTransferred","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":"INITIAL_AIRDROP_WALLET_DISTRIBUTION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INITIAL_GENESIS_POOL_DISTRIBUTION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INITIAL_GLX_POOL_DISTRIBUTION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoCalculateTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"burnThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableAutoCalculateTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_genesisPool","type":"address"},{"internalType":"address","name":"_galaxyPool","type":"address"},{"internalType":"address","name":"_airdropWallet","type":"address"}],"name":"distributeReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableAutoCalculateTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"excludeAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedAddresses","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"galaxyOracle","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTaxTiersRatesCount","outputs":[{"internalType":"uint256","name":"count","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTaxTiersTwapsCount","outputs":[{"internalType":"uint256","name":"count","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_to","type":"address"}],"name":"governanceRecoverUnsupported","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"includeAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"isAddressExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOperator","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient_","type":"address"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardPoolDistributed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_burnThreshold","type":"uint256"}],"name":"setBurnThreshold","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_galaxyOracle","type":"address"}],"name":"setGalaxyOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_taxCollectorAddress","type":"address"}],"name":"setTaxCollectorAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_taxOffice","type":"address"}],"name":"setTaxOffice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_taxRate","type":"uint256"}],"name":"setTaxRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_index","type":"uint8"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setTaxTiersRate","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_index","type":"uint8"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setTaxTiersTwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxCollectorAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxOffice","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"taxTiersRates","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"taxTiersTwaps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"newOperator_","type":"address"}],"name":"transferOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6006805460ff60a01b19169055670f43fc2c04ee0000600a819055610240604052600060809081526706f05b59d3b2000060a052670853a0d2313c000060c0526709b6e64a8ec6000060e052670b1a2bc2ec50000061010052670c7d713b49da000061012052670d2f13f7789f000061014052670de0b6b3a764000061016052670e92596fd6290000610180526101a0919091526710a741a4627800006101c05267120a871cc00200006101e05267136dcc951d8c0000610200526714d1120d7b16000061022052620000d790600c90600e620005c5565b50604080516101c0810182526107d0815261076c6020820152610708918101919091526106a4606082015261064060808201526105dc60a0820181905260c0820181905260e0820181905261010082015261057861012082015261038461014082015261019061016082015260c861018082015260646101a08201526200016390600d90600e62000620565b503480156200017157600080fd5b5060405162002bb638038062002bb68339810160408190526200019491620006f8565b6040518060400160405280600681526020016547616c61787960d01b8152506040518060400160405280600381526020016208e98b60eb1b8152508160039080519060200190620001e792919062000664565b508051620001fd90600490602084019062000664565b5050506200021a620002146200036c60201b60201c565b62000370565b600680546001600160a01b031916339081179091556040516000907f74da04524d50c64947f5dd5381ef1a4dca5cba8ed1d816243f9e48aa0b5617ed908290a36127108210620002b15760405162461bcd60e51b815260206004820152601b60248201527f74617820657175616c206f722062696767657220746f2031303025000000000060448201526064015b60405180910390fd5b6001600160a01b038116620003205760405162461bcd60e51b815260206004820152602e60248201527f74617820636f6c6c6563746f722061646472657373206d757374206265206e6f60448201526d6e2d7a65726f206164647265737360901b6064820152608401620002a8565b6200032b30620003c2565b506200034133680ad78ebc5ac6200000620004e0565b600991909155600b80546001600160a01b0319166001600160a01b0390921691909117905562000797565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6006546000906001600160a01b0316331480620003e957506008546001600160a01b031633145b6200044c5760405162461bcd60e51b815260206004820152602c60248201527f43616c6c6572206973206e6f7420746865206f70657261746f72206f7220746860448201526b6520746178206f666669636560a01b6064820152608401620002a8565b6001600160a01b0382166000908152600e602052604090205460ff1615620004b75760405162461bcd60e51b815260206004820152601960248201527f616464726573732063616e2774206265206578636c75646564000000000000006044820152606401620002a8565b506001600160a01b03166000908152600e60205260409020805460ff1916600190811790915590565b6001600160a01b038216620005385760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620002a8565b80600260008282546200054c919062000735565b90915550506001600160a01b038216600090815260208190526040812080548392906200057b90849062000735565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b8280548282559060005260206000209081019282156200060e579160200282015b828111156200060e57825182906001600160401b0316905591602001919060010190620005e6565b506200061c929150620006e1565b5090565b8280548282559060005260206000209081019282156200060e579160200282015b828111156200060e578251829061ffff1690559160200191906001019062000641565b82805462000672906200075a565b90600052602060002090601f0160209004810192826200069657600085556200060e565b82601f10620006b157805160ff19168380011785556200060e565b828001600101855582156200060e579182015b828111156200060e578251825591602001919060010190620006c4565b5b808211156200061c5760008155600101620006e2565b600080604083850312156200070b578182fd5b825160208401519092506001600160a01b03811681146200072a578182fd5b809150509250929050565b600082198211156200075557634e487b7160e01b81526011600452602481fd5b500190565b600181811c908216806200076f57607f821691505b602082108114156200079157634e487b7160e01b600052602260045260246000fd5b50919050565b61240f80620007a76000396000f3fe608060405234801561001057600080fd5b50600436106102bb5760003560e01c806370a0823111610182578063a9059cbb116100e9578063cf011b26116100a2578063ee2a95351161007c578063ee2a953514610664578063f2fde38b1461066c578063ff87fc7c1461067f578063ffa8226e1461068757600080fd5b8063cf011b26146105dc578063dd62ed3e146105ff578063ebca1bd91461063857600080fd5b8063a9059cbb1461056d578063b87c5a4a14610580578063ba39635c14610593578063c3bdf613146105a6578063c6b000e7146105b9578063c6d69a30146105c957600080fd5b806393995d4b1161013b57806393995d4b1461051057806395d89b41146105235780639662676c1461052b5780639d6b5f211461053f578063a457c2d714610552578063a6431bba1461056557600080fd5b806370a082311461049e578063715018a6146104c7578063771a3a1d146104cf57806379cc6790146104d85780638d3cc818146104eb5780638da5cb5b146104ff57600080fd5b806342966c681161022657806354575af4116101df57806354575af414610439578063570ca7351461044c5780635c29908d1461045d57806365bbacd91461047057806366206ce91461047857806369356d471461048b57600080fd5b806342966c68146103d457806342c6b4f1146103e75780634456eda2146103fa5780634e20a02c1461040d5780634f6d38d01461041d578063521181d51461042657600080fd5b80633497b5fd116102785780633497b5fd1461034a5780633758e6ce1461035d57806339509351146103705780633e5f13d4146103835780633f07d76a146103ae57806340c10f19146103c157600080fd5b806306fdde03146102c0578063095ea7b3146102de57806318160ddd1461030157806323b872dd1461031357806329605e7714610326578063313ce5671461033b575b600080fd5b6102c8610697565b6040516102d591906120e5565b60405180910390f35b6102f16102ec366004612003565b610729565b60405190151581526020016102d5565b6002545b6040519081526020016102d5565b6102f1610321366004611fc3565b61073f565b610339610334366004611f25565b61080c565b005b604051601281526020016102d5565b610339610358366004611f25565b61084b565b6102f161036b366004611f25565b61090d565b6102f161037e366004612003565b6109e5565b600854610396906001600160a01b031681565b6040516001600160a01b0390911681526020016102d5565b6103396103bc366004611f25565b610a1c565b6102f16103cf366004612003565b610b29565b6103396103e23660046120ab565b610b9e565b6103056103f53660046120ab565b610ba7565b6006546001600160a01b031633146102f1565b61030568056bc75e2d6310000081565b610305600a5481565b610339610434366004611f79565b610bc8565b61033961044736600461204e565b610d70565b6006546001600160a01b0316610396565b61030561046b3660046120ab565b610e22565b610339610e32565b6102f16104863660046120c3565b610e6b565b610339610499366004611f25565b610fa5565b6103056104ac366004611f25565b6001600160a01b031660009081526020819052604090205490565b61033961105e565b61030560095481565b6103396104e6366004612003565b611094565b600b546102f190600160a01b900460ff1681565b6005546001600160a01b0316610396565b6102f161051e366004611f25565b6110cc565b6102c861119b565b6006546102f190600160a01b900460ff1681565b6102f161054d3660046120ab565b6111aa565b6102f1610560366004612003565b6111e0565b600c54610305565b6102f161057b366004612003565b611279565b6102f161058e3660046120c3565b611286565b600754610396906001600160a01b031681565b600b54610396906001600160a01b031681565b61030568410d586a20a4c0000081565b6103396105d73660046120ab565b6112fc565b6102f16105ea366004611f25565b600e6020526000908152604090205460ff1681565b61030561060d366004611f41565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6102f1610646366004611f25565b6001600160a01b03166000908152600e602052604090205460ff1690565b600d54610305565b61033961067a366004611f25565b6113e2565b61033961147a565b6103056802b5e3af16b188000081565b6060600380546106a690612351565b80601f01602080910402602001604051908101604052809291908181526020018280546106d290612351565b801561071f5780601f106106f45761010080835404028352916020019161071f565b820191906000526020600020905b81548152906001019060200180831161070257829003601f168201915b5050505050905090565b60006107363384846114b9565b50600192915050565b600b5460009081908190600160a01b900460ff16156107805760006107626115dd565b905061076d816116cf565b9250600a5481101561077e57600191505b505b8115806107a557506001600160a01b0386166000908152600e602052604090205460ff165b156107ba576107b5868686611836565b6107c8565b6107c686868684611a04565b505b61080086336107fb876040518060600160405280602881526020016123b2602891396107f48c3361060d565b9190611a7d565b6114b9565b50600195945050505050565b6005546001600160a01b0316331461083f5760405162461bcd60e51b81526004016108369061216f565b60405180910390fd5b61084881611aa9565b50565b6006546001600160a01b031633148061086e57506008546001600160a01b031633145b61088a5760405162461bcd60e51b815260040161083690612232565b6001600160a01b0381166108eb5760405162461bcd60e51b815260206004820152602260248201527f6f7261636c6520616464726573732063616e6e6f742062652030206164647265604482015261737360f01b6064820152608401610836565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6006546000906001600160a01b031633148061093357506008546001600160a01b031633145b61094f5760405162461bcd60e51b815260040161083690612232565b6001600160a01b0382166000908152600e602052604090205460ff16156109b85760405162461bcd60e51b815260206004820152601960248201527f616464726573732063616e2774206265206578636c75646564000000000000006044820152606401610836565b506001600160a01b0381166000908152600e60205260409020805460ff191660019081179091555b919050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916107369185906107fb90869061227e565b6006546001600160a01b0316331480610a3f57506008546001600160a01b031633145b610a5b5760405162461bcd60e51b815260040161083690612232565b6001600160a01b038116610ac05760405162461bcd60e51b815260206004820152602660248201527f746178206f666669636520616464726573732063616e6e6f742062652030206160448201526564647265737360d01b6064820152608401610836565b600854604080516001600160a01b03928316815291831660208301527f75237613d1cfb394eb7979839ecbeacaca4592ef0cf96791979625803948a601910160405180910390a1600880546001600160a01b0319166001600160a01b0392909216919091179055565b6006546000906001600160a01b03163314610b565760405162461bcd60e51b8152600401610836906121a4565b6001600160a01b038316600090815260208190526040902054610b798484611b6d565b6001600160a01b03841660009081526020819052604081205491909111949350505050565b61084881611c4c565b600c8181548110610bb757600080fd5b600091825260209091200154905081565b6006546001600160a01b03163314610bf25760405162461bcd60e51b8152600401610836906121a4565b600654600160a01b900460ff1615610c4c5760405162461bcd60e51b815260206004820152601860248201527f6f6e6c792063616e2064697374726962757465206f6e636500000000000000006044820152606401610836565b6001600160a01b038316610c925760405162461bcd60e51b815260206004820152600d60248201526c0857d9d95b995cda5cd41bdbdb609a1b6044820152606401610836565b6001600160a01b038216610cd75760405162461bcd60e51b815260206004820152600c60248201526b0857d9d85b185e1e541bdbdb60a21b6044820152606401610836565b6001600160a01b038116610d1f5760405162461bcd60e51b815260206004820152600f60248201526e0857d85a5c991c9bdc15d85b1b195d608a1b6044820152606401610836565b6006805460ff60a01b1916600160a01b179055610d458368056bc75e2d63100000611b6d565b610d588268410d586a20a4c00000611b6d565b610d6b816802b5e3af16b1880000611b6d565b505050565b6006546001600160a01b03163314610d9a5760405162461bcd60e51b8152600401610836906121a4565b60405163a9059cbb60e01b81526001600160a01b0382811660048301526024820184905284169063a9059cbb90604401602060405180830381600087803b158015610de457600080fd5b505af1158015610df8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1c919061202e565b50505050565b600d8181548110610bb757600080fd5b6008546001600160a01b03163314610e5c5760405162461bcd60e51b815260040161083690612138565b600b805460ff60a01b19169055565b6008546000906001600160a01b03163314610e985760405162461bcd60e51b815260040161083690612138565b600c548360ff1610610ebc5760405162461bcd60e51b8152600401610836906121e8565b60ff831615610f0957600c610ed2600185612311565b60ff1681548110610ef357634e487b7160e01b600052603260045260246000fd5b90600052602060002001548211610f0957600080fd5b610f1d6001610f17600c5490565b90611c56565b8360ff161015610f6b57600c610f34846001612296565b60ff1681548110610f5557634e487b7160e01b600052603260045260246000fd5b90600052602060002001548210610f6b57600080fd5b81600c8460ff1681548110610f9057634e487b7160e01b600052603260045260246000fd5b60009182526020909120015550600192915050565b6008546001600160a01b03163314610fcf5760405162461bcd60e51b815260040161083690612138565b6001600160a01b03811661103c5760405162461bcd60e51b815260206004820152602e60248201527f74617820636f6c6c6563746f722061646472657373206d757374206265206e6f60448201526d6e2d7a65726f206164647265737360901b6064820152608401610836565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146110885760405162461bcd60e51b81526004016108369061216f565b6110926000611c69565b565b6006546001600160a01b031633146110be5760405162461bcd60e51b8152600401610836906121a4565b6110c88282611cbb565b5050565b6006546000906001600160a01b03163314806110f257506008546001600160a01b031633145b61110e5760405162461bcd60e51b815260040161083690612232565b6001600160a01b0382166000908152600e602052604090205460ff166111765760405162461bcd60e51b815260206004820152601960248201527f616464726573732063616e277420626520696e636c75646564000000000000006044820152606401610836565b506001600160a01b03166000908152600e60205260409020805460ff19169055600190565b6060600480546106a690612351565b6008546000906001600160a01b031633146111d75760405162461bcd60e51b815260040161083690612138565b600a9190915590565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156112625760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610836565b61126f33858584036114b9565b5060019392505050565b6000610736338484611836565b6008546000906001600160a01b031633146112b35760405162461bcd60e51b815260040161083690612138565b600d548360ff16106112d75760405162461bcd60e51b8152600401610836906121e8565b81600d8460ff1681548110610f9057634e487b7160e01b600052603260045260246000fd5b6008546001600160a01b031633146113265760405162461bcd60e51b815260040161083690612138565b600b54600160a01b900460ff161561138c5760405162461bcd60e51b8152602060048201526024808201527f6175746f2063616c63756c617465207461782063616e6e6f7420626520656e61604482015263189b195960e21b6064820152608401610836565b61271081106113dd5760405162461bcd60e51b815260206004820152601b60248201527f74617820657175616c206f722062696767657220746f203130302500000000006044820152606401610836565b600955565b6005546001600160a01b0316331461140c5760405162461bcd60e51b81526004016108369061216f565b6001600160a01b0381166114715760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610836565b61084881611c69565b6008546001600160a01b031633146114a45760405162461bcd60e51b815260040161083690612138565b600b805460ff60a01b1916600160a01b179055565b6001600160a01b03831661151b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610836565b6001600160a01b03821661157c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610836565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600754604051633ddac95360e01b8152306004820152670de0b6b3a764000060248201526000916001600160a01b031690633ddac9539060440160206040518083038186803b15801561162f57600080fd5b505afa92505050801561165f575060408051601f3d908101601f1916820190925261165c91810190612084565b60015b6116c15760405162461bcd60e51b815260206004820152602d60248201527f47616c6178793a206661696c656420746f20666574636820474c58207072696360448201526c652066726f6d204f7261636c6560981b6064820152608401610836565b6001600160901b0316919050565b600b54600090600160a01b900460ff16156109e05760006116fd60016116f4600c5490565b60ff1690611d3c565b90505b600c8160ff168154811061172457634e487b7160e01b600052603260045260246000fd5b9060005260206000200154831061182057612710600d8260ff168154811061175c57634e487b7160e01b600052603260045260246000fd5b9060005260206000200154106117b45760405162461bcd60e51b815260206004820152601b60248201527f74617820657175616c206f722062696767657220746f203130302500000000006044820152606401610836565b600d8160ff16815481106117d857634e487b7160e01b600052603260045260246000fd5b9060005260206000200154600981905550600d8160ff168154811061180d57634e487b7160e01b600052603260045260246000fd5b9060005260206000200154915050919050565b61182981612334565b9050611700565b50919050565b6001600160a01b03831661189a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610836565b6001600160a01b0382166118fc5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610836565b6001600160a01b038316600090815260208190526040902054818110156119745760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610836565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906119ab90849061227e565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516119f791815260200190565b60405180910390a3610e1c565b600080611a28612710611a2260095487611d7e90919063ffffffff16565b90611d8a565b90506000611a368583611c56565b90508315611a4d57611a488783611cbb565b611a65565b600b54611a659088906001600160a01b031684611836565b611a70878783611836565b5060019695505050505050565b60008184841115611aa15760405162461bcd60e51b815260040161083691906120e5565b505050900390565b6001600160a01b038116611b155760405162461bcd60e51b815260206004820152602d60248201527f6f70657261746f723a207a65726f206164647265737320676976656e20666f7260448201526c103732bb9037b832b930ba37b960991b6064820152608401610836565b6040516001600160a01b038216906000907f74da04524d50c64947f5dd5381ef1a4dca5cba8ed1d816243f9e48aa0b5617ed908290a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038216611bc35760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610836565b8060026000828254611bd5919061227e565b90915550506001600160a01b03821660009081526020819052604081208054839290611c0290849061227e565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6108483382611d96565b6000611c6282846122fa565b9392505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000611cc7833361060d565b905081811015611d255760405162461bcd60e51b8152602060048201526024808201527f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f77604482015263616e636560e01b6064820152608401610836565b611d3283338484036114b9565b610d6b8383611d96565b6000611c6283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611ee4565b6000611c6282846122db565b6000611c6282846122bb565b6001600160a01b038216611df65760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610836565b6001600160a01b03821660009081526020819052604090205481811015611e6a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610836565b6001600160a01b0383166000908152602081905260408120838303905560028054849290611e999084906122fa565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b60008360ff168360ff1611158290611f0f5760405162461bcd60e51b815260040161083691906120e5565b506000611f1c8486612311565b95945050505050565b600060208284031215611f36578081fd5b8135611c628161239c565b60008060408385031215611f53578081fd5b8235611f5e8161239c565b91506020830135611f6e8161239c565b809150509250929050565b600080600060608486031215611f8d578081fd5b8335611f988161239c565b92506020840135611fa88161239c565b91506040840135611fb88161239c565b809150509250925092565b600080600060608486031215611fd7578283fd5b8335611fe28161239c565b92506020840135611ff28161239c565b929592945050506040919091013590565b60008060408385031215612015578182fd5b82356120208161239c565b946020939093013593505050565b60006020828403121561203f578081fd5b81518015158114611c62578182fd5b600080600060608486031215612062578283fd5b833561206d8161239c565b9250602084013591506040840135611fb88161239c565b600060208284031215612095578081fd5b81516001600160901b0381168114611c62578182fd5b6000602082840312156120bc578081fd5b5035919050565b600080604083850312156120d5578182fd5b823560ff81168114612020578283fd5b6000602080835283518082850152825b81811015612111578581018301518582016040015282016120f5565b818111156121225783604083870101525b50601f01601f1916929092016040019392505050565b6020808252601c908201527f43616c6c6572206973206e6f742074686520746178206f666669636500000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526024908201527f6f70657261746f723a2063616c6c6572206973206e6f7420746865206f70657260408201526330ba37b960e11b606082015260800190565b6020808252602a908201527f496e6465782068617320746f206c6f776572207468616e20636f756e74206f666040820152692074617820746965727360b01b606082015260800190565b6020808252602c908201527f43616c6c6572206973206e6f7420746865206f70657261746f72206f7220746860408201526b6520746178206f666669636560a01b606082015260800190565b6000821982111561229157612291612386565b500190565b600060ff821660ff84168060ff038211156122b3576122b3612386565b019392505050565b6000826122d657634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156122f5576122f5612386565b500290565b60008282101561230c5761230c612386565b500390565b600060ff821660ff84168082101561232b5761232b612386565b90039392505050565b600060ff82168061234757612347612386565b6000190192915050565b600181811c9082168061236557607f821691505b6020821081141561183057634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811461084857600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220528e9138bbe2b9a478157d116f3a29ca3aaf1886d231e484d0413f6e750b14fd64736f6c63430008040033000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036ecd54c24345ac945975c7e7883cde18006446c
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102bb5760003560e01c806370a0823111610182578063a9059cbb116100e9578063cf011b26116100a2578063ee2a95351161007c578063ee2a953514610664578063f2fde38b1461066c578063ff87fc7c1461067f578063ffa8226e1461068757600080fd5b8063cf011b26146105dc578063dd62ed3e146105ff578063ebca1bd91461063857600080fd5b8063a9059cbb1461056d578063b87c5a4a14610580578063ba39635c14610593578063c3bdf613146105a6578063c6b000e7146105b9578063c6d69a30146105c957600080fd5b806393995d4b1161013b57806393995d4b1461051057806395d89b41146105235780639662676c1461052b5780639d6b5f211461053f578063a457c2d714610552578063a6431bba1461056557600080fd5b806370a082311461049e578063715018a6146104c7578063771a3a1d146104cf57806379cc6790146104d85780638d3cc818146104eb5780638da5cb5b146104ff57600080fd5b806342966c681161022657806354575af4116101df57806354575af414610439578063570ca7351461044c5780635c29908d1461045d57806365bbacd91461047057806366206ce91461047857806369356d471461048b57600080fd5b806342966c68146103d457806342c6b4f1146103e75780634456eda2146103fa5780634e20a02c1461040d5780634f6d38d01461041d578063521181d51461042657600080fd5b80633497b5fd116102785780633497b5fd1461034a5780633758e6ce1461035d57806339509351146103705780633e5f13d4146103835780633f07d76a146103ae57806340c10f19146103c157600080fd5b806306fdde03146102c0578063095ea7b3146102de57806318160ddd1461030157806323b872dd1461031357806329605e7714610326578063313ce5671461033b575b600080fd5b6102c8610697565b6040516102d591906120e5565b60405180910390f35b6102f16102ec366004612003565b610729565b60405190151581526020016102d5565b6002545b6040519081526020016102d5565b6102f1610321366004611fc3565b61073f565b610339610334366004611f25565b61080c565b005b604051601281526020016102d5565b610339610358366004611f25565b61084b565b6102f161036b366004611f25565b61090d565b6102f161037e366004612003565b6109e5565b600854610396906001600160a01b031681565b6040516001600160a01b0390911681526020016102d5565b6103396103bc366004611f25565b610a1c565b6102f16103cf366004612003565b610b29565b6103396103e23660046120ab565b610b9e565b6103056103f53660046120ab565b610ba7565b6006546001600160a01b031633146102f1565b61030568056bc75e2d6310000081565b610305600a5481565b610339610434366004611f79565b610bc8565b61033961044736600461204e565b610d70565b6006546001600160a01b0316610396565b61030561046b3660046120ab565b610e22565b610339610e32565b6102f16104863660046120c3565b610e6b565b610339610499366004611f25565b610fa5565b6103056104ac366004611f25565b6001600160a01b031660009081526020819052604090205490565b61033961105e565b61030560095481565b6103396104e6366004612003565b611094565b600b546102f190600160a01b900460ff1681565b6005546001600160a01b0316610396565b6102f161051e366004611f25565b6110cc565b6102c861119b565b6006546102f190600160a01b900460ff1681565b6102f161054d3660046120ab565b6111aa565b6102f1610560366004612003565b6111e0565b600c54610305565b6102f161057b366004612003565b611279565b6102f161058e3660046120c3565b611286565b600754610396906001600160a01b031681565b600b54610396906001600160a01b031681565b61030568410d586a20a4c0000081565b6103396105d73660046120ab565b6112fc565b6102f16105ea366004611f25565b600e6020526000908152604090205460ff1681565b61030561060d366004611f41565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6102f1610646366004611f25565b6001600160a01b03166000908152600e602052604090205460ff1690565b600d54610305565b61033961067a366004611f25565b6113e2565b61033961147a565b6103056802b5e3af16b188000081565b6060600380546106a690612351565b80601f01602080910402602001604051908101604052809291908181526020018280546106d290612351565b801561071f5780601f106106f45761010080835404028352916020019161071f565b820191906000526020600020905b81548152906001019060200180831161070257829003601f168201915b5050505050905090565b60006107363384846114b9565b50600192915050565b600b5460009081908190600160a01b900460ff16156107805760006107626115dd565b905061076d816116cf565b9250600a5481101561077e57600191505b505b8115806107a557506001600160a01b0386166000908152600e602052604090205460ff165b156107ba576107b5868686611836565b6107c8565b6107c686868684611a04565b505b61080086336107fb876040518060600160405280602881526020016123b2602891396107f48c3361060d565b9190611a7d565b6114b9565b50600195945050505050565b6005546001600160a01b0316331461083f5760405162461bcd60e51b81526004016108369061216f565b60405180910390fd5b61084881611aa9565b50565b6006546001600160a01b031633148061086e57506008546001600160a01b031633145b61088a5760405162461bcd60e51b815260040161083690612232565b6001600160a01b0381166108eb5760405162461bcd60e51b815260206004820152602260248201527f6f7261636c6520616464726573732063616e6e6f742062652030206164647265604482015261737360f01b6064820152608401610836565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6006546000906001600160a01b031633148061093357506008546001600160a01b031633145b61094f5760405162461bcd60e51b815260040161083690612232565b6001600160a01b0382166000908152600e602052604090205460ff16156109b85760405162461bcd60e51b815260206004820152601960248201527f616464726573732063616e2774206265206578636c75646564000000000000006044820152606401610836565b506001600160a01b0381166000908152600e60205260409020805460ff191660019081179091555b919050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916107369185906107fb90869061227e565b6006546001600160a01b0316331480610a3f57506008546001600160a01b031633145b610a5b5760405162461bcd60e51b815260040161083690612232565b6001600160a01b038116610ac05760405162461bcd60e51b815260206004820152602660248201527f746178206f666669636520616464726573732063616e6e6f742062652030206160448201526564647265737360d01b6064820152608401610836565b600854604080516001600160a01b03928316815291831660208301527f75237613d1cfb394eb7979839ecbeacaca4592ef0cf96791979625803948a601910160405180910390a1600880546001600160a01b0319166001600160a01b0392909216919091179055565b6006546000906001600160a01b03163314610b565760405162461bcd60e51b8152600401610836906121a4565b6001600160a01b038316600090815260208190526040902054610b798484611b6d565b6001600160a01b03841660009081526020819052604081205491909111949350505050565b61084881611c4c565b600c8181548110610bb757600080fd5b600091825260209091200154905081565b6006546001600160a01b03163314610bf25760405162461bcd60e51b8152600401610836906121a4565b600654600160a01b900460ff1615610c4c5760405162461bcd60e51b815260206004820152601860248201527f6f6e6c792063616e2064697374726962757465206f6e636500000000000000006044820152606401610836565b6001600160a01b038316610c925760405162461bcd60e51b815260206004820152600d60248201526c0857d9d95b995cda5cd41bdbdb609a1b6044820152606401610836565b6001600160a01b038216610cd75760405162461bcd60e51b815260206004820152600c60248201526b0857d9d85b185e1e541bdbdb60a21b6044820152606401610836565b6001600160a01b038116610d1f5760405162461bcd60e51b815260206004820152600f60248201526e0857d85a5c991c9bdc15d85b1b195d608a1b6044820152606401610836565b6006805460ff60a01b1916600160a01b179055610d458368056bc75e2d63100000611b6d565b610d588268410d586a20a4c00000611b6d565b610d6b816802b5e3af16b1880000611b6d565b505050565b6006546001600160a01b03163314610d9a5760405162461bcd60e51b8152600401610836906121a4565b60405163a9059cbb60e01b81526001600160a01b0382811660048301526024820184905284169063a9059cbb90604401602060405180830381600087803b158015610de457600080fd5b505af1158015610df8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1c919061202e565b50505050565b600d8181548110610bb757600080fd5b6008546001600160a01b03163314610e5c5760405162461bcd60e51b815260040161083690612138565b600b805460ff60a01b19169055565b6008546000906001600160a01b03163314610e985760405162461bcd60e51b815260040161083690612138565b600c548360ff1610610ebc5760405162461bcd60e51b8152600401610836906121e8565b60ff831615610f0957600c610ed2600185612311565b60ff1681548110610ef357634e487b7160e01b600052603260045260246000fd5b90600052602060002001548211610f0957600080fd5b610f1d6001610f17600c5490565b90611c56565b8360ff161015610f6b57600c610f34846001612296565b60ff1681548110610f5557634e487b7160e01b600052603260045260246000fd5b90600052602060002001548210610f6b57600080fd5b81600c8460ff1681548110610f9057634e487b7160e01b600052603260045260246000fd5b60009182526020909120015550600192915050565b6008546001600160a01b03163314610fcf5760405162461bcd60e51b815260040161083690612138565b6001600160a01b03811661103c5760405162461bcd60e51b815260206004820152602e60248201527f74617820636f6c6c6563746f722061646472657373206d757374206265206e6f60448201526d6e2d7a65726f206164647265737360901b6064820152608401610836565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146110885760405162461bcd60e51b81526004016108369061216f565b6110926000611c69565b565b6006546001600160a01b031633146110be5760405162461bcd60e51b8152600401610836906121a4565b6110c88282611cbb565b5050565b6006546000906001600160a01b03163314806110f257506008546001600160a01b031633145b61110e5760405162461bcd60e51b815260040161083690612232565b6001600160a01b0382166000908152600e602052604090205460ff166111765760405162461bcd60e51b815260206004820152601960248201527f616464726573732063616e277420626520696e636c75646564000000000000006044820152606401610836565b506001600160a01b03166000908152600e60205260409020805460ff19169055600190565b6060600480546106a690612351565b6008546000906001600160a01b031633146111d75760405162461bcd60e51b815260040161083690612138565b600a9190915590565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156112625760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610836565b61126f33858584036114b9565b5060019392505050565b6000610736338484611836565b6008546000906001600160a01b031633146112b35760405162461bcd60e51b815260040161083690612138565b600d548360ff16106112d75760405162461bcd60e51b8152600401610836906121e8565b81600d8460ff1681548110610f9057634e487b7160e01b600052603260045260246000fd5b6008546001600160a01b031633146113265760405162461bcd60e51b815260040161083690612138565b600b54600160a01b900460ff161561138c5760405162461bcd60e51b8152602060048201526024808201527f6175746f2063616c63756c617465207461782063616e6e6f7420626520656e61604482015263189b195960e21b6064820152608401610836565b61271081106113dd5760405162461bcd60e51b815260206004820152601b60248201527f74617820657175616c206f722062696767657220746f203130302500000000006044820152606401610836565b600955565b6005546001600160a01b0316331461140c5760405162461bcd60e51b81526004016108369061216f565b6001600160a01b0381166114715760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610836565b61084881611c69565b6008546001600160a01b031633146114a45760405162461bcd60e51b815260040161083690612138565b600b805460ff60a01b1916600160a01b179055565b6001600160a01b03831661151b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610836565b6001600160a01b03821661157c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610836565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600754604051633ddac95360e01b8152306004820152670de0b6b3a764000060248201526000916001600160a01b031690633ddac9539060440160206040518083038186803b15801561162f57600080fd5b505afa92505050801561165f575060408051601f3d908101601f1916820190925261165c91810190612084565b60015b6116c15760405162461bcd60e51b815260206004820152602d60248201527f47616c6178793a206661696c656420746f20666574636820474c58207072696360448201526c652066726f6d204f7261636c6560981b6064820152608401610836565b6001600160901b0316919050565b600b54600090600160a01b900460ff16156109e05760006116fd60016116f4600c5490565b60ff1690611d3c565b90505b600c8160ff168154811061172457634e487b7160e01b600052603260045260246000fd5b9060005260206000200154831061182057612710600d8260ff168154811061175c57634e487b7160e01b600052603260045260246000fd5b9060005260206000200154106117b45760405162461bcd60e51b815260206004820152601b60248201527f74617820657175616c206f722062696767657220746f203130302500000000006044820152606401610836565b600d8160ff16815481106117d857634e487b7160e01b600052603260045260246000fd5b9060005260206000200154600981905550600d8160ff168154811061180d57634e487b7160e01b600052603260045260246000fd5b9060005260206000200154915050919050565b61182981612334565b9050611700565b50919050565b6001600160a01b03831661189a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610836565b6001600160a01b0382166118fc5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610836565b6001600160a01b038316600090815260208190526040902054818110156119745760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610836565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906119ab90849061227e565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516119f791815260200190565b60405180910390a3610e1c565b600080611a28612710611a2260095487611d7e90919063ffffffff16565b90611d8a565b90506000611a368583611c56565b90508315611a4d57611a488783611cbb565b611a65565b600b54611a659088906001600160a01b031684611836565b611a70878783611836565b5060019695505050505050565b60008184841115611aa15760405162461bcd60e51b815260040161083691906120e5565b505050900390565b6001600160a01b038116611b155760405162461bcd60e51b815260206004820152602d60248201527f6f70657261746f723a207a65726f206164647265737320676976656e20666f7260448201526c103732bb9037b832b930ba37b960991b6064820152608401610836565b6040516001600160a01b038216906000907f74da04524d50c64947f5dd5381ef1a4dca5cba8ed1d816243f9e48aa0b5617ed908290a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038216611bc35760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610836565b8060026000828254611bd5919061227e565b90915550506001600160a01b03821660009081526020819052604081208054839290611c0290849061227e565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6108483382611d96565b6000611c6282846122fa565b9392505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000611cc7833361060d565b905081811015611d255760405162461bcd60e51b8152602060048201526024808201527f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f77604482015263616e636560e01b6064820152608401610836565b611d3283338484036114b9565b610d6b8383611d96565b6000611c6283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611ee4565b6000611c6282846122db565b6000611c6282846122bb565b6001600160a01b038216611df65760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610836565b6001600160a01b03821660009081526020819052604090205481811015611e6a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610836565b6001600160a01b0383166000908152602081905260408120838303905560028054849290611e999084906122fa565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b60008360ff168360ff1611158290611f0f5760405162461bcd60e51b815260040161083691906120e5565b506000611f1c8486612311565b95945050505050565b600060208284031215611f36578081fd5b8135611c628161239c565b60008060408385031215611f53578081fd5b8235611f5e8161239c565b91506020830135611f6e8161239c565b809150509250929050565b600080600060608486031215611f8d578081fd5b8335611f988161239c565b92506020840135611fa88161239c565b91506040840135611fb88161239c565b809150509250925092565b600080600060608486031215611fd7578283fd5b8335611fe28161239c565b92506020840135611ff28161239c565b929592945050506040919091013590565b60008060408385031215612015578182fd5b82356120208161239c565b946020939093013593505050565b60006020828403121561203f578081fd5b81518015158114611c62578182fd5b600080600060608486031215612062578283fd5b833561206d8161239c565b9250602084013591506040840135611fb88161239c565b600060208284031215612095578081fd5b81516001600160901b0381168114611c62578182fd5b6000602082840312156120bc578081fd5b5035919050565b600080604083850312156120d5578182fd5b823560ff81168114612020578283fd5b6000602080835283518082850152825b81811015612111578581018301518582016040015282016120f5565b818111156121225783604083870101525b50601f01601f1916929092016040019392505050565b6020808252601c908201527f43616c6c6572206973206e6f742074686520746178206f666669636500000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526024908201527f6f70657261746f723a2063616c6c6572206973206e6f7420746865206f70657260408201526330ba37b960e11b606082015260800190565b6020808252602a908201527f496e6465782068617320746f206c6f776572207468616e20636f756e74206f666040820152692074617820746965727360b01b606082015260800190565b6020808252602c908201527f43616c6c6572206973206e6f7420746865206f70657261746f72206f7220746860408201526b6520746178206f666669636560a01b606082015260800190565b6000821982111561229157612291612386565b500190565b600060ff821660ff84168060ff038211156122b3576122b3612386565b019392505050565b6000826122d657634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156122f5576122f5612386565b500290565b60008282101561230c5761230c612386565b500390565b600060ff821660ff84168082101561232b5761232b612386565b90039392505050565b600060ff82168061234757612347612386565b6000190192915050565b600181811c9082168061236557607f821691505b6020821081141561183057634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811461084857600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220528e9138bbe2b9a478157d116f3a29ca3aaf1886d231e484d0413f6e750b14fd64736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036ecd54c24345ac945975c7e7883cde18006446c
-----Decoded View---------------
Arg [0] : _taxRate (uint256): 0
Arg [1] : _taxCollectorAddress (address): 0x36ecD54c24345ac945975C7E7883cDe18006446C
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [1] : 00000000000000000000000036ecd54c24345ac945975c7e7883cde18006446c
Deployed Bytecode Sourcemap
35034:9664:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6776:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8943:169;;;;;;:::i;:::-;;:::i;:::-;;;4967:14:1;;4960:22;4942:41;;4930:2;4915:18;8943:169:0;4897:92:1;7896:108:0;7984:12;;7896:108;;;17363:25:1;;;17351:2;17336:18;7896:108:0;17318:76:1;42248:860:0;;;;;;:::i;:::-;;:::i;33695:115::-;;;;;;:::i;:::-;;:::i;:::-;;7738:93;;;7821:2;17541:36:1;;17529:2;17514:18;7738:93:0;17496:87:1;40014:211:0;;;;;;:::i;:::-;;:::i;41004:240::-;;;;;;:::i;:::-;;:::i;10495:215::-;;;;;;:::i;:::-;;:::i;35807:24::-;;;;;-1:-1:-1;;;;;35807:24:0;;;;;;-1:-1:-1;;;;;3865:32:1;;;3847:51;;3835:2;3820:18;35807:24:0;3802:102:1;40233:259:0;;;;;;:::i;:::-;;:::i;41721:290::-;;;;;;:::i;:::-;;:::i;42019:83::-;;;;;;:::i;:::-;;:::i;36198:134::-;;;;;;:::i;:::-;;:::i;33587:100::-;33670:9;;-1:-1:-1;;;;;33670:9:0;4505:10;33654:25;33587:100;;35212:69;;35272:9;35212:69;;35952:38;;;;;;43849:651;;;;;;:::i;:::-;;:::i;44508:187::-;;;;;;:::i;:::-;;:::i;33359:85::-;33427:9;;-1:-1:-1;;;;;33427:9:0;33359:85;;36339:113;;;;;;:::i;:::-;;:::i;39907:99::-;;;:::i;37936:545::-;;;;;;:::i;:::-;;:::i;40500:248::-;;;;;;:::i;:::-;;:::i;8067:127::-;;;;;;:::i;:::-;-1:-1:-1;;;;;8168:18:0;8141:7;8168:18;;;;;;;;;;;;8067:127;32167:103;;;:::i;35865:22::-;;;;;;42110:130;;;;;;:::i;:::-;;:::i;36143:28::-;;;;;-1:-1:-1;;;36143:28:0;;;;;;31516:87;31589:6;;-1:-1:-1;;;;;31589:6:0;31516:87;;41252:240;;;;;;:::i;:::-;;:::i;6995:104::-;;;:::i;35605:41::-;;;;;-1:-1:-1;;;35605:41:0;;;;;;38821:135;;;;;;:::i;:::-;;:::i;11213:413::-;;;;;;:::i;:::-;;:::i;37557:115::-;37644:13;:20;37557:115;;8407:175;;;;;;:::i;:::-;;:::i;38489:324::-;;;;;;:::i;:::-;;:::i;35739:27::-;;;;;-1:-1:-1;;;;;35739:27:0;;;36041:34;;;;;-1:-1:-1;;;;;36041:34:0;;;35357:66;;35413:10;35357:66;;40756:240;;;;;;:::i;:::-;;:::i;36504:49::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;8645:151;;;;;;:::i;:::-;-1:-1:-1;;;;;8761:18:0;;;8734:7;8761:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;8645:151;37803:125;;;;;;:::i;:::-;-1:-1:-1;;;;;37893:27:0;37869:4;37893:27;;;:17;:27;;;;;;;;;37803:125;37680:115;37767:13;:20;37680:115;;32425:201;;;;;;:::i;:::-;;:::i;39802:97::-;;;:::i;35471:70::-;;35533:8;35471:70;;6776:100;6830:13;6863:5;6856:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6776:100;:::o;8943:169::-;9026:4;9043:39;4505:10;9066:7;9075:6;9043:8;:39::i;:::-;-1:-1:-1;9100:4:0;8943:169;;;;:::o;42248:860::-;42471:16;;42380:4;;;;;;-1:-1:-1;;;42471:16:0;;;;42467:264;;;42504:26;42533:17;:15;:17::i;:::-;42504:46;;42582:34;42597:18;42582:14;:34::i;:::-;42565:51;;42656:13;;42635:18;:34;42631:89;;;42700:4;42690:14;;42631:89;42467:264;;42749:19;;;:48;;-1:-1:-1;;;;;;42772:25:0;;;;;;:17;:25;;;;;;;;42749:48;42745:202;;;42814:36;42824:6;42832:9;42843:6;42814:9;:36::i;:::-;42745:202;;;42883:52;42900:6;42908:9;42919:6;42927:7;42883:16;:52::i;:::-;;42745:202;42959:119;42968:6;4505:10;42990:87;43026:6;42990:87;;;;;;;;;;;;;;;;;:31;43000:6;4505:10;8645:151;:::i;42990:31::-;:35;:87;:35;:87::i;:::-;42959:8;:119::i;:::-;-1:-1:-1;43096:4:0;;42248:860;-1:-1:-1;;;;;42248:860:0:o;33695:115::-;31589:6;;-1:-1:-1;;;;;31589:6:0;4505:10;31736:23;31728:68;;;;-1:-1:-1;;;31728:68:0;;;;;;;:::i;:::-;;;;;;;;;33771:31:::1;33789:12;33771:17;:31::i;:::-;33695:115:::0;:::o;40014:211::-;33670:9;;-1:-1:-1;;;;;33670:9:0;4505:10;33654:25;36819:39;;;-1:-1:-1;36835:9:0;;-1:-1:-1;;;;;36835:9:0;36848:10;36835:23;36819:39;36811:96;;;;-1:-1:-1;;;36811:96:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40112:27:0;::::1;40104:74;;;::::0;-1:-1:-1;;;40104:74:0;;13166:2:1;40104:74:0::1;::::0;::::1;13148:21:1::0;13205:2;13185:18;;;13178:30;13244:34;13224:18;;;13217:62;-1:-1:-1;;;13295:18:1;;;13288:32;13337:19;;40104:74:0::1;13138:224:1::0;40104:74:0::1;40189:12;:28:::0;;-1:-1:-1;;;;;;40189:28:0::1;-1:-1:-1::0;;;;;40189:28:0;;;::::1;::::0;;;::::1;::::0;;40014:211::o;41004:240::-;33670:9;;41086:4;;-1:-1:-1;;;;;33670:9:0;4505:10;33654:25;36819:39;;;-1:-1:-1;36835:9:0;;-1:-1:-1;;;;;36835:9:0;36848:10;36835:23;36819:39;36811:96;;;;-1:-1:-1;;;36811:96:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41112:27:0;::::1;;::::0;;;:17:::1;:27;::::0;;;;;::::1;;41111:28;41103:66;;;::::0;-1:-1:-1;;;41103:66:0;;12812:2:1;41103:66:0::1;::::0;::::1;12794:21:1::0;12851:2;12831:18;;;12824:30;12890:27;12870:18;;;12863:55;12935:18;;41103:66:0::1;12784:175:1::0;41103:66:0::1;-1:-1:-1::0;;;;;;41180:27:0;::::1;;::::0;;;:17:::1;:27;::::0;;;;:34;;-1:-1:-1;;41180:34:0::1;41210:4;41180:34:::0;;::::1;::::0;;;36918:1:::1;41004:240:::0;;;:::o;10495:215::-;4505:10;10583:4;10632:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;10632:34:0;;;;;;;;;;10583:4;;10600:80;;10623:7;;10632:47;;10669:10;;10632:47;:::i;40233:259::-;33670:9;;-1:-1:-1;;;;;33670:9:0;4505:10;33654:25;36819:39;;;-1:-1:-1;36835:9:0;;-1:-1:-1;;;;;36835:9:0;36848:10;36835:23;36819:39;36811:96;;;;-1:-1:-1;;;36811:96:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40325:24:0;::::1;40317:75;;;::::0;-1:-1:-1;;;40317:75:0;;8891:2:1;40317:75:0::1;::::0;::::1;8873:21:1::0;8930:2;8910:18;;;8903:30;8969:34;8949:18;;;8942:62;-1:-1:-1;;;9020:18:1;;;9013:36;9066:19;;40317:75:0::1;8863:228:1::0;40317:75:0::1;40429:9;::::0;40408:43:::1;::::0;;-1:-1:-1;;;;;40429:9:0;;::::1;4121:34:1::0;;4191:15;;;4186:2;4171:18;;4164:43;40408::0::1;::::0;4056:18:1;40408:43:0::1;;;;;;;40462:9;:22:::0;;-1:-1:-1;;;;;;40462:22:0::1;-1:-1:-1::0;;;;;40462:22:0;;;::::1;::::0;;;::::1;::::0;;40233:259::o;41721:290::-;33495:9;;41801:4;;-1:-1:-1;;;;;33495:9:0;33508:10;33495:23;33487:72;;;;-1:-1:-1;;;33487:72:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8168:18:0;;41818:21:::1;8168:18:::0;;;;;;;;;;;41874:26:::1;8168:18:::0;41892:7;41874:5:::1;:26::i;:::-;-1:-1:-1::0;;;;;8168:18:0;;41911:20:::1;8168:18:::0;;;;;;;;;;;41975:28;;;::::1;::::0;41721:290;-1:-1:-1;;;;41721:290:0:o;42019:83::-;42076:18;42087:6;42076:10;:18::i;36198:134::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36198:134:0;:::o;43849:651::-;33495:9;;-1:-1:-1;;;;;33495:9:0;33508:10;33495:23;33487:72;;;;-1:-1:-1;;;33487:72:0;;;;;;;:::i;:::-;44018:21:::1;::::0;-1:-1:-1;;;44018:21:0;::::1;;;44017:22;44009:59;;;::::0;-1:-1:-1;;;44009:59:0;;6208:2:1;44009:59:0::1;::::0;::::1;6190:21:1::0;6247:2;6227:18;;;6220:30;6286:26;6266:18;;;6259:54;6330:18;;44009:59:0::1;6180:174:1::0;44009:59:0::1;-1:-1:-1::0;;;;;44087:26:0;::::1;44079:52;;;::::0;-1:-1:-1;;;44079:52:0;;16311:2:1;44079:52:0::1;::::0;::::1;16293:21:1::0;16350:2;16330:18;;;16323:30;-1:-1:-1;;;16369:18:1;;;16362:43;16422:18;;44079:52:0::1;16283:163:1::0;44079:52:0::1;-1:-1:-1::0;;;;;44150:25:0;::::1;44142:50;;;::::0;-1:-1:-1;;;44142:50:0;;14388:2:1;44142:50:0::1;::::0;::::1;14370:21:1::0;14427:2;14407:18;;;14400:30;-1:-1:-1;;;14446:18:1;;;14439:42;14498:18;;44142:50:0::1;14360:162:1::0;44142:50:0::1;-1:-1:-1::0;;;;;44211:28:0;::::1;44203:56;;;::::0;-1:-1:-1;;;44203:56:0;;11655:2:1;44203:56:0::1;::::0;::::1;11637:21:1::0;11694:2;11674:18;;;11667:30;-1:-1:-1;;;11713:18:1;;;11706:45;11768:18;;44203:56:0::1;11627:165:1::0;44203:56:0::1;44270:21;:28:::0;;-1:-1:-1;;;;44270:28:0::1;-1:-1:-1::0;;;44270:28:0::1;::::0;;44309:54:::1;44315:12:::0;35272:9:::1;44309:5;:54::i;:::-;44374:49;44380:11;35413:10;44374:5;:49::i;:::-;44434:58;44440:14;35533:8;44434:5;:58::i;:::-;43849:651:::0;;;:::o;44508:187::-;33495:9;;-1:-1:-1;;;;;33495:9:0;33508:10;33495:23;33487:72;;;;-1:-1:-1;;;33487:72:0;;;;;;;:::i;:::-;44658:29:::1;::::0;-1:-1:-1;;;44658:29:0;;-1:-1:-1;;;;;4436:32:1;;;44658:29:0::1;::::0;::::1;4418:51:1::0;4485:18;;;4478:34;;;44658:15:0;::::1;::::0;::::1;::::0;4391:18:1;;44658:29:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;44508:187:::0;;;:::o;36339:113::-;;;;;;;;;;;;39907:99;36681:9;;-1:-1:-1;;;;;36681:9:0;36694:10;36681:23;36673:64;;;;-1:-1:-1;;;36673:64:0;;;;;;;:::i;:::-;39974:16:::1;:24:::0;;-1:-1:-1;;;;39974:24:0::1;::::0;;39907:99::o;37936:545::-;36681:9;;38021:4;;-1:-1:-1;;;;;36681:9:0;36694:10;36681:23;36673:64;;;;-1:-1:-1;;;36673:64:0;;;;;;;:::i;:::-;37644:13;:20;38110:6:::1;:32;;;38102:87;;;;-1:-1:-1::0;;;38102:87:0::1;;;;;;;:::i;:::-;38204:10;::::0;::::1;::::0;38200:86:::1;;38248:13;38262:10;38271:1;38262:6:::0;:10:::1;:::i;:::-;38248:25;;;;;;;;-1:-1:-1::0;;;38248:25:0::1;;;;;;;;;;;;;;;;;38239:6;:34;38231:43;;;::::0;::::1;;38309:30;38337:1;38309:23;37644:13:::0;:20;;37557:115;38309:23:::1;:27:::0;::::1;:30::i;:::-;38300:6;:39;;;38296:115;;;38373:13;38387:10;:6:::0;38396:1:::1;38387:10;:::i;:::-;38373:25;;;;;;;;-1:-1:-1::0;;;38373:25:0::1;;;;;;;;;;;;;;;;;38364:6;:34;38356:43;;;::::0;::::1;;38445:6;38421:13;38435:6;38421:21;;;;;;;;-1:-1:-1::0;;;38421:21:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;:30:::0;-1:-1:-1;38469:4:0::1;37936:545:::0;;;;:::o;40500:248::-;36681:9;;-1:-1:-1;;;;;36681:9:0;36694:10;36681:23;36673:64;;;;-1:-1:-1;;;36673:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40602:34:0;::::1;40594:93;;;::::0;-1:-1:-1;;;40594:93:0;;10430:2:1;40594:93:0::1;::::0;::::1;10412:21:1::0;10469:2;10449:18;;;10442:30;10508:34;10488:18;;;10481:62;-1:-1:-1;;;10559:18:1;;;10552:44;10613:19;;40594:93:0::1;10402:236:1::0;40594:93:0::1;40698:19;:42:::0;;-1:-1:-1;;;;;;40698:42:0::1;-1:-1:-1::0;;;;;40698:42:0;;;::::1;::::0;;;::::1;::::0;;40500:248::o;32167:103::-;31589:6;;-1:-1:-1;;;;;31589:6:0;4505:10;31736:23;31728:68;;;;-1:-1:-1;;;31728:68:0;;;;;;;:::i;:::-;32232:30:::1;32259:1;32232:18;:30::i;:::-;32167:103::o:0;42110:130::-;33495:9;;-1:-1:-1;;;;;33495:9:0;33508:10;33495:23;33487:72;;;;-1:-1:-1;;;33487:72:0;;;;;;;:::i;:::-;42201:31:::1;42216:7;42225:6;42201:14;:31::i;:::-;42110:130:::0;;:::o;41252:240::-;33670:9;;41334:4;;-1:-1:-1;;;;;33670:9:0;4505:10;33654:25;36819:39;;;-1:-1:-1;36835:9:0;;-1:-1:-1;;;;;36835:9:0;36848:10;36835:23;36819:39;36811:96;;;;-1:-1:-1;;;36811:96:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41359:27:0;::::1;;::::0;;;:17:::1;:27;::::0;;;;;::::1;;41351:65;;;::::0;-1:-1:-1;;;41351:65:0;;8537:2:1;41351:65:0::1;::::0;::::1;8519:21:1::0;8576:2;8556:18;;;8549:30;8615:27;8595:18;;;8588:55;8660:18;;41351:65:0::1;8509:175:1::0;41351:65:0::1;-1:-1:-1::0;;;;;;41427:27:0::1;41457:5;41427:27:::0;;;:17:::1;:27;::::0;;;;:35;;-1:-1:-1;;41427:35:0::1;::::0;;-1:-1:-1;;41252:240:0:o;6995:104::-;7051:13;7084:7;7077:14;;;;;:::i;38821:135::-;36681:9;;38901:4;;-1:-1:-1;;;;;36681:9:0;36694:10;36681:23;36673:64;;;;-1:-1:-1;;;36673:64:0;;;;;;;:::i;:::-;38918:13:::1;:30:::0;;;;38821:135;:::o;11213:413::-;4505:10;11306:4;11350:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11350:34:0;;;;;;;;;;11403:35;;;;11395:85;;;;-1:-1:-1;;;11395:85:0;;16653:2:1;11395:85:0;;;16635:21:1;16692:2;16672:18;;;16665:30;16731:34;16711:18;;;16704:62;-1:-1:-1;;;16782:18:1;;;16775:35;16827:19;;11395:85:0;16625:227:1;11395:85:0;11516:67;4505:10;11539:7;11567:15;11548:16;:34;11516:8;:67::i;:::-;-1:-1:-1;11614:4:0;;11213:413;-1:-1:-1;;;11213:413:0:o;8407:175::-;8493:4;8510:42;4505:10;8534:9;8545:6;8510:9;:42::i;38489:324::-;36681:9;;38574:4;;-1:-1:-1;;;;;36681:9:0;36694:10;36681:23;36673:64;;;;-1:-1:-1;;;36673:64:0;;;;;;;:::i;:::-;37767:13;:20;38663:6:::1;:32;;;38655:87;;;;-1:-1:-1::0;;;38655:87:0::1;;;;;;;:::i;:::-;38777:6;38753:13;38767:6;38753:21;;;;;;;;-1:-1:-1::0;;;38753:21:0::1;;;;;;;;40756:240:::0;36681:9;;-1:-1:-1;;;;;36681:9:0;36694:10;36681:23;36673:64;;;;-1:-1:-1;;;36673:64:0;;;;;;;:::i;:::-;40835:16:::1;::::0;-1:-1:-1;;;40835:16:0;::::1;;;40834:17;40826:66;;;::::0;-1:-1:-1;;;40826:66:0;;13569:2:1;40826:66:0::1;::::0;::::1;13551:21:1::0;13608:2;13588:18;;;13581:30;13647:34;13627:18;;;13620:62;-1:-1:-1;;;13698:18:1;;;13691:34;13742:19;;40826:66:0::1;13541:226:1::0;40826:66:0::1;40922:5;40911:8;:16;40903:56;;;::::0;-1:-1:-1;;;40903:56:0;;6561:2:1;40903:56:0::1;::::0;::::1;6543:21:1::0;6600:2;6580:18;;;6573:30;6639:29;6619:18;;;6612:57;6686:18;;40903:56:0::1;6533:177:1::0;40903:56:0::1;40970:7;:18:::0;40756:240::o;32425:201::-;31589:6;;-1:-1:-1;;;;;31589:6:0;4505:10;31736:23;31728:68;;;;-1:-1:-1;;;31728:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32514:22:0;::::1;32506:73;;;::::0;-1:-1:-1;;;32506:73:0;;7320:2:1;32506:73:0::1;::::0;::::1;7302:21:1::0;7359:2;7339:18;;;7332:30;7398:34;7378:18;;;7371:62;-1:-1:-1;;;7449:18:1;;;7442:36;7495:19;;32506:73:0::1;7292:228:1::0;32506:73:0::1;32590:28;32609:8;32590:18;:28::i;39802:97::-:0;36681:9;;-1:-1:-1;;;;;36681:9:0;36694:10;36681:23;36673:64;;;;-1:-1:-1;;;36673:64:0;;;;;;;:::i;:::-;39868:16:::1;:23:::0;;-1:-1:-1;;;;39868:23:0::1;-1:-1:-1::0;;;39868:23:0::1;::::0;;39802:97::o;14897:380::-;-1:-1:-1;;;;;15033:19:0;;15025:68;;;;-1:-1:-1;;;15025:68:0;;15906:2:1;15025:68:0;;;15888:21:1;15945:2;15925:18;;;15918:30;15984:34;15964:18;;;15957:62;-1:-1:-1;;;16035:18:1;;;16028:34;16079:19;;15025:68:0;15878:226:1;15025:68:0;-1:-1:-1;;;;;15112:21:0;;15104:68;;;;-1:-1:-1;;;15104:68:0;;7727:2:1;15104:68:0;;;7709:21:1;7766:2;7746:18;;;7739:30;7805:34;7785:18;;;7778:62;-1:-1:-1;;;7856:18:1;;;7849:32;7898:19;;15104:68:0;7699:224:1;15104:68:0;-1:-1:-1;;;;;15185:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;15237:32;;17363:25:1;;;15237:32:0;;17336:18:1;15237:32:0;;;;;;;14897:380;;;:::o;38964:308::-;39059:12;;39051:50;;-1:-1:-1;;;39051:50:0;;39089:4;39051:50;;;4418:51:1;39096:4:0;4485:18:1;;;4478:34;39014:20:0;;-1:-1:-1;;;;;39059:12:0;;39051:29;;4391:18:1;;39051:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39051:50:0;;;;;;;;-1:-1:-1;;39051:50:0;;;;;;;;;;;;:::i;:::-;;;39047:218;;39198:55;;-1:-1:-1;;;39198:55:0;;13974:2:1;39198:55:0;;;13956:21:1;14013:2;13993:18;;;13986:30;14052:34;14032:18;;;14025:62;-1:-1:-1;;;14103:18:1;;;14096:43;14156:19;;39198:55:0;13946:235:1;39047:218:0;-1:-1:-1;;;;;39149:15:0;;38964:308;-1:-1:-1;38964:308:0:o;39280:514::-;39367:16;;39344:7;;-1:-1:-1;;;39367:16:0;;;;39363:424;;;39405:12;39420:37;39455:1;39426:23;37644:13;:20;;37557:115;39426:23;39420:34;;;;:37::i;:::-;39405:52;;39400:376;39521:13;39535:6;39521:21;;;;;;;;-1:-1:-1;;;39521:21:0;;;;;;;;;;;;;;;;;39505:12;:37;39501:260;;39599:5;39575:13;39589:6;39575:21;;;;;;;;-1:-1:-1;;;39575:21:0;;;;;;;;;;;;;;;;;:29;39567:69;;;;-1:-1:-1;;;39567:69:0;;6561:2:1;39567:69:0;;;6543:21:1;6600:2;6580:18;;;6573:30;6639:29;6619:18;;;6612:57;6686:18;;39567:69:0;6533:177:1;39567:69:0;39669:13;39683:6;39669:21;;;;;;;;-1:-1:-1;;;39669:21:0;;;;;;;;;;;;;;;;;39659:7;:31;;;;39720:13;39734:6;39720:21;;;;;;;;-1:-1:-1;;;39720:21:0;;;;;;;;;;;;;;;;;39713:28;;;39280:514;;;:::o;39501:260::-;39472:8;;;:::i;:::-;;;39400:376;;;;39280:514;;;:::o;12116:733::-;-1:-1:-1;;;;;12256:20:0;;12248:70;;;;-1:-1:-1;;;12248:70:0;;14729:2:1;12248:70:0;;;14711:21:1;14768:2;14748:18;;;14741:30;14807:34;14787:18;;;14780:62;-1:-1:-1;;;14858:18:1;;;14851:35;14903:19;;12248:70:0;14701:227:1;12248:70:0;-1:-1:-1;;;;;12337:23:0;;12329:71;;;;-1:-1:-1;;;12329:71:0;;5804:2:1;12329:71:0;;;5786:21:1;5843:2;5823:18;;;5816:30;5882:34;5862:18;;;5855:62;-1:-1:-1;;;5933:18:1;;;5926:33;5976:19;;12329:71:0;5776:225:1;12329:71:0;-1:-1:-1;;;;;12497:17:0;;12473:21;12497:17;;;;;;;;;;;12533:23;;;;12525:74;;;;-1:-1:-1;;;12525:74:0;;8130:2:1;12525:74:0;;;8112:21:1;8169:2;8149:18;;;8142:30;8208:34;8188:18;;;8181:62;-1:-1:-1;;;8259:18:1;;;8252:36;8305:19;;12525:74:0;8102:228:1;12525:74:0;-1:-1:-1;;;;;12635:17:0;;;:9;:17;;;;;;;;;;;12655:22;;;12635:42;;12699:20;;;;;;;;:30;;12671:6;;12635:9;12699:30;;12671:6;;12699:30;:::i;:::-;;;;;;;;12764:9;-1:-1:-1;;;;;12747:35:0;12756:6;-1:-1:-1;;;;;12747:35:0;;12775:6;12747:35;;;;17363:25:1;;17351:2;17336:18;;17318:76;12747:35:0;;;;;;;;12795:46;43849:651;43116:653;43268:4;43285:17;43305:30;43329:5;43305:19;43316:7;;43305:6;:10;;:19;;;;:::i;:::-;:23;;:30::i;:::-;43285:50;-1:-1:-1;43346:22:0;43371:21;:6;43285:50;43371:10;:21::i;:::-;43346:46;;43408:7;43405:225;;;43457:33;43472:6;43480:9;43457:14;:33::i;:::-;43405:225;;;43587:19;;43569:49;;43579:6;;-1:-1:-1;;;;;43587:19:0;43608:9;43569;:49::i;:::-;43693:44;43703:6;43711:9;43722:14;43693:9;:44::i;:::-;-1:-1:-1;43757:4:0;;43116:653;-1:-1:-1;;;;;;43116:653:0:o;23245:240::-;23365:7;23426:12;23418:6;;;;23410:29;;;;-1:-1:-1;;;23410:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;23461:5:0;;;23245:240::o;33818:257::-;-1:-1:-1;;;;;33895:26:0;;33887:84;;;;-1:-1:-1;;;33887:84:0;;9298:2:1;33887:84:0;;;9280:21:1;9337:2;9317:18;;;9310:30;9376:34;9356:18;;;9349:62;-1:-1:-1;;;9427:18:1;;;9420:43;9480:19;;33887:84:0;9270:235:1;33887:84:0;33987:45;;-1:-1:-1;;;;;33987:45:0;;;34015:1;;33987:45;;34015:1;;33987:45;34043:9;:24;;-1:-1:-1;;;;;;34043:24:0;-1:-1:-1;;;;;34043:24:0;;;;;;;;;;33818:257::o;13136:399::-;-1:-1:-1;;;;;13220:21:0;;13212:65;;;;-1:-1:-1;;;13212:65:0;;17059:2:1;13212:65:0;;;17041:21:1;17098:2;17078:18;;;17071:30;17137:33;17117:18;;;17110:61;17188:18;;13212:65:0;17031:181:1;13212:65:0;13368:6;13352:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;13385:18:0;;:9;:18;;;;;;;;;;:28;;13407:6;;13385:9;:28;;13407:6;;13385:28;:::i;:::-;;;;-1:-1:-1;;13429:37:0;;17363:25:1;;;-1:-1:-1;;;;;13429:37:0;;;13446:1;;13429:37;;17351:2:1;17336:18;13429:37:0;;;;;;;42110:130;;:::o;17311:91::-;17367:27;4505:10;17387:6;17367:5;:27::i;21347:98::-;21405:7;21432:5;21436:1;21432;:5;:::i;:::-;21425:12;21347:98;-1:-1:-1;;;21347:98:0:o;32786:191::-;32879:6;;;-1:-1:-1;;;;;32896:17:0;;;-1:-1:-1;;;;;;32896:17:0;;;;;;;32929:40;;32879:6;;;32896:17;32879:6;;32929:40;;32860:16;;32929:40;32786:191;;:::o;17721:368::-;17798:24;17825:32;17835:7;4505:10;8645:151;:::i;17825:32::-;17798:59;;17896:6;17876:16;:26;;17868:75;;;;-1:-1:-1;;;17868:75:0;;10845:2:1;17868:75:0;;;10827:21:1;10884:2;10864:18;;;10857:30;10923:34;10903:18;;;10896:62;-1:-1:-1;;;10974:18:1;;;10967:34;11018:19;;17868:75:0;10817:226:1;17868:75:0;17979:58;17988:7;4505:10;18030:6;18011:16;:25;17979:8;:58::i;:::-;18059:22;18065:7;18074:6;18059:5;:22::i;26500:130::-;26554:5;26579:43;26583:1;26586;26579:43;;;;;;;;;;;;;;;;;:3;:43::i;21704:98::-;21762:7;21789:5;21793:1;21789;:5;:::i;22103:98::-;22161:7;22188:5;22192:1;22188;:5;:::i;13868:591::-;-1:-1:-1;;;;;13952:21:0;;13944:67;;;;-1:-1:-1;;;13944:67:0;;12410:2:1;13944:67:0;;;12392:21:1;12449:2;12429:18;;;12422:30;12488:34;12468:18;;;12461:62;-1:-1:-1;;;12539:18:1;;;12532:31;12580:19;;13944:67:0;12382:223:1;13944:67:0;-1:-1:-1;;;;;14111:18:0;;14086:22;14111:18;;;;;;;;;;;14148:24;;;;14140:71;;;;-1:-1:-1;;;14140:71:0;;6917:2:1;14140:71:0;;;6899:21:1;6956:2;6936:18;;;6929:30;6995:34;6975:18;;;6968:62;-1:-1:-1;;;7046:18:1;;;7039:32;7088:19;;14140:71:0;6889:224:1;14140:71:0;-1:-1:-1;;;;;14247:18:0;;:9;:18;;;;;;;;;;14268:23;;;14247:44;;14313:12;:22;;14285:6;;14247:9;14313:22;;14285:6;;14313:22;:::i;:::-;;;;-1:-1:-1;;14353:37:0;;17363:25:1;;;14379:1:0;;-1:-1:-1;;;;;14353:37:0;;;;;17351:2:1;17336:18;14353:37:0;;;;;;;43849:651;;;:::o;26933:184::-;27015:5;27046:1;27041:6;;:1;:6;;;;27049:12;27033:29;;;;;-1:-1:-1;;;27033:29:0;;;;;;;;:::i;:::-;-1:-1:-1;27073:7:0;27083:5;27087:1;27083;:5;:::i;:::-;27073:15;26933:184;-1:-1:-1;;;;;26933:184:0:o;14:257:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:2;;;147:6;139;132:22;94:2;191:9;178:23;210:31;235:5;210:31;:::i;276:398::-;344:6;352;405:2;393:9;384:7;380:23;376:32;373:2;;;426:6;418;411:22;373:2;470:9;457:23;489:31;514:5;489:31;:::i;:::-;539:5;-1:-1:-1;596:2:1;581:18;;568:32;609:33;568:32;609:33;:::i;:::-;661:7;651:17;;;363:311;;;;;:::o;679:539::-;756:6;764;772;825:2;813:9;804:7;800:23;796:32;793:2;;;846:6;838;831:22;793:2;890:9;877:23;909:31;934:5;909:31;:::i;:::-;959:5;-1:-1:-1;1016:2:1;1001:18;;988:32;1029:33;988:32;1029:33;:::i;:::-;1081:7;-1:-1:-1;1140:2:1;1125:18;;1112:32;1153:33;1112:32;1153:33;:::i;:::-;1205:7;1195:17;;;783:435;;;;;:::o;1223:466::-;1300:6;1308;1316;1369:2;1357:9;1348:7;1344:23;1340:32;1337:2;;;1390:6;1382;1375:22;1337:2;1434:9;1421:23;1453:31;1478:5;1453:31;:::i;:::-;1503:5;-1:-1:-1;1560:2:1;1545:18;;1532:32;1573:33;1532:32;1573:33;:::i;:::-;1327:362;;1625:7;;-1:-1:-1;;;1679:2:1;1664:18;;;;1651:32;;1327:362::o;1694:325::-;1762:6;1770;1823:2;1811:9;1802:7;1798:23;1794:32;1791:2;;;1844:6;1836;1829:22;1791:2;1888:9;1875:23;1907:31;1932:5;1907:31;:::i;:::-;1957:5;2009:2;1994:18;;;;1981:32;;-1:-1:-1;;;1781:238:1:o;2024:297::-;2091:6;2144:2;2132:9;2123:7;2119:23;2115:32;2112:2;;;2165:6;2157;2150:22;2112:2;2202:9;2196:16;2255:5;2248:13;2241:21;2234:5;2231:32;2221:2;;2282:6;2274;2267:22;2326:479;2416:6;2424;2432;2485:2;2473:9;2464:7;2460:23;2456:32;2453:2;;;2506:6;2498;2491:22;2453:2;2550:9;2537:23;2569:31;2594:5;2569:31;:::i;:::-;2619:5;-1:-1:-1;2671:2:1;2656:18;;2643:32;;-1:-1:-1;2727:2:1;2712:18;;2699:32;2740:33;2699:32;2740:33;:::i;2810:329::-;2880:6;2933:2;2921:9;2912:7;2908:23;2904:32;2901:2;;;2954:6;2946;2939:22;2901:2;2991:9;2985:16;-1:-1:-1;;;;;3034:5:1;3030:50;3023:5;3020:61;3010:2;;3100:6;3092;3085:22;3144:190;3203:6;3256:2;3244:9;3235:7;3231:23;3227:32;3224:2;;;3277:6;3269;3262:22;3224:2;-1:-1:-1;3305:23:1;;3214:120;-1:-1:-1;3214:120:1:o;3339:357::-;3405:6;3413;3466:2;3454:9;3445:7;3441:23;3437:32;3434:2;;;3487:6;3479;3472:22;3434:2;3531:9;3518:23;3581:4;3574:5;3570:16;3563:5;3560:27;3550:2;;3606:6;3598;3591:22;4994:603;5106:4;5135:2;5164;5153:9;5146:21;5196:6;5190:13;5239:6;5234:2;5223:9;5219:18;5212:34;5264:4;5277:140;5291:6;5288:1;5285:13;5277:140;;;5386:14;;;5382:23;;5376:30;5352:17;;;5371:2;5348:26;5341:66;5306:10;;5277:140;;;5435:6;5432:1;5429:13;5426:2;;;5505:4;5500:2;5491:6;5480:9;5476:22;5472:31;5465:45;5426:2;-1:-1:-1;5581:2:1;5560:15;-1:-1:-1;;5556:29:1;5541:45;;;;5588:2;5537:54;;5115:482;-1:-1:-1;;;5115:482:1:o;9510:352::-;9712:2;9694:21;;;9751:2;9731:18;;;9724:30;9790;9785:2;9770:18;;9763:58;9853:2;9838:18;;9684:178::o;9867:356::-;10069:2;10051:21;;;10088:18;;;10081:30;10147:34;10142:2;10127:18;;10120:62;10214:2;10199:18;;10041:182::o;11048:400::-;11250:2;11232:21;;;11289:2;11269:18;;;11262:30;11328:34;11323:2;11308:18;;11301:62;-1:-1:-1;;;11394:2:1;11379:18;;11372:34;11438:3;11423:19;;11222:226::o;11797:406::-;11999:2;11981:21;;;12038:2;12018:18;;;12011:30;12077:34;12072:2;12057:18;;12050:62;-1:-1:-1;;;12143:2:1;12128:18;;12121:40;12193:3;12178:19;;11971:232::o;15291:408::-;15493:2;15475:21;;;15532:2;15512:18;;;15505:30;15571:34;15566:2;15551:18;;15544:62;-1:-1:-1;;;15637:2:1;15622:18;;15615:42;15689:3;15674:19;;15465:234::o;17588:128::-;17628:3;17659:1;17655:6;17652:1;17649:13;17646:2;;;17665:18;;:::i;:::-;-1:-1:-1;17701:9:1;;17636:80::o;17721:204::-;17759:3;17795:4;17792:1;17788:12;17827:4;17824:1;17820:12;17862:3;17856:4;17852:14;17847:3;17844:23;17841:2;;;17870:18;;:::i;:::-;17906:13;;17767:158;-1:-1:-1;;;17767:158:1:o;17930:217::-;17970:1;17996;17986:2;;-1:-1:-1;;;18021:31:1;;18075:4;18072:1;18065:15;18103:4;18028:1;18093:15;17986:2;-1:-1:-1;18132:9:1;;17976:171::o;18152:168::-;18192:7;18258:1;18254;18250:6;18246:14;18243:1;18240:21;18235:1;18228:9;18221:17;18217:45;18214:2;;;18265:18;;:::i;:::-;-1:-1:-1;18305:9:1;;18204:116::o;18325:125::-;18365:4;18393:1;18390;18387:8;18384:2;;;18398:18;;:::i;:::-;-1:-1:-1;18435:9:1;;18374:76::o;18455:195::-;18493:4;18530;18527:1;18523:12;18562:4;18559:1;18555:12;18587:3;18582;18579:12;18576:2;;;18594:18;;:::i;:::-;18631:13;;;18502:148;-1:-1:-1;;;18502:148:1:o;18655:178::-;18692:3;18736:4;18729:5;18725:16;18760:7;18750:2;;18771:18;;:::i;:::-;-1:-1:-1;;18807:20:1;;18700:133;-1:-1:-1;;18700:133:1:o;18838:380::-;18917:1;18913:12;;;;18960;;;18981:2;;19035:4;19027:6;19023:17;19013:27;;18981:2;19088;19080:6;19077:14;19057:18;19054:38;19051:2;;;19134:10;19129:3;19125:20;19122:1;19115:31;19169:4;19166:1;19159:15;19197:4;19194:1;19187:15;19223:127;19284:10;19279:3;19275:20;19272:1;19265:31;19315:4;19312:1;19305:15;19339:4;19336:1;19329:15;19355:131;-1:-1:-1;;;;;19430:31:1;;19420:42;;19410:2;;19476:1;19473;19466:12
Swarm Source
ipfs://528e9138bbe2b9a478157d116f3a29ca3aaf1886d231e484d0413f6e750b14fd
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.