Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 53 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Redeem | 15805162 | 1214 days ago | IN | 0 ETH | 0.00340919 | ||||
| Redeem | 14373250 | 1438 days ago | IN | 0 ETH | 0.00371835 | ||||
| Redeem | 14373236 | 1438 days ago | IN | 0 ETH | 0.00406879 | ||||
| Redeem | 13990201 | 1497 days ago | IN | 0 ETH | 0.0177265 | ||||
| Redeem | 13321484 | 1602 days ago | IN | 0 ETH | 0.00806592 | ||||
| Redeem | 13230712 | 1616 days ago | IN | 0 ETH | 0.00753841 | ||||
| Approve | 13197655 | 1621 days ago | IN | 0 ETH | 0.00305725 | ||||
| Deposit | 13197648 | 1621 days ago | IN | 0 ETH | 0.02054112 | ||||
| Deposit | 13187361 | 1623 days ago | IN | 0 ETH | 0.03764895 | ||||
| Redeem | 13137076 | 1630 days ago | IN | 0 ETH | 0.01230713 | ||||
| Deposit | 13081552 | 1639 days ago | IN | 0 ETH | 0.00940963 | ||||
| Redeem | 13073572 | 1640 days ago | IN | 0 ETH | 0.00228277 | ||||
| Redeem | 13026458 | 1648 days ago | IN | 0 ETH | 0.0037615 | ||||
| Redeem | 12998863 | 1652 days ago | IN | 0 ETH | 0.00969797 | ||||
| Approve | 12938056 | 1661 days ago | IN | 0 ETH | 0.00116325 | ||||
| Deposit | 12938050 | 1661 days ago | IN | 0 ETH | 0.00623225 | ||||
| Approve | 12923330 | 1664 days ago | IN | 0 ETH | 0.00125631 | ||||
| Approve | 12921334 | 1664 days ago | IN | 0 ETH | 0.0013959 | ||||
| Approve | 12901347 | 1667 days ago | IN | 0 ETH | 0.00092129 | ||||
| Approve | 12881894 | 1670 days ago | IN | 0 ETH | 0.00055836 | ||||
| Redeem | 12869304 | 1672 days ago | IN | 0 ETH | 0.00149388 | ||||
| Deposit | 12865934 | 1673 days ago | IN | 0 ETH | 0.00407915 | ||||
| Approve | 12858175 | 1674 days ago | IN | 0 ETH | 0.0018612 | ||||
| Approve | 12839930 | 1677 days ago | IN | 0 ETH | 0.00120978 | ||||
| Redeem | 12836803 | 1677 days ago | IN | 0 ETH | 0.00473977 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
zsToken
Compiler Version
v0.6.6+commit.6c089d02
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2021-07-03
*/
// SPDX-License-Identifier: MIT
// File: @openzeppelin/contracts/GSN/Context.sol
pragma solidity ^0.6.0;
/*
* Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with GSN meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address payable) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes memory) {
this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
return msg.data;
}
}
// File: @openzeppelin/contracts/token/ERC20/IERC20.sol
pragma solidity ^0.6.0;
/**
* Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* 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);
/**
* 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);
/**
* 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);
/**
* 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);
function decimals() external view returns (uint8);
/**
* 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);
/**
* Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
}
// File: @openzeppelin/contracts/math/SafeMath.sol
pragma solidity ^0.6.0;
/**
* Wrappers over Solidity's arithmetic operations with added overflow
* checks.
*
* Arithmetic operations in Solidity wrap on overflow. This can easily result
* in bugs, because programmers usually assume that an overflow raises an
* error, which is the standard behavior in high level programming languages.
* `SafeMath` restores this intuition by reverting the transaction when an
* operation overflows.
*
* Using this library instead of the unchecked operations eliminates an entire
* class of bugs, so it's recommended to use it always.
*/
library SafeMath {
/**
* Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
*
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
/**
* Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return sub(a, b, "SafeMath: subtraction overflow");
}
/**
* Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b <= a, errorMessage);
uint256 c = a - b;
return c;
}
/**
* Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
*
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
/**
* Returns the integer division of two unsigned integers. Reverts on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return div(a, b, "SafeMath: division by zero");
}
/**
* Returns the integer division of two unsigned integers. Reverts with custom message on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b > 0, errorMessage);
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
/**
* Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return mod(a, b, "SafeMath: modulo by zero");
}
/**
* Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts with custom message when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b != 0, errorMessage);
return a % b;
}
}
// File: @openzeppelin/contracts/utils/Address.sol
pragma solidity ^0.6.2;
/**
* Collection of functions related to the address type
*/
library Address {
/**
* Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*/
function isContract(address account) internal view returns (bool) {
// According to EIP-1052, 0x0 is the value returned for not-yet created accounts
// and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
// for accounts without code, i.e. `keccak256('')`
bytes32 codehash;
bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
// solhint-disable-next-line no-inline-assembly
assembly { codehash := extcodehash(account) }
return (codehash != accountHash && codehash != 0x0);
}
/**
* Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
// solhint-disable-next-line avoid-low-level-calls, avoid-call-value
(bool success, ) = recipient.call{ value: amount }("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* 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");
}
/**
* 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);
}
/**
* 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");
}
/**
* 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");
return _functionCallWithValue(target, data, value, errorMessage);
}
function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
require(isContract(target), "Address: call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
// solhint-disable-next-line no-inline-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
// File: @openzeppelin/contracts/token/ERC20/ERC20.sol
pragma solidity ^0.6.0;
/**
* Implementation of the {IERC20} interface.
*
* This implementation is agnostic to the way tokens are created. This means
* that a supply mechanism has to be added in a derived contract using {_mint}.
* For a generic mechanism see {ERC20PresetMinterPauser}.
*
* TIP: For a detailed writeup see our guide
* https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
* to implement supply mechanisms].
*
* We have followed general OpenZeppelin guidelines: functions revert instead
* of returning `false` on failure. This behavior is nonetheless conventional
* and does not conflict with the expectations of ERC20 applications.
*
* Additionally, an {Approval} event is emitted on calls to {transferFrom}.
* This allows applications to reconstruct the allowance for all accounts just
* by listening to said events. Other implementations of the EIP may not emit
* these events, as it isn't required by the specification.
*
* Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
* functions have been added to mitigate the well-known issues around setting
* allowances. See {IERC20-approve}.
*/
contract ERC20 is Context, IERC20 {
using SafeMath for uint256;
using Address for address;
mapping (address => uint256) private _balances;
mapping (address => mapping (address => uint256)) private _allowances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
uint8 private _decimals;
/**
* Sets the values for {name} and {symbol}, initializes {decimals} with
* a default value of 18.
*
* To select a different value for {decimals}, use {_setupDecimals}.
*
* All three of these values are immutable: they can only be set once during
* construction.
*/
constructor (string memory name, string memory symbol) public {
_name = name;
_symbol = symbol;
_decimals = 18;
}
/**
* Returns the name of the token.
*/
function name() public view returns (string memory) {
return _name;
}
/**
* Returns the symbol of the token, usually a shorter version of the
* name.
*/
function symbol() public view returns (string memory) {
return _symbol;
}
/**
* Returns the number of decimals used to get its user representation.
* For example, if `decimals` equals `2`, a balance of `505` tokens should
* be displayed to a user as `5,05` (`505 / 10 ** 2`).
*
* Tokens usually opt for a value of 18, imitating the relationship between
* Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is
* called.
*
* NOTE: This information is only used for _display_ purposes: it in
* no way affects any of the arithmetic of the contract, including
* {IERC20-balanceOf} and {IERC20-transfer}.
*/
function decimals() public view override returns (uint8) {
return _decimals;
}
/**
* See {IERC20-totalSupply}.
*/
function totalSupply() public view override returns (uint256) {
return _totalSupply;
}
/**
* See {IERC20-balanceOf}.
*/
function balanceOf(address account) public view override returns (uint256) {
return _balances[account];
}
/**
* See {IERC20-transfer}.
*
* Requirements:
*
* - `recipient` cannot be the zero address.
* - the caller must have a balance of at least `amount`.
*/
function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
_transfer(_msgSender(), recipient, amount);
return true;
}
/**
* See {IERC20-allowance}.
*/
function allowance(address owner, address spender) public view virtual override returns (uint256) {
return _allowances[owner][spender];
}
/**
* See {IERC20-approve}.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function approve(address spender, uint256 amount) public virtual override returns (bool) {
_approve(_msgSender(), spender, amount);
return true;
}
/**
* See {IERC20-transferFrom}.
*
* Emits an {Approval} event indicating the updated allowance. This is not
* required by the EIP. See the note at the beginning of {ERC20};
*
* Requirements:
* - `sender` and `recipient` cannot be the zero address.
* - `sender` must have a balance of at least `amount`.
* - the caller must have allowance for ``sender``'s tokens of at least
* `amount`.
*/
function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {
_transfer(sender, recipient, amount);
_approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
return true;
}
/**
* Atomically increases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
_approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
return true;
}
/**
* Atomically decreases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
* - `spender` must have allowance for the caller of at least
* `subtractedValue`.
*/
function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
_approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
return true;
}
/**
* Moves tokens `amount` from `sender` to `recipient`.
*
* This is internal function is equivalent to {transfer}, and can be used to
* e.g. implement automatic token fees, slashing mechanisms, etc.
*
* Emits a {Transfer} event.
*
* Requirements:
*
* - `sender` cannot be the zero address.
* - `recipient` cannot be the zero address.
* - `sender` must have a balance of at least `amount`.
*/
function _transfer(address sender, address recipient, uint256 amount) internal virtual {
require(sender != address(0), "ERC20: transfer from the zero address");
require(recipient != address(0), "ERC20: transfer to the zero address");
_balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
_balances[recipient] = _balances[recipient].add(amount);
emit Transfer(sender, recipient, amount);
}
/** Creates `amount` tokens and assigns them to `account`, increasing
* the total supply.
*
* Emits a {Transfer} event with `from` set to the zero address.
*
* Requirements
*
* - `to` cannot be the zero address.
*/
function _mint(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: mint to the zero address");
_totalSupply = _totalSupply.add(amount);
_balances[account] = _balances[account].add(amount);
emit Transfer(address(0), account, amount);
}
/**
* Destroys `amount` tokens from `account`, reducing the
* total supply.
*
* Emits a {Transfer} event with `to` set to the zero address.
*
* Requirements
*
* - `account` cannot be the zero address.
* - `account` must have at least `amount` tokens.
*/
function _burn(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: burn from the zero address");
_balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
_totalSupply = _totalSupply.sub(amount);
emit Transfer(account, address(0), amount);
}
/**
* Sets `amount` as the allowance of `spender` over the `owner`s tokens.
*
* This is internal function is equivalent to `approve`, and can be used to
* e.g. set automatic allowances for certain subsystems, etc.
*
* Emits an {Approval} event.
*
* Requirements:
*
* - `owner` cannot be the zero address.
* - `spender` cannot be the zero address.
*/
function _approve(address owner, address spender, uint256 amount) internal virtual {
require(owner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
/**
* Sets {decimals} to a value other than the default one of 18.
*
* WARNING: This function should only be called from the constructor. Most
* applications that interact with token contracts will not expect
* {decimals} to ever change, and may work incorrectly if it does.
*/
function _setupDecimals(uint8 decimals_) internal {
_decimals = decimals_;
}
}
// File: @openzeppelin/contracts/access/Ownable.sol
pragma solidity ^0.6.0;
/**
* 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.
*/
contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* Initializes the contract setting the deployer as the initial owner.
*/
constructor () internal {
address msgSender = _msgSender();
_owner = msgSender;
emit OwnershipTransferred(address(0), msgSender);
}
/**
* Returns the address of the current owner.
*/
function governance() public view returns (address) {
return _owner;
}
/**
* Throws if called by any account other than the owner.
*/
modifier onlyGovernance() {
require(_owner == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferGovernance(address newOwner) internal virtual onlyGovernance {
require(newOwner != address(0), "Ownable: new owner is the zero address");
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
}
library SafeERC20 {
using SafeMath for uint256;
using Address for address;
function safeTransfer(IERC20 token, address to, uint256 value) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
}
function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
}
/**
* @dev Deprecated. This function has issues similar to the ones found in
* {IERC20-approve}, and its usage is discouraged.
*
* Whenever possible, use {safeIncreaseAllowance} and
* {safeDecreaseAllowance} instead.
*/
function safeApprove(IERC20 token, address spender, uint256 value) internal {
// safeApprove should only be called when setting an initial allowance,
// or when resetting it to zero. To increase and decrease it, use
// 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
// solhint-disable-next-line max-line-length
require((value == 0) || (token.allowance(address(this), spender) == 0),
"SafeERC20: approve from non-zero to non-zero allowance"
);
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
}
function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
uint256 newAllowance = token.allowance(address(this), spender).add(value);
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero");
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
/**
* @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
* on the return value: the return value is optional (but if data is returned, it must not be false).
* @param token The token targeted by the call.
* @param data The call data (encoded using abi.encode or one of its variants).
*/
function _callOptionalReturn(IERC20 token, bytes memory data) private {
// We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
// we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
// the target address contains contract code and also asserts for success in the low-level call.
bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
if (returndata.length > 0) { // Return data is optional
// solhint-disable-next-line max-line-length
require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
}
}
}
contract ReentrancyGuard {
// Booleans are more expensive than uint256 or any type that takes up a full
// word because each write operation emits an extra SLOAD to first read the
// slot's contents, replace the bits taken up by the boolean, and then write
// back. This is the compiler's defense against contract upgrades and
// pointer aliasing, and it cannot be disabled.
// The values being non-zero value makes deployment a bit more expensive,
// but in exchange the refund on every call to nonReentrant will be lower in
// amount. Since refunds are capped to a percentage of the total
// transaction's gas, it is best to keep them low in cases like this one, to
// increase the likelihood of the full refund coming into effect.
uint256 private constant _NOT_ENTERED = 1;
uint256 private constant _ENTERED = 2;
uint256 private _status;
constructor () internal {
_status = _NOT_ENTERED;
}
/**
* @dev Prevents a contract from calling itself, directly or indirectly.
* Calling a `nonReentrant` function from another `nonReentrant`
* function is not supported. It is possible to prevent this from happening
* by making the `nonReentrant` function external, and make it call a
* `private` function that does the actual work.
*/
modifier nonReentrant() {
// On the first call to nonReentrant, _notEntered will be true
require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
// Any calls to nonReentrant after this point will fail
_status = _ENTERED;
_;
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
_status = _NOT_ENTERED;
}
}
// File: contracts/zs-REETH.sol
// zsTokens are Stabilize proxy tokens that serve as receipts for deposits into Stabilize strategies
// zsTokens should increase in value if the strategy it uses is profitable
// When someone deposits into the zsToken contract, tokens are minted and when they redeem, tokens are burned
// Users by default withdraw from main pool before collateral pool
interface StabilizeStrategy {
function rewardTokensCount() external view returns (uint256);
function rewardTokenAddress(uint256) external view returns (address);
function withdrawTokenReserves() external view returns (address, uint256);
function balance() external view returns (uint256);
function pricePerToken() external view returns (uint256);
function enter() external;
function exit() external;
function deposit(bool) external;
function withdraw(address, uint256, uint256, bool) external returns (uint256); // Will withdraw to the address specified a percent of total shares
}
interface PriceOracle {
function getLatestREETHPrice() external view returns (uint256);
function updateREETHPrice() external;
}
pragma solidity =0.6.6;
contract zsToken is ERC20("Stabilize Strategy REETH", "zs-REETH"), Ownable, ReentrancyGuard {
using SafeERC20 for IERC20;
// Variables
uint256 constant DIVISION_FACTOR = 100000;
address constant WETH_ADDRESS = address(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2); // WETH address
// This token container doesn't have a fee but the underlying strategies may for REETH
// This wrapper takes into account the value of REETH compared to the collateral
// Using the price oracle, we convert ETH in the strategy to reeth equivalent to determine the balance
// When withdrawing and depositing, this equivalent will be used to determine how much zs tokens to mint
// And how much eth to withdraw
// Info of each user.
struct UserInfo {
uint256 depositTime; // The time the user made the last deposit
uint256 shareEstimate;
}
mapping(address => UserInfo) private userInfo;
// Token information
// This is a single asset wrapper that only accepts main token
// REETH, ETH
struct TokenInfo {
IERC20 token; // Reference of token
uint256 decimals; // Decimals of token
}
TokenInfo[] private tokenList; // An array of tokens accepted as deposits
bool public depositsOpen = true; // Governance can open or close deposits without timelock, cannot block withdrawals
// Strategy information
StabilizeStrategy private currentStrategy; // This will be the contract for the strategy
address private _pendingStrategy;
address public reethPriceOracle;
// Events
event Wrapped(address indexed user, uint256 amount);
event Unwrapped(address indexed user, uint256 amount);
constructor (address _reeth, address _oracle) public {
reethPriceOracle = _oracle;
setupWithdrawTokens(_reeth);
}
function setupWithdrawTokens(address _reeth) internal {
// Start with REETH
IERC20 _token = IERC20(address(_reeth));
tokenList.push(
TokenInfo({
token: _token,
decimals: _token.decimals()
})
);
// WETH
_token = IERC20(address(WETH_ADDRESS));
tokenList.push(
TokenInfo({
token: _token,
decimals: _token.decimals()
})
);
}
function getCurrentStrategy() external view returns (address) {
return address(currentStrategy);
}
function getPendingStrategy() external view returns (address) {
return _pendingStrategy;
}
function underlyingAsset() public pure returns (address) {
// Can be used if staking in the STBZ pool
return WETH_ADDRESS;
}
function underlyingDepositAssets() public view returns (address[] memory) {
// Returns all addresses accepted by this token vault
address[] memory addresses = new address[](tokenList.length);
uint256 length = tokenList.length;
for(uint256 i = 0; i < length; i++){
addresses[i] = address(tokenList[i].token);
}
return addresses;
}
function ethInReethUnits(uint256 _amount) internal view returns (uint256) {
if(_amount == 0){return 0;}
uint256 reethPrice = 1e18;
if(reethPriceOracle != address(0)){
reethPrice = PriceOracle(reethPriceOracle).getLatestREETHPrice();
if(reethPrice == 0){
reethPrice = 1e18; // Set the price to the same
}
}
_amount = _amount.mul(10**tokenList[0].decimals).div(10**tokenList[1].decimals); // Convert to reeth decimals
_amount = _amount.mul(1e18).div(reethPrice);
return _amount;
}
function reethInEthUnits(uint256 _amount) internal view returns (uint256) {
if(_amount == 0){return 0;}
uint256 reethPrice = 1e18;
if(reethPriceOracle != address(0)){
reethPrice = PriceOracle(reethPriceOracle).getLatestREETHPrice();
if(reethPrice == 0){
reethPrice = 1e18; // Set the price to the same
}
}
_amount = _amount.mul(10**tokenList[1].decimals).div(10**tokenList[0].decimals); // Convert to eth decimals
_amount = _amount.mul(reethPrice).div(1e18);
return _amount;
}
function pricePerToken() public view returns (uint256) {
if(totalSupply() == 0){
return 1e18; // Shown in Wei units
}else{
return uint256(1e18).mul(valueOfVaultAndStrategy()).div(totalSupply());
}
}
function getNormalizedTotalBalance(address _address) public view returns (uint256) {
// Get reeth at address and eth in reeth units based on price oracle
uint256 _balance = 0;
for(uint256 i = 0; i < tokenList.length; i++){
uint256 _bal = tokenList[i].token.balanceOf(_address);
if(i > 0){
_bal = ethInReethUnits(_bal); // Convert to reeth units
}
_bal = _bal.mul(1e18).div(10**tokenList[0].decimals);
_balance = _balance.add(_bal); // This has been normalized to 1e18 decimals
}
return _balance;
}
function valueOfVaultAndStrategy() public view returns (uint256) { // The total value of the tokens
uint256 balance = getNormalizedTotalBalance(address(this)); // Get tokens stored in this contract
if(currentStrategy != StabilizeStrategy(address(0))){
balance += currentStrategy.balance(); // And tokens stored at the strategy
}
return balance;
}
function withdrawTokenReserves() public view returns (address, uint256) {
// This function will return the address and amount of the token of main token, and if none available, the collateral asset
if(currentStrategy != StabilizeStrategy(address(0))){
return currentStrategy.withdrawTokenReserves();
}else{
if(tokenList[0].token.balanceOf(address(this)) > 0){
return (address(tokenList[0].token), tokenList[0].token.balanceOf(address(this)));
}else if(tokenList[1].token.balanceOf(address(this)) > 0){
return (address(tokenList[1].token), tokenList[1].token.balanceOf(address(this)));
}else{
return (address(0), 0); // No balance
}
}
}
// Now handle deposits into the strategy
function deposit(uint256 amount) public nonReentrant {
require(reethPriceOracle != address(0), "Price oracle not set, can't deposit");
PriceOracle(reethPriceOracle).updateREETHPrice(); // Update to latest price
uint256 total = valueOfVaultAndStrategy(); // Get token equivalent at strategy and here if applicable as normalized
require(depositsOpen == true, "Deposits have been suspended, but you can still withdraw");
require(currentStrategy != StabilizeStrategy(address(0)),"No strategy contract has been selected yet");
IERC20 _token = tokenList[0].token; // Trusted tokens
uint256 _before = _token.balanceOf(address(this));
_token.safeTransferFrom(_msgSender(), address(this), amount); // Transfer token to this address
amount = _token.balanceOf(address(this)).sub(_before); // Some tokens lose amount (transfer fee) upon transfer
require(amount > 0, "Cannot deposit 0");
bool nonContract = false;
if(tx.origin == _msgSender()){
nonContract = true; // The sender is not a contract
}
uint256 _strategyBalance = currentStrategy.balance(); // Will get the balance of the value of the main tokens at the strategy
// Now call the strategy to deposit
pushTokensToStrategy(); // Push any strategy tokens here into the strategy
currentStrategy.deposit(nonContract); // Activate strategy deposit
require(currentStrategy.balance() > _strategyBalance, "No change in strategy balance"); // Balance should increase
uint256 normalizedAmount = amount.mul(1e18).div(10**tokenList[0].decimals); // Make sure everything is same units
uint256 mintAmount = normalizedAmount;
if(totalSupply() > 0){
// There is already a balance here, calculate our share
mintAmount = normalizedAmount.mul(totalSupply()).div(total); // Our share of the total
}
_mint(_msgSender(),mintAmount); // Now mint new zs-token to the depositor
// Add the user information
userInfo[_msgSender()].depositTime = now;
userInfo[_msgSender()].shareEstimate = userInfo[_msgSender()].shareEstimate.add(mintAmount);
emit Wrapped(_msgSender(), amount);
}
function redeem(uint256 share) public nonReentrant {
if(reethPriceOracle != address(0)){
PriceOracle(reethPriceOracle).updateREETHPrice(); // Update to latest price
}
// Essentially withdraw our equivalent share of the pool based on share value
// Users cannot choose which token they get. They get main token then collateral if available
require(share > 0, "Cannot withdraw 0");
require(totalSupply() > 0, "No value redeemable");
uint256 tokenTotal = totalSupply();
// Now burn the token
_burn(_msgSender(),share); // Burn the amount, will fail if user doesn't have enough
bool nonContract = false;
if(tx.origin == _msgSender()){
nonContract = true; // The sender is not a contract, we will allow market sells and buys
}else{
// This is a contract redeeming
require(userInfo[_msgSender()].depositTime < now && userInfo[_msgSender()].depositTime > 0, "Contract depositor cannot redeem in same transaction");
}
// Update user information
if(share <= userInfo[_msgSender()].shareEstimate){
userInfo[_msgSender()].shareEstimate = userInfo[_msgSender()].shareEstimate.sub(share);
}else{
// Share is greater than our share estimate, can happen if tokens are transferred
userInfo[_msgSender()].shareEstimate = 0;
require(nonContract == true, "Contract depositors cannot take out more than what they put in");
}
uint256 withdrawAmount = 0;
if(currentStrategy != StabilizeStrategy(address(0))){
withdrawAmount = currentStrategy.withdraw(_msgSender(), share, tokenTotal, nonContract); // Returns the amount of underlying removed
require(withdrawAmount > 0, "Failed to withdraw from the strategy");
}else{
// Pull directly from this contract the token amount in relation to the share if strategy not used
if(share < tokenTotal){
uint256 _balance = getNormalizedTotalBalance(address(this));
uint256 _myBalance = _balance.mul(share).div(tokenTotal); // This is in reeth units normalized
withdrawPerOrderWithOracle(_msgSender(), _myBalance, false); // This will withdraw based on token balanace
withdrawAmount = _myBalance;
}else{
// We are all shares, transfer all
uint256 _balance = getNormalizedTotalBalance(address(this)); // This is in reeth units normalized
withdrawPerOrderWithOracle(_msgSender(), _balance, true);
withdrawAmount = _balance;
}
}
emit Unwrapped(_msgSender(), withdrawAmount);
}
// This will withdraw the tokens from the contract based on order, essentially main token then collateral
function withdrawPerOrderWithOracle(address _receiver, uint256 _withdrawAmount, bool _takeAll) internal {
uint256 length = tokenList.length;
if(_takeAll == true){
// Send the entire balance
for(uint256 i = 0; i < length; i++){
uint256 _bal = tokenList[i].token.balanceOf(address(this));
if(_bal > 0){
tokenList[i].token.safeTransfer(_receiver, _bal);
}
}
return;
}
for(uint256 i = 0; i < length; i++){
// Determine the balance left
uint256 _normalizedBalance = tokenList[i].token.balanceOf(address(this));
if(i == 0){
_normalizedBalance = _normalizedBalance.mul(1e18).div(10**tokenList[0].decimals); // Convert reeth to normalized
}else if(i == 1){
// ETH
_normalizedBalance = ethInReethUnits(_normalizedBalance); // Convert ETH to REETH units
// Then normalize REETH units
_normalizedBalance = _normalizedBalance.mul(1e18).div(10**tokenList[0].decimals);
}
if(_normalizedBalance <= _withdrawAmount){
// Withdraw the entire balance of this token
if(_normalizedBalance > 0){
_withdrawAmount = _withdrawAmount.sub(_normalizedBalance);
tokenList[i].token.safeTransfer(_receiver, tokenList[i].token.balanceOf(address(this)));
}
}else{
// Withdraw a partial amount of this token
if(_withdrawAmount > 0){
// Convert the withdraw amount to the reeth decimal amount
uint256 _balance = _withdrawAmount.mul(10**tokenList[0].decimals).div(1e18);
if(i == 1){
// If ETH then convert REETH units to ETH
_balance = reethInEthUnits(_balance);
}
_withdrawAmount = 0;
tokenList[i].token.safeTransfer(_receiver, _balance);
}
break; // Nothing more to withdraw
}
}
}
// Governance functions
// Stop/start all deposits, no timelock required
// --------------------
function stopDeposits() external onlyGovernance {
depositsOpen = false;
}
function startDeposits() external onlyGovernance {
depositsOpen = true;
}
// A function used in case of strategy failure, possibly due to bug in the platform our strategy is using, governance can stop using it quick
function emergencyStopStrategy() external onlyGovernance {
depositsOpen = false;
if(currentStrategy != StabilizeStrategy(address(0)) && totalSupply() > 0){
currentStrategy.exit(); // Pulls all the tokens and accessory tokens from the strategy
}
currentStrategy = StabilizeStrategy(address(0));
_timelockType = 0; // Prevent governance from changing to new strategy without timelock
}
// --------------------
// Timelock variables
uint256 private _timelockStart; // The start of the timelock to change governance variables
uint256 private _timelockType; // The function that needs to be changed
uint256 constant TIMELOCK_DURATION = 86400; // Timelock is 24 hours
// Reusable timelock variables
address private _timelock_address;
modifier timelockConditionsMet(uint256 _type) {
require(_timelockType == _type, "Timelock not acquired for this function");
_timelockType = 0; // Reset the type once the timelock is used
if(totalSupply() > 0){
// Timelock is only required after tokens exist
require(now >= _timelockStart + TIMELOCK_DURATION, "Timelock time not met");
}
_;
}
// Change the owner of the token contract
// --------------------
function startGovernanceChange(address _address) external onlyGovernance {
_timelockStart = now;
_timelockType = 1;
_timelock_address = _address;
}
function finishGovernanceChange() external onlyGovernance timelockConditionsMet(1) {
transferGovernance(_timelock_address);
}
// --------------------
// Change the strategy address
// --------------------
function startChangeStrategy(address _address) external onlyGovernance {
_timelockStart = now;
_timelockType = 2;
_timelock_address = _address;
_pendingStrategy = _address;
if(totalSupply() == 0){
// Can change strategy with one call in this case
finishChangeStrategy();
}
}
function finishChangeStrategy() public onlyGovernance timelockConditionsMet(2) {
if(currentStrategy != StabilizeStrategy(address(0)) && totalSupply() > 0){
currentStrategy.exit(); // Pulls all the tokens and accessory tokens from the strategy
}
currentStrategy = StabilizeStrategy(_timelock_address);
if(currentStrategy != StabilizeStrategy(address(0)) && totalSupply() > 0){
pushTokensToStrategy(); // It will push any strategy reward tokens here to the new strategy
currentStrategy.enter(); // Puts all the tokens and accessory tokens into the new strategy
}
_pendingStrategy = address(0);
}
function pushTokensToStrategy() internal {
uint256 tokenCount = currentStrategy.rewardTokensCount();
for(uint256 i = 0; i < tokenCount; i++){
IERC20 _token = IERC20(address(currentStrategy.rewardTokenAddress(i)));
uint256 _balance = _token.balanceOf(address(this));
if(_balance > 0){
_token.safeTransfer(address(currentStrategy), _balance);
}
}
}
// --------------------
// Change the price oracle
// --------------------
function startChangePriceOracle(address _address) external onlyGovernance {
_timelockStart = now;
_timelockType = 3;
_timelock_address = _address;
}
function finishChangePriceOracle() external onlyGovernance timelockConditionsMet(3) {
reethPriceOracle = _timelock_address;
}
// -------------------
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_reeth","type":"address"},{"internalType":"address","name":"_oracle","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Unwrapped","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Wrapped","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"depositsOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emergencyStopStrategy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"finishChangePriceOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"finishChangeStrategy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"finishGovernanceChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCurrentStrategy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getNormalizedTotalBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPendingStrategy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governance","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pricePerToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"share","type":"uint256"}],"name":"redeem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reethPriceOracle","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"startChangePriceOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"startChangeStrategy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startDeposits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"startGovernanceChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stopDeposits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"underlyingAsset","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"underlyingDepositAssets","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"valueOfVaultAndStrategy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawTokenReserves","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]Contract Creation Code
60806040526009805460ff191660011790553480156200001e57600080fd5b5060405162003ba338038062003ba3833981810160405260408110156200004457600080fd5b508051602091820151604080518082018252601881527f53746162696c697a652053747261746567792052454554480000000000000000818601908152825180840190935260088352670f4e65aa48a8aa8960c31b958301959095528051939492939092620000b7916003919062000326565b508051620000cd90600490602084019062000326565b50506005805460ff19166012179055506000620000f26001600160e01b036200017b16565b60058054610100600160a81b0319166101006001600160a01b03841690810291909117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001600655600b80546001600160a01b0319166001600160a01b038316179055620001738262000180565b5050620003c8565b335b90565b600081905060086040518060400160405280836001600160a01b03168152602001836001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015620001db57600080fd5b505afa158015620001f0573d6000803e3d6000fd5b505050506040513d60208110156200020757600080fd5b505160ff1690528154600180820184556000938452602093849020835160029093020180546001600160a01b0319166001600160a01b039093169290921782559183015191015560408051808201825273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2808252825163313ce56760e01b81529251909450600893919283830192869263313ce567926004808201939291829003018186803b158015620002ae57600080fd5b505afa158015620002c3573d6000803e3d6000fd5b505050506040513d6020811015620002da57600080fd5b505160ff1690528154600180820184556000938452602093849020835160029093020180546001600160a01b0319166001600160a01b0390931692909217825591909201519101555050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200036957805160ff191683800117855562000399565b8280016001018555821562000399579182015b82811115620003995782518255916020019190600101906200037c565b50620003a7929150620003ab565b5090565b6200017d91905b80821115620003a75760008155600101620003b2565b6137cb80620003d86000396000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c80637158da7c1161011a578063a9059cbb116100ad578063d9a74be01161007c578063d9a74be01461054f578063db006a7514610557578063dd62ed3e14610574578063f63aeac3146105a2578063f8008776146105c8576101fb565b8063a9059cbb146104d3578063b6b55f25146104ff578063b91950721461051c578063c650ea5914610524576101fb565b80639a7dfe69116100e95780639a7dfe69146104715780639d63b8f714610479578063a457c2d71461049f578063a4b88e7b146104cb576101fb565b80637158da7c146104515780637b1b1de61461045957806383249ef91461046157806395d89b4114610469576101fb565b8063549c4627116101925780635c27af87116101615780635c27af87146103c35780635cbe86bc146103cb5780636d8ac22d146103d357806370a082311461042b576101fb565b8063549c4627146103a3578063563a7956146103ab57806357a53799146103b35780635aa6e675146103bb576101fb565b8063313ce567116101ce578063313ce5671461030d57806337c6de961461032b578063395093511461034f5780633e3bc6231461037b576101fb565b806306fdde0314610200578063095ea7b31461027d57806318160ddd146102bd57806323b872dd146102d7575b600080fd5b6102086105ee565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561024257818101518382015260200161022a565b50505050905090810190601f16801561026f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102a96004803603604081101561029357600080fd5b506001600160a01b038135169060200135610685565b604080519115158252519081900360200190f35b6102c56106a3565b60408051918252519081900360200190f35b6102a9600480360360608110156102ed57600080fd5b506001600160a01b038135811691602081013590911690604001356106a9565b610315610736565b6040805160ff9092168252519081900360200190f35b61033361073f565b604080516001600160a01b039092168252519081900360200190f35b6102a96004803603604081101561036557600080fd5b506001600160a01b03813516906020013561074e565b6103a16004803603602081101561039157600080fd5b50356001600160a01b03166107a2565b005b6102a961082a565b6102c5610833565b6103a16108d9565b610333610a06565b6103a1610a1a565b6103a1610a86565b6103db610aef565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156104175781810151838201526020016103ff565b505050509050019250505060405180910390f35b6102c56004803603602081101561044157600080fd5b50356001600160a01b0316610ba9565b610333610bc8565b6102c5610be0565b610333610c3b565b610208610c4f565b610333610cb0565b6102c56004803603602081101561048f57600080fd5b50356001600160a01b0316610cbf565b6102a9600480360360408110156104b557600080fd5b506001600160a01b038135169060200135610dda565b6103a1610e48565b6102a9600480360360408110156104e957600080fd5b506001600160a01b0381351690602001356110af565b6103a16004803603602081101561051557600080fd5b50356110c3565b6103a161174c565b61052c61186c565b604080516001600160a01b03909316835260208301919091528051918290030190f35b6103a1611b42565b6103a16004803603602081101561056d57600080fd5b5035611c54565b6102c56004803603604081101561058a57600080fd5b506001600160a01b0381358116916020013516612170565b6103a1600480360360208110156105b857600080fd5b50356001600160a01b031661219b565b6103a1600480360360208110156105de57600080fd5b50356001600160a01b0316612240565b60038054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561067a5780601f1061064f5761010080835404028352916020019161067a565b820191906000526020600020905b81548152906001019060200180831161065d57829003601f168201915b505050505090505b90565b60006106996106926122c8565b84846122cc565b5060015b92915050565b60025490565b60006106b68484846123b8565b61072c846106c26122c8565b610727856040518060600160405280602881526020016135f9602891396001600160a01b038a166000908152600160205260408120906107006122c8565b6001600160a01b03168152602081019190915260400160002054919063ffffffff61251416565b6122cc565b5060019392505050565b60055460ff1690565b600a546001600160a01b031690565b600061069961075b6122c8565b84610727856001600061076c6122c8565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff6125ab16565b6107aa6122c8565b60055461010090046001600160a01b039081169116146107ff576040805162461bcd60e51b81526020600482018190526024820152600080516020613621833981519152604482015290519081900360640190fd5b42600c556003600d55600e80546001600160a01b0319166001600160a01b0392909216919091179055565b60095460ff1681565b60008061083f30610cbf565b60095490915061010090046001600160a01b0316156108d457600960019054906101000a90046001600160a01b03166001600160a01b031663b69ef8a86040518163ffffffff1660e01b815260040160206040518083038186803b1580156108a657600080fd5b505afa1580156108ba573d6000803e3d6000fd5b505050506040513d60208110156108d057600080fd5b5051015b905090565b6108e16122c8565b60055461010090046001600160a01b03908116911614610936576040805162461bcd60e51b81526020600482018190526024820152600080516020613621833981519152604482015290519081900360640190fd5b600380600d54146109785760405162461bcd60e51b81526004018080602001828103825260278152602001806135b16027913960400191505060405180910390fd5b6000600d8190556109876106a3565b11156109e15762015180600c54014210156109e1576040805162461bcd60e51b8152602060048201526015602482015274151a5b595b1bd8dac81d1a5b59481b9bdd081b595d605a1b604482015290519081900360640190fd5b50600e54600b80546001600160a01b0319166001600160a01b03909216919091179055565b60055461010090046001600160a01b031690565b610a226122c8565b60055461010090046001600160a01b03908116911614610a77576040805162461bcd60e51b81526020600482018190526024820152600080516020613621833981519152604482015290519081900360640190fd5b6009805460ff19166001179055565b610a8e6122c8565b60055461010090046001600160a01b03908116911614610ae3576040805162461bcd60e51b81526020600482018190526024820152600080516020613621833981519152604482015290519081900360640190fd5b6009805460ff19169055565b600854606090819067ffffffffffffffff81118015610b0d57600080fd5b50604051908082528060200260200182016040528015610b37578160200160208202803683370190505b5060085490915060005b81811015610ba15760088181548110610b5657fe5b600091825260209091206002909102015483516001600160a01b0390911690849083908110610b8157fe5b6001600160a01b0390921660209283029190910190910152600101610b41565b509091505090565b6001600160a01b0381166000908152602081905260409020545b919050565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc290565b6000610bea6106a3565b610bfd5750670de0b6b3a7640000610682565b610c34610c086106a3565b610c28610c13610833565b670de0b6b3a76400009063ffffffff61260c16565b9063ffffffff61266516565b9050610682565b60095461010090046001600160a01b031690565b60048054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561067a5780601f1061064f5761010080835404028352916020019161067a565b600b546001600160a01b031681565b600080805b600854811015610dd357600060088281548110610cdd57fe5b600091825260209182902060029091020154604080516370a0823160e01b81526001600160a01b038981166004830152915191909216926370a082319260248082019391829003018186803b158015610d3557600080fd5b505afa158015610d49573d6000803e3d6000fd5b505050506040513d6020811015610d5f57600080fd5b505190508115610d7557610d72816126a7565b90505b610db66008600081548110610d8657fe5b906000526020600020906002020160010154600a0a610c28670de0b6b3a76400008461260c90919063ffffffff16565b9050610dc8838263ffffffff6125ab16565b925050600101610cc4565b5092915050565b6000610699610de76122c8565b84610727856040518060600160405280602581526020016137716025913960016000610e116122c8565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff61251416565b610e506122c8565b60055461010090046001600160a01b03908116911614610ea5576040805162461bcd60e51b81526020600482018190526024820152600080516020613621833981519152604482015290519081900360640190fd5b600280600d5414610ee75760405162461bcd60e51b81526004018080602001828103825260278152602001806135b16027913960400191505060405180910390fd5b6000600d819055610ef66106a3565b1115610f505762015180600c5401421015610f50576040805162461bcd60e51b8152602060048201526015602482015274151a5b595b1bd8dac81d1a5b59481b9bdd081b595d605a1b604482015290519081900360640190fd5b60095461010090046001600160a01b031615801590610f7657506000610f746106a3565b115b15610fe457600960019054906101000a90046001600160a01b03166001600160a01b031663e9fad8ee6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610fcb57600080fd5b505af1158015610fdf573d6000803e3d6000fd5b505050505b600e5460098054610100600160a81b0319166101006001600160a01b039384168102919091179182905590041615801590611026575060006110246106a3565b115b1561109c576110336127d6565b600960019054906101000a90046001600160a01b03166001600160a01b031663e97dcb626040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561108357600080fd5b505af1158015611097573d6000803e3d6000fd5b505050505b50600a80546001600160a01b0319169055565b60006106996110bc6122c8565b84846123b8565b6002600654141561111b576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002600655600b546001600160a01b03166111675760405162461bcd60e51b815260040180806020018281038252602381526020018061358e6023913960400191505060405180910390fd5b600b60009054906101000a90046001600160a01b03166001600160a01b0316635d843d9b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156111b757600080fd5b505af11580156111cb573d6000803e3d6000fd5b5050505060006111d9610833565b60095490915060ff1615156001146112225760405162461bcd60e51b81526004018080602001828103825260388152602001806134a26038913960400191505060405180910390fd5b60095461010090046001600160a01b031661126e5760405162461bcd60e51b815260040180806020018281038252602a8152602001806136bb602a913960400191505060405180910390fd5b6000600860008154811061127e57fe5b60009182526020808320600290920290910154604080516370a0823160e01b815230600482015290516001600160a01b03909216945084926370a0823192602480840193829003018186803b1580156112d657600080fd5b505afa1580156112ea573d6000803e3d6000fd5b505050506040513d602081101561130057600080fd5b5051905061132761130f6122c8565b6001600160a01b03841690308763ffffffff61298f16565b604080516370a0823160e01b815230600482015290516113ab9183916001600160a01b038616916370a08231916024808301926020929190829003018186803b15801561137357600080fd5b505afa158015611387573d6000803e3d6000fd5b505050506040513d602081101561139d57600080fd5b50519063ffffffff6129ef16565b9350600084116113f5576040805162461bcd60e51b815260206004820152601060248201526f043616e6e6f74206465706f73697420360841b604482015290519081900360640190fd5b60006113ff6122c8565b6001600160a01b0316326001600160a01b0316141561141c575060015b6000600960019054906101000a90046001600160a01b03166001600160a01b031663b69ef8a86040518163ffffffff1660e01b815260040160206040518083038186803b15801561146c57600080fd5b505afa158015611480573d6000803e3d6000fd5b505050506040513d602081101561149657600080fd5b505190506114a26127d6565b600954604080516362b939e160e11b8152841515600482015290516101009092046001600160a01b03169163c57273c29160248082019260009290919082900301818387803b1580156114f457600080fd5b505af1158015611508573d6000803e3d6000fd5b5050505080600960019054906101000a90046001600160a01b03166001600160a01b031663b69ef8a86040518163ffffffff1660e01b815260040160206040518083038186803b15801561155b57600080fd5b505afa15801561156f573d6000803e3d6000fd5b505050506040513d602081101561158557600080fd5b5051116115d9576040805162461bcd60e51b815260206004820152601d60248201527f4e6f206368616e676520696e2073747261746567792062616c616e6365000000604482015290519081900360640190fd5b600061161c60086000815481106115ec57fe5b906000526020600020906002020160010154600a0a610c28670de0b6b3a76400008a61260c90919063ffffffff16565b90508060006116296106a3565b111561164e5761164b87610c2861163e6106a3565b859063ffffffff61260c16565b90505b61165f6116596122c8565b82612a31565b426007600061166c6122c8565b6001600160a01b03166001600160a01b03168152602001908152602001600020600001819055506116cc81600760006116a36122c8565b6001600160a01b031681526020810191909152604001600020600101549063ffffffff6125ab16565b600760006116d86122c8565b6001600160a01b031681526020810191909152604001600020600101556116fd6122c8565b6001600160a01b03167f4700c1726b4198077cd40320a32c45265a1910521eb0ef713dd1d8412413d7fc896040518082815260200191505060405180910390a250506001600655505050505050565b6117546122c8565b60055461010090046001600160a01b039081169116146117a9576040805162461bcd60e51b81526020600482018190526024820152600080516020613621833981519152604482015290519081900360640190fd5b600180600d54146117eb5760405162461bcd60e51b81526004018080602001828103825260278152602001806135b16027913960400191505060405180910390fd5b6000600d8190556117fa6106a3565b11156118545762015180600c5401421015611854576040805162461bcd60e51b8152602060048201526015602482015274151a5b595b1bd8dac81d1a5b59481b9bdd081b595d605a1b604482015290519081900360640190fd5b600e54611869906001600160a01b0316612b21565b50565b600954600090819061010090046001600160a01b03161561191157600960019054906101000a90046001600160a01b03166001600160a01b031663c650ea596040518163ffffffff1660e01b8152600401604080518083038186803b1580156118d457600080fd5b505afa1580156118e8573d6000803e3d6000fd5b505050506040513d60408110156118fe57600080fd5b5080516020909101519092509050611b3e565b6000600860008154811061192157fe5b600091825260209182902060029091020154604080516370a0823160e01b815230600482015290516001600160a01b03909216926370a0823192602480840193829003018186803b15801561197557600080fd5b505afa158015611989573d6000803e3d6000fd5b505050506040513d602081101561199f57600080fd5b50511115611a675760086000815481106119b557fe5b60009182526020822060029091020154600880546001600160a01b039092169290916119dd57fe5b600091825260209182902060029091020154604080516370a0823160e01b815230600482015290516001600160a01b03909216926370a0823192602480840193829003018186803b158015611a3157600080fd5b505afa158015611a45573d6000803e3d6000fd5b505050506040513d6020811015611a5b57600080fd5b50519092509050611b3e565b60006008600181548110611a7757fe5b600091825260209182902060029091020154604080516370a0823160e01b815230600482015290516001600160a01b03909216926370a0823192602480840193829003018186803b158015611acb57600080fd5b505afa158015611adf573d6000803e3d6000fd5b505050506040513d6020811015611af557600080fd5b50511115611b37576008600181548110611b0b57fe5b6000918252602090912060029091020154600880546001600160a01b039092169160019081106119dd57fe5b5060009050805b9091565b611b4a6122c8565b60055461010090046001600160a01b03908116911614611b9f576040805162461bcd60e51b81526020600482018190526024820152600080516020613621833981519152604482015290519081900360640190fd5b6009805460ff19169081905561010090046001600160a01b031615801590611bce57506000611bcc6106a3565b115b15611c3c57600960019054906101000a90046001600160a01b03166001600160a01b031663e9fad8ee6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611c2357600080fd5b505af1158015611c37573d6000803e3d6000fd5b505050505b60098054610100600160a81b03191690556000600d55565b60026006541415611cac576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002600655600b546001600160a01b031615611d2b57600b60009054906101000a90046001600160a01b03166001600160a01b0316635d843d9b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611d1257600080fd5b505af1158015611d26573d6000803e3d6000fd5b505050505b60008111611d74576040805162461bcd60e51b8152602060048201526011602482015270043616e6e6f74207769746864726177203607c1b604482015290519081900360640190fd5b6000611d7e6106a3565b11611dc6576040805162461bcd60e51b81526020600482015260136024820152724e6f2076616c75652072656465656d61626c6560681b604482015290519081900360640190fd5b6000611dd06106a3565b9050611de3611ddd6122c8565b83612c2a565b6000611ded6122c8565b6001600160a01b0316326001600160a01b03161415611e0e57506001611ea2565b4260076000611e1b6122c8565b6001600160a01b03168152602081019190915260400160002054108015611e675750600060076000611e4b6122c8565b6001600160a01b03168152602081019190915260400160002054115b611ea25760405162461bcd60e51b81526004018080602001828103825260348152602001806136416034913960400191505060405180910390fd5b60076000611eae6122c8565b6001600160a01b03166001600160a01b03168152602001908152602001600020600101548311611f3f57611f118360076000611ee86122c8565b6001600160a01b031681526020810191909152604001600020600101549063ffffffff6129ef16565b60076000611f1d6122c8565b6001600160a01b03168152602081019190915260400160002060010155611fae565b600060076000611f4d6122c8565b6001600160a01b03168152602081019190915260400160002060019081019190915581151514611fae5760405162461bcd60e51b815260040180806020018281038252603e815260200180613709603e913960400191505060405180910390fd5b60095460009061010090046001600160a01b0316156120b15760095461010090046001600160a01b031663234b6745611fe56122c8565b604080516001600160e01b031960e085901b1681526001600160a01b039092166004830152602482018890526044820187905285151560648301525160848083019260209291908290030181600087803b15801561204257600080fd5b505af1158015612056573d6000803e3d6000fd5b505050506040513d602081101561206c57600080fd5b50519050806120ac5760405162461bcd60e51b815260040180806020018281038252602481526020018061356a6024913960400191505060405180910390fd5b61211d565b828410156120fa5760006120c430610cbf565b905060006120dc85610c28848963ffffffff61260c16565b90506120f16120e96122c8565b826000612d26565b915061211d9050565b600061210530610cbf565b905061211a6121126122c8565b826001612d26565b90505b6121256122c8565b6001600160a01b03167f95ae649bfaaef9def56a52f4fb2d9e8fa5496bb7082930e442c74cc76b03dcb3826040518082815260200191505060405180910390a2505060016006555050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6121a36122c8565b60055461010090046001600160a01b039081169116146121f8576040805162461bcd60e51b81526020600482018190526024820152600080516020613621833981519152604482015290519081900360640190fd5b42600c556002600d55600e80546001600160a01b0383166001600160a01b03199182168117909255600a805490911690911790556122346106a3565b61186957611869610e48565b6122486122c8565b60055461010090046001600160a01b0390811691161461229d576040805162461bcd60e51b81526020600482018190526024820152600080516020613621833981519152604482015290519081900360640190fd5b42600c556001600d55600e80546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b6001600160a01b0383166123115760405162461bcd60e51b81526004018080602001828103825260248152602001806136e56024913960400191505060405180910390fd5b6001600160a01b0382166123565760405162461bcd60e51b81526004018080602001828103825260228152602001806135226022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166123fd5760405162461bcd60e51b81526004018080602001828103825260258152602001806136966025913960400191505060405180910390fd5b6001600160a01b0382166124425760405162461bcd60e51b815260040180806020018281038252602381526020018061347f6023913960400191505060405180910390fd5b61248581604051806060016040528060268152602001613544602691396001600160a01b038616600090815260208190526040902054919063ffffffff61251416565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546124ba908263ffffffff6125ab16565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600081848411156125a35760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612568578181015183820152602001612550565b50505050905090810190601f1680156125955780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015612605576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60008261261b5750600061069d565b8282028284828161262857fe5b04146126055760405162461bcd60e51b81526004018080602001828103825260218152602001806135d86021913960400191505060405180910390fd5b600061260583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613052565b6000816126b657506000610bc3565b600b54670de0b6b3a7640000906001600160a01b03161561275d57600b60009054906101000a90046001600160a01b03166001600160a01b0316639e59ab0b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561271f57600080fd5b505afa158015612733573d6000803e3d6000fd5b505050506040513d602081101561274957600080fd5b505190508061275d5750670de0b6b3a76400005b6127b8600860018154811061276e57fe5b906000526020600020906002020160010154600a0a610c28600860008154811061279457fe5b906000526020600020906002020160010154600a0a8661260c90919063ffffffff16565b925061260581610c2885670de0b6b3a764000063ffffffff61260c16565b6000600960019054906101000a90046001600160a01b03166001600160a01b031663780d9d2d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561282657600080fd5b505afa15801561283a573d6000803e3d6000fd5b505050506040513d602081101561285057600080fd5b5051905060005b8181101561298b5760095460408051635930a0a160e01b815260048101849052905160009261010090046001600160a01b031691635930a0a1916024808301926020929190829003018186803b1580156128b057600080fd5b505afa1580156128c4573d6000803e3d6000fd5b505050506040513d60208110156128da57600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038416916370a08231916024808301926020929190829003018186803b15801561292857600080fd5b505afa15801561293c573d6000803e3d6000fd5b505050506040513d602081101561295257600080fd5b50519050801561298157600954612981906001600160a01b03848116916101009004168363ffffffff6130b716565b5050600101612857565b5050565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526129e9908590613105565b50505050565b600061260583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612514565b6001600160a01b038216612a8c576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b600254612a9f908263ffffffff6125ab16565b6002556001600160a01b038216600090815260208190526040902054612acb908263ffffffff6125ab16565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b612b296122c8565b60055461010090046001600160a01b03908116911614612b7e576040805162461bcd60e51b81526020600482018190526024820152600080516020613621833981519152604482015290519081900360640190fd5b6001600160a01b038116612bc35760405162461bcd60e51b81526004018080602001828103825260268152602001806134fc6026913960400191505060405180910390fd5b6005546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6001600160a01b038216612c6f5760405162461bcd60e51b81526004018080602001828103825260218152602001806136756021913960400191505060405180910390fd5b612cb2816040518060600160405280602281526020016134da602291396001600160a01b038516600090815260208190526040902054919063ffffffff61251416565b6001600160a01b038316600090815260208190526040902055600254612cde908263ffffffff6129ef16565b6002556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b60085460018215151415612e1f5760005b81811015612e1857600060088281548110612d4e57fe5b600091825260209182902060029091020154604080516370a0823160e01b815230600482015290516001600160a01b03909216926370a0823192602480840193829003018186803b158015612da257600080fd5b505afa158015612db6573d6000803e3d6000fd5b505050506040513d6020811015612dcc57600080fd5b505190508015612e0f57612e0f868260088581548110612de857fe5b60009182526020909120600290910201546001600160a01b0316919063ffffffff6130b716565b50600101612d37565b505061304d565b60005b8181101561304a57600060088281548110612e3957fe5b600091825260209182902060029091020154604080516370a0823160e01b815230600482015290516001600160a01b03909216926370a0823192602480840193829003018186803b158015612e8d57600080fd5b505afa158015612ea1573d6000803e3d6000fd5b505050506040513d6020811015612eb757600080fd5b5051905081612ed857612ed16008600081548110610d8657fe5b9050612f00565b8160011415612f0057612eea816126a7565b9050612efd6008600081548110610d8657fe5b90505b848111612fc3578015612fbe57612f1d858263ffffffff6129ef16565b9450612fbe8660088481548110612f3057fe5b600091825260209182902060029091020154604080516370a0823160e01b815230600482015290516001600160a01b03909216926370a0823192602480840193829003018186803b158015612f8457600080fd5b505afa158015612f98573d6000803e3d6000fd5b505050506040513d6020811015612fae57600080fd5b50516008805486908110612de857fe5b613041565b841561303b57600061300c670de0b6b3a7640000610c286008600081548110612fe857fe5b906000526020600020906002020160010154600a0a8961260c90919063ffffffff16565b9050826001141561302357613020816131b6565b90505b60009550613039878260088681548110612de857fe5b505b5061304a565b50600101612e22565b50505b505050565b600081836130a15760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315612568578181015183820152602001612550565b5060008385816130ad57fe5b0495945050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261304d9084905b606061315a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166132c19092919063ffffffff16565b80519091501561304d5780806020019051602081101561317957600080fd5b505161304d5760405162461bcd60e51b815260040180806020018281038252602a815260200180613747602a913960400191505060405180910390fd5b6000816131c557506000610bc3565b600b54670de0b6b3a7640000906001600160a01b03161561326c57600b60009054906101000a90046001600160a01b03166001600160a01b0316639e59ab0b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561322e57600080fd5b505afa158015613242573d6000803e3d6000fd5b505050506040513d602081101561325857600080fd5b505190508061326c5750670de0b6b3a76400005b6132a3600860008154811061327d57fe5b906000526020600020906002020160010154600a0a610c28600860018154811061279457fe5b9250612605670de0b6b3a7640000610c28858463ffffffff61260c16565b60606132d084846000856132d8565b949350505050565b60606132e385613445565b613334576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106133735780518252601f199092019160209182019101613354565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146133d5576040519150601f19603f3d011682016040523d82523d6000602084013e6133da565b606091505b509150915081156133ee5791506132d09050565b8051156133fe5780518082602001fd5b60405162461bcd60e51b8152602060048201818152865160248401528651879391928392604401919085019080838360008315612568578181015183820152602001612550565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708181148015906132d057505015159291505056fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573734465706f736974732068617665206265656e2073757370656e6465642c2062757420796f752063616e207374696c6c20776974686472617745524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63654661696c656420746f2077697468647261772066726f6d207468652073747261746567795072696365206f7261636c65206e6f74207365742c2063616e2774206465706f73697454696d656c6f636b206e6f7420616371756972656420666f7220746869732066756e6374696f6e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572436f6e7472616374206465706f7369746f722063616e6e6f742072656465656d20696e2073616d65207472616e73616374696f6e45524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f20616464726573734e6f20737472617465677920636f6e747261637420686173206265656e2073656c65637465642079657445524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373436f6e7472616374206465706f7369746f72732063616e6e6f742074616b65206f7574206d6f7265207468616e207768617420746865792070757420696e5361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122094713640825d6deefcd30cdab69f3a3d044c8b88f0fa9e9640fcabcaf1a3cf3d64736f6c63430006060033000000000000000000000000e804964c296e9fb666fbe67767838c1ff9ab32090000000000000000000000000f1f24bdccb632e33888feaf73d05dd851b811ec
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101fb5760003560e01c80637158da7c1161011a578063a9059cbb116100ad578063d9a74be01161007c578063d9a74be01461054f578063db006a7514610557578063dd62ed3e14610574578063f63aeac3146105a2578063f8008776146105c8576101fb565b8063a9059cbb146104d3578063b6b55f25146104ff578063b91950721461051c578063c650ea5914610524576101fb565b80639a7dfe69116100e95780639a7dfe69146104715780639d63b8f714610479578063a457c2d71461049f578063a4b88e7b146104cb576101fb565b80637158da7c146104515780637b1b1de61461045957806383249ef91461046157806395d89b4114610469576101fb565b8063549c4627116101925780635c27af87116101615780635c27af87146103c35780635cbe86bc146103cb5780636d8ac22d146103d357806370a082311461042b576101fb565b8063549c4627146103a3578063563a7956146103ab57806357a53799146103b35780635aa6e675146103bb576101fb565b8063313ce567116101ce578063313ce5671461030d57806337c6de961461032b578063395093511461034f5780633e3bc6231461037b576101fb565b806306fdde0314610200578063095ea7b31461027d57806318160ddd146102bd57806323b872dd146102d7575b600080fd5b6102086105ee565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561024257818101518382015260200161022a565b50505050905090810190601f16801561026f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102a96004803603604081101561029357600080fd5b506001600160a01b038135169060200135610685565b604080519115158252519081900360200190f35b6102c56106a3565b60408051918252519081900360200190f35b6102a9600480360360608110156102ed57600080fd5b506001600160a01b038135811691602081013590911690604001356106a9565b610315610736565b6040805160ff9092168252519081900360200190f35b61033361073f565b604080516001600160a01b039092168252519081900360200190f35b6102a96004803603604081101561036557600080fd5b506001600160a01b03813516906020013561074e565b6103a16004803603602081101561039157600080fd5b50356001600160a01b03166107a2565b005b6102a961082a565b6102c5610833565b6103a16108d9565b610333610a06565b6103a1610a1a565b6103a1610a86565b6103db610aef565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156104175781810151838201526020016103ff565b505050509050019250505060405180910390f35b6102c56004803603602081101561044157600080fd5b50356001600160a01b0316610ba9565b610333610bc8565b6102c5610be0565b610333610c3b565b610208610c4f565b610333610cb0565b6102c56004803603602081101561048f57600080fd5b50356001600160a01b0316610cbf565b6102a9600480360360408110156104b557600080fd5b506001600160a01b038135169060200135610dda565b6103a1610e48565b6102a9600480360360408110156104e957600080fd5b506001600160a01b0381351690602001356110af565b6103a16004803603602081101561051557600080fd5b50356110c3565b6103a161174c565b61052c61186c565b604080516001600160a01b03909316835260208301919091528051918290030190f35b6103a1611b42565b6103a16004803603602081101561056d57600080fd5b5035611c54565b6102c56004803603604081101561058a57600080fd5b506001600160a01b0381358116916020013516612170565b6103a1600480360360208110156105b857600080fd5b50356001600160a01b031661219b565b6103a1600480360360208110156105de57600080fd5b50356001600160a01b0316612240565b60038054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561067a5780601f1061064f5761010080835404028352916020019161067a565b820191906000526020600020905b81548152906001019060200180831161065d57829003601f168201915b505050505090505b90565b60006106996106926122c8565b84846122cc565b5060015b92915050565b60025490565b60006106b68484846123b8565b61072c846106c26122c8565b610727856040518060600160405280602881526020016135f9602891396001600160a01b038a166000908152600160205260408120906107006122c8565b6001600160a01b03168152602081019190915260400160002054919063ffffffff61251416565b6122cc565b5060019392505050565b60055460ff1690565b600a546001600160a01b031690565b600061069961075b6122c8565b84610727856001600061076c6122c8565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff6125ab16565b6107aa6122c8565b60055461010090046001600160a01b039081169116146107ff576040805162461bcd60e51b81526020600482018190526024820152600080516020613621833981519152604482015290519081900360640190fd5b42600c556003600d55600e80546001600160a01b0319166001600160a01b0392909216919091179055565b60095460ff1681565b60008061083f30610cbf565b60095490915061010090046001600160a01b0316156108d457600960019054906101000a90046001600160a01b03166001600160a01b031663b69ef8a86040518163ffffffff1660e01b815260040160206040518083038186803b1580156108a657600080fd5b505afa1580156108ba573d6000803e3d6000fd5b505050506040513d60208110156108d057600080fd5b5051015b905090565b6108e16122c8565b60055461010090046001600160a01b03908116911614610936576040805162461bcd60e51b81526020600482018190526024820152600080516020613621833981519152604482015290519081900360640190fd5b600380600d54146109785760405162461bcd60e51b81526004018080602001828103825260278152602001806135b16027913960400191505060405180910390fd5b6000600d8190556109876106a3565b11156109e15762015180600c54014210156109e1576040805162461bcd60e51b8152602060048201526015602482015274151a5b595b1bd8dac81d1a5b59481b9bdd081b595d605a1b604482015290519081900360640190fd5b50600e54600b80546001600160a01b0319166001600160a01b03909216919091179055565b60055461010090046001600160a01b031690565b610a226122c8565b60055461010090046001600160a01b03908116911614610a77576040805162461bcd60e51b81526020600482018190526024820152600080516020613621833981519152604482015290519081900360640190fd5b6009805460ff19166001179055565b610a8e6122c8565b60055461010090046001600160a01b03908116911614610ae3576040805162461bcd60e51b81526020600482018190526024820152600080516020613621833981519152604482015290519081900360640190fd5b6009805460ff19169055565b600854606090819067ffffffffffffffff81118015610b0d57600080fd5b50604051908082528060200260200182016040528015610b37578160200160208202803683370190505b5060085490915060005b81811015610ba15760088181548110610b5657fe5b600091825260209091206002909102015483516001600160a01b0390911690849083908110610b8157fe5b6001600160a01b0390921660209283029190910190910152600101610b41565b509091505090565b6001600160a01b0381166000908152602081905260409020545b919050565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc290565b6000610bea6106a3565b610bfd5750670de0b6b3a7640000610682565b610c34610c086106a3565b610c28610c13610833565b670de0b6b3a76400009063ffffffff61260c16565b9063ffffffff61266516565b9050610682565b60095461010090046001600160a01b031690565b60048054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561067a5780601f1061064f5761010080835404028352916020019161067a565b600b546001600160a01b031681565b600080805b600854811015610dd357600060088281548110610cdd57fe5b600091825260209182902060029091020154604080516370a0823160e01b81526001600160a01b038981166004830152915191909216926370a082319260248082019391829003018186803b158015610d3557600080fd5b505afa158015610d49573d6000803e3d6000fd5b505050506040513d6020811015610d5f57600080fd5b505190508115610d7557610d72816126a7565b90505b610db66008600081548110610d8657fe5b906000526020600020906002020160010154600a0a610c28670de0b6b3a76400008461260c90919063ffffffff16565b9050610dc8838263ffffffff6125ab16565b925050600101610cc4565b5092915050565b6000610699610de76122c8565b84610727856040518060600160405280602581526020016137716025913960016000610e116122c8565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff61251416565b610e506122c8565b60055461010090046001600160a01b03908116911614610ea5576040805162461bcd60e51b81526020600482018190526024820152600080516020613621833981519152604482015290519081900360640190fd5b600280600d5414610ee75760405162461bcd60e51b81526004018080602001828103825260278152602001806135b16027913960400191505060405180910390fd5b6000600d819055610ef66106a3565b1115610f505762015180600c5401421015610f50576040805162461bcd60e51b8152602060048201526015602482015274151a5b595b1bd8dac81d1a5b59481b9bdd081b595d605a1b604482015290519081900360640190fd5b60095461010090046001600160a01b031615801590610f7657506000610f746106a3565b115b15610fe457600960019054906101000a90046001600160a01b03166001600160a01b031663e9fad8ee6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610fcb57600080fd5b505af1158015610fdf573d6000803e3d6000fd5b505050505b600e5460098054610100600160a81b0319166101006001600160a01b039384168102919091179182905590041615801590611026575060006110246106a3565b115b1561109c576110336127d6565b600960019054906101000a90046001600160a01b03166001600160a01b031663e97dcb626040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561108357600080fd5b505af1158015611097573d6000803e3d6000fd5b505050505b50600a80546001600160a01b0319169055565b60006106996110bc6122c8565b84846123b8565b6002600654141561111b576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002600655600b546001600160a01b03166111675760405162461bcd60e51b815260040180806020018281038252602381526020018061358e6023913960400191505060405180910390fd5b600b60009054906101000a90046001600160a01b03166001600160a01b0316635d843d9b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156111b757600080fd5b505af11580156111cb573d6000803e3d6000fd5b5050505060006111d9610833565b60095490915060ff1615156001146112225760405162461bcd60e51b81526004018080602001828103825260388152602001806134a26038913960400191505060405180910390fd5b60095461010090046001600160a01b031661126e5760405162461bcd60e51b815260040180806020018281038252602a8152602001806136bb602a913960400191505060405180910390fd5b6000600860008154811061127e57fe5b60009182526020808320600290920290910154604080516370a0823160e01b815230600482015290516001600160a01b03909216945084926370a0823192602480840193829003018186803b1580156112d657600080fd5b505afa1580156112ea573d6000803e3d6000fd5b505050506040513d602081101561130057600080fd5b5051905061132761130f6122c8565b6001600160a01b03841690308763ffffffff61298f16565b604080516370a0823160e01b815230600482015290516113ab9183916001600160a01b038616916370a08231916024808301926020929190829003018186803b15801561137357600080fd5b505afa158015611387573d6000803e3d6000fd5b505050506040513d602081101561139d57600080fd5b50519063ffffffff6129ef16565b9350600084116113f5576040805162461bcd60e51b815260206004820152601060248201526f043616e6e6f74206465706f73697420360841b604482015290519081900360640190fd5b60006113ff6122c8565b6001600160a01b0316326001600160a01b0316141561141c575060015b6000600960019054906101000a90046001600160a01b03166001600160a01b031663b69ef8a86040518163ffffffff1660e01b815260040160206040518083038186803b15801561146c57600080fd5b505afa158015611480573d6000803e3d6000fd5b505050506040513d602081101561149657600080fd5b505190506114a26127d6565b600954604080516362b939e160e11b8152841515600482015290516101009092046001600160a01b03169163c57273c29160248082019260009290919082900301818387803b1580156114f457600080fd5b505af1158015611508573d6000803e3d6000fd5b5050505080600960019054906101000a90046001600160a01b03166001600160a01b031663b69ef8a86040518163ffffffff1660e01b815260040160206040518083038186803b15801561155b57600080fd5b505afa15801561156f573d6000803e3d6000fd5b505050506040513d602081101561158557600080fd5b5051116115d9576040805162461bcd60e51b815260206004820152601d60248201527f4e6f206368616e676520696e2073747261746567792062616c616e6365000000604482015290519081900360640190fd5b600061161c60086000815481106115ec57fe5b906000526020600020906002020160010154600a0a610c28670de0b6b3a76400008a61260c90919063ffffffff16565b90508060006116296106a3565b111561164e5761164b87610c2861163e6106a3565b859063ffffffff61260c16565b90505b61165f6116596122c8565b82612a31565b426007600061166c6122c8565b6001600160a01b03166001600160a01b03168152602001908152602001600020600001819055506116cc81600760006116a36122c8565b6001600160a01b031681526020810191909152604001600020600101549063ffffffff6125ab16565b600760006116d86122c8565b6001600160a01b031681526020810191909152604001600020600101556116fd6122c8565b6001600160a01b03167f4700c1726b4198077cd40320a32c45265a1910521eb0ef713dd1d8412413d7fc896040518082815260200191505060405180910390a250506001600655505050505050565b6117546122c8565b60055461010090046001600160a01b039081169116146117a9576040805162461bcd60e51b81526020600482018190526024820152600080516020613621833981519152604482015290519081900360640190fd5b600180600d54146117eb5760405162461bcd60e51b81526004018080602001828103825260278152602001806135b16027913960400191505060405180910390fd5b6000600d8190556117fa6106a3565b11156118545762015180600c5401421015611854576040805162461bcd60e51b8152602060048201526015602482015274151a5b595b1bd8dac81d1a5b59481b9bdd081b595d605a1b604482015290519081900360640190fd5b600e54611869906001600160a01b0316612b21565b50565b600954600090819061010090046001600160a01b03161561191157600960019054906101000a90046001600160a01b03166001600160a01b031663c650ea596040518163ffffffff1660e01b8152600401604080518083038186803b1580156118d457600080fd5b505afa1580156118e8573d6000803e3d6000fd5b505050506040513d60408110156118fe57600080fd5b5080516020909101519092509050611b3e565b6000600860008154811061192157fe5b600091825260209182902060029091020154604080516370a0823160e01b815230600482015290516001600160a01b03909216926370a0823192602480840193829003018186803b15801561197557600080fd5b505afa158015611989573d6000803e3d6000fd5b505050506040513d602081101561199f57600080fd5b50511115611a675760086000815481106119b557fe5b60009182526020822060029091020154600880546001600160a01b039092169290916119dd57fe5b600091825260209182902060029091020154604080516370a0823160e01b815230600482015290516001600160a01b03909216926370a0823192602480840193829003018186803b158015611a3157600080fd5b505afa158015611a45573d6000803e3d6000fd5b505050506040513d6020811015611a5b57600080fd5b50519092509050611b3e565b60006008600181548110611a7757fe5b600091825260209182902060029091020154604080516370a0823160e01b815230600482015290516001600160a01b03909216926370a0823192602480840193829003018186803b158015611acb57600080fd5b505afa158015611adf573d6000803e3d6000fd5b505050506040513d6020811015611af557600080fd5b50511115611b37576008600181548110611b0b57fe5b6000918252602090912060029091020154600880546001600160a01b039092169160019081106119dd57fe5b5060009050805b9091565b611b4a6122c8565b60055461010090046001600160a01b03908116911614611b9f576040805162461bcd60e51b81526020600482018190526024820152600080516020613621833981519152604482015290519081900360640190fd5b6009805460ff19169081905561010090046001600160a01b031615801590611bce57506000611bcc6106a3565b115b15611c3c57600960019054906101000a90046001600160a01b03166001600160a01b031663e9fad8ee6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611c2357600080fd5b505af1158015611c37573d6000803e3d6000fd5b505050505b60098054610100600160a81b03191690556000600d55565b60026006541415611cac576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002600655600b546001600160a01b031615611d2b57600b60009054906101000a90046001600160a01b03166001600160a01b0316635d843d9b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611d1257600080fd5b505af1158015611d26573d6000803e3d6000fd5b505050505b60008111611d74576040805162461bcd60e51b8152602060048201526011602482015270043616e6e6f74207769746864726177203607c1b604482015290519081900360640190fd5b6000611d7e6106a3565b11611dc6576040805162461bcd60e51b81526020600482015260136024820152724e6f2076616c75652072656465656d61626c6560681b604482015290519081900360640190fd5b6000611dd06106a3565b9050611de3611ddd6122c8565b83612c2a565b6000611ded6122c8565b6001600160a01b0316326001600160a01b03161415611e0e57506001611ea2565b4260076000611e1b6122c8565b6001600160a01b03168152602081019190915260400160002054108015611e675750600060076000611e4b6122c8565b6001600160a01b03168152602081019190915260400160002054115b611ea25760405162461bcd60e51b81526004018080602001828103825260348152602001806136416034913960400191505060405180910390fd5b60076000611eae6122c8565b6001600160a01b03166001600160a01b03168152602001908152602001600020600101548311611f3f57611f118360076000611ee86122c8565b6001600160a01b031681526020810191909152604001600020600101549063ffffffff6129ef16565b60076000611f1d6122c8565b6001600160a01b03168152602081019190915260400160002060010155611fae565b600060076000611f4d6122c8565b6001600160a01b03168152602081019190915260400160002060019081019190915581151514611fae5760405162461bcd60e51b815260040180806020018281038252603e815260200180613709603e913960400191505060405180910390fd5b60095460009061010090046001600160a01b0316156120b15760095461010090046001600160a01b031663234b6745611fe56122c8565b604080516001600160e01b031960e085901b1681526001600160a01b039092166004830152602482018890526044820187905285151560648301525160848083019260209291908290030181600087803b15801561204257600080fd5b505af1158015612056573d6000803e3d6000fd5b505050506040513d602081101561206c57600080fd5b50519050806120ac5760405162461bcd60e51b815260040180806020018281038252602481526020018061356a6024913960400191505060405180910390fd5b61211d565b828410156120fa5760006120c430610cbf565b905060006120dc85610c28848963ffffffff61260c16565b90506120f16120e96122c8565b826000612d26565b915061211d9050565b600061210530610cbf565b905061211a6121126122c8565b826001612d26565b90505b6121256122c8565b6001600160a01b03167f95ae649bfaaef9def56a52f4fb2d9e8fa5496bb7082930e442c74cc76b03dcb3826040518082815260200191505060405180910390a2505060016006555050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6121a36122c8565b60055461010090046001600160a01b039081169116146121f8576040805162461bcd60e51b81526020600482018190526024820152600080516020613621833981519152604482015290519081900360640190fd5b42600c556002600d55600e80546001600160a01b0383166001600160a01b03199182168117909255600a805490911690911790556122346106a3565b61186957611869610e48565b6122486122c8565b60055461010090046001600160a01b0390811691161461229d576040805162461bcd60e51b81526020600482018190526024820152600080516020613621833981519152604482015290519081900360640190fd5b42600c556001600d55600e80546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b6001600160a01b0383166123115760405162461bcd60e51b81526004018080602001828103825260248152602001806136e56024913960400191505060405180910390fd5b6001600160a01b0382166123565760405162461bcd60e51b81526004018080602001828103825260228152602001806135226022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166123fd5760405162461bcd60e51b81526004018080602001828103825260258152602001806136966025913960400191505060405180910390fd5b6001600160a01b0382166124425760405162461bcd60e51b815260040180806020018281038252602381526020018061347f6023913960400191505060405180910390fd5b61248581604051806060016040528060268152602001613544602691396001600160a01b038616600090815260208190526040902054919063ffffffff61251416565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546124ba908263ffffffff6125ab16565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600081848411156125a35760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612568578181015183820152602001612550565b50505050905090810190601f1680156125955780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015612605576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60008261261b5750600061069d565b8282028284828161262857fe5b04146126055760405162461bcd60e51b81526004018080602001828103825260218152602001806135d86021913960400191505060405180910390fd5b600061260583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613052565b6000816126b657506000610bc3565b600b54670de0b6b3a7640000906001600160a01b03161561275d57600b60009054906101000a90046001600160a01b03166001600160a01b0316639e59ab0b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561271f57600080fd5b505afa158015612733573d6000803e3d6000fd5b505050506040513d602081101561274957600080fd5b505190508061275d5750670de0b6b3a76400005b6127b8600860018154811061276e57fe5b906000526020600020906002020160010154600a0a610c28600860008154811061279457fe5b906000526020600020906002020160010154600a0a8661260c90919063ffffffff16565b925061260581610c2885670de0b6b3a764000063ffffffff61260c16565b6000600960019054906101000a90046001600160a01b03166001600160a01b031663780d9d2d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561282657600080fd5b505afa15801561283a573d6000803e3d6000fd5b505050506040513d602081101561285057600080fd5b5051905060005b8181101561298b5760095460408051635930a0a160e01b815260048101849052905160009261010090046001600160a01b031691635930a0a1916024808301926020929190829003018186803b1580156128b057600080fd5b505afa1580156128c4573d6000803e3d6000fd5b505050506040513d60208110156128da57600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038416916370a08231916024808301926020929190829003018186803b15801561292857600080fd5b505afa15801561293c573d6000803e3d6000fd5b505050506040513d602081101561295257600080fd5b50519050801561298157600954612981906001600160a01b03848116916101009004168363ffffffff6130b716565b5050600101612857565b5050565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526129e9908590613105565b50505050565b600061260583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612514565b6001600160a01b038216612a8c576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b600254612a9f908263ffffffff6125ab16565b6002556001600160a01b038216600090815260208190526040902054612acb908263ffffffff6125ab16565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b612b296122c8565b60055461010090046001600160a01b03908116911614612b7e576040805162461bcd60e51b81526020600482018190526024820152600080516020613621833981519152604482015290519081900360640190fd5b6001600160a01b038116612bc35760405162461bcd60e51b81526004018080602001828103825260268152602001806134fc6026913960400191505060405180910390fd5b6005546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6001600160a01b038216612c6f5760405162461bcd60e51b81526004018080602001828103825260218152602001806136756021913960400191505060405180910390fd5b612cb2816040518060600160405280602281526020016134da602291396001600160a01b038516600090815260208190526040902054919063ffffffff61251416565b6001600160a01b038316600090815260208190526040902055600254612cde908263ffffffff6129ef16565b6002556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b60085460018215151415612e1f5760005b81811015612e1857600060088281548110612d4e57fe5b600091825260209182902060029091020154604080516370a0823160e01b815230600482015290516001600160a01b03909216926370a0823192602480840193829003018186803b158015612da257600080fd5b505afa158015612db6573d6000803e3d6000fd5b505050506040513d6020811015612dcc57600080fd5b505190508015612e0f57612e0f868260088581548110612de857fe5b60009182526020909120600290910201546001600160a01b0316919063ffffffff6130b716565b50600101612d37565b505061304d565b60005b8181101561304a57600060088281548110612e3957fe5b600091825260209182902060029091020154604080516370a0823160e01b815230600482015290516001600160a01b03909216926370a0823192602480840193829003018186803b158015612e8d57600080fd5b505afa158015612ea1573d6000803e3d6000fd5b505050506040513d6020811015612eb757600080fd5b5051905081612ed857612ed16008600081548110610d8657fe5b9050612f00565b8160011415612f0057612eea816126a7565b9050612efd6008600081548110610d8657fe5b90505b848111612fc3578015612fbe57612f1d858263ffffffff6129ef16565b9450612fbe8660088481548110612f3057fe5b600091825260209182902060029091020154604080516370a0823160e01b815230600482015290516001600160a01b03909216926370a0823192602480840193829003018186803b158015612f8457600080fd5b505afa158015612f98573d6000803e3d6000fd5b505050506040513d6020811015612fae57600080fd5b50516008805486908110612de857fe5b613041565b841561303b57600061300c670de0b6b3a7640000610c286008600081548110612fe857fe5b906000526020600020906002020160010154600a0a8961260c90919063ffffffff16565b9050826001141561302357613020816131b6565b90505b60009550613039878260088681548110612de857fe5b505b5061304a565b50600101612e22565b50505b505050565b600081836130a15760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315612568578181015183820152602001612550565b5060008385816130ad57fe5b0495945050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261304d9084905b606061315a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166132c19092919063ffffffff16565b80519091501561304d5780806020019051602081101561317957600080fd5b505161304d5760405162461bcd60e51b815260040180806020018281038252602a815260200180613747602a913960400191505060405180910390fd5b6000816131c557506000610bc3565b600b54670de0b6b3a7640000906001600160a01b03161561326c57600b60009054906101000a90046001600160a01b03166001600160a01b0316639e59ab0b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561322e57600080fd5b505afa158015613242573d6000803e3d6000fd5b505050506040513d602081101561325857600080fd5b505190508061326c5750670de0b6b3a76400005b6132a3600860008154811061327d57fe5b906000526020600020906002020160010154600a0a610c28600860018154811061279457fe5b9250612605670de0b6b3a7640000610c28858463ffffffff61260c16565b60606132d084846000856132d8565b949350505050565b60606132e385613445565b613334576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106133735780518252601f199092019160209182019101613354565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146133d5576040519150601f19603f3d011682016040523d82523d6000602084013e6133da565b606091505b509150915081156133ee5791506132d09050565b8051156133fe5780518082602001fd5b60405162461bcd60e51b8152602060048201818152865160248401528651879391928392604401919085019080838360008315612568578181015183820152602001612550565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708181148015906132d057505015159291505056fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573734465706f736974732068617665206265656e2073757370656e6465642c2062757420796f752063616e207374696c6c20776974686472617745524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63654661696c656420746f2077697468647261772066726f6d207468652073747261746567795072696365206f7261636c65206e6f74207365742c2063616e2774206465706f73697454696d656c6f636b206e6f7420616371756972656420666f7220746869732066756e6374696f6e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572436f6e7472616374206465706f7369746f722063616e6e6f742072656465656d20696e2073616d65207472616e73616374696f6e45524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f20616464726573734e6f20737472617465677920636f6e747261637420686173206265656e2073656c65637465642079657445524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373436f6e7472616374206465706f7369746f72732063616e6e6f742074616b65206f7574206d6f7265207468616e207768617420746865792070757420696e5361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122094713640825d6deefcd30cdab69f3a3d044c8b88f0fa9e9640fcabcaf1a3cf3d64736f6c63430006060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000e804964c296e9fb666fbe67767838c1ff9ab32090000000000000000000000000f1f24bdccb632e33888feaf73d05dd851b811ec
-----Decoded View---------------
Arg [0] : _reeth (address): 0xe804964c296E9FB666fBE67767838c1FF9Ab3209
Arg [1] : _oracle (address): 0x0f1f24BdCcb632e33888fEaf73D05dD851B811Ec
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000e804964c296e9fb666fbe67767838c1ff9ab3209
Arg [1] : 0000000000000000000000000f1f24bdccb632e33888feaf73d05dd851b811ec
Deployed Bytecode Sourcemap
33367:18506:0:-:0;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33367:18506:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;17524:83:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;17524:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19604:169;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;19604:169:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;18593:100;;;:::i;:::-;;;;;;;;;;;;;;;;20242:321;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;20242:321:0;;;;;;;;;;;;;;;;;:::i;18441:92::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35946:104;;;:::i;:::-;;;;-1:-1:-1;;;;;35946:104:0;;;;;;;;;;;;;;20967:218;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;20967:218:0;;;;;;;;:::i;51509:180::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;51509:180:0;-1:-1:-1;;;;;51509:180:0;;:::i;:::-;;34666:31;;;:::i;38771:400::-;;;:::i;51701:139::-;;;:::i;26473:84::-;;;:::i;47830:87::-;;;:::i;47735:::-;;;:::i;36217:401::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;36217:401:0;;;;;;;;;;;;;;;;;18751:119;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;18751:119:0;-1:-1:-1;;;;;18751:119:0;;:::i;36058:147::-;;;:::i;37856:262::-;;;:::i;35822:112::-;;;:::i;17721:87::-;;;:::i;34956:31::-;;;:::i;38130:629::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;38130:629:0;-1:-1:-1;;;;;38130:629:0;;:::i;21683:269::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;21683:269:0;;;;;;;;:::i;50255:693::-;;;:::i;19078:175::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;19078:175:0;;;;;;;;:::i;40033:2329::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;40033:2329:0;;:::i;49633:139::-;;;:::i;39183:792::-;;;:::i;:::-;;;;-1:-1:-1;;;;;39183:792:0;;;;;;;;;;;;;;;;;;;;;48072:447;;;:::i;42374:2840::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;42374:2840:0;;:::i;19311:151::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;19311:151:0;;;;;;;;;;:::i;49884:359::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;49884:359:0;-1:-1:-1;;;;;49884:359:0;;:::i;49435:186::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;49435:186:0;-1:-1:-1;;;;;49435:186:0;;:::i;17524:83::-;17594:5;17587:12;;;;;;;;-1:-1:-1;;17587:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17561:13;;17587:12;;17594:5;;17587:12;;17594:5;17587:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17524:83;;:::o;19604:169::-;19687:4;19704:39;19713:12;:10;:12::i;:::-;19727:7;19736:6;19704:8;:39::i;:::-;-1:-1:-1;19761:4:0;19604:169;;;;;:::o;18593:100::-;18673:12;;18593:100;:::o;20242:321::-;20348:4;20365:36;20375:6;20383:9;20394:6;20365:9;:36::i;:::-;20412:121;20421:6;20429:12;:10;:12::i;:::-;20443:89;20481:6;20443:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20443:19:0;;;;;;:11;:19;;;;;;20463:12;:10;:12::i;:::-;-1:-1:-1;;;;;20443:33:0;;;;;;;;;;;;-1:-1:-1;20443:33:0;;;:89;;:37;:89;:::i;:::-;20412:8;:121::i;:::-;-1:-1:-1;20551:4:0;20242:321;;;;;:::o;18441:92::-;18516:9;;;;18441:92;:::o;35946:104::-;36026:16;;-1:-1:-1;;;;;36026:16:0;35946:104;:::o;20967:218::-;21055:4;21072:83;21081:12;:10;:12::i;:::-;21095:7;21104:50;21143:10;21104:11;:25;21116:12;:10;:12::i;:::-;-1:-1:-1;;;;;21104:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;21104:25:0;;;:34;;;;;;;;;;;:50;:38;:50;:::i;51509:180::-;26700:12;:10;:12::i;:::-;26690:6;;;;;-1:-1:-1;;;;;26690:6:0;;;:22;;;26682:67;;;;;-1:-1:-1;;;26682:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;26682:67:0;;;;;;;;;;;;;;;51611:3:::1;51594:14;:20:::0;51641:1:::1;51625:13;:17:::0;51653::::1;:28:::0;;-1:-1:-1;;;;;;51653:28:0::1;-1:-1:-1::0;;;;;51653:28:0;;;::::1;::::0;;;::::1;::::0;;51509:180::o;34666:31::-;;;;;;:::o;38771:400::-;38827:7;38880:15;38898:40;38932:4;38898:25;:40::i;:::-;38990:15;;38880:58;;-1:-1:-1;38990:15:0;;;-1:-1:-1;;;;;38990:15:0;:48;38987:152;;39065:15;;;;;;;;;-1:-1:-1;;;;;39065:15:0;-1:-1:-1;;;;;39065:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;39065:25:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;39065:25:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;39065:25:0;39054:36;38987:152;39156:7;-1:-1:-1;38771:400:0;:::o;51701:139::-;26700:12;:10;:12::i;:::-;26690:6;;;;;-1:-1:-1;;;;;26690:6:0;;;:22;;;26682:67;;;;;-1:-1:-1;;;26682:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;26682:67:0;;;;;;;;;;;;;;;51782:1:::1;49012:5;48995:13;;:22;48987:74;;;;-1:-1:-1::0;;;48987:74:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49088:1;49072:13;:17:::0;;;49147:13:::1;:11;:13::i;:::-;:17;49144:184;;;48806:5;49256:14;;:34;49249:3;:41;;49241:75;;;::::0;;-1:-1:-1;;;49241:75:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;49241:75:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;51815:17:0::2;::::0;51796:16:::2;:36:::0;;-1:-1:-1;;;;;;51796:36:0::2;-1:-1:-1::0;;;;;51815:17:0;;::::2;51796:36:::0;;;::::2;::::0;;51701:139::o;26473:84::-;26543:6;;;;;-1:-1:-1;;;;;26543:6:0;;26473:84::o;47830:87::-;26700:12;:10;:12::i;:::-;26690:6;;;;;-1:-1:-1;;;;;26690:6:0;;;:22;;;26682:67;;;;;-1:-1:-1;;;26682:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;26682:67:0;;;;;;;;;;;;;;;47890:12:::1;:19:::0;;-1:-1:-1;;47890:19:0::1;47905:4;47890:19;::::0;;47830:87::o;47735:::-;26700:12;:10;:12::i;:::-;26690:6;;;;;-1:-1:-1;;;;;26690:6:0;;;:22;;;26682:67;;;;;-1:-1:-1;;;26682:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;26682:67:0;;;;;;;;;;;;;;;47794:12:::1;:20:::0;;-1:-1:-1;;47794:20:0::1;::::0;;47735:87::o;36217:401::-;36408:9;:16;36273;;;;36394:31;;;2:2:-1;;;;27:1;24;17:12;2:2;36394:31:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;36394:31:0;-1:-1:-1;36453:9:0;:16;36365:60;;-1:-1:-1;36436:14:0;36480:104;36503:6;36499:1;:10;36480:104;;;36553:9;36563:1;36553:12;;;;;;;;;;;;;;;;;;;;;:18;36530:12;;-1:-1:-1;;;;;36553:18:0;;;;36530:9;;36540:1;;36530:12;;;;;;-1:-1:-1;;;;;36530:42:0;;;:12;;;;;;;;;;;:42;36511:3;;36480:104;;;-1:-1:-1;36601:9:0;;-1:-1:-1;;36217:401:0;:::o;18751:119::-;-1:-1:-1;;;;;18844:18:0;;18817:7;18844:18;;;;;;;;;;;18751:119;;;;:::o;36058:147::-;33607:42;36058:147;:::o;37856:262::-;37902:7;37925:13;:11;:13::i;:::-;37922:189;;-1:-1:-1;37966:4:0;37959:11;;37922:189;38030:63;38079:13;:11;:13::i;:::-;38030:44;38048:25;:23;:25::i;:::-;38038:4;;38030:44;:17;:44;:::i;:::-;:48;:63;:48;:63;:::i;:::-;38023:70;;;;35822:112;35910:15;;;;;-1:-1:-1;;;;;35910:15:0;;35822:112::o;17721:87::-;17793:7;17786:14;;;;;;;;-1:-1:-1;;17786:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17760:13;;17786:14;;17793:7;;17786:14;;17793:7;17786:14;;;;;;;;;;;;;;;;;;;;;;;;34956:31;;;-1:-1:-1;;;;;34956:31:0;;:::o;38130:629::-;38204:7;;;38333:393;38356:9;:16;38352:20;;38333:393;;;38393:12;38408:9;38418:1;38408:12;;;;;;;;;;;;;;;;;;;;;;:18;:38;;;-1:-1:-1;;;38408:38:0;;-1:-1:-1;;;;;38408:38:0;;;;;;;;;:18;;;;;:28;;:38;;;;;;;;;;;:18;:38;;;2:2:-1;;;;27:1;24;17:12;2:2;38408:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38408:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;38408:38:0;;-1:-1:-1;38464:5:0;;38461:98;;38496:21;38512:4;38496:15;:21::i;:::-;38489:28;;38461:98;38580:45;38603:9;38613:1;38603:12;;;;;;;;;;;;;;;;;;:21;;;38599:2;:25;38580:14;38589:4;38580;:8;;:14;;;;:::i;:45::-;38573:52;-1:-1:-1;38651:18:0;:8;38573:52;38651:18;:12;:18;:::i;:::-;38640:29;-1:-1:-1;;38374:3:0;;38333:393;;;-1:-1:-1;38743:8:0;38130:629;-1:-1:-1;;38130:629:0:o;21683:269::-;21776:4;21793:129;21802:12;:10;:12::i;:::-;21816:7;21825:96;21864:15;21825:96;;;;;;;;;;;;;;;;;:11;:25;21837:12;:10;:12::i;:::-;-1:-1:-1;;;;;21825:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;21825:25:0;;;:34;;;;;;;;;;;:96;;:38;:96;:::i;50255:693::-;26700:12;:10;:12::i;:::-;26690:6;;;;;-1:-1:-1;;;;;26690:6:0;;;:22;;;26682:67;;;;;-1:-1:-1;;;26682:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;26682:67:0;;;;;;;;;;;;;;;50331:1:::1;49012:5;48995:13;;:22;48987:74;;;;-1:-1:-1::0;;;48987:74:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49088:1;49072:13;:17:::0;;;49147:13:::1;:11;:13::i;:::-;:17;49144:184;;;48806:5;49256:14;;:34;49249:3;:41;;49241:75;;;::::0;;-1:-1:-1;;;49241:75:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;49241:75:0;;;;;;;;;;;;;::::1;;50348:15:::2;::::0;::::2;::::0;::::2;-1:-1:-1::0;;;;;50348:15:0::2;:48:::0;;::::2;::::0;:69:::2;;;50416:1;50400:13;:11;:13::i;:::-;:17;50348:69;50345:186;;;50433:15;;;;;;;;;-1:-1:-1::0;;;;;50433:15:0::2;-1:-1:-1::0;;;;;50433:20:0::2;;:22;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::2;2:2;50433:22:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::2;77:16;74:1;67:27;5:2;50433:22:0;;;;50345:186;50577:17;::::0;50541:15:::2;:54:::0;;-1:-1:-1;;;;;;50541:54:0::2;50577:17;-1:-1:-1::0;;;;;50577:17:0;;::::2;50541:54:::0;::::2;::::0;;;::::2;::::0;;;;50609:15;::::2;;:48:::0;;::::2;::::0;:69:::2;;;50677:1;50661:13;:11;:13::i;:::-;:17;50609:69;50606:295;;;50694:22;:20;:22::i;:::-;50799:15;;;;;;;;;-1:-1:-1::0;;;;;50799:15:0::2;-1:-1:-1::0;;;;;50799:21:0::2;;:23;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::2;2:2;50799:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::2;77:16;74:1;67:27;5:2;50799:23:0;;;;50606:295;-1:-1:-1::0;50911:16:0::2;:29:::0;;-1:-1:-1;;;;;;50911:29:0::2;::::0;;50255:693::o;19078:175::-;19164:4;19181:42;19191:12;:10;:12::i;:::-;19205:9;19216:6;19181:9;:42::i;40033:2329::-;31218:1;31824:7;;:19;;31816:63;;;;;-1:-1:-1;;;31816:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;31218:1;31957:7;:18;40105:16:::1;::::0;-1:-1:-1;;;;;40105:16:0::1;40097:78;;;;-1:-1:-1::0;;;40097:78:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40198:16;;;;;;;;;-1:-1:-1::0;;;;;40198:16:0::1;-1:-1:-1::0;;;;;40186:46:0::1;;:48;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;40186:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;40186:48:0;;;;40281:13;40297:25;:23;:25::i;:::-;40424:12;::::0;40281:41;;-1:-1:-1;40424:12:0::1;;:20;;:12:::0;:20:::1;40416:89;;;;-1:-1:-1::0;;;40416:89:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40524:15;::::0;::::1;::::0;::::1;-1:-1:-1::0;;;;;40524:15:0::1;40516:102;;;;-1:-1:-1::0;;;40516:102:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40639:13;40655:9;40665:1;40655:12;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;::::0;;::::1;:18:::0;40720:31:::1;::::0;;-1:-1:-1;;;40720:31:0;;40745:4:::1;40720:31;::::0;::::1;::::0;;;-1:-1:-1;;;;;40655:18:0;;::::1;::::0;-1:-1:-1;40655:18:0;;40720:16:::1;::::0;:31;;;;;;;;;;40655:18;40720:31;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;40720:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;40720:31:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;40720:31:0;;-1:-1:-1;40762:60:0::1;40786:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;40762:23:0;::::1;::::0;40808:4:::1;40815:6:::0;40762:60:::1;:23;:60;:::i;:::-;40876:31;::::0;;-1:-1:-1;;;40876:31:0;;40901:4:::1;40876:31;::::0;::::1;::::0;;;:44:::1;::::0;40912:7;;-1:-1:-1;;;;;40876:16:0;::::1;::::0;::::1;::::0;:31;;;;;::::1;::::0;;;;;;;;:16;:31;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;40876:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;40876:31:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;40876:31:0;;:44:::1;:35;:44;:::i;:::-;40867:53;;41004:1;40995:6;:10;40987:39;;;::::0;;-1:-1:-1;;;40987:39:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;40987:39:0;;;;;;;;;;;;;::::1;;41037:16;41088:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;41075:25:0::1;:9;-1:-1:-1::0;;;;;41075:25:0::1;;41072:106;;;-1:-1:-1::0;41130:4:0::1;41072:106;41188:24;41215:15;;;;;;;;;-1:-1:-1::0;;;;;41215:15:0::1;-1:-1:-1::0;;;;;41215:23:0::1;;:25;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;41215:25:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;41215:25:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;41215:25:0;;-1:-1:-1;41368:22:0::1;:20;:22::i;:::-;41452:15;::::0;:36:::1;::::0;;-1:-1:-1;;;41452:36:0;;;::::1;;;::::0;::::1;::::0;;;:15:::1;::::0;;::::1;-1:-1:-1::0;;;;;41452:15:0::1;::::0;:23:::1;::::0;:36;;;;;-1:-1:-1;;41452:36:0;;;;;;;;-1:-1:-1;41452:15:0;:36;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;41452:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;41452:36:0;;;;41564:16;41536:15;;;;;;;;;-1:-1:-1::0;;;;;41536:15:0::1;-1:-1:-1::0;;;;;41536:23:0::1;;:25;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;41536:25:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;41536:25:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;41536:25:0;:44:::1;41528:86;;;::::0;;-1:-1:-1;;;41528:86:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;41652:24;41679:47;41704:9;41714:1;41704:12;;;;;;;;;;;;;;;;;;:21;;;41700:2;:25;41679:16;41690:4;41679:6;:10;;:16;;;;:::i;:47::-;41652:74:::0;-1:-1:-1;41652:74:0;41775:18:::1;41826:13;:11;:13::i;:::-;:17;41823:202;;;41941:46;41981:5;41941:35;41962:13;:11;:13::i;:::-;41941:16:::0;;:35:::1;:20;:35;:::i;:46::-;41928:59;;41823:202;42035:30;42041:12;:10;:12::i;:::-;42054:10;42035:5;:30::i;:::-;42202:3;42165:8;:22;42174:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;42165:22:0::1;-1:-1:-1::0;;;;;42165:22:0::1;;;;;;;;;;;;:34;;:40;;;;42255:52;42296:10;42255:8;:22;42264:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;42255:22:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;42255:22:0;:36:::1;;::::0;;:52:::1;:40;:52;:::i;:::-;42216:8;:22;42225:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;42216:22:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;42216:22:0;:36:::1;;:91:::0;42333:12:::1;:10;:12::i;:::-;-1:-1:-1::0;;;;;42325:29:0::1;;42347:6;42325:29;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;31174:1:0;32136:7;:22;-1:-1:-1;;;;;;40033:2329:0:o;49633:139::-;26700:12;:10;:12::i;:::-;26690:6;;;;;-1:-1:-1;;;;;26690:6:0;;;:22;;;26682:67;;;;;-1:-1:-1;;;26682:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;26682:67:0;;;;;;;;;;;;;;;49713:1:::1;49012:5;48995:13;;:22;48987:74;;;;-1:-1:-1::0;;;48987:74:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49088:1;49072:13;:17:::0;;;49147:13:::1;:11;:13::i;:::-;:17;49144:184;;;48806:5;49256:14;;:34;49249:3;:41;;49241:75;;;::::0;;-1:-1:-1;;;49241:75:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;49241:75:0;;;;;;;;;;;;;::::1;;49746:17:::2;::::0;49727:37:::2;::::0;-1:-1:-1;;;;;49746:17:0::2;49727:18;:37::i;:::-;26760:1:::1;49633:139::o:0;39183:792::-;39402:15;;39237:7;;;;39402:15;;;-1:-1:-1;;;;;39402:15:0;:48;39399:569;;39473:15;;;;;;;;;-1:-1:-1;;;;;39473:15:0;-1:-1:-1;;;;;39473:37:0;;:39;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;39473:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;39473:39:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;39473:39:0;;;;;;;;;-1:-1:-1;39473:39:0;-1:-1:-1;39466:46:0;;39399:569;39592:1;39546:9;39556:1;39546:12;;;;;;;;;;;;;;;;;;;;;;:18;:43;;;-1:-1:-1;;;39546:43:0;;39583:4;39546:43;;;;;;-1:-1:-1;;;;;39546:18:0;;;;:28;;:43;;;;;;;;;;:18;:43;;;2:2:-1;;;;27:1;24;17:12;2:2;39546:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;39546:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;39546:43:0;:47;39543:414;;;39629:9;39639:1;39629:12;;;;;;;;;;;;;;;;;;;;:18;39650:9;:12;;-1:-1:-1;;;;;39629:18:0;;;;39650:9;;:12;;;;;;;;;;;;;;;;;;:18;:43;;;-1:-1:-1;;;39650:43:0;;39687:4;39650:43;;;;;;-1:-1:-1;;;;;39650:18:0;;;;:28;;:43;;;;;;;;;;:18;:43;;;2:2:-1;;;;27:1;24;17:12;2:2;39650:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;39650:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;39650:43:0;39613:81;;-1:-1:-1;39650:43:0;-1:-1:-1;39613:81:0;;39543:414;39764:1;39718:9;39728:1;39718:12;;;;;;;;;;;;;;;;;;;;;;:18;:43;;;-1:-1:-1;;;39718:43:0;;39755:4;39718:43;;;;;;-1:-1:-1;;;;;39718:18:0;;;;:28;;:43;;;;;;;;;;:18;:43;;;2:2:-1;;;;27:1;24;17:12;2:2;39718:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;39718:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;39718:43:0;:47;39715:242;;;39801:9;39811:1;39801:12;;;;;;;;;;;;;;;;;;;;;:18;39822:9;:12;;-1:-1:-1;;;;;39801:18:0;;;;;;39822:12;;;;;39715:242;-1:-1:-1;39921:1:0;;-1:-1:-1;39921:1:0;39715:242;39183:792;;:::o;48072:447::-;26700:12;:10;:12::i;:::-;26690:6;;;;;-1:-1:-1;;;;;26690:6:0;;;:22;;;26682:67;;;;;-1:-1:-1;;;26682:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;26682:67:0;;;;;;;;;;;;;;;48140:12:::1;:20:::0;;-1:-1:-1;;48140:20:0::1;::::0;;;;::::1;48174:15:::0;::::1;-1:-1:-1::0;;;;;48174:15:0::1;:48:::0;;::::1;::::0;:69:::1;;;48242:1;48226:13;:11;:13::i;:::-;:17;48174:69;48171:186;;;48259:15;;;;;;;;;-1:-1:-1::0;;;;;48259:15:0::1;-1:-1:-1::0;;;;;48259:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;48259:22:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;48259:22:0;;;;48171:186;48367:15;:47:::0;;-1:-1:-1;;;;;;48367:47:0::1;::::0;;48411:1:::1;48425:13;:17:::0;48072:447::o;42374:2840::-;31218:1;31824:7;;:19;;31816:63;;;;;-1:-1:-1;;;31816:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;31218:1;31957:7;:18;42439:16:::1;::::0;-1:-1:-1;;;;;42439:16:0::1;:30:::0;42436:135:::1;;42497:16;;;;;;;;;-1:-1:-1::0;;;;;42497:16:0::1;-1:-1:-1::0;;;;;42485:46:0::1;;:48;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;42485:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;42485:48:0;;;;42436:135;42787:1;42779:5;:9;42771:39;;;::::0;;-1:-1:-1;;;42771:39:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;42771:39:0;;;;;;;;;;;;;::::1;;42845:1;42829:13;:11;:13::i;:::-;:17;42821:49;;;::::0;;-1:-1:-1;;;42821:49:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;42821:49:0;;;;;;;;;;;;;::::1;;42881:18;42902:13;:11;:13::i;:::-;42881:34;;42957:25;42963:12;:10;:12::i;:::-;42976:5;42957;:25::i;:::-;43061:16;43112:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;43099:25:0::1;:9;-1:-1:-1::0;;;;;43099:25:0::1;;43096:366;;;-1:-1:-1::0;43154:4:0::1;43096:366;;;43348:3;43311:8;:22;43320:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;43311:22:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;43311:22:0;:34;:40:::1;:82:::0;::::1;;;;43392:1;43355:8;:22;43364:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;43355:22:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;43355:22:0;:34;:38:::1;43311:82;43303:147;;;;-1:-1:-1::0;;;43303:147:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43530:8;:22;43539:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;43530:22:0::1;-1:-1:-1::0;;;;;43530:22:0::1;;;;;;;;;;;;:36;;;43521:5;:45;43518:437;;43621:47;43662:5;43621:8;:22;43630:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;43621:22:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;43621:22:0;:36:::1;;::::0;;:47:::1;:40;:47;:::i;:::-;43582:8;:22;43591:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;43582:22:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;43582:22:0;:36:::1;;:86:::0;43518:437:::1;;;43833:1;43794:8;:22;43803:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;43794:22:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;43794:22:0;:36:::1;::::0;;::::1;:40:::0;;;;43857:19;::::1;;;43849:94;;;;-1:-1:-1::0;;;43849:94:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44007:15;::::0;43967:22:::1;::::0;44007:15:::1;::::0;::::1;-1:-1:-1::0;;;;;44007:15:0::1;:48:::0;44004:1138:::1;;44088:15;::::0;::::1;::::0;::::1;-1:-1:-1::0;;;;;44088:15:0::1;:24;44113:12;:10;:12::i;:::-;44088:70;::::0;;-1:-1:-1;;;;;;44088:70:0::1;::::0;;;;;;-1:-1:-1;;;;;44088:70:0;;::::1;;::::0;::::1;::::0;;;;;;;;;;;;;;::::1;;::::0;;;;;;;;;;::::1;::::0;;;;;;;;-1:-1:-1;44088:70:0;;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;44088:70:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;44088:70:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;44088:70:0;;-1:-1:-1;44225:18:0;44217:67:::1;;;;-1:-1:-1::0;;;44217:67:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44004:1138;;;44438:10;44430:5;:18;44427:704;;;44468:16;44487:40;44521:4;44487:25;:40::i;:::-;44468:59:::0;-1:-1:-1;44546:18:0::1;44567:35;44591:10:::0;44567:19:::1;44468:59:::0;44580:5;44567:19:::1;:12;:19;:::i;:35::-;44546:56;;44658:59;44685:12;:10;:12::i;:::-;44699:10;44711:5;44658:26;:59::i;:::-;44799:10:::0;-1:-1:-1;44427:704:0::1;::::0;-1:-1:-1;44427:704:0::1;;44900:16;44919:40;44953:4;44919:25;:40::i;:::-;44900:59;;45015:56;45042:12;:10;:12::i;:::-;45056:8;45066:4;45015:26;:56::i;:::-;45107:8:::0;-1:-1:-1;44427:704:0::1;45177:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;45167:39:0::1;;45191:14;45167:39;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;31174:1:0;32136:7;:22;-1:-1:-1;;42374:2840:0:o;19311:151::-;-1:-1:-1;;;;;19427:18:0;;;19400:7;19427:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;19311:151::o;49884:359::-;26700:12;:10;:12::i;:::-;26690:6;;;;;-1:-1:-1;;;;;26690:6:0;;;:22;;;26682:67;;;;;-1:-1:-1;;;26682:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;26682:67:0;;;;;;;;;;;;;;;49983:3:::1;49966:14;:20:::0;50013:1:::1;49997:13;:17:::0;50025::::1;:28:::0;;-1:-1:-1;;;;;50025:28:0;::::1;-1:-1:-1::0;;;;;;50025:28:0;;::::1;::::0;::::1;::::0;;;50064:16:::1;:27:::0;;;;::::1;::::0;;::::1;::::0;;50105:13:::1;:11;:13::i;:::-;50102:134;;50202:22;:20;:22::i;49435:186::-:0;26700:12;:10;:12::i;:::-;26690:6;;;;;-1:-1:-1;;;;;26690:6:0;;;:22;;;26682:67;;;;;-1:-1:-1;;;26682:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;26682:67:0;;;;;;;;;;;;;;;49536:3:::1;49519:14;:20:::0;49566:1:::1;49550:13;:17:::0;49578::::1;:28:::0;;-1:-1:-1;;;;;;49578:28:0::1;-1:-1:-1::0;;;;;49578:28:0;;;::::1;::::0;;;::::1;::::0;;49435:186::o;650:106::-;738:10;650:106;:::o;24626:346::-;-1:-1:-1;;;;;24728:19:0;;24720:68;;;;-1:-1:-1;;;24720:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24807:21:0;;24799:68;;;;-1:-1:-1;;;24799:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24880:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;24932:32;;;;;;;;;;;;;;;;;24626:346;;;:::o;22437:479::-;-1:-1:-1;;;;;22543:20:0;;22535:70;;;;-1:-1:-1;;;22535:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22624:23:0;;22616:71;;;;-1:-1:-1;;;22616:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22720;22742:6;22720:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22720:17:0;;:9;:17;;;;;;;;;;;;:71;;:21;:71;:::i;:::-;-1:-1:-1;;;;;22700:17:0;;;:9;:17;;;;;;;;;;;:91;;;;22825:20;;;;;;;:32;;22850:6;22825:32;:24;:32;:::i;:::-;-1:-1:-1;;;;;22802:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;22873:35;;;;;;;22802:20;;22873:35;;;;;;;;;;;;;22437:479;;;:::o;5624:192::-;5710:7;5746:12;5738:6;;;;5730:29;;;;-1:-1:-1;;;5730:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;5730:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5782:5:0;;;5624:192::o;4731:181::-;4789:7;4821:5;;;4845:6;;;;4837:46;;;;;-1:-1:-1;;;4837:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;4903:1;4731:181;-1:-1:-1;;;4731:181:0:o;6070:471::-;6128:7;6373:6;6369:47;;-1:-1:-1;6403:1:0;6396:8;;6369:47;6440:5;;;6444:1;6440;:5;:1;6464:5;;;;;:10;6456:56;;;;-1:-1:-1;;;6456:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7012:132;7070:7;7097:39;7101:1;7104;7097:39;;;;;;;;;;;;;;;;;:3;:39::i;36630:602::-;36695:7;36718:12;36715:27;;-1:-1:-1;36739:1:0;36732:8;;36715:27;36791:16;;36773:4;;-1:-1:-1;;;;;36791:16:0;:30;36788:239;;36862:16;;;;;;;;;-1:-1:-1;;;;;36862:16:0;-1:-1:-1;;;;;36850:49:0;;:51;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;36850:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36850:51:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;36850:51:0;;-1:-1:-1;36919:15:0;36916:100;;-1:-1:-1;36967:4:0;36916:100;37047:69;37094:9;37104:1;37094:12;;;;;;;;;;;;;;;;;;:21;;;37090:2;:25;37047:38;37063:9;37073:1;37063:12;;;;;;;;;;;;;;;;;;:21;;;37059:2;:25;37047:7;:11;;:38;;;;:::i;:69::-;37037:79;-1:-1:-1;37166:33:0;37188:10;37166:17;37037:79;37178:4;37166:17;:11;:17;:::i;50960:447::-;51012:18;51033:15;;;;;;;;;-1:-1:-1;;;;;51033:15:0;-1:-1:-1;;;;;51033:33:0;;:35;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;51033:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;51033:35:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;51033:35:0;;-1:-1:-1;51083:9:0;51079:321;51102:10;51098:1;:14;51079:321;;;51164:15;;:37;;;-1:-1:-1;;;51164:37:0;;;;;;;;;;-1:-1:-1;;51164:15:0;;;-1:-1:-1;;;;;51164:15:0;;:34;;:37;;;;;;;;;;;;;;:15;:37;;;2:2:-1;;;;27:1;24;17:12;2:2;51164:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;51164:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;51164:37:0;51237:31;;;-1:-1:-1;;;51237:31:0;;51262:4;51237:31;;;;;;51164:37;;-1:-1:-1;51218:16:0;;-1:-1:-1;;;;;51237:16:0;;;;;:31;;;;;51164:37;;51237:31;;;;;;;:16;:31;;;2:2:-1;;;;27:1;24;17:12;2:2;51237:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;51237:31:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;51237:31:0;;-1:-1:-1;51286:12:0;;51283:106;;51346:15;;51318:55;;-1:-1:-1;;;;;51318:19:0;;;;51346:15;;;;51364:8;51318:55;:19;:55;:::i;:::-;-1:-1:-1;;51114:3:0;;51079:321;;;;50960:447;:::o;27455:205::-;27583:68;;;-1:-1:-1;;;;;27583:68:0;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;27583:68:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;27556:96:0;;27576:5;;27556:19;:96::i;:::-;27455:205;;;;:::o;5190:136::-;5248:7;5275:43;5279:1;5282;5275:43;;;;;;;;;;;;;;;;;:3;:43::i;23192:316::-;-1:-1:-1;;;;;23276:21:0;;23268:65;;;;;-1:-1:-1;;;23268:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;23361:12;;:24;;23378:6;23361:24;:16;:24;:::i;:::-;23346:12;:39;-1:-1:-1;;;;;23417:18:0;;:9;:18;;;;;;;;;;;:30;;23440:6;23417:30;:22;:30;:::i;:::-;-1:-1:-1;;;;;23396:18:0;;:9;:18;;;;;;;;;;;:51;;;;23463:37;;;;;;;23396:18;;:9;;23463:37;;;;;;;;;;23192:316;;:::o;26919:252::-;26700:12;:10;:12::i;:::-;26690:6;;;;;-1:-1:-1;;;;;26690:6:0;;;:22;;;26682:67;;;;;-1:-1:-1;;;26682:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;26682:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27016:22:0;::::1;27008:73;;;;-1:-1:-1::0;;;27008:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27118:6;::::0;27097:38:::1;::::0;-1:-1:-1;;;;;27097:38:0;;::::1;::::0;27118:6:::1;::::0;::::1;;::::0;27097:38:::1;::::0;;;::::1;27146:6;:17:::0;;-1:-1:-1;;;;;27146:17:0;;::::1;;;-1:-1:-1::0;;;;;;27146:17:0;;::::1;::::0;;;::::1;::::0;;26919:252::o;23835:356::-;-1:-1:-1;;;;;23919:21:0;;23911:67;;;;-1:-1:-1;;;23911:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24012:68;24035:6;24012:68;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24012:18:0;;:9;:18;;;;;;;;;;;;:68;;:22;:68;:::i;:::-;-1:-1:-1;;;;;23991:18:0;;:9;:18;;;;;;;;;;:89;24106:12;;:24;;24123:6;24106:24;:16;:24;:::i;:::-;24091:12;:39;24146:37;;;;;;;;24172:1;;-1:-1:-1;;;;;24146:37:0;;;;;;;;;;;;23835:356;;:::o;45337:2268::-;45469:9;:16;45511:4;45499:16;;;;45496:356;;;45575:9;45571:249;45594:6;45590:1;:10;45571:249;;;45625:12;45640:9;45650:1;45640:12;;;;;;;;;;;;;;;;;;;;;;:18;:43;;;-1:-1:-1;;;45640:43:0;;45677:4;45640:43;;;;;;-1:-1:-1;;;;;45640:18:0;;;;:28;;:43;;;;;;;;;;:18;:43;;;2:2:-1;;;;27:1;24;17:12;2:2;45640:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;45640:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;45640:43:0;;-1:-1:-1;45705:8:0;;45702:103;;45737:48;45769:9;45780:4;45737:9;45747:1;45737:12;;;;;;;;;;;;;;;;;;;;;:18;-1:-1:-1;;;;;45737:18:0;;:48;;:31;:48;:::i;:::-;-1:-1:-1;45602:3:0;;45571:249;;;;45834:7;;;45496:356;45868:9;45864:1734;45887:6;45883:1;:10;45864:1734;;;45957:26;45986:9;45996:1;45986:12;;;;;;;;;;;;;;;;;;;;;;:18;:43;;;-1:-1:-1;;;45986:43:0;;46023:4;45986:43;;;;;;-1:-1:-1;;;;;45986:18:0;;;;:28;;:43;;;;;;;;;;:18;:43;;;2:2:-1;;;;27:1;24;17:12;2:2;45986:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;45986:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;45986:43:0;;-1:-1:-1;46047:6:0;46044:462;;46094:59;46131:9;46141:1;46131:12;;;;;;;46094:59;46073:80;;46044:462;;;46208:1;46213;46208:6;46205:301;;;46279:35;46295:18;46279:15;:35::i;:::-;46258:56;;46431:59;46468:9;46478:1;46468:12;;;;;;;46431:59;46410:80;;46205:301;46545:15;46523:18;:37;46520:1067;;46645:22;;46642:256;;46709:39;:15;46729:18;46709:39;:19;:39;:::i;:::-;46691:57;;46771:87;46803:9;46814;46824:1;46814:12;;;;;;;;;;;;;;;;;;;;;;:18;:43;;;-1:-1:-1;;;46814:43:0;;46851:4;46814:43;;;;;;-1:-1:-1;;;;;46814:18:0;;;;:28;;:43;;;;;;;;;;:18;:43;;;2:2:-1;;;;27:1;24;17:12;2:2;46814:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;46814:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;46814:43:0;46771:9;:12;;46781:1;;46771:12;;;;;:87;46520:1067;;;46999:19;;46996:524;;47122:16;47141:56;47192:4;47141:46;47165:9;47175:1;47165:12;;;;;;;;;;;;;;;;;;:21;;;47161:2;:25;47141:15;:19;;:46;;;;:::i;:56::-;47122:75;;47223:1;47228;47223:6;47220:164;;;47335:25;47351:8;47335:15;:25::i;:::-;47324:36;;47220:164;47424:1;47406:19;;47448:52;47480:9;47491:8;47448:9;47458:1;47448:12;;;;;;;:52;46996:524;;47538:5;;;46520:1067;-1:-1:-1;45895:3:0;;45864:1734;;;;45337:2268;;;;;:::o;7635:278::-;7721:7;7756:12;7749:5;7741:28;;;;-1:-1:-1;;;7741:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;7741:28:0;;7780:9;7796:1;7792;:5;;;;;;;7635:278;-1:-1:-1;;;;;7635:278:0:o;27270:177::-;27380:58;;;-1:-1:-1;;;;;27380:58:0;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;27380:58:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;27353:86:0;;27373:5;;29575:761;29999:23;30025:69;30053:4;30025:69;;;;;;;;;;;;;;;;;30033:5;-1:-1:-1;;;;;30025:27:0;;;:69;;;;;:::i;:::-;30109:17;;29999:95;;-1:-1:-1;30109:21:0;30105:224;;30251:10;30240:30;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;30240:30:0;30232:85;;;;-1:-1:-1;;;30232:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37244:600;37309:7;37332:12;37329:27;;-1:-1:-1;37353:1:0;37346:8;;37329:27;37405:16;;37387:4;;-1:-1:-1;;;;;37405:16:0;:30;37402:239;;37476:16;;;;;;;;;-1:-1:-1;;;;;37476:16:0;-1:-1:-1;;;;;37464:49:0;;:51;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;37464:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37464:51:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;37464:51:0;;-1:-1:-1;37533:15:0;37530:100;;-1:-1:-1;37581:4:0;37530:100;37661:69;37708:9;37718:1;37708:12;;;;;;;;;;;;;;;;;;:21;;;37704:2;:25;37661:38;37677:9;37687:1;37677:12;;;;;;;37661:69;37651:79;-1:-1:-1;37778:33:0;37806:4;37778:23;37651:79;37790:10;37778:23;:11;:23;:::i;13008:196::-;13111:12;13143:53;13166:6;13174:4;13180:1;13183:12;13143:22;:53::i;:::-;13136:60;13008:196;-1:-1:-1;;;;13008:196:0:o;14375:979::-;14505:12;14538:18;14549:6;14538:10;:18::i;:::-;14530:60;;;;;-1:-1:-1;;;14530:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14664:12;14678:23;14705:6;-1:-1:-1;;;;;14705:11:0;14725:8;14736:4;14705:36;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;14705:36:0;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;14663:78:0;;;;14756:7;14752:595;;;14787:10;-1:-1:-1;14780:17:0;;-1:-1:-1;14780:17:0;14752:595;14901:17;;:21;14897:439;;15164:10;15158:17;15225:15;15212:10;15208:2;15204:19;15197:44;15112:148;15300:20;;-1:-1:-1;;;15300:20:0;;;;;;;;;;;;;;;;;15307:12;;15300:20;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;9908:619:0;9968:4;10436:20;;10279:66;10476:23;;;;;;:42;;-1:-1:-1;;10503:15:0;;;10468:51;-1:-1:-1;;9908:619:0:o
Swarm Source
ipfs://94713640825d6deefcd30cdab69f3a3d044c8b88f0fa9e9640fcabcaf1a3cf3d
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 34 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.