More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 55 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Claim | 18684953 | 285 days ago | IN | 0 ETH | 0.00871408 | ||||
Unstake | 18684811 | 285 days ago | IN | 0 ETH | 0.00387494 | ||||
Unstake | 18684780 | 285 days ago | IN | 0 ETH | 0.00388386 | ||||
Unstake | 18684777 | 285 days ago | IN | 0 ETH | 0.00391595 | ||||
Unstake | 18684682 | 285 days ago | IN | 0 ETH | 0.00377766 | ||||
Unstake | 17955348 | 387 days ago | IN | 0 ETH | 0.00136854 | ||||
Claim | 17690151 | 424 days ago | IN | 0 ETH | 0.00324005 | ||||
Claim | 17690124 | 424 days ago | IN | 0 ETH | 0.00303107 | ||||
Unstake | 17690123 | 424 days ago | IN | 0 ETH | 0.00202697 | ||||
Claim Any Token | 17484919 | 453 days ago | IN | 0 ETH | 0.00079072 | ||||
Claim Any Token | 17484917 | 453 days ago | IN | 0 ETH | 0.00077845 | ||||
Unstake | 17096380 | 508 days ago | IN | 0 ETH | 0.00535014 | ||||
Unstake | 16832537 | 545 days ago | IN | 0 ETH | 0.00214842 | ||||
Unstake | 16408947 | 604 days ago | IN | 0 ETH | 0.00172595 | ||||
Unstake | 16341137 | 614 days ago | IN | 0 ETH | 0.00191042 | ||||
Claim | 16340654 | 614 days ago | IN | 0 ETH | 0.0069443 | ||||
Unstake | 16301515 | 619 days ago | IN | 0 ETH | 0.00229183 | ||||
Claim | 16234989 | 629 days ago | IN | 0 ETH | 0.00273799 | ||||
Unstake | 16234982 | 629 days ago | IN | 0 ETH | 0.00225339 | ||||
Unstake | 16218271 | 631 days ago | IN | 0 ETH | 0.00138127 | ||||
Unstake | 16091833 | 649 days ago | IN | 0 ETH | 0.0011533 | ||||
Unstake | 15965792 | 666 days ago | IN | 0 ETH | 0.00184685 | ||||
Unstake | 15664321 | 708 days ago | IN | 0 ETH | 0.00122547 | ||||
Unstake | 15646568 | 711 days ago | IN | 0 ETH | 0.00210306 | ||||
Unstake | 15611900 | 716 days ago | IN | 0 ETH | 0.00123931 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
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 = 4000; 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 = 60 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
60a0604052600180546001600160a01b031990811673961c8c0b1aad0c0b10a51fef6a867e3091bcef171790915560028054821673bd100d061e120b2c67a24453cf6368e63f1be056179055610fa06003556301e133806004556000600581905560068190556101f4600755624f1a0060085560098054909216737a250d5630b4cf539739df2c5dacb4c659f2488d17909155600b819055600c55600d805460ff19169055348015620000b157600080fd5b5060405162003ab438038062003ab48339818101604052610140811015620000d857600080fd5b508051602082015160408301516060840151608085015160a086015160c087015160e088015161010089015161012090990151600080546001600160a01b0319163317905597989697959694959394929391929091620001418a6001600160e01b036200031616565b62000155896001600160e01b03620003d616565b62000169856001600160e01b036200049716565b6200017d846001600160e01b036200054116565b62000191866001600160e01b03620005eb16565b6001600160a01b038816620001ed576040805162461bcd60e51b815260206004820152601e60248201527f496e76616c6964206465706f73697420746f6b656e2061646472657373210000604482015290519081900360640190fd5b6001600160a01b03871662000249576040805162461bcd60e51b815260206004820152601d60248201527f496e76616c69642072657761726420746f6b656e206164647265737321000000604482015290519081900360640190fd5b600180546001600160a01b03808b166001600160a01b03199283161790925560028054928a1692909116919091179055600383905560048290556301e13380821115620002c85760405162461bcd60e51b815260040180806020018281038252602b81526020018062003a89602b913960400191505060405180910390fd5b620002dc816001600160e01b036200069516565b426080818152505062000302630208c080426200074160201b620021af1790919060201c565b601a5550620007a398505050505050505050565b6000546001600160a01b031633146200032e57600080fd5b6001600160a01b0381166200037c576040805162461bcd60e51b815260206004820152600f60248201526e496e76616c696420726f757465722160881b604482015290519081900360640190fd5b600980546001600160a01b0319166001600160a01b03838116919091179182905560408051929091168252517f49381de8f56ca0c45bdd955e613a01e042fdf45d2ae4b0cfd920226fe0ed2ede916020908290030190a150565b6000546001600160a01b03163314620003ee57600080fd5b6001600160a01b0381166200043d576040805162461bcd60e51b815260206004820152601060248201526f496e76616c696420616464726573732160801b604482015290519081900360640190fd5b600a80546001600160a01b0319166001600160a01b03838116919091179182905560408051929091168252517fafc54c644914e872610dbc4334999d957d145108fd88d63d83cc3a710dc6ee71916020908290030190a150565b6000546001600160a01b03163314620004af57600080fd5b612710811062000506576040805162461bcd60e51b815260206004820152601960248201527f4e6577205374616b696e672066656520746f6f206d7563682100000000000000604482015290519081900360640190fd5b60058190556040805182815290517f327680b8ba8221210809b2aae37f88a529ae9eec9a3a3fe952fe0a3a262b487f9181900360200190a150565b6000546001600160a01b031633146200055957600080fd5b6127108110620005b0576040805162461bcd60e51b815260206004820152601b60248201527f4e657720556e7374616b696e672066656520746f6f206d756368210000000000604482015290519081900360640190fd5b60068190556040805182815290517f0a9e89cff3f9f01bd1c6aeb9b71324bb138123c40d02eb478613fb3427b231009181900360200190a150565b6000546001600160a01b031633146200060357600080fd5b61271081106200065a576040805162461bcd60e51b815260206004820152601660248201527f546f6f206d75636820726566657272616c206665652100000000000000000000604482015290519081900360640190fd5b60078190556040805182815290517fd51125b9b3b3e2699a79428534dbc7cf5f2c1e3612ebeaf02853a94ea13fee749181900360200190a150565b6000546001600160a01b03163314620006ad57600080fd5b6276a70081111562000706576040805162461bcd60e51b815260206004820152601560248201527f4c6f636b75702054696d6520746f6f206c6f6e67210000000000000000000000604482015290519081900360640190fd5b60088190556040805182815290517fadbac78f382a6f10bef84ad4b704cac4817788ffec4f83ac665d7a1152dc44729181900360200190a150565b6000828201838110156200079c576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6080516132c6620007c3600039806109d652806113f452506132c66000f3fe608060405234801561001057600080fd5b50600436106102d65760003560e01c8063b7d3786e11610182578063dbcdc2cc116100e9578063f1bab2ec116100a2578063f5326ada1161007c578063f5326ada14610938578063f63de3ac14610940578063f749229e1461095d578063faf5ec0c1461099c576102d6565b8063f1bab2ec146108e4578063f2fde38b146108ec578063f3f91fa014610912576102d6565b8063dbcdc2cc14610829578063df4b70ba1461084f578063e7b62f5814610857578063e9dc18ec1461087d578063ebe6cad1146108b3578063efa9a9be146108bb576102d6565b8063ca7e08351161013b578063ca7e0835146107db578063ca9a2132146107e3578063d079490f146107eb578063d578ceab146107f3578063d7130e14146107fb578063db16caf214610803576102d6565b8063b7d3786e14610739578063bd97b37514610756578063c1665f401461077f578063c326bf4f14610787578063c6363892146107ad578063c80ed116146107d3576102d6565b80634fcfe7ae116102415780637e44b933116101fa57806398896d10116101d457806398896d10146106c85780639ca423b3146106ee578063a1ccb81314610714578063a2a5124114610731576102d6565b80637e44b933146106925780637fc505031461069a5780638da5cb5b146106c0576102d6565b80634fcfe7ae146105c457806355468afa146105fe578063583d42fd146106365780635dbdda691461065c5780635f9e8f82146106645780636270cd181461066c576102d6565b80632e9f87a6116102935780632e9f87a614610502578063308feec31461054857806331e244e5146105505780633ddb34221461055857806348f554d3146105815780634b62b70b146105a7576102d6565b80630c3d5157146102db5780631419841d146102f55780631694505e1461031d5780631808fdb8146103415780631911cf4a146103905780632a6b9bfd146104d6575b600080fd5b6102e36109d4565b60408051918252519081900360200190f35b61031b6004803603602081101561030b57600080fd5b50356001600160a01b03166109f8565b005b610325610ab6565b604080516001600160a01b039092168252519081900360200190f35b61036d6004803603604081101561035757600080fd5b506001600160a01b038135169060200135610ac5565b604080516001600160a01b03909316835260208301919091528051918290030190f35b6103b3600480360360408110156103a657600080fd5b5080359060200135610b13565b6040518080602001806020018060200180602001858103855289818151815260200191508051906020019060200280838360005b838110156103ff5781810151838201526020016103e7565b50505050905001858103845288818151815260200191508051906020019060200280838360005b8381101561043e578181015183820152602001610426565b50505050905001858103835287818151815260200191508051906020019060200280838360005b8381101561047d578181015183820152602001610465565b50505050905001858103825286818151815260200191508051906020019060200280838360005b838110156104bc5781810151838201526020016104a4565b505050509050019850505050505050505060405180910390f35b61036d600480360360408110156104ec57600080fd5b506001600160a01b038135169060200135610d97565b61031b600480360360c081101561051857600080fd5b508035906020810135906040810135906060810135906001600160a01b03608082013581169160a0013516610dc1565b6102e3610e16565b61031b610e27565b61031b6004803603606081101561056e57600080fd5b5080359060208101359060400135610ee4565b6102e36004803603602081101561059757600080fd5b50356001600160a01b031661104e565b61031b600480360360208110156105bd57600080fd5b5035611060565b6105ea600480360360208110156105da57600080fd5b50356001600160a01b0316611102565b604080519115158252519081900360200190f35b61031b6004803603608081101561061457600080fd5b506001600160a01b038135169060208101359060408101359060600135611117565b6102e36004803603602081101561064c57600080fd5b50356001600160a01b03166112ee565b6102e3611300565b6105ea611306565b6102e36004803603602081101561068257600080fd5b50356001600160a01b031661130f565b6102e3611321565b61031b600480360360208110156106b057600080fd5b50356001600160a01b0316611327565b610325611396565b6102e3600480360360208110156106de57600080fd5b50356001600160a01b03166113a5565b6103256004803603602081101561070457600080fd5b50356001600160a01b03166114ed565b61031b6004803603602081101561072a57600080fd5b5035611508565b6103256115b0565b61031b6004803603602081101561074f57600080fd5b50356115bf565b61031b6004803603606081101561076c57600080fd5b5080359060208101359060400135611667565b6102e36118fa565b6102e36004803603602081101561079d57600080fd5b50356001600160a01b0316611900565b6102e3600480360360208110156107c357600080fd5b50356001600160a01b0316611912565b610325611924565b6102e3611933565b6102e3611939565b6102e3611940565b6102e3611946565b6102e361194c565b61031b6004803603602081101561081957600080fd5b50356001600160a01b0316611954565b61031b6004803603602081101561083f57600080fd5b50356001600160a01b03166119c6565b6102e3611a85565b6102e36004803603602081101561086d57600080fd5b50356001600160a01b0316611a8b565b61031b6004803603606081101561089357600080fd5b506001600160a01b03813581169160208101359091169060400135611acb565b6102e3611bf3565b61031b600480360360608110156108d157600080fd5b5080359060208101359060400135611bf9565b610325611d4c565b61031b6004803603602081101561090257600080fd5b50356001600160a01b0316611d5b565b6102e36004803603602081101561092857600080fd5b50356001600160a01b0316611de0565b6102e3611df2565b61031b6004803603602081101561095657600080fd5b5035611df8565b6109836004803603602081101561097357600080fd5b50356001600160a01b0316611e99565b6040805192835260208301919091528051918290030190f35b61031b600480360360808110156109b257600080fd5b508035906001600160a01b036020820135169060408101359060600135611ee7565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000546001600160a01b03163314610a0f57600080fd5b6001600160a01b038116610a5c576040805162461bcd60e51b815260206004820152600f60248201526e496e76616c696420726f757465722160881b604482015290519081900360640190fd5b600980546001600160a01b0319166001600160a01b03838116919091179182905560408051929091168252517f49381de8f56ca0c45bdd955e613a01e042fdf45d2ae4b0cfd920226fe0ed2ede916020908290030190a150565b6009546001600160a01b031681565b6001600160a01b03821660009081526017602052604081208190610aef908463ffffffff61221216565b6001600160a01b038116600090815260136020526040902054909590945092505050565b606080606080848610610b2557600080fd5b6000610b37868863ffffffff61221e16565b905060608167ffffffffffffffff81118015610b5257600080fd5b50604051908082528060200260200182016040528015610b7c578160200160208202803683370190505b50905060608267ffffffffffffffff81118015610b9857600080fd5b50604051908082528060200260200182016040528015610bc2578160200160208202803683370190505b50905060608367ffffffffffffffff81118015610bde57600080fd5b50604051908082528060200260200182016040528015610c08578160200160208202803683370190505b50905060608467ffffffffffffffff81118015610c2457600080fd5b50604051908082528060200260200182016040528015610c4e578160200160208202803683370190505b5090508a5b8a811015610d85576000610c6e600e8363ffffffff61221216565b90506000610c82838f63ffffffff61221e16565b905081878281518110610c9157fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060116000836001600160a01b03166001600160a01b0316815260200190815260200160002054868281518110610ce357fe5b60200260200101818152505060126000836001600160a01b03166001600160a01b0316815260200190815260200160002054858281518110610d2157fe5b60200260200101818152505060106000836001600160a01b03166001600160a01b0316815260200190815260200160002054848281518110610d5f57fe5b602090810291909101015250610d7e905081600163ffffffff6121af16565b9050610c53565b50929a91995097509095509350505050565b6001600160a01b03821660009081526018602052604081208190610aef908463ffffffff61221216565b6000546001600160a01b03163314610dd857600080fd5b610de186611060565b610dea85611df8565b610df3846115bf565b610dfc83611508565b610e05826109f8565b610e0e816119c6565b505050505050565b6000610e22600e612260565b905090565b6000546001600160a01b03163314610e3e57600080fd5b600d5460ff1615610e84576040805162461bcd60e51b815260206004820181905260248201526000805160206131bc833981519152604482015290519081900360640190fd5b600d805460ff19166001179055610ea4426203f48063ffffffff6121af16565b601a556000600881905580546040516001600160a01b03909116917fe465b068e033879ed58088ba05882c35e2a52240ea1432b95753d6aebdd0814a91a2565b610eed3361226b565b158015610ef957503233145b610f42576040805162461bcd60e51b81526020600482015260156024820152744e6f20436f6e74726163747320416c6c6f7765642160581b604482015290519081900360640190fd5b600d5460ff1615610f88576040805162461bcd60e51b815260206004820181905260248201526000805160206131bc833981519152604482015290519081900360640190fd5b610f93338483612271565b33600090815260146020526040902054801561104857336000908152601460205260408120819055600254600154610fda916001600160a01b03908116911684878761239d565b33600090815260106020526040902054909150610ffd908263ffffffff6121af16565b33600081815260106020908152604091829020939093558051848152905191927fbd654390d0d973e8c8376ed6053be8658870df892687852cc5c914d700291b8792918290030190a2505b50505050565b60146020526000908152604090205481565b6000546001600160a01b0316331461107757600080fd5b6276a7008111156110c7576040805162461bcd60e51b81526020600482015260156024820152744c6f636b75702054696d6520746f6f206c6f6e672160581b604482015290519081900360640190fd5b60088190556040805182815290517fadbac78f382a6f10bef84ad4b704cac4817788ffec4f83ac665d7a1152dc44729181900360200190a150565b60196020526000908152604090205460ff1681565b3360009081526019602052604090205460ff1661117b576040805162461bcd60e51b815260206004820152601d60248201527f4e6f742074727573746564206465706f73697420636f6e747261637421000000604482015290519081900360640190fd5b600083116111c8576040805162461bcd60e51b8152602060048201526015602482015274416d6f756e74206d757374206e6f7420626520302160581b604482015290519081900360640190fd5b6001600160a01b038416611216576040805162461bcd60e51b815260206004820152601060248201526f496e76616c6964206163636f756e742160801b604482015290519081900360640190fd5b600154611234906001600160a01b031633308663ffffffff61292d16565b61123f848383612271565b6001600160a01b038416600090815260106020526040902054611268908463ffffffff6121af16565b6001600160a01b038516600090815260106020526040902055611292600e8563ffffffff61298716565b506001600160a01b0384166000818152601160209081526040918290204290558151928352820185905280517febedb8b3c678666e7f36970bc8f57abf6d8fa2e828c0da91ea5b75bf68ed101a9281900390910190a150505050565b60116020526000908152604090205481565b60045481565b600d5460ff1681565b60136020526000908152604090205481565b60055481565b6000546001600160a01b0316331461133e57600080fd5b6001600160a01b038116600081815260196020908152604091829020805460ff19169055815192835290517f7e0d9d001816978c78464fad5f6627ab7096346030d64b54bf5205c95816f79f9281900390910190a150565b6000546001600160a01b031681565b60006113b8600e8363ffffffff61299c16565b6113c4575060006114e8565b6001600160a01b0382166000908152601060205260409020546113e9575060006114e8565b6000806114216004547f00000000000000000000000000000000000000000000000000000000000000006121af90919063ffffffff16565b9050428181111561142f5750805b6001600160a01b03851660009081526012602052604090205481116114575760009250611484565b6001600160a01b03851660009081526012602052604090205461148190829063ffffffff61221e16565b92505b6001600160a01b0385166000908152601060205260408120546004546003549192916114e091612710916114d4919082908a906114c890899063ffffffff6129b116565b9063ffffffff6129b116565b9063ffffffff612a0a16565b955050505050505b919050565b6015602052600090815260409020546001600160a01b031681565b6000546001600160a01b0316331461151f57600080fd5b6127108110611575576040805162461bcd60e51b815260206004820152601b60248201527f4e657720556e7374616b696e672066656520746f6f206d756368210000000000604482015290519081900360640190fd5b60068190556040805182815290517f0a9e89cff3f9f01bd1c6aeb9b71324bb138123c40d02eb478613fb3427b231009181900360200190a150565b6001546001600160a01b031681565b6000546001600160a01b031633146115d657600080fd5b612710811061162c576040805162461bcd60e51b815260206004820152601960248201527f4e6577205374616b696e672066656520746f6f206d7563682100000000000000604482015290519081900360640190fd5b60058190556040805182815290517f327680b8ba8221210809b2aae37f88a529ae9eec9a3a3fe952fe0a3a262b487f9181900360200190a150565b6116703361226b565b15801561167c57503233145b6116c5576040805162461bcd60e51b81526020600482015260156024820152744e6f20436f6e74726163747320416c6c6f7765642160581b604482015290519081900360640190fd5b33600090815260106020526040902054831115611729576040805162461bcd60e51b815260206004820152601a60248201527f496e76616c696420616d6f756e7420746f207769746864726177000000000000604482015290519081900360640190fd5b6008543360009081526011602052604090205461174d90429063ffffffff61221e16565b116117895760405162461bcd60e51b81526004018080602001828103825260348152602001806131fd6034913960400191505060405180910390fd5b611794338383612271565b60006117b16127106114d4600654876129b190919063ffffffff16565b905060006117c5858363ffffffff61221e16565b905081156117f057600a546001546117f0916001600160a01b0391821691168463ffffffff612a4c16565b60015461180d906001600160a01b0316338363ffffffff612a4c16565b3360009081526010602052604090205461182d908663ffffffff61221e16565b3360008181526010602052604090209190915561185290600e9063ffffffff61299c16565b801561186b575033600090815260106020526040902054155b156118b857611881600e3363ffffffff612a9e16565b50336000818152601560209081526040808320546001600160a01b03168352601790915290206118b69163ffffffff612a9e16565b505b604080513381526020810187905281517f85082129d87b2fe11527cb1b3b7a520aeb5aa6913f88a3d8757fe40d1db02fdd929181900390910190a15050505050565b60065481565b60106020526000908152604090205481565b60166020526000908152604090205481565b6002546001600160a01b031681565b601a5481565b6203f48081565b600c5481565b600b5481565b630208c08081565b6000546001600160a01b0316331461196b57600080fd5b6001600160a01b038116600081815260196020908152604091829020805460ff19166001179055815192835290517f40c63143c93100e0caf027a91ca0854f28a3efb805e7d1c598a4637f8f22c78c9281900390910190a150565b6000546001600160a01b031633146119dd57600080fd5b6001600160a01b038116611a2b576040805162461bcd60e51b815260206004820152601060248201526f496e76616c696420616464726573732160801b604482015290519081900360640190fd5b600a80546001600160a01b0319166001600160a01b03838116919091179182905560408051929091168252517fafc54c644914e872610dbc4334999d957d145108fd88d63d83cc3a710dc6ee71916020908290030190a150565b60075481565b600080611a97836113a5565b6001600160a01b038416600090815260146020526040902054909150611ac3828263ffffffff6121af16565b949350505050565b6000546001600160a01b03163314611ae257600080fd5b6001600160a01b038216611b31576040805162461bcd60e51b8152602060048201526011602482015270125b9d985b1a5908149958da5c1a595b9d607a1b604482015290519081900360640190fd5b601a544211611b87576040805162461bcd60e51b815260206004820152601960248201527f436f6e7472616374206e6f742065787069726564207965742100000000000000604482015290519081900360640190fd5b6001600160a01b038316611bd45760405182906001600160a01b0382169083156108fc029084906000818181858888f19350505050158015611bcd573d6000803e3d6000fd5b5050611bee565b611bee6001600160a01b038416838363ffffffff612a4c16565b505050565b60035481565b611c023361226b565b158015611c0e57503233145b611c57576040805162461bcd60e51b81526020600482015260156024820152744e6f20436f6e74726163747320416c6c6f7765642160581b604482015290519081900360640190fd5b600d5460ff1615611c9d576040805162461bcd60e51b815260206004820181905260248201526000805160206131bc833981519152604482015290519081900360640190fd5b611ca8338483612271565b33600090815260146020526040902054801561104857336000908152601460205260408120819055600254600154611cef916001600160a01b03908116911684878761239d565b600154909150611d0f906001600160a01b0316338363ffffffff612a4c16565b60408051828152905133917f586b2e63a21a7a4e1402e36f48ce10cb1ec94684fea254c186b76d1f98ecf130919081900360200190a25050505050565b600a546001600160a01b031681565b6000546001600160a01b03163314611d7257600080fd5b6001600160a01b038116611d8557600080fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60126020526000908152604090205481565b60085481565b6000546001600160a01b03163314611e0f57600080fd5b6127108110611e5e576040805162461bcd60e51b8152602060048201526016602482015275546f6f206d75636820726566657272616c206665652160501b604482015290519081900360640190fd5b60078190556040805182815290517fd51125b9b3b3e2699a79428534dbc7cf5f2c1e3612ebeaf02853a94ea13fee749181900360200190a150565b6001600160a01b03811660009081526017602052604081208190611ebc90612260565b6001600160a01b0384166000908152601860205260409020909250611ee090612260565b9050915091565b611ef03361226b565b158015611efc57503233145b611f45576040805162461bcd60e51b81526020600482015260156024820152744e6f20436f6e74726163747320416c6c6f7765642160581b604482015290519081900360640190fd5b600d5460ff1615611f8b576040805162461bcd60e51b815260206004820181905260248201526000805160206131bc833981519152604482015290519081900360640190fd5b60008411611fe0576040805162461bcd60e51b815260206004820152601760248201527f43616e6e6f74206465706f736974203020546f6b656e73000000000000000000604482015290519081900360640190fd5b600154611ffe906001600160a01b031633308763ffffffff61292d16565b612009338383612271565b60006120266127106114d4600554886129b190919063ffffffff16565b9050600061203a868363ffffffff61221e16565b9050811561206557600a54600154612065916001600160a01b0391821691168463ffffffff612a4c16565b33600090815260106020526040902054612085908263ffffffff6121af16565b336000818152601060205260409020919091556120aa90600e9063ffffffff61298716565b50336000908152601560205260409020546001600160a01b03166120f15733600090815260156020526040902080546001600160a01b0319166001600160a01b0387161790555b336000818152601560209081526040808320546001600160a01b03168352601890915290206121259163ffffffff61298716565b50336000818152601560209081526040808320546001600160a01b031683526017909152902061215a9163ffffffff61298716565b50336000818152601160209081526040918290204290558151928352820183905280517febedb8b3c678666e7f36970bc8f57abf6d8fa2e828c0da91ea5b75bf68ed101a9281900390910190a1505050505050565b600082820183811015612209576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b60006122098383612ab3565b600061220983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612b17565b600061220c82612bb3565b3b151590565b600061227c846113a5565b9050801561237e5760006122a16127106114d4600754856129b190919063ffffffff16565b905060006122b5838363ffffffff61221e16565b6001600160a01b03808816600090815260156020526040812054929350916122e09116848888612bb7565b90508381156122ec5750815b6001600160a01b038816600090815260146020526040902054612315908263ffffffff6121af16565b6001600160a01b03891660009081526014602090815260408083209390935560139052205461234a908263ffffffff6121af16565b6001600160a01b038916600090815260136020526040902055600b54612376908263ffffffff6121af16565b600b55505050505b5050506001600160a01b03166000908152601260205260409020429055565b6000846001600160a01b0316866001600160a01b031614156123c0575082612924565b6009546123e1906001600160a01b038881169116600063ffffffff612cc016565b600954612401906001600160a01b0388811691168663ffffffff612cc016565b604080516370a0823160e01b815230600482015290516000916001600160a01b038816916370a0823191602480820192602092909190829003018186803b15801561244b57600080fd5b505afa15801561245f573d6000803e3d6000fd5b505050506040513d602081101561247557600080fd5b5051600954604080516315ab88c960e31b815290519293506060926001600160a01b039092169163ad5c464891600480820192602092909190829003018186803b1580156124c257600080fd5b505afa1580156124d6573d6000803e3d6000fd5b505050506040513d60208110156124ec57600080fd5b50516001600160a01b038981169116148061258b5750600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561255057600080fd5b505afa158015612564573d6000803e3d6000fd5b505050506040513d602081101561257a57600080fd5b50516001600160a01b038881169116145b1561261157604080516002808252606082018352909160208301908036833701905050905087816000815181106125be57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505086816001815181106125ec57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505061271e565b604080516003808252608082019092529060208201606080368337019050509050878160008151811061264057fe5b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561269457600080fd5b505afa1580156126a8573d6000803e3d6000fd5b505050506040513d60208110156126be57600080fd5b50518151829060019081106126cf57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505086816002815181106126fd57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250505b6009546040516338ed173960e01b8152600481018881526024820188905230606483018190526084830188905260a060448401908152855160a485015285516001600160a01b03909516946338ed1739948c948c94899490938d9360c401906020808801910280838360005b838110156127a257818101518382015260200161278a565b505050509050019650505050505050600060405180830381600087803b1580156127cb57600080fd5b505af11580156127df573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561280857600080fd5b810190808051604051939291908464010000000082111561282857600080fd5b90830190602082018581111561283d57600080fd5b825186602082028301116401000000008211171561285a57600080fd5b82525081516020918201928201910280838360005b8381101561288757818101518382015260200161286f565b505050509190910160408181526370a0823160e01b825230600483015251600096506001600160a01b038e1695506370a08231945060248083019450602093509091829003018186803b1580156128dd57600080fd5b505afa1580156128f1573d6000803e3d6000fd5b505050506040513d602081101561290757600080fd5b50519050600061291d828563ffffffff61221e16565b9450505050505b95945050505050565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052611048908590612dcf565b6000612209836001600160a01b038416612e80565b6000612209836001600160a01b038416612eca565b6000826129c05750600061220c565b828202828482816129cd57fe5b04146122095760405162461bcd60e51b81526004018080602001828103825260218152602001806131dc6021913960400191505060405180910390fd5b600061220983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612ee2565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611bee908490612dcf565b6000612209836001600160a01b038416612f47565b81546000908210612af55760405162461bcd60e51b815260040180806020018281038252602281526020018061319a6022913960400191505060405180910390fd5b826000018281548110612b0457fe5b9060005260206000200154905092915050565b60008184841115612ba65760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612b6b578181015183820152602001612b53565b50505050905090810190601f168015612b985780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50508183035b9392505050565b5490565b60006001600160a01b03851615801590612bd15750600084115b15612cb557600254600154600091612bf8916001600160a01b03918216911687878761239d565b6001600160a01b038716600090815260166020526040902054909150612c24908263ffffffff6121af16565b6001600160a01b03808816600090815260166020526040902091909155600154612c569116878363ffffffff612a4c16565b600c54612c69908263ffffffff6121af16565b600c556040805182815290516001600160a01b038816917fefdcb1f2ee8323554150b9eca5209dcd6a164266e8d1f04b95cbcecd0cad5219919081900360200190a26001915050611ac3565b506000949350505050565b801580612d46575060408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b158015612d1857600080fd5b505afa158015612d2c573d6000803e3d6000fd5b505050506040513d6020811015612d4257600080fd5b5051155b612d815760405162461bcd60e51b815260040180806020018281038252603681526020018061325b6036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052611bee9084905b6060612e24826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661300d9092919063ffffffff16565b805190915015611bee57808060200190516020811015612e4357600080fd5b5051611bee5760405162461bcd60e51b815260040180806020018281038252602a815260200180613231602a913960400191505060405180910390fd5b6000612e8c8383612eca565b612ec25750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561220c565b50600061220c565b60009081526001919091016020526040902054151590565b60008183612f315760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315612b6b578181015183820152602001612b53565b506000838581612f3d57fe5b0495945050505050565b600081815260018301602052604081205480156130035783546000198083019190810190600090879083908110612f7a57fe5b9060005260206000200154905080876000018481548110612f9757fe5b600091825260208083209091019290925582815260018981019092526040902090840190558654879080612fc757fe5b6001900381819060005260206000200160009055905586600101600087815260200190815260200160002060009055600194505050505061220c565b600091505061220c565b6060611ac38484600085856130218561226b565b613072576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106130b15780518252601f199092019160209182019101613092565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613113576040519150601f19603f3d011682016040523d82523d6000602084013e613118565b606091505b5091509150613128828286613133565b979650505050505050565b60608315613142575081612bac565b8251156131525782518084602001fd5b60405162461bcd60e51b8152602060048201818152845160248401528451859391928392604401919085019080838360008315612b6b578181015183820152602001612b5356fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e647343616e6e6f74206578656375746520647572696e6720656d657267656e637921536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77596f7520726563656e746c79207374616b65642c20706c656173652077616974206265666f7265207769746864726177696e672e5361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365a26469706673582212206cfe0813b841bc2b238571927688726db565981a80b5211f43076ffb0391f9a564736f6c634300060b0033436f6e7472616374206d7573742065787069726520696e206c657373207468616e203336352064617973210000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000910090ea889b64b4e722ea4b8ff6d5e734dfb38f000000000000000000000000961c8c0b1aad0c0b10a51fef6a867e3091bcef17000000000000000000000000bd100d061e120b2c67a24453cf6368e63f1be05600000000000000000000000000000000000000000000000000000000000001f4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fa00000000000000000000000000000000000000000000000000000000001e1338000000000000000000000000000000000000000000000000000000000004f1a00
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102d65760003560e01c8063b7d3786e11610182578063dbcdc2cc116100e9578063f1bab2ec116100a2578063f5326ada1161007c578063f5326ada14610938578063f63de3ac14610940578063f749229e1461095d578063faf5ec0c1461099c576102d6565b8063f1bab2ec146108e4578063f2fde38b146108ec578063f3f91fa014610912576102d6565b8063dbcdc2cc14610829578063df4b70ba1461084f578063e7b62f5814610857578063e9dc18ec1461087d578063ebe6cad1146108b3578063efa9a9be146108bb576102d6565b8063ca7e08351161013b578063ca7e0835146107db578063ca9a2132146107e3578063d079490f146107eb578063d578ceab146107f3578063d7130e14146107fb578063db16caf214610803576102d6565b8063b7d3786e14610739578063bd97b37514610756578063c1665f401461077f578063c326bf4f14610787578063c6363892146107ad578063c80ed116146107d3576102d6565b80634fcfe7ae116102415780637e44b933116101fa57806398896d10116101d457806398896d10146106c85780639ca423b3146106ee578063a1ccb81314610714578063a2a5124114610731576102d6565b80637e44b933146106925780637fc505031461069a5780638da5cb5b146106c0576102d6565b80634fcfe7ae146105c457806355468afa146105fe578063583d42fd146106365780635dbdda691461065c5780635f9e8f82146106645780636270cd181461066c576102d6565b80632e9f87a6116102935780632e9f87a614610502578063308feec31461054857806331e244e5146105505780633ddb34221461055857806348f554d3146105815780634b62b70b146105a7576102d6565b80630c3d5157146102db5780631419841d146102f55780631694505e1461031d5780631808fdb8146103415780631911cf4a146103905780632a6b9bfd146104d6575b600080fd5b6102e36109d4565b60408051918252519081900360200190f35b61031b6004803603602081101561030b57600080fd5b50356001600160a01b03166109f8565b005b610325610ab6565b604080516001600160a01b039092168252519081900360200190f35b61036d6004803603604081101561035757600080fd5b506001600160a01b038135169060200135610ac5565b604080516001600160a01b03909316835260208301919091528051918290030190f35b6103b3600480360360408110156103a657600080fd5b5080359060200135610b13565b6040518080602001806020018060200180602001858103855289818151815260200191508051906020019060200280838360005b838110156103ff5781810151838201526020016103e7565b50505050905001858103845288818151815260200191508051906020019060200280838360005b8381101561043e578181015183820152602001610426565b50505050905001858103835287818151815260200191508051906020019060200280838360005b8381101561047d578181015183820152602001610465565b50505050905001858103825286818151815260200191508051906020019060200280838360005b838110156104bc5781810151838201526020016104a4565b505050509050019850505050505050505060405180910390f35b61036d600480360360408110156104ec57600080fd5b506001600160a01b038135169060200135610d97565b61031b600480360360c081101561051857600080fd5b508035906020810135906040810135906060810135906001600160a01b03608082013581169160a0013516610dc1565b6102e3610e16565b61031b610e27565b61031b6004803603606081101561056e57600080fd5b5080359060208101359060400135610ee4565b6102e36004803603602081101561059757600080fd5b50356001600160a01b031661104e565b61031b600480360360208110156105bd57600080fd5b5035611060565b6105ea600480360360208110156105da57600080fd5b50356001600160a01b0316611102565b604080519115158252519081900360200190f35b61031b6004803603608081101561061457600080fd5b506001600160a01b038135169060208101359060408101359060600135611117565b6102e36004803603602081101561064c57600080fd5b50356001600160a01b03166112ee565b6102e3611300565b6105ea611306565b6102e36004803603602081101561068257600080fd5b50356001600160a01b031661130f565b6102e3611321565b61031b600480360360208110156106b057600080fd5b50356001600160a01b0316611327565b610325611396565b6102e3600480360360208110156106de57600080fd5b50356001600160a01b03166113a5565b6103256004803603602081101561070457600080fd5b50356001600160a01b03166114ed565b61031b6004803603602081101561072a57600080fd5b5035611508565b6103256115b0565b61031b6004803603602081101561074f57600080fd5b50356115bf565b61031b6004803603606081101561076c57600080fd5b5080359060208101359060400135611667565b6102e36118fa565b6102e36004803603602081101561079d57600080fd5b50356001600160a01b0316611900565b6102e3600480360360208110156107c357600080fd5b50356001600160a01b0316611912565b610325611924565b6102e3611933565b6102e3611939565b6102e3611940565b6102e3611946565b6102e361194c565b61031b6004803603602081101561081957600080fd5b50356001600160a01b0316611954565b61031b6004803603602081101561083f57600080fd5b50356001600160a01b03166119c6565b6102e3611a85565b6102e36004803603602081101561086d57600080fd5b50356001600160a01b0316611a8b565b61031b6004803603606081101561089357600080fd5b506001600160a01b03813581169160208101359091169060400135611acb565b6102e3611bf3565b61031b600480360360608110156108d157600080fd5b5080359060208101359060400135611bf9565b610325611d4c565b61031b6004803603602081101561090257600080fd5b50356001600160a01b0316611d5b565b6102e36004803603602081101561092857600080fd5b50356001600160a01b0316611de0565b6102e3611df2565b61031b6004803603602081101561095657600080fd5b5035611df8565b6109836004803603602081101561097357600080fd5b50356001600160a01b0316611e99565b6040805192835260208301919091528051918290030190f35b61031b600480360360808110156109b257600080fd5b508035906001600160a01b036020820135169060408101359060600135611ee7565b7f0000000000000000000000000000000000000000000000000000000061b75c8481565b6000546001600160a01b03163314610a0f57600080fd5b6001600160a01b038116610a5c576040805162461bcd60e51b815260206004820152600f60248201526e496e76616c696420726f757465722160881b604482015290519081900360640190fd5b600980546001600160a01b0319166001600160a01b03838116919091179182905560408051929091168252517f49381de8f56ca0c45bdd955e613a01e042fdf45d2ae4b0cfd920226fe0ed2ede916020908290030190a150565b6009546001600160a01b031681565b6001600160a01b03821660009081526017602052604081208190610aef908463ffffffff61221216565b6001600160a01b038116600090815260136020526040902054909590945092505050565b606080606080848610610b2557600080fd5b6000610b37868863ffffffff61221e16565b905060608167ffffffffffffffff81118015610b5257600080fd5b50604051908082528060200260200182016040528015610b7c578160200160208202803683370190505b50905060608267ffffffffffffffff81118015610b9857600080fd5b50604051908082528060200260200182016040528015610bc2578160200160208202803683370190505b50905060608367ffffffffffffffff81118015610bde57600080fd5b50604051908082528060200260200182016040528015610c08578160200160208202803683370190505b50905060608467ffffffffffffffff81118015610c2457600080fd5b50604051908082528060200260200182016040528015610c4e578160200160208202803683370190505b5090508a5b8a811015610d85576000610c6e600e8363ffffffff61221216565b90506000610c82838f63ffffffff61221e16565b905081878281518110610c9157fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060116000836001600160a01b03166001600160a01b0316815260200190815260200160002054868281518110610ce357fe5b60200260200101818152505060126000836001600160a01b03166001600160a01b0316815260200190815260200160002054858281518110610d2157fe5b60200260200101818152505060106000836001600160a01b03166001600160a01b0316815260200190815260200160002054848281518110610d5f57fe5b602090810291909101015250610d7e905081600163ffffffff6121af16565b9050610c53565b50929a91995097509095509350505050565b6001600160a01b03821660009081526018602052604081208190610aef908463ffffffff61221216565b6000546001600160a01b03163314610dd857600080fd5b610de186611060565b610dea85611df8565b610df3846115bf565b610dfc83611508565b610e05826109f8565b610e0e816119c6565b505050505050565b6000610e22600e612260565b905090565b6000546001600160a01b03163314610e3e57600080fd5b600d5460ff1615610e84576040805162461bcd60e51b815260206004820181905260248201526000805160206131bc833981519152604482015290519081900360640190fd5b600d805460ff19166001179055610ea4426203f48063ffffffff6121af16565b601a556000600881905580546040516001600160a01b03909116917fe465b068e033879ed58088ba05882c35e2a52240ea1432b95753d6aebdd0814a91a2565b610eed3361226b565b158015610ef957503233145b610f42576040805162461bcd60e51b81526020600482015260156024820152744e6f20436f6e74726163747320416c6c6f7765642160581b604482015290519081900360640190fd5b600d5460ff1615610f88576040805162461bcd60e51b815260206004820181905260248201526000805160206131bc833981519152604482015290519081900360640190fd5b610f93338483612271565b33600090815260146020526040902054801561104857336000908152601460205260408120819055600254600154610fda916001600160a01b03908116911684878761239d565b33600090815260106020526040902054909150610ffd908263ffffffff6121af16565b33600081815260106020908152604091829020939093558051848152905191927fbd654390d0d973e8c8376ed6053be8658870df892687852cc5c914d700291b8792918290030190a2505b50505050565b60146020526000908152604090205481565b6000546001600160a01b0316331461107757600080fd5b6276a7008111156110c7576040805162461bcd60e51b81526020600482015260156024820152744c6f636b75702054696d6520746f6f206c6f6e672160581b604482015290519081900360640190fd5b60088190556040805182815290517fadbac78f382a6f10bef84ad4b704cac4817788ffec4f83ac665d7a1152dc44729181900360200190a150565b60196020526000908152604090205460ff1681565b3360009081526019602052604090205460ff1661117b576040805162461bcd60e51b815260206004820152601d60248201527f4e6f742074727573746564206465706f73697420636f6e747261637421000000604482015290519081900360640190fd5b600083116111c8576040805162461bcd60e51b8152602060048201526015602482015274416d6f756e74206d757374206e6f7420626520302160581b604482015290519081900360640190fd5b6001600160a01b038416611216576040805162461bcd60e51b815260206004820152601060248201526f496e76616c6964206163636f756e742160801b604482015290519081900360640190fd5b600154611234906001600160a01b031633308663ffffffff61292d16565b61123f848383612271565b6001600160a01b038416600090815260106020526040902054611268908463ffffffff6121af16565b6001600160a01b038516600090815260106020526040902055611292600e8563ffffffff61298716565b506001600160a01b0384166000818152601160209081526040918290204290558151928352820185905280517febedb8b3c678666e7f36970bc8f57abf6d8fa2e828c0da91ea5b75bf68ed101a9281900390910190a150505050565b60116020526000908152604090205481565b60045481565b600d5460ff1681565b60136020526000908152604090205481565b60055481565b6000546001600160a01b0316331461133e57600080fd5b6001600160a01b038116600081815260196020908152604091829020805460ff19169055815192835290517f7e0d9d001816978c78464fad5f6627ab7096346030d64b54bf5205c95816f79f9281900390910190a150565b6000546001600160a01b031681565b60006113b8600e8363ffffffff61299c16565b6113c4575060006114e8565b6001600160a01b0382166000908152601060205260409020546113e9575060006114e8565b6000806114216004547f0000000000000000000000000000000000000000000000000000000061b75c846121af90919063ffffffff16565b9050428181111561142f5750805b6001600160a01b03851660009081526012602052604090205481116114575760009250611484565b6001600160a01b03851660009081526012602052604090205461148190829063ffffffff61221e16565b92505b6001600160a01b0385166000908152601060205260408120546004546003549192916114e091612710916114d4919082908a906114c890899063ffffffff6129b116565b9063ffffffff6129b116565b9063ffffffff612a0a16565b955050505050505b919050565b6015602052600090815260409020546001600160a01b031681565b6000546001600160a01b0316331461151f57600080fd5b6127108110611575576040805162461bcd60e51b815260206004820152601b60248201527f4e657720556e7374616b696e672066656520746f6f206d756368210000000000604482015290519081900360640190fd5b60068190556040805182815290517f0a9e89cff3f9f01bd1c6aeb9b71324bb138123c40d02eb478613fb3427b231009181900360200190a150565b6001546001600160a01b031681565b6000546001600160a01b031633146115d657600080fd5b612710811061162c576040805162461bcd60e51b815260206004820152601960248201527f4e6577205374616b696e672066656520746f6f206d7563682100000000000000604482015290519081900360640190fd5b60058190556040805182815290517f327680b8ba8221210809b2aae37f88a529ae9eec9a3a3fe952fe0a3a262b487f9181900360200190a150565b6116703361226b565b15801561167c57503233145b6116c5576040805162461bcd60e51b81526020600482015260156024820152744e6f20436f6e74726163747320416c6c6f7765642160581b604482015290519081900360640190fd5b33600090815260106020526040902054831115611729576040805162461bcd60e51b815260206004820152601a60248201527f496e76616c696420616d6f756e7420746f207769746864726177000000000000604482015290519081900360640190fd5b6008543360009081526011602052604090205461174d90429063ffffffff61221e16565b116117895760405162461bcd60e51b81526004018080602001828103825260348152602001806131fd6034913960400191505060405180910390fd5b611794338383612271565b60006117b16127106114d4600654876129b190919063ffffffff16565b905060006117c5858363ffffffff61221e16565b905081156117f057600a546001546117f0916001600160a01b0391821691168463ffffffff612a4c16565b60015461180d906001600160a01b0316338363ffffffff612a4c16565b3360009081526010602052604090205461182d908663ffffffff61221e16565b3360008181526010602052604090209190915561185290600e9063ffffffff61299c16565b801561186b575033600090815260106020526040902054155b156118b857611881600e3363ffffffff612a9e16565b50336000818152601560209081526040808320546001600160a01b03168352601790915290206118b69163ffffffff612a9e16565b505b604080513381526020810187905281517f85082129d87b2fe11527cb1b3b7a520aeb5aa6913f88a3d8757fe40d1db02fdd929181900390910190a15050505050565b60065481565b60106020526000908152604090205481565b60166020526000908152604090205481565b6002546001600160a01b031681565b601a5481565b6203f48081565b600c5481565b600b5481565b630208c08081565b6000546001600160a01b0316331461196b57600080fd5b6001600160a01b038116600081815260196020908152604091829020805460ff19166001179055815192835290517f40c63143c93100e0caf027a91ca0854f28a3efb805e7d1c598a4637f8f22c78c9281900390910190a150565b6000546001600160a01b031633146119dd57600080fd5b6001600160a01b038116611a2b576040805162461bcd60e51b815260206004820152601060248201526f496e76616c696420616464726573732160801b604482015290519081900360640190fd5b600a80546001600160a01b0319166001600160a01b03838116919091179182905560408051929091168252517fafc54c644914e872610dbc4334999d957d145108fd88d63d83cc3a710dc6ee71916020908290030190a150565b60075481565b600080611a97836113a5565b6001600160a01b038416600090815260146020526040902054909150611ac3828263ffffffff6121af16565b949350505050565b6000546001600160a01b03163314611ae257600080fd5b6001600160a01b038216611b31576040805162461bcd60e51b8152602060048201526011602482015270125b9d985b1a5908149958da5c1a595b9d607a1b604482015290519081900360640190fd5b601a544211611b87576040805162461bcd60e51b815260206004820152601960248201527f436f6e7472616374206e6f742065787069726564207965742100000000000000604482015290519081900360640190fd5b6001600160a01b038316611bd45760405182906001600160a01b0382169083156108fc029084906000818181858888f19350505050158015611bcd573d6000803e3d6000fd5b5050611bee565b611bee6001600160a01b038416838363ffffffff612a4c16565b505050565b60035481565b611c023361226b565b158015611c0e57503233145b611c57576040805162461bcd60e51b81526020600482015260156024820152744e6f20436f6e74726163747320416c6c6f7765642160581b604482015290519081900360640190fd5b600d5460ff1615611c9d576040805162461bcd60e51b815260206004820181905260248201526000805160206131bc833981519152604482015290519081900360640190fd5b611ca8338483612271565b33600090815260146020526040902054801561104857336000908152601460205260408120819055600254600154611cef916001600160a01b03908116911684878761239d565b600154909150611d0f906001600160a01b0316338363ffffffff612a4c16565b60408051828152905133917f586b2e63a21a7a4e1402e36f48ce10cb1ec94684fea254c186b76d1f98ecf130919081900360200190a25050505050565b600a546001600160a01b031681565b6000546001600160a01b03163314611d7257600080fd5b6001600160a01b038116611d8557600080fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60126020526000908152604090205481565b60085481565b6000546001600160a01b03163314611e0f57600080fd5b6127108110611e5e576040805162461bcd60e51b8152602060048201526016602482015275546f6f206d75636820726566657272616c206665652160501b604482015290519081900360640190fd5b60078190556040805182815290517fd51125b9b3b3e2699a79428534dbc7cf5f2c1e3612ebeaf02853a94ea13fee749181900360200190a150565b6001600160a01b03811660009081526017602052604081208190611ebc90612260565b6001600160a01b0384166000908152601860205260409020909250611ee090612260565b9050915091565b611ef03361226b565b158015611efc57503233145b611f45576040805162461bcd60e51b81526020600482015260156024820152744e6f20436f6e74726163747320416c6c6f7765642160581b604482015290519081900360640190fd5b600d5460ff1615611f8b576040805162461bcd60e51b815260206004820181905260248201526000805160206131bc833981519152604482015290519081900360640190fd5b60008411611fe0576040805162461bcd60e51b815260206004820152601760248201527f43616e6e6f74206465706f736974203020546f6b656e73000000000000000000604482015290519081900360640190fd5b600154611ffe906001600160a01b031633308763ffffffff61292d16565b612009338383612271565b60006120266127106114d4600554886129b190919063ffffffff16565b9050600061203a868363ffffffff61221e16565b9050811561206557600a54600154612065916001600160a01b0391821691168463ffffffff612a4c16565b33600090815260106020526040902054612085908263ffffffff6121af16565b336000818152601060205260409020919091556120aa90600e9063ffffffff61298716565b50336000908152601560205260409020546001600160a01b03166120f15733600090815260156020526040902080546001600160a01b0319166001600160a01b0387161790555b336000818152601560209081526040808320546001600160a01b03168352601890915290206121259163ffffffff61298716565b50336000818152601560209081526040808320546001600160a01b031683526017909152902061215a9163ffffffff61298716565b50336000818152601160209081526040918290204290558151928352820183905280517febedb8b3c678666e7f36970bc8f57abf6d8fa2e828c0da91ea5b75bf68ed101a9281900390910190a1505050505050565b600082820183811015612209576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b60006122098383612ab3565b600061220983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612b17565b600061220c82612bb3565b3b151590565b600061227c846113a5565b9050801561237e5760006122a16127106114d4600754856129b190919063ffffffff16565b905060006122b5838363ffffffff61221e16565b6001600160a01b03808816600090815260156020526040812054929350916122e09116848888612bb7565b90508381156122ec5750815b6001600160a01b038816600090815260146020526040902054612315908263ffffffff6121af16565b6001600160a01b03891660009081526014602090815260408083209390935560139052205461234a908263ffffffff6121af16565b6001600160a01b038916600090815260136020526040902055600b54612376908263ffffffff6121af16565b600b55505050505b5050506001600160a01b03166000908152601260205260409020429055565b6000846001600160a01b0316866001600160a01b031614156123c0575082612924565b6009546123e1906001600160a01b038881169116600063ffffffff612cc016565b600954612401906001600160a01b0388811691168663ffffffff612cc016565b604080516370a0823160e01b815230600482015290516000916001600160a01b038816916370a0823191602480820192602092909190829003018186803b15801561244b57600080fd5b505afa15801561245f573d6000803e3d6000fd5b505050506040513d602081101561247557600080fd5b5051600954604080516315ab88c960e31b815290519293506060926001600160a01b039092169163ad5c464891600480820192602092909190829003018186803b1580156124c257600080fd5b505afa1580156124d6573d6000803e3d6000fd5b505050506040513d60208110156124ec57600080fd5b50516001600160a01b038981169116148061258b5750600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561255057600080fd5b505afa158015612564573d6000803e3d6000fd5b505050506040513d602081101561257a57600080fd5b50516001600160a01b038881169116145b1561261157604080516002808252606082018352909160208301908036833701905050905087816000815181106125be57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505086816001815181106125ec57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505061271e565b604080516003808252608082019092529060208201606080368337019050509050878160008151811061264057fe5b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561269457600080fd5b505afa1580156126a8573d6000803e3d6000fd5b505050506040513d60208110156126be57600080fd5b50518151829060019081106126cf57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505086816002815181106126fd57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250505b6009546040516338ed173960e01b8152600481018881526024820188905230606483018190526084830188905260a060448401908152855160a485015285516001600160a01b03909516946338ed1739948c948c94899490938d9360c401906020808801910280838360005b838110156127a257818101518382015260200161278a565b505050509050019650505050505050600060405180830381600087803b1580156127cb57600080fd5b505af11580156127df573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561280857600080fd5b810190808051604051939291908464010000000082111561282857600080fd5b90830190602082018581111561283d57600080fd5b825186602082028301116401000000008211171561285a57600080fd5b82525081516020918201928201910280838360005b8381101561288757818101518382015260200161286f565b505050509190910160408181526370a0823160e01b825230600483015251600096506001600160a01b038e1695506370a08231945060248083019450602093509091829003018186803b1580156128dd57600080fd5b505afa1580156128f1573d6000803e3d6000fd5b505050506040513d602081101561290757600080fd5b50519050600061291d828563ffffffff61221e16565b9450505050505b95945050505050565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052611048908590612dcf565b6000612209836001600160a01b038416612e80565b6000612209836001600160a01b038416612eca565b6000826129c05750600061220c565b828202828482816129cd57fe5b04146122095760405162461bcd60e51b81526004018080602001828103825260218152602001806131dc6021913960400191505060405180910390fd5b600061220983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612ee2565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611bee908490612dcf565b6000612209836001600160a01b038416612f47565b81546000908210612af55760405162461bcd60e51b815260040180806020018281038252602281526020018061319a6022913960400191505060405180910390fd5b826000018281548110612b0457fe5b9060005260206000200154905092915050565b60008184841115612ba65760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612b6b578181015183820152602001612b53565b50505050905090810190601f168015612b985780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50508183035b9392505050565b5490565b60006001600160a01b03851615801590612bd15750600084115b15612cb557600254600154600091612bf8916001600160a01b03918216911687878761239d565b6001600160a01b038716600090815260166020526040902054909150612c24908263ffffffff6121af16565b6001600160a01b03808816600090815260166020526040902091909155600154612c569116878363ffffffff612a4c16565b600c54612c69908263ffffffff6121af16565b600c556040805182815290516001600160a01b038816917fefdcb1f2ee8323554150b9eca5209dcd6a164266e8d1f04b95cbcecd0cad5219919081900360200190a26001915050611ac3565b506000949350505050565b801580612d46575060408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b158015612d1857600080fd5b505afa158015612d2c573d6000803e3d6000fd5b505050506040513d6020811015612d4257600080fd5b5051155b612d815760405162461bcd60e51b815260040180806020018281038252603681526020018061325b6036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052611bee9084905b6060612e24826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661300d9092919063ffffffff16565b805190915015611bee57808060200190516020811015612e4357600080fd5b5051611bee5760405162461bcd60e51b815260040180806020018281038252602a815260200180613231602a913960400191505060405180910390fd5b6000612e8c8383612eca565b612ec25750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561220c565b50600061220c565b60009081526001919091016020526040902054151590565b60008183612f315760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315612b6b578181015183820152602001612b53565b506000838581612f3d57fe5b0495945050505050565b600081815260018301602052604081205480156130035783546000198083019190810190600090879083908110612f7a57fe5b9060005260206000200154905080876000018481548110612f9757fe5b600091825260208083209091019290925582815260018981019092526040902090840190558654879080612fc757fe5b6001900381819060005260206000200160009055905586600101600087815260200190815260200160002060009055600194505050505061220c565b600091505061220c565b6060611ac38484600085856130218561226b565b613072576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106130b15780518252601f199092019160209182019101613092565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613113576040519150601f19603f3d011682016040523d82523d6000602084013e613118565b606091505b5091509150613128828286613133565b979650505050505050565b60608315613142575081612bac565b8251156131525782518084602001fd5b60405162461bcd60e51b8152602060048201818152845160248401528451859391928392604401919085019080838360008315612b6b578181015183820152602001612b5356fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e647343616e6e6f74206578656375746520647572696e6720656d657267656e637921536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77596f7520726563656e746c79207374616b65642c20706c656173652077616974206265666f7265207769746864726177696e672e5361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365a26469706673582212206cfe0813b841bc2b238571927688726db565981a80b5211f43076ffb0391f9a564736f6c634300060b0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000910090ea889b64b4e722ea4b8ff6d5e734dfb38f000000000000000000000000961c8c0b1aad0c0b10a51fef6a867e3091bcef17000000000000000000000000bd100d061e120b2c67a24453cf6368e63f1be05600000000000000000000000000000000000000000000000000000000000001f4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fa00000000000000000000000000000000000000000000000000000000001e1338000000000000000000000000000000000000000000000000000000000004f1a00
-----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): 4000
Arg [8] : rewardInterval (uint256): 31536000
Arg [9] : lockupTime (uint256): 5184000
-----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] : 0000000000000000000000000000000000000000000000000000000000000fa0
Arg [8] : 0000000000000000000000000000000000000000000000000000000001e13380
Arg [9] : 00000000000000000000000000000000000000000000000000000000004f1a00
Deployed Bytecode Sourcemap
29168:21059:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31712:39;;;:::i;:::-;;;;;;;;;;;;;;;;36015:284;;;;;;;;;;;;;;;;-1:-1:-1;36015:284:0;-1:-1:-1;;;;;36015:284:0;;:::i;:::-;;31362:102;;;:::i;:::-;;;;-1:-1:-1;;;;;31362:102:0;;;;;;;;;;;;;;42851:242;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;42851:242:0;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;42851:242:0;;;;;;;;;;;;;;;;;;;;;48500:1157;;;;;;;;;;;;;;;;-1:-1:-1;48500:1157:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42610:235;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;42610:235:0;;;;;;;;:::i;37102:570::-;;;;;;;;;;;;;;;;-1:-1:-1;37102:570:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37102:570:0;;;;;;;;;;;;:::i;42209:101::-;;;:::i;37684:239::-;;;:::i;47603:885::-;;;;;;;;;;;;;;;;-1:-1:-1;47603:885:0;;;;;;;;;;;;:::i;32448:52::-;;;;;;;;;;;;;;;;-1:-1:-1;32448:52:0;-1:-1:-1;;;;;32448:52:0;;:::i;36305:224::-;;;;;;;;;;;;;;;;-1:-1:-1;36305:224:0;;:::i;32818:57::-;;;;;;;;;;;;;;;;-1:-1:-1;32818:57:0;-1:-1:-1;;;;;32818:57:0;;:::i;:::-;;;;;;;;;;;;;;;;;;43105:666;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;43105:666:0;;;;;;;;;;;;;;;;;;:::i;32279:44::-;;;;;;;;;;;;;;;;-1:-1:-1;32279:44:0;-1:-1:-1;;;;;32279:44:0;;:::i;30697:38::-;;;:::i;31758:31::-;;;:::i;32385:50::-;;;;;;;;;;;;;;;;-1:-1:-1;32385:50:0;-1:-1:-1;;;;;32385:50:0;;:::i;30768:38::-;;;:::i;36733:198::-;;;;;;;;;;;;;;;;-1:-1:-1;36733:198:0;-1:-1:-1;;;;;36733:198:0;;:::i;21496:20::-;;;:::i;41038:911::-;;;;;;;;;;;;;;;;-1:-1:-1;41038:911:0;-1:-1:-1;;;;;41038:911:0;;:::i;32513:45::-;;;;;;;;;;;;;;;;-1:-1:-1;32513:45:0;-1:-1:-1;;;;;32513:45:0;;:::i;35425:295::-;;;;;;;;;;;;;;;;-1:-1:-1;35425:295:0;;:::i;30372:89::-;;;:::i;35140:279::-;;;;;;;;;;;;;;;;-1:-1:-1;35140:279:0;;:::i;45641:1189::-;;;;;;;;;;;;;;;;-1:-1:-1;45641:1189:0;;;;;;;;;;;;:::i;30842:40::-;;;:::i;32224:48::-;;;;;;;;;;;;;;;;-1:-1:-1;32224:48:0;-1:-1:-1;;;;;32224:48:0;;:::i;32565:55::-;;;;;;;;;;;;;;;;-1:-1:-1;32565:55:0;-1:-1:-1;;;;;32565:55:0;;:::i;30468:88::-;;;:::i;32888:30::-;;;:::i;31094:49::-;;;:::i;31660:39::-;;;:::i;31618:35::-;;;:::i;31273:50::-;;;:::i;36535:192::-;;;;;;;;;;;;;;;;-1:-1:-1;36535:192:0;-1:-1:-1;;;;;36535:192:0;;:::i;34496:283::-;;;;;;;;;;;;;;;;-1:-1:-1;34496:283:0;-1:-1:-1;;;;;34496:283:0;;:::i;30949:41::-;;;:::i;41961:236::-;;;;;;;;;;;;;;;;-1:-1:-1;41961:236:0;-1:-1:-1;;;;;41961:236:0;;:::i;49762:462::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;49762:462:0;;;;;;;;;;;;;;;;;:::i;30654:36::-;;;:::i;46842:749::-;;;;;;;;;;;;;;;;-1:-1:-1;46842:749:0;;;;;;;;;;;;:::i;31571:34::-;;;:::i;22115:178::-;;;;;;;;;;;;;;;;-1:-1:-1;22115:178:0;-1:-1:-1;;;;;22115:178:0;;:::i;32330:48::-;;;;;;;;;;;;;;;;-1:-1:-1;32330:48:0;-1:-1:-1;;;;;32330:48:0;;:::i;31048:33::-;;;:::i;35726:283::-;;;;;;;;;;;;;;;;-1:-1:-1;35726:283:0;;:::i;42322:276::-;;;;;;;;;;;;;;;;-1:-1:-1;42322:276:0;-1:-1:-1;;;;;42322:276:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;43783:1846;;;;;;;;;;;;;;;;-1:-1:-1;43783:1846:0;;;-1:-1:-1;;;;;43783:1846:0;;;;;;;;;;;;;;;:::i;31712:39::-;;;:::o;36015:284::-;21926:5;;-1:-1:-1;;;;;21926:5:0;21912:10;:19;21904:28;;;;;;-1:-1:-1;;;;;36117:42:0;::::1;36109:70;;;::::0;;-1:-1:-1;;;36109:70:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;36109:70:0;;;;;;;;;;;;;::::1;;36190:15;:37:::0;;-1:-1:-1;;;;;;36190:37:0::1;-1:-1:-1::0;;;;;36190:37:0;;::::1;::::0;;;::::1;::::0;;;;36243:48:::1;::::0;;36274:15;;;::::1;36243:48:::0;;;::::1;::::0;::::1;::::0;;;;;;::::1;36015:284:::0;:::o;31362:102::-;;;-1:-1:-1;;;;;31362:102:0;;:::o;42851:242::-;-1:-1:-1;;;;;42989:38:0;;42932:15;42989:38;;;:29;:38;;;;;42932:15;;42989:44;;43031:1;42989:44;:41;:44;:::i;:::-;-1:-1:-1;;;;;43059:26:0;;;;;;:17;:26;;;;;;42979:54;;43059:26;;-1:-1:-1;42851:242:0;-1:-1:-1;;;42851:242:0:o;48500:1157::-;48607:24;48647:31;48694:35;48744:26;48805:8;48792:10;:21;48783:31;;;;;;48835:11;48849:24;:8;48862:10;48849:24;:12;:24;:::i;:::-;48835:38;;48884:25;48926:6;48912:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48912:21:0;;48884:49;;48944:32;48990:6;48979:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48979:18:0;;48944:53;;49008:36;49058:6;49047:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49047:18:0;;49008:57;;49076:27;49117:6;49106:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49106:18:0;-1:-1:-1;49076:48:0;-1:-1:-1;49159:10:0;49145:408;49175:8;49171:1;:12;49145:408;;;49214:14;49231:13;:7;49242:1;49231:13;:10;:13;:::i;:::-;49214:30;-1:-1:-1;49259:14:0;49276:17;:1;49282:10;49276:17;:5;:17;:::i;:::-;49259:34;;49330:6;49308:8;49317:9;49308:19;;;;;;;;;;;;;:28;-1:-1:-1;;;;;49308:28:0;;;-1:-1:-1;;;;;49308:28:0;;;;;49383:11;:19;49395:6;-1:-1:-1;;;;;49383:19:0;-1:-1:-1;;;;;49383:19:0;;;;;;;;;;;;;49351:18;49370:9;49351:29;;;;;;;;;;;;;:51;;;;;49453:15;:23;49469:6;-1:-1:-1;;;;;49453:23:0;-1:-1:-1;;;;;49453:23:0;;;;;;;;;;;;;49417:22;49440:9;49417:33;;;;;;;;;;;;;:59;;;;;49518:15;:23;49534:6;-1:-1:-1;;;;;49518:23:0;-1:-1:-1;;;;;49518:23:0;;;;;;;;;;;;;49491:13;49505:9;49491:24;;;;;;;;;;;;;;;;;:50;-1:-1:-1;49189:8:0;;-1:-1:-1;49189:1:0;49195;49189:8;:5;:8;:::i;:::-;49185:12;;49145:408;;;-1:-1:-1;49581:8:0;;49591:18;;-1:-1:-1;49591:18:0;-1:-1:-1;49581:8:0;;-1:-1:-1;48500:1157:0;-1:-1:-1;;;;48500:1157:0:o;42610:235::-;-1:-1:-1;;;;;42742:37:0;;42685:15;42742:37;;;:28;:37;;;;;42685:15;;42742:43;;42783:1;42742:43;:40;:43;:::i;37102:570::-;21926:5;;-1:-1:-1;;;;;21926:5:0;21912:10;:19;21904:28;;;;;;37367:25:::1;37381:10;37367:13;:25::i;:::-;37403:43;37426:19;37403:22;:43::i;:::-;37457:41;37479:18;37457:21;:41::i;:::-;37509:45;37533:20;37509:23;:45::i;:::-;37565:44;37601:6;37565:18;:44::i;:::-;37620;37643:20;37620:22;:44::i;:::-;37102:570:::0;;;;;;:::o;42209:101::-;42262:4;42286:16;:7;:14;:16::i;:::-;42279:23;;42209:101;:::o;37684:239::-;21926:5;;-1:-1:-1;;;;;21926:5:0;21912:10;:19;21904:28;;;;;;32085:11:::1;::::0;::::1;;32084:12;32076:57;;;::::0;;-1:-1:-1;;;32076:57:0;;::::1;;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;;;;;;;;;32076:57:0;;;;;;;;;;;;;::::1;;37761:11:::2;:18:::0;;-1:-1:-1;;37761:18:0::2;37775:4;37761:18;::::0;;37811:28:::2;:3;31137:6;37811:28;:7;:28;:::i;:::-;37790:18;:49:::0;37864:1:::2;37850:11;:15:::0;;;37909:5;;37891:24:::2;::::0;-1:-1:-1;;;;;37909:5:0;;::::2;::::0;37891:24:::2;::::0;::::2;37684:239::o:0;47603:885::-;31917:32;31925:10;31917:30;:32::i;:::-;31915:35;:62;;;;-1:-1:-1;31954:9:0;31967:10;31954:23;31915:62;31907:96;;;;;-1:-1:-1;;;31907:96:0;;;;;;;;;;;;-1:-1:-1;;;31907:96:0;;;;;;;;;;;;;;;32085:11:::1;::::0;::::1;;32084:12;32076:57;;;::::0;;-1:-1:-1;;;32076:57:0;;::::1;;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;;;;;;;;;32076:57:0;;;;;;;;;;;;;::::1;;47756:63:::2;47770:10;47782:25;47809:9;47756:13;:63::i;:::-;47864:10;47830:11;47844:31:::0;;;:19:::2;:31;::::0;;;;;47890:10;;47886:595:::2;;47937:10;47951:1;47917:31:::0;;;:19:::2;:31;::::0;;;;:35;;;48050:28:::2;::::0;;48080:29;48043:110:::2;::::0;-1:-1:-1;;;;;48050:28:0;;::::2;::::0;48080:29:::2;48111:6:::0;48119:22;48143:9;48043:6:::2;:110::i;:::-;48259:10;48243:27;::::0;;;:15:::2;:27;::::0;;;;;48014:139;;-1:-1:-1;48243:54:0::2;::::0;48014:139;48243:54:::2;:31;:54;:::i;:::-;48229:10;48213:27;::::0;;;:15:::2;:27;::::0;;;;;;;;:84;;;;48426:43;;;;;;;48229:10;;48426:43:::2;::::0;;;;;;;::::2;47886:595;;32144:1;47603:885:::0;;;:::o;32448:52::-;;;;;;;;;;;;;:::o;36305:224::-;21926:5;;-1:-1:-1;;;;;21926:5:0;21912:10;:19;21904:28;;;;;;36403:7:::1;36385:14;:25;;36377:59;;;::::0;;-1:-1:-1;;;36377:59:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;36377:59:0;;;;;;;;;;;;;::::1;;36447:11;:28:::0;;;36491:30:::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;36305:224:::0;:::o;32818:57::-;;;;;;;;;;;;;;;:::o;43105:666::-;37025:10;37000:36;;;;:24;:36;;;;;;;;36992:78;;;;;-1:-1:-1;;;36992:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;43281:1:::1;43272:6;:10;43264:44;;;::::0;;-1:-1:-1;;;43264:44:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;43264:44:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;43327:21:0;::::1;43319:50;;;::::0;;-1:-1:-1;;;43319:50:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;43319:50:0;;;;;;;;;;;;;::::1;;43387:29;::::0;43380:89:::1;::::0;-1:-1:-1;;;;;43387:29:0::1;43435:10;43455:4;43462:6:::0;43380:89:::1;:54;:89;:::i;:::-;43490:67;43504:7;43513:32;43547:9;43490:13;:67::i;:::-;-1:-1:-1::0;;;;;43605:24:0;::::1;;::::0;;;:15:::1;:24;::::0;;;;;:36:::1;::::0;43634:6;43605:36:::1;:28;:36;:::i;:::-;-1:-1:-1::0;;;;;43578:24:0;::::1;;::::0;;;:15:::1;:24;::::0;;;;:63;43662:20:::1;:7;43594::::0;43662:20:::1;:11;:20;:::i;:::-;-1:-1:-1::0;;;;;;43699:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;;;;43722:3:::1;43699:26:::0;;43741:22;;;;;;::::1;::::0;;;;;::::1;::::0;;;;;;;;::::1;43105:666:::0;;;;:::o;32279:44::-;;;;;;;;;;;;;:::o;30697:38::-;;;;:::o;31758:31::-;;;;;;:::o;32385:50::-;;;;;;;;;;;;;:::o;30768:38::-;;;;:::o;36733:198::-;21926:5;;-1:-1:-1;;;;;21926:5:0;21912:10;:19;21904:28;;;;;;-1:-1:-1;;;;;36826:34:0;::::1;36863:5;36826:34:::0;;;:24:::1;:34;::::0;;;;;;;;:42;;-1:-1:-1;;36826:42:0::1;::::0;;36884:39;;;;;;;::::1;::::0;;;;;;;;::::1;36733:198:::0;:::o;21496:20::-;;;-1:-1:-1;;;;;21496:20:0;;:::o;41038:911::-;41100:4;41122:25;:7;41139;41122:25;:16;:25;:::i;:::-;41117:40;;-1:-1:-1;41156:1:0;41149:8;;41117:40;-1:-1:-1;;;;;41172:24:0;;;;;;:15;:24;;;;;;41168:43;;-1:-1:-1;41210:1:0;41203:8;;41168:43;41232:13;41256:19;41278:38;41300:15;;41278:17;:21;;:38;;;;:::i;:::-;41256:60;-1:-1:-1;41339:3:0;41357:21;;;41353:75;;;-1:-1:-1;41402:14:0;41353:75;-1:-1:-1;;;;;41452:24:0;;;;;;:15;:24;;;;;;:32;-1:-1:-1;41448:155:0;;41512:1;41501:12;;41448:155;;;-1:-1:-1;;;;;41566:24:0;;;;;;:15;:24;;;;;;41557:34;;:4;;:34;:8;:34;:::i;:::-;41546:45;;41448:155;-1:-1:-1;;;;;41635:24:0;;41615:17;41635:24;;;:15;:24;;;;;;41843:15;;41746:17;;41635:24;;41615:17;41699:199;;41894:3;;41699:160;;41843:15;41699:160;;41799:8;;41699:65;;41635:24;;41699:65;:46;:65;:::i;:::-;:99;:109;:99;:109;:::i;:::-;:143;:160;:143;:160;:::i;:199::-;41680:218;-1:-1:-1;;;;;;41038:911:0;;;;:::o;32513:45::-;;;;;;;;;;;;-1:-1:-1;;;;;32513:45:0;;:::o;35425:295::-;21926:5;;-1:-1:-1;;;;;21926:5:0;21912:10;:19;21904:28;;;;;;35552:5:::1;35525:24;:32;35517:72;;;::::0;;-1:-1:-1;;;35517:72:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;35600:24;:51:::0;;;35667:45:::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;35425:295:::0;:::o;30372:89::-;;;-1:-1:-1;;;;;30372:89:0;;:::o;35140:279::-;21926:5;;-1:-1:-1;;;;;21926:5:0;21912:10;:19;21904:28;;;;;;35261:5:::1;35236:22;:30;35228:68;;;::::0;;-1:-1:-1;;;35228:68:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;35307:22;:47:::0;;;35370:41:::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;35140:279:::0;:::o;45641:1189::-;31917:32;31925:10;31917:30;:32::i;:::-;31915:35;:62;;;;-1:-1:-1;31954:9:0;31967:10;31954:23;31915:62;31907:96;;;;;-1:-1:-1;;;31907:96:0;;;;;;;;;;;;-1:-1:-1;;;31907:96:0;;;;;;;;;;;;;;;45792:10:::1;45776:27;::::0;;;:15:::1;:27;::::0;;;;;:47;-1:-1:-1;45776:47:0::1;45768:86;;;::::0;;-1:-1:-1;;;45768:86:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;45918:11;::::0;45903:10:::1;45891:23;::::0;;;:11:::1;:23;::::0;;;;;45883:32:::1;::::0;:3:::1;::::0;:32:::1;:7;:32;:::i;:::-;:46;45875:111;;;;-1:-1:-1::0;;;45875:111:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46007:63;46021:10;46033:25;46060:9;46007:13;:63::i;:::-;46091:8;46102:55;46153:3;46102:46;46123:24;;46102:16;:20;;:46;;;;:::i;:55::-;46091:66:::0;-1:-1:-1;46168:19:0::1;46190:25;:16:::0;46091:66;46190:25:::1;:20;:25;:::i;:::-;46168:47:::0;-1:-1:-1;46230:7:0;;46226:116:::1;;46305:19;::::0;;46261:29;46254:76:::1;::::0;-1:-1:-1;;;;;46261:29:0;;::::1;::::0;46305:19:::1;46326:3:::0;46254:76:::1;:50;:76;:::i;:::-;46359:29;::::0;46352:78:::1;::::0;-1:-1:-1;;;;;46359:29:0::1;46403:10;46415:14:::0;46352:78:::1;:50;:78;:::i;:::-;46497:10;46481:27;::::0;;;:15:::1;:27;::::0;;;;;:49:::1;::::0;46513:16;46481:49:::1;:31;:49;:::i;:::-;46467:10;46451:27;::::0;;;:15:::1;:27;::::0;;;;:79;;;;46555:28:::1;::::0;:7:::1;::::0;:28:::1;:16;:28;:::i;:::-;:64;;;;-1:-1:-1::0;46603:10:0::1;46587:27;::::0;;;:15:::1;:27;::::0;;;;;:32;46555:64:::1;46551:209;;;46636:26;:7;46651:10;46636:26;:14;:26;:::i;:::-;-1:-1:-1::0;46737:10:0::1;46677:52;46707:21:::0;;;:9:::1;:21;::::0;;;;;;;;-1:-1:-1;;;;;46707:21:0::1;46677:52:::0;;:29:::1;:52:::0;;;;;:71:::1;::::0;::::1;:59;:71;:::i;:::-;;46551:209;46785:37;::::0;;46793:10:::1;46785:37:::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;;;;;;;;::::1;32014:1;;45641:1189:::0;;;:::o;30842:40::-;;;;:::o;32224:48::-;;;;;;;;;;;;;:::o;32565:55::-;;;;;;;;;;;;;:::o;30468:88::-;;;-1:-1:-1;;;;;30468:88:0;;:::o;32888:30::-;;;;:::o;31094:49::-;31137:6;31094:49;:::o;31660:39::-;;;;:::o;31618:35::-;;;;:::o;31273:50::-;31315:8;31273:50;:::o;36535:192::-;21926:5;;-1:-1:-1;;;;;21926:5:0;21912:10;:19;21904:28;;;;;;-1:-1:-1;;;;;36625:34:0;::::1;;::::0;;;:24:::1;:34;::::0;;;;;;;;:41;;-1:-1:-1;;36625:41:0::1;36662:4;36625:41;::::0;;36682:37;;;;;;;::::1;::::0;;;;;;;;::::1;36535:192:::0;:::o;34496:283::-;21926:5;;-1:-1:-1;;;;;21926:5:0;21912:10;:19;21904:28;;;;;;-1:-1:-1;;;;;34596:36:0;::::1;34588:65;;;::::0;;-1:-1:-1;;;34588:65:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;34588:65:0;;;;;;;;;;;;;::::1;;34664:19;:44:::0;;-1:-1:-1;;;;;;34664:44:0::1;-1:-1:-1::0;;;;;34664:44:0;;::::1;::::0;;;::::1;::::0;;;;34724:47:::1;::::0;;34751:19;;;::::1;34724:47:::0;;;::::1;::::0;::::1;::::0;;;;;;::::1;34496:283:::0;:::o;30949:41::-;;;;:::o;41961:236::-;42030:4;42047:12;42062:23;42077:7;42062:14;:23::i;:::-;-1:-1:-1;;;;;42117:28:0;;42096:18;42117:28;;;:19;:28;;;;;;42047:38;;-1:-1:-1;42163:26:0;42047:38;42117:28;42163:26;:11;:26;:::i;:::-;42156:33;41961:236;-1:-1:-1;;;;41961:236:0:o;49762:462::-;21926:5;;-1:-1:-1;;;;;21926:5:0;21912:10;:19;21904:28;;;;;;-1:-1:-1;;;;;49870:23:0;::::1;49862:53;;;::::0;;-1:-1:-1;;;49862:53:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;49862:53:0;;;;;;;;;;;;;::::1;;49940:18;;49934:3;:24;49926:62;;;::::0;;-1:-1:-1;;;49926:62:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;50003:19:0;::::1;49999:162;;50101:27;::::0;50076:9;;-1:-1:-1;;;;;50101:19:0;::::1;::::0;:27;::::1;;;::::0;50121:6;;50039:26:::1;50101:27:::0;50039:26;50101:27;50121:6;50101:19;:27;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;50143:7;;;49999:162;50171:45;-1:-1:-1::0;;;;;50171:26:0;::::1;50198:9:::0;50209:6;50171:45:::1;:26;:45;:::i;:::-;49762:462:::0;;;:::o;30654:36::-;;;;:::o;46842:749::-;31917:32;31925:10;31917:30;:32::i;:::-;31915:35;:62;;;;-1:-1:-1;31954:9:0;31967:10;31954:23;31915:62;31907:96;;;;;-1:-1:-1;;;31907:96:0;;;;;;;;;;;;-1:-1:-1;;;31907:96:0;;;;;;;;;;;;;;;32085:11:::1;::::0;::::1;;32084:12;32076:57;;;::::0;;-1:-1:-1;;;32076:57:0;;::::1;;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;;;;;;;;;32076:57:0;;;;;;;;;;;;;::::1;;46989:63:::2;47003:10;47015:25;47042:9;46989:13;:63::i;:::-;47097:10;47063:11;47077:31:::0;;;:19:::2;:31;::::0;;;;;47123:10;;47119:465:::2;;47170:10;47184:1;47150:31:::0;;;:19:::2;:31;::::0;;;;:35;;;47283:28:::2;::::0;;47313:29;47276:107:::2;::::0;-1:-1:-1;;;;;47283:28:0;;::::2;::::0;47313:29:::2;47344:6:::0;47352:19;47373:9;47276:6:::2;:107::i;:::-;47419:29;::::0;47247:136;;-1:-1:-1;47412:85:0::2;::::0;-1:-1:-1;;;;;47419:29:0::2;47463:10;47247:136:::0;47412:85:::2;:50;:85;:::i;:::-;47519:53;::::0;;;;;;;47538:10:::2;::::0;47519:53:::2;::::0;;;;;::::2;::::0;;::::2;47119:465;32144:1;46842:749:::0;;;:::o;31571:34::-;;;-1:-1:-1;;;;;31571: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;32330:48::-;;;;;;;;;;;;;:::o;31048:33::-;;;;:::o;35726:283::-;21926:5;;-1:-1:-1;;;;;21926:5:0;21912:10;:19;21904:28;;;;;;35850:5:::1;35824:23;:31;35816:66;;;::::0;;-1:-1:-1;;;35816:66:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;35816:66:0;;;;;;;;;;;;;::::1;;35893:23;:49:::0;;;35958:43:::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;35726:283:::0;:::o;42322:276::-;-1:-1:-1;;;;;42468:39:0;;42399:19;42468:39;;;:29;:39;;;;;42399:19;;42468:48;;:46;:48::i;:::-;-1:-1:-1;;;;;42543:38:0;;;;;;:28;:38;;;;;42451:65;;-1:-1:-1;42543:47:0;;:45;:47::i;:::-;42527:63;;42322:276;;;:::o;43783:1846::-;31917:32;31925:10;31917:30;:32::i;:::-;31915:35;:62;;;;-1:-1:-1;31954:9:0;31967:10;31954:23;31915:62;31907:96;;;;;-1:-1:-1;;;31907:96:0;;;;;;;;;;;;-1:-1:-1;;;31907:96:0;;;;;;;;;;;;;;;32085:11:::1;::::0;::::1;;32084:12;32076:57;;;::::0;;-1:-1:-1;;;32076:57:0;;::::1;;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;;;;;;;;;32076:57:0;;;;;;;;;;;;;::::1;;43966:1:::2;43950:13;:17;43942:53;;;::::0;;-1:-1:-1;;;43942:53:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;44013:29;::::0;44006:96:::2;::::0;-1:-1:-1;;;;;44013:29:0::2;44061:10;44081:4;44088:13:::0;44006:96:::2;:54;:96;:::i;:::-;44123:63;44137:10;44149:25;44176:9;44123:13;:63::i;:::-;44207:8;44218:50;44264:3;44218:41;44236:22;;44218:13;:17;;:41;;;;:::i;:50::-;44207:61:::0;-1:-1:-1;44279:19:0::2;44301:22;:13:::0;44207:61;44301:22:::2;:17;:22;:::i;:::-;44279:44:::0;-1:-1:-1;44338:7:0;;44334:116:::2;;44413:19;::::0;;44369:29;44362:76:::2;::::0;-1:-1:-1;;;;;44369:29:0;;::::2;::::0;44413:19:::2;44434:3:::0;44362:76:::2;:50;:76;:::i;:::-;45160:10;45144:27;::::0;;;:15:::2;:27;::::0;;;;;:47:::2;::::0;45176:14;45144:47:::2;:31;:47;:::i;:::-;45130:10;45114:27;::::0;;;:15:::2;:27;::::0;;;;:77;;;;45212:23:::2;::::0;:7:::2;::::0;:23:::2;:11;:23;:::i;:::-;-1:-1:-1::0;45270:10:0::2;45293:1;45260:21:::0;;;:9:::2;:21;::::0;;;;;-1:-1:-1;;;;;45260:21:0::2;45256:100;;45322:10;45312:21;::::0;;;:9:::2;:21;::::0;;;;:32;;-1:-1:-1;;;;;;45312:32:0::2;-1:-1:-1::0;;;;;45312:32:0;::::2;;::::0;;45256:100:::2;45432:10;45376:51;45405:21:::0;;;:9:::2;:21;::::0;;;;;;;;-1:-1:-1;;;;;45405:21:0::2;45376:51:::0;;:28:::2;:51:::0;;;;;:67:::2;::::0;::::2;:55;:67;:::i;:::-;-1:-1:-1::0;45511:10:0::2;45454:52;45484:21:::0;;;:9:::2;:21;::::0;;;;;;;;-1:-1:-1;;;;;45484:21:0::2;45454:52:::0;;:29:::2;:52:::0;;;;;:68:::2;::::0;::::2;:56;:68;:::i;:::-;-1:-1:-1::0;45555:10:0::2;45543:23;::::0;;;:11:::2;:23;::::0;;;;;;;;45569:3:::2;45543:29:::0;;45588:33;;;;;;::::2;::::0;;;;;::::2;::::0;;;;;;;;::::2;32144:1;;43783: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;39205:962::-;39312:16;39331:23;39346:7;39331:14;:23::i;:::-;39312:42;-1:-1:-1;39369:15:0;;39365:754;;39401:16;39420:51;39465:5;39420:40;39436:23;;39420:11;:15;;:40;;;;:::i;:51::-;39401:70;-1:-1:-1;39486:24:0;39513:28;:11;39401:70;39513:28;:15;:28;:::i;:::-;-1:-1:-1;;;;;39615:18:0;;;39570:12;39615:18;;;:9;:18;;;;;;39486:55;;-1:-1:-1;39570:12:0;39585:100;;39615:18;39635:11;39648:25;39675:9;39585:29;:100::i;:::-;39570:115;-1:-1:-1;39728:11:0;39754:76;;;;-1:-1:-1;39795:19:0;39754:76;-1:-1:-1;;;;;39889:28:0;;;;;;:19;:28;;;;;;:40;;39922:6;39889:40;:32;:40;:::i;:::-;-1:-1:-1;;;;;39858:28:0;;;;;;:19;:28;;;;;;;;:71;;;;39973:17;:26;;;;:38;;40004:6;39973:38;:30;:38;:::i;:::-;-1:-1:-1;;;;;39944:26:0;;;;;;:17;:26;;;;;:67;40062:19;;:31;;40086:6;40062:31;:23;:31;:::i;:::-;40040:19;:53;-1:-1:-1;;;;39365:754:0;-1:-1:-1;;;;;;;;40129:24:0;;;;;:15;:24;;;;;40156:3;40129:30;;39205:962::o;37935:1258::-;38070:21;38135:7;-1:-1:-1;;;;;38122:20:0;:9;-1:-1:-1;;;;;38122:20:0;;38118:75;;;-1:-1:-1;38166:15:0;38159:22;;38118:75;38255:15;;38217:58;;-1:-1:-1;;;;;38217:29:0;;;;38255:15;;38217:58;:29;:58;:::i;:::-;38324:15;;38286:72;;-1:-1:-1;;;;;38286:29:0;;;;38324:15;38342;38286:72;:29;:72;:::i;:::-;38404:40;;;-1:-1:-1;;;38404:40:0;;38438:4;38404:40;;;;;;38379:22;;-1:-1:-1;;;;;38404:25:0;;;;;:40;;;;;;;;;;;;;;;:25;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38404:40:0;38524:15;;:22;;;-1:-1:-1;;;38524:22:0;;;;38404:40;;-1:-1:-1;38465:21:0;;-1:-1:-1;;;;;38524:15:0;;;;:20;;:22;;;;;38404:40;;38524:22;;;;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38524:22:0;-1:-1:-1;;;;;38511:35:0;;;;;;;:72;;;38561:15;;;;;;;;;-1:-1:-1;;;;;38561:15:0;-1:-1:-1;;;;;38561:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38561:22:0;-1:-1:-1;;;;;38550:33:0;;;;;;38511:72;38507:363;;;38607:16;;;38621:1;38607:16;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38607:16:0;38600:23;;38648:9;38638:4;38643:1;38638:7;;;;;;;;;;;;;:19;-1:-1:-1;;;;;38638:19:0;;;-1:-1:-1;;;;;38638:19:0;;;;;38682:7;38672:4;38677:1;38672:7;;;;;;;;;;;;;:17;-1:-1:-1;;;;;38672:17:0;;;-1:-1:-1;;;;;38672:17:0;;;;;38507:363;;;38729:16;;;38743:1;38729:16;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38729:16:0;38722:23;;38770:9;38760:4;38765:1;38760:7;;;;;;;;-1:-1:-1;;;;;38760:19:0;;;:7;;;;;;;;;;:19;;;;38804:15;;:22;;;-1:-1:-1;;;38804:22:0;;;;:15;;;;;:20;;:22;;;;;38760:7;;38804:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38804:22:0;38794:7;;:4;;38799:1;;38794:7;;;;;;;;;;;:32;-1:-1:-1;;;;;38794:32:0;;;-1:-1:-1;;;;;38794:32:0;;;;;38851:7;38841:4;38846:1;38841:7;;;;;;;;;;;;;:17;-1:-1:-1;;;;;38841:17:0;;;-1:-1:-1;;;;;38841:17:0;;;;;38507:363;38890:15;;:102;;-1:-1:-1;;;38890:102:0;;;;;;;;;;;;;;38976:4;38890:102;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38890:15:0;;;;:40;;38931:15;;38948:12;;38962:4;;38976;;38983:8;;38890:102;;;;;;;;;;;;:15;:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;38890:102:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38890:102:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;38890:102:0;;;;;;;;-1:-1:-1;;;39038:40:0;;39072:4;39038:40;;;;;39013:22;;-1:-1:-1;;;;;;39038:25:0;;;-1:-1:-1;39038:25:0;;-1:-1:-1;39038:40:0;;;;;-1:-1:-1;39038:40:0;;-1:-1:-1;39038:40:0;;;;;;;:25;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39038:40:0;;-1:-1:-1;39089:20:0;39112:40;39038;39134:17;39112:40;:21;:40;:::i;:::-;39089:63;-1:-1:-1;;;;;37935: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;40179:847::-;40313:4;-1:-1:-1;;;;;40334:21:0;;;;;;:35;;;40368:1;40359:6;:10;40334:35;40330:666;;;40469:28;;;40499:29;40433:26;;40462:113;;-1:-1:-1;;;;;40469:28:0;;;;40499:29;40530:6;40538:25;40565:9;40462:6;:113::i;:::-;-1:-1:-1;;;;;40638:31:0;;;;;;:22;:31;;;;;;40433:142;;-1:-1:-1;40638:58:0;;40433:142;40638:58;:35;:58;:::i;:::-;-1:-1:-1;;;;;40604:31:0;;;;;;;:22;:31;;;;;:92;;;;40718:29;;40711:82;;40718:29;40627:7;40771:21;40711:82;:50;:82;:::i;:::-;40834:23;;:50;;40862:21;40834:50;:27;:50;:::i;:::-;40808:23;:76;40904:54;;;;;;;;-1:-1:-1;;;;;40904:54:0;;;;;;;;;;;;;40980:4;40973:11;;;;;40330:666;-1:-1:-1;41013:5:0;40179: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://6cfe0813b841bc2b238571927688726db565981a80b5211f43076ffb0391f9a5
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 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.