Address Details
contract
0x7C0d7821bbaC74F2eFC6ae095f09d917B032CDDE
- Contract Name
- StarNode
- Creator
- 0x7d6740–c9cfce at 0x8c8d66–6ac13b
- Balance
- 0 CELO ( )
- Locked CELO Balance
- 0.00 CELO
- Voting CELO Balance
- 0.00 CELO
- Pending Unlocked Gold
- 0.00 CELO
- Tokens
-
Fetching tokens...
- Transactions
- 0 Transactions
- Transfers
- 0 Transfers
- Gas Used
- Fetching gas used...
- Last Balance Update
- 8634647
This contract has been verified via Sourcify.
View contract in Sourcify repository
- Contract name:
- StarNode
- Optimization enabled
- true
- Compiler version
- v0.8.10+commit.fc410830
- Optimization runs
- 200
- EVM Version
- london
- Verified at
- 2023-02-06T09:03:13.970646Z
contracts/StarNode.sol
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol"; import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; import "@openzeppelin/contracts-upgradeable/utils/CountersUpgradeable.sol"; import "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol"; import "@openzeppelin/contracts-upgradeable/utils/math/SafeMathUpgradeable.sol"; import "./IStarFarm.sol"; interface IERC20Burnable is IERC20Upgradeable { function burnFrom(address account, uint256 amount) external; } contract StarNode is ContextUpgradeable, OwnableUpgradeable { using CountersUpgradeable for CountersUpgradeable.Counter; CountersUpgradeable.Counter private _nodeIds; using SafeMathUpgradeable for uint256; uint256 selfGain; // self addtional gain 100 = 1% uint256 parentGain; // parent addtional gain 100 = 1% uint256 public unitPrice; uint256 public leastUnit; address public bonusAddr; struct Node { uint256 totalUnit; uint256 burn; uint256 award; uint256 withdraw; address owner; bytes4 code; } IERC20Burnable public starToken; IStarFarm public starFarm; Node[] public nodes; mapping(address => uint256) public nodeInfo; mapping(address => address) public userInviter; mapping(address => address[]) public nodeUsers; event SettleNode(address _user, uint256 _amount); function initialize(address _starToken, address _bonus, uint256 _selfGain, uint256 _parentGain, uint256 _unitPrice, uint256 _leastUnit) public initializer { __StarNode_init(_starToken, _bonus, _selfGain, _parentGain, _unitPrice, _leastUnit); } function __StarNode_init(address _starToken, address _bonus, uint256 _selfGain, uint256 _parentGain, uint256 _unitPrice, uint256 _leastUnit) internal initializer { __Context_init_unchained(); __Ownable_init_unchained(); __StarNode_init_unchained(_starToken, _bonus, _selfGain, _parentGain, _unitPrice, _leastUnit); } function __StarNode_init_unchained(address _starToken, address _bonus, uint256 _selfGain, uint256 _parentGain, uint256 _unitPrice, uint256 _leastUnit) public onlyOwner { starToken = IERC20Burnable(_starToken); bonusAddr = _bonus; _set(_selfGain, _parentGain, _unitPrice, _leastUnit); } function _set(uint256 _selfGain, uint256 _parentGain, uint256 _unitPrice, uint256 _leastUnit) internal { selfGain = _selfGain; parentGain = _parentGain; unitPrice = _unitPrice; leastUnit = _leastUnit; } function nodeGain() external view returns (uint256 _selfGain, uint256 _parentGain) { return (selfGain, parentGain); } function nodeLength() public view returns (uint256) { return nodes.length; } function nodeUserLength(address _user) public view returns (uint256) { return nodeUsers[_user].length; } function depositNode(uint256 _unit) external { address _user = _msgSender(); require(userInviter[_user] == address(0), "User must not node user"); require(_unit > 0, "Uint must greater than 0"); uint256 _amount = _unit.mul(unitPrice); // burn 90% starToken.burnFrom(_user, _amount.mul(90).div(100)); // bonus 10% starToken.transferFrom(_user, bonusAddr, _amount.mul(10).div(100)); if (nodes.length == 0 || nodes[nodeInfo[_user]].owner != _user) { // New node. require(_unit >= leastUnit, "Less than minimum limit"); nodes.push(Node(_unit, _amount, 0, 0, _user, getRndId(_user))); nodeInfo[_user] = nodes.length - 1; } else { Node storage node = nodes[nodeInfo[_user]]; node.totalUnit = node.totalUnit.add(_unit); node.burn = node.burn.add(_amount); } } function regFromNode(address _inviter, bytes32 _inviteCode) external { address _user = _msgSender(); require(userInviter[_user] == address(0), "User already registered"); require(nodeInfo[_user] == 0 && nodes[0].owner != _user, "You are node master"); require(nodeUserLength(_inviter) < nodes[nodeInfo[_inviter]].totalUnit, 'Parent node is full'); require(verifyInvitecode(_user, _inviter, _inviteCode), "Invalid invite code"); nodeUsers[_inviter].push(_user); userInviter[_user] = _inviter; starFarm.regNodeUser(_user); } function settleNode(address _user, uint256 _amount) external onlyStarFarm { address _inviter = userInviter[_user]; if (address(0) != _inviter) { nodes[nodeInfo[_inviter]].award = nodes[nodeInfo[_inviter]].award.add(_amount.mul(parentGain).div(100)); emit SettleNode(_inviter, _amount); } } function withdraw(uint256 _amount) external { // require(nodeInfo[_msgSender()] != 0); require(nodes[nodeInfo[_msgSender()]].owner == _msgSender(), "Invalid inviter"); Node storage node = nodes[nodeInfo[_msgSender()]]; require(node.award > node.withdraw && _amount <= node.award - node.withdraw, "Award amount not enough"); node.withdraw = node.withdraw.add(_amount); starToken.transfer(_msgSender(), _amount); } function getRndId(address _user) internal view returns (bytes4) { bytes4 _randId = bytes4(keccak256(abi.encodePacked(block.coinbase, block.timestamp, _user))); return _randId; } function verifyInvitecode(address _self, address _inviter, bytes32 _inviteCode) internal view returns (bool _verified) { require(nodes[nodeInfo[_inviter]].owner == _inviter, "Invalid inviter"); // require(nodeInfo[_inviter] != 0, "Invalid inviter"); if (_inviteCode == keccak256(abi.encodePacked(nodes[nodeInfo[_inviter]].code, _self))) return true; } function setStarFarm(address _addr) public onlyOwner { require(address(0) != _addr, "Farm contract address cannot be empty"); starFarm = IStarFarm(_addr); } function setParams(uint256 _selfGain, uint256 _parentGain, uint256 _unitPrice, uint256 _leastUnit) public onlyOwner { _set(_selfGain, _parentGain, _unitPrice, _leastUnit); } modifier onlyStarFarm() { require(_msgSender() == address(starFarm), "Only allowed from starfarm contract"); _; } }
/_openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/ContextUpgradeable.sol"; import "../proxy/utils/Initializable.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract OwnableUpgradeable is Initializable, ContextUpgradeable { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ function __Ownable_init() internal initializer { __Context_init_unchained(); __Ownable_init_unchained(); } function __Ownable_init_unchained() internal initializer { _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); } uint256[49] private __gap; }
/_openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (proxy/utils/Initializable.sol) pragma solidity ^0.8.0; /** * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect. * * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}. * * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity. * * [CAUTION] * ==== * Avoid leaving a contract uninitialized. * * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed: * * [.hljs-theme-light.nopadding] * ``` * /// @custom:oz-upgrades-unsafe-allow constructor * constructor() initializer {} * ``` * ==== */ abstract contract Initializable { /** * @dev Indicates that the contract has been initialized. */ bool private _initialized; /** * @dev Indicates that the contract is in the process of being initialized. */ bool private _initializing; /** * @dev Modifier to protect an initializer function from being invoked twice. */ modifier initializer() { require(_initializing || !_initialized, "Initializable: contract is already initialized"); bool isTopLevelCall = !_initializing; if (isTopLevelCall) { _initializing = true; _initialized = true; } _; if (isTopLevelCall) { _initializing = false; } } }
/_openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20Upgradeable { /** * @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); }
/_openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (utils/Context.sol) pragma solidity ^0.8.0; import "../proxy/utils/Initializable.sol"; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract ContextUpgradeable is Initializable { function __Context_init() internal initializer { __Context_init_unchained(); } function __Context_init_unchained() internal initializer { } function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } uint256[50] private __gap; }
/_openzeppelin/contracts-upgradeable/utils/CountersUpgradeable.sol
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library CountersUpgradeable { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } }
/_openzeppelin/contracts-upgradeable/utils/math/SafeMathUpgradeable.sol
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (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 SafeMathUpgradeable { /** * @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; } } }
/contracts/IStarFarm.sol
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface IStarFarm { function regNodeUser(address _user) external; function leaveStakingNFT(uint256 _tokenId) external; }
Contract ABI
[{"type":"event","name":"OwnershipTransferred","inputs":[{"type":"address","name":"previousOwner","internalType":"address","indexed":true},{"type":"address","name":"newOwner","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"SettleNode","inputs":[{"type":"address","name":"_user","internalType":"address","indexed":false},{"type":"uint256","name":"_amount","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"__StarNode_init_unchained","inputs":[{"type":"address","name":"_starToken","internalType":"address"},{"type":"address","name":"_bonus","internalType":"address"},{"type":"uint256","name":"_selfGain","internalType":"uint256"},{"type":"uint256","name":"_parentGain","internalType":"uint256"},{"type":"uint256","name":"_unitPrice","internalType":"uint256"},{"type":"uint256","name":"_leastUnit","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"bonusAddr","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"depositNode","inputs":[{"type":"uint256","name":"_unit","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"initialize","inputs":[{"type":"address","name":"_starToken","internalType":"address"},{"type":"address","name":"_bonus","internalType":"address"},{"type":"uint256","name":"_selfGain","internalType":"uint256"},{"type":"uint256","name":"_parentGain","internalType":"uint256"},{"type":"uint256","name":"_unitPrice","internalType":"uint256"},{"type":"uint256","name":"_leastUnit","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"leastUnit","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"_selfGain","internalType":"uint256"},{"type":"uint256","name":"_parentGain","internalType":"uint256"}],"name":"nodeGain","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"nodeInfo","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"nodeLength","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"nodeUserLength","inputs":[{"type":"address","name":"_user","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"nodeUsers","inputs":[{"type":"address","name":"","internalType":"address"},{"type":"uint256","name":"","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"totalUnit","internalType":"uint256"},{"type":"uint256","name":"burn","internalType":"uint256"},{"type":"uint256","name":"award","internalType":"uint256"},{"type":"uint256","name":"withdraw","internalType":"uint256"},{"type":"address","name":"owner","internalType":"address"},{"type":"bytes4","name":"code","internalType":"bytes4"}],"name":"nodes","inputs":[{"type":"uint256","name":"","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"owner","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"regFromNode","inputs":[{"type":"address","name":"_inviter","internalType":"address"},{"type":"bytes32","name":"_inviteCode","internalType":"bytes32"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"renounceOwnership","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setParams","inputs":[{"type":"uint256","name":"_selfGain","internalType":"uint256"},{"type":"uint256","name":"_parentGain","internalType":"uint256"},{"type":"uint256","name":"_unitPrice","internalType":"uint256"},{"type":"uint256","name":"_leastUnit","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setStarFarm","inputs":[{"type":"address","name":"_addr","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"settleNode","inputs":[{"type":"address","name":"_user","internalType":"address"},{"type":"uint256","name":"_amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IStarFarm"}],"name":"starFarm","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IERC20Burnable"}],"name":"starToken","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"newOwner","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"unitPrice","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"userInviter","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"withdraw","inputs":[{"type":"uint256","name":"_amount","internalType":"uint256"}]}]
Contract Creation Code
0x608060405234801561001057600080fd5b50611686806100206000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c80638da5cb5b116100c3578063bc15c2871161007c578063bc15c28714610320578063cabf3e5114610329578063e73faa2d14610331578063f2fde38b1461033a578063fc1d7a651461034d578063fdaa621c1461037657600080fd5b80638da5cb5b1461029a578063911098d5146102ab57806391375f59146102d4578063986f33e0146102e7578063ae3c189d146102fa578063b7ca51e81461030d57600080fd5b80635915c05d116101155780635915c05d1461022b578063634f94191461023e578063715018a6146102515780637ece45e814610259578063858ce8f91461026c57806386489ba91461028757600080fd5b806313eaabb8146101525780631c53c2801461018257806323c2e2bc146101d557806327bd26b1146102035780632e1a7d4d14610218575b600080fd5b606a54610165906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61019561019036600461140e565b610389565b6040805196875260208701959095529385019290925260608401526001600160a01b031660808301526001600160e01b03191660a082015260c001610179565b6101f56101e3366004611443565b606e6020526000908152604090205481565b604051908152602001610179565b61021661021136600461145e565b6103df565b005b61021661022636600461140e565b61068b565b61016561023936600461145e565b610853565b61021661024c36600461140e565b61088b565b610216610cdb565b610216610267366004611488565b610d11565b60665460675460408051928352602083019190915201610179565b6102166102953660046114ba565b610d4f565b6033546001600160a01b0316610165565b6101656102b9366004611443565b606f602052600090815260409020546001600160a01b031681565b6102166102e23660046114ba565b610dce565b6102166102f536600461145e565b610e4b565b610216610308366004611443565b610fd2565b606b54610165906001600160a01b031681565b6101f560695481565b606d546101f5565b6101f560685481565b610216610348366004611443565b611082565b6101f561035b366004611443565b6001600160a01b031660009081526070602052604090205490565b606c54610165906001600160a01b031681565b606d818154811061039957600080fd5b600091825260209091206005909102018054600182015460028301546003840154600490940154929450909290916001600160a01b03811690600160a01b900460e01b86565b336000818152606f60205260409020546001600160a01b03161561044a5760405162461bcd60e51b815260206004820152601760248201527f5573657220616c7265616479207265676973746572656400000000000000000060448201526064015b60405180910390fd5b6001600160a01b0381166000908152606e60205260409020541580156104a95750806001600160a01b0316606d6000815481106104895761048961150f565b60009182526020909120600460059092020101546001600160a01b031614155b6104eb5760405162461bcd60e51b81526020600482015260136024820152722cb7ba9030b932903737b2329036b0b9ba32b960691b6044820152606401610441565b6001600160a01b0383166000908152606e6020526040902054606d805490919081106105195761051961150f565b90600052602060002090600502016000015461054a846001600160a01b031660009081526070602052604090205490565b1061058d5760405162461bcd60e51b815260206004820152601360248201527214185c995b9d081b9bd919481a5cc8199d5b1b606a1b6044820152606401610441565b61059881848461111d565b6105da5760405162461bcd60e51b8152602060048201526013602482015272496e76616c696420696e7669746520636f646560681b6044820152606401610441565b6001600160a01b03838116600081815260706020908152604080832080546001810182559084528284200180548787166001600160a01b03199182168117909255818552606f9093529281902080549092169093179055606c549151632ad59ab760e11b815260048101919091529116906355ab356e90602401600060405180830381600087803b15801561066e57600080fd5b505af1158015610682573d6000803e3d6000fd5b50505050505050565b336000818152606e6020526040902054606d805490919081106106b0576106b061150f565b60009182526020909120600460059092020101546001600160a01b03161461070c5760405162461bcd60e51b815260206004820152600f60248201526e24b73b30b634b21034b73b34ba32b960891b6044820152606401610441565b336000908152606e6020526040812054606d805490919081106107315761073161150f565b906000526020600020906005020190508060030154816002015411801561076b575080600301548160020154610767919061153b565b8211155b6107b75760405162461bcd60e51b815260206004820152601760248201527f417761726420616d6f756e74206e6f7420656e6f7567680000000000000000006044820152606401610441565b60038101546107c69083611258565b6003820155606b546001600160a01b031663a9059cbb336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018590526044016020604051808303816000875af115801561082a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084e9190611552565b505050565b6070602052816000526040600020818154811061086f57600080fd5b6000918252602090912001546001600160a01b03169150829050565b336000818152606f60205260409020546001600160a01b0316156108f15760405162461bcd60e51b815260206004820152601760248201527f55736572206d757374206e6f74206e6f646520757365720000000000000000006044820152606401610441565b600082116109415760405162461bcd60e51b815260206004820152601860248201527f55696e74206d7573742067726561746572207468616e203000000000000000006044820152606401610441565b60006109586068548461126490919063ffffffff16565b606b549091506001600160a01b03166379cc679083610983606461097d86605a611264565b90611270565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156109c957600080fd5b505af11580156109dd573d6000803e3d6000fd5b5050606b54606a546001600160a01b0391821693506323b872dd9250859116610a0c606461097d87600a611264565b6040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015260448201526064016020604051808303816000875af1158015610a60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a849190611552565b50606d541580610add57506001600160a01b0382166000818152606e6020526040902054606d80549091908110610abd57610abd61150f565b60009182526020909120600460059092020101546001600160a01b031614155b15610c6a57606954831015610b345760405162461bcd60e51b815260206004820152601760248201527f4c657373207468616e206d696e696d756d206c696d69740000000000000000006044820152606401610441565b606d6040518060c001604052808581526020018381526020016000815260200160008152602001846001600160a01b03168152602001610bbc856040805141606090811b6bffffffffffffffffffffffff199081166020808501919091524260348501529490911b166054820152815160488183030181526068909101909152805191012090565b6001600160e01b0319169052815460018181018455600093845260209384902083516005909302019182559282015181840155604082015160028201556060820151600382015560808201516004909101805460a09093015160e01c600160a01b026001600160c01b03199093166001600160a01b0390921691909117919091179055606d54610c4c919061153b565b6001600160a01b0383166000908152606e6020526040902055505050565b6001600160a01b0382166000908152606e6020526040812054606d80549091908110610c9857610c9861150f565b90600052602060002090600502019050610cbf84826000015461125890919063ffffffff16565b81556001810154610cd09083611258565b600190910155505050565b6033546001600160a01b03163314610d055760405162461bcd60e51b815260040161044190611574565b610d0f600061127c565b565b6033546001600160a01b03163314610d3b5760405162461bcd60e51b815260040161044190611574565b606693909355606791909155606855606955565b600054610100900460ff1680610d68575060005460ff16155b610d845760405162461bcd60e51b8152600401610441906115a9565b600054610100900460ff16158015610da6576000805461ffff19166101011790555b610db48787878787876112ce565b8015610682576000805461ff001916905550505050505050565b6033546001600160a01b03163314610df85760405162461bcd60e51b815260040161044190611574565b606b80546001600160a01b038089166001600160a01b031992831617909255606a805492881692909116919091179055610e4384848484606693909355606791909155606855606955565b505050505050565b606c546001600160a01b0316336001600160a01b031614610eba5760405162461bcd60e51b815260206004820152602360248201527f4f6e6c7920616c6c6f7765642066726f6d20737461726661726d20636f6e74726044820152621858dd60ea1b6064820152608401610441565b6001600160a01b038083166000908152606f602052604090205416801561084e57610f46610ef8606461097d6067548661126490919063ffffffff16565b6001600160a01b0383166000908152606e6020526040902054606d80549091908110610f2657610f2661150f565b90600052602060002090600502016002015461125890919063ffffffff16565b6001600160a01b0382166000908152606e6020526040902054606d80549091908110610f7457610f7461150f565b600091825260209182902060026005909202010191909155604080516001600160a01b03841681529182018490527fd304fddcfb4c823513457b3a75ae8e137f506c2a81f5716fab3b268c7ed6c008910160405180910390a1505050565b6033546001600160a01b03163314610ffc5760405162461bcd60e51b815260040161044190611574565b6001600160a01b0381166110605760405162461bcd60e51b815260206004820152602560248201527f4661726d20636f6e747261637420616464726573732063616e6e6f7420626520604482015264656d70747960d81b6064820152608401610441565b606c80546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b031633146110ac5760405162461bcd60e51b815260040161044190611574565b6001600160a01b0381166111115760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610441565b61111a8161127c565b50565b6001600160a01b0382166000818152606e6020526040812054606d8054929392909190811061114e5761114e61150f565b60009182526020909120600460059092020101546001600160a01b0316146111aa5760405162461bcd60e51b815260206004820152600f60248201526e24b73b30b634b21034b73b34ba32b960891b6044820152606401610441565b6001600160a01b0383166000908152606e6020526040902054606d805490919081106111d8576111d861150f565b906000526020600020906005020160040160149054906101000a900460e01b846040516020016112309291906001600160e01b031992909216825260601b6bffffffffffffffffffffffff1916600482015260180190565b60405160208183030381529060405280519060200120821415611251575060015b9392505050565b600061125182846115f7565b6000611251828461160f565b6000611251828461162e565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16806112e7575060005460ff16155b6113035760405162461bcd60e51b8152600401610441906115a9565b600054610100900460ff16158015611325576000805461ffff19166101011790555b61132d611343565b6113356113ae565b610db4878787878787610dce565b600054610100900460ff168061135c575060005460ff16155b6113785760405162461bcd60e51b8152600401610441906115a9565b600054610100900460ff1615801561139a576000805461ffff19166101011790555b801561111a576000805461ff001916905550565b600054610100900460ff16806113c7575060005460ff16155b6113e35760405162461bcd60e51b8152600401610441906115a9565b600054610100900460ff16158015611405576000805461ffff19166101011790555b61139a3361127c565b60006020828403121561142057600080fd5b5035919050565b80356001600160a01b038116811461143e57600080fd5b919050565b60006020828403121561145557600080fd5b61125182611427565b6000806040838503121561147157600080fd5b61147a83611427565b946020939093013593505050565b6000806000806080858703121561149e57600080fd5b5050823594602084013594506040840135936060013592509050565b60008060008060008060c087890312156114d357600080fd5b6114dc87611427565b95506114ea60208801611427565b95989597505050506040840135936060810135936080820135935060a0909101359150565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008282101561154d5761154d611525565b500390565b60006020828403121561156457600080fd5b8151801515811461125157600080fd5b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6000821982111561160a5761160a611525565b500190565b600081600019048311821515161561162957611629611525565b500290565b60008261164b57634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220ef1b2fe5f6381317a32663e0ab8af1a15d5f036aef14a13025313a6894b1838e64736f6c634300080a0033
Deployed ByteCode
0x608060405234801561001057600080fd5b506004361061014d5760003560e01c80638da5cb5b116100c3578063bc15c2871161007c578063bc15c28714610320578063cabf3e5114610329578063e73faa2d14610331578063f2fde38b1461033a578063fc1d7a651461034d578063fdaa621c1461037657600080fd5b80638da5cb5b1461029a578063911098d5146102ab57806391375f59146102d4578063986f33e0146102e7578063ae3c189d146102fa578063b7ca51e81461030d57600080fd5b80635915c05d116101155780635915c05d1461022b578063634f94191461023e578063715018a6146102515780637ece45e814610259578063858ce8f91461026c57806386489ba91461028757600080fd5b806313eaabb8146101525780631c53c2801461018257806323c2e2bc146101d557806327bd26b1146102035780632e1a7d4d14610218575b600080fd5b606a54610165906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61019561019036600461140e565b610389565b6040805196875260208701959095529385019290925260608401526001600160a01b031660808301526001600160e01b03191660a082015260c001610179565b6101f56101e3366004611443565b606e6020526000908152604090205481565b604051908152602001610179565b61021661021136600461145e565b6103df565b005b61021661022636600461140e565b61068b565b61016561023936600461145e565b610853565b61021661024c36600461140e565b61088b565b610216610cdb565b610216610267366004611488565b610d11565b60665460675460408051928352602083019190915201610179565b6102166102953660046114ba565b610d4f565b6033546001600160a01b0316610165565b6101656102b9366004611443565b606f602052600090815260409020546001600160a01b031681565b6102166102e23660046114ba565b610dce565b6102166102f536600461145e565b610e4b565b610216610308366004611443565b610fd2565b606b54610165906001600160a01b031681565b6101f560695481565b606d546101f5565b6101f560685481565b610216610348366004611443565b611082565b6101f561035b366004611443565b6001600160a01b031660009081526070602052604090205490565b606c54610165906001600160a01b031681565b606d818154811061039957600080fd5b600091825260209091206005909102018054600182015460028301546003840154600490940154929450909290916001600160a01b03811690600160a01b900460e01b86565b336000818152606f60205260409020546001600160a01b03161561044a5760405162461bcd60e51b815260206004820152601760248201527f5573657220616c7265616479207265676973746572656400000000000000000060448201526064015b60405180910390fd5b6001600160a01b0381166000908152606e60205260409020541580156104a95750806001600160a01b0316606d6000815481106104895761048961150f565b60009182526020909120600460059092020101546001600160a01b031614155b6104eb5760405162461bcd60e51b81526020600482015260136024820152722cb7ba9030b932903737b2329036b0b9ba32b960691b6044820152606401610441565b6001600160a01b0383166000908152606e6020526040902054606d805490919081106105195761051961150f565b90600052602060002090600502016000015461054a846001600160a01b031660009081526070602052604090205490565b1061058d5760405162461bcd60e51b815260206004820152601360248201527214185c995b9d081b9bd919481a5cc8199d5b1b606a1b6044820152606401610441565b61059881848461111d565b6105da5760405162461bcd60e51b8152602060048201526013602482015272496e76616c696420696e7669746520636f646560681b6044820152606401610441565b6001600160a01b03838116600081815260706020908152604080832080546001810182559084528284200180548787166001600160a01b03199182168117909255818552606f9093529281902080549092169093179055606c549151632ad59ab760e11b815260048101919091529116906355ab356e90602401600060405180830381600087803b15801561066e57600080fd5b505af1158015610682573d6000803e3d6000fd5b50505050505050565b336000818152606e6020526040902054606d805490919081106106b0576106b061150f565b60009182526020909120600460059092020101546001600160a01b03161461070c5760405162461bcd60e51b815260206004820152600f60248201526e24b73b30b634b21034b73b34ba32b960891b6044820152606401610441565b336000908152606e6020526040812054606d805490919081106107315761073161150f565b906000526020600020906005020190508060030154816002015411801561076b575080600301548160020154610767919061153b565b8211155b6107b75760405162461bcd60e51b815260206004820152601760248201527f417761726420616d6f756e74206e6f7420656e6f7567680000000000000000006044820152606401610441565b60038101546107c69083611258565b6003820155606b546001600160a01b031663a9059cbb336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018590526044016020604051808303816000875af115801561082a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084e9190611552565b505050565b6070602052816000526040600020818154811061086f57600080fd5b6000918252602090912001546001600160a01b03169150829050565b336000818152606f60205260409020546001600160a01b0316156108f15760405162461bcd60e51b815260206004820152601760248201527f55736572206d757374206e6f74206e6f646520757365720000000000000000006044820152606401610441565b600082116109415760405162461bcd60e51b815260206004820152601860248201527f55696e74206d7573742067726561746572207468616e203000000000000000006044820152606401610441565b60006109586068548461126490919063ffffffff16565b606b549091506001600160a01b03166379cc679083610983606461097d86605a611264565b90611270565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156109c957600080fd5b505af11580156109dd573d6000803e3d6000fd5b5050606b54606a546001600160a01b0391821693506323b872dd9250859116610a0c606461097d87600a611264565b6040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015260448201526064016020604051808303816000875af1158015610a60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a849190611552565b50606d541580610add57506001600160a01b0382166000818152606e6020526040902054606d80549091908110610abd57610abd61150f565b60009182526020909120600460059092020101546001600160a01b031614155b15610c6a57606954831015610b345760405162461bcd60e51b815260206004820152601760248201527f4c657373207468616e206d696e696d756d206c696d69740000000000000000006044820152606401610441565b606d6040518060c001604052808581526020018381526020016000815260200160008152602001846001600160a01b03168152602001610bbc856040805141606090811b6bffffffffffffffffffffffff199081166020808501919091524260348501529490911b166054820152815160488183030181526068909101909152805191012090565b6001600160e01b0319169052815460018181018455600093845260209384902083516005909302019182559282015181840155604082015160028201556060820151600382015560808201516004909101805460a09093015160e01c600160a01b026001600160c01b03199093166001600160a01b0390921691909117919091179055606d54610c4c919061153b565b6001600160a01b0383166000908152606e6020526040902055505050565b6001600160a01b0382166000908152606e6020526040812054606d80549091908110610c9857610c9861150f565b90600052602060002090600502019050610cbf84826000015461125890919063ffffffff16565b81556001810154610cd09083611258565b600190910155505050565b6033546001600160a01b03163314610d055760405162461bcd60e51b815260040161044190611574565b610d0f600061127c565b565b6033546001600160a01b03163314610d3b5760405162461bcd60e51b815260040161044190611574565b606693909355606791909155606855606955565b600054610100900460ff1680610d68575060005460ff16155b610d845760405162461bcd60e51b8152600401610441906115a9565b600054610100900460ff16158015610da6576000805461ffff19166101011790555b610db48787878787876112ce565b8015610682576000805461ff001916905550505050505050565b6033546001600160a01b03163314610df85760405162461bcd60e51b815260040161044190611574565b606b80546001600160a01b038089166001600160a01b031992831617909255606a805492881692909116919091179055610e4384848484606693909355606791909155606855606955565b505050505050565b606c546001600160a01b0316336001600160a01b031614610eba5760405162461bcd60e51b815260206004820152602360248201527f4f6e6c7920616c6c6f7765642066726f6d20737461726661726d20636f6e74726044820152621858dd60ea1b6064820152608401610441565b6001600160a01b038083166000908152606f602052604090205416801561084e57610f46610ef8606461097d6067548661126490919063ffffffff16565b6001600160a01b0383166000908152606e6020526040902054606d80549091908110610f2657610f2661150f565b90600052602060002090600502016002015461125890919063ffffffff16565b6001600160a01b0382166000908152606e6020526040902054606d80549091908110610f7457610f7461150f565b600091825260209182902060026005909202010191909155604080516001600160a01b03841681529182018490527fd304fddcfb4c823513457b3a75ae8e137f506c2a81f5716fab3b268c7ed6c008910160405180910390a1505050565b6033546001600160a01b03163314610ffc5760405162461bcd60e51b815260040161044190611574565b6001600160a01b0381166110605760405162461bcd60e51b815260206004820152602560248201527f4661726d20636f6e747261637420616464726573732063616e6e6f7420626520604482015264656d70747960d81b6064820152608401610441565b606c80546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b031633146110ac5760405162461bcd60e51b815260040161044190611574565b6001600160a01b0381166111115760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610441565b61111a8161127c565b50565b6001600160a01b0382166000818152606e6020526040812054606d8054929392909190811061114e5761114e61150f565b60009182526020909120600460059092020101546001600160a01b0316146111aa5760405162461bcd60e51b815260206004820152600f60248201526e24b73b30b634b21034b73b34ba32b960891b6044820152606401610441565b6001600160a01b0383166000908152606e6020526040902054606d805490919081106111d8576111d861150f565b906000526020600020906005020160040160149054906101000a900460e01b846040516020016112309291906001600160e01b031992909216825260601b6bffffffffffffffffffffffff1916600482015260180190565b60405160208183030381529060405280519060200120821415611251575060015b9392505050565b600061125182846115f7565b6000611251828461160f565b6000611251828461162e565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16806112e7575060005460ff16155b6113035760405162461bcd60e51b8152600401610441906115a9565b600054610100900460ff16158015611325576000805461ffff19166101011790555b61132d611343565b6113356113ae565b610db4878787878787610dce565b600054610100900460ff168061135c575060005460ff16155b6113785760405162461bcd60e51b8152600401610441906115a9565b600054610100900460ff1615801561139a576000805461ffff19166101011790555b801561111a576000805461ff001916905550565b600054610100900460ff16806113c7575060005460ff16155b6113e35760405162461bcd60e51b8152600401610441906115a9565b600054610100900460ff16158015611405576000805461ffff19166101011790555b61139a3361127c565b60006020828403121561142057600080fd5b5035919050565b80356001600160a01b038116811461143e57600080fd5b919050565b60006020828403121561145557600080fd5b61125182611427565b6000806040838503121561147157600080fd5b61147a83611427565b946020939093013593505050565b6000806000806080858703121561149e57600080fd5b5050823594602084013594506040840135936060013592509050565b60008060008060008060c087890312156114d357600080fd5b6114dc87611427565b95506114ea60208801611427565b95989597505050506040840135936060810135936080820135935060a0909101359150565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008282101561154d5761154d611525565b500390565b60006020828403121561156457600080fd5b8151801515811461125157600080fd5b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6000821982111561160a5761160a611525565b500190565b600081600019048311821515161561162957611629611525565b500290565b60008261164b57634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220ef1b2fe5f6381317a32663e0ab8af1a15d5f036aef14a13025313a6894b1838e64736f6c634300080a0033