More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 1,853 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Unstake | 20432924 | 30 days ago | IN | 0 ETH | 0.00064913 | ||||
Unstake | 20339807 | 43 days ago | IN | 0 ETH | 0.00148676 | ||||
Unstake | 20339798 | 43 days ago | IN | 0 ETH | 0.00138271 | ||||
Unstake | 20314671 | 46 days ago | IN | 0 ETH | 0.00122528 | ||||
Unstake | 20278004 | 51 days ago | IN | 0 ETH | 0.00096775 | ||||
Claim Earned | 20242553 | 56 days ago | IN | 0 ETH | 0.00070509 | ||||
Unstake | 20212110 | 60 days ago | IN | 0 ETH | 0.00114447 | ||||
Claim Earned | 20212106 | 60 days ago | IN | 0 ETH | 0.00126559 | ||||
Unstake | 20212040 | 60 days ago | IN | 0 ETH | 0.00147623 | ||||
Claim Earned | 20212035 | 60 days ago | IN | 0 ETH | 0.00137329 | ||||
Unstake | 20109586 | 75 days ago | IN | 0 ETH | 0.00043357 | ||||
Unstake | 20089689 | 77 days ago | IN | 0 ETH | 0.00106714 | ||||
Unstake | 20054156 | 82 days ago | IN | 0 ETH | 0.00059644 | ||||
Unstake | 20041864 | 84 days ago | IN | 0 ETH | 0.00447717 | ||||
Claim Earned | 19999351 | 90 days ago | IN | 0 ETH | 0.00066227 | ||||
Unstake | 19936064 | 99 days ago | IN | 0 ETH | 0.00122876 | ||||
Claim Earned | 19924473 | 101 days ago | IN | 0 ETH | 0.00087783 | ||||
Unstake | 19924473 | 101 days ago | IN | 0 ETH | 0.00189726 | ||||
Unstake | 19924231 | 101 days ago | IN | 0 ETH | 0.00108818 | ||||
Stake | 19918017 | 101 days ago | IN | 0 ETH | 0.00245783 | ||||
Unstake | 19886838 | 106 days ago | IN | 0 ETH | 0.00042217 | ||||
Unstake | 19879727 | 107 days ago | IN | 0 ETH | 0.00083553 | ||||
Unstake | 19878315 | 107 days ago | IN | 0 ETH | 0.00061733 | ||||
Unstake | 19876516 | 107 days ago | IN | 0 ETH | 0.00142902 | ||||
Unstake | 19863340 | 109 days ago | IN | 0 ETH | 0.00152878 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
WEBAISTAKING
Compiler Version
v0.8.20+commit.a1b79de6
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-02-08 */ // File: /SafeMath.sol // OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File: /Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @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 * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 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"); (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"); (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"); (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.4._ */ 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.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal 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 assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: /IERC20.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @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); /** * @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 `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, 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 `from` to `to` 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 from, address to, uint256 amount ) external returns (bool); } // File: /SafeERC20.sol // OpenZeppelin Contracts v4.4.1 (token/ERC20/utils/SafeERC20.sol) pragma solidity ^0.8.0; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { 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' 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) + value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); uint256 newAllowance = oldAllowance - value; _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 require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // File: /ReentrancyGuard.sol // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: /Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: /Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: /websiteaistaking.sol //SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.0; abstract contract IERC20Staking is ReentrancyGuard, Ownable { struct Plan { uint256 overallStaked; uint256 stakesCount; uint256 apr; uint256 stakeDuration; uint256 depositDeduction; uint256 withdrawDeduction; uint256 earlyPenalty; bool initialPool; bool conclude; } struct Staking { uint256 amount; uint256 stakeAt; uint256 endstakeAt; } mapping(uint256 => mapping(address => Staking[])) public stakes; mapping(uint256 => mapping(address => uint256)) public totalRewardsPerWalletPerPlan; address public stakingToken; mapping(uint256 => Plan) public plans; constructor(address _stakingToken) { stakingToken = _stakingToken; } function stake(uint256 _stakingId, uint256 _amount) public virtual; function canWithdrawAmount(uint256 _stakingId, address account) public virtual view returns (uint256, uint256); function unstake(uint256 _stakingId, uint256 _amount) public virtual; function earnedToken(uint256 _stakingId, address account) public virtual view returns (uint256); function claimEarned(uint256 _stakingId) public virtual; function getStakedPlans(address _account) public virtual view returns (bool[] memory); } contract WEBAISTAKING is IERC20Staking { using SafeMath for uint256; using SafeERC20 for IERC20; uint256 public periodicTime = 365 days; uint256 public planLimit = 1; uint256 minAPR = 1; uint256 maxDepositDeduction = 300; uint256 maxWithdrawDeduction = 300; uint256 maxEarlyPenalty = 30; constructor(address _stakingToken) IERC20Staking(_stakingToken) { plans[0].apr = 500; plans[0].stakeDuration = 30 days; plans[0].depositDeduction = 0; plans[0].withdrawDeduction = 0; plans[0].earlyPenalty = 0; } function stake(uint256 _stakingId, uint256 _amount) public nonReentrant override { require(_amount > 0, "Staking Amount cannot be zero"); require( IERC20(stakingToken).balanceOf(msg.sender) >= _amount, "Balance is not enough" ); require(_stakingId < planLimit, "Staking is unavailable"); Plan storage plan = plans[_stakingId]; require(!plan.conclude, "Staking in this pool is concluded"); uint256 beforeBalance = IERC20(stakingToken).balanceOf(address(this)); IERC20(stakingToken).transferFrom(msg.sender, address(this), _amount); uint256 afterBalance = IERC20(stakingToken).balanceOf(address(this)); uint256 amount = afterBalance - beforeBalance; uint256 deductionAmount = amount.mul(plan.depositDeduction).div(1000); if(deductionAmount > 0) { IERC20(stakingToken).transfer(stakingToken, deductionAmount); } uint256 stakelength = stakes[_stakingId][msg.sender].length; if(stakelength == 0) { plan.stakesCount += 1; } stakes[_stakingId][msg.sender].push(); Staking storage _staking = stakes[_stakingId][msg.sender][stakelength]; _staking.amount = amount.sub(deductionAmount); _staking.stakeAt = block.timestamp; _staking.endstakeAt = block.timestamp + plan.stakeDuration; plan.overallStaked = plan.overallStaked.add( amount.sub(deductionAmount) ); } function canWithdrawAmount(uint256 _stakingId, address account) public override view returns (uint256, uint256) { uint256 _stakedAmount = 0; uint256 _canWithdraw = 0; for (uint256 i = 0; i < stakes[_stakingId][account].length; i++) { Staking storage _staking = stakes[_stakingId][account][i]; _stakedAmount = _stakedAmount.add(_staking.amount); _canWithdraw = _canWithdraw.add(_staking.amount); } return (_stakedAmount, _canWithdraw); } function earnedToken(uint256 _stakingId, address account) public override view returns (uint256) { uint256 _earned = 0; Plan storage plan = plans[_stakingId]; for (uint256 i = 0; i < stakes[_stakingId][account].length; i++) { Staking storage _staking = stakes[_stakingId][account][i]; _earned = _earned.add( _staking.amount .mul(block.timestamp - _staking.stakeAt) .div(periodicTime) .mul(plan.apr) .div(100) ); } return _earned; } function unstake(uint256 _stakingId, uint256 _amount) public nonReentrant override { uint256 _stakedAmount; uint256 _canWithdraw; Plan storage plan = plans[_stakingId]; (_stakedAmount, _canWithdraw) = canWithdrawAmount( _stakingId, msg.sender ); require( _canWithdraw >= _amount, "Withdraw Amount is not enough" ); uint256 deductionAmount = _amount.mul(plans[_stakingId].withdrawDeduction).div(1000); uint256 tamount = _amount - deductionAmount; uint256 amount = _amount; uint256 _earned = 0; uint256 _penalty = 0; for (uint256 i = stakes[_stakingId][msg.sender].length; i > 0; i--) { Staking storage _staking = stakes[_stakingId][msg.sender][i-1]; if (amount >= _staking.amount) { if (block.timestamp >= _staking.endstakeAt) { _earned = _earned.add( _staking.amount .mul(block.timestamp - _staking.stakeAt) .div(periodicTime) .mul(plan.apr) .div(100) ); } else { _penalty = _penalty.add( _staking.amount .mul(plan.earlyPenalty) .div(100) ); } amount = amount.sub(_staking.amount); _staking.amount = 0; } else { if (block.timestamp >= _staking.endstakeAt) { _earned = _earned.add( amount .mul(block.timestamp - _staking.stakeAt) .div(periodicTime) .mul(plan.apr) .div(100) ); } else { _penalty = _penalty.add( amount .mul(plan.earlyPenalty) .div(100) ); } _staking.amount = _staking.amount.sub(amount); amount = 0; break; } _staking.stakeAt = block.timestamp; } if(deductionAmount > 0) { IERC20(stakingToken).transfer(stakingToken, deductionAmount); } if(tamount > 0) { IERC20(stakingToken).transfer(msg.sender, tamount - _penalty + _earned); totalRewardsPerWalletPerPlan[_stakingId][msg.sender] = totalRewardsPerWalletPerPlan[_stakingId][msg.sender].add(_earned); } plans[_stakingId].overallStaked = plans[_stakingId].overallStaked.sub(_amount); } function claimEarned(uint256 _stakingId) public nonReentrant override { uint256 _earned = 0; Plan storage plan = plans[_stakingId]; require(stakes[_stakingId][msg.sender].length > 0, "No stakes found"); for (uint256 i = 0; i < stakes[_stakingId][msg.sender].length; i++) { Staking storage _staking = stakes[_stakingId][msg.sender][i]; _earned = _earned.add( _staking .amount .mul(plan.apr) .mul(block.timestamp - _staking.stakeAt) .div(periodicTime) .div(100) ); totalRewardsPerWalletPerPlan[_stakingId][msg.sender] = totalRewardsPerWalletPerPlan[_stakingId][msg.sender].add(_earned); _staking.stakeAt = block.timestamp; } require(_earned > 0, "There is no amount to claim"); IERC20(stakingToken).transfer(msg.sender, _earned); } function getStakedPlans(address _account) public override view returns (bool[] memory) { bool[] memory walletPlans = new bool[](planLimit); for (uint256 i = 0; i < planLimit; i++) { walletPlans[i] = stakes[i][_account].length == 0 ? false : true; } return walletPlans; } function setAPR(uint256 _stakingId, uint256 _percent) external onlyOwner { require(_percent >= minAPR); plans[_stakingId].apr = _percent; } function setDepositDeduction(uint256 _stakingId, uint256 _deduction) external onlyOwner { require(_deduction <= maxDepositDeduction); plans[_stakingId].depositDeduction = _deduction; } function setWithdrawDeduction(uint256 _stakingId, uint256 _deduction) external onlyOwner { require(_deduction <= maxWithdrawDeduction); plans[_stakingId].withdrawDeduction = _deduction; } function setEarlyPenalty(uint256 _stakingId, uint256 _penalty) external onlyOwner { require(_penalty <= maxEarlyPenalty); plans[_stakingId].earlyPenalty = _penalty; } function setStakeConclude(uint256 _stakingId, bool _conclude) external onlyOwner { plans[_stakingId].conclude = _conclude; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_stakingToken","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"uint256","name":"_stakingId","type":"uint256"},{"internalType":"address","name":"account","type":"address"}],"name":"canWithdrawAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingId","type":"uint256"}],"name":"claimEarned","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingId","type":"uint256"},{"internalType":"address","name":"account","type":"address"}],"name":"earnedToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getStakedPlans","outputs":[{"internalType":"bool[]","name":"","type":"bool[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"periodicTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"planLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"plans","outputs":[{"internalType":"uint256","name":"overallStaked","type":"uint256"},{"internalType":"uint256","name":"stakesCount","type":"uint256"},{"internalType":"uint256","name":"apr","type":"uint256"},{"internalType":"uint256","name":"stakeDuration","type":"uint256"},{"internalType":"uint256","name":"depositDeduction","type":"uint256"},{"internalType":"uint256","name":"withdrawDeduction","type":"uint256"},{"internalType":"uint256","name":"earlyPenalty","type":"uint256"},{"internalType":"bool","name":"initialPool","type":"bool"},{"internalType":"bool","name":"conclude","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingId","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"}],"name":"setAPR","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingId","type":"uint256"},{"internalType":"uint256","name":"_deduction","type":"uint256"}],"name":"setDepositDeduction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingId","type":"uint256"},{"internalType":"uint256","name":"_penalty","type":"uint256"}],"name":"setEarlyPenalty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingId","type":"uint256"},{"internalType":"bool","name":"_conclude","type":"bool"}],"name":"setStakeConclude","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingId","type":"uint256"},{"internalType":"uint256","name":"_deduction","type":"uint256"}],"name":"setWithdrawDeduction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingId","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakes","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"stakeAt","type":"uint256"},{"internalType":"uint256","name":"endstakeAt","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"totalRewardsPerWalletPerPlan","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":[{"internalType":"uint256","name":"_stakingId","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526301e133806006556001600755600160085561012c60095561012c600a55601e600b5534801562000033575f80fd5b5060405162002dd538038062002dd583398181016040528101906200005991906200027a565b8060015f8190555062000081620000756200014b60201b60201c565b6200015260201b60201c565b8060045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506101f460055f8081526020019081526020015f206002018190555062278d0060055f8081526020019081526020015f20600301819055505f60055f8081526020019081526020015f20600401819055505f60055f8081526020019081526020015f20600501819055505f60055f8081526020019081526020015f206006018190555050620002aa565b5f33905090565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620002448262000219565b9050919050565b620002568162000238565b811462000261575f80fd5b50565b5f8151905062000274816200024b565b92915050565b5f6020828403121562000292576200029162000215565b5b5f620002a18482850162000264565b91505092915050565b612b1d80620002b85f395ff3fe608060405234801561000f575f80fd5b506004361061012a575f3560e01c80638da5cb5b116100ab578063b16206161161006f578063b16206161461031b578063b19fa16614610353578063c28fc7411461036f578063e030400b1461039f578063f2fde38b146103bb5761012a565b80638da5cb5b1461027757806397e90f33146102955780639e2c8a5b146102b1578063a230561b146102cd578063b1427ac1146102e95761012a565b8063715018a6116100f2578063715018a6146101d257806372f702f3146101dc5780637b0472f0146101fa5780638a9640e5146102165780638c972702146102465761012a565b806304c10b9a1461012e578063399a967b1461014c5780635792c7a41461016a5780635cbf7cb01461019a5780636132df35146101b6575b5f80fd5b6101366103d7565b6040516101439190611f7d565b60405180910390f35b6101546103dd565b6040516101619190611f7d565b60405180910390f35b610184600480360381019061017f919061201e565b6103e3565b6040516101919190611f7d565b60405180910390f35b6101b460048036038101906101af919061205c565b610558565b005b6101d060048036038101906101cb919061209a565b6105ff565b005b6101da6109e4565b005b6101e4610a6b565b6040516101f191906120d4565b60405180910390f35b610214600480360381019061020f919061205c565b610a90565b005b610230600480360381019061022b91906120ed565b611142565b60405161023d91906121da565b60405180910390f35b610260600480360381019061025b919061201e565b61123f565b60405161026e9291906121fa565b60405180910390f35b61027f61135d565b60405161028c91906120d4565b60405180910390f35b6102af60048036038101906102aa919061205c565b611385565b005b6102cb60048036038101906102c6919061205c565b61142c565b005b6102e760048036038101906102e2919061205c565b611a89565b005b61030360048036038101906102fe9190612221565b611b30565b60405161031293929190612271565b60405180910390f35b6103356004803603810190610330919061209a565b611b7b565b60405161034a999897969594939291906122b5565b60405180910390f35b61036d6004803603810190610368919061205c565b611bde565b005b6103896004803603810190610384919061201e565b611c85565b6040516103969190611f7d565b60405180910390f35b6103b960048036038101906103b4919061236a565b611ca5565b005b6103d560048036038101906103d091906120ed565b611d51565b005b60065481565b60075481565b5f805f90505f60055f8681526020019081526020015f2090505f5b60025f8781526020019081526020015f205f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905081101561054c575f60025f8881526020019081526020015f205f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2082815481106104b4576104b36123a8565b5b905f5260205f20906003020190506105366105276064610519866002015461050b6006546104fd8860010154426104eb9190612402565b895f0154611e4790919063ffffffff16565b611e5c90919063ffffffff16565b611e4790919063ffffffff16565b611e5c90919063ffffffff16565b85611e7190919063ffffffff16565b935050808061054490612435565b9150506103fe565b50819250505092915050565b610560611e86565b73ffffffffffffffffffffffffffffffffffffffff1661057e61135d565b73ffffffffffffffffffffffffffffffffffffffff16146105d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105cb906124d6565b60405180910390fd5b600a548111156105e2575f80fd5b8060055f8481526020019081526020015f20600501819055505050565b60025f5403610643576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161063a9061253e565b60405180910390fd5b60025f819055505f8060055f8481526020019081526020015f2090505f60025f8581526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2080549050116106f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e7906125a6565b60405180910390fd5b5f5b60025f8581526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805490508110156108f8575f60025f8681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2082815481106107a8576107a76123a8565b5b905f5260205f209060030201905061082a61081b606461080d6006546107ff8660010154426107d79190612402565b6107f18a60020154895f0154611e4790919063ffffffff16565b611e4790919063ffffffff16565b611e5c90919063ffffffff16565b611e5c90919063ffffffff16565b85611e7190919063ffffffff16565b935061088b8460035f8881526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611e7190919063ffffffff16565b60035f8781526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055504281600101819055505080806108f090612435565b9150506106f2565b505f821161093b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109329061260e565b60405180910390fd5b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b815260040161099792919061262c565b6020604051808303815f875af11580156109b3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109d79190612667565b50505060015f8190555050565b6109ec611e86565b73ffffffffffffffffffffffffffffffffffffffff16610a0a61135d565b73ffffffffffffffffffffffffffffffffffffffff1614610a60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a57906124d6565b60405180910390fd5b610a695f611e8d565b565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025f5403610ad4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acb9061253e565b60405180910390fd5b60025f819055505f8111610b1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b14906126dc565b60405180910390fd5b8060045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610b7891906120d4565b602060405180830381865afa158015610b93573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bb7919061270e565b1015610bf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bef90612783565b60405180910390fd5b6007548210610c3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c33906127eb565b60405180910390fd5b5f60055f8481526020019081526020015f2090508060070160019054906101000a900460ff1615610ca2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9990612879565b60405180910390fd5b5f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610cfd91906120d4565b602060405180830381865afa158015610d18573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d3c919061270e565b905060045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff1660e01b8152600401610d9c93929190612897565b6020604051808303815f875af1158015610db8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ddc9190612667565b505f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610e3891906120d4565b602060405180830381865afa158015610e53573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e77919061270e565b90505f8282610e869190612402565b90505f610eb46103e8610ea6876004015485611e4790919063ffffffff16565b611e5c90919063ffffffff16565b90505f811115610f7d5760045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401610f3b92919061262c565b6020604051808303815f875af1158015610f57573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f7b9190612667565b505b5f60025f8981526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905090505f8103610ff3576001866001015f828254610feb91906128cc565b925050819055505b60025f8981526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2060018160018154018082558091505003905f5260205f209050505f60025f8a81526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2082815481106110b8576110b76123a8565b5b905f5260205f20906003020190506110d98385611f5090919063ffffffff16565b815f01819055504281600101819055508660030154426110f991906128cc565b81600201819055506111296111178486611f5090919063ffffffff16565b885f0154611e7190919063ffffffff16565b875f01819055505050505050505060015f819055505050565b60605f60075467ffffffffffffffff811115611161576111606128ff565b5b60405190808252806020026020018201604052801561118f5781602001602082028036833780820191505090505b5090505f5b600754811015611235575f60025f8381526020019081526020015f205f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2080549050146111fb5760016111fd565b5f5b8282815181106112105761120f6123a8565b5b602002602001019015159081151581525050808061122d90612435565b915050611194565b5080915050919050565b5f805f805f5b60025f8881526020019081526020015f205f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905081101561134d575f60025f8981526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2082815481106112fb576112fa6123a8565b5b905f5260205f209060030201905061131f815f015485611e7190919063ffffffff16565b9350611337815f015484611e7190919063ffffffff16565b925050808061134590612435565b915050611245565b5081819350935050509250929050565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61138d611e86565b73ffffffffffffffffffffffffffffffffffffffff166113ab61135d565b73ffffffffffffffffffffffffffffffffffffffff1614611401576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f8906124d6565b60405180910390fd5b60095481111561140f575f80fd5b8060055f8481526020019081526020015f20600401819055505050565b60025f5403611470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114679061253e565b60405180910390fd5b60025f819055505f805f60055f8681526020019081526020015f209050611497853361123f565b8093508194505050838210156114e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d990612976565b60405180910390fd5b5f61151e6103e861151060055f8a81526020019081526020015f206005015488611e4790919063ffffffff16565b611e5c90919063ffffffff16565b90505f818661152d9190612402565b90505f8690505f805f60025f8c81526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905090505b5f811115611806575f60025f8d81526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206001836115eb9190612402565b815481106115fc576115fb6123a8565b5b905f5260205f2090600302019050805f01548510611701578060020154421061169a5761169361168460646116768b6002015461166860065461165a8860010154426116489190612402565b895f0154611e4790919063ffffffff16565b611e5c90919063ffffffff16565b611e4790919063ffffffff16565b611e5c90919063ffffffff16565b85611e7190919063ffffffff16565b93506116dc565b6116d96116ca60646116bc8b60060154855f0154611e4790919063ffffffff16565b611e5c90919063ffffffff16565b84611e7190919063ffffffff16565b92505b6116f2815f015486611f5090919063ffffffff16565b94505f815f01819055506117e9565b806002015442106117845761177d61176e60646117608b600201546117526006546117448860010154426117359190612402565b8d611e4790919063ffffffff16565b611e5c90919063ffffffff16565b611e4790919063ffffffff16565b611e5c90919063ffffffff16565b85611e7190919063ffffffff16565b93506117c3565b6117c06117b160646117a38b6006015489611e4790919063ffffffff16565b611e5c90919063ffffffff16565b84611e7190919063ffffffff16565b92505b6117d985825f0154611f5090919063ffffffff16565b815f01819055505f945050611806565b4281600101819055505080806117fe90612994565b915050611589565b505f8511156118ce5760045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16876040518363ffffffff1660e01b815260040161188c92919061262c565b6020604051808303815f875af11580156118a8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118cc9190612667565b505b5f841115611a395760045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb338484886119219190612402565b61192b91906128cc565b6040518363ffffffff1660e01b815260040161194892919061262c565b6020604051808303815f875af1158015611964573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119889190612667565b506119e88260035f8d81526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611e7190919063ffffffff16565b60035f8c81526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b611a5f8960055f8d81526020019081526020015f205f0154611f5090919063ffffffff16565b60055f8c81526020019081526020015f205f0181905550505050505050505060015f819055505050565b611a91611e86565b73ffffffffffffffffffffffffffffffffffffffff16611aaf61135d565b73ffffffffffffffffffffffffffffffffffffffff1614611b05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afc906124d6565b60405180910390fd5b600854811015611b13575f80fd5b8060055f8481526020019081526020015f20600201819055505050565b6002602052825f5260405f20602052815f5260405f208181548110611b53575f80fd5b905f5260205f2090600302015f925092505050805f0154908060010154908060020154905083565b6005602052805f5260405f205f91509050805f015490806001015490806002015490806003015490806004015490806005015490806006015490806007015f9054906101000a900460ff16908060070160019054906101000a900460ff16905089565b611be6611e86565b73ffffffffffffffffffffffffffffffffffffffff16611c0461135d565b73ffffffffffffffffffffffffffffffffffffffff1614611c5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c51906124d6565b60405180910390fd5b600b54811115611c68575f80fd5b8060055f8481526020019081526020015f20600601819055505050565b6003602052815f5260405f20602052805f5260405f205f91509150505481565b611cad611e86565b73ffffffffffffffffffffffffffffffffffffffff16611ccb61135d565b73ffffffffffffffffffffffffffffffffffffffff1614611d21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d18906124d6565b60405180910390fd5b8060055f8481526020019081526020015f2060070160016101000a81548160ff0219169083151502179055505050565b611d59611e86565b73ffffffffffffffffffffffffffffffffffffffff16611d7761135d565b73ffffffffffffffffffffffffffffffffffffffff1614611dcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc4906124d6565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611e3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3290612a2b565b60405180910390fd5b611e4481611e8d565b50565b5f8183611e549190612a49565b905092915050565b5f8183611e699190612ab7565b905092915050565b5f8183611e7e91906128cc565b905092915050565b5f33905090565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f8183611f5d9190612402565b905092915050565b5f819050919050565b611f7781611f65565b82525050565b5f602082019050611f905f830184611f6e565b92915050565b5f80fd5b611fa381611f65565b8114611fad575f80fd5b50565b5f81359050611fbe81611f9a565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611fed82611fc4565b9050919050565b611ffd81611fe3565b8114612007575f80fd5b50565b5f8135905061201881611ff4565b92915050565b5f806040838503121561203457612033611f96565b5b5f61204185828601611fb0565b92505060206120528582860161200a565b9150509250929050565b5f806040838503121561207257612071611f96565b5b5f61207f85828601611fb0565b925050602061209085828601611fb0565b9150509250929050565b5f602082840312156120af576120ae611f96565b5b5f6120bc84828501611fb0565b91505092915050565b6120ce81611fe3565b82525050565b5f6020820190506120e75f8301846120c5565b92915050565b5f6020828403121561210257612101611f96565b5b5f61210f8482850161200a565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f8115159050919050565b61215581612141565b82525050565b5f612166838361214c565b60208301905092915050565b5f602082019050919050565b5f61218882612118565b6121928185612122565b935061219d83612132565b805f5b838110156121cd5781516121b4888261215b565b97506121bf83612172565b9250506001810190506121a0565b5085935050505092915050565b5f6020820190508181035f8301526121f2818461217e565b905092915050565b5f60408201905061220d5f830185611f6e565b61221a6020830184611f6e565b9392505050565b5f805f6060848603121561223857612237611f96565b5b5f61224586828701611fb0565b93505060206122568682870161200a565b925050604061226786828701611fb0565b9150509250925092565b5f6060820190506122845f830186611f6e565b6122916020830185611f6e565b61229e6040830184611f6e565b949350505050565b6122af81612141565b82525050565b5f610120820190506122c95f83018c611f6e565b6122d6602083018b611f6e565b6122e3604083018a611f6e565b6122f06060830189611f6e565b6122fd6080830188611f6e565b61230a60a0830187611f6e565b61231760c0830186611f6e565b61232460e08301856122a6565b6123326101008301846122a6565b9a9950505050505050505050565b61234981612141565b8114612353575f80fd5b50565b5f8135905061236481612340565b92915050565b5f80604083850312156123805761237f611f96565b5b5f61238d85828601611fb0565b925050602061239e85828601612356565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61240c82611f65565b915061241783611f65565b925082820390508181111561242f5761242e6123d5565b5b92915050565b5f61243f82611f65565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612471576124706123d5565b5b600182019050919050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6124c060208361247c565b91506124cb8261248c565b602082019050919050565b5f6020820190508181035f8301526124ed816124b4565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c005f82015250565b5f612528601f8361247c565b9150612533826124f4565b602082019050919050565b5f6020820190508181035f8301526125558161251c565b9050919050565b7f4e6f207374616b657320666f756e6400000000000000000000000000000000005f82015250565b5f612590600f8361247c565b915061259b8261255c565b602082019050919050565b5f6020820190508181035f8301526125bd81612584565b9050919050565b7f5468657265206973206e6f20616d6f756e7420746f20636c61696d00000000005f82015250565b5f6125f8601b8361247c565b9150612603826125c4565b602082019050919050565b5f6020820190508181035f830152612625816125ec565b9050919050565b5f60408201905061263f5f8301856120c5565b61264c6020830184611f6e565b9392505050565b5f8151905061266181612340565b92915050565b5f6020828403121561267c5761267b611f96565b5b5f61268984828501612653565b91505092915050565b7f5374616b696e6720416d6f756e742063616e6e6f74206265207a65726f0000005f82015250565b5f6126c6601d8361247c565b91506126d182612692565b602082019050919050565b5f6020820190508181035f8301526126f3816126ba565b9050919050565b5f8151905061270881611f9a565b92915050565b5f6020828403121561272357612722611f96565b5b5f612730848285016126fa565b91505092915050565b7f42616c616e6365206973206e6f7420656e6f75676800000000000000000000005f82015250565b5f61276d60158361247c565b915061277882612739565b602082019050919050565b5f6020820190508181035f83015261279a81612761565b9050919050565b7f5374616b696e6720697320756e617661696c61626c65000000000000000000005f82015250565b5f6127d560168361247c565b91506127e0826127a1565b602082019050919050565b5f6020820190508181035f830152612802816127c9565b9050919050565b7f5374616b696e6720696e207468697320706f6f6c20697320636f6e636c7564655f8201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b5f61286360218361247c565b915061286e82612809565b604082019050919050565b5f6020820190508181035f83015261289081612857565b9050919050565b5f6060820190506128aa5f8301866120c5565b6128b760208301856120c5565b6128c46040830184611f6e565b949350505050565b5f6128d682611f65565b91506128e183611f65565b92508282019050808211156128f9576128f86123d5565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f576974686472617720416d6f756e74206973206e6f7420656e6f7567680000005f82015250565b5f612960601d8361247c565b915061296b8261292c565b602082019050919050565b5f6020820190508181035f83015261298d81612954565b9050919050565b5f61299e82611f65565b91505f82036129b0576129af6123d5565b5b600182039050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f612a1560268361247c565b9150612a20826129bb565b604082019050919050565b5f6020820190508181035f830152612a4281612a09565b9050919050565b5f612a5382611f65565b9150612a5e83611f65565b9250828202612a6c81611f65565b91508282048414831517612a8357612a826123d5565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612ac182611f65565b9150612acc83611f65565b925082612adc57612adb612a8a565b5b82820490509291505056fea26469706673582212200e68a4abf0790ec593bd96e4f9c1b5bdd81d25aefdf02ff1f3b4d67b38efac2864736f6c63430008140033000000000000000000000000c73abe8d7a0da644743fe2ad24f4e16bb7ed43f8
Deployed Bytecode
0x608060405234801561000f575f80fd5b506004361061012a575f3560e01c80638da5cb5b116100ab578063b16206161161006f578063b16206161461031b578063b19fa16614610353578063c28fc7411461036f578063e030400b1461039f578063f2fde38b146103bb5761012a565b80638da5cb5b1461027757806397e90f33146102955780639e2c8a5b146102b1578063a230561b146102cd578063b1427ac1146102e95761012a565b8063715018a6116100f2578063715018a6146101d257806372f702f3146101dc5780637b0472f0146101fa5780638a9640e5146102165780638c972702146102465761012a565b806304c10b9a1461012e578063399a967b1461014c5780635792c7a41461016a5780635cbf7cb01461019a5780636132df35146101b6575b5f80fd5b6101366103d7565b6040516101439190611f7d565b60405180910390f35b6101546103dd565b6040516101619190611f7d565b60405180910390f35b610184600480360381019061017f919061201e565b6103e3565b6040516101919190611f7d565b60405180910390f35b6101b460048036038101906101af919061205c565b610558565b005b6101d060048036038101906101cb919061209a565b6105ff565b005b6101da6109e4565b005b6101e4610a6b565b6040516101f191906120d4565b60405180910390f35b610214600480360381019061020f919061205c565b610a90565b005b610230600480360381019061022b91906120ed565b611142565b60405161023d91906121da565b60405180910390f35b610260600480360381019061025b919061201e565b61123f565b60405161026e9291906121fa565b60405180910390f35b61027f61135d565b60405161028c91906120d4565b60405180910390f35b6102af60048036038101906102aa919061205c565b611385565b005b6102cb60048036038101906102c6919061205c565b61142c565b005b6102e760048036038101906102e2919061205c565b611a89565b005b61030360048036038101906102fe9190612221565b611b30565b60405161031293929190612271565b60405180910390f35b6103356004803603810190610330919061209a565b611b7b565b60405161034a999897969594939291906122b5565b60405180910390f35b61036d6004803603810190610368919061205c565b611bde565b005b6103896004803603810190610384919061201e565b611c85565b6040516103969190611f7d565b60405180910390f35b6103b960048036038101906103b4919061236a565b611ca5565b005b6103d560048036038101906103d091906120ed565b611d51565b005b60065481565b60075481565b5f805f90505f60055f8681526020019081526020015f2090505f5b60025f8781526020019081526020015f205f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905081101561054c575f60025f8881526020019081526020015f205f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2082815481106104b4576104b36123a8565b5b905f5260205f20906003020190506105366105276064610519866002015461050b6006546104fd8860010154426104eb9190612402565b895f0154611e4790919063ffffffff16565b611e5c90919063ffffffff16565b611e4790919063ffffffff16565b611e5c90919063ffffffff16565b85611e7190919063ffffffff16565b935050808061054490612435565b9150506103fe565b50819250505092915050565b610560611e86565b73ffffffffffffffffffffffffffffffffffffffff1661057e61135d565b73ffffffffffffffffffffffffffffffffffffffff16146105d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105cb906124d6565b60405180910390fd5b600a548111156105e2575f80fd5b8060055f8481526020019081526020015f20600501819055505050565b60025f5403610643576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161063a9061253e565b60405180910390fd5b60025f819055505f8060055f8481526020019081526020015f2090505f60025f8581526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2080549050116106f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e7906125a6565b60405180910390fd5b5f5b60025f8581526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805490508110156108f8575f60025f8681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2082815481106107a8576107a76123a8565b5b905f5260205f209060030201905061082a61081b606461080d6006546107ff8660010154426107d79190612402565b6107f18a60020154895f0154611e4790919063ffffffff16565b611e4790919063ffffffff16565b611e5c90919063ffffffff16565b611e5c90919063ffffffff16565b85611e7190919063ffffffff16565b935061088b8460035f8881526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611e7190919063ffffffff16565b60035f8781526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055504281600101819055505080806108f090612435565b9150506106f2565b505f821161093b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109329061260e565b60405180910390fd5b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b815260040161099792919061262c565b6020604051808303815f875af11580156109b3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109d79190612667565b50505060015f8190555050565b6109ec611e86565b73ffffffffffffffffffffffffffffffffffffffff16610a0a61135d565b73ffffffffffffffffffffffffffffffffffffffff1614610a60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a57906124d6565b60405180910390fd5b610a695f611e8d565b565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025f5403610ad4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acb9061253e565b60405180910390fd5b60025f819055505f8111610b1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b14906126dc565b60405180910390fd5b8060045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610b7891906120d4565b602060405180830381865afa158015610b93573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bb7919061270e565b1015610bf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bef90612783565b60405180910390fd5b6007548210610c3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c33906127eb565b60405180910390fd5b5f60055f8481526020019081526020015f2090508060070160019054906101000a900460ff1615610ca2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9990612879565b60405180910390fd5b5f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610cfd91906120d4565b602060405180830381865afa158015610d18573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d3c919061270e565b905060045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff1660e01b8152600401610d9c93929190612897565b6020604051808303815f875af1158015610db8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ddc9190612667565b505f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610e3891906120d4565b602060405180830381865afa158015610e53573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e77919061270e565b90505f8282610e869190612402565b90505f610eb46103e8610ea6876004015485611e4790919063ffffffff16565b611e5c90919063ffffffff16565b90505f811115610f7d5760045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401610f3b92919061262c565b6020604051808303815f875af1158015610f57573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f7b9190612667565b505b5f60025f8981526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905090505f8103610ff3576001866001015f828254610feb91906128cc565b925050819055505b60025f8981526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2060018160018154018082558091505003905f5260205f209050505f60025f8a81526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2082815481106110b8576110b76123a8565b5b905f5260205f20906003020190506110d98385611f5090919063ffffffff16565b815f01819055504281600101819055508660030154426110f991906128cc565b81600201819055506111296111178486611f5090919063ffffffff16565b885f0154611e7190919063ffffffff16565b875f01819055505050505050505060015f819055505050565b60605f60075467ffffffffffffffff811115611161576111606128ff565b5b60405190808252806020026020018201604052801561118f5781602001602082028036833780820191505090505b5090505f5b600754811015611235575f60025f8381526020019081526020015f205f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2080549050146111fb5760016111fd565b5f5b8282815181106112105761120f6123a8565b5b602002602001019015159081151581525050808061122d90612435565b915050611194565b5080915050919050565b5f805f805f5b60025f8881526020019081526020015f205f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905081101561134d575f60025f8981526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2082815481106112fb576112fa6123a8565b5b905f5260205f209060030201905061131f815f015485611e7190919063ffffffff16565b9350611337815f015484611e7190919063ffffffff16565b925050808061134590612435565b915050611245565b5081819350935050509250929050565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61138d611e86565b73ffffffffffffffffffffffffffffffffffffffff166113ab61135d565b73ffffffffffffffffffffffffffffffffffffffff1614611401576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f8906124d6565b60405180910390fd5b60095481111561140f575f80fd5b8060055f8481526020019081526020015f20600401819055505050565b60025f5403611470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114679061253e565b60405180910390fd5b60025f819055505f805f60055f8681526020019081526020015f209050611497853361123f565b8093508194505050838210156114e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d990612976565b60405180910390fd5b5f61151e6103e861151060055f8a81526020019081526020015f206005015488611e4790919063ffffffff16565b611e5c90919063ffffffff16565b90505f818661152d9190612402565b90505f8690505f805f60025f8c81526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905090505b5f811115611806575f60025f8d81526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206001836115eb9190612402565b815481106115fc576115fb6123a8565b5b905f5260205f2090600302019050805f01548510611701578060020154421061169a5761169361168460646116768b6002015461166860065461165a8860010154426116489190612402565b895f0154611e4790919063ffffffff16565b611e5c90919063ffffffff16565b611e4790919063ffffffff16565b611e5c90919063ffffffff16565b85611e7190919063ffffffff16565b93506116dc565b6116d96116ca60646116bc8b60060154855f0154611e4790919063ffffffff16565b611e5c90919063ffffffff16565b84611e7190919063ffffffff16565b92505b6116f2815f015486611f5090919063ffffffff16565b94505f815f01819055506117e9565b806002015442106117845761177d61176e60646117608b600201546117526006546117448860010154426117359190612402565b8d611e4790919063ffffffff16565b611e5c90919063ffffffff16565b611e4790919063ffffffff16565b611e5c90919063ffffffff16565b85611e7190919063ffffffff16565b93506117c3565b6117c06117b160646117a38b6006015489611e4790919063ffffffff16565b611e5c90919063ffffffff16565b84611e7190919063ffffffff16565b92505b6117d985825f0154611f5090919063ffffffff16565b815f01819055505f945050611806565b4281600101819055505080806117fe90612994565b915050611589565b505f8511156118ce5760045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16876040518363ffffffff1660e01b815260040161188c92919061262c565b6020604051808303815f875af11580156118a8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118cc9190612667565b505b5f841115611a395760045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb338484886119219190612402565b61192b91906128cc565b6040518363ffffffff1660e01b815260040161194892919061262c565b6020604051808303815f875af1158015611964573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119889190612667565b506119e88260035f8d81526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611e7190919063ffffffff16565b60035f8c81526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b611a5f8960055f8d81526020019081526020015f205f0154611f5090919063ffffffff16565b60055f8c81526020019081526020015f205f0181905550505050505050505060015f819055505050565b611a91611e86565b73ffffffffffffffffffffffffffffffffffffffff16611aaf61135d565b73ffffffffffffffffffffffffffffffffffffffff1614611b05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afc906124d6565b60405180910390fd5b600854811015611b13575f80fd5b8060055f8481526020019081526020015f20600201819055505050565b6002602052825f5260405f20602052815f5260405f208181548110611b53575f80fd5b905f5260205f2090600302015f925092505050805f0154908060010154908060020154905083565b6005602052805f5260405f205f91509050805f015490806001015490806002015490806003015490806004015490806005015490806006015490806007015f9054906101000a900460ff16908060070160019054906101000a900460ff16905089565b611be6611e86565b73ffffffffffffffffffffffffffffffffffffffff16611c0461135d565b73ffffffffffffffffffffffffffffffffffffffff1614611c5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c51906124d6565b60405180910390fd5b600b54811115611c68575f80fd5b8060055f8481526020019081526020015f20600601819055505050565b6003602052815f5260405f20602052805f5260405f205f91509150505481565b611cad611e86565b73ffffffffffffffffffffffffffffffffffffffff16611ccb61135d565b73ffffffffffffffffffffffffffffffffffffffff1614611d21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d18906124d6565b60405180910390fd5b8060055f8481526020019081526020015f2060070160016101000a81548160ff0219169083151502179055505050565b611d59611e86565b73ffffffffffffffffffffffffffffffffffffffff16611d7761135d565b73ffffffffffffffffffffffffffffffffffffffff1614611dcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc4906124d6565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611e3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3290612a2b565b60405180910390fd5b611e4481611e8d565b50565b5f8183611e549190612a49565b905092915050565b5f8183611e699190612ab7565b905092915050565b5f8183611e7e91906128cc565b905092915050565b5f33905090565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f8183611f5d9190612402565b905092915050565b5f819050919050565b611f7781611f65565b82525050565b5f602082019050611f905f830184611f6e565b92915050565b5f80fd5b611fa381611f65565b8114611fad575f80fd5b50565b5f81359050611fbe81611f9a565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611fed82611fc4565b9050919050565b611ffd81611fe3565b8114612007575f80fd5b50565b5f8135905061201881611ff4565b92915050565b5f806040838503121561203457612033611f96565b5b5f61204185828601611fb0565b92505060206120528582860161200a565b9150509250929050565b5f806040838503121561207257612071611f96565b5b5f61207f85828601611fb0565b925050602061209085828601611fb0565b9150509250929050565b5f602082840312156120af576120ae611f96565b5b5f6120bc84828501611fb0565b91505092915050565b6120ce81611fe3565b82525050565b5f6020820190506120e75f8301846120c5565b92915050565b5f6020828403121561210257612101611f96565b5b5f61210f8482850161200a565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f8115159050919050565b61215581612141565b82525050565b5f612166838361214c565b60208301905092915050565b5f602082019050919050565b5f61218882612118565b6121928185612122565b935061219d83612132565b805f5b838110156121cd5781516121b4888261215b565b97506121bf83612172565b9250506001810190506121a0565b5085935050505092915050565b5f6020820190508181035f8301526121f2818461217e565b905092915050565b5f60408201905061220d5f830185611f6e565b61221a6020830184611f6e565b9392505050565b5f805f6060848603121561223857612237611f96565b5b5f61224586828701611fb0565b93505060206122568682870161200a565b925050604061226786828701611fb0565b9150509250925092565b5f6060820190506122845f830186611f6e565b6122916020830185611f6e565b61229e6040830184611f6e565b949350505050565b6122af81612141565b82525050565b5f610120820190506122c95f83018c611f6e565b6122d6602083018b611f6e565b6122e3604083018a611f6e565b6122f06060830189611f6e565b6122fd6080830188611f6e565b61230a60a0830187611f6e565b61231760c0830186611f6e565b61232460e08301856122a6565b6123326101008301846122a6565b9a9950505050505050505050565b61234981612141565b8114612353575f80fd5b50565b5f8135905061236481612340565b92915050565b5f80604083850312156123805761237f611f96565b5b5f61238d85828601611fb0565b925050602061239e85828601612356565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61240c82611f65565b915061241783611f65565b925082820390508181111561242f5761242e6123d5565b5b92915050565b5f61243f82611f65565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612471576124706123d5565b5b600182019050919050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6124c060208361247c565b91506124cb8261248c565b602082019050919050565b5f6020820190508181035f8301526124ed816124b4565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c005f82015250565b5f612528601f8361247c565b9150612533826124f4565b602082019050919050565b5f6020820190508181035f8301526125558161251c565b9050919050565b7f4e6f207374616b657320666f756e6400000000000000000000000000000000005f82015250565b5f612590600f8361247c565b915061259b8261255c565b602082019050919050565b5f6020820190508181035f8301526125bd81612584565b9050919050565b7f5468657265206973206e6f20616d6f756e7420746f20636c61696d00000000005f82015250565b5f6125f8601b8361247c565b9150612603826125c4565b602082019050919050565b5f6020820190508181035f830152612625816125ec565b9050919050565b5f60408201905061263f5f8301856120c5565b61264c6020830184611f6e565b9392505050565b5f8151905061266181612340565b92915050565b5f6020828403121561267c5761267b611f96565b5b5f61268984828501612653565b91505092915050565b7f5374616b696e6720416d6f756e742063616e6e6f74206265207a65726f0000005f82015250565b5f6126c6601d8361247c565b91506126d182612692565b602082019050919050565b5f6020820190508181035f8301526126f3816126ba565b9050919050565b5f8151905061270881611f9a565b92915050565b5f6020828403121561272357612722611f96565b5b5f612730848285016126fa565b91505092915050565b7f42616c616e6365206973206e6f7420656e6f75676800000000000000000000005f82015250565b5f61276d60158361247c565b915061277882612739565b602082019050919050565b5f6020820190508181035f83015261279a81612761565b9050919050565b7f5374616b696e6720697320756e617661696c61626c65000000000000000000005f82015250565b5f6127d560168361247c565b91506127e0826127a1565b602082019050919050565b5f6020820190508181035f830152612802816127c9565b9050919050565b7f5374616b696e6720696e207468697320706f6f6c20697320636f6e636c7564655f8201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b5f61286360218361247c565b915061286e82612809565b604082019050919050565b5f6020820190508181035f83015261289081612857565b9050919050565b5f6060820190506128aa5f8301866120c5565b6128b760208301856120c5565b6128c46040830184611f6e565b949350505050565b5f6128d682611f65565b91506128e183611f65565b92508282019050808211156128f9576128f86123d5565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f576974686472617720416d6f756e74206973206e6f7420656e6f7567680000005f82015250565b5f612960601d8361247c565b915061296b8261292c565b602082019050919050565b5f6020820190508181035f83015261298d81612954565b9050919050565b5f61299e82611f65565b91505f82036129b0576129af6123d5565b5b600182039050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f612a1560268361247c565b9150612a20826129bb565b604082019050919050565b5f6020820190508181035f830152612a4281612a09565b9050919050565b5f612a5382611f65565b9150612a5e83611f65565b9250828202612a6c81611f65565b91508282048414831517612a8357612a826123d5565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612ac182611f65565b9150612acc83611f65565b925082612adc57612adb612a8a565b5b82820490509291505056fea26469706673582212200e68a4abf0790ec593bd96e4f9c1b5bdd81d25aefdf02ff1f3b4d67b38efac2864736f6c63430008140033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000c73abe8d7a0da644743fe2ad24f4e16bb7ed43f8
-----Decoded View---------------
Arg [0] : _stakingToken (address): 0xc73abe8d7A0dA644743FE2aD24F4e16bB7Ed43f8
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000c73abe8d7a0da644743fe2ad24f4e16bb7ed43f8
Deployed Bytecode Sourcemap
29799:8647:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29913:38;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29958:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32538:633;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37888:210;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36126:1037;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27539:103;;;:::i;:::-;;29106:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30405:1590;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37171:324;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32003:525;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;26888:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37673:207;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33181:2937;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37503:162;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28943:63;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;29140:37;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;38106:189;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29014:83;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38303:138;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27797:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29913:38;;;;:::o;29958:28::-;;;;:::o;32538:633::-;32626:7;32646:15;32664:1;32646:19;;32676:17;32696:5;:17;32702:10;32696:17;;;;;;;;;;;32676:37;;32739:9;32734:403;32758:6;:18;32765:10;32758:18;;;;;;;;;;;:27;32777:7;32758:27;;;;;;;;;;;;;;;:34;;;;32754:1;:38;32734:403;;;32814:24;32841:6;:18;32848:10;32841:18;;;;;;;;;;;:27;32860:7;32841:27;;;;;;;;;;;;;;;32869:1;32841:30;;;;;;;;:::i;:::-;;;;;;;;;;;;32814:57;;32896:229;32926:184;33106:3;32926:153;33070:4;:8;;;32926:117;33030:12;;32926:77;32986:8;:16;;;32968:15;:34;;;;:::i;:::-;32926:8;:15;;;:41;;:77;;;;:::i;:::-;:103;;:117;;;;:::i;:::-;:143;;:153;;;;:::i;:::-;:179;;:184;;;;:::i;:::-;32896:7;:11;;:229;;;;:::i;:::-;32886:239;;32799:338;32794:3;;;;;:::i;:::-;;;;32734:403;;;;33156:7;33149:14;;;;32538:633;;;;:::o;37888:210::-;27119:12;:10;:12::i;:::-;27108:23;;:7;:5;:7::i;:::-;:23;;;27100:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38010:20:::1;;37996:10;:34;;37988:43;;;::::0;::::1;;38080:10;38042:5;:17;38048:10;38042:17;;;;;;;;;;;:35;;:48;;;;37888:210:::0;;:::o;36126:1037::-;24049:1;24647:7;;:19;24639:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;24049:1;24780:7;:18;;;;36213:15:::1;36243:17:::0;36263:5:::1;:17;36269:10;36263:17;;;;;;;;;;;36243:37;;36341:1;36301:6;:18;36308:10;36301:18;;;;;;;;;;;:30;36320:10;36301:30;;;;;;;;;;;;;;;:37;;;;:41;36293:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;36380:9;36375:658;36399:6;:18;36406:10;36399:18;;;;;;;;;;;:30;36418:10;36399:30;;;;;;;;;;;;;;;:37;;;;36395:1;:41;36375:658;;;36458:24;36485:6;:18;36492:10;36485:18;;;;;;;;;;;:30;36504:10;36485:30;;;;;;;;;;;;;;;36516:1;36485:33;;;;;;;;:::i;:::-;;;;;;;;;;;;36458:60;;36557:251;36587:206;36789:3;36587:175;36749:12;;36587:135;36705:8;:16;;;36687:15;:34;;;;:::i;:::-;36587:73;36651:4;:8;;;36587;:37;;;:63;;:73;;;;:::i;:::-;:99;;:135;;;;:::i;:::-;:161;;:175;;;;:::i;:::-;:201;;:206;;;;:::i;:::-;36557:7;:11;;:251;;;;:::i;:::-;36547:261;;36879:65;36936:7;36879:28;:40;36908:10;36879:40;;;;;;;;;;;:52;36920:10;36879:52;;;;;;;;;;;;;;;;:56;;:65;;;;:::i;:::-;36824:28;:40;36853:10;36824:40;;;;;;;;;;;:52;36865:10;36824:52;;;;;;;;;;;;;;;:120;;;;36992:15;36973:8;:16;;:34;;;;36443:590;36438:3;;;;;:::i;:::-;;;;36375:658;;;;37061:1;37051:7;:11;37043:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;37112:12;;;;;;;;;;;37105:29;;;37135:10;37147:7;37105:50;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;36196:967;;24005:1:::0;24959:7;:22;;;;36126:1037;:::o;27539:103::-;27119:12;:10;:12::i;:::-;27108:23;;:7;:5;:7::i;:::-;:23;;;27100:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27604:30:::1;27631:1;27604:18;:30::i;:::-;27539:103::o:0;29106:27::-;;;;;;;;;;;;;:::o;30405:1590::-;24049:1;24647:7;;:19;24639:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;24049:1;24780:7;:18;;;;30515:1:::1;30505:7;:11;30497:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;30629:7;30590:12;;;;;;;;;;;30583:30;;;30614:10;30583:42;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:53;;30561:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;30717:9;;30704:10;:22;30696:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;30774:17;30794:5;:17;30800:10;30794:17;;;;;;;;;;;30774:37;;30831:4;:13;;;;;;;;;;;;30830:14;30822:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;30895:21;30926:12;;;;;;;;;;;30919:30;;;30958:4;30919:45;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30895:69;;30982:12;;;;;;;;;;;30975:33;;;31009:10;31029:4;31036:7;30975:69;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31055:20;31085:12;;;;;;;;;;;31078:30;;;31117:4;31078:45;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31055:68;;31134:14;31166:13;31151:12;:28;;;;:::i;:::-;31134:45;;31200:23;31226:43;31264:4;31226:33;31237:4;:21;;;31226:6;:10;;:33;;;;:::i;:::-;:37;;:43;;;;:::i;:::-;31200:69;;31301:1;31283:15;:19;31280:111;;;31326:12;;;;;;;;;;;31319:29;;;31349:12;;;;;;;;;;;31363:15;31319:60;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31280:111;31411:19;31433:6;:18;31440:10;31433:18;;;;;;;;;;;:30;31452:10;31433:30;;;;;;;;;;;;;;;:37;;;;31411:59;;31509:1;31494:11;:16:::0;31491:69:::1;;31547:1;31527:4;:16;;;:21;;;;;;;:::i;:::-;;;;;;;;31491:69;31572:6;:18;31579:10;31572:18;;;;;;;;;;;:30;31591:10;31572:30;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;;;;::::0;;31630:24:::1;31657:6;:18;31664:10;31657:18;;;;;;;;;;;:30;31676:10;31657:30;;;;;;;;;;;;;;;31688:11;31657:43;;;;;;;;:::i;:::-;;;;;;;;;;;;31630:70;;31729:27;31740:15;31729:6;:10;;:27;;;;:::i;:::-;31711:8;:15;;:45;;;;31786:15;31767:8;:16;;:34;;;;31852:4;:18;;;31834:15;:36;;;;:::i;:::-;31812:8;:19;;:58;;;;31912:75;31949:27;31960:15;31949:6;:10;;:27;;;;:::i;:::-;31912:4;:18;;;:22;;:75;;;;:::i;:::-;31891:4;:18;;:96;;;;30486:1509;;;;;;;24005:1:::0;24959:7;:22;;;;30405:1590;;:::o;37171:324::-;37243:13;37269:25;37308:9;;37297:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37269:49;;37334:9;37329:130;37353:9;;37349:1;:13;37329:130;;;37431:1;37401:6;:9;37408:1;37401:9;;;;;;;;;;;:19;37411:8;37401:19;;;;;;;;;;;;;;;:26;;;;:31;:46;;37443:4;37401:46;;;37435:5;37401:46;37384:11;37396:1;37384:14;;;;;;;;:::i;:::-;;;;;;;:63;;;;;;;;;;;37364:3;;;;;:::i;:::-;;;;37329:130;;;;37476:11;37469:18;;;37171:324;;;:::o;32003:525::-;32097:7;32106;32126:21;32162:20;32202:9;32197:277;32221:6;:18;32228:10;32221:18;;;;;;;;;;;:27;32240:7;32221:27;;;;;;;;;;;;;;;:34;;;;32217:1;:38;32197:277;;;32277:24;32304:6;:18;32311:10;32304:18;;;;;;;;;;;:27;32323:7;32304:27;;;;;;;;;;;;;;;32332:1;32304:30;;;;;;;;:::i;:::-;;;;;;;;;;;;32277:57;;32365:34;32383:8;:15;;;32365:13;:17;;:34;;;;:::i;:::-;32349:50;;32429:33;32446:8;:15;;;32429:12;:16;;:33;;;;:::i;:::-;32414:48;;32262:212;32257:3;;;;;:::i;:::-;;;;32197:277;;;;32492:13;32507:12;32484:36;;;;;;32003:525;;;;;:::o;26888:87::-;26934:7;26961:6;;;;;;;;;;;26954:13;;26888:87;:::o;37673:207::-;27119:12;:10;:12::i;:::-;27108:23;;:7;:5;:7::i;:::-;:23;;;27100:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37794:19:::1;;37780:10;:33;;37772:42;;;::::0;::::1;;37862:10;37825:5;:17;37831:10;37825:17;;;;;;;;;;;:34;;:47;;;;37673:207:::0;;:::o;33181:2937::-;24049:1;24647:7;;:19;24639:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;24049:1;24780:7;:18;;;;33275:21:::1;33307:20:::0;33338:17:::1;33358:5;:17;33364:10;33358:17;;;;;;;;;;;33338:37;;33420:78;33452:10;33477;33420:17;:78::i;:::-;33388:110;;;;;;;;33547:7;33531:12;:23;;33509:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;33622:23;33648:58;33701:4;33648:48;33660:5;:17;33666:10;33660:17;;;;;;;;;;;:35;;;33648:7;:11;;:48;;;;:::i;:::-;:52;;:58;;;;:::i;:::-;33622:84;;33717:15;33745;33735:7;:25;;;;:::i;:::-;33717:43;;33771:14;33788:7;33771:24;;33806:15;33836:16:::0;33872:9:::1;33884:6;:18;33891:10;33884:18;;;;;;;;;;;:30;33903:10;33884:30;;;;;;;;;;;;;;;:37;;;;33872:49;;33867:1761;33927:1;33923;:5;33867:1761;;;33950:24;33977:6;:18;33984:10;33977:18;;;;;;;;;;;:30;33996:10;33977:30;;;;;;;;;;;;;;;34010:1;34008;:3;;;;:::i;:::-;33977:35;;;;;;;;:::i;:::-;;;;;;;;;;;;33950:62;;34055:8;:15;;;34045:6;:25;34041:1527;;34132:8;:19;;;34113:15;:38;34109:595;;34186:277;34224:216;34436:3;34224:177;34392:4;:8;;;34224:133;34344:12;;34224:85;34292:8;:16;;;34274:15;:34;;;;:::i;:::-;34224:8;:15;;;:49;;:85;;;;:::i;:::-;:119;;:133;;;;:::i;:::-;:167;;:177;;;;:::i;:::-;:211;;:216;;;;:::i;:::-;34186:7;:11;;:277;;;;:::i;:::-;34176:287;;34109:595;;;34523:161;34562:99;34657:3;34562:64;34608:4;:17;;;34562:8;:15;;;:45;;:64;;;;:::i;:::-;:94;;:99;;;;:::i;:::-;34523:8;:12;;:161;;;;:::i;:::-;34512:172;;34109:595;34733:27;34744:8;:15;;;34733:6;:10;;:27;;;;:::i;:::-;34724:36;;34797:1;34779:8;:15;;:19;;;;34041:1527;;;34880:8;:19;;;34861:15;:38;34857:577;;34934:268;34972:207;35175:3;34972:168;35131:4;:8;;;34972:124;35083:12;;34972:76;35031:8;:16;;;35013:15;:34;;;;:::i;:::-;34972:6;:40;;:76;;;;:::i;:::-;:110;;:124;;;;:::i;:::-;:158;;:168;;;;:::i;:::-;:202;;:207;;;;:::i;:::-;34934:7;:11;;:268;;;;:::i;:::-;34924:278;;34857:577;;;35262:152;35301:90;35387:3;35301:55;35338:4;:17;;;35301:6;:36;;:55;;;;:::i;:::-;:85;;:90;;;;:::i;:::-;35262:8;:12;;:152;;;;:::i;:::-;35251:163;;34857:577;35472:27;35492:6;35472:8;:15;;;:19;;:27;;;;:::i;:::-;35454:8;:15;;:45;;;;35527:1;35518:10;;35547:5;;;34041:1527;35601:15;35582:8;:16;;:34;;;;33935:1693;33930:3;;;;;:::i;:::-;;;;33867:1761;;;;35661:1;35643:15;:19;35640:111;;;35686:12;;;;;;;;;;;35679:29;;;35709:12;;;;;;;;;;;35723:15;35679:60;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35640:111;35784:1;35774:7;:11;35771:249;;;35809:12;;;;;;;;;;;35802:29;;;35832:10;35865:7;35854:8;35844:7;:18;;;;:::i;:::-;:28;;;;:::i;:::-;35802:71;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35943:65;36000:7;35943:28;:40;35972:10;35943:40;;;;;;;;;;;:52;35984:10;35943:52;;;;;;;;;;;;;;;;:56;;:65;;;;:::i;:::-;35888:28;:40;35917:10;35888:40;;;;;;;;;;;:52;35929:10;35888:52;;;;;;;;;;;;;;;:120;;;;35771:249;36066:44;36102:7;36066:5;:17;36072:10;36066:17;;;;;;;;;;;:31;;;:35;;:44;;;;:::i;:::-;36032:5;:17;36038:10;36032:17;;;;;;;;;;;:31;;:78;;;;33264:2854;;;;;;;;24005:1:::0;24959:7;:22;;;;33181:2937;;:::o;37503:162::-;27119:12;:10;:12::i;:::-;27108:23;;:7;:5;:7::i;:::-;:23;;;27100:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37607:6:::1;;37595:8;:18;;37587:27;;;::::0;::::1;;37649:8;37625:5;:17;37631:10;37625:17;;;;;;;;;;;:21;;:32;;;;37503:162:::0;;:::o;28943:63::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;29140:37::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;38106:189::-;27119:12;:10;:12::i;:::-;27108:23;;:7;:5;:7::i;:::-;:23;;;27100:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38219:15:::1;;38207:8;:27;;38199:36;;;::::0;::::1;;38279:8;38246:5;:17;38252:10;38246:17;;;;;;;;;;;:30;;:41;;;;38106:189:::0;;:::o;29014:83::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;38303:138::-;27119:12;:10;:12::i;:::-;27108:23;;:7;:5;:7::i;:::-;:23;;;27100:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38424:9:::1;38395:5;:17;38401:10;38395:17;;;;;;;;;;;:26;;;:38;;;;;;;;;;;;;;;;;;38303:138:::0;;:::o;27797:201::-;27119:12;:10;:12::i;:::-;27108:23;;:7;:5;:7::i;:::-;:23;;;27100:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27906:1:::1;27886:22;;:8;:22;;::::0;27878:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;27962:28;27981:8;27962:18;:28::i;:::-;27797:201:::0;:::o;3580:98::-;3638:7;3669:1;3665;:5;;;;:::i;:::-;3658:12;;3580:98;;;;:::o;3979:::-;4037:7;4068:1;4064;:5;;;;:::i;:::-;4057:12;;3979:98;;;;:::o;2842:::-;2900:7;2931:1;2927;:5;;;;:::i;:::-;2920:12;;2842:98;;;;:::o;25644:::-;25697:7;25724:10;25717:17;;25644:98;:::o;28158:191::-;28232:16;28251:6;;;;;;;;;;;28232:25;;28277:8;28268:6;;:17;;;;;;;;;;;;;;;;;;28332:8;28301:40;;28322:8;28301:40;;;;;;;;;;;;28221:128;28158:191;:::o;3223:98::-;3281:7;3312:1;3308;:5;;;;:::i;:::-;3301:12;;3223:98;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;523:117::-;632:1;629;622:12;769:122;842:24;860:5;842:24;:::i;:::-;835:5;832:35;822:63;;881:1;878;871:12;822:63;769:122;:::o;897:139::-;943:5;981:6;968:20;959:29;;997:33;1024:5;997:33;:::i;:::-;897:139;;;;:::o;1042:126::-;1079:7;1119:42;1112:5;1108:54;1097:65;;1042:126;;;:::o;1174:96::-;1211:7;1240:24;1258:5;1240:24;:::i;:::-;1229:35;;1174:96;;;:::o;1276:122::-;1349:24;1367:5;1349:24;:::i;:::-;1342:5;1339:35;1329:63;;1388:1;1385;1378:12;1329:63;1276:122;:::o;1404:139::-;1450:5;1488:6;1475:20;1466:29;;1504:33;1531:5;1504:33;:::i;:::-;1404:139;;;;:::o;1549:474::-;1617:6;1625;1674:2;1662:9;1653:7;1649:23;1645:32;1642:119;;;1680:79;;:::i;:::-;1642:119;1800:1;1825:53;1870:7;1861:6;1850:9;1846:22;1825:53;:::i;:::-;1815:63;;1771:117;1927:2;1953:53;1998:7;1989:6;1978:9;1974:22;1953:53;:::i;:::-;1943:63;;1898:118;1549:474;;;;;:::o;2029:::-;2097:6;2105;2154:2;2142:9;2133:7;2129:23;2125:32;2122:119;;;2160:79;;:::i;:::-;2122:119;2280:1;2305:53;2350:7;2341:6;2330:9;2326:22;2305:53;:::i;:::-;2295:63;;2251:117;2407:2;2433:53;2478:7;2469:6;2458:9;2454:22;2433:53;:::i;:::-;2423:63;;2378:118;2029:474;;;;;:::o;2509:329::-;2568:6;2617:2;2605:9;2596:7;2592:23;2588:32;2585:119;;;2623:79;;:::i;:::-;2585:119;2743:1;2768:53;2813:7;2804:6;2793:9;2789:22;2768:53;:::i;:::-;2758:63;;2714:117;2509:329;;;;:::o;2844:118::-;2931:24;2949:5;2931:24;:::i;:::-;2926:3;2919:37;2844:118;;:::o;2968:222::-;3061:4;3099:2;3088:9;3084:18;3076:26;;3112:71;3180:1;3169:9;3165:17;3156:6;3112:71;:::i;:::-;2968:222;;;;:::o;3196:329::-;3255:6;3304:2;3292:9;3283:7;3279:23;3275:32;3272:119;;;3310:79;;:::i;:::-;3272:119;3430:1;3455:53;3500:7;3491:6;3480:9;3476:22;3455:53;:::i;:::-;3445:63;;3401:117;3196:329;;;;:::o;3531:111::-;3595:6;3629:5;3623:12;3613:22;;3531:111;;;:::o;3648:181::-;3744:11;3778:6;3773:3;3766:19;3818:4;3813:3;3809:14;3794:29;;3648:181;;;;:::o;3835:129::-;3899:4;3922:3;3914:11;;3952:4;3947:3;3943:14;3935:22;;3835:129;;;:::o;3970:90::-;4004:7;4047:5;4040:13;4033:21;4022:32;;3970:90;;;:::o;4066:99::-;4137:21;4152:5;4137:21;:::i;:::-;4132:3;4125:34;4066:99;;:::o;4171:167::-;4234:10;4255:40;4291:3;4283:6;4255:40;:::i;:::-;4327:4;4322:3;4318:14;4304:28;;4171:167;;;;:::o;4344:110::-;4411:4;4443;4438:3;4434:14;4426:22;;4344:110;;;:::o;4484:708::-;4597:3;4626:51;4671:5;4626:51;:::i;:::-;4693:83;4769:6;4764:3;4693:83;:::i;:::-;4686:90;;4800:53;4847:5;4800:53;:::i;:::-;4876:7;4907:1;4892:275;4917:6;4914:1;4911:13;4892:275;;;4993:6;4987:13;5020:57;5073:3;5058:13;5020:57;:::i;:::-;5013:64;;5100:57;5150:6;5100:57;:::i;:::-;5090:67;;4952:215;4939:1;4936;4932:9;4927:14;;4892:275;;;4896:14;5183:3;5176:10;;4602:590;;;4484:708;;;;:::o;5198:361::-;5335:4;5373:2;5362:9;5358:18;5350:26;;5422:9;5416:4;5412:20;5408:1;5397:9;5393:17;5386:47;5450:102;5547:4;5538:6;5450:102;:::i;:::-;5442:110;;5198:361;;;;:::o;5565:332::-;5686:4;5724:2;5713:9;5709:18;5701:26;;5737:71;5805:1;5794:9;5790:17;5781:6;5737:71;:::i;:::-;5818:72;5886:2;5875:9;5871:18;5862:6;5818:72;:::i;:::-;5565:332;;;;;:::o;5903:619::-;5980:6;5988;5996;6045:2;6033:9;6024:7;6020:23;6016:32;6013:119;;;6051:79;;:::i;:::-;6013:119;6171:1;6196:53;6241:7;6232:6;6221:9;6217:22;6196:53;:::i;:::-;6186:63;;6142:117;6298:2;6324:53;6369:7;6360:6;6349:9;6345:22;6324:53;:::i;:::-;6314:63;;6269:118;6426:2;6452:53;6497:7;6488:6;6477:9;6473:22;6452:53;:::i;:::-;6442:63;;6397:118;5903:619;;;;;:::o;6528:442::-;6677:4;6715:2;6704:9;6700:18;6692:26;;6728:71;6796:1;6785:9;6781:17;6772:6;6728:71;:::i;:::-;6809:72;6877:2;6866:9;6862:18;6853:6;6809:72;:::i;:::-;6891;6959:2;6948:9;6944:18;6935:6;6891:72;:::i;:::-;6528:442;;;;;;:::o;6976:109::-;7057:21;7072:5;7057:21;:::i;:::-;7052:3;7045:34;6976:109;;:::o;7091:1084::-;7396:4;7434:3;7423:9;7419:19;7411:27;;7448:71;7516:1;7505:9;7501:17;7492:6;7448:71;:::i;:::-;7529:72;7597:2;7586:9;7582:18;7573:6;7529:72;:::i;:::-;7611;7679:2;7668:9;7664:18;7655:6;7611:72;:::i;:::-;7693;7761:2;7750:9;7746:18;7737:6;7693:72;:::i;:::-;7775:73;7843:3;7832:9;7828:19;7819:6;7775:73;:::i;:::-;7858;7926:3;7915:9;7911:19;7902:6;7858:73;:::i;:::-;7941;8009:3;7998:9;7994:19;7985:6;7941:73;:::i;:::-;8024:67;8086:3;8075:9;8071:19;8062:6;8024:67;:::i;:::-;8101;8163:3;8152:9;8148:19;8139:6;8101:67;:::i;:::-;7091:1084;;;;;;;;;;;;:::o;8181:116::-;8251:21;8266:5;8251:21;:::i;:::-;8244:5;8241:32;8231:60;;8287:1;8284;8277:12;8231:60;8181:116;:::o;8303:133::-;8346:5;8384:6;8371:20;8362:29;;8400:30;8424:5;8400:30;:::i;:::-;8303:133;;;;:::o;8442:468::-;8507:6;8515;8564:2;8552:9;8543:7;8539:23;8535:32;8532:119;;;8570:79;;:::i;:::-;8532:119;8690:1;8715:53;8760:7;8751:6;8740:9;8736:22;8715:53;:::i;:::-;8705:63;;8661:117;8817:2;8843:50;8885:7;8876:6;8865:9;8861:22;8843:50;:::i;:::-;8833:60;;8788:115;8442:468;;;;;:::o;8916:180::-;8964:77;8961:1;8954:88;9061:4;9058:1;9051:15;9085:4;9082:1;9075:15;9102:180;9150:77;9147:1;9140:88;9247:4;9244:1;9237:15;9271:4;9268:1;9261:15;9288:194;9328:4;9348:20;9366:1;9348:20;:::i;:::-;9343:25;;9382:20;9400:1;9382:20;:::i;:::-;9377:25;;9426:1;9423;9419:9;9411:17;;9450:1;9444:4;9441:11;9438:37;;;9455:18;;:::i;:::-;9438:37;9288:194;;;;:::o;9488:233::-;9527:3;9550:24;9568:5;9550:24;:::i;:::-;9541:33;;9596:66;9589:5;9586:77;9583:103;;9666:18;;:::i;:::-;9583:103;9713:1;9706:5;9702:13;9695:20;;9488:233;;;:::o;9727:169::-;9811:11;9845:6;9840:3;9833:19;9885:4;9880:3;9876:14;9861:29;;9727:169;;;;:::o;9902:182::-;10042:34;10038:1;10030:6;10026:14;10019:58;9902:182;:::o;10090:366::-;10232:3;10253:67;10317:2;10312:3;10253:67;:::i;:::-;10246:74;;10329:93;10418:3;10329:93;:::i;:::-;10447:2;10442:3;10438:12;10431:19;;10090:366;;;:::o;10462:419::-;10628:4;10666:2;10655:9;10651:18;10643:26;;10715:9;10709:4;10705:20;10701:1;10690:9;10686:17;10679:47;10743:131;10869:4;10743:131;:::i;:::-;10735:139;;10462:419;;;:::o;10887:181::-;11027:33;11023:1;11015:6;11011:14;11004:57;10887:181;:::o;11074:366::-;11216:3;11237:67;11301:2;11296:3;11237:67;:::i;:::-;11230:74;;11313:93;11402:3;11313:93;:::i;:::-;11431:2;11426:3;11422:12;11415:19;;11074:366;;;:::o;11446:419::-;11612:4;11650:2;11639:9;11635:18;11627:26;;11699:9;11693:4;11689:20;11685:1;11674:9;11670:17;11663:47;11727:131;11853:4;11727:131;:::i;:::-;11719:139;;11446:419;;;:::o;11871:165::-;12011:17;12007:1;11999:6;11995:14;11988:41;11871:165;:::o;12042:366::-;12184:3;12205:67;12269:2;12264:3;12205:67;:::i;:::-;12198:74;;12281:93;12370:3;12281:93;:::i;:::-;12399:2;12394:3;12390:12;12383:19;;12042:366;;;:::o;12414:419::-;12580:4;12618:2;12607:9;12603:18;12595:26;;12667:9;12661:4;12657:20;12653:1;12642:9;12638:17;12631:47;12695:131;12821:4;12695:131;:::i;:::-;12687:139;;12414:419;;;:::o;12839:177::-;12979:29;12975:1;12967:6;12963:14;12956:53;12839:177;:::o;13022:366::-;13164:3;13185:67;13249:2;13244:3;13185:67;:::i;:::-;13178:74;;13261:93;13350:3;13261:93;:::i;:::-;13379:2;13374:3;13370:12;13363:19;;13022:366;;;:::o;13394:419::-;13560:4;13598:2;13587:9;13583:18;13575:26;;13647:9;13641:4;13637:20;13633:1;13622:9;13618:17;13611:47;13675:131;13801:4;13675:131;:::i;:::-;13667:139;;13394:419;;;:::o;13819:332::-;13940:4;13978:2;13967:9;13963:18;13955:26;;13991:71;14059:1;14048:9;14044:17;14035:6;13991:71;:::i;:::-;14072:72;14140:2;14129:9;14125:18;14116:6;14072:72;:::i;:::-;13819:332;;;;;:::o;14157:137::-;14211:5;14242:6;14236:13;14227:22;;14258:30;14282:5;14258:30;:::i;:::-;14157:137;;;;:::o;14300:345::-;14367:6;14416:2;14404:9;14395:7;14391:23;14387:32;14384:119;;;14422:79;;:::i;:::-;14384:119;14542:1;14567:61;14620:7;14611:6;14600:9;14596:22;14567:61;:::i;:::-;14557:71;;14513:125;14300:345;;;;:::o;14651:179::-;14791:31;14787:1;14779:6;14775:14;14768:55;14651:179;:::o;14836:366::-;14978:3;14999:67;15063:2;15058:3;14999:67;:::i;:::-;14992:74;;15075:93;15164:3;15075:93;:::i;:::-;15193:2;15188:3;15184:12;15177:19;;14836:366;;;:::o;15208:419::-;15374:4;15412:2;15401:9;15397:18;15389:26;;15461:9;15455:4;15451:20;15447:1;15436:9;15432:17;15425:47;15489:131;15615:4;15489:131;:::i;:::-;15481:139;;15208:419;;;:::o;15633:143::-;15690:5;15721:6;15715:13;15706:22;;15737:33;15764:5;15737:33;:::i;:::-;15633:143;;;;:::o;15782:351::-;15852:6;15901:2;15889:9;15880:7;15876:23;15872:32;15869:119;;;15907:79;;:::i;:::-;15869:119;16027:1;16052:64;16108:7;16099:6;16088:9;16084:22;16052:64;:::i;:::-;16042:74;;15998:128;15782:351;;;;:::o;16139:171::-;16279:23;16275:1;16267:6;16263:14;16256:47;16139:171;:::o;16316:366::-;16458:3;16479:67;16543:2;16538:3;16479:67;:::i;:::-;16472:74;;16555:93;16644:3;16555:93;:::i;:::-;16673:2;16668:3;16664:12;16657:19;;16316:366;;;:::o;16688:419::-;16854:4;16892:2;16881:9;16877:18;16869:26;;16941:9;16935:4;16931:20;16927:1;16916:9;16912:17;16905:47;16969:131;17095:4;16969:131;:::i;:::-;16961:139;;16688:419;;;:::o;17113:172::-;17253:24;17249:1;17241:6;17237:14;17230:48;17113:172;:::o;17291:366::-;17433:3;17454:67;17518:2;17513:3;17454:67;:::i;:::-;17447:74;;17530:93;17619:3;17530:93;:::i;:::-;17648:2;17643:3;17639:12;17632:19;;17291:366;;;:::o;17663:419::-;17829:4;17867:2;17856:9;17852:18;17844:26;;17916:9;17910:4;17906:20;17902:1;17891:9;17887:17;17880:47;17944:131;18070:4;17944:131;:::i;:::-;17936:139;;17663:419;;;:::o;18088:220::-;18228:34;18224:1;18216:6;18212:14;18205:58;18297:3;18292:2;18284:6;18280:15;18273:28;18088:220;:::o;18314:366::-;18456:3;18477:67;18541:2;18536:3;18477:67;:::i;:::-;18470:74;;18553:93;18642:3;18553:93;:::i;:::-;18671:2;18666:3;18662:12;18655:19;;18314:366;;;:::o;18686:419::-;18852:4;18890:2;18879:9;18875:18;18867:26;;18939:9;18933:4;18929:20;18925:1;18914:9;18910:17;18903:47;18967:131;19093:4;18967:131;:::i;:::-;18959:139;;18686:419;;;:::o;19111:442::-;19260:4;19298:2;19287:9;19283:18;19275:26;;19311:71;19379:1;19368:9;19364:17;19355:6;19311:71;:::i;:::-;19392:72;19460:2;19449:9;19445:18;19436:6;19392:72;:::i;:::-;19474;19542:2;19531:9;19527:18;19518:6;19474:72;:::i;:::-;19111:442;;;;;;:::o;19559:191::-;19599:3;19618:20;19636:1;19618:20;:::i;:::-;19613:25;;19652:20;19670:1;19652:20;:::i;:::-;19647:25;;19695:1;19692;19688:9;19681:16;;19716:3;19713:1;19710:10;19707:36;;;19723:18;;:::i;:::-;19707:36;19559:191;;;;:::o;19756:180::-;19804:77;19801:1;19794:88;19901:4;19898:1;19891:15;19925:4;19922:1;19915:15;19942:179;20082:31;20078:1;20070:6;20066:14;20059:55;19942:179;:::o;20127:366::-;20269:3;20290:67;20354:2;20349:3;20290:67;:::i;:::-;20283:74;;20366:93;20455:3;20366:93;:::i;:::-;20484:2;20479:3;20475:12;20468:19;;20127:366;;;:::o;20499:419::-;20665:4;20703:2;20692:9;20688:18;20680:26;;20752:9;20746:4;20742:20;20738:1;20727:9;20723:17;20716:47;20780:131;20906:4;20780:131;:::i;:::-;20772:139;;20499:419;;;:::o;20924:171::-;20963:3;20986:24;21004:5;20986:24;:::i;:::-;20977:33;;21032:4;21025:5;21022:15;21019:41;;21040:18;;:::i;:::-;21019:41;21087:1;21080:5;21076:13;21069:20;;20924:171;;;:::o;21101:225::-;21241:34;21237:1;21229:6;21225:14;21218:58;21310:8;21305:2;21297:6;21293:15;21286:33;21101:225;:::o;21332:366::-;21474:3;21495:67;21559:2;21554:3;21495:67;:::i;:::-;21488:74;;21571:93;21660:3;21571:93;:::i;:::-;21689:2;21684:3;21680:12;21673:19;;21332:366;;;:::o;21704:419::-;21870:4;21908:2;21897:9;21893:18;21885:26;;21957:9;21951:4;21947:20;21943:1;21932:9;21928:17;21921:47;21985:131;22111:4;21985:131;:::i;:::-;21977:139;;21704:419;;;:::o;22129:410::-;22169:7;22192:20;22210:1;22192:20;:::i;:::-;22187:25;;22226:20;22244:1;22226:20;:::i;:::-;22221:25;;22281:1;22278;22274:9;22303:30;22321:11;22303:30;:::i;:::-;22292:41;;22482:1;22473:7;22469:15;22466:1;22463:22;22443:1;22436:9;22416:83;22393:139;;22512:18;;:::i;:::-;22393:139;22177:362;22129:410;;;;:::o;22545:180::-;22593:77;22590:1;22583:88;22690:4;22687:1;22680:15;22714:4;22711:1;22704:15;22731:185;22771:1;22788:20;22806:1;22788:20;:::i;:::-;22783:25;;22822:20;22840:1;22822:20;:::i;:::-;22817:25;;22861:1;22851:35;;22866:18;;:::i;:::-;22851:35;22908:1;22905;22901:9;22896:14;;22731:185;;;;:::o
Swarm Source
ipfs://0e68a4abf0790ec593bd96e4f9c1b5bdd81d25aefdf02ff1f3b4d67b38efac28
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $0.069626 | 20,966.5985 | $1,459.82 |
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.