More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 88 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Unstake | 18115666 | 526 days ago | IN | 0 ETH | 0.00101225 | ||||
Unstake | 17669424 | 588 days ago | IN | 0 ETH | 0.00155694 | ||||
Unstake | 17669383 | 588 days ago | IN | 0 ETH | 0.00213492 | ||||
Unstake | 17663000 | 589 days ago | IN | 0 ETH | 0.00129859 | ||||
Unstake | 17662955 | 589 days ago | IN | 0 ETH | 0.00133624 | ||||
Unstake | 17662947 | 589 days ago | IN | 0 ETH | 0.00119101 | ||||
Unstake | 17662944 | 589 days ago | IN | 0 ETH | 0.00130222 | ||||
Unstake | 17662941 | 589 days ago | IN | 0 ETH | 0.00143428 | ||||
Claim Any Token | 17484907 | 614 days ago | IN | 0 ETH | 0.00090545 | ||||
Claim Any Token | 17484905 | 614 days ago | IN | 0 ETH | 0.00091062 | ||||
Claim | 17008325 | 682 days ago | IN | 0 ETH | 0.0048187 | ||||
Claim | 16404918 | 766 days ago | IN | 0 ETH | 0.00476785 | ||||
Claim | 16249733 | 788 days ago | IN | 0 ETH | 0.00214951 | ||||
Unstake | 16249723 | 788 days ago | IN | 0 ETH | 0.0014499 | ||||
Unstake | 16237656 | 790 days ago | IN | 0 ETH | 0.00027322 | ||||
Unstake | 16237656 | 790 days ago | IN | 0 ETH | 0.00164001 | ||||
Unstake | 16206948 | 794 days ago | IN | 0 ETH | 0.00150599 | ||||
Unstake | 16180259 | 798 days ago | IN | 0 ETH | 0.00239666 | ||||
Unstake | 16180230 | 798 days ago | IN | 0 ETH | 0.00194778 | ||||
Unstake | 16159467 | 801 days ago | IN | 0 ETH | 0.00196007 | ||||
Unstake | 16092969 | 810 days ago | IN | 0 ETH | 0.0015773 | ||||
Unstake | 15986687 | 825 days ago | IN | 0 ETH | 0.00165432 | ||||
Unstake | 15978232 | 826 days ago | IN | 0 ETH | 0.00210164 | ||||
Unstake | 15943643 | 831 days ago | IN | 0 ETH | 0.00279617 | ||||
Unstake | 15797021 | 851 days ago | IN | 0 ETH | 0.00468356 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
ConstantReturnStaking
Compiler Version
v0.6.11+commit.5ef660b1
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-12-13 */ // SPDX-License-Identifier: BSD-3-Clause pragma solidity 0.6.11; /** * @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. */ 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. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { 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. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } /** * @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) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @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]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.3._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.3._ */ function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @dev Library for managing * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive * types. * * Sets have the following properties: * * - Elements are added, removed, and checked for existence in constant time * (O(1)). * - Elements are enumerated in O(n). No guarantees are made on the ordering. * * ``` * contract Example { * // Add the library methods * using EnumerableSet for EnumerableSet.AddressSet; * * // Declare a set state variable * EnumerableSet.AddressSet private mySet; * } * ``` * * As of v3.0.0, only sets of type `address` (`AddressSet`) and `uint256` * (`UintSet`) are supported. */ library EnumerableSet { // To implement this library for multiple types with as little code // repetition as possible, we write it in terms of a generic Set type with // bytes32 values. // The Set implementation uses private functions, and user-facing // implementations (such as AddressSet) are just wrappers around the // underlying Set. // This means that we can only create new EnumerableSets for types that fit // in bytes32. struct Set { // Storage of set values bytes32[] _values; // Position of the value in the `values` array, plus 1 because index 0 // means a value is not in the set. mapping (bytes32 => uint256) _indexes; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); // The value is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value set._indexes[value] = set._values.length; return true; } else { return false; } } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function _remove(Set storage set, bytes32 value) private returns (bool) { // We read and store the value's index to prevent multiple reads from the same storage slot uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { // Equivalent to contains(set, value) // To delete an element from the _values array in O(1), we swap the element to delete with the last one in // the array, and then remove the last element (sometimes called as 'swap and pop'). // This modifies the order of the array, as noted in {at}. uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement. bytes32 lastvalue = set._values[lastIndex]; // Move the last value to the index where the value to delete is set._values[toDeleteIndex] = lastvalue; // Update the index for the moved value set._indexes[lastvalue] = toDeleteIndex + 1; // All indexes are 1-based // Delete the slot where the moved value was stored set._values.pop(); // Delete the index for the deleted slot delete set._indexes[value]; return true; } else { return false; } } /** * @dev Returns true if the value is in the set. O(1). */ function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } /** * @dev Returns the number of values on the set. O(1). */ function _length(Set storage set) private view returns (uint256) { return set._values.length; } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function _at(Set storage set, uint256 index) private view returns (bytes32) { require(set._values.length > index, "EnumerableSet: index out of bounds"); return set._values[index]; } // AddressSet struct AddressSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(value))); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(value))); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(value))); } /** * @dev Returns the number of values in the set. O(1). */ function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint256(_at(set._inner, index))); } // UintSet struct UintSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } /** * @dev Returns the number of values on the set. O(1). */ function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of "user permissions". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0)); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } } /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @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 IERC20;` 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)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ 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. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "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"); } } } interface IUniswapV2Router { function WETH() external pure returns (address); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); } //interface BuybackContract { // function depositByContract(address account, uint amount) external; //} contract ConstantReturnStaking is Ownable { using Address for address; using SafeMath for uint; using EnumerableSet for EnumerableSet.AddressSet; using SafeERC20 for IERC20; event Stake(address account, uint amount); event Unstake(address account, uint amount); event RewardsTransferred(address indexed holder, uint amount); event ReferralFeeTransferred(address indexed referrer, uint amount); event Reinvest(address indexed holder, uint amount); event StakingFeeChanged(uint newFee); event UnstakingFeeChanged(uint newFee); event ReferralFeeChanged(uint newFee); event UniswapV2RouterChanged(address router); event LockupTimeChanged(uint _newLockupTime); event TrustedDepositContractAdded(address contractAddress); event TrustedDepositContractRemoved(address contractAddress); //event BuybackContractChanged(address contractAddress); event FeeRecipientAddressChanged(address newAddress); event EmergencyDeclared(address indexed owner); // ============================= CONTRACT VARIABLES ============================== // stake token contract address address public TRUSTED_DEPOSIT_TOKEN_ADDRESS = 0x961C8c0B1aaD0c0b10a51FeF6a867E3091BCef17; address public TRUSTED_REWARD_TOKEN_ADDRESS = 0xBD100d061E120b2c67A24453CF6368E63f1Be056; //address public TRUSTED_BUYBACK_CONTRACT_ADDRESS; // earnings reward rate uint public REWARD_RATE_X_100 = 2500; uint public REWARD_INTERVAL = 365 days; // staking fee uint public STAKING_FEE_RATE_X_100 = 0; // unstaking fee uint public UNSTAKING_FEE_RATE_X_100 = 0; // this portion of earned rewards go to referrer uint public REFERRAL_FEE_RATE_X_100 = 500; // unstaking possible after LOCKUP_TIME uint public LOCKUP_TIME = 3 days; uint public constant EMERGENCY_WAIT_TIME = 3 days; // If there are any undistributed or unclaimed tokens left in contract after this time // Admin can claim them uint public constant adminCanClaimAfter = 395 days; // Uniswap v2 Router IUniswapV2Router public uniswapV2Router = IUniswapV2Router(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // ========================= END CONTRACT VARIABLES ============================== address public feeRecipientAddress; uint public totalClaimedRewards = 0; uint public totalClaimedReferralFee = 0; uint public immutable contractStartTime; bool public isEmergency = false; // Contracts are not allowed to deposit, claim or withdraw modifier noContractsAllowed() { require(!(address(msg.sender).isContract()) && tx.origin == msg.sender, "No Contracts Allowed!"); _; } modifier notDuringEmergency() { require(!isEmergency, "Cannot execute during emergency!"); _; } EnumerableSet.AddressSet private holders; mapping (address => uint) public depositedTokens; mapping (address => uint) public stakingTime; mapping (address => uint) public lastClaimedTime; mapping (address => uint) public totalEarnedTokens; mapping (address => uint) public rewardsPendingClaim; mapping (address => address) public referrals; mapping (address => uint) public totalReferralFeeEarned; mapping (address => EnumerableSet.AddressSet) private activeReferredAddressesOfUser; mapping (address => EnumerableSet.AddressSet) private totalReferredAddressesOfUser; mapping (address => bool) public isTrustedDepositContract; uint public adminClaimableTime; constructor( address _uniswapV2RouterAddress, address _feeRecipientAddress, address trustedDepositTokenAddress, address trustedRewardTokenAddress, uint referralFeeRateX100, uint stakingFeeRateX100, uint unstakingFeeRateX100, uint rewardRateX100, uint rewardInterval, uint lockupTime ) public { setUniswapV2Router(IUniswapV2Router(_uniswapV2RouterAddress)); setFeeRecipientAddress(_feeRecipientAddress); setStakingFeeRateX100(stakingFeeRateX100); setUnstakingFeeRateX100(unstakingFeeRateX100); setReferralFeeRateX100(referralFeeRateX100); require(trustedDepositTokenAddress != address(0), "Invalid deposit token address!"); require(trustedRewardTokenAddress != address(0), "Invalid reward token address!"); TRUSTED_DEPOSIT_TOKEN_ADDRESS = trustedDepositTokenAddress; TRUSTED_REWARD_TOKEN_ADDRESS = trustedRewardTokenAddress; REWARD_RATE_X_100 = rewardRateX100; REWARD_INTERVAL = rewardInterval; require(REWARD_INTERVAL <= 365 days, "Contract must expire in less than 365 days!"); setLockupTime(lockupTime); contractStartTime = now; //require(adminCanClaimAfter <= 395 days, "Admin Claimable Time should be less than 395 days!"); adminClaimableTime = now.add(adminCanClaimAfter); } function setFeeRecipientAddress(address newFeeRecipientAddress) public onlyOwner { require(newFeeRecipientAddress != address(0), "Invalid address!"); feeRecipientAddress = newFeeRecipientAddress; emit FeeRecipientAddressChanged(feeRecipientAddress); } //function setBuybackContractAddress(address trustedBuybackContractAddress) external onlyOwner { // require(trustedBuybackContractAddress != address(0), "Invalid address!"); // TRUSTED_BUYBACK_CONTRACT_ADDRESS = trustedBuybackContractAddress; // emit BuybackContractChanged(TRUSTED_BUYBACK_CONTRACT_ADDRESS); //} function setStakingFeeRateX100(uint _newStakingFeeRateX100) public onlyOwner { require(_newStakingFeeRateX100 < 100e2, "New Staking fee too much!"); STAKING_FEE_RATE_X_100 = _newStakingFeeRateX100; emit StakingFeeChanged(STAKING_FEE_RATE_X_100); } function setUnstakingFeeRateX100(uint _newUnstakingFeeRateX100) public onlyOwner { require(_newUnstakingFeeRateX100 < 100e2, "New Unstaking fee too much!"); UNSTAKING_FEE_RATE_X_100 = _newUnstakingFeeRateX100; emit UnstakingFeeChanged(UNSTAKING_FEE_RATE_X_100); } function setReferralFeeRateX100(uint _newReferralFeeRateX100) public onlyOwner { require(_newReferralFeeRateX100 < 100e2, "Too much referral fee!"); REFERRAL_FEE_RATE_X_100 = _newReferralFeeRateX100; emit ReferralFeeChanged(REFERRAL_FEE_RATE_X_100); } function setUniswapV2Router(IUniswapV2Router _newUniswapV2Router) public onlyOwner { require(address(_newUniswapV2Router) != address(0), "Invalid router!"); uniswapV2Router = _newUniswapV2Router; emit UniswapV2RouterChanged(address(uniswapV2Router)); } function setLockupTime(uint _newLockupTime) public onlyOwner { require(_newLockupTime <= 90 days, "Lockup Time too long!"); LOCKUP_TIME = _newLockupTime; emit LockupTimeChanged(LOCKUP_TIME); } function addTrustedDepositContractAddress(address _address) external onlyOwner { isTrustedDepositContract[_address] = true; emit TrustedDepositContractAdded(_address); } function removeTrustedDepositContractAddress(address _address) external onlyOwner { isTrustedDepositContract[_address] = false; emit TrustedDepositContractRemoved(_address); } modifier onlyTrustedDepositContract() { require(isTrustedDepositContract[msg.sender], "Not trusted deposit contract!"); _; } function setContractVariables( uint lockupTime, uint referralFeeRateX100, uint stakingFeeRateX100, uint unstakingFeeRateX100, address router, address _feeRecipientAddress ) external onlyOwner { setLockupTime(lockupTime); setReferralFeeRateX100(referralFeeRateX100); setStakingFeeRateX100(stakingFeeRateX100); setUnstakingFeeRateX100(unstakingFeeRateX100); setUniswapV2Router(IUniswapV2Router(router)); setFeeRecipientAddress(_feeRecipientAddress); } function declareEmergency() external onlyOwner notDuringEmergency { isEmergency = true; adminClaimableTime = now.add(EMERGENCY_WAIT_TIME); LOCKUP_TIME = 0; emit EmergencyDeclared(owner); } function doSwap(address fromToken, address toToken, uint fromTokenAmount, uint amountOutMin, uint deadline) private returns (uint _toTokenReceived) { if (fromToken == toToken) { return fromTokenAmount; } IERC20(fromToken).safeApprove(address(uniswapV2Router), 0); IERC20(fromToken).safeApprove(address(uniswapV2Router), fromTokenAmount); uint oldToTokenBalance = IERC20(toToken).balanceOf(address(this)); address[] memory path; if (fromToken == uniswapV2Router.WETH() || toToken == uniswapV2Router.WETH()) { path = new address[](2); path[0] = fromToken; path[1] = toToken; } else { path = new address[](3); path[0] = fromToken; path[1] = uniswapV2Router.WETH(); path[2] = toToken; } uniswapV2Router.swapExactTokensForTokens(fromTokenAmount, amountOutMin, path, address(this), deadline); uint newToTokenBalance = IERC20(toToken).balanceOf(address(this)); uint toTokenReceived = newToTokenBalance.sub(oldToTokenBalance); return toTokenReceived; } function updateAccount(address account, uint _amountOutMin_referralFee, uint _deadline) private { uint pendingDivs = getPendingDivs(account); if (pendingDivs > 0) { uint referralFee = pendingDivs.mul(REFERRAL_FEE_RATE_X_100).div(100e2); uint pendingDivsAfterFee = pendingDivs.sub(referralFee); bool success = transferReferralFeeIfPossible(referrals[account], referralFee, _amountOutMin_referralFee, _deadline); uint amount = pendingDivs; if (success) { amount = pendingDivsAfterFee; } rewardsPendingClaim[account] = rewardsPendingClaim[account].add(amount); totalEarnedTokens[account] = totalEarnedTokens[account].add(amount); totalClaimedRewards = totalClaimedRewards.add(amount); } lastClaimedTime[account] = now; } function transferReferralFeeIfPossible(address account, uint amount, uint _amountOutMin_referralFee, uint _deadline) private returns (bool) { if (account != address(0) && amount > 0) { // swap to DYP here uint platformTokenReceived = doSwap(TRUSTED_REWARD_TOKEN_ADDRESS, TRUSTED_DEPOSIT_TOKEN_ADDRESS, amount, _amountOutMin_referralFee, _deadline); totalReferralFeeEarned[account] = totalReferralFeeEarned[account].add(platformTokenReceived); IERC20(TRUSTED_DEPOSIT_TOKEN_ADDRESS).safeTransfer(account, platformTokenReceived); totalClaimedReferralFee = totalClaimedReferralFee.add(platformTokenReceived); emit ReferralFeeTransferred(account, platformTokenReceived); return true; } return false; } function getPendingDivs(address _holder) public view returns (uint) { if (!holders.contains(_holder)) return 0; if (depositedTokens[_holder] == 0) return 0; uint timeDiff; uint stakingEndTime = contractStartTime.add(REWARD_INTERVAL); uint _now = now; if (_now > stakingEndTime) { _now = stakingEndTime; } if (lastClaimedTime[_holder] >= _now) { timeDiff = 0; } else { timeDiff = _now.sub(lastClaimedTime[_holder]); } uint stakedAmount = depositedTokens[_holder]; uint pendingDivs = stakedAmount .mul(REWARD_RATE_X_100) .mul(timeDiff) .div(REWARD_INTERVAL) .div(1e4); return pendingDivs; } function getTotalPendingDivs(address _holder) external view returns (uint) { uint pending = getPendingDivs(_holder); uint awaitingClaim = rewardsPendingClaim[_holder]; return pending.add(awaitingClaim); } function getNumberOfHolders() external view returns (uint) { return holders.length(); } function getNumberOfReferredStakers(address referrer) external view returns (uint _activeStakers, uint _totalStakers) { _activeStakers = activeReferredAddressesOfUser[referrer].length(); _totalStakers = totalReferredAddressesOfUser[referrer].length(); } function getReferredStaker(address account, uint i) external view returns (address _staker, uint _totalEarned) { _staker = totalReferredAddressesOfUser[account].at(i); _totalEarned = totalEarnedTokens[_staker]; } function getActiveReferredStaker(address account, uint i) external view returns (address _staker, uint _totalEarned) { _staker = activeReferredAddressesOfUser[account].at(i); _totalEarned = totalEarnedTokens[_staker]; } function depositByContract(address account, uint amount, uint _amountOutMin_stakingReferralFee, uint _deadline) external onlyTrustedDepositContract { require(amount > 0, "Amount must not be 0!"); require(account != address(0), "Invalid account!"); IERC20(TRUSTED_DEPOSIT_TOKEN_ADDRESS).safeTransferFrom(msg.sender, address(this), amount); updateAccount(account, _amountOutMin_stakingReferralFee, _deadline); depositedTokens[account] = depositedTokens[account].add(amount); holders.add(account); stakingTime[account] = now; emit Stake(account, amount); } function stake(uint amountToStake, address referrer, uint _amountOutMin_referralFee, uint _deadline) external noContractsAllowed notDuringEmergency { require(amountToStake > 0, "Cannot deposit 0 Tokens"); IERC20(TRUSTED_DEPOSIT_TOKEN_ADDRESS).safeTransferFrom(msg.sender, address(this), amountToStake); updateAccount(msg.sender, _amountOutMin_referralFee, _deadline); uint fee = amountToStake.mul(STAKING_FEE_RATE_X_100).div(1e4); uint amountAfterFee = amountToStake.sub(fee); if (fee > 0) { IERC20(TRUSTED_DEPOSIT_TOKEN_ADDRESS).safeTransfer(feeRecipientAddress, fee); } //uint _75Percent = amountAfterFee.mul(75e2).div(100e2); //uint contractDepositAmount = doSwap(TRUSTED_DEPOSIT_TOKEN_ADDRESS, TRUSTED_REWARD_TOKEN_ADDRESS, _75Percent, _amountOutMin_75Percent, _deadline); //IERC20(TRUSTED_REWARD_TOKEN_ADDRESS).safeApprove(TRUSTED_BUYBACK_CONTRACT_ADDRESS, 0); //IERC20(TRUSTED_REWARD_TOKEN_ADDRESS).safeApprove(TRUSTED_BUYBACK_CONTRACT_ADDRESS, contractDepositAmount); //BuybackContract(TRUSTED_BUYBACK_CONTRACT_ADDRESS).depositByContract(msg.sender, contractDepositAmount); //uint remainingAmount = amountAfterFee.sub(_75Percent); depositedTokens[msg.sender] = depositedTokens[msg.sender].add(amountAfterFee); holders.add(msg.sender); if (referrals[msg.sender] == address(0)) { referrals[msg.sender] = referrer; } totalReferredAddressesOfUser[referrals[msg.sender]].add(msg.sender); activeReferredAddressesOfUser[referrals[msg.sender]].add(msg.sender); stakingTime[msg.sender] = now; emit Stake(msg.sender, amountAfterFee); } function unstake(uint amountToWithdraw, uint _amountOutMin_referralFee, uint _deadline) external noContractsAllowed { require(depositedTokens[msg.sender] >= amountToWithdraw, "Invalid amount to withdraw"); require(now.sub(stakingTime[msg.sender]) > LOCKUP_TIME, "You recently staked, please wait before withdrawing."); updateAccount(msg.sender, _amountOutMin_referralFee, _deadline); uint fee = amountToWithdraw.mul(UNSTAKING_FEE_RATE_X_100).div(1e4); uint amountAfterFee = amountToWithdraw.sub(fee); if (fee > 0) { IERC20(TRUSTED_DEPOSIT_TOKEN_ADDRESS).safeTransfer(feeRecipientAddress, fee); } IERC20(TRUSTED_DEPOSIT_TOKEN_ADDRESS).safeTransfer(msg.sender, amountAfterFee); depositedTokens[msg.sender] = depositedTokens[msg.sender].sub(amountToWithdraw); if (holders.contains(msg.sender) && depositedTokens[msg.sender] == 0) { holders.remove(msg.sender); activeReferredAddressesOfUser[referrals[msg.sender]].remove(msg.sender); } emit Unstake(msg.sender, amountToWithdraw); } function claim(uint _amountOutMin_referralFee, uint _amountOutMin_claim, uint _deadline) external noContractsAllowed notDuringEmergency { updateAccount(msg.sender, _amountOutMin_referralFee, _deadline); uint amount = rewardsPendingClaim[msg.sender]; if (amount > 0) { rewardsPendingClaim[msg.sender] = 0; // swap to DYP here uint platformTokenReceived = doSwap(TRUSTED_REWARD_TOKEN_ADDRESS, TRUSTED_DEPOSIT_TOKEN_ADDRESS, amount, _amountOutMin_claim, _deadline); IERC20(TRUSTED_DEPOSIT_TOKEN_ADDRESS).safeTransfer(msg.sender, platformTokenReceived); emit RewardsTransferred(msg.sender, platformTokenReceived); } } function reInvest(uint _amountOutMin_referralFee, uint _amountOutMin_reinvest, uint _deadline) external noContractsAllowed notDuringEmergency { updateAccount(msg.sender, _amountOutMin_referralFee, _deadline); uint amount = rewardsPendingClaim[msg.sender]; if (amount > 0) { rewardsPendingClaim[msg.sender] = 0; // swap to DYP here uint platformTokenReceived = doSwap(TRUSTED_REWARD_TOKEN_ADDRESS, TRUSTED_DEPOSIT_TOKEN_ADDRESS, amount, _amountOutMin_reinvest, _deadline); // re-invest here depositedTokens[msg.sender] = depositedTokens[msg.sender].add(platformTokenReceived); // no lock time reset for reinvest // stakingTime[msg.sender] = now; emit Reinvest(msg.sender, platformTokenReceived); } } function getStakersList(uint startIndex, uint endIndex) public view returns (address[] memory stakers, uint[] memory stakingTimestamps, uint[] memory lastClaimedTimeStamps, uint[] memory stakedTokens) { require (startIndex < endIndex); uint length = endIndex.sub(startIndex); address[] memory _stakers = new address[](length); uint[] memory _stakingTimestamps = new uint[](length); uint[] memory _lastClaimedTimeStamps = new uint[](length); uint[] memory _stakedTokens = new uint[](length); for (uint i = startIndex; i < endIndex; i = i.add(1)) { address staker = holders.at(i); uint listIndex = i.sub(startIndex); _stakers[listIndex] = staker; _stakingTimestamps[listIndex] = stakingTime[staker]; _lastClaimedTimeStamps[listIndex] = lastClaimedTime[staker]; _stakedTokens[listIndex] = depositedTokens[staker]; } return (_stakers, _stakingTimestamps, _lastClaimedTimeStamps, _stakedTokens); } // admin can claim any tokens left in the contract after it expires or during emergency function claimAnyToken(address token, address recipient, uint amount) external onlyOwner { require(recipient != address(0), "Invalid Recipient"); require(now > adminClaimableTime, "Contract not expired yet!"); if (token == address(0)) { address payable _recipient = payable(recipient); _recipient.transfer(amount); return; } IERC20(token).safeTransfer(recipient, amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_uniswapV2RouterAddress","type":"address"},{"internalType":"address","name":"_feeRecipientAddress","type":"address"},{"internalType":"address","name":"trustedDepositTokenAddress","type":"address"},{"internalType":"address","name":"trustedRewardTokenAddress","type":"address"},{"internalType":"uint256","name":"referralFeeRateX100","type":"uint256"},{"internalType":"uint256","name":"stakingFeeRateX100","type":"uint256"},{"internalType":"uint256","name":"unstakingFeeRateX100","type":"uint256"},{"internalType":"uint256","name":"rewardRateX100","type":"uint256"},{"internalType":"uint256","name":"rewardInterval","type":"uint256"},{"internalType":"uint256","name":"lockupTime","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"}],"name":"EmergencyDeclared","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newAddress","type":"address"}],"name":"FeeRecipientAddressChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_newLockupTime","type":"uint256"}],"name":"LockupTimeChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"ReferralFeeChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"referrer","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ReferralFeeTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"holder","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Reinvest","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"holder","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RewardsTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Stake","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"StakingFeeChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"contractAddress","type":"address"}],"name":"TrustedDepositContractAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"contractAddress","type":"address"}],"name":"TrustedDepositContractRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"router","type":"address"}],"name":"UniswapV2RouterChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Unstake","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"UnstakingFeeChanged","type":"event"},{"inputs":[],"name":"EMERGENCY_WAIT_TIME","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LOCKUP_TIME","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REFERRAL_FEE_RATE_X_100","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REWARD_INTERVAL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REWARD_RATE_X_100","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STAKING_FEE_RATE_X_100","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TRUSTED_DEPOSIT_TOKEN_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TRUSTED_REWARD_TOKEN_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNSTAKING_FEE_RATE_X_100","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"addTrustedDepositContractAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"adminCanClaimAfter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"adminClaimableTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amountOutMin_referralFee","type":"uint256"},{"internalType":"uint256","name":"_amountOutMin_claim","type":"uint256"},{"internalType":"uint256","name":"_deadline","type":"uint256"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimAnyToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"declareEmergency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"_amountOutMin_stakingReferralFee","type":"uint256"},{"internalType":"uint256","name":"_deadline","type":"uint256"}],"name":"depositByContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"depositedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeRecipientAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"i","type":"uint256"}],"name":"getActiveReferredStaker","outputs":[{"internalType":"address","name":"_staker","type":"address"},{"internalType":"uint256","name":"_totalEarned","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumberOfHolders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"referrer","type":"address"}],"name":"getNumberOfReferredStakers","outputs":[{"internalType":"uint256","name":"_activeStakers","type":"uint256"},{"internalType":"uint256","name":"_totalStakers","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_holder","type":"address"}],"name":"getPendingDivs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"i","type":"uint256"}],"name":"getReferredStaker","outputs":[{"internalType":"address","name":"_staker","type":"address"},{"internalType":"uint256","name":"_totalEarned","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"startIndex","type":"uint256"},{"internalType":"uint256","name":"endIndex","type":"uint256"}],"name":"getStakersList","outputs":[{"internalType":"address[]","name":"stakers","type":"address[]"},{"internalType":"uint256[]","name":"stakingTimestamps","type":"uint256[]"},{"internalType":"uint256[]","name":"lastClaimedTimeStamps","type":"uint256[]"},{"internalType":"uint256[]","name":"stakedTokens","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_holder","type":"address"}],"name":"getTotalPendingDivs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isEmergency","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTrustedDepositContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastClaimedTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amountOutMin_referralFee","type":"uint256"},{"internalType":"uint256","name":"_amountOutMin_reinvest","type":"uint256"},{"internalType":"uint256","name":"_deadline","type":"uint256"}],"name":"reInvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"referrals","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"removeTrustedDepositContractAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewardsPendingClaim","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"lockupTime","type":"uint256"},{"internalType":"uint256","name":"referralFeeRateX100","type":"uint256"},{"internalType":"uint256","name":"stakingFeeRateX100","type":"uint256"},{"internalType":"uint256","name":"unstakingFeeRateX100","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"_feeRecipientAddress","type":"address"}],"name":"setContractVariables","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newFeeRecipientAddress","type":"address"}],"name":"setFeeRecipientAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newLockupTime","type":"uint256"}],"name":"setLockupTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newReferralFeeRateX100","type":"uint256"}],"name":"setReferralFeeRateX100","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newStakingFeeRateX100","type":"uint256"}],"name":"setStakingFeeRateX100","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IUniswapV2Router","name":"_newUniswapV2Router","type":"address"}],"name":"setUniswapV2Router","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newUnstakingFeeRateX100","type":"uint256"}],"name":"setUnstakingFeeRateX100","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountToStake","type":"uint256"},{"internalType":"address","name":"referrer","type":"address"},{"internalType":"uint256","name":"_amountOutMin_referralFee","type":"uint256"},{"internalType":"uint256","name":"_deadline","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakingTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalClaimedReferralFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalClaimedRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalEarnedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalReferralFeeEarned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountToWithdraw","type":"uint256"},{"internalType":"uint256","name":"_amountOutMin_referralFee","type":"uint256"},{"internalType":"uint256","name":"_deadline","type":"uint256"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a0604052600180546001600160a01b031990811673961c8c0b1aad0c0b10a51fef6a867e3091bcef171790915560028054821673bd100d061e120b2c67a24453cf6368e63f1be0561790556109c46003556301e133806004556000600581905560068190556101f46007556203f48060085560098054909216737a250d5630b4cf539739df2c5dacb4c659f2488d17909155600b819055600c55600d805460ff19169055348015620000b157600080fd5b5060405162003ab438038062003ab48339818101604052610140811015620000d857600080fd5b508051602082015160408301516060840151608085015160a086015160c087015160e088015161010089015161012090990151600080546001600160a01b0319163317905597989697959694959394929391929091620001418a6001600160e01b036200031616565b62000155896001600160e01b03620003d616565b62000169856001600160e01b036200049716565b6200017d846001600160e01b036200054116565b62000191866001600160e01b03620005eb16565b6001600160a01b038816620001ed576040805162461bcd60e51b815260206004820152601e60248201527f496e76616c6964206465706f73697420746f6b656e2061646472657373210000604482015290519081900360640190fd5b6001600160a01b03871662000249576040805162461bcd60e51b815260206004820152601d60248201527f496e76616c69642072657761726420746f6b656e206164647265737321000000604482015290519081900360640190fd5b600180546001600160a01b03808b166001600160a01b03199283161790925560028054928a1692909116919091179055600383905560048290556301e13380821115620002c85760405162461bcd60e51b815260040180806020018281038252602b81526020018062003a89602b913960400191505060405180910390fd5b620002dc816001600160e01b036200069516565b426080818152505062000302630208c080426200074160201b620021af1790919060201c565b601a5550620007a398505050505050505050565b6000546001600160a01b031633146200032e57600080fd5b6001600160a01b0381166200037c576040805162461bcd60e51b815260206004820152600f60248201526e496e76616c696420726f757465722160881b604482015290519081900360640190fd5b600980546001600160a01b0319166001600160a01b03838116919091179182905560408051929091168252517f49381de8f56ca0c45bdd955e613a01e042fdf45d2ae4b0cfd920226fe0ed2ede916020908290030190a150565b6000546001600160a01b03163314620003ee57600080fd5b6001600160a01b0381166200043d576040805162461bcd60e51b815260206004820152601060248201526f496e76616c696420616464726573732160801b604482015290519081900360640190fd5b600a80546001600160a01b0319166001600160a01b03838116919091179182905560408051929091168252517fafc54c644914e872610dbc4334999d957d145108fd88d63d83cc3a710dc6ee71916020908290030190a150565b6000546001600160a01b03163314620004af57600080fd5b612710811062000506576040805162461bcd60e51b815260206004820152601960248201527f4e6577205374616b696e672066656520746f6f206d7563682100000000000000604482015290519081900360640190fd5b60058190556040805182815290517f327680b8ba8221210809b2aae37f88a529ae9eec9a3a3fe952fe0a3a262b487f9181900360200190a150565b6000546001600160a01b031633146200055957600080fd5b6127108110620005b0576040805162461bcd60e51b815260206004820152601b60248201527f4e657720556e7374616b696e672066656520746f6f206d756368210000000000604482015290519081900360640190fd5b60068190556040805182815290517f0a9e89cff3f9f01bd1c6aeb9b71324bb138123c40d02eb478613fb3427b231009181900360200190a150565b6000546001600160a01b031633146200060357600080fd5b61271081106200065a576040805162461bcd60e51b815260206004820152601660248201527f546f6f206d75636820726566657272616c206665652100000000000000000000604482015290519081900360640190fd5b60078190556040805182815290517fd51125b9b3b3e2699a79428534dbc7cf5f2c1e3612ebeaf02853a94ea13fee749181900360200190a150565b6000546001600160a01b03163314620006ad57600080fd5b6276a70081111562000706576040805162461bcd60e51b815260206004820152601560248201527f4c6f636b75702054696d6520746f6f206c6f6e67210000000000000000000000604482015290519081900360640190fd5b60088190556040805182815290517fadbac78f382a6f10bef84ad4b704cac4817788ffec4f83ac665d7a1152dc44729181900360200190a150565b6000828201838110156200079c576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6080516132c6620007c3600039806109d652806113f452506132c66000f3fe608060405234801561001057600080fd5b50600436106102d65760003560e01c8063b7d3786e11610182578063dbcdc2cc116100e9578063f1bab2ec116100a2578063f5326ada1161007c578063f5326ada14610938578063f63de3ac14610940578063f749229e1461095d578063faf5ec0c1461099c576102d6565b8063f1bab2ec146108e4578063f2fde38b146108ec578063f3f91fa014610912576102d6565b8063dbcdc2cc14610829578063df4b70ba1461084f578063e7b62f5814610857578063e9dc18ec1461087d578063ebe6cad1146108b3578063efa9a9be146108bb576102d6565b8063ca7e08351161013b578063ca7e0835146107db578063ca9a2132146107e3578063d079490f146107eb578063d578ceab146107f3578063d7130e14146107fb578063db16caf214610803576102d6565b8063b7d3786e14610739578063bd97b37514610756578063c1665f401461077f578063c326bf4f14610787578063c6363892146107ad578063c80ed116146107d3576102d6565b80634fcfe7ae116102415780637e44b933116101fa57806398896d10116101d457806398896d10146106c85780639ca423b3146106ee578063a1ccb81314610714578063a2a5124114610731576102d6565b80637e44b933146106925780637fc505031461069a5780638da5cb5b146106c0576102d6565b80634fcfe7ae146105c457806355468afa146105fe578063583d42fd146106365780635dbdda691461065c5780635f9e8f82146106645780636270cd181461066c576102d6565b80632e9f87a6116102935780632e9f87a614610502578063308feec31461054857806331e244e5146105505780633ddb34221461055857806348f554d3146105815780634b62b70b146105a7576102d6565b80630c3d5157146102db5780631419841d146102f55780631694505e1461031d5780631808fdb8146103415780631911cf4a146103905780632a6b9bfd146104d6575b600080fd5b6102e36109d4565b60408051918252519081900360200190f35b61031b6004803603602081101561030b57600080fd5b50356001600160a01b03166109f8565b005b610325610ab6565b604080516001600160a01b039092168252519081900360200190f35b61036d6004803603604081101561035757600080fd5b506001600160a01b038135169060200135610ac5565b604080516001600160a01b03909316835260208301919091528051918290030190f35b6103b3600480360360408110156103a657600080fd5b5080359060200135610b13565b6040518080602001806020018060200180602001858103855289818151815260200191508051906020019060200280838360005b838110156103ff5781810151838201526020016103e7565b50505050905001858103845288818151815260200191508051906020019060200280838360005b8381101561043e578181015183820152602001610426565b50505050905001858103835287818151815260200191508051906020019060200280838360005b8381101561047d578181015183820152602001610465565b50505050905001858103825286818151815260200191508051906020019060200280838360005b838110156104bc5781810151838201526020016104a4565b505050509050019850505050505050505060405180910390f35b61036d600480360360408110156104ec57600080fd5b506001600160a01b038135169060200135610d97565b61031b600480360360c081101561051857600080fd5b508035906020810135906040810135906060810135906001600160a01b03608082013581169160a0013516610dc1565b6102e3610e16565b61031b610e27565b61031b6004803603606081101561056e57600080fd5b5080359060208101359060400135610ee4565b6102e36004803603602081101561059757600080fd5b50356001600160a01b031661104e565b61031b600480360360208110156105bd57600080fd5b5035611060565b6105ea600480360360208110156105da57600080fd5b50356001600160a01b0316611102565b604080519115158252519081900360200190f35b61031b6004803603608081101561061457600080fd5b506001600160a01b038135169060208101359060408101359060600135611117565b6102e36004803603602081101561064c57600080fd5b50356001600160a01b03166112ee565b6102e3611300565b6105ea611306565b6102e36004803603602081101561068257600080fd5b50356001600160a01b031661130f565b6102e3611321565b61031b600480360360208110156106b057600080fd5b50356001600160a01b0316611327565b610325611396565b6102e3600480360360208110156106de57600080fd5b50356001600160a01b03166113a5565b6103256004803603602081101561070457600080fd5b50356001600160a01b03166114ed565b61031b6004803603602081101561072a57600080fd5b5035611508565b6103256115b0565b61031b6004803603602081101561074f57600080fd5b50356115bf565b61031b6004803603606081101561076c57600080fd5b5080359060208101359060400135611667565b6102e36118fa565b6102e36004803603602081101561079d57600080fd5b50356001600160a01b0316611900565b6102e3600480360360208110156107c357600080fd5b50356001600160a01b0316611912565b610325611924565b6102e3611933565b6102e3611939565b6102e3611940565b6102e3611946565b6102e361194c565b61031b6004803603602081101561081957600080fd5b50356001600160a01b0316611954565b61031b6004803603602081101561083f57600080fd5b50356001600160a01b03166119c6565b6102e3611a85565b6102e36004803603602081101561086d57600080fd5b50356001600160a01b0316611a8b565b61031b6004803603606081101561089357600080fd5b506001600160a01b03813581169160208101359091169060400135611acb565b6102e3611bf3565b61031b600480360360608110156108d157600080fd5b5080359060208101359060400135611bf9565b610325611d4c565b61031b6004803603602081101561090257600080fd5b50356001600160a01b0316611d5b565b6102e36004803603602081101561092857600080fd5b50356001600160a01b0316611de0565b6102e3611df2565b61031b6004803603602081101561095657600080fd5b5035611df8565b6109836004803603602081101561097357600080fd5b50356001600160a01b0316611e99565b6040805192835260208301919091528051918290030190f35b61031b600480360360808110156109b257600080fd5b508035906001600160a01b036020820135169060408101359060600135611ee7565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000546001600160a01b03163314610a0f57600080fd5b6001600160a01b038116610a5c576040805162461bcd60e51b815260206004820152600f60248201526e496e76616c696420726f757465722160881b604482015290519081900360640190fd5b600980546001600160a01b0319166001600160a01b03838116919091179182905560408051929091168252517f49381de8f56ca0c45bdd955e613a01e042fdf45d2ae4b0cfd920226fe0ed2ede916020908290030190a150565b6009546001600160a01b031681565b6001600160a01b03821660009081526017602052604081208190610aef908463ffffffff61221216565b6001600160a01b038116600090815260136020526040902054909590945092505050565b606080606080848610610b2557600080fd5b6000610b37868863ffffffff61221e16565b905060608167ffffffffffffffff81118015610b5257600080fd5b50604051908082528060200260200182016040528015610b7c578160200160208202803683370190505b50905060608267ffffffffffffffff81118015610b9857600080fd5b50604051908082528060200260200182016040528015610bc2578160200160208202803683370190505b50905060608367ffffffffffffffff81118015610bde57600080fd5b50604051908082528060200260200182016040528015610c08578160200160208202803683370190505b50905060608467ffffffffffffffff81118015610c2457600080fd5b50604051908082528060200260200182016040528015610c4e578160200160208202803683370190505b5090508a5b8a811015610d85576000610c6e600e8363ffffffff61221216565b90506000610c82838f63ffffffff61221e16565b905081878281518110610c9157fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060116000836001600160a01b03166001600160a01b0316815260200190815260200160002054868281518110610ce357fe5b60200260200101818152505060126000836001600160a01b03166001600160a01b0316815260200190815260200160002054858281518110610d2157fe5b60200260200101818152505060106000836001600160a01b03166001600160a01b0316815260200190815260200160002054848281518110610d5f57fe5b602090810291909101015250610d7e905081600163ffffffff6121af16565b9050610c53565b50929a91995097509095509350505050565b6001600160a01b03821660009081526018602052604081208190610aef908463ffffffff61221216565b6000546001600160a01b03163314610dd857600080fd5b610de186611060565b610dea85611df8565b610df3846115bf565b610dfc83611508565b610e05826109f8565b610e0e816119c6565b505050505050565b6000610e22600e612260565b905090565b6000546001600160a01b03163314610e3e57600080fd5b600d5460ff1615610e84576040805162461bcd60e51b815260206004820181905260248201526000805160206131bc833981519152604482015290519081900360640190fd5b600d805460ff19166001179055610ea4426203f48063ffffffff6121af16565b601a556000600881905580546040516001600160a01b03909116917fe465b068e033879ed58088ba05882c35e2a52240ea1432b95753d6aebdd0814a91a2565b610eed3361226b565b158015610ef957503233145b610f42576040805162461bcd60e51b81526020600482015260156024820152744e6f20436f6e74726163747320416c6c6f7765642160581b604482015290519081900360640190fd5b600d5460ff1615610f88576040805162461bcd60e51b815260206004820181905260248201526000805160206131bc833981519152604482015290519081900360640190fd5b610f93338483612271565b33600090815260146020526040902054801561104857336000908152601460205260408120819055600254600154610fda916001600160a01b03908116911684878761239d565b33600090815260106020526040902054909150610ffd908263ffffffff6121af16565b33600081815260106020908152604091829020939093558051848152905191927fbd654390d0d973e8c8376ed6053be8658870df892687852cc5c914d700291b8792918290030190a2505b50505050565b60146020526000908152604090205481565b6000546001600160a01b0316331461107757600080fd5b6276a7008111156110c7576040805162461bcd60e51b81526020600482015260156024820152744c6f636b75702054696d6520746f6f206c6f6e672160581b604482015290519081900360640190fd5b60088190556040805182815290517fadbac78f382a6f10bef84ad4b704cac4817788ffec4f83ac665d7a1152dc44729181900360200190a150565b60196020526000908152604090205460ff1681565b3360009081526019602052604090205460ff1661117b576040805162461bcd60e51b815260206004820152601d60248201527f4e6f742074727573746564206465706f73697420636f6e747261637421000000604482015290519081900360640190fd5b600083116111c8576040805162461bcd60e51b8152602060048201526015602482015274416d6f756e74206d757374206e6f7420626520302160581b604482015290519081900360640190fd5b6001600160a01b038416611216576040805162461bcd60e51b815260206004820152601060248201526f496e76616c6964206163636f756e742160801b604482015290519081900360640190fd5b600154611234906001600160a01b031633308663ffffffff61292d16565b61123f848383612271565b6001600160a01b038416600090815260106020526040902054611268908463ffffffff6121af16565b6001600160a01b038516600090815260106020526040902055611292600e8563ffffffff61298716565b506001600160a01b0384166000818152601160209081526040918290204290558151928352820185905280517febedb8b3c678666e7f36970bc8f57abf6d8fa2e828c0da91ea5b75bf68ed101a9281900390910190a150505050565b60116020526000908152604090205481565b60045481565b600d5460ff1681565b60136020526000908152604090205481565b60055481565b6000546001600160a01b0316331461133e57600080fd5b6001600160a01b038116600081815260196020908152604091829020805460ff19169055815192835290517f7e0d9d001816978c78464fad5f6627ab7096346030d64b54bf5205c95816f79f9281900390910190a150565b6000546001600160a01b031681565b60006113b8600e8363ffffffff61299c16565b6113c4575060006114e8565b6001600160a01b0382166000908152601060205260409020546113e9575060006114e8565b6000806114216004547f00000000000000000000000000000000000000000000000000000000000000006121af90919063ffffffff16565b9050428181111561142f5750805b6001600160a01b03851660009081526012602052604090205481116114575760009250611484565b6001600160a01b03851660009081526012602052604090205461148190829063ffffffff61221e16565b92505b6001600160a01b0385166000908152601060205260408120546004546003549192916114e091612710916114d4919082908a906114c890899063ffffffff6129b116565b9063ffffffff6129b116565b9063ffffffff612a0a16565b955050505050505b919050565b6015602052600090815260409020546001600160a01b031681565b6000546001600160a01b0316331461151f57600080fd5b6127108110611575576040805162461bcd60e51b815260206004820152601b60248201527f4e657720556e7374616b696e672066656520746f6f206d756368210000000000604482015290519081900360640190fd5b60068190556040805182815290517f0a9e89cff3f9f01bd1c6aeb9b71324bb138123c40d02eb478613fb3427b231009181900360200190a150565b6001546001600160a01b031681565b6000546001600160a01b031633146115d657600080fd5b612710811061162c576040805162461bcd60e51b815260206004820152601960248201527f4e6577205374616b696e672066656520746f6f206d7563682100000000000000604482015290519081900360640190fd5b60058190556040805182815290517f327680b8ba8221210809b2aae37f88a529ae9eec9a3a3fe952fe0a3a262b487f9181900360200190a150565b6116703361226b565b15801561167c57503233145b6116c5576040805162461bcd60e51b81526020600482015260156024820152744e6f20436f6e74726163747320416c6c6f7765642160581b604482015290519081900360640190fd5b33600090815260106020526040902054831115611729576040805162461bcd60e51b815260206004820152601a60248201527f496e76616c696420616d6f756e7420746f207769746864726177000000000000604482015290519081900360640190fd5b6008543360009081526011602052604090205461174d90429063ffffffff61221e16565b116117895760405162461bcd60e51b81526004018080602001828103825260348152602001806131fd6034913960400191505060405180910390fd5b611794338383612271565b60006117b16127106114d4600654876129b190919063ffffffff16565b905060006117c5858363ffffffff61221e16565b905081156117f057600a546001546117f0916001600160a01b0391821691168463ffffffff612a4c16565b60015461180d906001600160a01b0316338363ffffffff612a4c16565b3360009081526010602052604090205461182d908663ffffffff61221e16565b3360008181526010602052604090209190915561185290600e9063ffffffff61299c16565b801561186b575033600090815260106020526040902054155b156118b857611881600e3363ffffffff612a9e16565b50336000818152601560209081526040808320546001600160a01b03168352601790915290206118b69163ffffffff612a9e16565b505b604080513381526020810187905281517f85082129d87b2fe11527cb1b3b7a520aeb5aa6913f88a3d8757fe40d1db02fdd929181900390910190a15050505050565b60065481565b60106020526000908152604090205481565b60166020526000908152604090205481565b6002546001600160a01b031681565b601a5481565b6203f48081565b600c5481565b600b5481565b630208c08081565b6000546001600160a01b0316331461196b57600080fd5b6001600160a01b038116600081815260196020908152604091829020805460ff19166001179055815192835290517f40c63143c93100e0caf027a91ca0854f28a3efb805e7d1c598a4637f8f22c78c9281900390910190a150565b6000546001600160a01b031633146119dd57600080fd5b6001600160a01b038116611a2b576040805162461bcd60e51b815260206004820152601060248201526f496e76616c696420616464726573732160801b604482015290519081900360640190fd5b600a80546001600160a01b0319166001600160a01b03838116919091179182905560408051929091168252517fafc54c644914e872610dbc4334999d957d145108fd88d63d83cc3a710dc6ee71916020908290030190a150565b60075481565b600080611a97836113a5565b6001600160a01b038416600090815260146020526040902054909150611ac3828263ffffffff6121af16565b949350505050565b6000546001600160a01b03163314611ae257600080fd5b6001600160a01b038216611b31576040805162461bcd60e51b8152602060048201526011602482015270125b9d985b1a5908149958da5c1a595b9d607a1b604482015290519081900360640190fd5b601a544211611b87576040805162461bcd60e51b815260206004820152601960248201527f436f6e7472616374206e6f742065787069726564207965742100000000000000604482015290519081900360640190fd5b6001600160a01b038316611bd45760405182906001600160a01b0382169083156108fc029084906000818181858888f19350505050158015611bcd573d6000803e3d6000fd5b5050611bee565b611bee6001600160a01b038416838363ffffffff612a4c16565b505050565b60035481565b611c023361226b565b158015611c0e57503233145b611c57576040805162461bcd60e51b81526020600482015260156024820152744e6f20436f6e74726163747320416c6c6f7765642160581b604482015290519081900360640190fd5b600d5460ff1615611c9d576040805162461bcd60e51b815260206004820181905260248201526000805160206131bc833981519152604482015290519081900360640190fd5b611ca8338483612271565b33600090815260146020526040902054801561104857336000908152601460205260408120819055600254600154611cef916001600160a01b03908116911684878761239d565b600154909150611d0f906001600160a01b0316338363ffffffff612a4c16565b60408051828152905133917f586b2e63a21a7a4e1402e36f48ce10cb1ec94684fea254c186b76d1f98ecf130919081900360200190a25050505050565b600a546001600160a01b031681565b6000546001600160a01b03163314611d7257600080fd5b6001600160a01b038116611d8557600080fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60126020526000908152604090205481565b60085481565b6000546001600160a01b03163314611e0f57600080fd5b6127108110611e5e576040805162461bcd60e51b8152602060048201526016602482015275546f6f206d75636820726566657272616c206665652160501b604482015290519081900360640190fd5b60078190556040805182815290517fd51125b9b3b3e2699a79428534dbc7cf5f2c1e3612ebeaf02853a94ea13fee749181900360200190a150565b6001600160a01b03811660009081526017602052604081208190611ebc90612260565b6001600160a01b0384166000908152601860205260409020909250611ee090612260565b9050915091565b611ef03361226b565b158015611efc57503233145b611f45576040805162461bcd60e51b81526020600482015260156024820152744e6f20436f6e74726163747320416c6c6f7765642160581b604482015290519081900360640190fd5b600d5460ff1615611f8b576040805162461bcd60e51b815260206004820181905260248201526000805160206131bc833981519152604482015290519081900360640190fd5b60008411611fe0576040805162461bcd60e51b815260206004820152601760248201527f43616e6e6f74206465706f736974203020546f6b656e73000000000000000000604482015290519081900360640190fd5b600154611ffe906001600160a01b031633308763ffffffff61292d16565b612009338383612271565b60006120266127106114d4600554886129b190919063ffffffff16565b9050600061203a868363ffffffff61221e16565b9050811561206557600a54600154612065916001600160a01b0391821691168463ffffffff612a4c16565b33600090815260106020526040902054612085908263ffffffff6121af16565b336000818152601060205260409020919091556120aa90600e9063ffffffff61298716565b50336000908152601560205260409020546001600160a01b03166120f15733600090815260156020526040902080546001600160a01b0319166001600160a01b0387161790555b336000818152601560209081526040808320546001600160a01b03168352601890915290206121259163ffffffff61298716565b50336000818152601560209081526040808320546001600160a01b031683526017909152902061215a9163ffffffff61298716565b50336000818152601160209081526040918290204290558151928352820183905280517febedb8b3c678666e7f36970bc8f57abf6d8fa2e828c0da91ea5b75bf68ed101a9281900390910190a1505050505050565b600082820183811015612209576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b60006122098383612ab3565b600061220983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612b17565b600061220c82612bb3565b3b151590565b600061227c846113a5565b9050801561237e5760006122a16127106114d4600754856129b190919063ffffffff16565b905060006122b5838363ffffffff61221e16565b6001600160a01b03808816600090815260156020526040812054929350916122e09116848888612bb7565b90508381156122ec5750815b6001600160a01b038816600090815260146020526040902054612315908263ffffffff6121af16565b6001600160a01b03891660009081526014602090815260408083209390935560139052205461234a908263ffffffff6121af16565b6001600160a01b038916600090815260136020526040902055600b54612376908263ffffffff6121af16565b600b55505050505b5050506001600160a01b03166000908152601260205260409020429055565b6000846001600160a01b0316866001600160a01b031614156123c0575082612924565b6009546123e1906001600160a01b038881169116600063ffffffff612cc016565b600954612401906001600160a01b0388811691168663ffffffff612cc016565b604080516370a0823160e01b815230600482015290516000916001600160a01b038816916370a0823191602480820192602092909190829003018186803b15801561244b57600080fd5b505afa15801561245f573d6000803e3d6000fd5b505050506040513d602081101561247557600080fd5b5051600954604080516315ab88c960e31b815290519293506060926001600160a01b039092169163ad5c464891600480820192602092909190829003018186803b1580156124c257600080fd5b505afa1580156124d6573d6000803e3d6000fd5b505050506040513d60208110156124ec57600080fd5b50516001600160a01b038981169116148061258b5750600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561255057600080fd5b505afa158015612564573d6000803e3d6000fd5b505050506040513d602081101561257a57600080fd5b50516001600160a01b038881169116145b1561261157604080516002808252606082018352909160208301908036833701905050905087816000815181106125be57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505086816001815181106125ec57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505061271e565b604080516003808252608082019092529060208201606080368337019050509050878160008151811061264057fe5b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561269457600080fd5b505afa1580156126a8573d6000803e3d6000fd5b505050506040513d60208110156126be57600080fd5b50518151829060019081106126cf57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505086816002815181106126fd57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250505b6009546040516338ed173960e01b8152600481018881526024820188905230606483018190526084830188905260a060448401908152855160a485015285516001600160a01b03909516946338ed1739948c948c94899490938d9360c401906020808801910280838360005b838110156127a257818101518382015260200161278a565b505050509050019650505050505050600060405180830381600087803b1580156127cb57600080fd5b505af11580156127df573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561280857600080fd5b810190808051604051939291908464010000000082111561282857600080fd5b90830190602082018581111561283d57600080fd5b825186602082028301116401000000008211171561285a57600080fd5b82525081516020918201928201910280838360005b8381101561288757818101518382015260200161286f565b505050509190910160408181526370a0823160e01b825230600483015251600096506001600160a01b038e1695506370a08231945060248083019450602093509091829003018186803b1580156128dd57600080fd5b505afa1580156128f1573d6000803e3d6000fd5b505050506040513d602081101561290757600080fd5b50519050600061291d828563ffffffff61221e16565b9450505050505b95945050505050565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052611048908590612dcf565b6000612209836001600160a01b038416612e80565b6000612209836001600160a01b038416612eca565b6000826129c05750600061220c565b828202828482816129cd57fe5b04146122095760405162461bcd60e51b81526004018080602001828103825260218152602001806131dc6021913960400191505060405180910390fd5b600061220983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612ee2565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611bee908490612dcf565b6000612209836001600160a01b038416612f47565b81546000908210612af55760405162461bcd60e51b815260040180806020018281038252602281526020018061319a6022913960400191505060405180910390fd5b826000018281548110612b0457fe5b9060005260206000200154905092915050565b60008184841115612ba65760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612b6b578181015183820152602001612b53565b50505050905090810190601f168015612b985780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50508183035b9392505050565b5490565b60006001600160a01b03851615801590612bd15750600084115b15612cb557600254600154600091612bf8916001600160a01b03918216911687878761239d565b6001600160a01b038716600090815260166020526040902054909150612c24908263ffffffff6121af16565b6001600160a01b03808816600090815260166020526040902091909155600154612c569116878363ffffffff612a4c16565b600c54612c69908263ffffffff6121af16565b600c556040805182815290516001600160a01b038816917fefdcb1f2ee8323554150b9eca5209dcd6a164266e8d1f04b95cbcecd0cad5219919081900360200190a26001915050611ac3565b506000949350505050565b801580612d46575060408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b158015612d1857600080fd5b505afa158015612d2c573d6000803e3d6000fd5b505050506040513d6020811015612d4257600080fd5b5051155b612d815760405162461bcd60e51b815260040180806020018281038252603681526020018061325b6036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052611bee9084905b6060612e24826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661300d9092919063ffffffff16565b805190915015611bee57808060200190516020811015612e4357600080fd5b5051611bee5760405162461bcd60e51b815260040180806020018281038252602a815260200180613231602a913960400191505060405180910390fd5b6000612e8c8383612eca565b612ec25750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561220c565b50600061220c565b60009081526001919091016020526040902054151590565b60008183612f315760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315612b6b578181015183820152602001612b53565b506000838581612f3d57fe5b0495945050505050565b600081815260018301602052604081205480156130035783546000198083019190810190600090879083908110612f7a57fe5b9060005260206000200154905080876000018481548110612f9757fe5b600091825260208083209091019290925582815260018981019092526040902090840190558654879080612fc757fe5b6001900381819060005260206000200160009055905586600101600087815260200190815260200160002060009055600194505050505061220c565b600091505061220c565b6060611ac38484600085856130218561226b565b613072576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106130b15780518252601f199092019160209182019101613092565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613113576040519150601f19603f3d011682016040523d82523d6000602084013e613118565b606091505b5091509150613128828286613133565b979650505050505050565b60608315613142575081612bac565b8251156131525782518084602001fd5b60405162461bcd60e51b8152602060048201818152845160248401528451859391928392604401919085019080838360008315612b6b578181015183820152602001612b5356fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e647343616e6e6f74206578656375746520647572696e6720656d657267656e637921536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77596f7520726563656e746c79207374616b65642c20706c656173652077616974206265666f7265207769746864726177696e672e5361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365a2646970667358221220de37070b9b1aade0bbb3dd12c7e053299f99c221651b472e765a36fe68ae523f64736f6c634300060b0033436f6e7472616374206d7573742065787069726520696e206c657373207468616e203336352064617973210000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000910090ea889b64b4e722ea4b8ff6d5e734dfb38f000000000000000000000000961c8c0b1aad0c0b10a51fef6a867e3091bcef17000000000000000000000000bd100d061e120b2c67a24453cf6368e63f1be05600000000000000000000000000000000000000000000000000000000000001f40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c40000000000000000000000000000000000000000000000000000000001e13380000000000000000000000000000000000000000000000000000000000003f480
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102d65760003560e01c8063b7d3786e11610182578063dbcdc2cc116100e9578063f1bab2ec116100a2578063f5326ada1161007c578063f5326ada14610938578063f63de3ac14610940578063f749229e1461095d578063faf5ec0c1461099c576102d6565b8063f1bab2ec146108e4578063f2fde38b146108ec578063f3f91fa014610912576102d6565b8063dbcdc2cc14610829578063df4b70ba1461084f578063e7b62f5814610857578063e9dc18ec1461087d578063ebe6cad1146108b3578063efa9a9be146108bb576102d6565b8063ca7e08351161013b578063ca7e0835146107db578063ca9a2132146107e3578063d079490f146107eb578063d578ceab146107f3578063d7130e14146107fb578063db16caf214610803576102d6565b8063b7d3786e14610739578063bd97b37514610756578063c1665f401461077f578063c326bf4f14610787578063c6363892146107ad578063c80ed116146107d3576102d6565b80634fcfe7ae116102415780637e44b933116101fa57806398896d10116101d457806398896d10146106c85780639ca423b3146106ee578063a1ccb81314610714578063a2a5124114610731576102d6565b80637e44b933146106925780637fc505031461069a5780638da5cb5b146106c0576102d6565b80634fcfe7ae146105c457806355468afa146105fe578063583d42fd146106365780635dbdda691461065c5780635f9e8f82146106645780636270cd181461066c576102d6565b80632e9f87a6116102935780632e9f87a614610502578063308feec31461054857806331e244e5146105505780633ddb34221461055857806348f554d3146105815780634b62b70b146105a7576102d6565b80630c3d5157146102db5780631419841d146102f55780631694505e1461031d5780631808fdb8146103415780631911cf4a146103905780632a6b9bfd146104d6575b600080fd5b6102e36109d4565b60408051918252519081900360200190f35b61031b6004803603602081101561030b57600080fd5b50356001600160a01b03166109f8565b005b610325610ab6565b604080516001600160a01b039092168252519081900360200190f35b61036d6004803603604081101561035757600080fd5b506001600160a01b038135169060200135610ac5565b604080516001600160a01b03909316835260208301919091528051918290030190f35b6103b3600480360360408110156103a657600080fd5b5080359060200135610b13565b6040518080602001806020018060200180602001858103855289818151815260200191508051906020019060200280838360005b838110156103ff5781810151838201526020016103e7565b50505050905001858103845288818151815260200191508051906020019060200280838360005b8381101561043e578181015183820152602001610426565b50505050905001858103835287818151815260200191508051906020019060200280838360005b8381101561047d578181015183820152602001610465565b50505050905001858103825286818151815260200191508051906020019060200280838360005b838110156104bc5781810151838201526020016104a4565b505050509050019850505050505050505060405180910390f35b61036d600480360360408110156104ec57600080fd5b506001600160a01b038135169060200135610d97565b61031b600480360360c081101561051857600080fd5b508035906020810135906040810135906060810135906001600160a01b03608082013581169160a0013516610dc1565b6102e3610e16565b61031b610e27565b61031b6004803603606081101561056e57600080fd5b5080359060208101359060400135610ee4565b6102e36004803603602081101561059757600080fd5b50356001600160a01b031661104e565b61031b600480360360208110156105bd57600080fd5b5035611060565b6105ea600480360360208110156105da57600080fd5b50356001600160a01b0316611102565b604080519115158252519081900360200190f35b61031b6004803603608081101561061457600080fd5b506001600160a01b038135169060208101359060408101359060600135611117565b6102e36004803603602081101561064c57600080fd5b50356001600160a01b03166112ee565b6102e3611300565b6105ea611306565b6102e36004803603602081101561068257600080fd5b50356001600160a01b031661130f565b6102e3611321565b61031b600480360360208110156106b057600080fd5b50356001600160a01b0316611327565b610325611396565b6102e3600480360360208110156106de57600080fd5b50356001600160a01b03166113a5565b6103256004803603602081101561070457600080fd5b50356001600160a01b03166114ed565b61031b6004803603602081101561072a57600080fd5b5035611508565b6103256115b0565b61031b6004803603602081101561074f57600080fd5b50356115bf565b61031b6004803603606081101561076c57600080fd5b5080359060208101359060400135611667565b6102e36118fa565b6102e36004803603602081101561079d57600080fd5b50356001600160a01b0316611900565b6102e3600480360360208110156107c357600080fd5b50356001600160a01b0316611912565b610325611924565b6102e3611933565b6102e3611939565b6102e3611940565b6102e3611946565b6102e361194c565b61031b6004803603602081101561081957600080fd5b50356001600160a01b0316611954565b61031b6004803603602081101561083f57600080fd5b50356001600160a01b03166119c6565b6102e3611a85565b6102e36004803603602081101561086d57600080fd5b50356001600160a01b0316611a8b565b61031b6004803603606081101561089357600080fd5b506001600160a01b03813581169160208101359091169060400135611acb565b6102e3611bf3565b61031b600480360360608110156108d157600080fd5b5080359060208101359060400135611bf9565b610325611d4c565b61031b6004803603602081101561090257600080fd5b50356001600160a01b0316611d5b565b6102e36004803603602081101561092857600080fd5b50356001600160a01b0316611de0565b6102e3611df2565b61031b6004803603602081101561095657600080fd5b5035611df8565b6109836004803603602081101561097357600080fd5b50356001600160a01b0316611e99565b6040805192835260208301919091528051918290030190f35b61031b600480360360808110156109b257600080fd5b508035906001600160a01b036020820135169060408101359060600135611ee7565b7f0000000000000000000000000000000000000000000000000000000061b75b3081565b6000546001600160a01b03163314610a0f57600080fd5b6001600160a01b038116610a5c576040805162461bcd60e51b815260206004820152600f60248201526e496e76616c696420726f757465722160881b604482015290519081900360640190fd5b600980546001600160a01b0319166001600160a01b03838116919091179182905560408051929091168252517f49381de8f56ca0c45bdd955e613a01e042fdf45d2ae4b0cfd920226fe0ed2ede916020908290030190a150565b6009546001600160a01b031681565b6001600160a01b03821660009081526017602052604081208190610aef908463ffffffff61221216565b6001600160a01b038116600090815260136020526040902054909590945092505050565b606080606080848610610b2557600080fd5b6000610b37868863ffffffff61221e16565b905060608167ffffffffffffffff81118015610b5257600080fd5b50604051908082528060200260200182016040528015610b7c578160200160208202803683370190505b50905060608267ffffffffffffffff81118015610b9857600080fd5b50604051908082528060200260200182016040528015610bc2578160200160208202803683370190505b50905060608367ffffffffffffffff81118015610bde57600080fd5b50604051908082528060200260200182016040528015610c08578160200160208202803683370190505b50905060608467ffffffffffffffff81118015610c2457600080fd5b50604051908082528060200260200182016040528015610c4e578160200160208202803683370190505b5090508a5b8a811015610d85576000610c6e600e8363ffffffff61221216565b90506000610c82838f63ffffffff61221e16565b905081878281518110610c9157fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060116000836001600160a01b03166001600160a01b0316815260200190815260200160002054868281518110610ce357fe5b60200260200101818152505060126000836001600160a01b03166001600160a01b0316815260200190815260200160002054858281518110610d2157fe5b60200260200101818152505060106000836001600160a01b03166001600160a01b0316815260200190815260200160002054848281518110610d5f57fe5b602090810291909101015250610d7e905081600163ffffffff6121af16565b9050610c53565b50929a91995097509095509350505050565b6001600160a01b03821660009081526018602052604081208190610aef908463ffffffff61221216565b6000546001600160a01b03163314610dd857600080fd5b610de186611060565b610dea85611df8565b610df3846115bf565b610dfc83611508565b610e05826109f8565b610e0e816119c6565b505050505050565b6000610e22600e612260565b905090565b6000546001600160a01b03163314610e3e57600080fd5b600d5460ff1615610e84576040805162461bcd60e51b815260206004820181905260248201526000805160206131bc833981519152604482015290519081900360640190fd5b600d805460ff19166001179055610ea4426203f48063ffffffff6121af16565b601a556000600881905580546040516001600160a01b03909116917fe465b068e033879ed58088ba05882c35e2a52240ea1432b95753d6aebdd0814a91a2565b610eed3361226b565b158015610ef957503233145b610f42576040805162461bcd60e51b81526020600482015260156024820152744e6f20436f6e74726163747320416c6c6f7765642160581b604482015290519081900360640190fd5b600d5460ff1615610f88576040805162461bcd60e51b815260206004820181905260248201526000805160206131bc833981519152604482015290519081900360640190fd5b610f93338483612271565b33600090815260146020526040902054801561104857336000908152601460205260408120819055600254600154610fda916001600160a01b03908116911684878761239d565b33600090815260106020526040902054909150610ffd908263ffffffff6121af16565b33600081815260106020908152604091829020939093558051848152905191927fbd654390d0d973e8c8376ed6053be8658870df892687852cc5c914d700291b8792918290030190a2505b50505050565b60146020526000908152604090205481565b6000546001600160a01b0316331461107757600080fd5b6276a7008111156110c7576040805162461bcd60e51b81526020600482015260156024820152744c6f636b75702054696d6520746f6f206c6f6e672160581b604482015290519081900360640190fd5b60088190556040805182815290517fadbac78f382a6f10bef84ad4b704cac4817788ffec4f83ac665d7a1152dc44729181900360200190a150565b60196020526000908152604090205460ff1681565b3360009081526019602052604090205460ff1661117b576040805162461bcd60e51b815260206004820152601d60248201527f4e6f742074727573746564206465706f73697420636f6e747261637421000000604482015290519081900360640190fd5b600083116111c8576040805162461bcd60e51b8152602060048201526015602482015274416d6f756e74206d757374206e6f7420626520302160581b604482015290519081900360640190fd5b6001600160a01b038416611216576040805162461bcd60e51b815260206004820152601060248201526f496e76616c6964206163636f756e742160801b604482015290519081900360640190fd5b600154611234906001600160a01b031633308663ffffffff61292d16565b61123f848383612271565b6001600160a01b038416600090815260106020526040902054611268908463ffffffff6121af16565b6001600160a01b038516600090815260106020526040902055611292600e8563ffffffff61298716565b506001600160a01b0384166000818152601160209081526040918290204290558151928352820185905280517febedb8b3c678666e7f36970bc8f57abf6d8fa2e828c0da91ea5b75bf68ed101a9281900390910190a150505050565b60116020526000908152604090205481565b60045481565b600d5460ff1681565b60136020526000908152604090205481565b60055481565b6000546001600160a01b0316331461133e57600080fd5b6001600160a01b038116600081815260196020908152604091829020805460ff19169055815192835290517f7e0d9d001816978c78464fad5f6627ab7096346030d64b54bf5205c95816f79f9281900390910190a150565b6000546001600160a01b031681565b60006113b8600e8363ffffffff61299c16565b6113c4575060006114e8565b6001600160a01b0382166000908152601060205260409020546113e9575060006114e8565b6000806114216004547f0000000000000000000000000000000000000000000000000000000061b75b306121af90919063ffffffff16565b9050428181111561142f5750805b6001600160a01b03851660009081526012602052604090205481116114575760009250611484565b6001600160a01b03851660009081526012602052604090205461148190829063ffffffff61221e16565b92505b6001600160a01b0385166000908152601060205260408120546004546003549192916114e091612710916114d4919082908a906114c890899063ffffffff6129b116565b9063ffffffff6129b116565b9063ffffffff612a0a16565b955050505050505b919050565b6015602052600090815260409020546001600160a01b031681565b6000546001600160a01b0316331461151f57600080fd5b6127108110611575576040805162461bcd60e51b815260206004820152601b60248201527f4e657720556e7374616b696e672066656520746f6f206d756368210000000000604482015290519081900360640190fd5b60068190556040805182815290517f0a9e89cff3f9f01bd1c6aeb9b71324bb138123c40d02eb478613fb3427b231009181900360200190a150565b6001546001600160a01b031681565b6000546001600160a01b031633146115d657600080fd5b612710811061162c576040805162461bcd60e51b815260206004820152601960248201527f4e6577205374616b696e672066656520746f6f206d7563682100000000000000604482015290519081900360640190fd5b60058190556040805182815290517f327680b8ba8221210809b2aae37f88a529ae9eec9a3a3fe952fe0a3a262b487f9181900360200190a150565b6116703361226b565b15801561167c57503233145b6116c5576040805162461bcd60e51b81526020600482015260156024820152744e6f20436f6e74726163747320416c6c6f7765642160581b604482015290519081900360640190fd5b33600090815260106020526040902054831115611729576040805162461bcd60e51b815260206004820152601a60248201527f496e76616c696420616d6f756e7420746f207769746864726177000000000000604482015290519081900360640190fd5b6008543360009081526011602052604090205461174d90429063ffffffff61221e16565b116117895760405162461bcd60e51b81526004018080602001828103825260348152602001806131fd6034913960400191505060405180910390fd5b611794338383612271565b60006117b16127106114d4600654876129b190919063ffffffff16565b905060006117c5858363ffffffff61221e16565b905081156117f057600a546001546117f0916001600160a01b0391821691168463ffffffff612a4c16565b60015461180d906001600160a01b0316338363ffffffff612a4c16565b3360009081526010602052604090205461182d908663ffffffff61221e16565b3360008181526010602052604090209190915561185290600e9063ffffffff61299c16565b801561186b575033600090815260106020526040902054155b156118b857611881600e3363ffffffff612a9e16565b50336000818152601560209081526040808320546001600160a01b03168352601790915290206118b69163ffffffff612a9e16565b505b604080513381526020810187905281517f85082129d87b2fe11527cb1b3b7a520aeb5aa6913f88a3d8757fe40d1db02fdd929181900390910190a15050505050565b60065481565b60106020526000908152604090205481565b60166020526000908152604090205481565b6002546001600160a01b031681565b601a5481565b6203f48081565b600c5481565b600b5481565b630208c08081565b6000546001600160a01b0316331461196b57600080fd5b6001600160a01b038116600081815260196020908152604091829020805460ff19166001179055815192835290517f40c63143c93100e0caf027a91ca0854f28a3efb805e7d1c598a4637f8f22c78c9281900390910190a150565b6000546001600160a01b031633146119dd57600080fd5b6001600160a01b038116611a2b576040805162461bcd60e51b815260206004820152601060248201526f496e76616c696420616464726573732160801b604482015290519081900360640190fd5b600a80546001600160a01b0319166001600160a01b03838116919091179182905560408051929091168252517fafc54c644914e872610dbc4334999d957d145108fd88d63d83cc3a710dc6ee71916020908290030190a150565b60075481565b600080611a97836113a5565b6001600160a01b038416600090815260146020526040902054909150611ac3828263ffffffff6121af16565b949350505050565b6000546001600160a01b03163314611ae257600080fd5b6001600160a01b038216611b31576040805162461bcd60e51b8152602060048201526011602482015270125b9d985b1a5908149958da5c1a595b9d607a1b604482015290519081900360640190fd5b601a544211611b87576040805162461bcd60e51b815260206004820152601960248201527f436f6e7472616374206e6f742065787069726564207965742100000000000000604482015290519081900360640190fd5b6001600160a01b038316611bd45760405182906001600160a01b0382169083156108fc029084906000818181858888f19350505050158015611bcd573d6000803e3d6000fd5b5050611bee565b611bee6001600160a01b038416838363ffffffff612a4c16565b505050565b60035481565b611c023361226b565b158015611c0e57503233145b611c57576040805162461bcd60e51b81526020600482015260156024820152744e6f20436f6e74726163747320416c6c6f7765642160581b604482015290519081900360640190fd5b600d5460ff1615611c9d576040805162461bcd60e51b815260206004820181905260248201526000805160206131bc833981519152604482015290519081900360640190fd5b611ca8338483612271565b33600090815260146020526040902054801561104857336000908152601460205260408120819055600254600154611cef916001600160a01b03908116911684878761239d565b600154909150611d0f906001600160a01b0316338363ffffffff612a4c16565b60408051828152905133917f586b2e63a21a7a4e1402e36f48ce10cb1ec94684fea254c186b76d1f98ecf130919081900360200190a25050505050565b600a546001600160a01b031681565b6000546001600160a01b03163314611d7257600080fd5b6001600160a01b038116611d8557600080fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60126020526000908152604090205481565b60085481565b6000546001600160a01b03163314611e0f57600080fd5b6127108110611e5e576040805162461bcd60e51b8152602060048201526016602482015275546f6f206d75636820726566657272616c206665652160501b604482015290519081900360640190fd5b60078190556040805182815290517fd51125b9b3b3e2699a79428534dbc7cf5f2c1e3612ebeaf02853a94ea13fee749181900360200190a150565b6001600160a01b03811660009081526017602052604081208190611ebc90612260565b6001600160a01b0384166000908152601860205260409020909250611ee090612260565b9050915091565b611ef03361226b565b158015611efc57503233145b611f45576040805162461bcd60e51b81526020600482015260156024820152744e6f20436f6e74726163747320416c6c6f7765642160581b604482015290519081900360640190fd5b600d5460ff1615611f8b576040805162461bcd60e51b815260206004820181905260248201526000805160206131bc833981519152604482015290519081900360640190fd5b60008411611fe0576040805162461bcd60e51b815260206004820152601760248201527f43616e6e6f74206465706f736974203020546f6b656e73000000000000000000604482015290519081900360640190fd5b600154611ffe906001600160a01b031633308763ffffffff61292d16565b612009338383612271565b60006120266127106114d4600554886129b190919063ffffffff16565b9050600061203a868363ffffffff61221e16565b9050811561206557600a54600154612065916001600160a01b0391821691168463ffffffff612a4c16565b33600090815260106020526040902054612085908263ffffffff6121af16565b336000818152601060205260409020919091556120aa90600e9063ffffffff61298716565b50336000908152601560205260409020546001600160a01b03166120f15733600090815260156020526040902080546001600160a01b0319166001600160a01b0387161790555b336000818152601560209081526040808320546001600160a01b03168352601890915290206121259163ffffffff61298716565b50336000818152601560209081526040808320546001600160a01b031683526017909152902061215a9163ffffffff61298716565b50336000818152601160209081526040918290204290558151928352820183905280517febedb8b3c678666e7f36970bc8f57abf6d8fa2e828c0da91ea5b75bf68ed101a9281900390910190a1505050505050565b600082820183811015612209576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b60006122098383612ab3565b600061220983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612b17565b600061220c82612bb3565b3b151590565b600061227c846113a5565b9050801561237e5760006122a16127106114d4600754856129b190919063ffffffff16565b905060006122b5838363ffffffff61221e16565b6001600160a01b03808816600090815260156020526040812054929350916122e09116848888612bb7565b90508381156122ec5750815b6001600160a01b038816600090815260146020526040902054612315908263ffffffff6121af16565b6001600160a01b03891660009081526014602090815260408083209390935560139052205461234a908263ffffffff6121af16565b6001600160a01b038916600090815260136020526040902055600b54612376908263ffffffff6121af16565b600b55505050505b5050506001600160a01b03166000908152601260205260409020429055565b6000846001600160a01b0316866001600160a01b031614156123c0575082612924565b6009546123e1906001600160a01b038881169116600063ffffffff612cc016565b600954612401906001600160a01b0388811691168663ffffffff612cc016565b604080516370a0823160e01b815230600482015290516000916001600160a01b038816916370a0823191602480820192602092909190829003018186803b15801561244b57600080fd5b505afa15801561245f573d6000803e3d6000fd5b505050506040513d602081101561247557600080fd5b5051600954604080516315ab88c960e31b815290519293506060926001600160a01b039092169163ad5c464891600480820192602092909190829003018186803b1580156124c257600080fd5b505afa1580156124d6573d6000803e3d6000fd5b505050506040513d60208110156124ec57600080fd5b50516001600160a01b038981169116148061258b5750600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561255057600080fd5b505afa158015612564573d6000803e3d6000fd5b505050506040513d602081101561257a57600080fd5b50516001600160a01b038881169116145b1561261157604080516002808252606082018352909160208301908036833701905050905087816000815181106125be57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505086816001815181106125ec57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505061271e565b604080516003808252608082019092529060208201606080368337019050509050878160008151811061264057fe5b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561269457600080fd5b505afa1580156126a8573d6000803e3d6000fd5b505050506040513d60208110156126be57600080fd5b50518151829060019081106126cf57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505086816002815181106126fd57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250505b6009546040516338ed173960e01b8152600481018881526024820188905230606483018190526084830188905260a060448401908152855160a485015285516001600160a01b03909516946338ed1739948c948c94899490938d9360c401906020808801910280838360005b838110156127a257818101518382015260200161278a565b505050509050019650505050505050600060405180830381600087803b1580156127cb57600080fd5b505af11580156127df573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561280857600080fd5b810190808051604051939291908464010000000082111561282857600080fd5b90830190602082018581111561283d57600080fd5b825186602082028301116401000000008211171561285a57600080fd5b82525081516020918201928201910280838360005b8381101561288757818101518382015260200161286f565b505050509190910160408181526370a0823160e01b825230600483015251600096506001600160a01b038e1695506370a08231945060248083019450602093509091829003018186803b1580156128dd57600080fd5b505afa1580156128f1573d6000803e3d6000fd5b505050506040513d602081101561290757600080fd5b50519050600061291d828563ffffffff61221e16565b9450505050505b95945050505050565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052611048908590612dcf565b6000612209836001600160a01b038416612e80565b6000612209836001600160a01b038416612eca565b6000826129c05750600061220c565b828202828482816129cd57fe5b04146122095760405162461bcd60e51b81526004018080602001828103825260218152602001806131dc6021913960400191505060405180910390fd5b600061220983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612ee2565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611bee908490612dcf565b6000612209836001600160a01b038416612f47565b81546000908210612af55760405162461bcd60e51b815260040180806020018281038252602281526020018061319a6022913960400191505060405180910390fd5b826000018281548110612b0457fe5b9060005260206000200154905092915050565b60008184841115612ba65760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612b6b578181015183820152602001612b53565b50505050905090810190601f168015612b985780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50508183035b9392505050565b5490565b60006001600160a01b03851615801590612bd15750600084115b15612cb557600254600154600091612bf8916001600160a01b03918216911687878761239d565b6001600160a01b038716600090815260166020526040902054909150612c24908263ffffffff6121af16565b6001600160a01b03808816600090815260166020526040902091909155600154612c569116878363ffffffff612a4c16565b600c54612c69908263ffffffff6121af16565b600c556040805182815290516001600160a01b038816917fefdcb1f2ee8323554150b9eca5209dcd6a164266e8d1f04b95cbcecd0cad5219919081900360200190a26001915050611ac3565b506000949350505050565b801580612d46575060408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b158015612d1857600080fd5b505afa158015612d2c573d6000803e3d6000fd5b505050506040513d6020811015612d4257600080fd5b5051155b612d815760405162461bcd60e51b815260040180806020018281038252603681526020018061325b6036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052611bee9084905b6060612e24826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661300d9092919063ffffffff16565b805190915015611bee57808060200190516020811015612e4357600080fd5b5051611bee5760405162461bcd60e51b815260040180806020018281038252602a815260200180613231602a913960400191505060405180910390fd5b6000612e8c8383612eca565b612ec25750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561220c565b50600061220c565b60009081526001919091016020526040902054151590565b60008183612f315760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315612b6b578181015183820152602001612b53565b506000838581612f3d57fe5b0495945050505050565b600081815260018301602052604081205480156130035783546000198083019190810190600090879083908110612f7a57fe5b9060005260206000200154905080876000018481548110612f9757fe5b600091825260208083209091019290925582815260018981019092526040902090840190558654879080612fc757fe5b6001900381819060005260206000200160009055905586600101600087815260200190815260200160002060009055600194505050505061220c565b600091505061220c565b6060611ac38484600085856130218561226b565b613072576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106130b15780518252601f199092019160209182019101613092565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613113576040519150601f19603f3d011682016040523d82523d6000602084013e613118565b606091505b5091509150613128828286613133565b979650505050505050565b60608315613142575081612bac565b8251156131525782518084602001fd5b60405162461bcd60e51b8152602060048201818152845160248401528451859391928392604401919085019080838360008315612b6b578181015183820152602001612b5356fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e647343616e6e6f74206578656375746520647572696e6720656d657267656e637921536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77596f7520726563656e746c79207374616b65642c20706c656173652077616974206265666f7265207769746864726177696e672e5361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365a2646970667358221220de37070b9b1aade0bbb3dd12c7e053299f99c221651b472e765a36fe68ae523f64736f6c634300060b0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000910090ea889b64b4e722ea4b8ff6d5e734dfb38f000000000000000000000000961c8c0b1aad0c0b10a51fef6a867e3091bcef17000000000000000000000000bd100d061e120b2c67a24453cf6368e63f1be05600000000000000000000000000000000000000000000000000000000000001f40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c40000000000000000000000000000000000000000000000000000000001e13380000000000000000000000000000000000000000000000000000000000003f480
-----Decoded View---------------
Arg [0] : _uniswapV2RouterAddress (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [1] : _feeRecipientAddress (address): 0x910090Ea889B64B4e722ea4b8fF6D5e734dFb38F
Arg [2] : trustedDepositTokenAddress (address): 0x961C8c0B1aaD0c0b10a51FeF6a867E3091BCef17
Arg [3] : trustedRewardTokenAddress (address): 0xBD100d061E120b2c67A24453CF6368E63f1Be056
Arg [4] : referralFeeRateX100 (uint256): 500
Arg [5] : stakingFeeRateX100 (uint256): 0
Arg [6] : unstakingFeeRateX100 (uint256): 0
Arg [7] : rewardRateX100 (uint256): 2500
Arg [8] : rewardInterval (uint256): 31536000
Arg [9] : lockupTime (uint256): 259200
-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [1] : 000000000000000000000000910090ea889b64b4e722ea4b8ff6d5e734dfb38f
Arg [2] : 000000000000000000000000961c8c0b1aad0c0b10a51fef6a867e3091bcef17
Arg [3] : 000000000000000000000000bd100d061e120b2c67a24453cf6368e63f1be056
Arg [4] : 00000000000000000000000000000000000000000000000000000000000001f4
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [7] : 00000000000000000000000000000000000000000000000000000000000009c4
Arg [8] : 0000000000000000000000000000000000000000000000000000000001e13380
Arg [9] : 000000000000000000000000000000000000000000000000000000000003f480
Deployed Bytecode Sourcemap
29168:21058:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31711:39;;;:::i;:::-;;;;;;;;;;;;;;;;36014:284;;;;;;;;;;;;;;;;-1:-1:-1;36014:284:0;-1:-1:-1;;;;;36014:284:0;;:::i;:::-;;31361:102;;;:::i;:::-;;;;-1:-1:-1;;;;;31361:102:0;;;;;;;;;;;;;;42850:242;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;42850:242:0;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;42850:242:0;;;;;;;;;;;;;;;;;;;;;48499:1157;;;;;;;;;;;;;;;;-1:-1:-1;48499:1157:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42609:235;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;42609:235:0;;;;;;;;:::i;37101:570::-;;;;;;;;;;;;;;;;-1:-1:-1;37101:570:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37101:570:0;;;;;;;;;;;;:::i;42208:101::-;;;:::i;37683:239::-;;;:::i;47602:885::-;;;;;;;;;;;;;;;;-1:-1:-1;47602:885:0;;;;;;;;;;;;:::i;32447:52::-;;;;;;;;;;;;;;;;-1:-1:-1;32447:52:0;-1:-1:-1;;;;;32447:52:0;;:::i;36304:224::-;;;;;;;;;;;;;;;;-1:-1:-1;36304:224:0;;:::i;32817:57::-;;;;;;;;;;;;;;;;-1:-1:-1;32817:57:0;-1:-1:-1;;;;;32817:57:0;;:::i;:::-;;;;;;;;;;;;;;;;;;43104:666;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;43104:666:0;;;;;;;;;;;;;;;;;;:::i;32278:44::-;;;;;;;;;;;;;;;;-1:-1:-1;32278:44:0;-1:-1:-1;;;;;32278:44:0;;:::i;30697:38::-;;;:::i;31757:31::-;;;:::i;32384:50::-;;;;;;;;;;;;;;;;-1:-1:-1;32384:50:0;-1:-1:-1;;;;;32384:50:0;;:::i;30768:38::-;;;:::i;36732:198::-;;;;;;;;;;;;;;;;-1:-1:-1;36732:198:0;-1:-1:-1;;;;;36732:198:0;;:::i;21496:20::-;;;:::i;41037:911::-;;;;;;;;;;;;;;;;-1:-1:-1;41037:911:0;-1:-1:-1;;;;;41037:911:0;;:::i;32512:45::-;;;;;;;;;;;;;;;;-1:-1:-1;32512:45:0;-1:-1:-1;;;;;32512:45:0;;:::i;35424:295::-;;;;;;;;;;;;;;;;-1:-1:-1;35424:295:0;;:::i;30372:89::-;;;:::i;35139:279::-;;;;;;;;;;;;;;;;-1:-1:-1;35139:279:0;;:::i;45640:1189::-;;;;;;;;;;;;;;;;-1:-1:-1;45640:1189:0;;;;;;;;;;;;:::i;30842:40::-;;;:::i;32223:48::-;;;;;;;;;;;;;;;;-1:-1:-1;32223:48:0;-1:-1:-1;;;;;32223:48:0;;:::i;32564:55::-;;;;;;;;;;;;;;;;-1:-1:-1;32564:55:0;-1:-1:-1;;;;;32564:55:0;;:::i;30468:88::-;;;:::i;32887:30::-;;;:::i;31093:49::-;;;:::i;31659:39::-;;;:::i;31617:35::-;;;:::i;31272:50::-;;;:::i;36534:192::-;;;;;;;;;;;;;;;;-1:-1:-1;36534:192:0;-1:-1:-1;;;;;36534:192:0;;:::i;34495:283::-;;;;;;;;;;;;;;;;-1:-1:-1;34495:283:0;-1:-1:-1;;;;;34495:283:0;;:::i;30949:41::-;;;:::i;41960:236::-;;;;;;;;;;;;;;;;-1:-1:-1;41960:236:0;-1:-1:-1;;;;;41960:236:0;;:::i;49761:462::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;49761:462:0;;;;;;;;;;;;;;;;;:::i;30654:36::-;;;:::i;46841:749::-;;;;;;;;;;;;;;;;-1:-1:-1;46841:749:0;;;;;;;;;;;;:::i;31570:34::-;;;:::i;22115:178::-;;;;;;;;;;;;;;;;-1:-1:-1;22115:178:0;-1:-1:-1;;;;;22115:178:0;;:::i;32329:48::-;;;;;;;;;;;;;;;;-1:-1:-1;32329:48:0;-1:-1:-1;;;;;32329:48:0;;:::i;31048:32::-;;;:::i;35725:283::-;;;;;;;;;;;;;;;;-1:-1:-1;35725:283:0;;:::i;42321:276::-;;;;;;;;;;;;;;;;-1:-1:-1;42321:276:0;-1:-1:-1;;;;;42321:276:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;43782:1846;;;;;;;;;;;;;;;;-1:-1:-1;43782:1846:0;;;-1:-1:-1;;;;;43782:1846:0;;;;;;;;;;;;;;;:::i;31711:39::-;;;:::o;36014:284::-;21926:5;;-1:-1:-1;;;;;21926:5:0;21912:10;:19;21904:28;;;;;;-1:-1:-1;;;;;36116:42:0;::::1;36108:70;;;::::0;;-1:-1:-1;;;36108:70:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;36108:70:0;;;;;;;;;;;;;::::1;;36189:15;:37:::0;;-1:-1:-1;;;;;;36189:37:0::1;-1:-1:-1::0;;;;;36189:37:0;;::::1;::::0;;;::::1;::::0;;;;36242:48:::1;::::0;;36273:15;;;::::1;36242:48:::0;;;::::1;::::0;::::1;::::0;;;;;;::::1;36014:284:::0;:::o;31361:102::-;;;-1:-1:-1;;;;;31361:102:0;;:::o;42850:242::-;-1:-1:-1;;;;;42988:38:0;;42931:15;42988:38;;;:29;:38;;;;;42931:15;;42988:44;;43030:1;42988:44;:41;:44;:::i;:::-;-1:-1:-1;;;;;43058:26:0;;;;;;:17;:26;;;;;;42978:54;;43058:26;;-1:-1:-1;42850:242:0;-1:-1:-1;;;42850:242:0:o;48499:1157::-;48606:24;48646:31;48693:35;48743:26;48804:8;48791:10;:21;48782:31;;;;;;48834:11;48848:24;:8;48861:10;48848:24;:12;:24;:::i;:::-;48834:38;;48883:25;48925:6;48911:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48911:21:0;;48883:49;;48943:32;48989:6;48978:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48978:18:0;;48943:53;;49007:36;49057:6;49046:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49046:18:0;;49007:57;;49075:27;49116:6;49105:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49105:18:0;-1:-1:-1;49075:48:0;-1:-1:-1;49158:10:0;49144:408;49174:8;49170:1;:12;49144:408;;;49213:14;49230:13;:7;49241:1;49230:13;:10;:13;:::i;:::-;49213:30;-1:-1:-1;49258:14:0;49275:17;:1;49281:10;49275:17;:5;:17;:::i;:::-;49258:34;;49329:6;49307:8;49316:9;49307:19;;;;;;;;;;;;;:28;-1:-1:-1;;;;;49307:28:0;;;-1:-1:-1;;;;;49307:28:0;;;;;49382:11;:19;49394:6;-1:-1:-1;;;;;49382:19:0;-1:-1:-1;;;;;49382:19:0;;;;;;;;;;;;;49350:18;49369:9;49350:29;;;;;;;;;;;;;:51;;;;;49452:15;:23;49468:6;-1:-1:-1;;;;;49452:23:0;-1:-1:-1;;;;;49452:23:0;;;;;;;;;;;;;49416:22;49439:9;49416:33;;;;;;;;;;;;;:59;;;;;49517:15;:23;49533:6;-1:-1:-1;;;;;49517:23:0;-1:-1:-1;;;;;49517:23:0;;;;;;;;;;;;;49490:13;49504:9;49490:24;;;;;;;;;;;;;;;;;:50;-1:-1:-1;49188:8:0;;-1:-1:-1;49188:1:0;49194;49188:8;:5;:8;:::i;:::-;49184:12;;49144:408;;;-1:-1:-1;49580:8:0;;49590:18;;-1:-1:-1;49590:18:0;-1:-1:-1;49580:8:0;;-1:-1:-1;48499:1157:0;-1:-1:-1;;;;48499:1157:0:o;42609:235::-;-1:-1:-1;;;;;42741:37:0;;42684:15;42741:37;;;:28;:37;;;;;42684:15;;42741:43;;42782:1;42741:43;:40;:43;:::i;37101:570::-;21926:5;;-1:-1:-1;;;;;21926:5:0;21912:10;:19;21904:28;;;;;;37366:25:::1;37380:10;37366:13;:25::i;:::-;37402:43;37425:19;37402:22;:43::i;:::-;37456:41;37478:18;37456:21;:41::i;:::-;37508:45;37532:20;37508:23;:45::i;:::-;37564:44;37600:6;37564:18;:44::i;:::-;37619;37642:20;37619:22;:44::i;:::-;37101:570:::0;;;;;;:::o;42208:101::-;42261:4;42285:16;:7;:14;:16::i;:::-;42278:23;;42208:101;:::o;37683:239::-;21926:5;;-1:-1:-1;;;;;21926:5:0;21912:10;:19;21904:28;;;;;;32084:11:::1;::::0;::::1;;32083:12;32075:57;;;::::0;;-1:-1:-1;;;32075:57:0;;::::1;;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;;;;;;;;;32075:57:0;;;;;;;;;;;;;::::1;;37760:11:::2;:18:::0;;-1:-1:-1;;37760:18:0::2;37774:4;37760:18;::::0;;37810:28:::2;:3;31136:6;37810:28;:7;:28;:::i;:::-;37789:18;:49:::0;37863:1:::2;37849:11;:15:::0;;;37908:5;;37890:24:::2;::::0;-1:-1:-1;;;;;37908:5:0;;::::2;::::0;37890:24:::2;::::0;::::2;37683:239::o:0;47602:885::-;31916:32;31924:10;31916:30;:32::i;:::-;31914:35;:62;;;;-1:-1:-1;31953:9:0;31966:10;31953:23;31914:62;31906:96;;;;;-1:-1:-1;;;31906:96:0;;;;;;;;;;;;-1:-1:-1;;;31906:96:0;;;;;;;;;;;;;;;32084:11:::1;::::0;::::1;;32083:12;32075:57;;;::::0;;-1:-1:-1;;;32075:57:0;;::::1;;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;;;;;;;;;32075:57:0;;;;;;;;;;;;;::::1;;47755:63:::2;47769:10;47781:25;47808:9;47755:13;:63::i;:::-;47863:10;47829:11;47843:31:::0;;;:19:::2;:31;::::0;;;;;47889:10;;47885:595:::2;;47936:10;47950:1;47916:31:::0;;;:19:::2;:31;::::0;;;;:35;;;48049:28:::2;::::0;;48079:29;48042:110:::2;::::0;-1:-1:-1;;;;;48049:28:0;;::::2;::::0;48079:29:::2;48110:6:::0;48118:22;48142:9;48042:6:::2;:110::i;:::-;48258:10;48242:27;::::0;;;:15:::2;:27;::::0;;;;;48013:139;;-1:-1:-1;48242:54:0::2;::::0;48013:139;48242:54:::2;:31;:54;:::i;:::-;48228:10;48212:27;::::0;;;:15:::2;:27;::::0;;;;;;;;:84;;;;48425:43;;;;;;;48228:10;;48425:43:::2;::::0;;;;;;;::::2;47885:595;;32143:1;47602:885:::0;;;:::o;32447:52::-;;;;;;;;;;;;;:::o;36304:224::-;21926:5;;-1:-1:-1;;;;;21926:5:0;21912:10;:19;21904:28;;;;;;36402:7:::1;36384:14;:25;;36376:59;;;::::0;;-1:-1:-1;;;36376:59:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;36376:59:0;;;;;;;;;;;;;::::1;;36446:11;:28:::0;;;36490:30:::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;36304:224:::0;:::o;32817:57::-;;;;;;;;;;;;;;;:::o;43104:666::-;37024:10;36999:36;;;;:24;:36;;;;;;;;36991:78;;;;;-1:-1:-1;;;36991:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;43280:1:::1;43271:6;:10;43263:44;;;::::0;;-1:-1:-1;;;43263:44:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;43263:44:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;43326:21:0;::::1;43318:50;;;::::0;;-1:-1:-1;;;43318:50:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;43318:50:0;;;;;;;;;;;;;::::1;;43386:29;::::0;43379:89:::1;::::0;-1:-1:-1;;;;;43386:29:0::1;43434:10;43454:4;43461:6:::0;43379:89:::1;:54;:89;:::i;:::-;43489:67;43503:7;43512:32;43546:9;43489:13;:67::i;:::-;-1:-1:-1::0;;;;;43604:24:0;::::1;;::::0;;;:15:::1;:24;::::0;;;;;:36:::1;::::0;43633:6;43604:36:::1;:28;:36;:::i;:::-;-1:-1:-1::0;;;;;43577:24:0;::::1;;::::0;;;:15:::1;:24;::::0;;;;:63;43661:20:::1;:7;43593::::0;43661:20:::1;:11;:20;:::i;:::-;-1:-1:-1::0;;;;;;43698:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;;;;43721:3:::1;43698:26:::0;;43740:22;;;;;;::::1;::::0;;;;;::::1;::::0;;;;;;;;::::1;43104:666:::0;;;;:::o;32278:44::-;;;;;;;;;;;;;:::o;30697:38::-;;;;:::o;31757:31::-;;;;;;:::o;32384:50::-;;;;;;;;;;;;;:::o;30768:38::-;;;;:::o;36732:198::-;21926:5;;-1:-1:-1;;;;;21926:5:0;21912:10;:19;21904:28;;;;;;-1:-1:-1;;;;;36825:34:0;::::1;36862:5;36825:34:::0;;;:24:::1;:34;::::0;;;;;;;;:42;;-1:-1:-1;;36825:42:0::1;::::0;;36883:39;;;;;;;::::1;::::0;;;;;;;;::::1;36732:198:::0;:::o;21496:20::-;;;-1:-1:-1;;;;;21496:20:0;;:::o;41037:911::-;41099:4;41121:25;:7;41138;41121:25;:16;:25;:::i;:::-;41116:40;;-1:-1:-1;41155:1:0;41148:8;;41116:40;-1:-1:-1;;;;;41171:24:0;;;;;;:15;:24;;;;;;41167:43;;-1:-1:-1;41209:1:0;41202:8;;41167:43;41231:13;41255:19;41277:38;41299:15;;41277:17;:21;;:38;;;;:::i;:::-;41255:60;-1:-1:-1;41338:3:0;41356:21;;;41352:75;;;-1:-1:-1;41401:14:0;41352:75;-1:-1:-1;;;;;41451:24:0;;;;;;:15;:24;;;;;;:32;-1:-1:-1;41447:155:0;;41511:1;41500:12;;41447:155;;;-1:-1:-1;;;;;41565:24:0;;;;;;:15;:24;;;;;;41556:34;;:4;;:34;:8;:34;:::i;:::-;41545:45;;41447:155;-1:-1:-1;;;;;41634:24:0;;41614:17;41634:24;;;:15;:24;;;;;;41842:15;;41745:17;;41634:24;;41614:17;41698:199;;41893:3;;41698:160;;41842:15;41698:160;;41798:8;;41698:65;;41634:24;;41698:65;:46;:65;:::i;:::-;:99;:109;:99;:109;:::i;:::-;:143;:160;:143;:160;:::i;:199::-;41679:218;-1:-1:-1;;;;;;41037:911:0;;;;:::o;32512:45::-;;;;;;;;;;;;-1:-1:-1;;;;;32512:45:0;;:::o;35424:295::-;21926:5;;-1:-1:-1;;;;;21926:5:0;21912:10;:19;21904:28;;;;;;35551:5:::1;35524:24;:32;35516:72;;;::::0;;-1:-1:-1;;;35516:72:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;35599:24;:51:::0;;;35666:45:::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;35424:295:::0;:::o;30372:89::-;;;-1:-1:-1;;;;;30372:89:0;;:::o;35139:279::-;21926:5;;-1:-1:-1;;;;;21926:5:0;21912:10;:19;21904:28;;;;;;35260:5:::1;35235:22;:30;35227:68;;;::::0;;-1:-1:-1;;;35227:68:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;35306:22;:47:::0;;;35369:41:::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;35139:279:::0;:::o;45640:1189::-;31916:32;31924:10;31916:30;:32::i;:::-;31914:35;:62;;;;-1:-1:-1;31953:9:0;31966:10;31953:23;31914:62;31906:96;;;;;-1:-1:-1;;;31906:96:0;;;;;;;;;;;;-1:-1:-1;;;31906:96:0;;;;;;;;;;;;;;;45791:10:::1;45775:27;::::0;;;:15:::1;:27;::::0;;;;;:47;-1:-1:-1;45775:47:0::1;45767:86;;;::::0;;-1:-1:-1;;;45767:86:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;45917:11;::::0;45902:10:::1;45890:23;::::0;;;:11:::1;:23;::::0;;;;;45882:32:::1;::::0;:3:::1;::::0;:32:::1;:7;:32;:::i;:::-;:46;45874:111;;;;-1:-1:-1::0;;;45874:111:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46006:63;46020:10;46032:25;46059:9;46006:13;:63::i;:::-;46090:8;46101:55;46152:3;46101:46;46122:24;;46101:16;:20;;:46;;;;:::i;:55::-;46090:66:::0;-1:-1:-1;46167:19:0::1;46189:25;:16:::0;46090:66;46189:25:::1;:20;:25;:::i;:::-;46167:47:::0;-1:-1:-1;46229:7:0;;46225:116:::1;;46304:19;::::0;;46260:29;46253:76:::1;::::0;-1:-1:-1;;;;;46260:29:0;;::::1;::::0;46304:19:::1;46325:3:::0;46253:76:::1;:50;:76;:::i;:::-;46358:29;::::0;46351:78:::1;::::0;-1:-1:-1;;;;;46358:29:0::1;46402:10;46414:14:::0;46351:78:::1;:50;:78;:::i;:::-;46496:10;46480:27;::::0;;;:15:::1;:27;::::0;;;;;:49:::1;::::0;46512:16;46480:49:::1;:31;:49;:::i;:::-;46466:10;46450:27;::::0;;;:15:::1;:27;::::0;;;;:79;;;;46554:28:::1;::::0;:7:::1;::::0;:28:::1;:16;:28;:::i;:::-;:64;;;;-1:-1:-1::0;46602:10:0::1;46586:27;::::0;;;:15:::1;:27;::::0;;;;;:32;46554:64:::1;46550:209;;;46635:26;:7;46650:10;46635:26;:14;:26;:::i;:::-;-1:-1:-1::0;46736:10:0::1;46676:52;46706:21:::0;;;:9:::1;:21;::::0;;;;;;;;-1:-1:-1;;;;;46706:21:0::1;46676:52:::0;;:29:::1;:52:::0;;;;;:71:::1;::::0;::::1;:59;:71;:::i;:::-;;46550:209;46784:37;::::0;;46792:10:::1;46784:37:::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;;;;;;;;::::1;32013:1;;45640:1189:::0;;;:::o;30842:40::-;;;;:::o;32223:48::-;;;;;;;;;;;;;:::o;32564:55::-;;;;;;;;;;;;;:::o;30468:88::-;;;-1:-1:-1;;;;;30468:88:0;;:::o;32887:30::-;;;;:::o;31093:49::-;31136:6;31093:49;:::o;31659:39::-;;;;:::o;31617:35::-;;;;:::o;31272:50::-;31314:8;31272:50;:::o;36534:192::-;21926:5;;-1:-1:-1;;;;;21926:5:0;21912:10;:19;21904:28;;;;;;-1:-1:-1;;;;;36624:34:0;::::1;;::::0;;;:24:::1;:34;::::0;;;;;;;;:41;;-1:-1:-1;;36624:41:0::1;36661:4;36624:41;::::0;;36681:37;;;;;;;::::1;::::0;;;;;;;;::::1;36534:192:::0;:::o;34495:283::-;21926:5;;-1:-1:-1;;;;;21926:5:0;21912:10;:19;21904:28;;;;;;-1:-1:-1;;;;;34595:36:0;::::1;34587:65;;;::::0;;-1:-1:-1;;;34587:65:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;34587:65:0;;;;;;;;;;;;;::::1;;34663:19;:44:::0;;-1:-1:-1;;;;;;34663:44:0::1;-1:-1:-1::0;;;;;34663:44:0;;::::1;::::0;;;::::1;::::0;;;;34723:47:::1;::::0;;34750:19;;;::::1;34723:47:::0;;;::::1;::::0;::::1;::::0;;;;;;::::1;34495:283:::0;:::o;30949:41::-;;;;:::o;41960:236::-;42029:4;42046:12;42061:23;42076:7;42061:14;:23::i;:::-;-1:-1:-1;;;;;42116:28:0;;42095:18;42116:28;;;:19;:28;;;;;;42046:38;;-1:-1:-1;42162:26:0;42046:38;42116:28;42162:26;:11;:26;:::i;:::-;42155:33;41960:236;-1:-1:-1;;;;41960:236:0:o;49761:462::-;21926:5;;-1:-1:-1;;;;;21926:5:0;21912:10;:19;21904:28;;;;;;-1:-1:-1;;;;;49869:23:0;::::1;49861:53;;;::::0;;-1:-1:-1;;;49861:53:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;49861:53:0;;;;;;;;;;;;;::::1;;49939:18;;49933:3;:24;49925:62;;;::::0;;-1:-1:-1;;;49925:62:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;50002:19:0;::::1;49998:162;;50100:27;::::0;50075:9;;-1:-1:-1;;;;;50100:19:0;::::1;::::0;:27;::::1;;;::::0;50120:6;;50038:26:::1;50100:27:::0;50038:26;50100:27;50120:6;50100:19;:27;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;50142:7;;;49998:162;50170:45;-1:-1:-1::0;;;;;50170:26:0;::::1;50197:9:::0;50208:6;50170:45:::1;:26;:45;:::i;:::-;49761:462:::0;;;:::o;30654:36::-;;;;:::o;46841:749::-;31916:32;31924:10;31916:30;:32::i;:::-;31914:35;:62;;;;-1:-1:-1;31953:9:0;31966:10;31953:23;31914:62;31906:96;;;;;-1:-1:-1;;;31906:96:0;;;;;;;;;;;;-1:-1:-1;;;31906:96:0;;;;;;;;;;;;;;;32084:11:::1;::::0;::::1;;32083:12;32075:57;;;::::0;;-1:-1:-1;;;32075:57:0;;::::1;;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;;;;;;;;;32075:57:0;;;;;;;;;;;;;::::1;;46988:63:::2;47002:10;47014:25;47041:9;46988:13;:63::i;:::-;47096:10;47062:11;47076:31:::0;;;:19:::2;:31;::::0;;;;;47122:10;;47118:465:::2;;47169:10;47183:1;47149:31:::0;;;:19:::2;:31;::::0;;;;:35;;;47282:28:::2;::::0;;47312:29;47275:107:::2;::::0;-1:-1:-1;;;;;47282:28:0;;::::2;::::0;47312:29:::2;47343:6:::0;47351:19;47372:9;47275:6:::2;:107::i;:::-;47418:29;::::0;47246:136;;-1:-1:-1;47411:85:0::2;::::0;-1:-1:-1;;;;;47418:29:0::2;47462:10;47246:136:::0;47411:85:::2;:50;:85;:::i;:::-;47518:53;::::0;;;;;;;47537:10:::2;::::0;47518:53:::2;::::0;;;;;::::2;::::0;;::::2;47118:465;32143:1;46841:749:::0;;;:::o;31570:34::-;;;-1:-1:-1;;;;;31570:34:0;;:::o;22115:178::-;21926:5;;-1:-1:-1;;;;;21926:5:0;21912:10;:19;21904:28;;;;;;-1:-1:-1;;;;;22192:22:0;::::1;22184:31;;;::::0;::::1;;22248:5;::::0;;22227:37:::1;::::0;-1:-1:-1;;;;;22227:37:0;;::::1;::::0;22248:5;::::1;::::0;22227:37:::1;::::0;::::1;22271:5;:16:::0;;-1:-1:-1;;;;;;22271:16:0::1;-1:-1:-1::0;;;;;22271:16:0;;;::::1;::::0;;;::::1;::::0;;22115:178::o;32329:48::-;;;;;;;;;;;;;:::o;31048:32::-;;;;:::o;35725:283::-;21926:5;;-1:-1:-1;;;;;21926:5:0;21912:10;:19;21904:28;;;;;;35849:5:::1;35823:23;:31;35815:66;;;::::0;;-1:-1:-1;;;35815:66:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;35815:66:0;;;;;;;;;;;;;::::1;;35892:23;:49:::0;;;35957:43:::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;35725:283:::0;:::o;42321:276::-;-1:-1:-1;;;;;42467:39:0;;42398:19;42467:39;;;:29;:39;;;;;42398:19;;42467:48;;:46;:48::i;:::-;-1:-1:-1;;;;;42542:38:0;;;;;;:28;:38;;;;;42450:65;;-1:-1:-1;42542:47:0;;:45;:47::i;:::-;42526:63;;42321:276;;;:::o;43782:1846::-;31916:32;31924:10;31916:30;:32::i;:::-;31914:35;:62;;;;-1:-1:-1;31953:9:0;31966:10;31953:23;31914:62;31906:96;;;;;-1:-1:-1;;;31906:96:0;;;;;;;;;;;;-1:-1:-1;;;31906:96:0;;;;;;;;;;;;;;;32084:11:::1;::::0;::::1;;32083:12;32075:57;;;::::0;;-1:-1:-1;;;32075:57:0;;::::1;;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;;;;;;;;;32075:57:0;;;;;;;;;;;;;::::1;;43965:1:::2;43949:13;:17;43941:53;;;::::0;;-1:-1:-1;;;43941:53:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;44012:29;::::0;44005:96:::2;::::0;-1:-1:-1;;;;;44012:29:0::2;44060:10;44080:4;44087:13:::0;44005:96:::2;:54;:96;:::i;:::-;44122:63;44136:10;44148:25;44175:9;44122:13;:63::i;:::-;44206:8;44217:50;44263:3;44217:41;44235:22;;44217:13;:17;;:41;;;;:::i;:50::-;44206:61:::0;-1:-1:-1;44278:19:0::2;44300:22;:13:::0;44206:61;44300:22:::2;:17;:22;:::i;:::-;44278:44:::0;-1:-1:-1;44337:7:0;;44333:116:::2;;44412:19;::::0;;44368:29;44361:76:::2;::::0;-1:-1:-1;;;;;44368:29:0;;::::2;::::0;44412:19:::2;44433:3:::0;44361:76:::2;:50;:76;:::i;:::-;45159:10;45143:27;::::0;;;:15:::2;:27;::::0;;;;;:47:::2;::::0;45175:14;45143:47:::2;:31;:47;:::i;:::-;45129:10;45113:27;::::0;;;:15:::2;:27;::::0;;;;:77;;;;45211:23:::2;::::0;:7:::2;::::0;:23:::2;:11;:23;:::i;:::-;-1:-1:-1::0;45269:10:0::2;45292:1;45259:21:::0;;;:9:::2;:21;::::0;;;;;-1:-1:-1;;;;;45259:21:0::2;45255:100;;45321:10;45311:21;::::0;;;:9:::2;:21;::::0;;;;:32;;-1:-1:-1;;;;;;45311:32:0::2;-1:-1:-1::0;;;;;45311:32:0;::::2;;::::0;;45255:100:::2;45431:10;45375:51;45404:21:::0;;;:9:::2;:21;::::0;;;;;;;;-1:-1:-1;;;;;45404:21:0::2;45375:51:::0;;:28:::2;:51:::0;;;;;:67:::2;::::0;::::2;:55;:67;:::i;:::-;-1:-1:-1::0;45510:10:0::2;45453:52;45483:21:::0;;;:9:::2;:21;::::0;;;;;;;;-1:-1:-1;;;;;45483:21:0::2;45453:52:::0;;:29:::2;:52:::0;;;;;:68:::2;::::0;::::2;:56;:68;:::i;:::-;-1:-1:-1::0;45554:10:0::2;45542:23;::::0;;;:11:::2;:23;::::0;;;;;;;;45568:3:::2;45542:29:::0;;45587:33;;;;;;::::2;::::0;;;;;::::2;::::0;;;;;;;;::::2;32143:1;;43782:1846:::0;;;;:::o;909:181::-;967:7;999:5;;;1023:6;;;;1015:46;;;;;-1:-1:-1;;;1015:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1081:1;-1:-1:-1;909:181:0;;;;;:::o;19516:149::-;19590:7;19633:22;19637:3;19649:5;19633:3;:22::i;1373:136::-;1431:7;1458:43;1462:1;1465;1458:43;;;;;;;;;;;;;;;;;:3;:43::i;19055:117::-;19118:7;19145:19;19153:3;19145:7;:19::i;6050:422::-;6417:20;6456:8;;;6050:422::o;39204:962::-;39311:16;39330:23;39345:7;39330:14;:23::i;:::-;39311:42;-1:-1:-1;39368:15:0;;39364:754;;39400:16;39419:51;39464:5;39419:40;39435:23;;39419:11;:15;;:40;;;;:::i;:51::-;39400:70;-1:-1:-1;39485:24:0;39512:28;:11;39400:70;39512:28;:15;:28;:::i;:::-;-1:-1:-1;;;;;39614:18:0;;;39569:12;39614:18;;;:9;:18;;;;;;39485:55;;-1:-1:-1;39569:12:0;39584:100;;39614:18;39634:11;39647:25;39674:9;39584:29;:100::i;:::-;39569:115;-1:-1:-1;39727:11:0;39753:76;;;;-1:-1:-1;39794:19:0;39753:76;-1:-1:-1;;;;;39888:28:0;;;;;;:19;:28;;;;;;:40;;39921:6;39888:40;:32;:40;:::i;:::-;-1:-1:-1;;;;;39857:28:0;;;;;;:19;:28;;;;;;;;:71;;;;39972:17;:26;;;;:38;;40003:6;39972:38;:30;:38;:::i;:::-;-1:-1:-1;;;;;39943:26:0;;;;;;:17;:26;;;;;:67;40061:19;;:31;;40085:6;40061:31;:23;:31;:::i;:::-;40039:19;:53;-1:-1:-1;;;;39364:754:0;-1:-1:-1;;;;;;;;40128:24:0;;;;;:15;:24;;;;;40155:3;40128:30;;39204:962::o;37934:1258::-;38069:21;38134:7;-1:-1:-1;;;;;38121:20:0;:9;-1:-1:-1;;;;;38121:20:0;;38117:75;;;-1:-1:-1;38165:15:0;38158:22;;38117:75;38254:15;;38216:58;;-1:-1:-1;;;;;38216:29:0;;;;38254:15;;38216:58;:29;:58;:::i;:::-;38323:15;;38285:72;;-1:-1:-1;;;;;38285:29:0;;;;38323:15;38341;38285:72;:29;:72;:::i;:::-;38403:40;;;-1:-1:-1;;;38403:40:0;;38437:4;38403:40;;;;;;38378:22;;-1:-1:-1;;;;;38403:25:0;;;;;:40;;;;;;;;;;;;;;;:25;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38403:40:0;38523:15;;:22;;;-1:-1:-1;;;38523:22:0;;;;38403:40;;-1:-1:-1;38464:21:0;;-1:-1:-1;;;;;38523:15:0;;;;:20;;:22;;;;;38403:40;;38523:22;;;;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38523:22:0;-1:-1:-1;;;;;38510:35:0;;;;;;;:72;;;38560:15;;;;;;;;;-1:-1:-1;;;;;38560:15:0;-1:-1:-1;;;;;38560:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38560:22:0;-1:-1:-1;;;;;38549:33:0;;;;;;38510:72;38506:363;;;38606:16;;;38620:1;38606:16;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38606:16:0;38599:23;;38647:9;38637:4;38642:1;38637:7;;;;;;;;;;;;;:19;-1:-1:-1;;;;;38637:19:0;;;-1:-1:-1;;;;;38637:19:0;;;;;38681:7;38671:4;38676:1;38671:7;;;;;;;;;;;;;:17;-1:-1:-1;;;;;38671:17:0;;;-1:-1:-1;;;;;38671:17:0;;;;;38506:363;;;38728:16;;;38742:1;38728:16;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38728:16:0;38721:23;;38769:9;38759:4;38764:1;38759:7;;;;;;;;-1:-1:-1;;;;;38759:19:0;;;:7;;;;;;;;;;:19;;;;38803:15;;:22;;;-1:-1:-1;;;38803:22:0;;;;:15;;;;;:20;;:22;;;;;38759:7;;38803:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38803:22:0;38793:7;;:4;;38798:1;;38793:7;;;;;;;;;;;:32;-1:-1:-1;;;;;38793:32:0;;;-1:-1:-1;;;;;38793:32:0;;;;;38850:7;38840:4;38845:1;38840:7;;;;;;;;;;;;;:17;-1:-1:-1;;;;;38840:17:0;;;-1:-1:-1;;;;;38840:17:0;;;;;38506:363;38889:15;;:102;;-1:-1:-1;;;38889:102:0;;;;;;;;;;;;;;38975:4;38889:102;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38889:15:0;;;;:40;;38930:15;;38947:12;;38961:4;;38975;;38982:8;;38889:102;;;;;;;;;;;;:15;:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;38889:102:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38889:102:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;38889:102:0;;;;;;;;-1:-1:-1;;;39037:40:0;;39071:4;39037:40;;;;;39012:22;;-1:-1:-1;;;;;;39037:25:0;;;-1:-1:-1;39037:25:0;;-1:-1:-1;39037:40:0;;;;;-1:-1:-1;39037:40:0;;-1:-1:-1;39037:40:0;;;;;;;:25;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39037:40:0;;-1:-1:-1;39088:20:0;39111:40;39037;39133:17;39111:40;:21;:40;:::i;:::-;39088:63;-1:-1:-1;;;;;37934:1258:0;;;;;;;;:::o;25757:205::-;25885:68;;;-1:-1:-1;;;;;25885:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25885:68:0;-1:-1:-1;;;25885:68:0;;;25858:96;;25878:5;;25858:19;:96::i;18257:143::-;18327:4;18351:41;18356:3;-1:-1:-1;;;;;18376:14:0;;18351:4;:41::i;18811:158::-;18891:4;18915:46;18925:3;-1:-1:-1;;;;;18945:14:0;;18915:9;:46::i;2263:471::-;2321:7;2566:6;2562:47;;-1:-1:-1;2596:1:0;2589:8;;2562:47;2633:5;;;2637:1;2633;:5;:1;2657:5;;;;;:10;2649:56;;;;-1:-1:-1;;;2649:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3210:132;3268:7;3295:39;3299:1;3302;3295:39;;;;;;;;;;;;;;;;;:3;:39::i;25572:177::-;25682:58;;;-1:-1:-1;;;;;25682:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25682:58:0;-1:-1:-1;;;25682:58:0;;;25655:86;;25675:5;;25655:19;:86::i;18576:149::-;18649:4;18673:44;18681:3;-1:-1:-1;;;;;18701:14:0;;18673:7;:44::i;17799:204::-;17894:18;;17866:7;;17894:26;-1:-1:-1;17886:73:0;;;;-1:-1:-1;;;17886:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17977:3;:11;;17989:5;17977:18;;;;;;;;;;;;;;;;17970:25;;17799:204;;;;:::o;1812:192::-;1898:7;1934:12;1926:6;;;;1918:29;;;;-1:-1:-1;;;1918:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1970:5:0;;;1812:192;;;;;;:::o;17346:109::-;17429:18;;17346:109::o;40178:847::-;40312:4;-1:-1:-1;;;;;40333:21:0;;;;;;:35;;;40367:1;40358:6;:10;40333:35;40329:666;;;40468:28;;;40498:29;40432:26;;40461:113;;-1:-1:-1;;;;;40468:28:0;;;;40498:29;40529:6;40537:25;40564:9;40461:6;:113::i;:::-;-1:-1:-1;;;;;40637:31:0;;;;;;:22;:31;;;;;;40432:142;;-1:-1:-1;40637:58:0;;40432:142;40637:58;:35;:58;:::i;:::-;-1:-1:-1;;;;;40603:31:0;;;;;;;:22;:31;;;;;:92;;;;40717:29;;40710:82;;40717:29;40626:7;40770:21;40710:82;:50;:82;:::i;:::-;40833:23;;:50;;40861:21;40833:50;:27;:50;:::i;:::-;40807:23;:76;40903:54;;;;;;;;-1:-1:-1;;;;;40903:54:0;;;;;;;;;;;;;40979:4;40972:11;;;;;40329:666;-1:-1:-1;41012:5:0;40178:847;;;;;;:::o;26231:622::-;26601:10;;;26600:62;;-1:-1:-1;26617:39:0;;;-1:-1:-1;;;26617:39:0;;26641:4;26617:39;;;;-1:-1:-1;;;;;26617:39:0;;;;;;;;;:15;;;;;;:39;;;;;;;;;;;;;;;:15;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26617:39:0;:44;26600:62;26592:152;;;;-1:-1:-1;;;26592:152:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26782:62;;;-1:-1:-1;;;;;26782:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26782:62:0;-1:-1:-1;;;26782:62:0;;;26755:90;;26775:5;;27877:761;28301:23;28327:69;28355:4;28327:69;;;;;;;;;;;;;;;;;28335:5;-1:-1:-1;;;;;28327:27:0;;;:69;;;;;:::i;:::-;28411:17;;28301:95;;-1:-1:-1;28411:21:0;28407:224;;28553:10;28542:30;;;;;;;;;;;;;;;-1:-1:-1;28542:30:0;28534:85;;;;-1:-1:-1;;;28534:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14911:414;14974:4;14996:21;15006:3;15011:5;14996:9;:21::i;:::-;14991:327;;-1:-1:-1;15034:23:0;;;;;;;;:11;:23;;;;;;;;;;;;;15217:18;;15195:19;;;:12;;;:19;;;;;;:40;;;;15250:11;;14991:327;-1:-1:-1;15301:5:0;15294:12;;17131:129;17204:4;17228:19;;;:12;;;;;:19;;;;;;:24;;;17131:129::o;3838:278::-;3924:7;3959:12;3952:5;3944:28;;;;-1:-1:-1;;;3944:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3983:9;3999:1;3995;:5;;;;;;;3838:278;-1:-1:-1;;;;;3838:278:0:o;15501:1544::-;15567:4;15706:19;;;:12;;;:19;;;;;;15742:15;;15738:1300;;16177:18;;-1:-1:-1;;16128:14:0;;;;16177:22;;;;16104:21;;16177:3;;:22;;16464;;;;;;;;;;;;;;16444:42;;16610:9;16581:3;:11;;16593:13;16581:26;;;;;;;;;;;;;;;;;;;:38;;;;16687:23;;;16729:1;16687:12;;;:23;;;;;;16713:17;;;16687:43;;16839:17;;16687:3;;16839:17;;;;;;;;;;;;;;;;;;;;;;16934:3;:12;;:19;16947:5;16934:19;;;;;;;;;;;16927:26;;;16977:4;16970:11;;;;;;;;15738:1300;17021:5;17014:12;;;;;8968:195;9071:12;9103:52;9125:6;9133:4;9139:1;9142:12;9071;10272:18;10283:6;10272:10;:18::i;:::-;10264:60;;;;;-1:-1:-1;;;10264:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10398:12;10412:23;10439:6;-1:-1:-1;;;;;10439:11:0;10459:5;10467:4;10439:33;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10439:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10397:75;;;;10490:52;10508:7;10517:10;10529:12;10490:17;:52::i;:::-;10483:59;10020:530;-1:-1:-1;;;;;;;10020:530:0:o;12560:742::-;12675:12;12704:7;12700:595;;;-1:-1:-1;12735:10:0;12728:17;;12700:595;12849:17;;:21;12845:439;;13112:10;13106:17;13173:15;13160:10;13156:2;13152:19;13145:44;13060:148;13248:20;;-1:-1:-1;;;13248:20:0;;;;;;;;;;;;;;;;;13255:12;;13248:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Swarm Source
ipfs://de37070b9b1aade0bbb3dd12c7e053299f99c221651b472e765a36fe68ae523f
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ 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.