Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 74 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 14771079 | 1005 days ago | IN | 0 ETH | 0.00174084 | ||||
Withdraw | 13863611 | 1146 days ago | IN | 0 ETH | 0.01184886 | ||||
Approve | 13162923 | 1256 days ago | IN | 0 ETH | 0.00428931 | ||||
Deposit | 12931974 | 1292 days ago | IN | 0 ETH | 0.00181214 | ||||
Withdraw | 12926389 | 1293 days ago | IN | 0 ETH | 0.00241848 | ||||
Withdraw | 12909288 | 1295 days ago | IN | 0 ETH | 0.00346855 | ||||
Withdraw | 12909270 | 1295 days ago | IN | 0 ETH | 0.00330722 | ||||
Approve | 12817382 | 1310 days ago | IN | 0 ETH | 0.00153855 | ||||
Deposit | 12817362 | 1310 days ago | IN | 0 ETH | 0.00569609 | ||||
Withdraw | 12801809 | 1312 days ago | IN | 0 ETH | 0.00499804 | ||||
Approve | 12557044 | 1350 days ago | IN | 0 ETH | 0.00097908 | ||||
Withdraw | 12545187 | 1352 days ago | IN | 0 ETH | 0.00811722 | ||||
Withdraw | 12513996 | 1357 days ago | IN | 0 ETH | 0.00888604 | ||||
Deposit | 12487474 | 1361 days ago | IN | 0 ETH | 0.00966541 | ||||
Withdraw | 12487384 | 1361 days ago | IN | 0 ETH | 0.01507485 | ||||
Withdraw | 12318939 | 1387 days ago | IN | 0 ETH | 0.01360994 | ||||
Withdraw | 12121055 | 1418 days ago | IN | 0 ETH | 0.03522355 | ||||
Approve | 12118655 | 1418 days ago | IN | 0 ETH | 0.00471943 | ||||
Deposit | 12118600 | 1418 days ago | IN | 0 ETH | 0.0173856 | ||||
Purchase Multipl... | 12118590 | 1418 days ago | IN | 0 ETH | 0.01218414 | ||||
Withdraw | 11962360 | 1442 days ago | IN | 0 ETH | 0.03339528 | ||||
Withdraw | 11922464 | 1448 days ago | IN | 0 ETH | 0.0880952 | ||||
Deposit | 11889084 | 1453 days ago | IN | 0 ETH | 0.01757175 | ||||
Earn | 11811116 | 1465 days ago | IN | 0 ETH | 0.08021148 | ||||
Deposit | 11797747 | 1467 days ago | IN | 0 ETH | 0.0237861 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
VoxVaultV2
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-12-29 */ // SPDX-License-Identifier: MIT pragma solidity 0.6.12; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ 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; } } interface IStrategy { function rewards() external view returns (address); function gauge() external view returns (address); function underlying() external view returns (address); function timelock() external view returns (address); function deposit() external; function withdraw(uint256) external; function withdrawAll() external returns (uint256); function balanceOf() external view returns (uint256); function harvest() external; function salvage(address) external; function setTimelock(address _timelock) external; function setGovernance(address _governance) external; function setTreasury(address _treasury) external; } interface ITimelock { function MINIMUM_DELAY() external view returns (uint); function MAXIMUM_DELAY() external view returns (uint); function delay() external view returns (uint); } /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } /* * @dev 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; } } /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20Lib { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval( address indexed owner, address indexed spender, uint256 value ); } // File: contracts/utils/Address.sol /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require( address(this).balance >= amount, "Address: insufficient balance" ); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{value: amount}(""); require( success, "Address: unable to send value, recipient may have reverted" ); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue( target, data, value, "Address: low-level call with value failed" ); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require( address(this).balance >= value, "Address: insufficient balance for call" ); 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: contracts/token/ERC20/ERC20.sol /** * @dev 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 ERC20Lib is Context, IERC20Lib { 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; /** * @dev 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; } /** * @dev Returns the name of the token. */ function name() public view returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view returns (string memory) { return _symbol; } /** * @dev 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 returns (uint8) { return _decimals; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public override view returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public override view returns (uint256) { return _balances[account]; } /** * @dev 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; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public virtual override view returns (uint256) { return _allowances[owner][spender]; } /** * @dev 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; } /** * @dev 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; } /** * @dev 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; } /** * @dev 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; } /** * @dev 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"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub( amount, "ERC20: transfer amount exceeds balance" ); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev 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"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev 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"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub( amount, "ERC20: burn amount exceeds balance" ); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This 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); } /** * @dev 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_; } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be to transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20Lib { using SafeMath for uint256; using Address for address; function safeTransfer( IERC20Lib token, address to, uint256 value ) internal { _callOptionalReturn( token, abi.encodeWithSelector(token.transfer.selector, to, value) ); } function safeTransferFrom( IERC20Lib 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( IERC20Lib 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( IERC20Lib 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( IERC20Lib 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(IERC20Lib 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 VoxVaultV2 is ERC20Lib, ReentrancyGuard { using SafeERC20Lib for IERC20Lib; using Address for address; using SafeMath for uint256; IERC20Lib internal token; IERC20Lib internal vox; address public underlying; uint256 public min = 9500; uint256 public constant max = 10000; uint256 public burnFee = 5000; uint256 public constant burnFeeMax = 7500; uint256 public constant burnFeeMin = 2500; uint256 public constant burnFeeBase = 10000; // Withdrawal fee uint256 public withdrawalFee = 15; uint256 public constant withdrawalFeeMax = 25; uint256 public constant withdrawalFeeBase = 10000; bool public isActive = false; address public governance; address public treasury; address public timelock; address public strategy; address public burn = 0x000000000000000000000000000000000000dEaD; mapping(address => uint256) public depositBlocks; mapping(address => uint256) public deposits; mapping(address => uint256) public issued; mapping(address => uint256) public tiers; uint256[] public multiplierCosts; uint256 internal constant tierBase = 100; uint256 public totalDeposited = 0; // EVENTS event Deposit(address indexed user, uint256 amount); event Withdraw(address indexed user, uint256 amount); event SharesIssued(address indexed user, uint256 amount); event SharesPurged(address indexed user, uint256 amount); event ClaimRewards(address indexed user, uint256 amount); event MultiplierPurchased(address indexed user, uint256 tiers, uint256 totalCost); constructor( address _underlying, address _vox, address _governance, address _treasury, address _timelock ) public ERC20Lib( string(abi.encodePacked("voxie ", ERC20Lib(_underlying).name())), string(abi.encodePacked("v", ERC20Lib(_underlying).symbol())) ) { require( address(_underlying) != address(_vox), "!underlying equal to vox"); _setupDecimals(ERC20Lib(_underlying).decimals()); token = IERC20Lib(_underlying); vox = IERC20Lib(_vox); underlying = _underlying; governance = _governance; treasury = _treasury; timelock = _timelock; // multiplier costs from tier 1 to 5 multiplierCosts.push(31250000000000000); multiplierCosts.push(125000000000000000); multiplierCosts.push(281250000000000000); multiplierCosts.push(500000000000000000); multiplierCosts.push(781250000000000000); } // **** Modifiers **** // modifier isTimelock { require( msg.sender == timelock, "!timelock" ); _; } modifier isGovernance { require( msg.sender == governance, "!governance" ); _; } // Check the total underyling token balance to see if we should earn(); function balance() public view returns (uint256) { return token.balanceOf(address(this)).add( IStrategy(strategy).balanceOf() ); } // Sets whether deposits are accepted by the vault function setActive(bool _isActive) public isGovernance { isActive = _isActive; } // Set the minimum percentage of tokens that can be deposited to earn function setMin(uint256 _min) external isGovernance { require(_min <= max, "numerator cannot be greater than denominator"); min = _min; } // Set a new governance address, can only be triggered by the old address function setGovernance(address _governance) public isGovernance { governance = _governance; } // Set the timelock address, can only be triggered by the old address function setTimelock(address _timelock) public isTimelock { timelock = _timelock; } // Set a new strategy address, can only be triggered by the timelock function setStrategy(address _strategy) public isTimelock { require(IStrategy(_strategy).underlying() == address(token), '!underlying'); strategy = _strategy; } // Set the burn fee for multipliers function setBurnFee(uint256 _burnFee) public isTimelock { require(_burnFee <= burnFeeMax, 'burn max'); require(_burnFee >= burnFeeMin, 'burn min'); burnFee = _burnFee; } // Set withdrawal fee for the vault function setWithdrawalFee(uint256 _withdrawalFee) external isTimelock { require(_withdrawalFee <= withdrawalFeeMax, "!max withdrawal fee"); withdrawalFee = _withdrawalFee; } // Add a new multplier with the selected cost function addMultiplier(uint256 _cost) public isTimelock returns (uint256 index) { multiplierCosts.push(_cost); index = multiplierCosts.length - 1; } // Set new cost for multiplier, can only be triggered by the timelock function setMultiplier(uint256 index, uint256 _cost) public isTimelock { multiplierCosts[index] = _cost; } // Custom logic in here for how much of the underlying asset can be deposited // Sets the minimum required on-hand to keep small withdrawals cheap function available() public view returns (uint256) { return token.balanceOf(address(this)).mul(min).div(max); } // Deposits collected underlying assets into the strategy and starts earning function earn() public { require(isActive, 'vault is not active'); require(strategy != address(0), 'strategy is not set'); uint256 _bal = available(); token.safeTransfer(strategy, _bal); IStrategy(strategy).deposit(); } // Deposits underlying assets from the user into the vault contract function deposit(uint256 _amount) public nonReentrant { require(!address(msg.sender).isContract() && msg.sender == tx.origin, "!no contract"); require(isActive, 'vault is not active'); require(strategy != address(0), 'strategy is not yet set'); uint256 _pool = balance(); uint256 _before = token.balanceOf(address(this)); token.safeTransferFrom(msg.sender, address(this), _amount); uint256 _after = token.balanceOf(address(this)); _amount = _after.sub(_before); // Additional check for deflationary tokens deposits[msg.sender] = deposits[msg.sender].add(_amount); totalDeposited = totalDeposited.add(_amount); uint256 shares = 0; if (totalSupply() == 0) { uint256 userMultiplier = tiers[msg.sender].add(tierBase); shares = _amount.mul(userMultiplier).div(tierBase); } else { uint256 userMultiplier = tiers[msg.sender].add(tierBase); shares = (_amount.mul(userMultiplier).div(tierBase).mul(totalSupply())).div(_pool); } _mint(msg.sender, shares); issued[msg.sender] = issued[msg.sender].add(shares); depositBlocks[msg.sender] = block.number; emit Deposit(msg.sender, _amount); emit SharesIssued(msg.sender, shares); } // Deposits all the funds of the user function depositAll() external { deposit(token.balanceOf(msg.sender)); } // No rebalance implementation for lower fees and faster swaps function withdraw(uint256 _amount) public nonReentrant { require(!address(msg.sender).isContract() && msg.sender == tx.origin, "!no contract"); require(block.number > depositBlocks[msg.sender], 'withdraw: not the same block as deposits'); require(_amount > 0, 'withdraw: positive amount'); require(_amount <= deposits[msg.sender], 'withdraw: more than deposited'); require(issued[msg.sender] > 0, 'withdraw: you need to first make a deposit'); // Get the amount of user shares uint256 shares = issued[msg.sender]; // Calculate percentage of principal being withdrawn uint256 p = (_amount.mul(1e18).div(deposits[msg.sender])); // Calculate amount of shares to be burned uint256 r = shares.mul(p).div(1e18); // Make sure the user has the required amount in his balance require(balanceOf(msg.sender) >= r, "withdraw: not enough shares in balance"); // Burn the proportion of shares that are being withdrawn _burn(msg.sender, r); // Reduce the amount from user's issued amount issued[msg.sender] = issued[msg.sender].sub(r); // Calculate amount of rewards the user has gained uint256 rewards = balance().sub(totalDeposited); uint256 userRewards = 0; if (rewards > 0) { userRewards = (rewards.mul(shares)).div(totalSupply()); } // Receive the correct proportion of the rewards if (userRewards > 0) { userRewards = userRewards.mul(p).div(1e18); } // Calculate the withdrawal amount as _amount + user rewards uint256 withdrawAmount = _amount.add(userRewards); // Check balance uint256 b = token.balanceOf(address(this)); if (b < withdrawAmount) { uint256 _withdraw = withdrawAmount.sub(b); IStrategy(strategy).withdraw(_withdraw); uint256 _after = token.balanceOf(address(this)); uint256 _diff = _after.sub(b); if (_diff < _withdraw) { withdrawAmount = b.add(_diff); } } // Remove the withdrawn principal from total and user deposits deposits[msg.sender] = deposits[msg.sender].sub(_amount); totalDeposited = totalDeposited.sub(_amount); // Calculate withdrawal fee and deduct from amount uint256 _withdrawalFee = _amount.mul(withdrawalFee).div(withdrawalFeeBase); token.safeTransfer(treasury, _withdrawalFee); token.safeTransfer(msg.sender, withdrawAmount.sub(_withdrawalFee)); // Emit events emit Withdraw(msg.sender, _amount); emit SharesPurged(msg.sender, r); emit ClaimRewards(msg.sender, userRewards); } // Withdraws all underlying assets belonging to the user function withdrawAll() external { withdraw(deposits[msg.sender]); } function pendingRewards(address account) external view returns (uint256) { // Calculate amount of rewards the user has gained uint256 rewards = balance().sub(totalDeposited); uint256 shares = issued[account]; if (rewards > 0) { return (rewards.mul(shares)).div(totalSupply()); } } // Purchase a multiplier tier for the user function purchaseMultiplier(uint256 _tiers) external returns (uint256 newTier) { require(isActive, 'vault is not active'); require(strategy != address(0), 'strategy is not yet set'); require(_tiers > 0, 'you need to purchase at least one multiplier'); uint256 multipliersLength = multiplierCosts.length; require(tiers[msg.sender].add(_tiers) <= multipliersLength, 'you can not purchase so many tiers'); uint256 totalCost = 0; uint256 lastMultiplier = tiers[msg.sender].add(_tiers); for (uint256 i = tiers[msg.sender]; i < multipliersLength; i++) { if (i == lastMultiplier) { break; } totalCost = totalCost.add(multiplierCosts[i]); } require(IERC20Lib(vox).balanceOf(msg.sender) >= totalCost, 'you do not have enough VOX to purchase the multiplier tiers'); vox.safeTransferFrom(msg.sender, address(this), totalCost); newTier = tiers[msg.sender].add(_tiers); tiers[msg.sender] = newTier; emit MultiplierPurchased(msg.sender, _tiers, totalCost); } // Distribute the VOX tokens collected by the multiplier purchases function distribute() external isGovernance { uint256 b = vox.balanceOf(address(this)); if (b > 0) { uint256 toBurn = b.mul(burnFee).div(burnFeeBase); uint256 leftover = b.sub(toBurn); vox.safeTransfer(burn, toBurn); vox.safeTransfer(treasury, leftover); } } // Used to salvage any non-underlying assets to the treasury function salvage(address reserve, uint256 amount) external { require(msg.sender == governance, "!governance"); require(reserve != address(token), "token"); require(reserve != address(vox), "vox"); IERC20Lib(reserve).safeTransfer(treasury, amount); } // Helper function when migrating to new version function setMultiplier(address account, uint256 multiplier) external isGovernance { require(multiplier <= multiplierCosts.length, 'multiplier value too high'); tiers[account] = multiplier; } // Returns the current multiplier tier for the user function getMultiplier() external view returns (uint256) { return tiers[msg.sender]; } // Returns the next multiplier tier cost for the user function getNextMultiplierCost() external view returns (uint256) { require(tiers[msg.sender] < multiplierCosts.length, 'all tiers have already been purchased'); return multiplierCosts[tiers[msg.sender]]; } // Returns the total number of multipliers function getCountOfMultipliers() external view returns (uint256) { return multiplierCosts.length; } // Returns the current ratio between earned assets and deposited assets function getRatio() public view returns (uint256) { return (balance().sub(totalDeposited)).mul(1e18).div(totalSupply()); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_underlying","type":"address"},{"internalType":"address","name":"_vox","type":"address"},{"internalType":"address","name":"_governance","type":"address"},{"internalType":"address","name":"_treasury","type":"address"},{"internalType":"address","name":"_timelock","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":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ClaimRewards","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"tiers","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalCost","type":"uint256"}],"name":"MultiplierPurchased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SharesIssued","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SharesPurged","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":"Withdraw","type":"event"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"addMultiplier","outputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"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":[],"name":"available","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"balance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burn","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnFeeBase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnFeeMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnFeeMin","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":"depositAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"depositBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"deposits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distribute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCountOfMultipliers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNextMultiplierCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"isActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"issued","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"max","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"min","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"multiplierCosts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"pendingRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tiers","type":"uint256"}],"name":"purchaseMultiplier","outputs":[{"internalType":"uint256","name":"newTier","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"reserve","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"salvage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isActive","type":"bool"}],"name":"setActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"setBurnFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_governance","type":"address"}],"name":"setGovernance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_min","type":"uint256"}],"name":"setMin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"multiplier","type":"uint256"}],"name":"setMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_strategy","type":"address"}],"name":"setStrategy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_timelock","type":"address"}],"name":"setTimelock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_withdrawalFee","type":"uint256"}],"name":"setWithdrawalFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"strategy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tiers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timelock","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDeposited","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"underlying","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawalFeeBase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawalFeeMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405261251c600a55611388600b55600f600c556000600d60006101000a81548160ff02191690831515021790555061dead601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060006017553480156200008557600080fd5b50604051620066a4380380620066a4833981810160405260a0811015620000ab57600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291905050508473ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b815260040160006040518083038186803b1580156200012b57600080fd5b505afa15801562000140573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525060208110156200016b57600080fd5b81019080805160405193929190846401000000008211156200018c57600080fd5b83820191506020820185811115620001a357600080fd5b8251866001820283011164010000000082111715620001c157600080fd5b8083526020830192505050908051906020019080838360005b83811015620001f7578082015181840152602081019050620001da565b50505050905090810190601f168015620002255780820380516001836020036101000a031916815260200191505b5060405250505060405160200180807f766f78696520000000000000000000000000000000000000000000000000000081525060060182805190602001908083835b602083106200028c578051825260208201915060208101905060208303925062000267565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528573ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b1580156200030757600080fd5b505afa1580156200031c573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525060208110156200034757600080fd5b81019080805160405193929190846401000000008211156200036857600080fd5b838201915060208201858111156200037f57600080fd5b82518660018202830111640100000000821117156200039d57600080fd5b8083526020830192505050908051906020019080838360005b83811015620003d3578082015181840152602081019050620003b6565b50505050905090810190601f168015620004015780820380516001836020036101000a031916815260200191505b5060405250505060405160200180807f760000000000000000000000000000000000000000000000000000000000000081525060010182805190602001908083835b6020831062000468578051825260208201915060208101905060208303925062000443565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528160039080519060200190620004b4929190620008ce565b508060049080519060200190620004cd929190620008ce565b506012600560006101000a81548160ff021916908360ff160217905550505060016006819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141562000597576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f21756e6465726c79696e6720657175616c20746f20766f78000000000000000081525060200191505060405180910390fd5b6200062b8573ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015620005e257600080fd5b505afa158015620005f7573d6000803e3d6000fd5b505050506040513d60208110156200060e57600080fd5b8101908080519060200190929190505050620008b060201b60201c565b84600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600d60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506016666f05b59d3b2000908060018154018082558091505060019003906000526020600020016000909190919091505560166701bc16d674ec8000908060018154018082558091505060019003906000526020600020016000909190919091505560166703e7336287142000908060018154018082558091505060019003906000526020600020016000909190919091505560166706f05b59d3b2000090806001815401808255809150506001900390600052602060002001600090919091909150556016670ad78ebc5ac620009080600181540180825580915050600190039060005260206000200160009091909190915055505050505062000974565b80600560006101000a81548160ff021916908360ff16021790555050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200091157805160ff191683800117855562000942565b8280016001018555821562000942579182015b828111156200094157825182559160200191906001019062000924565b5b50905062000951919062000955565b5090565b5b808211156200097057600081600090555060010162000956565b5090565b615d2080620009846000396000f3fe608060405234801561001057600080fd5b506004361061038e5760003560e01c8063853828b6116101de578063c8111f271161010f578063ec1ebd7a116100ad578063fa43a10e1161007c578063fa43a10e14610f9e578063fc7e286d14610fbc578063fce589d814611014578063ff50abdc146110325761038e565b8063ec1ebd7a14610eec578063f02d7ef014610f0a578063f5a6ef3914610f62578063f889794514610f805761038e565b8063dd62ed3e116100e9578063dd62ed3e14610e42578063de5f626814610eba578063e4fc6b6d14610ec4578063e68af51814610ece5761038e565b8063c8111f2714610dac578063d33219b414610e04578063d389800f14610e385761038e565b8063a9059cbb1161017c578063acec338a11610156578063acec338a14610cec578063b69ef8a814610d1c578063b6b55f2514610d3a578063bdacb30314610d685761038e565b8063a9059cbb14610c16578063ab033ea914610c7a578063ac1e502514610cbe5761038e565b80639a7b5517116101b85780639a7b551714610b1e578063a235872d14610b3c578063a457c2d714610b7e578063a8c62e7614610be25761038e565b8063853828b614610a735780638bc7e8c414610a7d57806395d89b4114610a9b5761038e565b80633c250522116102c35780634bf2c7c9116102615780636f307dc3116102305780636f307dc31461097b57806370a08231146109af578063730aaa8c14610a075780637319d65c14610a255761038e565b80634bf2c7c9146108c75780635aa6e675146108f557806361d027b3146109295780636ac5db191461095d5761038e565b806340490a901161029d57806340490a901461082957806344df8e701461084757806345dc3dd81461087b57806348a0d754146108a95761038e565b80633c250522146107655780633cdc8819146107bd5780633e3309cc146107db5761038e565b80632e1a7d4d11610330578063333271d01161030a578063333271d01461066757806333a100ca1461069f57806334c3d0b0146106e357806339509351146107015761038e565b80632e1a7d4d146105c0578063313ce567146105ee57806331d7a2621461060f5761038e565b80630b1eebb51161036c5780630b1eebb5146104bc57806318160ddd146104fe57806322f3e2d41461051c57806323b872dd1461053c5761038e565b8063042ff6321461039357806306fdde03146103d5578063095ea7b314610458575b600080fd5b6103bf600480360360208110156103a957600080fd5b8101908080359060200190929190505050611050565b6040518082815260200191505060405180910390f35b6103dd6115f2565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561041d578082015181840152602081019050610402565b50505050905090810190601f16801561044a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6104a46004803603604081101561046e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611694565b60405180821515815260200191505060405180910390f35b6104e8600480360360208110156104d257600080fd5b81019080803590602001909291905050506116b2565b6040518082815260200191505060405180910390f35b6105066117b0565b6040518082815260200191505060405180910390f35b6105246117ba565b60405180821515815260200191505060405180910390f35b6105a86004803603606081101561055257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506117cd565b60405180821515815260200191505060405180910390f35b6105ec600480360360208110156105d657600080fd5b81019080803590602001909291905050506118a6565b005b6105f66123f5565b604051808260ff16815260200191505060405180910390f35b6106516004803603602081101561062557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061240c565b6040518082815260200191505060405180910390f35b61069d6004803603604081101561067d57600080fd5b8101908080359060200190929190803590602001909291905050506124b7565b005b6106e1600480360360208110156106b557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061259a565b005b6106eb6127e4565b6040518082815260200191505060405180910390f35b61074d6004803603604081101561071757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506127ea565b60405180821515815260200191505060405180910390f35b6107a76004803603602081101561077b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061289d565b6040518082815260200191505060405180910390f35b6107c56128b5565b6040518082815260200191505060405180910390f35b610827600480360360408110156107f157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506129af565b005b610831612c4b565b6040518082815260200191505060405180910390f35b61084f612c92565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6108a76004803603602081101561089157600080fd5b8101908080359060200190929190505050612cb8565b005b6108b1612de0565b6040518082815260200191505060405180910390f35b6108f3600480360360208110156108dd57600080fd5b8101908080359060200190929190505050612ed3565b005b6108fd613090565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6109316130b6565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6109656130dc565b6040518082815260200191505060405180910390f35b6109836130e2565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6109f1600480360360208110156109c557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613108565b6040518082815260200191505060405180910390f35b610a0f613150565b6040518082815260200191505060405180910390f35b610a7160048036036040811015610a3b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613156565b005b610a7b6132dc565b005b610a85613326565b6040518082815260200191505060405180910390f35b610aa361332c565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610ae3578082015181840152602081019050610ac8565b50505050905090810190601f168015610b105780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610b266133ce565b6040518082815260200191505060405180910390f35b610b6860048036036020811015610b5257600080fd5b81019080803590602001909291905050506133d4565b6040518082815260200191505060405180910390f35b610bca60048036036040811015610b9457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506133f5565b60405180821515815260200191505060405180910390f35b610bea6134c2565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610c6260048036036040811015610c2c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506134e8565b60405180821515815260200191505060405180910390f35b610cbc60048036036020811015610c9057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613506565b005b610cea60048036036020811015610cd457600080fd5b810190808035906020019092919050505061360d565b005b610d1a60048036036020811015610d0257600080fd5b81019080803515159060200190929190505050613751565b005b610d24613831565b6040518082815260200191505060405180910390f35b610d6660048036036020811015610d5057600080fd5b81019080803590602001909291905050506139b0565b005b610daa60048036036020811015610d7e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506141c1565b005b610dee60048036036020811015610dc257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506142c8565b6040518082815260200191505060405180910390f35b610e0c6142e0565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610e40614306565b005b610ea460048036036040811015610e5857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061454d565b6040518082815260200191505060405180910390f35b610ec26145d4565b005b610ecc6146a2565b005b610ed661495e565b6040518082815260200191505060405180910390f35b610ef461496b565b6040518082815260200191505060405180910390f35b610f4c60048036036020811015610f2057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506149c1565b6040518082815260200191505060405180910390f35b610f6a6149d9565b6040518082815260200191505060405180910390f35b610f886149df565b6040518082815260200191505060405180910390f35b610fa66149e5565b6040518082815260200191505060405180910390f35b610ffe60048036036020811015610fd257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506149ea565b6040518082815260200191505060405180910390f35b61101c614a02565b6040518082815260200191505060405180910390f35b61103a614a08565b6040518082815260200191505060405180910390f35b6000600d60009054906101000a900460ff166110d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f7661756c74206973206e6f74206163746976650000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611199576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f7374726174656779206973206e6f74207965742073657400000000000000000081525060200191505060405180910390fd5b600082116111f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180615a2d602c913960400191505060405180910390fd5b600060168054905090508061124f84601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614a0e90919063ffffffff16565b11156112a6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180615af36022913960400191505060405180910390fd5b6000806112fb85601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614a0e90919063ffffffff16565b90506000601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490505b83811015611390578181141561135757611390565b6113816016828154811061136757fe5b906000526020600020015484614a0e90919063ffffffff16565b92508080600101915050611342565b5081600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561141b57600080fd5b505afa15801561142f573d6000803e3d6000fd5b505050506040513d602081101561144557600080fd5b810190808051906020019092919050505010156114ad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b815260200180615b61603b913960400191505060405180910390fd5b6114fc333084600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16614a96909392919063ffffffff16565b61154e85601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614a0e90919063ffffffff16565b935083601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff167f9486b93ebe3cc3c54c18694e48c862cb92a7cbe539691e21d043bcc992ee8b5f8684604051808381526020018281526020019250505060405180910390a2505050919050565b606060038054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561168a5780601f1061165f5761010080835404028352916020019161168a565b820191906000526020600020905b81548152906001019060200180831161166d57829003601f168201915b5050505050905090565b60006116a86116a1614b57565b8484614b5f565b6001905092915050565b6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611777576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f2174696d656c6f636b000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60168290806001815401808255809150506001900390600052602060002001600090919091909150556001601680549050039050919050565b6000600254905090565b600d60009054906101000a900460ff1681565b60006117da848484614d56565b61189b846117e6614b57565b61189685604051806060016040528060288152602001615be560289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061184c614b57565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546150179092919063ffffffff16565b614b5f565b600190509392505050565b6002600654141561191f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60026006819055506119463373ffffffffffffffffffffffffffffffffffffffff166150d7565b15801561197e57503273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6119f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f216e6f20636f6e7472616374000000000000000000000000000000000000000081525060200191505060405180910390fd5b601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020544311611a87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180615bbd6028913960400191505060405180910390fd5b60008111611afd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f77697468647261773a20706f73697469766520616d6f756e740000000000000081525060200191505060405180910390fd5b601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054811115611bb2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f77697468647261773a206d6f7265207468616e206465706f736974656400000081525060200191505060405180910390fd5b6000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411611c4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615a7b602a913960400191505060405180910390fd5b6000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000611cfc601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cee670de0b6b3a7640000866150ea90919063ffffffff16565b61517090919063ffffffff16565b90506000611d2d670de0b6b3a7640000611d1f84866150ea90919063ffffffff16565b61517090919063ffffffff16565b905080611d3933613108565b1015611d90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180615b3b6026913960400191505060405180910390fd5b611d9a33826151ba565b611dec81601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461537e90919063ffffffff16565b601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000611e4d601754611e3f613831565b61537e90919063ffffffff16565b9050600080821115611e8857611e85611e646117b0565b611e7787856150ea90919063ffffffff16565b61517090919063ffffffff16565b90505b6000811115611ec157611ebe670de0b6b3a7640000611eb086846150ea90919063ffffffff16565b61517090919063ffffffff16565b90505b6000611ed68288614a0e90919063ffffffff16565b90506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611f6357600080fd5b505afa158015611f77573d6000803e3d6000fd5b505050506040513d6020811015611f8d57600080fd5b810190808051906020019092919050505090508181101561214d576000611fbd828461537e90919063ffffffff16565b9050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561203457600080fd5b505af1158015612048573d6000803e3d6000fd5b505050506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156120d757600080fd5b505afa1580156120eb573d6000803e3d6000fd5b505050506040513d602081101561210157600080fd5b810190808051906020019092919050505090506000612129848361537e90919063ffffffff16565b905082811015612149576121468185614a0e90919063ffffffff16565b94505b5050505b61219f88601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461537e90919063ffffffff16565b601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506121f78860175461537e90919063ffffffff16565b601781905550600061222861271061221a600c548c6150ea90919063ffffffff16565b61517090919063ffffffff16565b9050612299600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166153c89092919063ffffffff16565b6122f8336122b0838661537e90919063ffffffff16565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166153c89092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648a6040518082815260200191505060405180910390a23373ffffffffffffffffffffffffffffffffffffffff167f17603142347da9e422e7a13b7d8d03d2546cc9e5524fc730bb5d0280e800096b876040518082815260200191505060405180910390a23373ffffffffffffffffffffffffffffffffffffffff167f1f89f96333d3133000ee447473151fa9606543368f02271c9d95ae14f13bcc67856040518082815260200191505060405180910390a25050505050505050600160068190555050565b6000600560009054906101000a900460ff16905090565b60008061242b60175461241d613831565b61537e90919063ffffffff16565b90506000601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008211156124af576124a66124856117b0565b61249883856150ea90919063ffffffff16565b61517090919063ffffffff16565b925050506124b2565b50505b919050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461257a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f2174696d656c6f636b000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b806016838154811061258857fe5b90600052602060002001819055505050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461265d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f2174696d656c6f636b000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b1580156126dc57600080fd5b505afa1580156126f0573d6000803e3d6000fd5b505050506040513d602081101561270657600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16146127a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21756e6465726c79696e6700000000000000000000000000000000000000000081525060200191505060405180910390fd5b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6109c481565b60006128936127f7614b57565b8461288e8560016000612808614b57565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614a0e90919063ffffffff16565b614b5f565b6001905092915050565b60126020528060005260406000206000915090505481565b6000601680549050601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612953576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180615ca16025913960400191505060405180910390fd5b6016601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548154811061299f57fe5b9060005260206000200154905090565b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612a72576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21676f7665726e616e636500000000000000000000000000000000000000000081525060200191505060405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b36576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f746f6b656e00000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612bfa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260038152602001807f766f78000000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b612c47600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828473ffffffffffffffffffffffffffffffffffffffff166153c89092919063ffffffff16565b5050565b6000601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905090565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612d7b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21676f7665726e616e636500000000000000000000000000000000000000000081525060200191505060405180910390fd5b612710811115612dd6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180615ac7602c913960400191505060405180910390fd5b80600a8190555050565b6000612ece612710612ec0600a54600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612e7757600080fd5b505afa158015612e8b573d6000803e3d6000fd5b505050506040513d6020811015612ea157600080fd5b81019080805190602001909291905050506150ea90919063ffffffff16565b61517090919063ffffffff16565b905090565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612f96576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f2174696d656c6f636b000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b611d4c81111561300e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260088152602001807f6275726e206d617800000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6109c4811015613086576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260088152602001807f6275726e206d696e00000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600b8190555050565b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61271081565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611d4c81565b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613219576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21676f7665726e616e636500000000000000000000000000000000000000000081525060200191505060405180910390fd5b601680549050811115613294576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f6d756c7469706c6965722076616c756520746f6f20686967680000000000000081525060200191505060405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b613324601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118a6565b565b600c5481565b606060048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156133c45780601f10613399576101008083540402835291602001916133c4565b820191906000526020600020905b8154815290600101906020018083116133a757829003601f168201915b5050505050905090565b61271081565b601681815481106133e157fe5b906000526020600020016000915090505481565b60006134b8613402614b57565b846134b385604051806060016040528060258152602001615cc6602591396001600061342c614b57565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546150179092919063ffffffff16565b614b5f565b6001905092915050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006134fc6134f5614b57565b8484614d56565b6001905092915050565b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146135c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21676f7665726e616e636500000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600d60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146136d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f2174696d656c6f636b000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6019811115613747576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f216d6178207769746864726177616c206665650000000000000000000000000081525060200191505060405180910390fd5b80600c8190555050565b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613814576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21676f7665726e616e636500000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600d60006101000a81548160ff02191690831515021790555050565b60006139ab601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663722713f76040518163ffffffff1660e01b815260040160206040518083038186803b15801561389e57600080fd5b505afa1580156138b2573d6000803e3d6000fd5b505050506040513d60208110156138c857600080fd5b8101908080519060200190929190505050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561396257600080fd5b505afa158015613976573d6000803e3d6000fd5b505050506040513d602081101561398c57600080fd5b8101908080519060200190929190505050614a0e90919063ffffffff16565b905090565b60026006541415613a29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6002600681905550613a503373ffffffffffffffffffffffffffffffffffffffff166150d7565b158015613a8857503273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b613afa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f216e6f20636f6e7472616374000000000000000000000000000000000000000081525060200191505060405180910390fd5b600d60009054906101000a900460ff16613b7c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f7661756c74206973206e6f74206163746976650000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415613c41576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f7374726174656779206973206e6f74207965742073657400000000000000000081525060200191505060405180910390fd5b6000613c4b613831565b90506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015613cd857600080fd5b505afa158015613cec573d6000803e3d6000fd5b505050506040513d6020811015613d0257600080fd5b81019080805190602001909291905050509050613d64333085600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16614a96909392919063ffffffff16565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015613def57600080fd5b505afa158015613e03573d6000803e3d6000fd5b505050506040513d6020811015613e1957600080fd5b81019080805190602001909291905050509050613e3f828261537e90919063ffffffff16565b9350613e9384601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614a0e90919063ffffffff16565b601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613eeb84601754614a0e90919063ffffffff16565b601781905550600080613efc6117b0565b1415613f87576000613f576064601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614a0e90919063ffffffff16565b9050613f7f6064613f7183896150ea90919063ffffffff16565b61517090919063ffffffff16565b915050614033565b6000613fdc6064601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614a0e90919063ffffffff16565b905061402f85614021613fed6117b0565b6140136064614005878d6150ea90919063ffffffff16565b61517090919063ffffffff16565b6150ea90919063ffffffff16565b61517090919063ffffffff16565b9150505b61403d338261546a565b61408f81601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614a0e90919063ffffffff16565b601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555043601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c866040518082815260200191505060405180910390a23373ffffffffffffffffffffffffffffffffffffffff167f3abf6d97fde3541bb582f72fa6fb75093b8bb699577fbc722ac25de9f6fbc4ed826040518082815260200191505060405180910390a250505050600160068190555050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614614284576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f2174696d656c6f636b000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60156020528060005260406000206000915090505481565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60009054906101000a900460ff16614388576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f7661756c74206973206e6f74206163746976650000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561444d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f7374726174656779206973206e6f74207365740000000000000000000000000081525060200191505060405180910390fd5b6000614457612de0565b90506144c8601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166153c89092919063ffffffff16565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db06040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561453257600080fd5b505af1158015614546573d6000803e3d6000fd5b5050505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6146a0600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561466057600080fd5b505afa158015614674573d6000803e3d6000fd5b505050506040513d602081101561468a57600080fd5b81019080805190602001909291905050506139b0565b565b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614614765576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21676f7665726e616e636500000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156147f057600080fd5b505afa158015614804573d6000803e3d6000fd5b505050506040513d602081101561481a57600080fd5b81019080805190602001909291905050509050600081111561495b576000614861612710614853600b54856150ea90919063ffffffff16565b61517090919063ffffffff16565b90506000614878828461537e90919063ffffffff16565b90506148e9601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166153c89092919063ffffffff16565b614958600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166153c89092919063ffffffff16565b50505b50565b6000601680549050905090565b60006149bc6149786117b0565b6149ae670de0b6b3a76400006149a0601754614992613831565b61537e90919063ffffffff16565b6150ea90919063ffffffff16565b61517090919063ffffffff16565b905090565b60146020528060005260406000206000915090505481565b61271081565b600a5481565b601981565b60136020528060005260406000206000915090505481565b600b5481565b60175481565b600080828401905083811015614a8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b614b51846323b872dd60e01b858585604051602401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050615631565b50505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415614be5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180615c536024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415614c6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180615aa56022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415614ddc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180615c2e6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415614e62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180615a0a6023913960400191505060405180910390fd5b614e6d838383615720565b614ed881604051806060016040528060268152602001615b15602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546150179092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614f6b816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614a0e90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b60008383111582906150c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561508957808201518184015260208101905061506e565b50505050905090810190601f1680156150b65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080823b905060008111915050919050565b6000808314156150fd576000905061516a565b600082840290508284828161510e57fe5b0414615165576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180615b9c6021913960400191505060405180910390fd5b809150505b92915050565b60006151b283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250615725565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415615240576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180615c0d6021913960400191505060405180910390fd5b61524c82600083615720565b6152b781604051806060016040528060228152602001615a59602291396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546150179092919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061530e8160025461537e90919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b60006153c083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250615017565b905092915050565b6154658363a9059cbb60e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050615631565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561550d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b61551960008383615720565b61552e81600254614a0e90919063ffffffff16565b600281905550615585816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614a0e90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b6060615693826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166157eb9092919063ffffffff16565b905060008151111561571b578080602001905160208110156156b457600080fd5b810190808051906020019092919050505061571a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615c77602a913960400191505060405180910390fd5b5b505050565b505050565b600080831182906157d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561579657808201518184015260208101905061577b565b50505050905090810190601f1680156157c35780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816157dd57fe5b049050809150509392505050565b60606157fa8484600085615803565b90509392505050565b606061580e856150d7565b615880576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081525060200191505060405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b602083106158d057805182526020820191506020810190506020830392506158ad565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114615932576040519150601f19603f3d011682016040523d82523d6000602084013e615937565b606091505b5091509150811561594c578092505050615a01565b60008151111561595f5780518082602001fd5b836040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156159c65780820151818401526020810190506159ab565b50505050905090810190601f1680156159f35780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b94935050505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373796f75206e65656420746f207075726368617365206174206c65617374206f6e65206d756c7469706c69657245524332303a206275726e20616d6f756e7420657863656564732062616c616e636577697468647261773a20796f75206e65656420746f206669727374206d616b652061206465706f73697445524332303a20617070726f766520746f20746865207a65726f20616464726573736e756d657261746f722063616e6e6f742062652067726561746572207468616e2064656e6f6d696e61746f72796f752063616e206e6f7420707572636861736520736f206d616e7920746965727345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636577697468647261773a206e6f7420656e6f7567682073686172657320696e2062616c616e6365796f7520646f206e6f74206861766520656e6f75676820564f5820746f20707572636861736520746865206d756c7469706c696572207469657273536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7777697468647261773a206e6f74207468652073616d6520626c6f636b206173206465706f7369747345524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564616c6c207469657273206861766520616c7265616479206265656e2070757263686173656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220f579ae348b533fe883f4bee3ed313567dbd3255ad53505cb62e928c0182c1add64736f6c634300060c0033000000000000000000000000194ebd173f6cdace046c53eacce9b953f28411d100000000000000000000000012d102f06da35cc0111eb58017fd2cd28537d0e1000000000000000000000000ef3aaa003bc72e94cd5721be0bb5bb3883c8556b000000000000000000000000ff775ae2e70e87cf2bb618cc177750b0ad7b853f000000000000000000000000a79bf5b279277e0b43339809715ca2e25725eb94
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061038e5760003560e01c8063853828b6116101de578063c8111f271161010f578063ec1ebd7a116100ad578063fa43a10e1161007c578063fa43a10e14610f9e578063fc7e286d14610fbc578063fce589d814611014578063ff50abdc146110325761038e565b8063ec1ebd7a14610eec578063f02d7ef014610f0a578063f5a6ef3914610f62578063f889794514610f805761038e565b8063dd62ed3e116100e9578063dd62ed3e14610e42578063de5f626814610eba578063e4fc6b6d14610ec4578063e68af51814610ece5761038e565b8063c8111f2714610dac578063d33219b414610e04578063d389800f14610e385761038e565b8063a9059cbb1161017c578063acec338a11610156578063acec338a14610cec578063b69ef8a814610d1c578063b6b55f2514610d3a578063bdacb30314610d685761038e565b8063a9059cbb14610c16578063ab033ea914610c7a578063ac1e502514610cbe5761038e565b80639a7b5517116101b85780639a7b551714610b1e578063a235872d14610b3c578063a457c2d714610b7e578063a8c62e7614610be25761038e565b8063853828b614610a735780638bc7e8c414610a7d57806395d89b4114610a9b5761038e565b80633c250522116102c35780634bf2c7c9116102615780636f307dc3116102305780636f307dc31461097b57806370a08231146109af578063730aaa8c14610a075780637319d65c14610a255761038e565b80634bf2c7c9146108c75780635aa6e675146108f557806361d027b3146109295780636ac5db191461095d5761038e565b806340490a901161029d57806340490a901461082957806344df8e701461084757806345dc3dd81461087b57806348a0d754146108a95761038e565b80633c250522146107655780633cdc8819146107bd5780633e3309cc146107db5761038e565b80632e1a7d4d11610330578063333271d01161030a578063333271d01461066757806333a100ca1461069f57806334c3d0b0146106e357806339509351146107015761038e565b80632e1a7d4d146105c0578063313ce567146105ee57806331d7a2621461060f5761038e565b80630b1eebb51161036c5780630b1eebb5146104bc57806318160ddd146104fe57806322f3e2d41461051c57806323b872dd1461053c5761038e565b8063042ff6321461039357806306fdde03146103d5578063095ea7b314610458575b600080fd5b6103bf600480360360208110156103a957600080fd5b8101908080359060200190929190505050611050565b6040518082815260200191505060405180910390f35b6103dd6115f2565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561041d578082015181840152602081019050610402565b50505050905090810190601f16801561044a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6104a46004803603604081101561046e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611694565b60405180821515815260200191505060405180910390f35b6104e8600480360360208110156104d257600080fd5b81019080803590602001909291905050506116b2565b6040518082815260200191505060405180910390f35b6105066117b0565b6040518082815260200191505060405180910390f35b6105246117ba565b60405180821515815260200191505060405180910390f35b6105a86004803603606081101561055257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506117cd565b60405180821515815260200191505060405180910390f35b6105ec600480360360208110156105d657600080fd5b81019080803590602001909291905050506118a6565b005b6105f66123f5565b604051808260ff16815260200191505060405180910390f35b6106516004803603602081101561062557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061240c565b6040518082815260200191505060405180910390f35b61069d6004803603604081101561067d57600080fd5b8101908080359060200190929190803590602001909291905050506124b7565b005b6106e1600480360360208110156106b557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061259a565b005b6106eb6127e4565b6040518082815260200191505060405180910390f35b61074d6004803603604081101561071757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506127ea565b60405180821515815260200191505060405180910390f35b6107a76004803603602081101561077b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061289d565b6040518082815260200191505060405180910390f35b6107c56128b5565b6040518082815260200191505060405180910390f35b610827600480360360408110156107f157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506129af565b005b610831612c4b565b6040518082815260200191505060405180910390f35b61084f612c92565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6108a76004803603602081101561089157600080fd5b8101908080359060200190929190505050612cb8565b005b6108b1612de0565b6040518082815260200191505060405180910390f35b6108f3600480360360208110156108dd57600080fd5b8101908080359060200190929190505050612ed3565b005b6108fd613090565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6109316130b6565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6109656130dc565b6040518082815260200191505060405180910390f35b6109836130e2565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6109f1600480360360208110156109c557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613108565b6040518082815260200191505060405180910390f35b610a0f613150565b6040518082815260200191505060405180910390f35b610a7160048036036040811015610a3b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613156565b005b610a7b6132dc565b005b610a85613326565b6040518082815260200191505060405180910390f35b610aa361332c565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610ae3578082015181840152602081019050610ac8565b50505050905090810190601f168015610b105780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610b266133ce565b6040518082815260200191505060405180910390f35b610b6860048036036020811015610b5257600080fd5b81019080803590602001909291905050506133d4565b6040518082815260200191505060405180910390f35b610bca60048036036040811015610b9457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506133f5565b60405180821515815260200191505060405180910390f35b610bea6134c2565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610c6260048036036040811015610c2c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506134e8565b60405180821515815260200191505060405180910390f35b610cbc60048036036020811015610c9057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613506565b005b610cea60048036036020811015610cd457600080fd5b810190808035906020019092919050505061360d565b005b610d1a60048036036020811015610d0257600080fd5b81019080803515159060200190929190505050613751565b005b610d24613831565b6040518082815260200191505060405180910390f35b610d6660048036036020811015610d5057600080fd5b81019080803590602001909291905050506139b0565b005b610daa60048036036020811015610d7e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506141c1565b005b610dee60048036036020811015610dc257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506142c8565b6040518082815260200191505060405180910390f35b610e0c6142e0565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610e40614306565b005b610ea460048036036040811015610e5857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061454d565b6040518082815260200191505060405180910390f35b610ec26145d4565b005b610ecc6146a2565b005b610ed661495e565b6040518082815260200191505060405180910390f35b610ef461496b565b6040518082815260200191505060405180910390f35b610f4c60048036036020811015610f2057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506149c1565b6040518082815260200191505060405180910390f35b610f6a6149d9565b6040518082815260200191505060405180910390f35b610f886149df565b6040518082815260200191505060405180910390f35b610fa66149e5565b6040518082815260200191505060405180910390f35b610ffe60048036036020811015610fd257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506149ea565b6040518082815260200191505060405180910390f35b61101c614a02565b6040518082815260200191505060405180910390f35b61103a614a08565b6040518082815260200191505060405180910390f35b6000600d60009054906101000a900460ff166110d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f7661756c74206973206e6f74206163746976650000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611199576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f7374726174656779206973206e6f74207965742073657400000000000000000081525060200191505060405180910390fd5b600082116111f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180615a2d602c913960400191505060405180910390fd5b600060168054905090508061124f84601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614a0e90919063ffffffff16565b11156112a6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180615af36022913960400191505060405180910390fd5b6000806112fb85601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614a0e90919063ffffffff16565b90506000601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490505b83811015611390578181141561135757611390565b6113816016828154811061136757fe5b906000526020600020015484614a0e90919063ffffffff16565b92508080600101915050611342565b5081600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561141b57600080fd5b505afa15801561142f573d6000803e3d6000fd5b505050506040513d602081101561144557600080fd5b810190808051906020019092919050505010156114ad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b815260200180615b61603b913960400191505060405180910390fd5b6114fc333084600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16614a96909392919063ffffffff16565b61154e85601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614a0e90919063ffffffff16565b935083601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff167f9486b93ebe3cc3c54c18694e48c862cb92a7cbe539691e21d043bcc992ee8b5f8684604051808381526020018281526020019250505060405180910390a2505050919050565b606060038054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561168a5780601f1061165f5761010080835404028352916020019161168a565b820191906000526020600020905b81548152906001019060200180831161166d57829003601f168201915b5050505050905090565b60006116a86116a1614b57565b8484614b5f565b6001905092915050565b6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611777576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f2174696d656c6f636b000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60168290806001815401808255809150506001900390600052602060002001600090919091909150556001601680549050039050919050565b6000600254905090565b600d60009054906101000a900460ff1681565b60006117da848484614d56565b61189b846117e6614b57565b61189685604051806060016040528060288152602001615be560289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061184c614b57565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546150179092919063ffffffff16565b614b5f565b600190509392505050565b6002600654141561191f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60026006819055506119463373ffffffffffffffffffffffffffffffffffffffff166150d7565b15801561197e57503273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6119f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f216e6f20636f6e7472616374000000000000000000000000000000000000000081525060200191505060405180910390fd5b601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020544311611a87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180615bbd6028913960400191505060405180910390fd5b60008111611afd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f77697468647261773a20706f73697469766520616d6f756e740000000000000081525060200191505060405180910390fd5b601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054811115611bb2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f77697468647261773a206d6f7265207468616e206465706f736974656400000081525060200191505060405180910390fd5b6000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411611c4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615a7b602a913960400191505060405180910390fd5b6000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000611cfc601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cee670de0b6b3a7640000866150ea90919063ffffffff16565b61517090919063ffffffff16565b90506000611d2d670de0b6b3a7640000611d1f84866150ea90919063ffffffff16565b61517090919063ffffffff16565b905080611d3933613108565b1015611d90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180615b3b6026913960400191505060405180910390fd5b611d9a33826151ba565b611dec81601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461537e90919063ffffffff16565b601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000611e4d601754611e3f613831565b61537e90919063ffffffff16565b9050600080821115611e8857611e85611e646117b0565b611e7787856150ea90919063ffffffff16565b61517090919063ffffffff16565b90505b6000811115611ec157611ebe670de0b6b3a7640000611eb086846150ea90919063ffffffff16565b61517090919063ffffffff16565b90505b6000611ed68288614a0e90919063ffffffff16565b90506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611f6357600080fd5b505afa158015611f77573d6000803e3d6000fd5b505050506040513d6020811015611f8d57600080fd5b810190808051906020019092919050505090508181101561214d576000611fbd828461537e90919063ffffffff16565b9050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561203457600080fd5b505af1158015612048573d6000803e3d6000fd5b505050506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156120d757600080fd5b505afa1580156120eb573d6000803e3d6000fd5b505050506040513d602081101561210157600080fd5b810190808051906020019092919050505090506000612129848361537e90919063ffffffff16565b905082811015612149576121468185614a0e90919063ffffffff16565b94505b5050505b61219f88601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461537e90919063ffffffff16565b601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506121f78860175461537e90919063ffffffff16565b601781905550600061222861271061221a600c548c6150ea90919063ffffffff16565b61517090919063ffffffff16565b9050612299600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166153c89092919063ffffffff16565b6122f8336122b0838661537e90919063ffffffff16565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166153c89092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648a6040518082815260200191505060405180910390a23373ffffffffffffffffffffffffffffffffffffffff167f17603142347da9e422e7a13b7d8d03d2546cc9e5524fc730bb5d0280e800096b876040518082815260200191505060405180910390a23373ffffffffffffffffffffffffffffffffffffffff167f1f89f96333d3133000ee447473151fa9606543368f02271c9d95ae14f13bcc67856040518082815260200191505060405180910390a25050505050505050600160068190555050565b6000600560009054906101000a900460ff16905090565b60008061242b60175461241d613831565b61537e90919063ffffffff16565b90506000601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008211156124af576124a66124856117b0565b61249883856150ea90919063ffffffff16565b61517090919063ffffffff16565b925050506124b2565b50505b919050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461257a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f2174696d656c6f636b000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b806016838154811061258857fe5b90600052602060002001819055505050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461265d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f2174696d656c6f636b000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b1580156126dc57600080fd5b505afa1580156126f0573d6000803e3d6000fd5b505050506040513d602081101561270657600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16146127a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21756e6465726c79696e6700000000000000000000000000000000000000000081525060200191505060405180910390fd5b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6109c481565b60006128936127f7614b57565b8461288e8560016000612808614b57565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614a0e90919063ffffffff16565b614b5f565b6001905092915050565b60126020528060005260406000206000915090505481565b6000601680549050601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612953576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180615ca16025913960400191505060405180910390fd5b6016601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548154811061299f57fe5b9060005260206000200154905090565b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612a72576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21676f7665726e616e636500000000000000000000000000000000000000000081525060200191505060405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b36576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f746f6b656e00000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612bfa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260038152602001807f766f78000000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b612c47600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828473ffffffffffffffffffffffffffffffffffffffff166153c89092919063ffffffff16565b5050565b6000601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905090565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612d7b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21676f7665726e616e636500000000000000000000000000000000000000000081525060200191505060405180910390fd5b612710811115612dd6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180615ac7602c913960400191505060405180910390fd5b80600a8190555050565b6000612ece612710612ec0600a54600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612e7757600080fd5b505afa158015612e8b573d6000803e3d6000fd5b505050506040513d6020811015612ea157600080fd5b81019080805190602001909291905050506150ea90919063ffffffff16565b61517090919063ffffffff16565b905090565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612f96576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f2174696d656c6f636b000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b611d4c81111561300e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260088152602001807f6275726e206d617800000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6109c4811015613086576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260088152602001807f6275726e206d696e00000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600b8190555050565b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61271081565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611d4c81565b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613219576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21676f7665726e616e636500000000000000000000000000000000000000000081525060200191505060405180910390fd5b601680549050811115613294576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f6d756c7469706c6965722076616c756520746f6f20686967680000000000000081525060200191505060405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b613324601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118a6565b565b600c5481565b606060048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156133c45780601f10613399576101008083540402835291602001916133c4565b820191906000526020600020905b8154815290600101906020018083116133a757829003601f168201915b5050505050905090565b61271081565b601681815481106133e157fe5b906000526020600020016000915090505481565b60006134b8613402614b57565b846134b385604051806060016040528060258152602001615cc6602591396001600061342c614b57565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546150179092919063ffffffff16565b614b5f565b6001905092915050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006134fc6134f5614b57565b8484614d56565b6001905092915050565b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146135c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21676f7665726e616e636500000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600d60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146136d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f2174696d656c6f636b000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6019811115613747576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f216d6178207769746864726177616c206665650000000000000000000000000081525060200191505060405180910390fd5b80600c8190555050565b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613814576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21676f7665726e616e636500000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600d60006101000a81548160ff02191690831515021790555050565b60006139ab601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663722713f76040518163ffffffff1660e01b815260040160206040518083038186803b15801561389e57600080fd5b505afa1580156138b2573d6000803e3d6000fd5b505050506040513d60208110156138c857600080fd5b8101908080519060200190929190505050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561396257600080fd5b505afa158015613976573d6000803e3d6000fd5b505050506040513d602081101561398c57600080fd5b8101908080519060200190929190505050614a0e90919063ffffffff16565b905090565b60026006541415613a29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6002600681905550613a503373ffffffffffffffffffffffffffffffffffffffff166150d7565b158015613a8857503273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b613afa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f216e6f20636f6e7472616374000000000000000000000000000000000000000081525060200191505060405180910390fd5b600d60009054906101000a900460ff16613b7c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f7661756c74206973206e6f74206163746976650000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415613c41576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f7374726174656779206973206e6f74207965742073657400000000000000000081525060200191505060405180910390fd5b6000613c4b613831565b90506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015613cd857600080fd5b505afa158015613cec573d6000803e3d6000fd5b505050506040513d6020811015613d0257600080fd5b81019080805190602001909291905050509050613d64333085600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16614a96909392919063ffffffff16565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015613def57600080fd5b505afa158015613e03573d6000803e3d6000fd5b505050506040513d6020811015613e1957600080fd5b81019080805190602001909291905050509050613e3f828261537e90919063ffffffff16565b9350613e9384601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614a0e90919063ffffffff16565b601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613eeb84601754614a0e90919063ffffffff16565b601781905550600080613efc6117b0565b1415613f87576000613f576064601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614a0e90919063ffffffff16565b9050613f7f6064613f7183896150ea90919063ffffffff16565b61517090919063ffffffff16565b915050614033565b6000613fdc6064601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614a0e90919063ffffffff16565b905061402f85614021613fed6117b0565b6140136064614005878d6150ea90919063ffffffff16565b61517090919063ffffffff16565b6150ea90919063ffffffff16565b61517090919063ffffffff16565b9150505b61403d338261546a565b61408f81601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614a0e90919063ffffffff16565b601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555043601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c866040518082815260200191505060405180910390a23373ffffffffffffffffffffffffffffffffffffffff167f3abf6d97fde3541bb582f72fa6fb75093b8bb699577fbc722ac25de9f6fbc4ed826040518082815260200191505060405180910390a250505050600160068190555050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614614284576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f2174696d656c6f636b000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60156020528060005260406000206000915090505481565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60009054906101000a900460ff16614388576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f7661756c74206973206e6f74206163746976650000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561444d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f7374726174656779206973206e6f74207365740000000000000000000000000081525060200191505060405180910390fd5b6000614457612de0565b90506144c8601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166153c89092919063ffffffff16565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db06040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561453257600080fd5b505af1158015614546573d6000803e3d6000fd5b5050505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6146a0600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561466057600080fd5b505afa158015614674573d6000803e3d6000fd5b505050506040513d602081101561468a57600080fd5b81019080805190602001909291905050506139b0565b565b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614614765576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21676f7665726e616e636500000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156147f057600080fd5b505afa158015614804573d6000803e3d6000fd5b505050506040513d602081101561481a57600080fd5b81019080805190602001909291905050509050600081111561495b576000614861612710614853600b54856150ea90919063ffffffff16565b61517090919063ffffffff16565b90506000614878828461537e90919063ffffffff16565b90506148e9601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166153c89092919063ffffffff16565b614958600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166153c89092919063ffffffff16565b50505b50565b6000601680549050905090565b60006149bc6149786117b0565b6149ae670de0b6b3a76400006149a0601754614992613831565b61537e90919063ffffffff16565b6150ea90919063ffffffff16565b61517090919063ffffffff16565b905090565b60146020528060005260406000206000915090505481565b61271081565b600a5481565b601981565b60136020528060005260406000206000915090505481565b600b5481565b60175481565b600080828401905083811015614a8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b614b51846323b872dd60e01b858585604051602401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050615631565b50505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415614be5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180615c536024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415614c6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180615aa56022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415614ddc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180615c2e6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415614e62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180615a0a6023913960400191505060405180910390fd5b614e6d838383615720565b614ed881604051806060016040528060268152602001615b15602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546150179092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614f6b816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614a0e90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b60008383111582906150c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561508957808201518184015260208101905061506e565b50505050905090810190601f1680156150b65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080823b905060008111915050919050565b6000808314156150fd576000905061516a565b600082840290508284828161510e57fe5b0414615165576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180615b9c6021913960400191505060405180910390fd5b809150505b92915050565b60006151b283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250615725565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415615240576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180615c0d6021913960400191505060405180910390fd5b61524c82600083615720565b6152b781604051806060016040528060228152602001615a59602291396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546150179092919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061530e8160025461537e90919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b60006153c083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250615017565b905092915050565b6154658363a9059cbb60e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050615631565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561550d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b61551960008383615720565b61552e81600254614a0e90919063ffffffff16565b600281905550615585816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614a0e90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b6060615693826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166157eb9092919063ffffffff16565b905060008151111561571b578080602001905160208110156156b457600080fd5b810190808051906020019092919050505061571a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615c77602a913960400191505060405180910390fd5b5b505050565b505050565b600080831182906157d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561579657808201518184015260208101905061577b565b50505050905090810190601f1680156157c35780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816157dd57fe5b049050809150509392505050565b60606157fa8484600085615803565b90509392505050565b606061580e856150d7565b615880576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081525060200191505060405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b602083106158d057805182526020820191506020810190506020830392506158ad565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114615932576040519150601f19603f3d011682016040523d82523d6000602084013e615937565b606091505b5091509150811561594c578092505050615a01565b60008151111561595f5780518082602001fd5b836040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156159c65780820151818401526020810190506159ab565b50505050905090810190601f1680156159f35780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b94935050505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373796f75206e65656420746f207075726368617365206174206c65617374206f6e65206d756c7469706c69657245524332303a206275726e20616d6f756e7420657863656564732062616c616e636577697468647261773a20796f75206e65656420746f206669727374206d616b652061206465706f73697445524332303a20617070726f766520746f20746865207a65726f20616464726573736e756d657261746f722063616e6e6f742062652067726561746572207468616e2064656e6f6d696e61746f72796f752063616e206e6f7420707572636861736520736f206d616e7920746965727345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636577697468647261773a206e6f7420656e6f7567682073686172657320696e2062616c616e6365796f7520646f206e6f74206861766520656e6f75676820564f5820746f20707572636861736520746865206d756c7469706c696572207469657273536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7777697468647261773a206e6f74207468652073616d6520626c6f636b206173206465706f7369747345524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564616c6c207469657273206861766520616c7265616479206265656e2070757263686173656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220f579ae348b533fe883f4bee3ed313567dbd3255ad53505cb62e928c0182c1add64736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000194ebd173f6cdace046c53eacce9b953f28411d100000000000000000000000012d102f06da35cc0111eb58017fd2cd28537d0e1000000000000000000000000ef3aaa003bc72e94cd5721be0bb5bb3883c8556b000000000000000000000000ff775ae2e70e87cf2bb618cc177750b0ad7b853f000000000000000000000000a79bf5b279277e0b43339809715ca2e25725eb94
-----Decoded View---------------
Arg [0] : _underlying (address): 0x194eBd173F6cDacE046C53eACcE9B953F28411d1
Arg [1] : _vox (address): 0x12D102F06da35cC0111EB58017fd2Cd28537d0e1
Arg [2] : _governance (address): 0xef3aAA003Bc72E94Cd5721BE0Bb5bB3883c8556b
Arg [3] : _treasury (address): 0xff775Ae2E70E87cf2BB618Cc177750B0ad7b853f
Arg [4] : _timelock (address): 0xA79bF5B279277E0B43339809715cA2E25725eb94
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 000000000000000000000000194ebd173f6cdace046c53eacce9b953f28411d1
Arg [1] : 00000000000000000000000012d102f06da35cc0111eb58017fd2cd28537d0e1
Arg [2] : 000000000000000000000000ef3aaa003bc72e94cd5721be0bb5bb3883c8556b
Arg [3] : 000000000000000000000000ff775ae2e70e87cf2bb618cc177750b0ad7b853f
Arg [4] : 000000000000000000000000a79bf5b279277e0b43339809715ca2e25725eb94
Deployed Bytecode Sourcemap
34956:14014:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45921:1135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21165:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23362:210;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;39866:171;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22240:100;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35647:28;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;24046:454;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;42539:2824;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22092:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;45522:343;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;40120:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;39129:183;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35374:41;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24909:300;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;35879:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;48349:228;;;:::i;:::-;;;;;;;;;;;;;;;;;;;47552:290;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;48182:100;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35806:64;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;38513:160;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;40405:125;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39361:201;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35684:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;35716:23;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;35246:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35180:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;22403:119;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35326:41;;;:::i;:::-;;;;;;;;;;;;;;;;;;;47904:213;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;45433:81;;;:::i;:::-;;35497:33;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21367:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35422:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36079:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25712:400;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;35776:23;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;22735:216;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;38760:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;39611:196;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;38335:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;38084:187;;;:::i;:::-;;;;;;;;;;;;;;;;;;;40970:1356;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;38950:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;36032:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35746:23;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;40620:269;;;:::i;:::-;;23014:201;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;42377:86;;;:::i;:::-;;47136:342;;;:::i;:::-;;48633:113;;;:::i;:::-;;;;;;;;;;;;;;;;;;;48831:136;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35984:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35589:49;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35214:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35537:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35934:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35290:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36165:33;;;:::i;:::-;;;;;;;;;;;;;;;;;;;45921:1135;45983:15;46019:8;;;;;;;;;;;46011:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46090:1;46070:22;;:8;;;;;;;;;;;:22;;;;46062:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46148:1;46139:6;:10;46131:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46209:25;46237:15;:22;;;;46209:50;;46311:17;46278:29;46300:6;46278:5;:17;46284:10;46278:17;;;;;;;;;;;;;;;;:21;;:29;;;;:::i;:::-;:50;;46270:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46380:17;46412:22;46437:29;46459:6;46437:5;:17;46443:10;46437:17;;;;;;;;;;;;;;;;:21;;:29;;;;:::i;:::-;46412:54;;46482:9;46494:5;:17;46500:10;46494:17;;;;;;;;;;;;;;;;46482:29;;46477:215;46517:17;46513:1;:21;46477:215;;;46565:14;46560:1;:19;46556:65;;;46600:5;;46556:65;46647:33;46661:15;46677:1;46661:18;;;;;;;;;;;;;;;;46647:9;:13;;:33;;;;:::i;:::-;46635:45;;46536:3;;;;;;;46477:215;;;;46752:9;46722:3;;;;;;;;;;;46712:24;;;46737:10;46712:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:49;;46704:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46836:58;46857:10;46877:4;46884:9;46836:3;;;;;;;;;;;:20;;;;:58;;;;;;:::i;:::-;46915:29;46937:6;46915:5;:17;46921:10;46915:17;;;;;;;;;;;;;;;;:21;;:29;;;;:::i;:::-;46905:39;;46975:7;46955:5;:17;46961:10;46955:17;;;;;;;;;;;;;;;:27;;;;47018:10;46998:50;;;47030:6;47038:9;46998:50;;;;;;;;;;;;;;;;;;;;;;;;45921:1135;;;;;;:::o;21165:83::-;21202:13;21235:5;21228:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21165:83;:::o;23362:210::-;23481:4;23503:39;23512:12;:10;:12::i;:::-;23526:7;23535:6;23503:8;:39::i;:::-;23560:4;23553:11;;23362:210;;;;:::o;39866:171::-;39931:13;37786:8;;;;;;;;;;;37772:22;;:10;:22;;;37750:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39957:15:::1;39978:5;39957:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40028:1;40003:15;:22;;;;:26;39995:34;;39866:171:::0;;;:::o;22240:100::-;22293:7;22320:12;;22313:19;;22240:100;:::o;35647:28::-;;;;;;;;;;;;;:::o;24046:454::-;24186:4;24203:36;24213:6;24221:9;24232:6;24203:9;:36::i;:::-;24250:220;24273:6;24294:12;:10;:12::i;:::-;24321:138;24377:6;24321:138;;;;;;;;;;;;;;;;;:11;:19;24333:6;24321:19;;;;;;;;;;;;;;;:33;24341:12;:10;:12::i;:::-;24321:33;;;;;;;;;;;;;;;;:37;;:138;;;;;:::i;:::-;24250:8;:220::i;:::-;24488:4;24481:11;;24046:454;;;;;:::o;42539:2824::-;1702:1;2308:7;;:19;;2300:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1702:1;2441:7;:18;;;;42614:32:::1;42622:10;42614:30;;;:32::i;:::-;42613:33;:60;;;;;42664:9;42650:23;;:10;:23;;;42613:60;42605:85;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;42724:13;:25;42738:10;42724:25;;;;;;;;;;;;;;;;42709:12;:40;42701:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42823:1;42813:7;:11;42805:49;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;42884:8;:20;42893:10;42884:20;;;;;;;;;;;;;;;;42873:7;:31;;42865:73;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;42978:1;42957:6;:18;42964:10;42957:18;;;;;;;;;;;;;;;;:22;42949:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43081:14;43098:6;:18;43105:10;43098:18;;;;;;;;;;;;;;;;43081:35;;43189:9;43202:43;43224:8;:20;43233:10;43224:20;;;;;;;;;;;;;;;;43202:17;43214:4;43202:7;:11;;:17;;;;:::i;:::-;:21;;:43;;;;:::i;:::-;43189:57;;43309:9;43321:23;43339:4;43321:13;43332:1;43321:6;:10;;:13;;;;:::i;:::-;:17;;:23;;;;:::i;:::-;43309:35;;43460:1;43435:21;43445:10;43435:9;:21::i;:::-;:26;;43427:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43582:20;43588:10;43600:1;43582:5;:20::i;:::-;43690:25;43713:1;43690:6;:18;43697:10;43690:18;;;;;;;;;;;;;;;;:22;;:25;;;;:::i;:::-;43669:6;:18;43676:10;43669:18;;;;;;;;;;;;;;;:46;;;;43788:15;43806:29;43820:14;;43806:9;:7;:9::i;:::-;:13;;:29;;;;:::i;:::-;43788:47;;43846:19;43894:1:::0;43884:7:::1;:11;43880:98;;;43926:40;43952:13;:11;:13::i;:::-;43927:19;43939:6;43927:7;:11;;:19;;;;:::i;:::-;43926:25;;:40;;;;:::i;:::-;43912:54;;43880:98;44066:1;44052:11;:15;44048:90;;;44098:28;44121:4;44098:18;44114:1;44098:11;:15;;:18;;;;:::i;:::-;:22;;:28;;;;:::i;:::-;44084:42;;44048:90;44220:22;44245:24;44257:11;44245:7;:11;;:24;;;;:::i;:::-;44220:49;;44308:9;44320:5;;;;;;;;;;;:15;;;44344:4;44320:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;44308:42;;44369:14;44365:1;:18;44361:353;;;44400:17;44420:21;44439:1;44420:14;:18;;:21;;;;:::i;:::-;44400:41;;44466:8;;;;;;;;;;;44456:28;;;44485:9;44456:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;44510:14;44527:5;;;;;;;;;;;:15;;;44551:4;44527:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;44510:47;;44572:13;44588;44599:1;44588:6;:10;;:13;;;;:::i;:::-;44572:29;;44628:9;44620:5;:17;44616:87;;;44675:12;44681:5;44675:1;:5;;:12;;;;:::i;:::-;44658:29;;44616:87;44361:353;;;;44821:33;44846:7;44821:8;:20;44830:10;44821:20;;;;;;;;;;;;;;;;:24;;:33;;;;:::i;:::-;44798:8;:20;44807:10;44798:20;;;;;;;;;;;;;;;:56;;;;44882:27;44901:7;44882:14;;:18;;:27;;;;:::i;:::-;44865:14;:44;;;;44982:22;45007:49;35633:5;45007:26;45019:13;;45007:7;:11;;:26;;;;:::i;:::-;:30;;:49;;;;:::i;:::-;44982:74;;45067:44;45086:8;;;;;;;;;;;45096:14;45067:5;;;;;;;;;;;:18;;;;:44;;;;;:::i;:::-;45122:66;45141:10;45153:34;45172:14;45153;:18;;:34;;;;:::i;:::-;45122:5;;;;;;;;;;;:18;;;;:66;;;;;:::i;:::-;45239:10;45230:29;;;45251:7;45230:29;;;;;;;;;;;;;;;;;;45288:10;45275:27;;;45300:1;45275:27;;;;;;;;;;;;;;;;;;45331:10;45318:37;;;45343:11;45318:37;;;;;;;;;;;;;;;;;;2472:1;;;;;;;;1658::::0;2620:7;:22;;;;42539:2824;:::o;22092:83::-;22133:5;22158:9;;;;;;;;;;;22151:16;;22092:83;:::o;45522:343::-;45586:7;45666:15;45684:29;45698:14;;45684:9;:7;:9::i;:::-;:13;;:29;;;;:::i;:::-;45666:47;;45724:14;45741:6;:15;45748:7;45741:15;;;;;;;;;;;;;;;;45724:32;;45781:1;45771:7;:11;45767:91;;;45806:40;45832:13;:11;:13::i;:::-;45807:19;45819:6;45807:7;:11;;:19;;;;:::i;:::-;45806:25;;:40;;;;:::i;:::-;45799:47;;;;;;45767:91;45522:343;;;;;;:::o;40120:120::-;37786:8;;;;;;;;;;;37772:22;;:10;:22;;;37750:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40227:5:::1;40202:15;40218:5;40202:22;;;;;;;;;;;;;;;:30;;;;40120:120:::0;;:::o;39129:183::-;37786:8;;;;;;;;;;;37772:22;;:10;:22;;;37750:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39251:5:::1;;;;;;;;;;;39206:51;;39216:9;39206:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;:51;;;39198:75;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;39295:9;39284:8;;:20;;;;;;;;;;;;;;;;;;39129:183:::0;:::o;35374:41::-;35411:4;35374:41;:::o;24909:300::-;25024:4;25046:133;25069:12;:10;:12::i;:::-;25096:7;25118:50;25157:10;25118:11;:25;25130:12;:10;:12::i;:::-;25118:25;;;;;;;;;;;;;;;:34;25144:7;25118:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;25046:8;:133::i;:::-;25197:4;25190:11;;24909:300;;;;:::o;35879:48::-;;;;;;;;;;;;;;;;;:::o;48349:228::-;48405:7;48453:15;:22;;;;48433:5;:17;48439:10;48433:17;;;;;;;;;;;;;;;;:42;48425:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48535:15;48551:5;:17;48557:10;48551:17;;;;;;;;;;;;;;;;48535:34;;;;;;;;;;;;;;;;48528:41;;48349:228;:::o;47552:290::-;47644:10;;;;;;;;;;;47630:24;;:10;:24;;;47622:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47708:5;;;;;;;;;;;47689:25;;:7;:25;;;;47681:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47762:3;;;;;;;;;;;47743:23;;:7;:23;;;;47735:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47785:49;47817:8;;;;;;;;;;;47827:6;47795:7;47785:31;;;;:49;;;;;:::i;:::-;47552:290;;:::o;48182:100::-;48230:7;48257:5;:17;48263:10;48257:17;;;;;;;;;;;;;;;;48250:24;;48182:100;:::o;35806:64::-;;;;;;;;;;;;;:::o;38513:160::-;37929:10;;;;;;;;;;;37915:24;;:10;:24;;;37893:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35276:5:::1;38584:4;:11;;38576:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38661:4;38655:3;:10;;;;38513:160:::0;:::o;40405:125::-;40447:7;40474:48;35276:5;40474:39;40509:3;;40474:5;;;;;;;;;;;:15;;;40498:4;40474:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:34;;:39;;;;:::i;:::-;:43;;:48;;;;:::i;:::-;40467:55;;40405:125;:::o;39361:201::-;37786:8;;;;;;;;;;;37772:22;;:10;:22;;;37750:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35363:4:::1;39436:8;:22;;39428:43;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;35411:4;39490:8;:22;;39482:43;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;39546:8;39536:7;:18;;;;39361:201:::0;:::o;35684:25::-;;;;;;;;;;;;;:::o;35716:23::-;;;;;;;;;;;;;:::o;35246:35::-;35276:5;35246:35;:::o;35180:25::-;;;;;;;;;;;;;:::o;22403:119::-;22469:7;22496:9;:18;22506:7;22496:18;;;;;;;;;;;;;;;;22489:25;;22403:119;;;:::o;35326:41::-;35363:4;35326:41;:::o;47904:213::-;37929:10;;;;;;;;;;;37915:24;;:10;:24;;;37893:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48019:15:::1;:22;;;;48005:10;:36;;47997:74;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;48099:10;48082:5;:14;48088:7;48082:14;;;;;;;;;;;;;;;:27;;;;47904:213:::0;;:::o;45433:81::-;45476:30;45485:8;:20;45494:10;45485:20;;;;;;;;;;;;;;;;45476:8;:30::i;:::-;45433:81::o;35497:33::-;;;;:::o;21367:87::-;21406:13;21439:7;21432:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21367:87;:::o;35422:43::-;35460:5;35422:43;:::o;36079:32::-;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25712:400::-;25832:4;25854:228;25877:12;:10;:12::i;:::-;25904:7;25926:145;25983:15;25926:145;;;;;;;;;;;;;;;;;:11;:25;25938:12;:10;:12::i;:::-;25926:25;;;;;;;;;;;;;;;:34;25952:7;25926:34;;;;;;;;;;;;;;;;:38;;:145;;;;;:::i;:::-;25854:8;:228::i;:::-;26100:4;26093:11;;25712:400;;;;:::o;35776:23::-;;;;;;;;;;;;;:::o;22735:216::-;22857:4;22879:42;22889:12;:10;:12::i;:::-;22903:9;22914:6;22879:9;:42::i;:::-;22939:4;22932:11;;22735:216;;;;:::o;38760:107::-;37929:10;;;;;;;;;;;37915:24;;:10;:24;;;37893:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38848:11:::1;38835:10;;:24;;;;;;;;;;;;;;;;;;38760:107:::0;:::o;39611:196::-;37786:8;;;;;;;;;;;37772:22;;:10;:22;;;37750:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35580:2:::1;39700:14;:34;;39692:66;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;39785:14;39769:13;:30;;;;39611:196:::0;:::o;38335:94::-;37929:10;;;;;;;;;;;37915:24;;:10;:24;;;37893:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38412:9:::1;38401:8;;:20;;;;;;;;;;;;;;;;;;38335:94:::0;:::o;38084:187::-;38124:7;38164:99;38227:8;;;;;;;;;;;38217:29;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38164:5;;;;;;;;;;;:15;;;38188:4;38164:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:34;;:99;;;;:::i;:::-;38144:119;;38084:187;:::o;40970:1356::-;1702:1;2308:7;;:19;;2300:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1702:1;2441:7;:18;;;;41044:32:::1;41052:10;41044:30;;;:32::i;:::-;41043:33;:60;;;;;41094:9;41080:23;;:10;:23;;;41043:60;41035:85;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;41139:8;;;;;;;;;;;41131:40;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;41210:1;41190:22;;:8;;;;;;;;;;;:22;;;;41182:58;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;41261:13;41277:9;:7;:9::i;:::-;41261:25;;41297:15;41315:5;;;;;;;;;;;:15;;;41339:4;41315:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;41297:48;;41356:58;41379:10;41399:4;41406:7;41356:5;;;;;;;;;;;:22;;;;:58;;;;;;:::i;:::-;41425:14;41442:5;;;;;;;;;;;:15;;;41466:4;41442:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;41425:47;;41493:19;41504:7;41493:6;:10;;:19;;;;:::i;:::-;41483:29;;41590:33;41615:7;41590:8;:20;41599:10;41590:20;;;;;;;;;;;;;;;;:24;;:33;;;;:::i;:::-;41567:8;:20;41576:10;41567:20;;;;;;;;;;;;;;;:56;;;;41651:27;41670:7;41651:14;;:18;;:27;;;;:::i;:::-;41634:14;:44;;;;41689:14;41739:1:::0;41722:13:::1;:11;:13::i;:::-;:18;41718:358;;;41757:22;41782:31;36155:3;41782:5;:17;41788:10;41782:17;;;;;;;;;;;;;;;;:21;;:31;;;;:::i;:::-;41757:56;;41837:41;36155:3;41837:27;41849:14;41837:7;:11;;:27;;;;:::i;:::-;:31;;:41;;;;:::i;:::-;41828:50;;41718:358;;;;41911:22;41936:31;36155:3;41936:5;:17;41942:10;41936:17;;;;;;;;;;;;;;;;:21;;:31;;;;:::i;:::-;41911:56;;41991:73;42058:5;41992:60;42038:13;:11;:13::i;:::-;41992:41;36155:3;41992:27;42004:14;41992:7;:11;;:27;;;;:::i;:::-;:31;;:41;;;;:::i;:::-;:45;;:60;;;;:::i;:::-;41991:66;;:73;;;;:::i;:::-;41982:82;;41718:358;;42088:25;42094:10;42106:6;42088:5;:25::i;:::-;42145:30;42168:6;42145;:18;42152:10;42145:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;42124:6;:18;42131:10;42124:18;;;;;;;;;;;;;;;:51;;;;42214:12;42186:13;:25;42200:10;42186:25;;;;;;;;;;;;;;;:40;;;;42250:10;42242:28;;;42262:7;42242:28;;;;;;;;;;;;;;;;;;42299:10;42286:32;;;42311:6;42286:32;;;;;;;;;;;;;;;;;;2472:1;;;;1658::::0;2620:7;:22;;;;40970:1356;:::o;38950:97::-;37786:8;;;;;;;;;;;37772:22;;:10;:22;;;37750:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39030:9:::1;39019:8;;:20;;;;;;;;;;;;;;;;;;38950:97:::0;:::o;36032:40::-;;;;;;;;;;;;;;;;;:::o;35746:23::-;;;;;;;;;;;;;:::o;40620:269::-;40662:8;;;;;;;;;;;40654:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40733:1;40713:22;;:8;;;;;;;;;;;:22;;;;40705:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40770:12;40785:11;:9;:11::i;:::-;40770:26;;40807:34;40826:8;;;;;;;;;;;40836:4;40807:5;;;;;;;;;;;:18;;;;:34;;;;;:::i;:::-;40862:8;;;;;;;;;;;40852:27;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40620:269;:::o;23014:201::-;23148:7;23180:11;:18;23192:5;23180:18;;;;;;;;;;;;;;;:27;23199:7;23180:27;;;;;;;;;;;;;;;;23173:34;;23014:201;;;;:::o;42377:86::-;42419:36;42427:5;;;;;;;;;;;:15;;;42443:10;42427:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42419:7;:36::i;:::-;42377:86::o;47136:342::-;37929:10;;;;;;;;;;;37915:24;;:10;:24;;;37893:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47191:9:::1;47203:3;;;;;;;;;;;:13;;;47225:4;47203:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;47191:40;;47250:1;47246;:5;47242:229;;;47268:14;47285:31;35460:5;47285:14;47291:7;;47285:1;:5;;:14;;;;:::i;:::-;:18;;:31;;;;:::i;:::-;47268:48;;47331:16;47350:13;47356:6;47350:1;:5;;:13;;;;:::i;:::-;47331:32;;47378:30;47395:4;;;;;;;;;;;47401:6;47378:3;;;;;;;;;;;:16;;;;:30;;;;;:::i;:::-;47423:36;47440:8;;;;;;;;;;;47450;47423:3;;;;;;;;;;;:16;;;;:36;;;;;:::i;:::-;47242:229;;;37990:1;47136:342::o:0;48633:113::-;48689:7;48716:15;:22;;;;48709:29;;48633:113;:::o;48831:136::-;48872:7;48899:60;48945:13;:11;:13::i;:::-;48899:41;48935:4;48900:29;48914:14;;48900:9;:7;:9::i;:::-;:13;;:29;;;;:::i;:::-;48899:35;;:41;;;;:::i;:::-;:45;;:60;;;;:::i;:::-;48892:67;;48831:136;:::o;35984:41::-;;;;;;;;;;;;;;;;;:::o;35589:49::-;35633:5;35589:49;:::o;35214:25::-;;;;:::o;35537:45::-;35580:2;35537:45;:::o;35934:43::-;;;;;;;;;;;;;;;;;:::o;35290:29::-;;;;:::o;36165:33::-;;;;:::o;4414:181::-;4472:7;4492:9;4508:1;4504;:5;4492:17;;4533:1;4528;:6;;4520:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4586:1;4579:8;;;4414:181;;;;:::o;31454:288::-;31601:133;31635:5;31678:27;;;31707:4;31713:2;31717:5;31655:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31601:19;:133::i;:::-;31454:288;;;;:::o;9417:106::-;9470:15;9505:10;9498:17;;9417:106;:::o;29096:380::-;29249:1;29232:19;;:5;:19;;;;29224:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29330:1;29311:21;;:7;:21;;;;29303:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29414:6;29384:11;:18;29396:5;29384:18;;;;;;;;;;;;;;;:27;29403:7;29384:27;;;;;;;;;;;;;;;:36;;;;29452:7;29436:32;;29445:5;29436:32;;;29461:6;29436:32;;;;;;;;;;;;;;;;;;29096:380;;;:::o;26602:610::-;26760:1;26742:20;;:6;:20;;;;26734:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26844:1;26823:23;;:9;:23;;;;26815:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26899:47;26920:6;26928:9;26939:6;26899:20;:47::i;:::-;26979:108;27015:6;26979:108;;;;;;;;;;;;;;;;;:9;:17;26989:6;26979:17;;;;;;;;;;;;;;;;:21;;:108;;;;;:::i;:::-;26959:9;:17;26969:6;26959:17;;;;;;;;;;;;;;;:128;;;;27121:32;27146:6;27121:9;:20;27131:9;27121:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;27098:9;:20;27108:9;27098:20;;;;;;;;;;;;;;;:55;;;;27186:9;27169:35;;27178:6;27169:35;;;27197:6;27169:35;;;;;;;;;;;;;;;;;;26602:610;;;:::o;5317:192::-;5403:7;5436:1;5431;:6;;5439:12;5423:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5463:9;5479:1;5475;:5;5463:17;;5500:1;5493:8;;;5317:192;;;;;:::o;13319:444::-;13379:4;13587:12;13711:7;13699:20;13691:28;;13754:1;13747:4;:8;13740:15;;;13319:444;;;:::o;5768:471::-;5826:7;6076:1;6071;:6;6067:47;;;6101:1;6094:8;;;;6067:47;6126:9;6142:1;6138;:5;6126:17;;6171:1;6166;6162;:5;;;;;;:10;6154:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6230:1;6223:8;;;5768:471;;;;;:::o;6715:132::-;6773:7;6800:39;6804:1;6807;6800:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;6793:46;;6715:132;;;;:::o;28203:455::-;28306:1;28287:21;;:7;:21;;;;28279:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28359:49;28380:7;28397:1;28401:6;28359:20;:49::i;:::-;28442:105;28479:6;28442:105;;;;;;;;;;;;;;;;;:9;:18;28452:7;28442:18;;;;;;;;;;;;;;;;:22;;:105;;;;;:::i;:::-;28421:9;:18;28431:7;28421:18;;;;;;;;;;;;;;;:126;;;;28573:24;28590:6;28573:12;;:16;;:24;;;;:::i;:::-;28558:12;:39;;;;28639:1;28613:37;;28622:7;28613:37;;;28643:6;28613:37;;;;;;;;;;;;;;;;;;28203:455;;:::o;4878:136::-;4936:7;4963:43;4967:1;4970;4963:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4956:50;;4878:136;;;;:::o;31195:251::-;31315:123;31349:5;31392:23;;;31417:2;31421:5;31369:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31315:19;:123::i;:::-;31195:251;;;:::o;27493:378::-;27596:1;27577:21;;:7;:21;;;;27569:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27647:49;27676:1;27680:7;27689:6;27647:20;:49::i;:::-;27724:24;27741:6;27724:12;;:16;;:24;;;;:::i;:::-;27709:12;:39;;;;27780:30;27803:6;27780:9;:18;27790:7;27780:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;27759:9;:18;27769:7;27759:18;;;;;;;;;;;;;;;:51;;;;27847:7;27826:37;;27843:1;27826:37;;;27856:6;27826:37;;;;;;;;;;;;;;;;;;27493:378;;:::o;34086:863::-;34513:23;34539:106;34581:4;34539:106;;;;;;;;;;;;;;;;;34547:5;34539:27;;;;:106;;;;;:::i;:::-;34513:132;;34680:1;34660:10;:17;:21;34656:286;;;34833:10;34822:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34796:134;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34656:286;34086:863;;;:::o;30501:125::-;;;;:::o;7343:278::-;7429:7;7461:1;7457;:5;7464:12;7449:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7488:9;7504:1;7500;:5;;;;;;7488:17;;7612:1;7605:8;;;7343:278;;;;;:::o;16356:230::-;16493:12;16525:53;16548:6;16556:4;16562:1;16565:12;16525:22;:53::i;:::-;16518:60;;16356:230;;;;;:::o;17977:1044::-;18150:12;18183:18;18194:6;18183:10;:18::i;:::-;18175:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18309:12;18323:23;18350:6;:11;;18369:8;18393:4;18350:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18308:100;;;;18423:7;18419:595;;;18454:10;18447:17;;;;;;18419:595;18588:1;18568:10;:17;:21;18564:439;;;18831:10;18825:17;18892:15;18879:10;18875:2;18871:19;18864:44;18779:148;18974:12;18967:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17977:1044;;;;;;;:::o
Swarm Source
ipfs://f579ae348b533fe883f4bee3ed313567dbd3255ad53505cb62e928c0182c1add
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $0.119567 | 1.6844 | $0.2013 |
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.