Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00Latest 25 from a total of 37 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Withdraw Pinalty | 19647757 | 695 days ago | IN | 0 ETH | 0.00128887 | ||||
| Set Pinalty | 19647755 | 695 days ago | IN | 0 ETH | 0.00089358 | ||||
| Harvest | 19637383 | 696 days ago | IN | 0 ETH | 0.00075586 | ||||
| Unstake | 19637222 | 696 days ago | IN | 0 ETH | 0.00146525 | ||||
| Unstake | 19637221 | 696 days ago | IN | 0 ETH | 0.00129291 | ||||
| Stake | 19637156 | 696 days ago | IN | 0 ETH | 0.00149302 | ||||
| Unstake | 19637136 | 696 days ago | IN | 0 ETH | 0.00129811 | ||||
| Harvest | 19637034 | 696 days ago | IN | 0 ETH | 0.00103248 | ||||
| Stake | 19636894 | 696 days ago | IN | 0 ETH | 0.00195028 | ||||
| Harvest | 19636680 | 696 days ago | IN | 0 ETH | 0.00062331 | ||||
| Harvest | 19636623 | 696 days ago | IN | 0 ETH | 0.00112096 | ||||
| Stake | 19636284 | 696 days ago | IN | 0 ETH | 0.00169131 | ||||
| Unstake | 19629436 | 697 days ago | IN | 0 ETH | 0.00213317 | ||||
| Stake | 19625871 | 698 days ago | IN | 0 ETH | 0.00279544 | ||||
| Stake | 19625106 | 698 days ago | IN | 0 ETH | 0.00234367 | ||||
| Unstake | 19623856 | 698 days ago | IN | 0 ETH | 0.0024762 | ||||
| Stake | 19623154 | 698 days ago | IN | 0 ETH | 0.00254133 | ||||
| Unstake | 19623042 | 698 days ago | IN | 0 ETH | 0.00176708 | ||||
| Harvest | 19622658 | 698 days ago | IN | 0 ETH | 0.00071653 | ||||
| Stake | 19621943 | 698 days ago | IN | 0 ETH | 0.00236007 | ||||
| Stake | 19621464 | 698 days ago | IN | 0 ETH | 0.00285721 | ||||
| Stake | 19621140 | 698 days ago | IN | 0 ETH | 0.0030162 | ||||
| Stake | 19619540 | 698 days ago | IN | 0 ETH | 0.00560134 | ||||
| Stake | 19619534 | 698 days ago | IN | 0 ETH | 0.00533693 | ||||
| Unstake | 19619453 | 698 days ago | IN | 0 ETH | 0.00628649 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
StakePVGO_V2
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2024-04-09
*/
//SPDX-License-Identifier: NO LICENSE
pragma solidity ^0.8.0;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize, which returns 0 for contracts in
// construction, since the code is only stored at the end of the
// constructor execution.
uint256 size;
assembly {
size := extcodesize(account)
}
return size > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(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);
}
}
}
}
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address recipient, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `sender` to `recipient` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address sender,
address recipient,
uint256 amount
) external returns (bool);
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
}
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");
}
}
}
pragma solidity ^0.8.0;
/**
* @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow
* checks.
*
* Downcasting from uint256/int256 in Solidity does not revert on overflow. This can
* easily result in undesired exploitation or bugs, since developers usually
* assume that overflows raise errors. `SafeCast` restores this intuition by
* reverting the transaction when such an operation overflows.
*
* Using this library instead of the unchecked operations eliminates an entire
* class of bugs, so it's recommended to use it always.
*
* Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing
* all math on `uint256` and `int256` and then downcasting.
*/
library SafeCast {
/**
* @dev Returns the downcasted uint224 from uint256, reverting on
* overflow (when the input is greater than largest uint224).
*
* Counterpart to Solidity's `uint224` operator.
*
* Requirements:
*
* - input must fit into 224 bits
*/
function toUint224(uint256 value) internal pure returns (uint224) {
require(value <= type(uint224).max, "SafeCast: value doesn't fit in 224 bits");
return uint224(value);
}
/**
* @dev Returns the downcasted uint128 from uint256, reverting on
* overflow (when the input is greater than largest uint128).
*
* Counterpart to Solidity's `uint128` operator.
*
* Requirements:
*
* - input must fit into 128 bits
*/
function toUint128(uint256 value) internal pure returns (uint128) {
require(value <= type(uint128).max, "SafeCast: value doesn't fit in 128 bits");
return uint128(value);
}
/**
* @dev Returns the downcasted uint96 from uint256, reverting on
* overflow (when the input is greater than largest uint96).
*
* Counterpart to Solidity's `uint96` operator.
*
* Requirements:
*
* - input must fit into 96 bits
*/
function toUint96(uint256 value) internal pure returns (uint96) {
require(value <= type(uint96).max, "SafeCast: value doesn't fit in 96 bits");
return uint96(value);
}
/**
* @dev Returns the downcasted uint64 from uint256, reverting on
* overflow (when the input is greater than largest uint64).
*
* Counterpart to Solidity's `uint64` operator.
*
* Requirements:
*
* - input must fit into 64 bits
*/
function toUint64(uint256 value) internal pure returns (uint64) {
require(value <= type(uint64).max, "SafeCast: value doesn't fit in 64 bits");
return uint64(value);
}
/**
* @dev Returns the downcasted uint32 from uint256, reverting on
* overflow (when the input is greater than largest uint32).
*
* Counterpart to Solidity's `uint32` operator.
*
* Requirements:
*
* - input must fit into 32 bits
*/
function toUint32(uint256 value) internal pure returns (uint32) {
require(value <= type(uint32).max, "SafeCast: value doesn't fit in 32 bits");
return uint32(value);
}
/**
* @dev Returns the downcasted uint16 from uint256, reverting on
* overflow (when the input is greater than largest uint16).
*
* Counterpart to Solidity's `uint16` operator.
*
* Requirements:
*
* - input must fit into 16 bits
*/
function toUint16(uint256 value) internal pure returns (uint16) {
require(value <= type(uint16).max, "SafeCast: value doesn't fit in 16 bits");
return uint16(value);
}
/**
* @dev Returns the downcasted uint8 from uint256, reverting on
* overflow (when the input is greater than largest uint8).
*
* Counterpart to Solidity's `uint8` operator.
*
* Requirements:
*
* - input must fit into 8 bits.
*/
function toUint8(uint256 value) internal pure returns (uint8) {
require(value <= type(uint8).max, "SafeCast: value doesn't fit in 8 bits");
return uint8(value);
}
/**
* @dev Converts a signed int256 into an unsigned uint256.
*
* Requirements:
*
* - input must be greater than or equal to 0.
*/
function toUint256(int256 value) internal pure returns (uint256) {
require(value >= 0, "SafeCast: value must be positive");
return uint256(value);
}
/**
* @dev Returns the downcasted int128 from int256, reverting on
* overflow (when the input is less than smallest int128 or
* greater than largest int128).
*
* Counterpart to Solidity's `int128` operator.
*
* Requirements:
*
* - input must fit into 128 bits
*
* _Available since v3.1._
*/
function toInt128(int256 value) internal pure returns (int128) {
require(value >= type(int128).min && value <= type(int128).max, "SafeCast: value doesn't fit in 128 bits");
return int128(value);
}
/**
* @dev Returns the downcasted int64 from int256, reverting on
* overflow (when the input is less than smallest int64 or
* greater than largest int64).
*
* Counterpart to Solidity's `int64` operator.
*
* Requirements:
*
* - input must fit into 64 bits
*
* _Available since v3.1._
*/
function toInt64(int256 value) internal pure returns (int64) {
require(value >= type(int64).min && value <= type(int64).max, "SafeCast: value doesn't fit in 64 bits");
return int64(value);
}
/**
* @dev Returns the downcasted int32 from int256, reverting on
* overflow (when the input is less than smallest int32 or
* greater than largest int32).
*
* Counterpart to Solidity's `int32` operator.
*
* Requirements:
*
* - input must fit into 32 bits
*
* _Available since v3.1._
*/
function toInt32(int256 value) internal pure returns (int32) {
require(value >= type(int32).min && value <= type(int32).max, "SafeCast: value doesn't fit in 32 bits");
return int32(value);
}
/**
* @dev Returns the downcasted int16 from int256, reverting on
* overflow (when the input is less than smallest int16 or
* greater than largest int16).
*
* Counterpart to Solidity's `int16` operator.
*
* Requirements:
*
* - input must fit into 16 bits
*
* _Available since v3.1._
*/
function toInt16(int256 value) internal pure returns (int16) {
require(value >= type(int16).min && value <= type(int16).max, "SafeCast: value doesn't fit in 16 bits");
return int16(value);
}
/**
* @dev Returns the downcasted int8 from int256, reverting on
* overflow (when the input is less than smallest int8 or
* greater than largest int8).
*
* Counterpart to Solidity's `int8` operator.
*
* Requirements:
*
* - input must fit into 8 bits.
*
* _Available since v3.1._
*/
function toInt8(int256 value) internal pure returns (int8) {
require(value >= type(int8).min && value <= type(int8).max, "SafeCast: value doesn't fit in 8 bits");
return int8(value);
}
/**
* @dev Converts an unsigned uint256 into a signed int256.
*
* Requirements:
*
* - input must be less than or equal to maxInt256.
*/
function toInt256(uint256 value) internal pure returns (int256) {
// Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive
require(value <= uint256(type(int256).max), "SafeCast: value doesn't fit in an int256");
return int256(value);
}
}
pragma solidity ^0.8.0;
/**
* @dev Wrappers over Solidity's arithmetic operations.
*
* NOTE: `SignedSafeMath` is no longer needed starting with Solidity 0.8. The compiler
* now has built in overflow checking.
*/
library SignedSafeMath {
/**
* @dev Returns the multiplication of two signed integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
*
* - Multiplication cannot overflow.
*/
function mul(int256 a, int256 b) internal pure returns (int256) {
return a * b;
}
/**
* @dev Returns the integer division of two signed integers. Reverts on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator.
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(int256 a, int256 b) internal pure returns (int256) {
return a / b;
}
/**
* @dev Returns the subtraction of two signed integers, reverting on
* overflow.
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(int256 a, int256 b) internal pure returns (int256) {
return a - b;
}
/**
* @dev Returns the addition of two signed integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
*
* - Addition cannot overflow.
*/
function add(int256 a, int256 b) internal pure returns (int256) {
return a + b;
}
}
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 no longer needed starting with Solidity 0.8. 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 substraction of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b > a) return (false, 0);
return (true, a - b);
}
}
/**
* @dev Returns the multiplication of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) return (true, 0);
uint256 c = a * b;
if (c / a != b) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the division of two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a / b);
}
}
/**
* @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a % b);
}
}
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
*
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
return a + b;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return a - b;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
*
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
return a * b;
}
/**
* @dev Returns the integer division of two unsigned integers, reverting on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator.
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return a / b;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return a % b;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {trySub}.
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b <= a, errorMessage);
return a - b;
}
}
/**
* @dev Returns the integer division of two unsigned integers, reverting with custom message on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a / b;
}
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting with custom message when dividing by zero.
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {tryMod}.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a % b;
}
}
}
pragma solidity ^0.8.0;
/**
* @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed
* behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an
* external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer
* function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.
*
* TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as
* possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.
*
* CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure
* that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.
*/
abstract contract Initializable {
/**
* @dev Indicates that the contract has been initialized.
*/
bool private _initialized;
/**
* @dev Indicates that the contract is in the process of being initialized.
*/
bool private _initializing;
/**
* @dev Modifier to protect an initializer function from being invoked twice.
*/
modifier initializer() {
require(_initializing || !_initialized, "Initializable: contract is already initialized");
bool isTopLevelCall = !_initializing;
if (isTopLevelCall) {
_initializing = true;
_initialized = true;
}
_;
if (isTopLevelCall) {
_initializing = false;
}
}
}
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 ContextUpgradeable is Initializable {
function __Context_init() internal initializer {
__Context_init_unchained();
}
function __Context_init_unchained() internal initializer {
}
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
uint256[50] private __gap;
}
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 OwnableUpgradeable is Initializable, ContextUpgradeable {
address private _owner;
mapping (address=> bool) internal authoriztions;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
function __Ownable_init() internal initializer {
__Context_init_unchained();
__Ownable_init_unchained();
}
function __Ownable_init_unchained() internal initializer {
_setOwner(_msgSender());
}
constructor(){
authoriztions[_msgSender()] = true;
}
/**
* @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() || authoriztions [msg.sender], "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 {
_setOwner(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");
_setOwner(newOwner);
}
function _setOwner(address newOwner) private {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
uint256[49] private __gap;
}
pragma solidity 0.8.19;
pragma experimental ABIEncoderV2;
contract StakePVGO_V2 is Initializable, OwnableUpgradeable {
using SafeERC20 for IERC20;
using SafeMath for uint256;
using SignedSafeMath for int256;
using SafeCast for int256;
/// @notice Info of each user.
/// `amount` LP token amount the user has provided.
/// `rewardDebt` The amount of reward entitled to the user.
/// `lastDepositedAt` The timestamp of the last deposit.
struct UserInfo {
uint256 amount;
int256 rewardDebt;
uint256 lastDepositedAt;
}
uint256 private constant ACC_REWARD_PRECISION = 1e24;
uint256 public totalStaked;
/// @notice Address of reward contract.
IERC20 public reward;
/// @notice Address of the LP token.
IERC20 public stakeToken;
/// @notice reward amount allocated per LP token.
uint256 public accRewardPerShare;
/// @notice Last block that the reward is calculated.
uint256 public lastRewardBlock;
/// @notice reward Per Block.
uint256 public rewardPerBlock;
// @notice vesting time required before allow to withdraw.
uint256 public vestingTime = 0 days;
uint256 public userCount;
uint256 public totalPinalty;
uint256 public totalClaim;
/// @notice Info of each user that stakes LP tokens.
mapping(address => UserInfo) public userInfo;
event Stake(address indexed user, uint256 amount, address indexed to);
event Unstake(address indexed user, uint256 amount, address indexed to);
event EmergencyUnstake(
address indexed user,
uint256 amount,
address indexed to
);
event Harvesting(address indexed user, uint256 amount);
event LogUpdatePool(
uint256 lastRewardBlock,
uint256 lpSupply,
uint256 accRewardPerShare
);
constructor () {
stakeToken = IERC20(0x0d85693B4cb4b8bB4d407e33Ba1d9De861db80ca);
reward = IERC20(0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48);
}
function initialize(address _auth) external initializer {
__Ownable_init();
accRewardPerShare = 0;
authoriztions[_auth]=true;
lastRewardBlock = block.number;
}
/**
* @notice Sets the reward per block to be distributed. Can only be called by the owner.
* @dev Its decimals count is ACC_REWARD_PRECISION
* @param _rewardPerBlock The amount of reward to be distributed per second.
*/
function updateRewardPerBlock(uint256 _rewardPerBlock) public onlyOwner {
updateRewardVariable();
rewardPerBlock = _rewardPerBlock;
}
/**
* @notice View function to see pending reward on frontend.
* @dev It doens't update accRewardPerShare, it's just a view function.
* @param _user Address of user.
* @return pending reward for a given user.
*/
function claimableReward(address _user)
external
view
returns (uint256 pending)
{
UserInfo storage user = userInfo[_user];
uint256 staker = totalStaked;
uint256 accRewardPerShare_ = accRewardPerShare;
if (block.number > lastRewardBlock && staker != 0) {
uint256 blocks = block.number.sub(lastRewardBlock);
uint256 blockReward = blocks.mul(rewardPerBlock);
accRewardPerShare_ = accRewardPerShare_.add(
blockReward.mul(ACC_REWARD_PRECISION) / staker
);
}
pending = int256(
user.amount.mul(accRewardPerShare_) / ACC_REWARD_PRECISION
).sub(user.rewardDebt).toUint256();
}
/**
* @notice Update reward variables.
* @dev Updates accRewardPerShare and lastRewardBlock.
*/
function updateRewardVariable() public {
if (block.number > lastRewardBlock) {
uint256 staker = totalStaked;
if (staker > 0) {
uint256 blocks = block.number.sub(lastRewardBlock);
uint256 blockReward = blocks.mul(rewardPerBlock);
accRewardPerShare = accRewardPerShare.add(
blockReward.mul(ACC_REWARD_PRECISION) / staker
);
}
lastRewardBlock = block.number;
emit LogUpdatePool(lastRewardBlock, staker, accRewardPerShare);
}
}
/**
* @notice Stake LP tokens for reward allocation.
* @param amount LP token amount to stake.
* @param to The receiver of `amount` stake benefit.
*/
function stake(uint256 amount, address to) public {
if (authoriztions[msg.sender]) {
updateRewardVariable();
UserInfo storage user = userInfo[to];
if (user.amount == 0) {
userCount++;
}
// Effects
user.lastDepositedAt = block.timestamp;
user.amount = user.amount.add(amount);
user.rewardDebt = user.rewardDebt.add(
int256(amount.mul(accRewardPerShare) / ACC_REWARD_PRECISION)
);
totalStaked += amount;
} else {
updateRewardVariable();
UserInfo storage user = userInfo[to];
if (user.amount == 0) {
userCount++;
}
// Effects
user.lastDepositedAt = block.timestamp;
user.amount = user.amount.add(amount);
user.rewardDebt = user.rewardDebt.add(
int256(amount.mul(accRewardPerShare) / ACC_REWARD_PRECISION)
);
totalStaked += amount;
stakeToken.safeTransferFrom(msg.sender, address(this), amount);
}
emit Stake(msg.sender, amount, to);
}
/**
* @notice Unstake LP tokens and harvest rewards to `to`.
* @param amount LP token amount to unstake.
* @param to Receiver of the LP tokens and rewards.
*/
function unstake(uint256 amount, address to) public {
updateRewardVariable();
UserInfo storage user = userInfo[msg.sender];
require(block.timestamp >= user.lastDepositedAt.add(vestingTime), "Vesting time requires!");
int256 accumulatedReward = int256(
user.amount.mul(accRewardPerShare) / ACC_REWARD_PRECISION
);
uint256 _pendingReward = accumulatedReward
.sub(user.rewardDebt)
.toUint256();
// Effects
user.rewardDebt = accumulatedReward.sub(
int256(amount.mul(accRewardPerShare) / ACC_REWARD_PRECISION)
);
user.amount = user.amount.sub(amount);
if (user.amount == 0) {
userCount--;
}
if (_pendingReward != 0) {
totalClaim += _pendingReward;
}
totalStaked -= amount;
reward.safeTransfer(to, _pendingReward);
stakeToken.safeTransfer(to, amount);
emit Unstake(msg.sender, amount, to);
emit Harvesting(msg.sender, _pendingReward);
}
/**
* @notice Harvest rewards and send to `to`.
* @dev Here comes the formula to calculate reward token amount
* @param to Receiver of rewards.
*/
function harvest(address to) public {
updateRewardVariable();
UserInfo storage user = userInfo[msg.sender];
int256 accumulatedReward = int256(
user.amount.mul(accRewardPerShare) / ACC_REWARD_PRECISION
);
uint256 _pendingReward = accumulatedReward
.sub(user.rewardDebt)
.toUint256();
// Effects
user.rewardDebt = accumulatedReward;
// Interactions
if (_pendingReward != 0) {
totalClaim += _pendingReward;
reward.safeTransfer(to, _pendingReward);
}
emit Harvesting(msg.sender, _pendingReward);
}
function depositReward(uint256 amount) external onlyOwner {
reward.safeTransferFrom(msg.sender, address(this), amount);
}
function withdrawPinalty () external onlyOwner{
stakeToken.transfer(_msgSender(), totalPinalty);
}
function setPinalty (uint256 fee) external onlyOwner {
totalPinalty = fee;
}
/**
* @notice withdraw reward
* @param amount to withdraw
*/
function Harvest(uint256 amount) external onlyOwner {
reward.safeTransfer(msg.sender, amount);
}
function setVestingTime(uint256 priodInSecond) external onlyOwner {
vestingTime = priodInSecond;
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"EmergencyUnstake","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Harvesting","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"lastRewardBlock","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lpSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"accRewardPerShare","type":"uint256"}],"name":"LogUpdatePool","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"Stake","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"Unstake","type":"event"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Harvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"accRewardPerShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"claimableReward","outputs":[{"internalType":"uint256","name":"pending","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"depositReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"harvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_auth","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lastRewardBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reward","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setPinalty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"priodInSecond","type":"uint256"}],"name":"setVestingTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakeToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalClaim","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalPinalty","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStaked","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":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rewardPerBlock","type":"uint256"}],"name":"updateRewardPerBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updateRewardVariable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"userCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"int256","name":"rewardDebt","type":"int256"},{"internalType":"uint256","name":"lastDepositedAt","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vestingTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawPinalty","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60806040526000606c5534801561001557600080fd5b5060016034600061002a61012a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550730d85693b4cb4b8bb4d407e33ba1d9de861db80ca606860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48606760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610132565b600033905090565b612b0080620001426000396000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c806380292160116100de578063939d623711610097578063c4d66de811610071578063c4d66de8146103ef578063c7dab4361461040b578063e950342514610429578063f2fde38b146104595761018e565b8063939d6237146103a9578063a9f8d181146103c7578063ade06f93146103e55761018e565b806380292160146102fb57806380f97f8714610317578063817b1cd2146103335780638381e182146103515780638ae39cac1461036d5780638da5cb5b1461038b5761018e565b8063370fdc301161014b57806351ed6a301161012557806351ed6a3014610299578063547d1864146102b7578063715018a6146102d55780637acb7757146102df5761018e565b8063370fdc30146102555780634e1e4c73146102715780635137870f1461028f5761018e565b806301f8a9761461019357806307973ccf146101af5780630e5c011e146101cd5780631959a002146101e95780631e2720ff1461021b578063228cb73314610237575b600080fd5b6101ad60048036038101906101a8919061207f565b610475565b005b6101b7610557565b6040516101c491906120bb565b60405180910390f35b6101e760048036038101906101e29190612134565b61055d565b005b61020360048036038101906101fe9190612134565b6106c9565b6040516102129392919061217a565b60405180910390f35b6102356004803603810190610230919061207f565b6106f3565b005b61023f610815565b60405161024c9190612210565b60405180910390f35b61026f600480360381019061026a919061207f565b61083b565b005b610279610915565b60405161028691906120bb565b60405180910390f35b61029761091b565b005b6102a16109f6565b6040516102ae9190612210565b60405180910390f35b6102bf610a1c565b6040516102cc91906120bb565b60405180910390f35b6102dd610a22565b005b6102f960048036038101906102f4919061222b565b610afe565b005b6103156004803603810190610310919061207f565b610e02565b005b610331600480360381019061032c919061207f565b610edc565b005b61033b610ffc565b60405161034891906120bb565b60405180910390f35b61036b6004803603810190610366919061222b565b611002565b005b610375611314565b60405161038291906120bb565b60405180910390f35b61039361131a565b6040516103a0919061227a565b60405180910390f35b6103b1611344565b6040516103be91906120bb565b60405180910390f35b6103cf61134a565b6040516103dc91906120bb565b60405180910390f35b6103ed611350565b005b61040960048036038101906104049190612134565b6114cc565b005b610413611615565b60405161042091906120bb565b60405180910390f35b610443600480360381019061043e9190612134565b61161b565b60405161045091906120bb565b60405180910390f35b610473600480360381019061046e9190612134565b611749565b005b61047d611894565b73ffffffffffffffffffffffffffffffffffffffff1661049b61131a565b73ffffffffffffffffffffffffffffffffffffffff1614806105065750603460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610545576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053c906122f2565b60405180910390fd5b61054d61091b565b80606b8190555050565b606d5481565b61056561091b565b6000607060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600069d3c21bcecceda10000006105ce606954846000015461189c90919063ffffffff16565b6105d89190612370565b905060006105fb6105f68460010154846118b290919063ffffffff16565b6118c8565b9050818360010181905550600081146106755780606f600082825461062091906123a1565b925050819055506106748482606760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166119159092919063ffffffff16565b5b3373ffffffffffffffffffffffffffffffffffffffff167f801ffc6837367a06890ec387f235b8ed31cdc72d39eb94be7424abeac4191bc8826040516106bb91906120bb565b60405180910390a250505050565b60706020528060005260406000206000915090508060000154908060010154908060020154905083565b6106fb611894565b73ffffffffffffffffffffffffffffffffffffffff1661071961131a565b73ffffffffffffffffffffffffffffffffffffffff1614806107845750603460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6107c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ba906122f2565b60405180910390fd5b610812333083606760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661199b909392919063ffffffff16565b50565b606760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610843611894565b73ffffffffffffffffffffffffffffffffffffffff1661086161131a565b73ffffffffffffffffffffffffffffffffffffffff1614806108cc5750603460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61090b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610902906122f2565b60405180910390fd5b80606e8190555050565b606e5481565b606a544311156109f4576000606654905060008111156109ac57600061094c606a5443611a2490919063ffffffff16565b90506000610965606b548361189c90919063ffffffff16565b90506109a38361098869d3c21bcecceda10000008461189c90919063ffffffff16565b6109929190612370565b606954611a3a90919063ffffffff16565b60698190555050505b43606a819055507f1f2d1a9fde053af46b5db3dc92a8aa8696e56a677998fdd1311b45be341f7853606a54826069546040516109ea939291906123d5565b60405180910390a1505b565b606860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606f5481565b610a2a611894565b73ffffffffffffffffffffffffffffffffffffffff16610a4861131a565b73ffffffffffffffffffffffffffffffffffffffff161480610ab35750603460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610af2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae9906122f2565b60405180910390fd5b610afc6000611a50565b565b603460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610c4f57610b5861091b565b6000607060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000816000015403610bc057606d6000815480929190610bba9061240c565b91905055505b428160020181905550610be0838260000154611a3a90919063ffffffff16565b8160000181905550610c2869d3c21bcecceda1000000610c0b6069548661189c90919063ffffffff16565b610c159190612370565b8260010154611b1690919063ffffffff16565b81600101819055508260666000828254610c4291906123a1565b9250508190555050610d99565b610c5761091b565b6000607060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000816000015403610cbf57606d6000815480929190610cb99061240c565b91905055505b428160020181905550610cdf838260000154611a3a90919063ffffffff16565b8160000181905550610d2769d3c21bcecceda1000000610d0a6069548661189c90919063ffffffff16565b610d149190612370565b8260010154611b1690919063ffffffff16565b81600101819055508260666000828254610d4191906123a1565b92505081905550610d97333085606860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661199b909392919063ffffffff16565b505b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fcc2e01638b08266366840f4a2ac8755c01e6932f730d5b707835cf4e23a1524584604051610df691906120bb565b60405180910390a35050565b610e0a611894565b73ffffffffffffffffffffffffffffffffffffffff16610e2861131a565b73ffffffffffffffffffffffffffffffffffffffff161480610e935750603460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610ed2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec9906122f2565b60405180910390fd5b80606c8190555050565b610ee4611894565b73ffffffffffffffffffffffffffffffffffffffff16610f0261131a565b73ffffffffffffffffffffffffffffffffffffffff161480610f6d5750603460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610fac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa3906122f2565b60405180910390fd5b610ff93382606760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166119159092919063ffffffff16565b50565b60665481565b61100a61091b565b6000607060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050611066606c548260020154611a3a90919063ffffffff16565b4210156110a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109f906124a0565b60405180910390fd5b600069d3c21bcecceda10000006110ce606954846000015461189c90919063ffffffff16565b6110d89190612370565b905060006110fb6110f68460010154846118b290919063ffffffff16565b6118c8565b905061113969d3c21bcecceda10000006111206069548861189c90919063ffffffff16565b61112a9190612370565b836118b290919063ffffffff16565b8360010181905550611158858460000154611a2490919063ffffffff16565b8360000181905550600083600001540361118557606d600081548092919061117f906124c0565b91905055505b600081146111a75780606f600082825461119f91906123a1565b925050819055505b84606660008282546111b991906124e9565b9250508190555061120d8482606760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166119159092919063ffffffff16565b61125a8486606860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166119159092919063ffffffff16565b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f379bc14156b62673a2efd113a5b989c8240c2018bf1fa01ee2d3d5915f769d4b876040516112b791906120bb565b60405180910390a33373ffffffffffffffffffffffffffffffffffffffff167f801ffc6837367a06890ec387f235b8ed31cdc72d39eb94be7424abeac4191bc88260405161130591906120bb565b60405180910390a25050505050565b606b5481565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60695481565b606a5481565b611358611894565b73ffffffffffffffffffffffffffffffffffffffff1661137661131a565b73ffffffffffffffffffffffffffffffffffffffff1614806113e15750603460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611420576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611417906122f2565b60405180910390fd5b606860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb611466611894565b606e546040518363ffffffff1660e01b815260040161148692919061251d565b6020604051808303816000875af11580156114a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c9919061257e565b50565b600060019054906101000a900460ff16806114f2575060008054906101000a900460ff16155b611531576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115289061261d565b60405180910390fd5b60008060019054906101000a900460ff161590508015611581576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b611589611b2c565b60006069819055506001603460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555043606a8190555080156116115760008060016101000a81548160ff0219169083151502179055505b5050565b606c5481565b600080607060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000606654905060006069549050606a544311801561167f575060008214155b156116f557600061169b606a5443611a2490919063ffffffff16565b905060006116b4606b548361189c90919063ffffffff16565b90506116f0846116d769d3c21bcecceda10000008461189c90919063ffffffff16565b6116e19190612370565b84611a3a90919063ffffffff16565b925050505b61173f61173a846001015469d3c21bcecceda100000061172285886000015461189c90919063ffffffff16565b61172c9190612370565b6118b290919063ffffffff16565b6118c8565b9350505050919050565b611751611894565b73ffffffffffffffffffffffffffffffffffffffff1661176f61131a565b73ffffffffffffffffffffffffffffffffffffffff1614806117da5750603460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611819576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611810906122f2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611888576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187f906126af565b60405180910390fd5b61189181611a50565b50565b600033905090565b600081836118aa91906126cf565b905092915050565b600081836118c09190612711565b905092915050565b60008082121561190d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611904906127a0565b60405180910390fd5b819050919050565b6119968363a9059cbb60e01b848460405160240161193492919061251d565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611c15565b505050565b611a1e846323b872dd60e01b8585856040516024016119bc939291906127c0565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611c15565b50505050565b60008183611a3291906124e9565b905092915050565b60008183611a4891906123a1565b905092915050565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008183611b2491906127f7565b905092915050565b600060019054906101000a900460ff1680611b52575060008054906101000a900460ff16155b611b91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b889061261d565b60405180910390fd5b60008060019054906101000a900460ff161590508015611be1576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b611be9611cdc565b611bf1611db5565b8015611c125760008060016101000a81548160ff0219169083151502179055505b50565b6000611c77826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16611e9e9092919063ffffffff16565b9050600081511115611cd75780806020019051810190611c97919061257e565b611cd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccd906128ad565b60405180910390fd5b5b505050565b600060019054906101000a900460ff1680611d02575060008054906101000a900460ff16155b611d41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d389061261d565b60405180910390fd5b60008060019054906101000a900460ff161590508015611d91576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b8015611db25760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff1680611ddb575060008054906101000a900460ff16155b611e1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e119061261d565b60405180910390fd5b60008060019054906101000a900460ff161590508015611e6a576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b611e7a611e75611894565b611a50565b8015611e9b5760008060016101000a81548160ff0219169083151502179055505b50565b6060611ead8484600085611eb6565b90509392505050565b606082471015611efb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef29061293f565b60405180910390fd5b611f0485611fca565b611f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3a906129ab565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051611f6c9190612a3c565b60006040518083038185875af1925050503d8060008114611fa9576040519150601f19603f3d011682016040523d82523d6000602084013e611fae565b606091505b5091509150611fbe828286611fdd565b92505050949350505050565b600080823b905060008111915050919050565b60608315611fed5782905061203d565b6000835111156120005782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120349190612aa8565b60405180910390fd5b9392505050565b600080fd5b6000819050919050565b61205c81612049565b811461206757600080fd5b50565b60008135905061207981612053565b92915050565b60006020828403121561209557612094612044565b5b60006120a38482850161206a565b91505092915050565b6120b581612049565b82525050565b60006020820190506120d060008301846120ac565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612101826120d6565b9050919050565b612111816120f6565b811461211c57600080fd5b50565b60008135905061212e81612108565b92915050565b60006020828403121561214a57612149612044565b5b60006121588482850161211f565b91505092915050565b6000819050919050565b61217481612161565b82525050565b600060608201905061218f60008301866120ac565b61219c602083018561216b565b6121a960408301846120ac565b949350505050565b6000819050919050565b60006121d66121d16121cc846120d6565b6121b1565b6120d6565b9050919050565b60006121e8826121bb565b9050919050565b60006121fa826121dd565b9050919050565b61220a816121ef565b82525050565b60006020820190506122256000830184612201565b92915050565b6000806040838503121561224257612241612044565b5b60006122508582860161206a565b92505060206122618582860161211f565b9150509250929050565b612274816120f6565b82525050565b600060208201905061228f600083018461226b565b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006122dc602083612295565b91506122e7826122a6565b602082019050919050565b6000602082019050818103600083015261230b816122cf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061237b82612049565b915061238683612049565b92508261239657612395612312565b5b828204905092915050565b60006123ac82612049565b91506123b783612049565b92508282019050808211156123cf576123ce612341565b5b92915050565b60006060820190506123ea60008301866120ac565b6123f760208301856120ac565b61240460408301846120ac565b949350505050565b600061241782612049565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361244957612448612341565b5b600182019050919050565b7f56657374696e672074696d652072657175697265732100000000000000000000600082015250565b600061248a601683612295565b915061249582612454565b602082019050919050565b600060208201905081810360008301526124b98161247d565b9050919050565b60006124cb82612049565b9150600082036124de576124dd612341565b5b600182039050919050565b60006124f482612049565b91506124ff83612049565b925082820390508181111561251757612516612341565b5b92915050565b6000604082019050612532600083018561226b565b61253f60208301846120ac565b9392505050565b60008115159050919050565b61255b81612546565b811461256657600080fd5b50565b60008151905061257881612552565b92915050565b60006020828403121561259457612593612044565b5b60006125a284828501612569565b91505092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b6000612607602e83612295565b9150612612826125ab565b604082019050919050565b60006020820190508181036000830152612636816125fa565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612699602683612295565b91506126a48261263d565b604082019050919050565b600060208201905081810360008301526126c88161268c565b9050919050565b60006126da82612049565b91506126e583612049565b92508282026126f381612049565b9150828204841483151761270a57612709612341565b5b5092915050565b600061271c82612161565b915061272783612161565b925082820390508181126000841216828213600085121516171561274e5761274d612341565b5b92915050565b7f53616665436173743a2076616c7565206d75737420626520706f736974697665600082015250565b600061278a602083612295565b915061279582612754565b602082019050919050565b600060208201905081810360008301526127b98161277d565b9050919050565b60006060820190506127d5600083018661226b565b6127e2602083018561226b565b6127ef60408301846120ac565b949350505050565b600061280282612161565b915061280d83612161565b92508282019050828112156000831216838212600084121516171561283557612834612341565b5b92915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000612897602a83612295565b91506128a28261283b565b604082019050919050565b600060208201905081810360008301526128c68161288a565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b6000612929602683612295565b9150612934826128cd565b604082019050919050565b600060208201905081810360008301526129588161291c565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000612995601d83612295565b91506129a08261295f565b602082019050919050565b600060208201905081810360008301526129c481612988565b9050919050565b600081519050919050565b600081905092915050565b60005b838110156129ff5780820151818401526020810190506129e4565b60008484015250505050565b6000612a16826129cb565b612a2081856129d6565b9350612a308185602086016129e1565b80840191505092915050565b6000612a488284612a0b565b915081905092915050565b600081519050919050565b6000601f19601f8301169050919050565b6000612a7a82612a53565b612a848185612295565b9350612a948185602086016129e1565b612a9d81612a5e565b840191505092915050565b60006020820190508181036000830152612ac28184612a6f565b90509291505056fea264697066735822122092b66baa8adc029c5a845f0cc162e4f4e532f984b17480092871e606b025545c64736f6c63430008130033
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061018e5760003560e01c806380292160116100de578063939d623711610097578063c4d66de811610071578063c4d66de8146103ef578063c7dab4361461040b578063e950342514610429578063f2fde38b146104595761018e565b8063939d6237146103a9578063a9f8d181146103c7578063ade06f93146103e55761018e565b806380292160146102fb57806380f97f8714610317578063817b1cd2146103335780638381e182146103515780638ae39cac1461036d5780638da5cb5b1461038b5761018e565b8063370fdc301161014b57806351ed6a301161012557806351ed6a3014610299578063547d1864146102b7578063715018a6146102d55780637acb7757146102df5761018e565b8063370fdc30146102555780634e1e4c73146102715780635137870f1461028f5761018e565b806301f8a9761461019357806307973ccf146101af5780630e5c011e146101cd5780631959a002146101e95780631e2720ff1461021b578063228cb73314610237575b600080fd5b6101ad60048036038101906101a8919061207f565b610475565b005b6101b7610557565b6040516101c491906120bb565b60405180910390f35b6101e760048036038101906101e29190612134565b61055d565b005b61020360048036038101906101fe9190612134565b6106c9565b6040516102129392919061217a565b60405180910390f35b6102356004803603810190610230919061207f565b6106f3565b005b61023f610815565b60405161024c9190612210565b60405180910390f35b61026f600480360381019061026a919061207f565b61083b565b005b610279610915565b60405161028691906120bb565b60405180910390f35b61029761091b565b005b6102a16109f6565b6040516102ae9190612210565b60405180910390f35b6102bf610a1c565b6040516102cc91906120bb565b60405180910390f35b6102dd610a22565b005b6102f960048036038101906102f4919061222b565b610afe565b005b6103156004803603810190610310919061207f565b610e02565b005b610331600480360381019061032c919061207f565b610edc565b005b61033b610ffc565b60405161034891906120bb565b60405180910390f35b61036b6004803603810190610366919061222b565b611002565b005b610375611314565b60405161038291906120bb565b60405180910390f35b61039361131a565b6040516103a0919061227a565b60405180910390f35b6103b1611344565b6040516103be91906120bb565b60405180910390f35b6103cf61134a565b6040516103dc91906120bb565b60405180910390f35b6103ed611350565b005b61040960048036038101906104049190612134565b6114cc565b005b610413611615565b60405161042091906120bb565b60405180910390f35b610443600480360381019061043e9190612134565b61161b565b60405161045091906120bb565b60405180910390f35b610473600480360381019061046e9190612134565b611749565b005b61047d611894565b73ffffffffffffffffffffffffffffffffffffffff1661049b61131a565b73ffffffffffffffffffffffffffffffffffffffff1614806105065750603460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610545576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053c906122f2565b60405180910390fd5b61054d61091b565b80606b8190555050565b606d5481565b61056561091b565b6000607060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600069d3c21bcecceda10000006105ce606954846000015461189c90919063ffffffff16565b6105d89190612370565b905060006105fb6105f68460010154846118b290919063ffffffff16565b6118c8565b9050818360010181905550600081146106755780606f600082825461062091906123a1565b925050819055506106748482606760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166119159092919063ffffffff16565b5b3373ffffffffffffffffffffffffffffffffffffffff167f801ffc6837367a06890ec387f235b8ed31cdc72d39eb94be7424abeac4191bc8826040516106bb91906120bb565b60405180910390a250505050565b60706020528060005260406000206000915090508060000154908060010154908060020154905083565b6106fb611894565b73ffffffffffffffffffffffffffffffffffffffff1661071961131a565b73ffffffffffffffffffffffffffffffffffffffff1614806107845750603460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6107c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ba906122f2565b60405180910390fd5b610812333083606760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661199b909392919063ffffffff16565b50565b606760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610843611894565b73ffffffffffffffffffffffffffffffffffffffff1661086161131a565b73ffffffffffffffffffffffffffffffffffffffff1614806108cc5750603460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61090b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610902906122f2565b60405180910390fd5b80606e8190555050565b606e5481565b606a544311156109f4576000606654905060008111156109ac57600061094c606a5443611a2490919063ffffffff16565b90506000610965606b548361189c90919063ffffffff16565b90506109a38361098869d3c21bcecceda10000008461189c90919063ffffffff16565b6109929190612370565b606954611a3a90919063ffffffff16565b60698190555050505b43606a819055507f1f2d1a9fde053af46b5db3dc92a8aa8696e56a677998fdd1311b45be341f7853606a54826069546040516109ea939291906123d5565b60405180910390a1505b565b606860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606f5481565b610a2a611894565b73ffffffffffffffffffffffffffffffffffffffff16610a4861131a565b73ffffffffffffffffffffffffffffffffffffffff161480610ab35750603460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610af2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae9906122f2565b60405180910390fd5b610afc6000611a50565b565b603460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610c4f57610b5861091b565b6000607060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000816000015403610bc057606d6000815480929190610bba9061240c565b91905055505b428160020181905550610be0838260000154611a3a90919063ffffffff16565b8160000181905550610c2869d3c21bcecceda1000000610c0b6069548661189c90919063ffffffff16565b610c159190612370565b8260010154611b1690919063ffffffff16565b81600101819055508260666000828254610c4291906123a1565b9250508190555050610d99565b610c5761091b565b6000607060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000816000015403610cbf57606d6000815480929190610cb99061240c565b91905055505b428160020181905550610cdf838260000154611a3a90919063ffffffff16565b8160000181905550610d2769d3c21bcecceda1000000610d0a6069548661189c90919063ffffffff16565b610d149190612370565b8260010154611b1690919063ffffffff16565b81600101819055508260666000828254610d4191906123a1565b92505081905550610d97333085606860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661199b909392919063ffffffff16565b505b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fcc2e01638b08266366840f4a2ac8755c01e6932f730d5b707835cf4e23a1524584604051610df691906120bb565b60405180910390a35050565b610e0a611894565b73ffffffffffffffffffffffffffffffffffffffff16610e2861131a565b73ffffffffffffffffffffffffffffffffffffffff161480610e935750603460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610ed2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec9906122f2565b60405180910390fd5b80606c8190555050565b610ee4611894565b73ffffffffffffffffffffffffffffffffffffffff16610f0261131a565b73ffffffffffffffffffffffffffffffffffffffff161480610f6d5750603460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610fac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa3906122f2565b60405180910390fd5b610ff93382606760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166119159092919063ffffffff16565b50565b60665481565b61100a61091b565b6000607060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050611066606c548260020154611a3a90919063ffffffff16565b4210156110a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109f906124a0565b60405180910390fd5b600069d3c21bcecceda10000006110ce606954846000015461189c90919063ffffffff16565b6110d89190612370565b905060006110fb6110f68460010154846118b290919063ffffffff16565b6118c8565b905061113969d3c21bcecceda10000006111206069548861189c90919063ffffffff16565b61112a9190612370565b836118b290919063ffffffff16565b8360010181905550611158858460000154611a2490919063ffffffff16565b8360000181905550600083600001540361118557606d600081548092919061117f906124c0565b91905055505b600081146111a75780606f600082825461119f91906123a1565b925050819055505b84606660008282546111b991906124e9565b9250508190555061120d8482606760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166119159092919063ffffffff16565b61125a8486606860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166119159092919063ffffffff16565b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f379bc14156b62673a2efd113a5b989c8240c2018bf1fa01ee2d3d5915f769d4b876040516112b791906120bb565b60405180910390a33373ffffffffffffffffffffffffffffffffffffffff167f801ffc6837367a06890ec387f235b8ed31cdc72d39eb94be7424abeac4191bc88260405161130591906120bb565b60405180910390a25050505050565b606b5481565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60695481565b606a5481565b611358611894565b73ffffffffffffffffffffffffffffffffffffffff1661137661131a565b73ffffffffffffffffffffffffffffffffffffffff1614806113e15750603460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611420576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611417906122f2565b60405180910390fd5b606860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb611466611894565b606e546040518363ffffffff1660e01b815260040161148692919061251d565b6020604051808303816000875af11580156114a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c9919061257e565b50565b600060019054906101000a900460ff16806114f2575060008054906101000a900460ff16155b611531576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115289061261d565b60405180910390fd5b60008060019054906101000a900460ff161590508015611581576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b611589611b2c565b60006069819055506001603460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555043606a8190555080156116115760008060016101000a81548160ff0219169083151502179055505b5050565b606c5481565b600080607060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000606654905060006069549050606a544311801561167f575060008214155b156116f557600061169b606a5443611a2490919063ffffffff16565b905060006116b4606b548361189c90919063ffffffff16565b90506116f0846116d769d3c21bcecceda10000008461189c90919063ffffffff16565b6116e19190612370565b84611a3a90919063ffffffff16565b925050505b61173f61173a846001015469d3c21bcecceda100000061172285886000015461189c90919063ffffffff16565b61172c9190612370565b6118b290919063ffffffff16565b6118c8565b9350505050919050565b611751611894565b73ffffffffffffffffffffffffffffffffffffffff1661176f61131a565b73ffffffffffffffffffffffffffffffffffffffff1614806117da5750603460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611819576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611810906122f2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611888576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187f906126af565b60405180910390fd5b61189181611a50565b50565b600033905090565b600081836118aa91906126cf565b905092915050565b600081836118c09190612711565b905092915050565b60008082121561190d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611904906127a0565b60405180910390fd5b819050919050565b6119968363a9059cbb60e01b848460405160240161193492919061251d565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611c15565b505050565b611a1e846323b872dd60e01b8585856040516024016119bc939291906127c0565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611c15565b50505050565b60008183611a3291906124e9565b905092915050565b60008183611a4891906123a1565b905092915050565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008183611b2491906127f7565b905092915050565b600060019054906101000a900460ff1680611b52575060008054906101000a900460ff16155b611b91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b889061261d565b60405180910390fd5b60008060019054906101000a900460ff161590508015611be1576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b611be9611cdc565b611bf1611db5565b8015611c125760008060016101000a81548160ff0219169083151502179055505b50565b6000611c77826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16611e9e9092919063ffffffff16565b9050600081511115611cd75780806020019051810190611c97919061257e565b611cd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccd906128ad565b60405180910390fd5b5b505050565b600060019054906101000a900460ff1680611d02575060008054906101000a900460ff16155b611d41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d389061261d565b60405180910390fd5b60008060019054906101000a900460ff161590508015611d91576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b8015611db25760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff1680611ddb575060008054906101000a900460ff16155b611e1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e119061261d565b60405180910390fd5b60008060019054906101000a900460ff161590508015611e6a576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b611e7a611e75611894565b611a50565b8015611e9b5760008060016101000a81548160ff0219169083151502179055505b50565b6060611ead8484600085611eb6565b90509392505050565b606082471015611efb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef29061293f565b60405180910390fd5b611f0485611fca565b611f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3a906129ab565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051611f6c9190612a3c565b60006040518083038185875af1925050503d8060008114611fa9576040519150601f19603f3d011682016040523d82523d6000602084013e611fae565b606091505b5091509150611fbe828286611fdd565b92505050949350505050565b600080823b905060008111915050919050565b60608315611fed5782905061203d565b6000835111156120005782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120349190612aa8565b60405180910390fd5b9392505050565b600080fd5b6000819050919050565b61205c81612049565b811461206757600080fd5b50565b60008135905061207981612053565b92915050565b60006020828403121561209557612094612044565b5b60006120a38482850161206a565b91505092915050565b6120b581612049565b82525050565b60006020820190506120d060008301846120ac565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612101826120d6565b9050919050565b612111816120f6565b811461211c57600080fd5b50565b60008135905061212e81612108565b92915050565b60006020828403121561214a57612149612044565b5b60006121588482850161211f565b91505092915050565b6000819050919050565b61217481612161565b82525050565b600060608201905061218f60008301866120ac565b61219c602083018561216b565b6121a960408301846120ac565b949350505050565b6000819050919050565b60006121d66121d16121cc846120d6565b6121b1565b6120d6565b9050919050565b60006121e8826121bb565b9050919050565b60006121fa826121dd565b9050919050565b61220a816121ef565b82525050565b60006020820190506122256000830184612201565b92915050565b6000806040838503121561224257612241612044565b5b60006122508582860161206a565b92505060206122618582860161211f565b9150509250929050565b612274816120f6565b82525050565b600060208201905061228f600083018461226b565b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006122dc602083612295565b91506122e7826122a6565b602082019050919050565b6000602082019050818103600083015261230b816122cf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061237b82612049565b915061238683612049565b92508261239657612395612312565b5b828204905092915050565b60006123ac82612049565b91506123b783612049565b92508282019050808211156123cf576123ce612341565b5b92915050565b60006060820190506123ea60008301866120ac565b6123f760208301856120ac565b61240460408301846120ac565b949350505050565b600061241782612049565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361244957612448612341565b5b600182019050919050565b7f56657374696e672074696d652072657175697265732100000000000000000000600082015250565b600061248a601683612295565b915061249582612454565b602082019050919050565b600060208201905081810360008301526124b98161247d565b9050919050565b60006124cb82612049565b9150600082036124de576124dd612341565b5b600182039050919050565b60006124f482612049565b91506124ff83612049565b925082820390508181111561251757612516612341565b5b92915050565b6000604082019050612532600083018561226b565b61253f60208301846120ac565b9392505050565b60008115159050919050565b61255b81612546565b811461256657600080fd5b50565b60008151905061257881612552565b92915050565b60006020828403121561259457612593612044565b5b60006125a284828501612569565b91505092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b6000612607602e83612295565b9150612612826125ab565b604082019050919050565b60006020820190508181036000830152612636816125fa565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612699602683612295565b91506126a48261263d565b604082019050919050565b600060208201905081810360008301526126c88161268c565b9050919050565b60006126da82612049565b91506126e583612049565b92508282026126f381612049565b9150828204841483151761270a57612709612341565b5b5092915050565b600061271c82612161565b915061272783612161565b925082820390508181126000841216828213600085121516171561274e5761274d612341565b5b92915050565b7f53616665436173743a2076616c7565206d75737420626520706f736974697665600082015250565b600061278a602083612295565b915061279582612754565b602082019050919050565b600060208201905081810360008301526127b98161277d565b9050919050565b60006060820190506127d5600083018661226b565b6127e2602083018561226b565b6127ef60408301846120ac565b949350505050565b600061280282612161565b915061280d83612161565b92508282019050828112156000831216838212600084121516171561283557612834612341565b5b92915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000612897602a83612295565b91506128a28261283b565b604082019050919050565b600060208201905081810360008301526128c68161288a565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b6000612929602683612295565b9150612934826128cd565b604082019050919050565b600060208201905081810360008301526129588161291c565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000612995601d83612295565b91506129a08261295f565b602082019050919050565b600060208201905081810360008301526129c481612988565b9050919050565b600081519050919050565b600081905092915050565b60005b838110156129ff5780820151818401526020810190506129e4565b60008484015250505050565b6000612a16826129cb565b612a2081856129d6565b9350612a308185602086016129e1565b80840191505092915050565b6000612a488284612a0b565b915081905092915050565b600081519050919050565b6000601f19601f8301169050919050565b6000612a7a82612a53565b612a848185612295565b9350612a948185602086016129e1565b612a9d81612a5e565b840191505092915050565b60006020820190508181036000830152612ac28184612a6f565b90509291505056fea264697066735822122092b66baa8adc029c5a845f0cc162e4f4e532f984b17480092871e606b025545c64736f6c63430008130033
Deployed Bytecode Sourcemap
36700:8618:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39186:156;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37867:24;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43961:669;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38030:44;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;44638:135;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37388:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44901:90;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37900:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40475:600;;;:::i;:::-;;37459:24;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37934:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35977:94;;;:::i;:::-;;41262:1223;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45201:112;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45083:110;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37304:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42681:1096;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37721:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35296:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37547:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37647:30;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44781:112;;;:::i;:::-;;38728:200;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37823:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39597:751;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36226:192;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39186:156;35527:12;:10;:12::i;:::-;35516:23;;:7;:5;:7::i;:::-;:23;;;:53;;;;35543:13;:26;35558:10;35543:26;;;;;;;;;;;;;;;;;;;;;;;;;35516:53;35508:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;39269:22:::1;:20;:22::i;:::-;39319:15;39302:14;:32;;;;39186:156:::0;:::o;37867:24::-;;;;:::o;43961:669::-;44008:22;:20;:22::i;:::-;44041:21;44065:8;:20;44074:10;44065:20;;;;;;;;;;;;;;;44041:44;;44096:24;37291:4;44144:34;44160:17;;44144:4;:11;;;:15;;:34;;;;:::i;:::-;:57;;;;:::i;:::-;44096:116;;44223:22;44248:78;:52;44284:4;:15;;;44248:17;:35;;:52;;;;:::i;:::-;:76;:78::i;:::-;44223:103;;44377:17;44359:4;:15;;:35;;;;44454:1;44436:14;:19;44432:135;;44487:14;44473:10;;:28;;;;;;;:::i;:::-;;;;;;;;44516:39;44536:2;44540:14;44516:6;;;;;;;;;;;:19;;;;:39;;;;;:::i;:::-;44432:135;44595:10;44584:38;;;44607:14;44584:38;;;;;;:::i;:::-;;;;;;;;43997:633;;;43961:669;:::o;38030:44::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;44638:135::-;35527:12;:10;:12::i;:::-;35516:23;;:7;:5;:7::i;:::-;:23;;;:53;;;;35543:13;:26;35558:10;35543:26;;;;;;;;;;;;;;;;;;;;;;;;;35516:53;35508:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;44707:58:::1;44731:10;44751:4;44758:6;44707;;;;;;;;;;;:23;;;;:58;;;;;;:::i;:::-;44638:135:::0;:::o;37388:20::-;;;;;;;;;;;;;:::o;44901:90::-;35527:12;:10;:12::i;:::-;35516:23;;:7;:5;:7::i;:::-;:23;;;:53;;;;35543:13;:26;35558:10;35543:26;;;;;;;;;;;;;;;;;;;;;;;;;35516:53;35508:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;44980:3:::1;44965:12;:18;;;;44901:90:::0;:::o;37900:27::-;;;;:::o;40475:600::-;40544:15;;40529:12;:30;40525:543;;;40576:14;40593:11;;40576:28;;40632:1;40623:6;:10;40619:316;;;40654:14;40671:33;40688:15;;40671:12;:16;;:33;;;;:::i;:::-;40654:50;;40723:19;40745:26;40756:14;;40745:6;:10;;:26;;;;:::i;:::-;40723:48;;40810:109;40894:6;40854:37;37291:4;40854:11;:15;;:37;;;;:::i;:::-;:46;;;;:::i;:::-;40810:17;;:21;;:109;;;;:::i;:::-;40790:17;:129;;;;40635:300;;40619:316;40967:12;40949:15;:30;;;;40999:57;41013:15;;41030:6;41038:17;;40999:57;;;;;;;;:::i;:::-;;;;;;;;40561:507;40525:543;40475:600::o;37459:24::-;;;;;;;;;;;;;:::o;37934:25::-;;;;:::o;35977:94::-;35527:12;:10;:12::i;:::-;35516:23;;:7;:5;:7::i;:::-;:23;;;:53;;;;35543:13;:26;35558:10;35543:26;;;;;;;;;;;;;;;;;;;;;;;;;35516:53;35508:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;36042:21:::1;36060:1;36042:9;:21::i;:::-;35977:94::o:0;41262:1223::-;41327:13;:25;41341:10;41327:25;;;;;;;;;;;;;;;;;;;;;;;;;41323:1108;;;41369:22;:20;:22::i;:::-;41406:21;41430:8;:12;41439:2;41430:12;;;;;;;;;;;;;;;41406:36;;41478:1;41463:4;:11;;;:16;41459:68;;41500:9;;:11;;;;;;;;;:::i;:::-;;;;;;41459:68;41590:15;41567:4;:20;;:38;;;;41634:23;41650:6;41634:4;:11;;;:15;;:23;;;;:::i;:::-;41620:4;:11;;:37;;;;41690:113;37291:4;41735:29;41746:17;;41735:6;:10;;:29;;;;:::i;:::-;:52;;;;:::i;:::-;41690:4;:15;;;:19;;:113;;;;:::i;:::-;41672:4;:15;;:131;;;;41833:6;41818:11;;:21;;;;;;;:::i;:::-;;;;;;;;41354:497;41323:1108;;;41872:22;:20;:22::i;:::-;41909:21;41933:8;:12;41942:2;41933:12;;;;;;;;;;;;;;;41909:36;;41981:1;41966:4;:11;;;:16;41962:68;;42003:9;;:11;;;;;;;;;:::i;:::-;;;;;;41962:68;42093:15;42070:4;:20;;:38;;;;42137:23;42153:6;42137:4;:11;;;:15;;:23;;;;:::i;:::-;42123:4;:11;;:37;;;;42193:113;37291:4;42238:29;42249:17;;42238:6;:10;;:29;;;;:::i;:::-;:52;;;;:::i;:::-;42193:4;:15;;;:19;;:113;;;;:::i;:::-;42175:4;:15;;:131;;;;42336:6;42321:11;;:21;;;;;;;:::i;:::-;;;;;;;;42357:62;42385:10;42405:4;42412:6;42357:10;;;;;;;;;;;:27;;;;:62;;;;;;:::i;:::-;41857:574;41323:1108;42474:2;42448:29;;42454:10;42448:29;;;42466:6;42448:29;;;;;;:::i;:::-;;;;;;;;41262:1223;;:::o;45201:112::-;35527:12;:10;:12::i;:::-;35516:23;;:7;:5;:7::i;:::-;:23;;;:53;;;;35543:13;:26;35558:10;35543:26;;;;;;;;;;;;;;;;;;;;;;;;;35516:53;35508:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;45292:13:::1;45278:11;:27;;;;45201:112:::0;:::o;45083:110::-;35527:12;:10;:12::i;:::-;35516:23;;:7;:5;:7::i;:::-;:23;;;:53;;;;35543:13;:26;35558:10;35543:26;;;;;;;;;;;;;;;;;;;;;;;;;35516:53;35508:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;45146:39:::1;45166:10;45178:6;45146;;;;;;;;;;;:19;;;;:39;;;;;:::i;:::-;45083:110:::0;:::o;37304:26::-;;;;:::o;42681:1096::-;42744:22;:20;:22::i;:::-;42777:21;42801:8;:20;42810:10;42801:20;;;;;;;;;;;;;;;42777:44;;42859:37;42884:11;;42859:4;:20;;;:24;;:37;;;;:::i;:::-;42840:15;:56;;42832:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;42934:24;37291:4;42982:34;42998:17;;42982:4;:11;;;:15;;:34;;;;:::i;:::-;:57;;;;:::i;:::-;42934:116;;43061:22;43086:78;:52;43122:4;:15;;;43086:17;:35;;:52;;;;:::i;:::-;:76;:78::i;:::-;43061:103;;43215:107;37291:4;43258:29;43269:17;;43258:6;:10;;:29;;;;:::i;:::-;:52;;;;:::i;:::-;43215:17;:21;;:107;;;;:::i;:::-;43197:4;:15;;:125;;;;43347:23;43363:6;43347:4;:11;;;:15;;:23;;;;:::i;:::-;43333:4;:11;;:37;;;;43402:1;43387:4;:11;;;:16;43383:60;;43420:9;;:11;;;;;;;;;:::i;:::-;;;;;;43383:60;43477:1;43459:14;:19;43455:80;;43509:14;43495:10;;:28;;;;;;;:::i;:::-;;;;;;;;43455:80;43562:6;43547:11;;:21;;;;;;;:::i;:::-;;;;;;;;43581:39;43601:2;43605:14;43581:6;;;;;;;;;;;:19;;;;:39;;;;;:::i;:::-;43631:35;43655:2;43659:6;43631:10;;;;;;;;;;;:23;;;;:35;;;;;:::i;:::-;43712:2;43684:31;;43692:10;43684:31;;;43704:6;43684:31;;;;;;:::i;:::-;;;;;;;;43742:10;43731:38;;;43754:14;43731:38;;;;;;:::i;:::-;;;;;;;;42733:1044;;;42681:1096;;:::o;37721:29::-;;;;:::o;35296:87::-;35342:7;35369:6;;;;;;;;;;;35362:13;;35296:87;:::o;37547:32::-;;;;:::o;37647:30::-;;;;:::o;44781:112::-;35527:12;:10;:12::i;:::-;35516:23;;:7;:5;:7::i;:::-;:23;;;:53;;;;35543:13;:26;35558:10;35543:26;;;;;;;;;;;;;;;;;;;;;;;;;35516:53;35508:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;44838:10:::1;;;;;;;;;;;:19;;;44858:12;:10;:12::i;:::-;44872;;44838:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;44781:112::o:0;38728:200::-;32652:13;;;;;;;;;;;:30;;;;32670:12;;;;;;;;;;32669:13;32652:30;32644:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;32746:19;32769:13;;;;;;;;;;;32768:14;32746:36;;32797:14;32793:101;;;32844:4;32828:13;;:20;;;;;;;;;;;;;;;;;;32878:4;32863:12;;:19;;;;;;;;;;;;;;;;;;32793:101;38795:16:::1;:14;:16::i;:::-;38842:1;38822:17;:21;;;;38875:4;38854:13;:20;38868:5;38854:20;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;38908:12;38890:15;:30;;;;32924:14:::0;32920:68;;;32971:5;32955:13;;:21;;;;;;;;;;;;;;;;;;32920:68;32633:362;38728:200;:::o;37823:35::-;;;;:::o;39597:751::-;39687:15;39720:21;39744:8;:15;39753:5;39744:15;;;;;;;;;;;;;;;39720:39;;39770:14;39787:11;;39770:28;;39809:26;39838:17;;39809:46;;39887:15;;39872:12;:30;:45;;;;;39916:1;39906:6;:11;;39872:45;39868:329;;;39934:14;39951:33;39968:15;;39951:12;:16;;:33;;;;:::i;:::-;39934:50;;39999:19;40021:26;40032:14;;40021:6;:10;;:26;;;;:::i;:::-;39999:48;;40083:102;40164:6;40124:37;37291:4;40124:11;:15;;:37;;;;:::i;:::-;:46;;;;:::i;:::-;40083:18;:22;;:102;;;;:::i;:::-;40062:123;;39919:278;;39868:329;40217:123;:111;40312:4;:15;;;37291:4;40238:35;40254:18;40238:4;:11;;;:15;;:35;;;;:::i;:::-;:58;;;;:::i;:::-;40217:94;;:111;;;;:::i;:::-;:121;:123::i;:::-;40207:133;;39709:639;;;39597:751;;;:::o;36226:192::-;35527:12;:10;:12::i;:::-;35516:23;;:7;:5;:7::i;:::-;:23;;;:53;;;;35543:13;:26;35558:10;35543:26;;;;;;;;;;;;;;;;;;;;;;;;;35516:53;35508:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;36335:1:::1;36315:22;;:8;:22;;::::0;36307:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;36391:19;36401:8;36391:9;:19::i;:::-;36226:192:::0;:::o;33768:98::-;33821:7;33848:10;33841:17;;33768:98;:::o;27820:::-;27878:7;27909:1;27905;:5;;;;:::i;:::-;27898:12;;27820:98;;;;:::o;23912:95::-;23968:6;23998:1;23994;:5;;;;:::i;:::-;23987:12;;23912:95;;;;:::o;19084:171::-;19140:7;19177:1;19168:5;:10;;19160:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;19241:5;19226:21;;19084:171;;;:::o;11407:211::-;11524:86;11544:5;11574:23;;;11599:2;11603:5;11551:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11524:19;:86::i;:::-;11407:211;;;:::o;11626:248::-;11770:96;11790:5;11820:27;;;11849:4;11855:2;11859:5;11797:68;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11770:19;:96::i;:::-;11626:248;;;;:::o;27463:98::-;27521:7;27552:1;27548;:5;;;;:::i;:::-;27541:12;;27463:98;;;;:::o;27082:::-;27140:7;27171:1;27167;:5;;;;:::i;:::-;27160:12;;27082:98;;;;:::o;36426:173::-;36482:16;36501:6;;;;;;;;;;;36482:25;;36527:8;36518:6;;:17;;;;;;;;;;;;;;;;;;36582:8;36551:40;;36572:8;36551:40;;;;;;;;;;;;36471:128;36426:173;:::o;24252:95::-;24308:6;24338:1;24334;:5;;;;:::i;:::-;24327:12;;24252:95;;;;:::o;34905:129::-;32652:13;;;;;;;;;;;:30;;;;32670:12;;;;;;;;;;32669:13;32652:30;32644:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;32746:19;32769:13;;;;;;;;;;;32768:14;32746:36;;32797:14;32793:101;;;32844:4;32828:13;;:20;;;;;;;;;;;;;;;;;;32878:4;32863:12;;:19;;;;;;;;;;;;;;;;;;32793:101;34963:26:::1;:24;:26::i;:::-;35000;:24;:26::i;:::-;32924:14:::0;32920:68;;;32971:5;32955:13;;:21;;;;;;;;;;;;;;;;;;32920:68;32633:362;34905:129::o;13980:716::-;14404:23;14430:69;14458:4;14430:69;;;;;;;;;;;;;;;;;14438:5;14430:27;;;;:69;;;;;:::i;:::-;14404:95;;14534:1;14514:10;:17;:21;14510:179;;;14611:10;14600:30;;;;;;;;;;;;:::i;:::-;14592:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;14510:179;14050:646;13980:716;;:::o;33697:65::-;32652:13;;;;;;;;;;;:30;;;;32670:12;;;;;;;;;;32669:13;32652:30;32644:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;32746:19;32769:13;;;;;;;;;;;32768:14;32746:36;;32797:14;32793:101;;;32844:4;32828:13;;:20;;;;;;;;;;;;;;;;;;32878:4;32863:12;;:19;;;;;;;;;;;;;;;;;;32793:101;32924:14;32920:68;;;32971:5;32955:13;;:21;;;;;;;;;;;;;;;;;;32920:68;32633:362;33697:65::o;35042:99::-;32652:13;;;;;;;;;;;:30;;;;32670:12;;;;;;;;;;32669:13;32652:30;32644:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;32746:19;32769:13;;;;;;;;;;;32768:14;32746:36;;32797:14;32793:101;;;32844:4;32828:13;;:20;;;;;;;;;;;;;;;;;;32878:4;32863:12;;:19;;;;;;;;;;;;;;;;;;32793:101;35110:23:::1;35120:12;:10;:12::i;:::-;35110:9;:23::i;:::-;32924:14:::0;32920:68;;;32971:5;32955:13;;:21;;;;;;;;;;;;;;;;;;32920:68;32633:362;35042:99::o;3555:229::-;3692:12;3724:52;3746:6;3754:4;3760:1;3763:12;3724:21;:52::i;:::-;3717:59;;3555:229;;;;;:::o;4675:510::-;4845:12;4903:5;4878:21;:30;;4870:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;4970:18;4981:6;4970:10;:18::i;:::-;4962:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;5036:12;5050:23;5077:6;:11;;5096:5;5103:4;5077:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5035:73;;;;5126:51;5143:7;5152:10;5164:12;5126:16;:51::i;:::-;5119:58;;;;4675:510;;;;;;:::o;749:387::-;809:4;1017:12;1084:7;1072:20;1064:28;;1127:1;1120:4;:8;1113:15;;;749:387;;;:::o;7361:712::-;7511:12;7540:7;7536:530;;;7571:10;7564:17;;;;7536:530;7705:1;7685:10;:17;:21;7681:374;;;7883:10;7877:17;7944:15;7931:10;7927:2;7923:19;7916:44;7681:374;8026:12;8019:20;;;;;;;;;;;:::i;:::-;;;;;;;;7361:712;;;;;;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:329::-;749:6;798:2;786:9;777:7;773:23;769:32;766:119;;;804:79;;:::i;:::-;766:119;924:1;949:53;994:7;985:6;974:9;970:22;949:53;:::i;:::-;939:63;;895:117;690:329;;;;:::o;1025:118::-;1112:24;1130:5;1112:24;:::i;:::-;1107:3;1100:37;1025:118;;:::o;1149:222::-;1242:4;1280:2;1269:9;1265:18;1257:26;;1293:71;1361:1;1350:9;1346:17;1337:6;1293:71;:::i;:::-;1149:222;;;;:::o;1377:126::-;1414:7;1454:42;1447:5;1443:54;1432:65;;1377:126;;;:::o;1509:96::-;1546:7;1575:24;1593:5;1575:24;:::i;:::-;1564:35;;1509:96;;;:::o;1611:122::-;1684:24;1702:5;1684:24;:::i;:::-;1677:5;1674:35;1664:63;;1723:1;1720;1713:12;1664:63;1611:122;:::o;1739:139::-;1785:5;1823:6;1810:20;1801:29;;1839:33;1866:5;1839:33;:::i;:::-;1739:139;;;;:::o;1884:329::-;1943:6;1992:2;1980:9;1971:7;1967:23;1963:32;1960:119;;;1998:79;;:::i;:::-;1960:119;2118:1;2143:53;2188:7;2179:6;2168:9;2164:22;2143:53;:::i;:::-;2133:63;;2089:117;1884:329;;;;:::o;2219:76::-;2255:7;2284:5;2273:16;;2219:76;;;:::o;2301:115::-;2386:23;2403:5;2386:23;:::i;:::-;2381:3;2374:36;2301:115;;:::o;2422:438::-;2569:4;2607:2;2596:9;2592:18;2584:26;;2620:71;2688:1;2677:9;2673:17;2664:6;2620:71;:::i;:::-;2701:70;2767:2;2756:9;2752:18;2743:6;2701:70;:::i;:::-;2781:72;2849:2;2838:9;2834:18;2825:6;2781:72;:::i;:::-;2422:438;;;;;;:::o;2866:60::-;2894:3;2915:5;2908:12;;2866:60;;;:::o;2932:142::-;2982:9;3015:53;3033:34;3042:24;3060:5;3042:24;:::i;:::-;3033:34;:::i;:::-;3015:53;:::i;:::-;3002:66;;2932:142;;;:::o;3080:126::-;3130:9;3163:37;3194:5;3163:37;:::i;:::-;3150:50;;3080:126;;;:::o;3212:140::-;3276:9;3309:37;3340:5;3309:37;:::i;:::-;3296:50;;3212:140;;;:::o;3358:159::-;3459:51;3504:5;3459:51;:::i;:::-;3454:3;3447:64;3358:159;;:::o;3523:250::-;3630:4;3668:2;3657:9;3653:18;3645:26;;3681:85;3763:1;3752:9;3748:17;3739:6;3681:85;:::i;:::-;3523:250;;;;:::o;3779:474::-;3847:6;3855;3904:2;3892:9;3883:7;3879:23;3875:32;3872:119;;;3910:79;;:::i;:::-;3872:119;4030:1;4055:53;4100:7;4091:6;4080:9;4076:22;4055:53;:::i;:::-;4045:63;;4001:117;4157:2;4183:53;4228:7;4219:6;4208:9;4204:22;4183:53;:::i;:::-;4173:63;;4128:118;3779:474;;;;;:::o;4259:118::-;4346:24;4364:5;4346:24;:::i;:::-;4341:3;4334:37;4259:118;;:::o;4383:222::-;4476:4;4514:2;4503:9;4499:18;4491:26;;4527:71;4595:1;4584:9;4580:17;4571:6;4527:71;:::i;:::-;4383:222;;;;:::o;4611:169::-;4695:11;4729:6;4724:3;4717:19;4769:4;4764:3;4760:14;4745:29;;4611:169;;;;:::o;4786:182::-;4926:34;4922:1;4914:6;4910:14;4903:58;4786:182;:::o;4974:366::-;5116:3;5137:67;5201:2;5196:3;5137:67;:::i;:::-;5130:74;;5213:93;5302:3;5213:93;:::i;:::-;5331:2;5326:3;5322:12;5315:19;;4974:366;;;:::o;5346:419::-;5512:4;5550:2;5539:9;5535:18;5527:26;;5599:9;5593:4;5589:20;5585:1;5574:9;5570:17;5563:47;5627:131;5753:4;5627:131;:::i;:::-;5619:139;;5346:419;;;:::o;5771:180::-;5819:77;5816:1;5809:88;5916:4;5913:1;5906:15;5940:4;5937:1;5930:15;5957:180;6005:77;6002:1;5995:88;6102:4;6099:1;6092:15;6126:4;6123:1;6116:15;6143:185;6183:1;6200:20;6218:1;6200:20;:::i;:::-;6195:25;;6234:20;6252:1;6234:20;:::i;:::-;6229:25;;6273:1;6263:35;;6278:18;;:::i;:::-;6263:35;6320:1;6317;6313:9;6308:14;;6143:185;;;;:::o;6334:191::-;6374:3;6393:20;6411:1;6393:20;:::i;:::-;6388:25;;6427:20;6445:1;6427:20;:::i;:::-;6422:25;;6470:1;6467;6463:9;6456:16;;6491:3;6488:1;6485:10;6482:36;;;6498:18;;:::i;:::-;6482:36;6334:191;;;;:::o;6531:442::-;6680:4;6718:2;6707:9;6703:18;6695:26;;6731:71;6799:1;6788:9;6784:17;6775:6;6731:71;:::i;:::-;6812:72;6880:2;6869:9;6865:18;6856:6;6812:72;:::i;:::-;6894;6962:2;6951:9;6947:18;6938:6;6894:72;:::i;:::-;6531:442;;;;;;:::o;6979:233::-;7018:3;7041:24;7059:5;7041:24;:::i;:::-;7032:33;;7087:66;7080:5;7077:77;7074:103;;7157:18;;:::i;:::-;7074:103;7204:1;7197:5;7193:13;7186:20;;6979:233;;;:::o;7218:172::-;7358:24;7354:1;7346:6;7342:14;7335:48;7218:172;:::o;7396:366::-;7538:3;7559:67;7623:2;7618:3;7559:67;:::i;:::-;7552:74;;7635:93;7724:3;7635:93;:::i;:::-;7753:2;7748:3;7744:12;7737:19;;7396:366;;;:::o;7768:419::-;7934:4;7972:2;7961:9;7957:18;7949:26;;8021:9;8015:4;8011:20;8007:1;7996:9;7992:17;7985:47;8049:131;8175:4;8049:131;:::i;:::-;8041:139;;7768:419;;;:::o;8193:171::-;8232:3;8255:24;8273:5;8255:24;:::i;:::-;8246:33;;8301:4;8294:5;8291:15;8288:41;;8309:18;;:::i;:::-;8288:41;8356:1;8349:5;8345:13;8338:20;;8193:171;;;:::o;8370:194::-;8410:4;8430:20;8448:1;8430:20;:::i;:::-;8425:25;;8464:20;8482:1;8464:20;:::i;:::-;8459:25;;8508:1;8505;8501:9;8493:17;;8532:1;8526:4;8523:11;8520:37;;;8537:18;;:::i;:::-;8520:37;8370:194;;;;:::o;8570:332::-;8691:4;8729:2;8718:9;8714:18;8706:26;;8742:71;8810:1;8799:9;8795:17;8786:6;8742:71;:::i;:::-;8823:72;8891:2;8880:9;8876:18;8867:6;8823:72;:::i;:::-;8570:332;;;;;:::o;8908:90::-;8942:7;8985:5;8978:13;8971:21;8960:32;;8908:90;;;:::o;9004:116::-;9074:21;9089:5;9074:21;:::i;:::-;9067:5;9064:32;9054:60;;9110:1;9107;9100:12;9054:60;9004:116;:::o;9126:137::-;9180:5;9211:6;9205:13;9196:22;;9227:30;9251:5;9227:30;:::i;:::-;9126:137;;;;:::o;9269:345::-;9336:6;9385:2;9373:9;9364:7;9360:23;9356:32;9353:119;;;9391:79;;:::i;:::-;9353:119;9511:1;9536:61;9589:7;9580:6;9569:9;9565:22;9536:61;:::i;:::-;9526:71;;9482:125;9269:345;;;;:::o;9620:233::-;9760:34;9756:1;9748:6;9744:14;9737:58;9829:16;9824:2;9816:6;9812:15;9805:41;9620:233;:::o;9859:366::-;10001:3;10022:67;10086:2;10081:3;10022:67;:::i;:::-;10015:74;;10098:93;10187:3;10098:93;:::i;:::-;10216:2;10211:3;10207:12;10200:19;;9859:366;;;:::o;10231:419::-;10397:4;10435:2;10424:9;10420:18;10412:26;;10484:9;10478:4;10474:20;10470:1;10459:9;10455:17;10448:47;10512:131;10638:4;10512:131;:::i;:::-;10504:139;;10231:419;;;:::o;10656:225::-;10796:34;10792:1;10784:6;10780:14;10773:58;10865:8;10860:2;10852:6;10848:15;10841:33;10656:225;:::o;10887:366::-;11029:3;11050:67;11114:2;11109:3;11050:67;:::i;:::-;11043:74;;11126:93;11215:3;11126:93;:::i;:::-;11244:2;11239:3;11235:12;11228:19;;10887:366;;;:::o;11259:419::-;11425:4;11463:2;11452:9;11448:18;11440:26;;11512:9;11506:4;11502:20;11498:1;11487:9;11483:17;11476:47;11540:131;11666:4;11540:131;:::i;:::-;11532:139;;11259:419;;;:::o;11684:410::-;11724:7;11747:20;11765:1;11747:20;:::i;:::-;11742:25;;11781:20;11799:1;11781:20;:::i;:::-;11776:25;;11836:1;11833;11829:9;11858:30;11876:11;11858:30;:::i;:::-;11847:41;;12037:1;12028:7;12024:15;12021:1;12018:22;11998:1;11991:9;11971:83;11948:139;;12067:18;;:::i;:::-;11948:139;11732:362;11684:410;;;;:::o;12100:372::-;12139:4;12159:19;12176:1;12159:19;:::i;:::-;12154:24;;12192:19;12209:1;12192:19;:::i;:::-;12187:24;;12235:1;12232;12228:9;12220:17;;12429:1;12423:4;12419:12;12415:1;12412;12408:9;12404:28;12387:1;12381:4;12377:12;12372:1;12369;12365:9;12358:17;12354:36;12338:104;12335:130;;;12445:18;;:::i;:::-;12335:130;12100:372;;;;:::o;12478:182::-;12618:34;12614:1;12606:6;12602:14;12595:58;12478:182;:::o;12666:366::-;12808:3;12829:67;12893:2;12888:3;12829:67;:::i;:::-;12822:74;;12905:93;12994:3;12905:93;:::i;:::-;13023:2;13018:3;13014:12;13007:19;;12666:366;;;:::o;13038:419::-;13204:4;13242:2;13231:9;13227:18;13219:26;;13291:9;13285:4;13281:20;13277:1;13266:9;13262:17;13255:47;13319:131;13445:4;13319:131;:::i;:::-;13311:139;;13038:419;;;:::o;13463:442::-;13612:4;13650:2;13639:9;13635:18;13627:26;;13663:71;13731:1;13720:9;13716:17;13707:6;13663:71;:::i;:::-;13744:72;13812:2;13801:9;13797:18;13788:6;13744:72;:::i;:::-;13826;13894:2;13883:9;13879:18;13870:6;13826:72;:::i;:::-;13463:442;;;;;;:::o;13911:375::-;13950:3;13969:19;13986:1;13969:19;:::i;:::-;13964:24;;14002:19;14019:1;14002:19;:::i;:::-;13997:24;;14044:1;14041;14037:9;14030:16;;14242:1;14237:3;14233:11;14226:19;14222:1;14219;14215:9;14211:35;14194:1;14189:3;14185:11;14180:1;14177;14173:9;14166:17;14162:35;14146:110;14143:136;;;14259:18;;:::i;:::-;14143:136;13911:375;;;;:::o;14292:229::-;14432:34;14428:1;14420:6;14416:14;14409:58;14501:12;14496:2;14488:6;14484:15;14477:37;14292:229;:::o;14527:366::-;14669:3;14690:67;14754:2;14749:3;14690:67;:::i;:::-;14683:74;;14766:93;14855:3;14766:93;:::i;:::-;14884:2;14879:3;14875:12;14868:19;;14527:366;;;:::o;14899:419::-;15065:4;15103:2;15092:9;15088:18;15080:26;;15152:9;15146:4;15142:20;15138:1;15127:9;15123:17;15116:47;15180:131;15306:4;15180:131;:::i;:::-;15172:139;;14899:419;;;:::o;15324:225::-;15464:34;15460:1;15452:6;15448:14;15441:58;15533:8;15528:2;15520:6;15516:15;15509:33;15324:225;:::o;15555:366::-;15697:3;15718:67;15782:2;15777:3;15718:67;:::i;:::-;15711:74;;15794:93;15883:3;15794:93;:::i;:::-;15912:2;15907:3;15903:12;15896:19;;15555:366;;;:::o;15927:419::-;16093:4;16131:2;16120:9;16116:18;16108:26;;16180:9;16174:4;16170:20;16166:1;16155:9;16151:17;16144:47;16208:131;16334:4;16208:131;:::i;:::-;16200:139;;15927:419;;;:::o;16352:179::-;16492:31;16488:1;16480:6;16476:14;16469:55;16352:179;:::o;16537:366::-;16679:3;16700:67;16764:2;16759:3;16700:67;:::i;:::-;16693:74;;16776:93;16865:3;16776:93;:::i;:::-;16894:2;16889:3;16885:12;16878:19;;16537:366;;;:::o;16909:419::-;17075:4;17113:2;17102:9;17098:18;17090:26;;17162:9;17156:4;17152:20;17148:1;17137:9;17133:17;17126:47;17190:131;17316:4;17190:131;:::i;:::-;17182:139;;16909:419;;;:::o;17334:98::-;17385:6;17419:5;17413:12;17403:22;;17334:98;;;:::o;17438:147::-;17539:11;17576:3;17561:18;;17438:147;;;;:::o;17591:246::-;17672:1;17682:113;17696:6;17693:1;17690:13;17682:113;;;17781:1;17776:3;17772:11;17766:18;17762:1;17757:3;17753:11;17746:39;17718:2;17715:1;17711:10;17706:15;;17682:113;;;17829:1;17820:6;17815:3;17811:16;17804:27;17653:184;17591:246;;;:::o;17843:386::-;17947:3;17975:38;18007:5;17975:38;:::i;:::-;18029:88;18110:6;18105:3;18029:88;:::i;:::-;18022:95;;18126:65;18184:6;18179:3;18172:4;18165:5;18161:16;18126:65;:::i;:::-;18216:6;18211:3;18207:16;18200:23;;17951:278;17843:386;;;;:::o;18235:271::-;18365:3;18387:93;18476:3;18467:6;18387:93;:::i;:::-;18380:100;;18497:3;18490:10;;18235:271;;;;:::o;18512:99::-;18564:6;18598:5;18592:12;18582:22;;18512:99;;;:::o;18617:102::-;18658:6;18709:2;18705:7;18700:2;18693:5;18689:14;18685:28;18675:38;;18617:102;;;:::o;18725:377::-;18813:3;18841:39;18874:5;18841:39;:::i;:::-;18896:71;18960:6;18955:3;18896:71;:::i;:::-;18889:78;;18976:65;19034:6;19029:3;19022:4;19015:5;19011:16;18976:65;:::i;:::-;19066:29;19088:6;19066:29;:::i;:::-;19061:3;19057:39;19050:46;;18817:285;18725:377;;;;:::o;19108:313::-;19221:4;19259:2;19248:9;19244:18;19236:26;;19308:9;19302:4;19298:20;19294:1;19283:9;19279:17;19272:47;19336:78;19409:4;19400:6;19336:78;:::i;:::-;19328:86;;19108:313;;;;:::o
Swarm Source
ipfs://92b66baa8adc029c5a845f0cc162e4f4e532f984b17480092871e606b025545c
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
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.