Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 621 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Dego Contrac... | 19798604 | 246 days ago | IN | 0 ETH | 0.0001566 | ||||
Set Refer Reward... | 19796277 | 246 days ago | IN | 0 ETH | 0.0001698 | ||||
Set Governance | 19796223 | 246 days ago | IN | 0 ETH | 0.00033784 | ||||
Seize Eth | 19401254 | 301 days ago | IN | 0 ETH | 0.00158049 | ||||
Register Name X ... | 19396468 | 302 days ago | IN | 0.3 ETH | 0.01074538 | ||||
Seize Eth | 16785852 | 669 days ago | IN | 0 ETH | 0.0023496 | ||||
Claim | 14198972 | 1057 days ago | IN | 0 ETH | 0.00817634 | ||||
Claim | 13054944 | 1235 days ago | IN | 0 ETH | 0.00228857 | ||||
Claim | 12958574 | 1250 days ago | IN | 0 ETH | 0.00240771 | ||||
Claim | 12625717 | 1302 days ago | IN | 0 ETH | 0.00082708 | ||||
Claim | 12550513 | 1314 days ago | IN | 0 ETH | 0.00105538 | ||||
Claim | 12550513 | 1314 days ago | IN | 0 ETH | 0.00327342 | ||||
Claim | 12536320 | 1316 days ago | IN | 0 ETH | 0.00199616 | ||||
Claim | 12536305 | 1316 days ago | IN | 0 ETH | 0.00199616 | ||||
Register Name X ... | 12219189 | 1365 days ago | IN | 0.3 ETH | 0.01433764 | ||||
Claim | 12193899 | 1369 days ago | IN | 0 ETH | 0.01931673 | ||||
Claim | 12147086 | 1376 days ago | IN | 0 ETH | 0.01104343 | ||||
Claim | 12048463 | 1391 days ago | IN | 0 ETH | 0.01232755 | ||||
Register Name X ... | 12031414 | 1394 days ago | IN | 0.3 ETH | 0.041327 | ||||
Claim | 12010852 | 1397 days ago | IN | 0 ETH | 0.0113687 | ||||
Claim | 12010577 | 1397 days ago | IN | 0 ETH | 0.00900441 | ||||
Claim | 12010369 | 1397 days ago | IN | 0 ETH | 0.01187175 | ||||
Claim | 12010276 | 1397 days ago | IN | 0 ETH | 0.01066444 | ||||
Claim | 12010233 | 1397 days ago | IN | 0 ETH | 0.00845107 | ||||
Claim | 12009973 | 1397 days ago | IN | 0 ETH | 0.00925593 |
Loading...
Loading
Contract Name:
PlayerBook
Compiler Version
v0.5.5+commit.47a71e8f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-08-29 */ /*** * ██████╗ ███████╗ ██████╗ ██████╗ * ██╔══██╗██╔════╝██╔════╝ ██╔═══██╗ * ██║ ██║█████╗ ██║ ███╗██║ ██║ * ██║ ██║██╔══╝ ██║ ██║██║ ██║ * ██████╔╝███████╗╚██████╔╝╚██████╔╝ * ╚═════╝ ╚══════╝ ╚═════╝ ╚═════╝ * * https://dego.finance * MIT License * =========== * * Copyright (c) 2020 dego * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE */ // File: @openzeppelin/contracts/math/SafeMath.sol pragma solidity ^0.5.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 SafeMath { /** * @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) { uint256 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(uint256 a, uint256 b) internal pure returns (uint256) { 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. * * _Available since v2.4.0._ */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 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(uint256 a, uint256 b) internal pure returns (uint256) { // 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; } uint256 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(uint256 a, uint256 b) internal pure returns (uint256) { 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. * * _Available since v2.4.0._ */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint256 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(uint256 a, uint256 b) internal pure returns (uint256) { 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. * * _Available since v2.4.0._ */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } // File: @openzeppelin/contracts/GSN/Context.sol pragma solidity ^0.5.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 GSN 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. */ contract Context { // Empty internal constructor, to prevent people from mistakenly deploying // an instance of this contract, which should be used via inheritance. constructor () internal { } // solhint-disable-previous-line no-empty-blocks function _msgSender() internal view returns (address payable) { return msg.sender; } function _msgData() internal view returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File: @openzeppelin/contracts/ownership/Ownable.sol pragma solidity ^0.5.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. * * 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. */ 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 () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(isOwner(), "Ownable: caller is not the owner"); _; } /** * @dev Returns true if the caller is the current owner. */ function isOwner() public view returns (bool) { return _msgSender() == _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 onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public onlyOwner { _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). */ function _transferOwnership(address newOwner) internal { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File: contracts/library/NameFilter.sol pragma solidity ^0.5.0; library NameFilter { /** * @dev filters name strings * -converts uppercase to lower case. * -makes sure it does not start/end with a space * -makes sure it does not contain multiple spaces in a row * -cannot be only numbers * -cannot start with 0x * -restricts characters to A-Z, a-z, 0-9, and space. * @return reprocessed string in bytes32 format */ function nameFilter(string memory _input) internal pure returns(bytes32) { bytes memory _temp = bytes(_input); uint256 _length = _temp.length; //sorry limited to 32 characters require (_length <= 32 && _length > 0, "string must be between 1 and 32 characters"); // make sure first two characters are not 0x if (_temp[0] == 0x30) { require(_temp[1] != 0x78, "string cannot start with 0x"); require(_temp[1] != 0x58, "string cannot start with 0X"); } // create a bool to track if we have a non number character bool _hasNonNumber; // convert & check for (uint256 i = 0; i < _length; i++) { // if its uppercase A-Z if (_temp[i] > 0x40 && _temp[i] < 0x5b) { // convert to lower case a-z _temp[i] = byte(uint8(_temp[i]) + 32); // we have a non number if (_hasNonNumber == false) _hasNonNumber = true; } else { require ( // OR lowercase a-z (_temp[i] > 0x60 && _temp[i] < 0x7b) || // or 0-9 (_temp[i] > 0x2f && _temp[i] < 0x3a), "string contains invalid characters" ); // see if we have a character other than a number if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39)) _hasNonNumber = true; } } require(_hasNonNumber == true, "string cannot be only numbers"); bytes32 _ret; assembly { _ret := mload(add(_temp, 32)) } return (_ret); } } // File: contracts/interface/IERC20.sol pragma solidity ^0.5.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. Does not include * the optional functions; to access them see {ERC20Detailed}. */ 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); function mint(address account, uint amount) external; /** * @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/utils/Address.sol pragma solidity ^0.5.5; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Converts an `address` into `address payable`. Note that this is * simply a type cast: the actual underlying value is not changed. * * _Available since v2.4.0._ */ function toPayable(address account) internal pure returns (address payable) { return address(uint160(account)); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. * * _Available since v2.4.0._ */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-call-value (bool success, ) = recipient.call.value(amount)(""); require(success, "Address: unable to send value, recipient may have reverted"); } } // File: contracts/library/SafeERC20.sol pragma solidity ^0.5.0; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. // A Solidity high level call has three parts: // 1. The target address is checked to verify it contains contract code // 2. The call itself is made, and success asserted // 3. The return value is decoded, which in turn checks the size of the returned data. // solhint-disable-next-line max-line-length require(address(token).isContract(), "SafeERC20: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = address(token).call(data); require(success, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // File: contracts/library/Governance.sol pragma solidity ^0.5.0; contract Governance { address public _governance; constructor() public { _governance = tx.origin; } event GovernanceTransferred(address indexed previousOwner, address indexed newOwner); modifier onlyGovernance { require(msg.sender == _governance, "not governance"); _; } function setGovernance(address governance) public onlyGovernance { require(governance != address(0), "new governance the zero address"); emit GovernanceTransferred(_governance, governance); _governance = governance; } } // File: contracts/interface/IPlayerBook.sol pragma solidity ^0.5.0; interface IPlayerBook { function settleReward( address from,uint256 amount ) external returns (uint256); function bindRefer( address from,string calldata affCode ) external returns (bool); function hasRefer(address from) external returns(bool); } // File: contracts/referral/PlayerBook.sol pragma solidity ^0.5.0; contract PlayerBook is Governance, IPlayerBook { using NameFilter for string; using SafeMath for uint256; using SafeERC20 for IERC20; // register pools mapping (address => bool) public _pools; // (addr => pID) returns player id by address mapping (address => uint256) public _pIDxAddr; // (name => pID) returns player id by name mapping (bytes32 => uint256) public _pIDxName; // (pID => data) player data mapping (uint256 => Player) public _plyr; // (pID => name => bool) list of names a player owns. (used so you can change your display name amoungst any name you own) mapping (uint256 => mapping (bytes32 => bool)) public _plyrNames; // the of refrerrals uint256 public _totalReferReward; // total number of players uint256 public _pID; // total register name count uint256 public _totalRegisterCount = 0; // the direct refer's reward rate uint256 public _refer1RewardRate = 700; //7% // the second direct refer's reward rate uint256 public _refer2RewardRate = 300; //3% // base rate uint256 public _baseRate = 10000; // base price to register a name uint256 public _registrationBaseFee = 100 finney; // register fee count step uint256 public _registrationStep = 100; // add base price for one step uint256 public _stepFee = 100 finney; bytes32 public _defaulRefer ="dego"; address payable public _teamWallet = 0x3D0a845C5ef9741De999FC068f70E2048A489F2b; IERC20 public _dego = IERC20(0x0); struct Player { address addr; bytes32 name; uint8 nameCount; uint256 laff; uint256 amount; uint256 rreward; uint256 allReward; uint256 lv1Count; uint256 lv2Count; } event eveClaim(uint256 pID, address addr, uint256 reward, uint256 balance ); event eveBindRefer(uint256 pID, address addr, bytes32 name, uint256 affID, address affAddr, bytes32 affName); event eveDefaultPlayer(uint256 pID, address addr, bytes32 name); event eveNewName(uint256 pID, address addr, bytes32 name, uint256 affID, address affAddr, bytes32 affName, uint256 balance ); event eveSettle(uint256 pID, uint256 affID, uint256 aff_affID, uint256 affReward, uint256 aff_affReward, uint256 amount); event eveAddPool(address addr); event eveRemovePool(address addr); constructor() public { _pID = 0; _totalReferReward = 0; addDefaultPlayer(_teamWallet,_defaulRefer); } /** * check address */ modifier validAddress( address addr ) { require(addr != address(0x0)); _; } /** * check pool */ modifier isRegisteredPool(){ require(_pools[msg.sender],"invalid pool address!"); _; } /** * contract dego balances */ function balances() public view returns(uint256) { return (_dego.balanceOf(address(this))); } // only function for creating additional rewards from dust function seize(IERC20 asset) external returns (uint256 balance) { require(address(_dego) != address(asset), "forbbiden dego"); balance = asset.balanceOf(address(this)); asset.safeTransfer(_teamWallet, balance); } // get register fee function seizeEth() external { uint256 _currentBalance = address(this).balance; _teamWallet.transfer(_currentBalance); } /** * revert invalid transfer action */ function() external payable { revert(); } /** * registe a pool */ function addPool(address poolAddr) onlyGovernance public { require( !_pools[poolAddr], "derp, that pool already been registered"); _pools[poolAddr] = true; emit eveAddPool(poolAddr); } /** * remove a pool */ function removePool(address poolAddr) onlyGovernance public { require( _pools[poolAddr], "derp, that pool must be registered"); _pools[poolAddr] = false; emit eveRemovePool(poolAddr); } /** * resolve the refer's reward from a player */ function settleReward(address from, uint256 amount) isRegisteredPool() validAddress(from) external returns (uint256) { // set up our tx event data and determine if player is new or not _determinePID(from); uint256 pID = _pIDxAddr[from]; uint256 affID = _plyr[pID].laff; if(affID <= 0 ){ affID = _pIDxName[_defaulRefer]; _plyr[pID].laff = affID; } if(amount <= 0){ return 0; } uint256 fee = 0; // father uint256 affReward = (amount.mul(_refer1RewardRate)).div(_baseRate); _plyr[affID].rreward = _plyr[affID].rreward.add(affReward); _totalReferReward = _totalReferReward.add(affReward); fee = fee.add(affReward); // grandfather uint256 aff_affID = _plyr[affID].laff; uint256 aff_affReward = amount.mul(_refer2RewardRate).div(_baseRate); if(aff_affID <= 0){ aff_affID = _pIDxName[_defaulRefer]; } _plyr[aff_affID].rreward = _plyr[aff_affID].rreward.add(aff_affReward); _totalReferReward= _totalReferReward.add(aff_affReward); _plyr[pID].amount = _plyr[pID].amount.add( amount); fee = fee.add(aff_affReward); emit eveSettle( pID,affID,aff_affID,affReward,aff_affReward,amount); return fee; } /** * claim all of the refer reward. */ function claim() public { address addr = msg.sender; uint256 pid = _pIDxAddr[addr]; uint256 reward = _plyr[pid].rreward; require(reward > 0,"only have reward"); //reset _plyr[pid].allReward = _plyr[pid].allReward.add(reward); _plyr[pid].rreward = 0; //get reward _dego.safeTransfer(addr, reward); // fire event emit eveClaim(_pIDxAddr[addr], addr, reward, balances()); } /** * check name string */ function checkIfNameValid(string memory nameStr) public view returns(bool) { bytes32 name = nameStr.nameFilter(); if (_pIDxName[name] == 0) return (true); else return (false); } /** * @dev add a default player */ function addDefaultPlayer(address addr, bytes32 name) private { _pID++; _plyr[_pID].addr = addr; _plyr[_pID].name = name; _plyr[_pID].nameCount = 1; _pIDxAddr[addr] = _pID; _pIDxName[name] = _pID; _plyrNames[_pID][name] = true; //fire event emit eveDefaultPlayer(_pID,addr,name); } /** * @dev set refer reward rate */ function setReferRewardRate(uint256 refer1Rate, uint256 refer2Rate ) public onlyGovernance { _refer1RewardRate = refer1Rate; _refer2RewardRate = refer2Rate; } /** * @dev set registration step count */ function setRegistrationStep(uint256 registrationStep) public onlyGovernance { _registrationStep = registrationStep; } /** * @dev set dego contract address */ function setDegoContract(address dego) public onlyGovernance{ _dego = IERC20(dego); } /** * @dev registers a name. UI will always display the last name you registered. * but you will still own all previously registered names to use as affiliate * links. * - must pay a registration fee. * - name must be unique * - names will be converted to lowercase * - cannot be only numbers * - cannot start with 0x * - name must be at least 1 char * - max length of 32 characters long * - allowed characters: a-z, 0-9 * -functionhash- 0x921dec21 (using ID for affiliate) * -functionhash- 0x3ddd4698 (using address for affiliate) * -functionhash- 0x685ffd83 (using name for affiliate) * @param nameString players desired name * @param affCode affiliate name of who refered you * (this might cost a lot of gas) */ function registerNameXName(string memory nameString, string memory affCode) public payable { // make sure name fees paid require (msg.value >= this.getRegistrationFee(), "umm..... you have to pay the name fee"); // filter name + condition checks bytes32 name = NameFilter.nameFilter(nameString); // if names already has been used require(_pIDxName[name] == 0, "sorry that names already taken"); // set up address address addr = msg.sender; // set up our tx event data and determine if player is new or not _determinePID(addr); // fetch player id uint256 pID = _pIDxAddr[addr]; // if names already has been used require(_plyrNames[pID][name] == false, "sorry that names already taken"); // add name to player profile, registry, and name book _plyrNames[pID][name] = true; _pIDxName[name] = pID; _plyr[pID].name = name; _plyr[pID].nameCount++; _totalRegisterCount++; //try bind a refer if(_plyr[pID].laff == 0){ bytes memory tempCode = bytes(affCode); bytes32 affName = 0x0; if (tempCode.length >= 0) { assembly { affName := mload(add(tempCode, 32)) } } _bindRefer(addr,affName); } uint256 affID = _plyr[pID].laff; // fire event emit eveNewName(pID, addr, name, affID, _plyr[affID].addr, _plyr[affID].name, _registrationBaseFee ); } /** * @dev bind a refer,if affcode invalid, use default refer */ function bindRefer( address from, string calldata affCode ) isRegisteredPool() external returns (bool) { bytes memory tempCode = bytes(affCode); bytes32 affName = 0x0; if (tempCode.length >= 0) { assembly { affName := mload(add(tempCode, 32)) } } return _bindRefer(from, affName); } /** * @dev bind a refer,if affcode invalid, use default refer */ function _bindRefer( address from, bytes32 name ) validAddress(msg.sender) validAddress(from) private returns (bool) { // set up our tx event data and determine if player is new or not _determinePID(from); // fetch player id uint256 pID = _pIDxAddr[from]; if( _plyr[pID].laff != 0){ return false; } if (_pIDxName[name] == 0){ //unregister name name = _defaulRefer; } uint256 affID = _pIDxName[name]; if( affID == pID){ affID = _pIDxName[_defaulRefer]; } _plyr[pID].laff = affID; //lvcount _plyr[affID].lv1Count++; uint256 aff_affID = _plyr[affID].laff; if(aff_affID != 0 ){ _plyr[aff_affID].lv2Count++; } // fire event emit eveBindRefer(pID, from, name, affID, _plyr[affID].addr, _plyr[affID].name); return true; } // function _determinePID(address addr) private returns (bool) { if (_pIDxAddr[addr] == 0) { _pID++; _pIDxAddr[addr] = _pID; _plyr[_pID].addr = addr; // set the new player bool to true return (true); } else { return (false); } } function hasRefer(address from) isRegisteredPool() external returns(bool) { _determinePID(from); uint256 pID = _pIDxAddr[from]; return (_plyr[pID].laff > 0); } function getPlayerName(address from) external view returns (bytes32) { uint256 pID = _pIDxAddr[from]; if(_pID==0){ return ""; } return (_plyr[pID].name); } function getPlayerLaffName(address from) external view returns (bytes32) { uint256 pID = _pIDxAddr[from]; if(_pID==0){ return ""; } uint256 aID=_plyr[pID].laff; if( aID== 0){ return ""; } return (_plyr[aID].name); } function getPlayerInfo(address from) external view returns (uint256,uint256,uint256,uint256) { uint256 pID = _pIDxAddr[from]; if(_pID==0){ return (0,0,0,0); } return (_plyr[pID].rreward,_plyr[pID].allReward,_plyr[pID].lv1Count,_plyr[pID].lv2Count); } function getTotalReferReward() external view returns (uint256) { return(_totalReferReward); } function getRegistrationFee() external view returns (uint256) { if( _totalRegisterCount <_registrationStep || _registrationStep == 0){ return _registrationBaseFee; } else{ uint256 step = _totalRegisterCount.div(_registrationStep); return _registrationBaseFee.add(step.mul(_stepFee)); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[],"name":"getRegistrationFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"_plyr","outputs":[{"name":"addr","type":"address"},{"name":"name","type":"bytes32"},{"name":"nameCount","type":"uint8"},{"name":"laff","type":"uint256"},{"name":"amount","type":"uint256"},{"name":"rreward","type":"uint256"},{"name":"allReward","type":"uint256"},{"name":"lv1Count","type":"uint256"},{"name":"lv2Count","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"_pIDxName","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_governance","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_registrationBaseFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"amount","type":"uint256"}],"name":"settleReward","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"_teamWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"poolAddr","type":"address"}],"name":"removePool","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"_pID","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"claim","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"from","type":"address"}],"name":"getPlayerInfo","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"_pIDxAddr","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"seizeEth","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"_refer1RewardRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"nameString","type":"string"},{"name":"affCode","type":"string"}],"name":"registerNameXName","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"nameStr","type":"string"}],"name":"checkIfNameValid","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_dego","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balances","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_totalRegisterCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_baseRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_refer2RewardRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"}],"name":"hasRefer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"registrationStep","type":"uint256"}],"name":"setRegistrationStep","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"governance","type":"address"}],"name":"setGovernance","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"_defaulRefer","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_totalReferReward","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"_pools","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"from","type":"address"}],"name":"getPlayerLaffName","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_stepFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getTotalReferReward","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"},{"name":"","type":"bytes32"}],"name":"_plyrNames","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"affCode","type":"string"}],"name":"bindRefer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"poolAddr","type":"address"}],"name":"addPool","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"_registrationStep","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"from","type":"address"}],"name":"getPlayerName","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"asset","type":"address"}],"name":"seize","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"refer1Rate","type":"uint256"},{"name":"refer2Rate","type":"uint256"}],"name":"setReferRewardRate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"dego","type":"address"}],"name":"setDegoContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"pID","type":"uint256"},{"indexed":false,"name":"addr","type":"address"},{"indexed":false,"name":"reward","type":"uint256"},{"indexed":false,"name":"balance","type":"uint256"}],"name":"eveClaim","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"pID","type":"uint256"},{"indexed":false,"name":"addr","type":"address"},{"indexed":false,"name":"name","type":"bytes32"},{"indexed":false,"name":"affID","type":"uint256"},{"indexed":false,"name":"affAddr","type":"address"},{"indexed":false,"name":"affName","type":"bytes32"}],"name":"eveBindRefer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"pID","type":"uint256"},{"indexed":false,"name":"addr","type":"address"},{"indexed":false,"name":"name","type":"bytes32"}],"name":"eveDefaultPlayer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"pID","type":"uint256"},{"indexed":false,"name":"addr","type":"address"},{"indexed":false,"name":"name","type":"bytes32"},{"indexed":false,"name":"affID","type":"uint256"},{"indexed":false,"name":"affAddr","type":"address"},{"indexed":false,"name":"affName","type":"bytes32"},{"indexed":false,"name":"balance","type":"uint256"}],"name":"eveNewName","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"pID","type":"uint256"},{"indexed":false,"name":"affID","type":"uint256"},{"indexed":false,"name":"aff_affID","type":"uint256"},{"indexed":false,"name":"affReward","type":"uint256"},{"indexed":false,"name":"aff_affReward","type":"uint256"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"eveSettle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"addr","type":"address"}],"name":"eveAddPool","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"addr","type":"address"}],"name":"eveRemovePool","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"GovernanceTransferred","type":"event"}]
Contract Creation Code
608060405260006008556102bc60095561012c600a55612710600b5567016345785d8a0000600c8190556064600d55600e557f6465676f00000000000000000000000000000000000000000000000000000000600f55601080546001600160a01b0319908116733d0a845c5ef9741de999fc068f70e2048a489f2b1790915560118054909116905534801561009357600080fd5b50600080546001600160a01b031916321781556007819055600655601054600f546100ce916001600160a01b0316906100d3602090811b901c565b6101ae565b600780546001908101808355600090815260046020908152604080832080546001600160a01b0389166001600160a01b03199091168117909155855484528184208501879055855484528184206002908101805460ff1990811688179091558754838752918552838620829055888652600385528386208290559085526005845282852088865284529382902080549094169094179092559254815190815292830191909152818101839052517ffa713d11a94345dc56254a6e12895c35e4b8251edae133e23531649ec8a999059181900360600190a15050565b6126b2806101bd6000396000f3fe6080604052600436106102255760003560e01c8063927b26b911610123578063c719bf9e116100ab578063de0e88b21161006f578063de0e88b214610930578063e18d38ce14610945578063fb3ee57114610978578063fefdca4f146109ab578063fffaf740146109db57610225565b8063c719bf9e14610818578063c7e708a01461082d578063cc85dd3314610842578063d66d140714610872578063d914cd4b146108fd57610225565b8063ab033ea9116100f2578063ab033ea914610755578063ac66c9b714610788578063bb91c3301461079d578063bc6eec40146107b2578063bcbacb6d146107e557610225565b8063927b26b9146106ce5780639cafffc0146106e3578063a526a92b146106f8578063a8ddef311461072b57610225565b80634e71d92d116101b15780636ae51ffe116101755780636ae51ffe146104a15780636c52660d146105ca57806374f9b4641461068f5780637bb98a68146106a45780637c34aac6146106b957610225565b80634e71d92d146103d657806359328401146103eb5780635be9c4c4146104445780635d5a835c146104775780636566d5441461048c57610225565b80632ec15161116101f85780632ec151611461032957806335380a551461033e57806337e294d5146103775780633b7d09461461038c5780634e46ce8a146103c157610225565b80630946e8071461022a5780630d4bb2501461025157806310af0486146102ce5780631c2f3e3d146102f8575b600080fd5b34801561023657600080fd5b5061023f610a0e565b60408051918252519081900360200190f35b34801561025d57600080fd5b5061027b6004803603602081101561027457600080fd5b5035610a79565b604080516001600160a01b03909a168a5260208a019890985260ff909616888801526060880194909452608087019290925260a086015260c085015260e084015261010083015251908190036101200190f35b3480156102da57600080fd5b5061023f600480360360208110156102f157600080fd5b5035610ad2565b34801561030457600080fd5b5061030d610ae4565b604080516001600160a01b039092168252519081900360200190f35b34801561033557600080fd5b5061023f610af3565b34801561034a57600080fd5b5061023f6004803603604081101561036157600080fd5b506001600160a01b038135169060200135610af9565b34801561038357600080fd5b5061030d610dbc565b34801561039857600080fd5b506103bf600480360360208110156103af57600080fd5b50356001600160a01b0316610dcb565b005b3480156103cd57600080fd5b5061023f610ed5565b3480156103e257600080fd5b506103bf610edb565b3480156103f757600080fd5b5061041e6004803603602081101561040e57600080fd5b50356001600160a01b0316611026565b604080519485526020850193909352838301919091526060830152519081900360800190f35b34801561045057600080fd5b5061023f6004803603602081101561046757600080fd5b50356001600160a01b0316611097565b34801561048357600080fd5b506103bf6110a9565b34801561049857600080fd5b5061023f6110e8565b6103bf600480360360408110156104b757600080fd5b810190602081018135600160201b8111156104d157600080fd5b8201836020820111156104e357600080fd5b803590602001918460018302840111600160201b8311171561050457600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561055657600080fd5b82018360208201111561056857600080fd5b803590602001918460018302840111600160201b8311171561058957600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506110ee945050505050565b3480156105d657600080fd5b5061067b600480360360208110156105ed57600080fd5b810190602081018135600160201b81111561060757600080fd5b82018360208201111561061957600080fd5b803590602001918460018302840111600160201b8311171561063a57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506113ad945050505050565b604080519115158252519081900360200190f35b34801561069b57600080fd5b5061030d6113e6565b3480156106b057600080fd5b5061023f6113f5565b3480156106c557600080fd5b5061023f611474565b3480156106da57600080fd5b5061023f61147a565b3480156106ef57600080fd5b5061023f611480565b34801561070457600080fd5b5061067b6004803603602081101561071b57600080fd5b50356001600160a01b0316611486565b34801561073757600080fd5b506103bf6004803603602081101561074e57600080fd5b5035611522565b34801561076157600080fd5b506103bf6004803603602081101561077857600080fd5b50356001600160a01b031661157d565b34801561079457600080fd5b5061023f61168e565b3480156107a957600080fd5b5061023f611694565b3480156107be57600080fd5b5061067b600480360360208110156107d557600080fd5b50356001600160a01b031661169a565b3480156107f157600080fd5b5061023f6004803603602081101561080857600080fd5b50356001600160a01b03166116af565b34801561082457600080fd5b5061023f611718565b34801561083957600080fd5b5061023f61171e565b34801561084e57600080fd5b5061067b6004803603604081101561086557600080fd5b5080359060200135611724565b34801561087e57600080fd5b5061067b6004803603604081101561089557600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156108bf57600080fd5b8201836020820111156108d157600080fd5b803590602001918460018302840111600160201b831117156108f257600080fd5b509092509050611744565b34801561090957600080fd5b506103bf6004803603602081101561092057600080fd5b50356001600160a01b03166117fc565b34801561093c57600080fd5b5061023f611909565b34801561095157600080fd5b5061023f6004803603602081101561096857600080fd5b50356001600160a01b031661190f565b34801561098457600080fd5b5061023f6004803603602081101561099b57600080fd5b50356001600160a01b0316611953565b3480156109b757600080fd5b506103bf600480360360408110156109ce57600080fd5b5080359060200135611a54565b3480156109e757600080fd5b506103bf600480360360208110156109fe57600080fd5b50356001600160a01b0316611ab5565b6000600d546008541080610a225750600d54155b15610a305750600c54610a76565b6000610a49600d54600854611b2d90919063ffffffff16565b9050610a72610a63600e5483611b7890919063ffffffff16565b600c549063ffffffff611bd816565b9150505b90565b60046020819052600091825260409091208054600182015460028301546003840154948401546005850154600686015460078701546008909701546001600160a01b0390961697949660ff909416959293919290919089565b60036020526000908152604090205481565b6000546001600160a01b031681565b600c5481565b3360009081526001602052604081205460ff161515610b5d5760408051600160e51b62461bcd0281526020600482015260156024820152600160581b74696e76616c696420706f6f6c20616464726573732102604482015290519081900360640190fd5b826001600160a01b0381161515610b7357600080fd5b610b7c84611c35565b506001600160a01b038416600090815260026020908152604080832054808452600490925290912060030154801515610bd55750600f546000908152600360208181526040808420548585526004909252909220018190555b841515610be757600093505050610db5565b60008090506000610c15600b54610c096009548a611b7890919063ffffffff16565b9063ffffffff611b2d16565b600084815260046020526040902060050154909150610c3a908263ffffffff611bd816565b600084815260046020526040902060050155600654610c5f908263ffffffff611bd816565b600655610c72828263ffffffff611bd816565b600084815260046020526040812060030154600b54600a549395509092610ca59190610c09908c9063ffffffff611b7816565b9050811515610cc357600f5460009081526003602052604090205491505b600082815260046020526040902060050154610ce5908263ffffffff611bd816565b600083815260046020526040902060050155600654610d0a908263ffffffff611bd816565b60065560008681526004602081905260409091200154610d30908a63ffffffff611bd816565b60008781526004602081905260409091200155610d53848263ffffffff611bd816565b6040805188815260208101889052808201859052606081018690526080810184905260a081018c905290519195507fe3591f94f07d94a6339525f12dc326b60837cc4be77828e7398820b51837727c919081900360c00190a150919550505050505b5092915050565b6010546001600160a01b031681565b6000546001600160a01b03163314610e215760408051600160e51b62461bcd02815260206004820152600e6024820152600160901b6d6e6f7420676f7665726e616e636502604482015290519081900360640190fd5b6001600160a01b03811660009081526001602052604090205460ff161515610e7d57604051600160e51b62461bcd0281526004018080602001828103825260228152602001806125ab6022913960400191505060405180910390fd5b6001600160a01b038116600081815260016020908152604091829020805460ff19169055815192835290517f4f689596499fa101190f22e9d40932ffe3eba8fbb61a5717b0aa75a4702290539281900390910190a150565b60075481565b33600081815260026020908152604080832054808452600490925290912060050154801515610f545760408051600160e51b62461bcd02815260206004820152601060248201527f6f6e6c7920686176652072657761726400000000000000000000000000000000604482015290519081900360640190fd5b600082815260046020526040902060060154610f76908263ffffffff611bd816565b60008381526004602052604081206006810192909255600590910155601154610faf906001600160a01b0316848363ffffffff611caa16565b6001600160a01b0383166000908152600260205260409020547fb9f2b6761fc32d11bc6e1f654fd1abff7762d5a14854fc85a5102a1420e4f063908483610ff46113f5565b604080519485526001600160a01b039093166020850152838301919091526060830152519081900360800190a1505050565b6001600160a01b038116600090815260026020526040812054600754829182918291901515611062575060009350839250829150819050611090565b6000908152600460205260409020600581015460068201546007830154600890930154919650945090925090505b9193509193565b60026020526000908152604090205481565b6010546040513031916001600160a01b03169082156108fc029083906000818181858888f193505050501580156110e4573d6000803e3d6000fd5b5050565b60095481565b306001600160a01b0316630946e8076040518163ffffffff1660e01b815260040160206040518083038186803b15801561112757600080fd5b505afa15801561113b573d6000803e3d6000fd5b505050506040513d602081101561115157600080fd5b505134101561119457604051600160e51b62461bcd0281526004018080602001828103825260268152602001806126376026913960400191505060405180910390fd5b600061119f83611d04565b600081815260036020526040902054909150156112065760408051600160e51b62461bcd02815260206004820152601e60248201527f736f7272792074686174206e616d657320616c72656164792074616b656e0000604482015290519081900360640190fd5b3361121081611c35565b506001600160a01b038116600090815260026020908152604080832054808452600583528184208685529092529091205460ff16156112995760408051600160e51b62461bcd02815260206004820152601e60248201527f736f7272792074686174206e616d657320616c72656164792074616b656e0000604482015290519081900360640190fd5b60008181526005602090815260408083208684528252808320805460ff199081166001908117909255600380855283862087905586865260049094529190932080840187905560028101805460ff818116870116931692909217909155600880549093019092550154151561131c57836020810151611318848261214f565b5050505b600081815260046020908152604080832060030154808452928190208054600190910154600c5483518781526001600160a01b03808a16968201969096528085018a90526060810187905294909216608085015260a084015260c0830152517fdf3ed2c70083bdadd0128f870b30a4de60b992c66cb6050833d03dad45583b949181900360e00190a1505050505050565b6000806113b983611d04565b60008181526003602052604090205490915015156113db5760019150506113e1565b60009150505b919050565b6011546001600160a01b031681565b60115460408051600160e01b6370a0823102815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561144357600080fd5b505afa158015611457573d6000803e3d6000fd5b505050506040513d602081101561146d57600080fd5b5051905090565b60085481565b600b5481565b600a5481565b3360009081526001602052604081205460ff1615156114ea5760408051600160e51b62461bcd0281526020600482015260156024820152600160581b74696e76616c696420706f6f6c20616464726573732102604482015290519081900360640190fd5b6114f382611c35565b50506001600160a01b031660009081526002602090815260408083205483526004909152902060030154151590565b6000546001600160a01b031633146115785760408051600160e51b62461bcd02815260206004820152600e6024820152600160901b6d6e6f7420676f7665726e616e636502604482015290519081900360640190fd5b600d55565b6000546001600160a01b031633146115d35760408051600160e51b62461bcd02815260206004820152600e6024820152600160901b6d6e6f7420676f7665726e616e636502604482015290519081900360640190fd5b6001600160a01b03811615156116335760408051600160e51b62461bcd02815260206004820152601f60248201527f6e657720676f7665726e616e636520746865207a65726f206164647265737300604482015290519081900360640190fd5b600080546040516001600160a01b03808516939216917f5f56bee8cffbe9a78652a74a60705edede02af10b0bbb888ca44b79a0d42ce8091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600f5481565b60065481565b60016020526000908152604090205460ff1681565b6001600160a01b03811660009081526002602052604081205460075415156116db5760009150506113e1565b6000818152600460205260409020600301548015156116ff576000925050506113e1565b6000908152600460205260409020600101549392505050565b600e5481565b60065490565b600560209081526000928352604080842090915290825290205460ff1681565b3360009081526001602052604081205460ff1615156117a85760408051600160e51b62461bcd0281526020600482015260156024820152600160581b74696e76616c696420706f6f6c20616464726573732102604482015290519081900360640190fd5b606083838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509394505050505060208101516117f2868261214f565b9695505050505050565b6000546001600160a01b031633146118525760408051600160e51b62461bcd02815260206004820152600e6024820152600160901b6d6e6f7420676f7665726e616e636502604482015290519081900360640190fd5b6001600160a01b03811660009081526001602052604090205460ff16156118ad57604051600160e51b62461bcd0281526004018080602001828103825260278152602001806126106027913960400191505060405180910390fd5b6001600160a01b038116600081815260016020818152604092839020805460ff1916909217909155815192835290517fc493065a4e0a768dde7b298939bb40525ff31478ea04935407aeacac3cb73bf69281900390910190a150565b600d5481565b6001600160a01b038116600090815260026020526040812054600754151561193b5760009150506113e1565b60009081526004602052604090206001015492915050565b6011546000906001600160a01b03838116911614156119bc5760408051600160e51b62461bcd02815260206004820152600e60248201527f666f7262626964656e206465676f000000000000000000000000000000000000604482015290519081900360640190fd5b60408051600160e01b6370a0823102815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b158015611a0557600080fd5b505afa158015611a19573d6000803e3d6000fd5b505050506040513d6020811015611a2f57600080fd5b50516010549091506113e1906001600160a01b0384811691168363ffffffff611caa16565b6000546001600160a01b03163314611aaa5760408051600160e51b62461bcd02815260206004820152600e6024820152600160901b6d6e6f7420676f7665726e616e636502604482015290519081900360640190fd5b600991909155600a55565b6000546001600160a01b03163314611b0b5760408051600160e51b62461bcd02815260206004820152600e6024820152600160901b6d6e6f7420676f7665726e616e636502604482015290519081900360640190fd5b601180546001600160a01b0319166001600160a01b0392909216919091179055565b6000611b6f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506122ce565b90505b92915050565b6000821515611b8957506000611b72565b828202828482811515611b9857fe5b0414611b6f57604051600160e51b62461bcd0281526004018080602001828103825260218152602001806125cd6021913960400191505060405180910390fd5b600082820183811015611b6f5760408051600160e51b62461bcd02815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6001600160a01b0381166000908152600260205260408120541515611ca25750600780546001908101918290556001600160a01b0383166000818152600260209081526040808320869055948252600490529290922080546001600160a01b0319169092179091556113e1565b5060006113e1565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b0316600160e01b63a9059cbb02179052611cff908490612377565b505050565b8051600090829060208111801590611d1c5750600081115b1515611d5c57604051600160e51b62461bcd02815260040180806020018281038252602a815260200180612581602a913960400191505060405180910390fd5b816000815181101515611d6b57fe5b90602001015160f81c60f81b6001600160f81b031916603060f81b1415611e9057816001815181101515611d9b57fe5b90602001015160f81c60f81b6001600160f81b031916607860f81b14151515611e0e5760408051600160e51b62461bcd02815260206004820152601b60248201527f737472696e672063616e6e6f7420737461727420776974682030780000000000604482015290519081900360640190fd5b816001815181101515611e1d57fe5b90602001015160f81c60f81b6001600160f81b031916605860f81b14151515611e905760408051600160e51b62461bcd02815260206004820152601b60248201527f737472696e672063616e6e6f7420737461727420776974682030580000000000604482015290519081900360640190fd5b6000805b828110156120e8578351600160fe1b90859083908110611eb057fe5b90602001015160f81c60f81b6001600160f81b031916118015611efd57508351600160f81b605b0290859083908110611ee557fe5b90602001015160f81c60f81b6001600160f81b031916105b15611f5c578381815181101515611f1057fe5b90602001015160f81c60f81b60f81c60200160f81b8482815181101515611f3357fe5b9060200101906001600160f81b031916908160001a905350811515611f5757600191505b6120e0565b8351600160fd1b60030290859083908110611f7357fe5b90602001015160f81c60f81b6001600160f81b031916118015611fc057508351600160f81b607b0290859083908110611fa857fe5b90602001015160f81c60f81b6001600160f81b031916105b8061202a57508351600160f81b602f0290859083908110611fdd57fe5b90602001015160f81c60f81b6001600160f81b03191611801561202a57508351600160f91b601d029085908390811061201257fe5b90602001015160f81c60f81b6001600160f81b031916105b151561206a57604051600160e51b62461bcd0281526004018080602001828103825260228152602001806125ee6022913960400191505060405180910390fd5b811580156120d657508351600160fc1b6003029085908390811061208a57fe5b90602001015160f81c60f81b6001600160f81b03191610806120d657508351600160f81b603902908590839081106120be57fe5b90602001015160f81c60f81b6001600160f81b031916115b156120e057600191505b600101611e94565b506001811515146121435760408051600160e51b62461bcd02815260206004820152601d60248201527f737472696e672063616e6e6f74206265206f6e6c79206e756d62657273000000604482015290519081900360640190fd5b50506020015192915050565b60003380151561215e57600080fd5b836001600160a01b038116151561217457600080fd5b61217d85611c35565b506001600160a01b038516600090815260026020908152604080832054808452600490925290912060030154156121b85760009350506122c6565b60008581526003602052604090205415156121d357600f5494505b600085815260036020526040902054818114156121fe5750600f546000908152600360205260409020545b60008281526004602052604080822060039081018490558383529120600781018054600101905501548015612246576000818152600460205260409020600801805460010190555b600082815260046020908152604091829020805460019091015483518781526001600160a01b03808e16948201949094528085018c90526060810187905292909116608083015260a082015290517fe9205a827ca45de3faa1ba2a6ac85f1743ace9e34fa4438f35a964b6143de9009181900360c00190a1600195505050505b505092915050565b60008183151561235f57604051600160e51b62461bcd0281526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561232457818101518382015260200161230c565b50505050905090810190601f1680156123515780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581151561236d57fe5b0495945050505050565b612389826001600160a01b0316612544565b15156123df5760408051600160e51b62461bcd02815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b6020831061241d5780518252601f1990920191602091820191016123fe565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461247f576040519150601f19603f3d011682016040523d82523d6000602084013e612484565b606091505b50915091508115156124e05760408051600160e51b62461bcd02815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b80511561253e578080602001905160208110156124fc57600080fd5b5051151561253e57604051600160e51b62461bcd02815260040180806020018281038252602a81526020018061265d602a913960400191505060405180910390fd5b50505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061257857508115155b94935050505056fe737472696e67206d757374206265206265747765656e203120616e642033322063686172616374657273646572702c207468617420706f6f6c206d7573742062652072656769737465726564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77737472696e6720636f6e7461696e7320696e76616c69642063686172616374657273646572702c207468617420706f6f6c20616c7265616479206265656e2072656769737465726564756d6d2e2e2e2e2e2020796f75206861766520746f2070617920746865206e616d65206665655361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a165627a7a723058209270a2da8790b59fae5d92c828d6c8f20c5c34acb9c33f9a7090d403a283d66c0029
Deployed Bytecode
0x6080604052600436106102255760003560e01c8063927b26b911610123578063c719bf9e116100ab578063de0e88b21161006f578063de0e88b214610930578063e18d38ce14610945578063fb3ee57114610978578063fefdca4f146109ab578063fffaf740146109db57610225565b8063c719bf9e14610818578063c7e708a01461082d578063cc85dd3314610842578063d66d140714610872578063d914cd4b146108fd57610225565b8063ab033ea9116100f2578063ab033ea914610755578063ac66c9b714610788578063bb91c3301461079d578063bc6eec40146107b2578063bcbacb6d146107e557610225565b8063927b26b9146106ce5780639cafffc0146106e3578063a526a92b146106f8578063a8ddef311461072b57610225565b80634e71d92d116101b15780636ae51ffe116101755780636ae51ffe146104a15780636c52660d146105ca57806374f9b4641461068f5780637bb98a68146106a45780637c34aac6146106b957610225565b80634e71d92d146103d657806359328401146103eb5780635be9c4c4146104445780635d5a835c146104775780636566d5441461048c57610225565b80632ec15161116101f85780632ec151611461032957806335380a551461033e57806337e294d5146103775780633b7d09461461038c5780634e46ce8a146103c157610225565b80630946e8071461022a5780630d4bb2501461025157806310af0486146102ce5780631c2f3e3d146102f8575b600080fd5b34801561023657600080fd5b5061023f610a0e565b60408051918252519081900360200190f35b34801561025d57600080fd5b5061027b6004803603602081101561027457600080fd5b5035610a79565b604080516001600160a01b03909a168a5260208a019890985260ff909616888801526060880194909452608087019290925260a086015260c085015260e084015261010083015251908190036101200190f35b3480156102da57600080fd5b5061023f600480360360208110156102f157600080fd5b5035610ad2565b34801561030457600080fd5b5061030d610ae4565b604080516001600160a01b039092168252519081900360200190f35b34801561033557600080fd5b5061023f610af3565b34801561034a57600080fd5b5061023f6004803603604081101561036157600080fd5b506001600160a01b038135169060200135610af9565b34801561038357600080fd5b5061030d610dbc565b34801561039857600080fd5b506103bf600480360360208110156103af57600080fd5b50356001600160a01b0316610dcb565b005b3480156103cd57600080fd5b5061023f610ed5565b3480156103e257600080fd5b506103bf610edb565b3480156103f757600080fd5b5061041e6004803603602081101561040e57600080fd5b50356001600160a01b0316611026565b604080519485526020850193909352838301919091526060830152519081900360800190f35b34801561045057600080fd5b5061023f6004803603602081101561046757600080fd5b50356001600160a01b0316611097565b34801561048357600080fd5b506103bf6110a9565b34801561049857600080fd5b5061023f6110e8565b6103bf600480360360408110156104b757600080fd5b810190602081018135600160201b8111156104d157600080fd5b8201836020820111156104e357600080fd5b803590602001918460018302840111600160201b8311171561050457600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561055657600080fd5b82018360208201111561056857600080fd5b803590602001918460018302840111600160201b8311171561058957600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506110ee945050505050565b3480156105d657600080fd5b5061067b600480360360208110156105ed57600080fd5b810190602081018135600160201b81111561060757600080fd5b82018360208201111561061957600080fd5b803590602001918460018302840111600160201b8311171561063a57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506113ad945050505050565b604080519115158252519081900360200190f35b34801561069b57600080fd5b5061030d6113e6565b3480156106b057600080fd5b5061023f6113f5565b3480156106c557600080fd5b5061023f611474565b3480156106da57600080fd5b5061023f61147a565b3480156106ef57600080fd5b5061023f611480565b34801561070457600080fd5b5061067b6004803603602081101561071b57600080fd5b50356001600160a01b0316611486565b34801561073757600080fd5b506103bf6004803603602081101561074e57600080fd5b5035611522565b34801561076157600080fd5b506103bf6004803603602081101561077857600080fd5b50356001600160a01b031661157d565b34801561079457600080fd5b5061023f61168e565b3480156107a957600080fd5b5061023f611694565b3480156107be57600080fd5b5061067b600480360360208110156107d557600080fd5b50356001600160a01b031661169a565b3480156107f157600080fd5b5061023f6004803603602081101561080857600080fd5b50356001600160a01b03166116af565b34801561082457600080fd5b5061023f611718565b34801561083957600080fd5b5061023f61171e565b34801561084e57600080fd5b5061067b6004803603604081101561086557600080fd5b5080359060200135611724565b34801561087e57600080fd5b5061067b6004803603604081101561089557600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156108bf57600080fd5b8201836020820111156108d157600080fd5b803590602001918460018302840111600160201b831117156108f257600080fd5b509092509050611744565b34801561090957600080fd5b506103bf6004803603602081101561092057600080fd5b50356001600160a01b03166117fc565b34801561093c57600080fd5b5061023f611909565b34801561095157600080fd5b5061023f6004803603602081101561096857600080fd5b50356001600160a01b031661190f565b34801561098457600080fd5b5061023f6004803603602081101561099b57600080fd5b50356001600160a01b0316611953565b3480156109b757600080fd5b506103bf600480360360408110156109ce57600080fd5b5080359060200135611a54565b3480156109e757600080fd5b506103bf600480360360208110156109fe57600080fd5b50356001600160a01b0316611ab5565b6000600d546008541080610a225750600d54155b15610a305750600c54610a76565b6000610a49600d54600854611b2d90919063ffffffff16565b9050610a72610a63600e5483611b7890919063ffffffff16565b600c549063ffffffff611bd816565b9150505b90565b60046020819052600091825260409091208054600182015460028301546003840154948401546005850154600686015460078701546008909701546001600160a01b0390961697949660ff909416959293919290919089565b60036020526000908152604090205481565b6000546001600160a01b031681565b600c5481565b3360009081526001602052604081205460ff161515610b5d5760408051600160e51b62461bcd0281526020600482015260156024820152600160581b74696e76616c696420706f6f6c20616464726573732102604482015290519081900360640190fd5b826001600160a01b0381161515610b7357600080fd5b610b7c84611c35565b506001600160a01b038416600090815260026020908152604080832054808452600490925290912060030154801515610bd55750600f546000908152600360208181526040808420548585526004909252909220018190555b841515610be757600093505050610db5565b60008090506000610c15600b54610c096009548a611b7890919063ffffffff16565b9063ffffffff611b2d16565b600084815260046020526040902060050154909150610c3a908263ffffffff611bd816565b600084815260046020526040902060050155600654610c5f908263ffffffff611bd816565b600655610c72828263ffffffff611bd816565b600084815260046020526040812060030154600b54600a549395509092610ca59190610c09908c9063ffffffff611b7816565b9050811515610cc357600f5460009081526003602052604090205491505b600082815260046020526040902060050154610ce5908263ffffffff611bd816565b600083815260046020526040902060050155600654610d0a908263ffffffff611bd816565b60065560008681526004602081905260409091200154610d30908a63ffffffff611bd816565b60008781526004602081905260409091200155610d53848263ffffffff611bd816565b6040805188815260208101889052808201859052606081018690526080810184905260a081018c905290519195507fe3591f94f07d94a6339525f12dc326b60837cc4be77828e7398820b51837727c919081900360c00190a150919550505050505b5092915050565b6010546001600160a01b031681565b6000546001600160a01b03163314610e215760408051600160e51b62461bcd02815260206004820152600e6024820152600160901b6d6e6f7420676f7665726e616e636502604482015290519081900360640190fd5b6001600160a01b03811660009081526001602052604090205460ff161515610e7d57604051600160e51b62461bcd0281526004018080602001828103825260228152602001806125ab6022913960400191505060405180910390fd5b6001600160a01b038116600081815260016020908152604091829020805460ff19169055815192835290517f4f689596499fa101190f22e9d40932ffe3eba8fbb61a5717b0aa75a4702290539281900390910190a150565b60075481565b33600081815260026020908152604080832054808452600490925290912060050154801515610f545760408051600160e51b62461bcd02815260206004820152601060248201527f6f6e6c7920686176652072657761726400000000000000000000000000000000604482015290519081900360640190fd5b600082815260046020526040902060060154610f76908263ffffffff611bd816565b60008381526004602052604081206006810192909255600590910155601154610faf906001600160a01b0316848363ffffffff611caa16565b6001600160a01b0383166000908152600260205260409020547fb9f2b6761fc32d11bc6e1f654fd1abff7762d5a14854fc85a5102a1420e4f063908483610ff46113f5565b604080519485526001600160a01b039093166020850152838301919091526060830152519081900360800190a1505050565b6001600160a01b038116600090815260026020526040812054600754829182918291901515611062575060009350839250829150819050611090565b6000908152600460205260409020600581015460068201546007830154600890930154919650945090925090505b9193509193565b60026020526000908152604090205481565b6010546040513031916001600160a01b03169082156108fc029083906000818181858888f193505050501580156110e4573d6000803e3d6000fd5b5050565b60095481565b306001600160a01b0316630946e8076040518163ffffffff1660e01b815260040160206040518083038186803b15801561112757600080fd5b505afa15801561113b573d6000803e3d6000fd5b505050506040513d602081101561115157600080fd5b505134101561119457604051600160e51b62461bcd0281526004018080602001828103825260268152602001806126376026913960400191505060405180910390fd5b600061119f83611d04565b600081815260036020526040902054909150156112065760408051600160e51b62461bcd02815260206004820152601e60248201527f736f7272792074686174206e616d657320616c72656164792074616b656e0000604482015290519081900360640190fd5b3361121081611c35565b506001600160a01b038116600090815260026020908152604080832054808452600583528184208685529092529091205460ff16156112995760408051600160e51b62461bcd02815260206004820152601e60248201527f736f7272792074686174206e616d657320616c72656164792074616b656e0000604482015290519081900360640190fd5b60008181526005602090815260408083208684528252808320805460ff199081166001908117909255600380855283862087905586865260049094529190932080840187905560028101805460ff818116870116931692909217909155600880549093019092550154151561131c57836020810151611318848261214f565b5050505b600081815260046020908152604080832060030154808452928190208054600190910154600c5483518781526001600160a01b03808a16968201969096528085018a90526060810187905294909216608085015260a084015260c0830152517fdf3ed2c70083bdadd0128f870b30a4de60b992c66cb6050833d03dad45583b949181900360e00190a1505050505050565b6000806113b983611d04565b60008181526003602052604090205490915015156113db5760019150506113e1565b60009150505b919050565b6011546001600160a01b031681565b60115460408051600160e01b6370a0823102815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561144357600080fd5b505afa158015611457573d6000803e3d6000fd5b505050506040513d602081101561146d57600080fd5b5051905090565b60085481565b600b5481565b600a5481565b3360009081526001602052604081205460ff1615156114ea5760408051600160e51b62461bcd0281526020600482015260156024820152600160581b74696e76616c696420706f6f6c20616464726573732102604482015290519081900360640190fd5b6114f382611c35565b50506001600160a01b031660009081526002602090815260408083205483526004909152902060030154151590565b6000546001600160a01b031633146115785760408051600160e51b62461bcd02815260206004820152600e6024820152600160901b6d6e6f7420676f7665726e616e636502604482015290519081900360640190fd5b600d55565b6000546001600160a01b031633146115d35760408051600160e51b62461bcd02815260206004820152600e6024820152600160901b6d6e6f7420676f7665726e616e636502604482015290519081900360640190fd5b6001600160a01b03811615156116335760408051600160e51b62461bcd02815260206004820152601f60248201527f6e657720676f7665726e616e636520746865207a65726f206164647265737300604482015290519081900360640190fd5b600080546040516001600160a01b03808516939216917f5f56bee8cffbe9a78652a74a60705edede02af10b0bbb888ca44b79a0d42ce8091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600f5481565b60065481565b60016020526000908152604090205460ff1681565b6001600160a01b03811660009081526002602052604081205460075415156116db5760009150506113e1565b6000818152600460205260409020600301548015156116ff576000925050506113e1565b6000908152600460205260409020600101549392505050565b600e5481565b60065490565b600560209081526000928352604080842090915290825290205460ff1681565b3360009081526001602052604081205460ff1615156117a85760408051600160e51b62461bcd0281526020600482015260156024820152600160581b74696e76616c696420706f6f6c20616464726573732102604482015290519081900360640190fd5b606083838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509394505050505060208101516117f2868261214f565b9695505050505050565b6000546001600160a01b031633146118525760408051600160e51b62461bcd02815260206004820152600e6024820152600160901b6d6e6f7420676f7665726e616e636502604482015290519081900360640190fd5b6001600160a01b03811660009081526001602052604090205460ff16156118ad57604051600160e51b62461bcd0281526004018080602001828103825260278152602001806126106027913960400191505060405180910390fd5b6001600160a01b038116600081815260016020818152604092839020805460ff1916909217909155815192835290517fc493065a4e0a768dde7b298939bb40525ff31478ea04935407aeacac3cb73bf69281900390910190a150565b600d5481565b6001600160a01b038116600090815260026020526040812054600754151561193b5760009150506113e1565b60009081526004602052604090206001015492915050565b6011546000906001600160a01b03838116911614156119bc5760408051600160e51b62461bcd02815260206004820152600e60248201527f666f7262626964656e206465676f000000000000000000000000000000000000604482015290519081900360640190fd5b60408051600160e01b6370a0823102815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b158015611a0557600080fd5b505afa158015611a19573d6000803e3d6000fd5b505050506040513d6020811015611a2f57600080fd5b50516010549091506113e1906001600160a01b0384811691168363ffffffff611caa16565b6000546001600160a01b03163314611aaa5760408051600160e51b62461bcd02815260206004820152600e6024820152600160901b6d6e6f7420676f7665726e616e636502604482015290519081900360640190fd5b600991909155600a55565b6000546001600160a01b03163314611b0b5760408051600160e51b62461bcd02815260206004820152600e6024820152600160901b6d6e6f7420676f7665726e616e636502604482015290519081900360640190fd5b601180546001600160a01b0319166001600160a01b0392909216919091179055565b6000611b6f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506122ce565b90505b92915050565b6000821515611b8957506000611b72565b828202828482811515611b9857fe5b0414611b6f57604051600160e51b62461bcd0281526004018080602001828103825260218152602001806125cd6021913960400191505060405180910390fd5b600082820183811015611b6f5760408051600160e51b62461bcd02815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6001600160a01b0381166000908152600260205260408120541515611ca25750600780546001908101918290556001600160a01b0383166000818152600260209081526040808320869055948252600490529290922080546001600160a01b0319169092179091556113e1565b5060006113e1565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b0316600160e01b63a9059cbb02179052611cff908490612377565b505050565b8051600090829060208111801590611d1c5750600081115b1515611d5c57604051600160e51b62461bcd02815260040180806020018281038252602a815260200180612581602a913960400191505060405180910390fd5b816000815181101515611d6b57fe5b90602001015160f81c60f81b6001600160f81b031916603060f81b1415611e9057816001815181101515611d9b57fe5b90602001015160f81c60f81b6001600160f81b031916607860f81b14151515611e0e5760408051600160e51b62461bcd02815260206004820152601b60248201527f737472696e672063616e6e6f7420737461727420776974682030780000000000604482015290519081900360640190fd5b816001815181101515611e1d57fe5b90602001015160f81c60f81b6001600160f81b031916605860f81b14151515611e905760408051600160e51b62461bcd02815260206004820152601b60248201527f737472696e672063616e6e6f7420737461727420776974682030580000000000604482015290519081900360640190fd5b6000805b828110156120e8578351600160fe1b90859083908110611eb057fe5b90602001015160f81c60f81b6001600160f81b031916118015611efd57508351600160f81b605b0290859083908110611ee557fe5b90602001015160f81c60f81b6001600160f81b031916105b15611f5c578381815181101515611f1057fe5b90602001015160f81c60f81b60f81c60200160f81b8482815181101515611f3357fe5b9060200101906001600160f81b031916908160001a905350811515611f5757600191505b6120e0565b8351600160fd1b60030290859083908110611f7357fe5b90602001015160f81c60f81b6001600160f81b031916118015611fc057508351600160f81b607b0290859083908110611fa857fe5b90602001015160f81c60f81b6001600160f81b031916105b8061202a57508351600160f81b602f0290859083908110611fdd57fe5b90602001015160f81c60f81b6001600160f81b03191611801561202a57508351600160f91b601d029085908390811061201257fe5b90602001015160f81c60f81b6001600160f81b031916105b151561206a57604051600160e51b62461bcd0281526004018080602001828103825260228152602001806125ee6022913960400191505060405180910390fd5b811580156120d657508351600160fc1b6003029085908390811061208a57fe5b90602001015160f81c60f81b6001600160f81b03191610806120d657508351600160f81b603902908590839081106120be57fe5b90602001015160f81c60f81b6001600160f81b031916115b156120e057600191505b600101611e94565b506001811515146121435760408051600160e51b62461bcd02815260206004820152601d60248201527f737472696e672063616e6e6f74206265206f6e6c79206e756d62657273000000604482015290519081900360640190fd5b50506020015192915050565b60003380151561215e57600080fd5b836001600160a01b038116151561217457600080fd5b61217d85611c35565b506001600160a01b038516600090815260026020908152604080832054808452600490925290912060030154156121b85760009350506122c6565b60008581526003602052604090205415156121d357600f5494505b600085815260036020526040902054818114156121fe5750600f546000908152600360205260409020545b60008281526004602052604080822060039081018490558383529120600781018054600101905501548015612246576000818152600460205260409020600801805460010190555b600082815260046020908152604091829020805460019091015483518781526001600160a01b03808e16948201949094528085018c90526060810187905292909116608083015260a082015290517fe9205a827ca45de3faa1ba2a6ac85f1743ace9e34fa4438f35a964b6143de9009181900360c00190a1600195505050505b505092915050565b60008183151561235f57604051600160e51b62461bcd0281526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561232457818101518382015260200161230c565b50505050905090810190601f1680156123515780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581151561236d57fe5b0495945050505050565b612389826001600160a01b0316612544565b15156123df5760408051600160e51b62461bcd02815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b6020831061241d5780518252601f1990920191602091820191016123fe565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461247f576040519150601f19603f3d011682016040523d82523d6000602084013e612484565b606091505b50915091508115156124e05760408051600160e51b62461bcd02815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b80511561253e578080602001905160208110156124fc57600080fd5b5051151561253e57604051600160e51b62461bcd02815260040180806020018281038252602a81526020018061265d602a913960400191505060405180910390fd5b50505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061257857508115155b94935050505056fe737472696e67206d757374206265206265747765656e203120616e642033322063686172616374657273646572702c207468617420706f6f6c206d7573742062652072656769737465726564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77737472696e6720636f6e7461696e7320696e76616c69642063686172616374657273646572702c207468617420706f6f6c20616c7265616479206265656e2072656769737465726564756d6d2e2e2e2e2e2020796f75206861766520746f2070617920746865206e616d65206665655361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a165627a7a723058209270a2da8790b59fae5d92c828d6c8f20c5c34acb9c33f9a7090d403a283d66c0029
Deployed Bytecode Sourcemap
24377:14215:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28156:8;;;38190:399;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38190:399:0;;;:::i;:::-;;;;;;;;;;;;;;;;24867:40;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24867:40:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24867:40:0;;:::i;:::-;;;;-1:-1:-1;;;;;24867:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24772:45;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24772:45:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24772:45:0;;:::i;23364:26::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23364:26:0;;;:::i;:::-;;;;-1:-1:-1;;;;;23364:26:0;;;;;;;;;;;;;;25635:48;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25635:48:0;;;:::i;28838:1452::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28838:1452:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;28838:1452:0;;;;;;;;:::i;25902:79::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25902:79:0;;;:::i;28518:244::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28518:244:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28518:244:0;-1:-1:-1;;;;;28518:244:0;;:::i;:::-;;25240:19;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25240:19:0;;;:::i;30355:512::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30355:512:0;;;:::i;37698:337::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37698:337:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;37698:337:0;-1:-1:-1;;;;;37698:337:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24663:45;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24663:45:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24663:45:0;-1:-1:-1;;;;;24663:45:0;;:::i;27903:145::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27903:145:0;;;:::i;25392:38::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25392:38:0;;;:::i;33150:1639::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;33150:1639:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;33150:1639:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;33150:1639:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;33150:1639:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;33150:1639:0;;;;;;;;-1:-1:-1;33150:1639:0;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;33150:1639:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;33150:1639:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;33150:1639:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;33150:1639:0;;-1:-1:-1;33150:1639:0;;-1:-1:-1;;;;;33150:1639:0:i;30921:268::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30921:268:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;30921:268:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;30921:268:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;30921:268:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;30921:268:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;30921:268:0;;-1:-1:-1;30921:268:0;;-1:-1:-1;;;;;30921:268:0:i;:::-;;;;;;;;;;;;;;;;;;25992:33;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25992:33:0;;;:::i;27412:139::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27412:139:0;;;:::i;25306:38::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25306:38:0;;;:::i;25556:32::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25556:32:0;;;:::i;25488:38::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25488:38:0;;;:::i;36852:227::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36852:227:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36852:227:0;-1:-1:-1;;;;;36852:227:0;;:::i;31983:148::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31983:148:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31983:148:0;;:::i;23678:256::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23678:256:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23678:256:0;-1:-1:-1;;;;;23678:256:0;;:::i;25858:35::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25858:35:0;;;:::i;25160:32::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25160:32:0;;;:::i;24564:39::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24564:39:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24564:39:0;-1:-1:-1;;;;;24564:39:0;;:::i;37343:347::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37343:347:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;37343:347:0;-1:-1:-1;;;;;37343:347:0;;:::i;25808:36::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25808:36:0;;;:::i;38043:139::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38043:139:0;;;:::i;25057:64::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25057:64:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25057:64:0;;;;;;;:::i;34885:412::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34885:412:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;34885:412:0;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;34885:412:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;34885:412:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;34885:412:0;;-1:-1:-1;34885:412:0;-1:-1:-1;34885:412:0;:::i;28223:243::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28223:243:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28223:243:0;-1:-1:-1;;;;;28223:243:0;;:::i;25727:38::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25727:38:0;;;:::i;37093:242::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37093:242:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;37093:242:0;-1:-1:-1;;;;;37093:242:0;;:::i;27623:246::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27623:246:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27623:246:0;-1:-1:-1;;;;;27623:246:0;;:::i;31719:197::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31719:197:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31719:197:0;;;;;;;:::i;32196:111::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32196:111:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32196:111:0;-1:-1:-1;;;;;32196:111:0;;:::i;38190:399::-;38270:7;38320:17;;38299:19;;:38;:64;;;-1:-1:-1;38341:17:0;;:22;38299:64;38295:287;;;-1:-1:-1;38386:20:0;;38379:27;;38295:287;38447:12;38462:42;38486:17;;38462:19;;:23;;:42;;;;:::i;:::-;38447:57;;38526:44;38551:18;38560:8;;38551:4;:8;;:18;;;;:::i;:::-;38526:20;;;:44;:24;:44;:::i;:::-;38519:51;;;38295:287;38190:399;:::o;24867:40::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24867:40:0;;;;;;;;;;;;;;;;;;;:::o;24772:45::-;;;;;;;;;;;;;:::o;23364:26::-;;;-1:-1:-1;;;;;23364:26:0;;:::o;25635:48::-;;;;:::o;28838:1452::-;27299:10;28986:7;27292:18;;;:6;:18;;;;;;;;27284:51;;;;;;;-1:-1:-1;;;;;27284:51:0;;;;;;;;;;;;-1:-1:-1;;;;;27284:51:0;;;;;;;;;;;;;;;28940:4;-1:-1:-1;;;;;27160:20:0;;;;27152:29;;;;;;29087:19;29101:4;29087:13;:19::i;:::-;-1:-1:-1;;;;;;29133:15:0;;29119:11;29133:15;;;:9;:15;;;;;;;;;29175:10;;;:5;:10;;;;;;:15;;;29214:10;;;29211:111;;-1:-1:-1;29259:12:0;;29249:23;;;;:9;:23;;;;;;;;;29287:10;;;:5;:10;;;;;;:15;:23;;;29211:111;29337:11;;;29334:50;;29371:1;29364:8;;;;;;29334:50;29396:11;29410:1;29396:15;;29443:17;29463:46;29499:9;;29464:29;29475:17;;29464:6;:10;;:29;;;;:::i;:::-;29463:35;:46;:35;:46;:::i;:::-;29543:12;;;;:5;:12;;;;;:20;;;29443:66;;-1:-1:-1;29543:35:0;;29443:66;29543:35;:24;:35;:::i;:::-;29520:12;;;;:5;:12;;;;;:20;;:58;29609:17;;:32;;29631:9;29609:32;:21;:32;:::i;:::-;29589:17;:52;29658:18;:3;29666:9;29658:18;:7;:18;:::i;:::-;29715:17;29735:12;;;:5;:12;;;;;:17;;;29821:9;;29798:17;;29652:24;;-1:-1:-1;29735:17:0;;29787:44;;29821:9;29787:29;;:6;;:29;:10;:29;:::i;:44::-;29763:68;-1:-1:-1;29845:14:0;;;29842:80;;29897:12;;29887:23;;;;:9;:23;;;;;;;-1:-1:-1;29842:80:0;29959:16;;;;:5;:16;;;;;:24;;;:43;;29988:13;29959:43;:28;:43;:::i;:::-;29932:16;;;;:5;:16;;;;;:24;;:70;30032:17;;:36;;30054:13;30032:36;:21;:36;:::i;:::-;30013:17;:55;30101:10;;;;:5;:10;;;;;;;;:17;;:30;;30124:6;30101:30;:21;:30;:::i;:::-;30081:10;;;;:5;:10;;;;;;;;:17;:50;30150:22;:3;30158:13;30150:22;:7;:22;:::i;:::-;30197:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30144:28;;-1:-1:-1;30197:62:0;;;;;;;;;;-1:-1:-1;30279:3:0;;-1:-1:-1;;;;;27192:1:0;27346;28838:1452;;;;:::o;25902:79::-;;;-1:-1:-1;;;;;25902:79:0;;:::o;28518:244::-;23620:11;;-1:-1:-1;;;;;23620:11:0;23606:10;:25;23598:52;;;;;-1:-1:-1;;;;;23598:52:0;;;;;;;;;;;;-1:-1:-1;;;;;23598:52:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;28621:16:0;;;;;;:6;:16;;;;;;;;28612:64;;;;;;-1:-1:-1;;;;;28612:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28689:16:0;;28708:5;28689:16;;;:6;:16;;;;;;;;;:24;;-1:-1:-1;;28689:24:0;;;28731:23;;;;;;;;;;;;;;;;;28518:244;:::o;25240:19::-;;;;:::o;30355:512::-;30419:10;30404:12;30454:15;;;:9;:15;;;;;;;;;30497:10;;;:5;:10;;;;;;:18;;;30536:10;;;30528:38;;;;;-1:-1:-1;;;;;30528:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;30627:10;;;;:5;:10;;;;;:20;;;:32;;30652:6;30627:32;:24;:32;:::i;:::-;30604:10;;;;:5;:10;;;;;:20;;;:55;;;;30670:18;;;;:22;30727:5;;:32;;-1:-1:-1;;;;;30727:5:0;30746:4;30752:6;30727:32;:18;:32;:::i;:::-;-1:-1:-1;;;;;30817:15:0;;;;;;:9;:15;;;;;;30808:51;;30827:4;30840:6;30848:10;:8;:10::i;:::-;30808:51;;;;;;-1:-1:-1;;;;;30808:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;30355:512;;;:::o;37698:337::-;-1:-1:-1;;;;;37848:15:0;;37785:7;37848:15;;;:9;:15;;;;;;37877:4;;37785:7;;;;;;37848:15;37877:7;37874:55;;;-1:-1:-1;37909:1:0;;-1:-1:-1;37909:1:0;;-1:-1:-1;37909:1:0;;-1:-1:-1;37909:1:0;;-1:-1:-1;37901:16:0;;37874:55;37947:10;;;;:5;:10;;;;;:18;;;;37966:20;;;;37987:19;;;;38007;;;;;37947:18;;-1:-1:-1;37966:20:0;-1:-1:-1;37987:19:0;;-1:-1:-1;38007:19:0;-1:-1:-1;37698:337:0;;;;;;:::o;24663:45::-;;;;;;;;;;;;;:::o;27903:145::-;28003:11;;:37;;27979:4;27971:21;;-1:-1:-1;;;;;28003:11:0;;:37;;;;;27971:21;;27944:23;28003:37;27944:23;28003:37;27971:21;28003:11;:37;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28003:37:0;27903:145;:::o;25392:38::-;;;;:::o;33150:1639::-;33337:4;-1:-1:-1;;;;;33337:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33337:25:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33337:25:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;33337:25:0;33324:9;:38;;33315:90;;;;-1:-1:-1;;;;;33315:90:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33461:12;33476:33;33498:10;33476:21;:33::i;:::-;33571:15;;;;:9;:15;;;;;;33461:48;;-1:-1:-1;33571:20:0;33563:63;;;;;-1:-1:-1;;;;;33563:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;33682:10;33779:19;33682:10;33779:13;:19::i;:::-;-1:-1:-1;;;;;;33851:15:0;;33837:11;33851:15;;;:9;:15;;;;;;;;;33928;;;:10;:15;;;;;:21;;;;;;;;;;;;:30;33920:73;;;;;-1:-1:-1;;;;;33920:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;34070:15;;;;:10;:15;;;;;;;;:21;;;;;;;;:28;;-1:-1:-1;;34070:28:0;;;34094:4;34070:28;;;;;;34109:9;:15;;;;;;:21;;;34144:10;;;:5;:10;;;;;;;:15;;;:22;;;34177:20;;;:22;;34070:28;34177:22;;;;;;;;;;;;;;;34212:19;:21;;;;;;;;34279:15;;:20;34276:328;;;34347:7;34514:2;34500:17;;34494:24;34568;34579:4;34584:7;34568:10;:24::i;:::-;;34276:328;;;34614:13;34630:10;;;:5;:10;;;;;;;;:15;;;34721:12;;;;;;;:17;;;34740;;;;34759:20;;34686:95;;;;;-1:-1:-1;;;;;34686:95:0;;;;;;;;;;;;;;;;;;;;;;34721:17;;;;34686:95;;;;;;;;;;;;;;;;;;;;;;33150:1639;;;;;;:::o;30921:268::-;31017:4;31039:12;31054:20;:7;:18;:20::i;:::-;31089:15;;;;:9;:15;;;;;;31039:35;;-1:-1:-1;31089:20:0;31085:96;;;31132:4;31124:13;;;;;31085:96;31175:5;31167:14;;;30921:268;;;;:::o;25992:33::-;;;-1:-1:-1;;;;;25992:33:0;;:::o;27412:139::-;27512:5;;:30;;;-1:-1:-1;;;;;27512:30:0;;27536:4;27512:30;;;;;;27479:7;;-1:-1:-1;;;;;27512:5:0;;:15;;:30;;;;;;;;;;;;;;:5;:30;;;5:2:-1;;;;30:1;27;20:12;5:2;27512:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27512:30:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27512:30:0;;-1:-1:-1;27412:139:0;:::o;25306:38::-;;;;:::o;25556:32::-;;;;:::o;25488:38::-;;;;:::o;36852:227::-;27299:10;36949:4;27292:18;;;:6;:18;;;;;;;;27284:51;;;;;;;-1:-1:-1;;;;;27284:51:0;;;;;;;;;;;;-1:-1:-1;;;;;27284:51:0;;;;;;;;;;;;;;;36972:19;36986:4;36972:13;:19::i;:::-;-1:-1:-1;;;;;;;37017:15:0;37002:11;37017:15;;;:9;:15;;;;;;;;;37051:10;;:5;:10;;;;;:15;;;:19;;;36852:227::o;31983:148::-;23620:11;;-1:-1:-1;;;;;23620:11:0;23606:10;:25;23598:52;;;;;-1:-1:-1;;;;;23598:52:0;;;;;;;;;;;;-1:-1:-1;;;;;23598:52:0;;;;;;;;;;;;;;;32087:17;:36;31983:148::o;23678:256::-;23620:11;;-1:-1:-1;;;;;23620:11:0;23606:10;:25;23598:52;;;;;-1:-1:-1;;;;;23598:52:0;;;;;;;;;;;;-1:-1:-1;;;;;23598:52:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;23769:24:0;;;;23761:68;;;;;-1:-1:-1;;;;;23761:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;23867:11;;;23845:46;;-1:-1:-1;;;;;23845:46:0;;;;23867:11;;;23845:46;;;23902:11;:24;;-1:-1:-1;;;;;;23902:24:0;-1:-1:-1;;;;;23902:24:0;;;;;;;;;;23678:256::o;25858:35::-;;;;:::o;25160:32::-;;;;:::o;24564:39::-;;;;;;;;;;;;;;;:::o;37343:347::-;-1:-1:-1;;;;;37474:15:0;;37434:7;37474:15;;;:9;:15;;;;;;37503:4;;:7;37500:48;;;37527:9;;;;;;37500:48;37560:11;37572:10;;;:5;:10;;;;;:15;;;37602:7;;37598:48;;;37625:9;;;;;;;37598:48;37666:10;;;;:5;:10;;;;;:15;;;;37343:347;-1:-1:-1;;;37343:347:0:o;25808:36::-;;;;:::o;38043:139::-;38156:17;;38043:139;:::o;25057:64::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;34885:412::-;27299:10;35010:4;27292:18;;;:6;:18;;;;;;;;27284:51;;;;;;;-1:-1:-1;;;;;27284:51:0;;;;;;;;;;;;-1:-1:-1;;;;;27284:51:0;;;;;;;;;;;;;;;35034:21;35064:7;;35034:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;-1:-1;35034:38:0;;-1:-1:-1;;;;;35215:2:0;35201:17;;35195:24;35264:25;35275:4;35281:7;35264:10;:25::i;:::-;35257:32;34885:412;-1:-1:-1;;;;;;34885:412:0:o;28223:243::-;23620:11;;-1:-1:-1;;;;;23620:11:0;23606:10;:25;23598:52;;;;;-1:-1:-1;;;;;23598:52:0;;;;;;;;;;;;-1:-1:-1;;;;;23598:52:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;28324:16:0;;;;;;:6;:16;;;;;;;;28323:17;28314:70;;;;-1:-1:-1;;;;;28314:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28397:16:0;;;;;;28416:4;28397:16;;;;;;;;;:23;;-1:-1:-1;;28397:23:0;;;;;;;28438:20;;;;;;;;;;;;;;;;;28223:243;:::o;25727:38::-;;;;:::o;37093:242::-;-1:-1:-1;;;;;37220:15:0;;37180:7;37220:15;;;:9;:15;;;;;;37249:4;;:7;37246:47;;;37272:9;;;;;;37246:47;37311:10;;;;:5;:10;;;;;:15;;;;37093:242;-1:-1:-1;;37093:242:0:o;27623:246::-;27714:5;;27670:15;;-1:-1:-1;;;;;27706:32:0;;;27714:5;;27706:32;;27698:59;;;;;-1:-1:-1;;;;;27698:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;27780:30;;;-1:-1:-1;;;;;27780:30:0;;27804:4;27780:30;;;;;;-1:-1:-1;;;;;27780:15:0;;;;;:30;;;;;;;;;;;;;;:15;:30;;;5:2:-1;;;;30:1;27;20:12;5:2;27780:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27780:30:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27780:30:0;27840:11;;27780:30;;-1:-1:-1;27821:40:0;;-1:-1:-1;;;;;27821:18:0;;;;27840:11;27780:30;27821:40;:18;:40;:::i;31719:197::-;23620:11;;-1:-1:-1;;;;;23620:11:0;23606:10;:25;23598:52;;;;;-1:-1:-1;;;;;23598:52:0;;;;;;;;;;;;-1:-1:-1;;;;;23598:52:0;;;;;;;;;;;;;;;31837:17;:30;;;;31878:17;:30;31719:197::o;32196:111::-;23620:11;;-1:-1:-1;;;;;23620:11:0;23606:10;:25;23598:52;;;;;-1:-1:-1;;;;;23598:52:0;;;;;;;;;;;;-1:-1:-1;;;;;23598:52:0;;;;;;;;;;;;;;;32279:5;:20;;-1:-1:-1;;;;;;32279:20:0;-1:-1:-1;;;;;32279:20:0;;;;;;;;;;32196:111::o;5025:132::-;5083:7;5110:39;5114:1;5117;5110:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;5103:46;;5025:132;;;;;:::o;4086:471::-;4144:7;4389:6;;4385:47;;;-1:-1:-1;4419:1:0;4412:8;;4385:47;4456:5;;;4460:1;4456;:5;4480;;;;;;;;:10;4472:56;;;;-1:-1:-1;;;;;4472:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2714:181;2772:7;2804:5;;;2828:6;;;;2820:46;;;;;-1:-1:-1;;;;;2820:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;36459:381;-1:-1:-1;;;;;36557:15:0;;36531:4;36557:15;;;:9;:15;;;;;;:20;36553:280;;;-1:-1:-1;36603:4:0;:6;;;;;;;;;;-1:-1:-1;;;;;36624:15:0;;36603:4;36624:15;;;:9;:15;;;;;;;;:22;;;36661:11;;;:5;:11;;;;;;:23;;-1:-1:-1;;;;;;36661:23:0;;;;;;;36761:13;;36553:280;-1:-1:-1;36815:5:0;36807:14;;20103:176;20212:58;;;-1:-1:-1;;;;;20212:58:0;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;20212:58:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;;;179:29;160:49;;20186:85:0;;20205:5;;20186:18;:85::i;:::-;20103:176;;;:::o;11510:1947::-;11689:12;;11601:7;;11653:6;;11784:2;11773:13;;;;;:28;;;11800:1;11790:7;:11;11773:28;11764:84;;;;;;-1:-1:-1;;;;;11764:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11917:5;11923:1;11917:8;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11917:16:0;;11929:4;11917:16;;;11913:185;;;11967:5;11973:1;11967:8;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11967:16:0;;11979:4;11967:16;;;;11959:56;;;;;;;-1:-1:-1;;;;;11959:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;12038:5;12044:1;12038:8;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12038:16:0;;12050:4;12038:16;;;;12030:56;;;;;;;-1:-1:-1;;;;;12030:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;12187:18;;12254:981;12278:7;12274:1;:11;12254:981;;;12357:8;;-1:-1:-1;;;12357:15:0;:5;;12363:1;;12357:8;;;;;;;;;;;;;;;-1:-1:-1;;;;;12357:15:0;;;:34;;;;-1:-1:-1;12376:8:0;;-1:-1:-1;;;;;12376:15:0;:5;;12382:1;;12376:8;;;;;;;;;;;;;;;-1:-1:-1;;;;;12376:15:0;;;12357:34;12353:871;;;12493:5;12499:1;12493:8;;;;;;;;;;;;;;;;;;;12487:15;;12505:2;12487:20;12482:26;;12471:5;12477:1;12471:8;;;;;;;;;;;;;;:37;-1:-1:-1;;;;;12471:37:0;;;;;;;;-1:-1:-1;12590:22:0;;;12586:69;;12651:4;12635:20;;12586:69;12353:871;;;12786:8;;-1:-1:-1;;;;;12786:15:0;:5;;12792:1;;12786:8;;;;;;;;;;;;;;;-1:-1:-1;;;;;12786:15:0;;;:34;;;;-1:-1:-1;12805:8:0;;-1:-1:-1;;;;;12805:15:0;:5;;12811:1;;12805:8;;;;;;;;;;;;;;;-1:-1:-1;;;;;12805:15:0;;;12786:34;12785:128;;;-1:-1:-1;12878:8:0;;-1:-1:-1;;;;;12878:15:0;:5;;12884:1;;12878:8;;;;;;;;;;;;;;;-1:-1:-1;;;;;12878:15:0;;;:34;;;;-1:-1:-1;12897:8:0;;-1:-1:-1;;;;;12897:15:0;:5;;12903:1;;12897:8;;;;;;;;;;;;;;;-1:-1:-1;;;;;12897:15:0;;;12878:34;12696:295;;;;;;-1:-1:-1;;;;;12696:295:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13099:22;;;;:62;;-1:-1:-1;13126:8:0;;-1:-1:-1;;;;;13126:15:0;:5;;13132:1;;13126:8;;;;;;;;;;;;;;;-1:-1:-1;;;;;13126:15:0;;;:34;;;-1:-1:-1;13145:8:0;;-1:-1:-1;;;;;13145:15:0;:5;;13151:1;;13145:8;;;;;;;;;;;;;;;-1:-1:-1;;;;;13145:15:0;;;13126:34;13095:109;;;13200:4;13184:20;;13095:109;12287:3;;12254:981;;;-1:-1:-1;13280:4:0;13263:21;;;;13255:63;;;;;-1:-1:-1;;;;;13255:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13411:2:0;13400:14;13394:21;;11510:1947;-1:-1:-1;;11510:1947:0:o;35391:1048::-;35545:4;35464:10;27160:20;;;27152:29;;;;;;35502:4;-1:-1:-1;;;;;27160:20:0;;;;27152:29;;;;;;35642:19;35656:4;35642:13;:19::i;:::-;-1:-1:-1;;;;;;35716:15:0;;35702:11;35716:15;;;:9;:15;;;;;;;;;35746:10;;;:5;:10;;;;;;:15;;;:20;35742:64;;35789:5;35782:12;;;;;35742:64;35822:15;;;;:9;:15;;;;;;:20;35818:103;;;35897:12;;35890:19;;35818:103;35939:13;35955:15;;;:9;:15;;;;;;35985:12;;;35981:75;;;-1:-1:-1;36031:12:0;;36021:23;;;;:9;:23;;;;;;35981:75;36075:10;;;;:5;:10;;;;;;:15;;;;:23;;;36130:12;;;;;:21;;;:23;;;;;;36184:17;;36215:14;;36212:73;;36246:16;;;;:5;:16;;;;;:25;;:27;;;;;;36212:73;36370:12;;;;:5;:12;;;;;;;;;:17;;;36389;;;;36333:74;;;;;-1:-1:-1;;;;;36333:74:0;;;;;;;;;;;;;;;;;;;;;;36370:17;;;;36333:74;;;;;;;;;;;;;;;;;;;36427:4;36420:11;;;;;27192:1;;35391:1048;;;;;:::o;5687:345::-;5773:7;5875:12;5868:5;;;5860:28;;;;-1:-1:-1;;;;;5860:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;5860:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5899:9;5915:1;5911;:5;;;;;;;;;5687:345;-1:-1:-1;;;;;5687:345:0:o;22142:1114::-;22746:27;22754:5;-1:-1:-1;;;;;22746:25:0;;:27::i;:::-;22738:71;;;;;;;-1:-1:-1;;;;;22738:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;22883:12;22897:23;22932:5;-1:-1:-1;;;;;22924:19:0;22944:4;22924:25;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;22924:25:0;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;22882:67:0;;;;22968:7;22960:52;;;;;;;-1:-1:-1;;;;;22960:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23029:17;;:21;23025:224;;23171:10;23160:30;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23160:30:0;23152:85;;;;;;-1:-1:-1;;;;;23152:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22142:1114;;;;:::o;17148:619::-;17208:4;17676:20;;17519:66;17716:23;;;;;;:42;;-1:-1:-1;17743:15:0;;;17716:42;17708:51;17148:619;-1:-1:-1;;;;17148:619:0:o
Swarm Source
bzzr://9270a2da8790b59fae5d92c828d6c8f20c5c34acb9c33f9a7090d403a283d66c
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
POL | 100.00% | $0.515451 | 0.6 | $0.30927 |
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.