More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 1,117 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer Ownersh... | 12858044 | 1282 days ago | IN | 0 ETH | 0.00109386 | ||||
Toggle Contract ... | 12654499 | 1314 days ago | IN | 0 ETH | 0.00034525 | ||||
Zap Out | 12179732 | 1387 days ago | IN | 0 ETH | 0.0238868 | ||||
Zap Out | 12175450 | 1388 days ago | IN | 0 ETH | 0.05977594 | ||||
Zap Out | 12175210 | 1388 days ago | IN | 0 ETH | 0.03221825 | ||||
Zap Out | 12175193 | 1388 days ago | IN | 0 ETH | 0.13179275 | ||||
Zap Out | 12175187 | 1388 days ago | IN | 0 ETH | 0.02796969 | ||||
Zap Out | 12174615 | 1388 days ago | IN | 0 ETH | 0.03317335 | ||||
Zap Out | 12174416 | 1388 days ago | IN | 0 ETH | 0.02200618 | ||||
Zap Out | 12173124 | 1388 days ago | IN | 0 ETH | 0.01925202 | ||||
Zap Out | 12172753 | 1388 days ago | IN | 0 ETH | 0.01771433 | ||||
Zap Out | 12172522 | 1388 days ago | IN | 0 ETH | 0.04890946 | ||||
Zap Out | 12171935 | 1388 days ago | IN | 0 ETH | 0.02084193 | ||||
Zap Out | 12171855 | 1388 days ago | IN | 0 ETH | 0.02222031 | ||||
Zap Out | 12171252 | 1388 days ago | IN | 0 ETH | 0.10920177 | ||||
Zap Out | 12170889 | 1389 days ago | IN | 0 ETH | 0.04490402 | ||||
Zap Out | 12168963 | 1389 days ago | IN | 0 ETH | 0.03192227 | ||||
Zap Out | 12167427 | 1389 days ago | IN | 0 ETH | 0.05036712 | ||||
Zap Out | 12167417 | 1389 days ago | IN | 0 ETH | 0.02725619 | ||||
Zap Out | 12166299 | 1389 days ago | IN | 0 ETH | 0.0214137 | ||||
Zap Out | 12166077 | 1389 days ago | IN | 0 ETH | 0.22957548 | ||||
Zap Out | 12165480 | 1389 days ago | IN | 0 ETH | 0.04235193 | ||||
Zap Out | 12165458 | 1389 days ago | IN | 0 ETH | 0.15110814 | ||||
Zap Out | 12165235 | 1389 days ago | IN | 0 ETH | 0.02281476 | ||||
Zap Out | 12164617 | 1389 days ago | IN | 0 ETH | 0.04042184 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
12354438 | 1360 days ago | 0.06522496 ETH | ||||
12354438 | 1360 days ago | 0.06522496 ETH | ||||
12301523 | 1368 days ago | 0.33980614 ETH | ||||
12301523 | 1368 days ago | 0.33980614 ETH | ||||
12297211 | 1369 days ago | 1.19336236 ETH | ||||
12297211 | 1369 days ago | 1.19336236 ETH | ||||
12296646 | 1369 days ago | 1.12116878 ETH | ||||
12296646 | 1369 days ago | 1.12116878 ETH | ||||
12293217 | 1370 days ago | 1.68578873 ETH | ||||
12293217 | 1370 days ago | 1.68578873 ETH | ||||
12266962 | 1374 days ago | 1.41881084 ETH | ||||
12266962 | 1374 days ago | 1.41881084 ETH | ||||
12266797 | 1374 days ago | 1.42801725 ETH | ||||
12266797 | 1374 days ago | 1.42801725 ETH | ||||
12266050 | 1374 days ago | 45.06033961 ETH | ||||
12266050 | 1374 days ago | 45.06033961 ETH | ||||
12265490 | 1374 days ago | 93.12944479 ETH | ||||
12265490 | 1374 days ago | 93.12944479 ETH | ||||
12254183 | 1376 days ago | 1.0289269 ETH | ||||
12254183 | 1376 days ago | 1.0289269 ETH | ||||
12252760 | 1376 days ago | 7.2934206 ETH | ||||
12252760 | 1376 days ago | 7.2934206 ETH | ||||
12245775 | 1377 days ago | 3.5514542 ETH | ||||
12245775 | 1377 days ago | 3.5514542 ETH | ||||
12245331 | 1377 days ago | 1.09175459 ETH |
Loading...
Loading
Contract Name:
Curve_ZapOut_General_V2_1
Compiler Version
v0.5.17+commit.d19bba13
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-11-15 */ // ███████╗░█████╗░██████╗░██████╗░███████╗██████╗░░░░███████╗██╗ // ╚════██║██╔══██╗██╔══██╗██╔══██╗██╔════╝██╔══██╗░░░██╔════╝██║ // ░░███╔═╝███████║██████╔╝██████╔╝█████╗░░██████╔╝░░░█████╗░░██║ // ██╔══╝░░██╔══██║██╔═══╝░██╔═══╝░██╔══╝░░██╔══██╗░░░██╔══╝░░██║ // ███████╗██║░░██║██║░░░░░██║░░░░░███████╗██║░░██║██╗██║░░░░░██║ // ╚══════╝╚═╝░░╚═╝╚═╝░░░░░╚═╝░░░░░╚══════╝╚═╝░░╚═╝╚═╝╚═╝░░░░░╚═╝ // Copyright (C) 2020 zapper // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // ///@author Zapper ///@notice This contract removes liquidity from Curve stablecoin and BTC liquidity pools in one transaction with ETH or ERC tokens. // File: Context.sol pragma solidity ^0.5.5; /* * @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. */ contract Context { // Empty internal constructor, to prevent people from mistakenly deploying // an instance of this contract, which should be used via inheritance. constructor() internal {} // solhint-disable-previous-line no-empty-blocks function _msgSender() internal view returns (address payable) { return msg.sender; } function _msgData() internal view returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File: OpenZepplinOwnable.sol pragma solidity ^0.5.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract Ownable is Context { address payable public _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() internal { address payable msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(isOwner(), "Ownable: caller is not the owner"); _; } /** * @dev Returns true if the caller is the current owner. */ function isOwner() public view returns (bool) { return _msgSender() == _owner; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address payable newOwner) public onlyOwner { _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). */ function _transferOwnership(address payable newOwner) internal { require( newOwner != address(0), "Ownable: new owner is the zero address" ); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File: OpenZepplinSafeMath.sol pragma solidity ^0.5.0; /** * @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. * * _Available since v2.4.0._ */ 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. * * _Available since v2.4.0._ */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 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. * * _Available since v2.4.0._ */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } // File: OpenZepplinIERC20.sol pragma solidity ^0.5.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. Does not include * the optional functions; to access them see {ERC20Detailed}. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval( address indexed owner, address indexed spender, uint256 value ); } // File: OpenZepplinReentrancyGuard.sol pragma solidity ^0.5.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * _Since v2.5.0:_ this module is now much more gas efficient, given net gas * metering changes introduced in the Istanbul hardfork. */ contract ReentrancyGuard { bool private _notEntered; constructor() internal { // Storing an initial 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 percetange 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. _notEntered = true; } /** * @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(_notEntered, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _notEntered = false; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _notEntered = true; } } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.5.5; /** * @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) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Converts an `address` into `address payable`. Note that this is * simply a type cast: the actual underlying value is not changed. * * _Available since v2.4.0._ */ function toPayable(address account) internal pure returns (address payable) { return address(uint160(account)); } /** * @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]. * * _Available since v2.4.0._ */ function sendValue(address payable recipient, uint256 amount) internal { require( address(this).balance >= amount, "Address: insufficient balance" ); // solhint-disable-next-line avoid-call-value (bool success, ) = recipient.call.value(amount)(""); require( success, "Address: unable to send value, recipient may have reverted" ); } } // File: @openzeppelin/contracts/token/ERC20/SafeERC20.sol pragma solidity ^0.5.0; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { callOptionalReturn( token, abi.encodeWithSelector(token.transfer.selector, to, value) ); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { callOptionalReturn( token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value) ); } function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); callOptionalReturn( token, abi.encodeWithSelector(token.approve.selector, spender, value) ); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender).add( value ); callOptionalReturn( token, abi.encodeWithSelector( token.approve.selector, spender, newAllowance ) ); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender).sub( value, "SafeERC20: decreased allowance below zero" ); callOptionalReturn( token, abi.encodeWithSelector( token.approve.selector, spender, newAllowance ) ); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. // A Solidity high level call has three parts: // 1. The target address is checked to verify it contains contract code // 2. The call itself is made, and success asserted // 3. The return value is decoded, which in turn checks the size of the returned data. // solhint-disable-next-line max-line-length require(address(token).isContract(), "SafeERC20: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = address(token).call(data); require(success, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require( abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed" ); } } } interface IUniswapV2Factory { function getPair(address tokenA, address tokenB) external view returns (address); } interface IUniswapRouter02 { //get estimated amountOut function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); //token 2 token function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); //eth 2 token function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); //token 2 eth function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); } interface ICurveSwap { function coins(int128 arg0) external view returns (address); // hbtc pool function coins(uint256 arg0) external view returns (address); function underlying_coins(int128 arg0) external view returns (address); function remove_liquidity_one_coin( uint256 _token_amount, int128 i, uint256 min_amount ) external; function balances(int128 arg0) external view returns (uint256); // 3Pool: function balances(uint256 arg0) external view returns (uint256); } interface ICurveDeposit { function curve() external view returns (address); } interface IWETH { function deposit() external payable; function transfer(address to, uint256 value) external returns (bool); function withdraw(uint256) external; } interface ICurveRegistry { function metaPools(address tokenAddress) external view returns (address swapAddress); function getTokenAddress(address swapAddress) external view returns (address tokenAddress); function getPoolTokens(address swapAddress) external view returns (address[4] memory poolTokens); function isMetaPool(address swapAddress) external view returns (bool); function getNumTokens(address swapAddress) external view returns (uint8 numTokens); function isBtcPool(address swapAddress) external view returns (bool); function isUnderlyingToken( address swapAddress, address tokenContractAddress ) external view returns (bool, uint8); function getIntermediateStableWithdraw(address swapAddress) external view returns (uint8 stableIndex, address stableAddress); } contract Curve_ZapOut_General_V2_1 is ReentrancyGuard, Ownable { using SafeMath for uint256; using SafeERC20 for IERC20; bool public stopped = false; uint16 public goodwill = 0; address public zgoodwillAddress = 0x3CE37278de6388532C3949ce4e886F365B14fB56; IUniswapV2Factory private constant UniSwapV2FactoryAddress = IUniswapV2Factory( 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f ); IUniswapRouter02 private constant uniswapRouter = IUniswapRouter02( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); ICurveRegistry public curveReg; address private constant wethToken = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; address private constant wbtcToken = 0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599; address public intermediateStable = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48; uint256 private constant deadline = 0xf000000000000000000000000000000000000000000000000000000000000000; // circuit breaker modifiers modifier stopInEmergency { if (stopped) { revert("Temporarily Paused"); } else { _; } } constructor(ICurveRegistry _curveRegistry) public { curveReg = _curveRegistry; } function ZapOut( address payable toWhomToIssue, address swapAddress, uint256 incomingCrv, address toToken, uint256 minToTokens ) external stopInEmergency returns (uint256 ToTokensBought) { address poolTokenAddress = curveReg.getTokenAddress(swapAddress); uint256 goodwillPortion; if (goodwill > 0) { goodwillPortion = SafeMath.div( SafeMath.mul(incomingCrv, goodwill), 10000 ); IERC20(poolTokenAddress).safeTransferFrom( msg.sender, zgoodwillAddress, goodwillPortion ); } IERC20(poolTokenAddress).safeTransferFrom( msg.sender, address(this), SafeMath.sub(incomingCrv, goodwillPortion) ); (bool isUnderlying, uint8 underlyingIndex) = curveReg.isUnderlyingToken( swapAddress, toToken ); if (isUnderlying) { ToTokensBought = _exitCurve( swapAddress, incomingCrv, underlyingIndex ); } else if (curveReg.isMetaPool(swapAddress)) { address[4] memory poolTokens = curveReg.getPoolTokens(swapAddress); address intermediateSwapAddress; uint8 i; for (; i < 4; i++) { if (curveReg.metaPools(poolTokens[i]) != address(0)) { intermediateSwapAddress = curveReg.metaPools(poolTokens[i]); break; } } // _exitCurve to intermediateSwapAddress Token uint256 intermediateBought = _exitCurve( swapAddress, incomingCrv, i ); // _performZapOut: fromPool = intermediateSwapAddress ToTokensBought = _performZapOut( intermediateSwapAddress, intermediateBought, toToken ); } else { ToTokensBought = _performZapOut(swapAddress, incomingCrv, toToken); } require(ToTokensBought >= minToTokens, "High Slippage"); if (toToken == address(0)) { Address.sendValue(toWhomToIssue, ToTokensBought); } else { IERC20(toToken).safeTransfer(toWhomToIssue, ToTokensBought); } } function _performZapOut( address swapAddress, uint256 incomingCrv, address toToken ) internal returns (uint256 ToTokensBought) { if (curveReg.isBtcPool(swapAddress)) { (, uint8 wbtcIndex) = curveReg.isUnderlyingToken( swapAddress, wbtcToken ); uint256 intermediateBought = _exitCurve( swapAddress, incomingCrv, wbtcIndex ); ToTokensBought = _token2Token( wbtcToken, toToken, intermediateBought ); } else { ( bool isUnderlyingIntermediate, uint8 intermediateStableIndex ) = curveReg.isUnderlyingToken(swapAddress, intermediateStable); require( isUnderlyingIntermediate, "Pool does not support intermediate" ); uint256 intermediateBought = _exitCurve( swapAddress, incomingCrv, intermediateStableIndex ); ToTokensBought = _token2Token( intermediateStable, toToken, intermediateBought ); } } function _exitCurve( address swapAddress, uint256 incomingCrv, uint256 index ) internal returns (uint256 tokensReceived) { address exitTokenAddress = curveReg.getPoolTokens(swapAddress)[index]; uint256 iniTokenBal = IERC20(exitTokenAddress).balanceOf(address(this)); address tokenAddress = curveReg.getTokenAddress(swapAddress); IERC20(tokenAddress).safeApprove(swapAddress, 0); IERC20(tokenAddress).safeApprove(swapAddress, incomingCrv); ICurveSwap(swapAddress).remove_liquidity_one_coin( incomingCrv, int128(index), 0 ); tokensReceived = (IERC20(exitTokenAddress).balanceOf(address(this))) .sub(iniTokenBal); } /** @notice This function is used to swap ETH/ERC20 <> ETH/ERC20 @param fromToken The token address to swap from. (0x00 for ETH) @param toToken The token address to swap to. (0x00 for ETH) @param tokens2Trade The amount of tokens to swap @return tokenBought The quantity of tokens bought */ function _token2Token( address fromToken, address toToken, uint256 tokens2Trade ) internal returns (uint256 tokenBought) { if (fromToken == toToken) { return tokens2Trade; } if (fromToken == address(0)) { if (toToken == wethToken) { IWETH(wethToken).deposit.value(tokens2Trade)(); return tokens2Trade; } address[] memory path = new address[](2); path[0] = wethToken; path[1] = toToken; tokenBought = uniswapRouter.swapExactETHForTokens.value( tokens2Trade )(1, path, address(this), deadline)[path.length - 1]; } else if (toToken == address(0)) { if (fromToken == wethToken) { IWETH(wethToken).withdraw(tokens2Trade); return tokens2Trade; } IERC20(fromToken).safeApprove(address(uniswapRouter), tokens2Trade); address[] memory path = new address[](2); path[0] = fromToken; path[1] = wethToken; tokenBought = uniswapRouter.swapExactTokensForETH( tokens2Trade, 1, path, address(this), deadline )[path.length - 1]; } else { IERC20(fromToken).safeApprove(address(uniswapRouter), tokens2Trade); if (fromToken != wethToken) { if (toToken != wethToken) { // check output via tokenA -> tokenB address pairA = UniSwapV2FactoryAddress.getPair( fromToken, toToken ); address[] memory pathA = new address[](2); pathA[0] = fromToken; pathA[1] = toToken; uint256 amtA; if (pairA != address(0)) { amtA = uniswapRouter.getAmountsOut( tokens2Trade, pathA )[1]; } // check output via tokenA -> weth -> tokenB address[] memory pathB = new address[](3); pathB[0] = fromToken; pathB[1] = wethToken; pathB[2] = toToken; uint256 amtB = uniswapRouter.getAmountsOut( tokens2Trade, pathB )[2]; if (amtA >= amtB) { tokenBought = uniswapRouter.swapExactTokensForTokens( tokens2Trade, 1, pathA, address(this), deadline )[pathA.length - 1]; } else { tokenBought = uniswapRouter.swapExactTokensForTokens( tokens2Trade, 1, pathB, address(this), deadline )[pathB.length - 1]; } } else { address[] memory path = new address[](2); path[0] = fromToken; path[1] = wethToken; tokenBought = uniswapRouter.swapExactTokensForTokens( tokens2Trade, 1, path, address(this), deadline )[path.length - 1]; } } else { address[] memory path = new address[](2); path[0] = wethToken; path[1] = toToken; tokenBought = uniswapRouter.swapExactTokensForTokens( tokens2Trade, 1, path, address(this), deadline )[path.length - 1]; } } require(tokenBought > 0, "Error Swapping Tokens"); } function updateCurveRegistry(ICurveRegistry newCurveRegistry) external onlyOwner { require(newCurveRegistry != curveReg, "Already using this Registry"); curveReg = newCurveRegistry; } function inCaseTokengetsStuck(IERC20 _TokenAddress) external onlyOwner { uint256 qty = _TokenAddress.balanceOf(address(this)); IERC20(_TokenAddress).safeTransfer(_owner, qty); } function set_new_goodwill(uint16 _new_goodwill) external onlyOwner { require( _new_goodwill >= 0 && _new_goodwill < 10000, "GoodWill Value not allowed" ); goodwill = _new_goodwill; } function set_new_zgoodwillAddress(address _new_zgoodwillAddress) external onlyOwner { zgoodwillAddress = _new_zgoodwillAddress; } // - to Pause the contract function toggleContractActive() external onlyOwner { stopped = !stopped; } // - to withdraw any ETH balance sitting in the contract function withdraw() external onlyOwner { _owner.transfer(address(this).balance); } function updateIntermediateStable(address newIntermediate) external onlyOwner { require( newIntermediate != intermediateStable, "Already using this intermediate" ); intermediateStable = newIntermediate; } function() external payable { require(msg.sender != tx.origin, "Do not send ETH directly"); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract ICurveRegistry","name":"_curveRegistry","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":false,"inputs":[{"internalType":"address payable","name":"toWhomToIssue","type":"address"},{"internalType":"address","name":"swapAddress","type":"address"},{"internalType":"uint256","name":"incomingCrv","type":"uint256"},{"internalType":"address","name":"toToken","type":"address"},{"internalType":"uint256","name":"minToTokens","type":"uint256"}],"name":"ZapOut","outputs":[{"internalType":"uint256","name":"ToTokensBought","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"_owner","outputs":[{"internalType":"address payable","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"curveReg","outputs":[{"internalType":"contract ICurveRegistry","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"goodwill","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IERC20","name":"_TokenAddress","type":"address"}],"name":"inCaseTokengetsStuck","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"intermediateStable","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint16","name":"_new_goodwill","type":"uint16"}],"name":"set_new_goodwill","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_zgoodwillAddress","type":"address"}],"name":"set_new_zgoodwillAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"stopped","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"toggleContractActive","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address payable","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract ICurveRegistry","name":"newCurveRegistry","type":"address"}],"name":"updateCurveRegistry","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newIntermediate","type":"address"}],"name":"updateIntermediateStable","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"zgoodwillAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526000805462ffffff60a81b19169055600180546001600160a01b0319908116733ce37278de6388532c3949ce4e886f365b14fb56179091556003805490911673a0b86991c6218b36c1d19d4a2e9eb0ce3606eb481790553480156200006857600080fd5b5060405162002fe338038062002fe3833981810160405260208110156200008e57600080fd5b50516000805460ff19166001178155620000b06001600160e01b036200012816565b60008054610100600160a81b0319166101006001600160a01b038416908102919091178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600280546001600160a01b0319166001600160a01b03929092169190911790556200012c565b3390565b612ea7806200013c6000396000f3fe6080604052600436106101095760003560e01c806375f12b2111610095578063b0e0721211610064578063b0e0721214610360578063b10e1dbc14610375578063b2bdfa7b146103a3578063e5953382146103b8578063f2fde38b146103eb57610109565b806375f12b21146102da5780637810bf19146103035780638da5cb5b146103365780638f32d59b1461034b57610109565b80633ccfd60b116100dc5780633ccfd60b1461021e578063516d6ad214610233578063551196d5146102665780635de0398e14610299578063715018a6146102c557610109565b806304a863d4146101605780631385d24c146101c35780632810c14e146101d8578063374b09f814610209575b3332141561015e576040805162461bcd60e51b815260206004820152601860248201527f446f206e6f742073656e6420455448206469726563746c790000000000000000604482015290519081900360640190fd5b005b34801561016c57600080fd5b506101b1600480360360a081101561018357600080fd5b506001600160a01b03813581169160208101358216916040820135916060810135909116906080013561041e565b60408051918252519081900360200190f35b3480156101cf57600080fd5b5061015e61094d565b3480156101e457600080fd5b506101ed6109b5565b604080516001600160a01b039092168252519081900360200190f35b34801561021557600080fd5b506101ed6109c4565b34801561022a57600080fd5b5061015e6109d3565b34801561023f57600080fd5b5061015e6004803603602081101561025657600080fd5b50356001600160a01b0316610a5e565b34801561027257600080fd5b5061015e6004803603602081101561028957600080fd5b50356001600160a01b0316610b2a565b3480156102a557600080fd5b506102ae610c13565b6040805161ffff9092168252519081900360200190f35b3480156102d157600080fd5b5061015e610c24565b3480156102e657600080fd5b506102ef610cba565b604080519115158252519081900360200190f35b34801561030f57600080fd5b5061015e6004803603602081101561032657600080fd5b50356001600160a01b0316610cca565b34801561034257600080fd5b506101ed610d33565b34801561035757600080fd5b506102ef610d47565b34801561036c57600080fd5b506101ed610d70565b34801561038157600080fd5b5061015e6004803603602081101561039857600080fd5b503561ffff16610d7f565b3480156103af57600080fd5b506101ed610e42565b3480156103c457600080fd5b5061015e600480360360208110156103db57600080fd5b50356001600160a01b0316610e56565b3480156103f757600080fd5b5061015e6004803603602081101561040e57600080fd5b50356001600160a01b0316610f22565b60008054600160a81b900460ff1615610473576040805162461bcd60e51b815260206004820152601260248201527115195b5c1bdc985c9a5b1e4814185d5cd95960721b604482015290519081900360640190fd5b6002546040805163b8d7b66960e01b81526001600160a01b0388811660048301529151600093929092169163b8d7b66991602480820192602092909190829003018186803b1580156104c457600080fd5b505afa1580156104d8573d6000803e3d6000fd5b505050506040513d60208110156104ee57600080fd5b50516000805491925090600160b01b900461ffff16156105525760005461052d90610525908890600160b01b900461ffff16610f72565b612710610fd4565b600154909150610552906001600160a01b03848116913391168463ffffffff61101616565b61057933306105618985611076565b6001600160a01b03861692919063ffffffff61101616565b600254604080516301e09fa360e41b81526001600160a01b038a81166004830152888116602483015282516000948594921692631e09fa30926044808301939192829003018186803b1580156105ce57600080fd5b505afa1580156105e2573d6000803e3d6000fd5b505050506040513d60408110156105f857600080fd5b508051602090910151909250905081156106215761061a89898360ff166110b8565b94506108c4565b60025460408051632648f96560e11b81526001600160a01b038c8116600483015291519190921691634c91f2ca916024808301926020929190829003018186803b15801561066e57600080fd5b505afa158015610682573d6000803e3d6000fd5b505050506040513d602081101561069857600080fd5b5051156108b6576106a7612d31565b6002546040805163ca4f280360e01b81526001600160a01b038d811660048301529151919092169163ca4f2803916024808301926080929190829003018186803b1580156106f457600080fd5b505afa158015610708573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250608081101561072d57600080fd5b5090506000805b60048160ff16101561088e576002546000906001600160a01b03166324452aaf8560ff85166004811061076357fe5b60200201516040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156107ae57600080fd5b505afa1580156107c2573d6000803e3d6000fd5b505050506040513d60208110156107d857600080fd5b50516001600160a01b031614610886576002546001600160a01b03166324452aaf8460ff84166004811061080857fe5b60200201516040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561085357600080fd5b505afa158015610867573d6000803e3d6000fd5b505050506040513d602081101561087d57600080fd5b5051915061088e565b600101610734565b600061089e8d8d8460ff166110b8565b90506108ab83828d61138d565b9850505050506108c4565b6108c189898961138d565b94505b85851015610909576040805162461bcd60e51b815260206004820152600d60248201526c4869676820536c69707061676560981b604482015290519081900360640190fd5b6001600160a01b038716610926576109218a866115db565b610940565b6109406001600160a01b0388168b8763ffffffff6116c516565b5050505095945050505050565b610955610d47565b610994576040805162461bcd60e51b81526020600482018190526024820152600080516020612dd1833981519152604482015290519081900360640190fd5b6000805460ff60a81b198116600160a81b9182900460ff1615909102179055565b6001546001600160a01b031681565b6002546001600160a01b031681565b6109db610d47565b610a1a576040805162461bcd60e51b81526020600482018190526024820152600080516020612dd1833981519152604482015290519081900360640190fd5b600080546040516001600160a01b0361010090920491909116914780156108fc02929091818181858888f19350505050158015610a5b573d6000803e3d6000fd5b50565b610a66610d47565b610aa5576040805162461bcd60e51b81526020600482018190526024820152600080516020612dd1833981519152604482015290519081900360640190fd5b6003546001600160a01b0382811691161415610b08576040805162461bcd60e51b815260206004820152601f60248201527f416c7265616479207573696e67207468697320696e7465726d65646961746500604482015290519081900360640190fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b610b32610d47565b610b71576040805162461bcd60e51b81526020600482018190526024820152600080516020612dd1833981519152604482015290519081900360640190fd5b604080516370a0823160e01b815230600482015290516000916001600160a01b038416916370a0823191602480820192602092909190829003018186803b158015610bbb57600080fd5b505afa158015610bcf573d6000803e3d6000fd5b505050506040513d6020811015610be557600080fd5b5051600054909150610c0f906001600160a01b03848116916101009004168363ffffffff6116c516565b5050565b600054600160b01b900461ffff1681565b610c2c610d47565b610c6b576040805162461bcd60e51b81526020600482018190526024820152600080516020612dd1833981519152604482015290519081900360640190fd5b600080546040516101009091046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360008054610100600160a81b0319169055565b600054600160a81b900460ff1681565b610cd2610d47565b610d11576040805162461bcd60e51b81526020600482018190526024820152600080516020612dd1833981519152604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60005461010090046001600160a01b031690565b6000805461010090046001600160a01b0316610d61611717565b6001600160a01b031614905090565b6003546001600160a01b031681565b610d87610d47565b610dc6576040805162461bcd60e51b81526020600482018190526024820152600080516020612dd1833981519152604482015290519081900360640190fd5b6127108161ffff1610610e20576040805162461bcd60e51b815260206004820152601a60248201527f476f6f6457696c6c2056616c7565206e6f7420616c6c6f776564000000000000604482015290519081900360640190fd5b6000805461ffff909216600160b01b0261ffff60b01b19909216919091179055565b60005461010090046001600160a01b031681565b610e5e610d47565b610e9d576040805162461bcd60e51b81526020600482018190526024820152600080516020612dd1833981519152604482015290519081900360640190fd5b6002546001600160a01b0382811691161415610f00576040805162461bcd60e51b815260206004820152601b60248201527f416c7265616479207573696e6720746869732052656769737472790000000000604482015290519081900360640190fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b610f2a610d47565b610f69576040805162461bcd60e51b81526020600482018190526024820152600080516020612dd1833981519152604482015290519081900360640190fd5b610a5b8161171b565b600082610f8157506000610fce565b82820282848281610f8e57fe5b0414610fcb5760405162461bcd60e51b8152600401808060200182810382526021815260200180612db06021913960400191505060405180910390fd5b90505b92915050565b6000610fcb83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506117c6565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052611070908590611868565b50505050565b6000610fcb83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611a20565b6002546040805163ca4f280360e01b81526001600160a01b03868116600483015291516000938493169163ca4f2803916024808301926080929190829003018186803b15801561110757600080fd5b505afa15801561111b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250608081101561114057600080fd5b50836004811061114c57fe5b602002015190506000816001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156111ab57600080fd5b505afa1580156111bf573d6000803e3d6000fd5b505050506040513d60208110156111d557600080fd5b50516002546040805163b8d7b66960e01b81526001600160a01b038a811660048301529151939450600093919092169163b8d7b669916024808301926020929190829003018186803b15801561122a57600080fd5b505afa15801561123e573d6000803e3d6000fd5b505050506040513d602081101561125457600080fd5b505190506112736001600160a01b03821688600063ffffffff611a7a16565b61128d6001600160a01b038216888863ffffffff611a7a16565b60408051630d2680e960e11b815260048101889052600f87810b900b602482015260006044820181905291516001600160a01b038a1692631a4d01d2926064808201939182900301818387803b1580156112e657600080fd5b505af11580156112fa573d6000803e3d6000fd5b5050604080516370a0823160e01b8152306004820152905161138293508592506001600160a01b038716916370a08231916024808301926020929190829003018186803b15801561134a57600080fd5b505afa15801561135e573d6000803e3d6000fd5b505050506040513d602081101561137457600080fd5b50519063ffffffff61107616565b979650505050505050565b6002546040805163a19f017160e01b81526001600160a01b0386811660048301529151600093929092169163a19f017191602480820192602092909190829003018186803b1580156113de57600080fd5b505afa1580156113f2573d6000803e3d6000fd5b505050506040513d602081101561140857600080fd5b5051156114e057600254604080516301e09fa360e41b81526001600160a01b038781166004830152732260fac5e5542a773aa44fbcfedf7c193bc2c599602483015282516000949190911692631e09fa309260448082019391829003018186803b15801561147557600080fd5b505afa158015611489573d6000803e3d6000fd5b505050506040513d604081101561149f57600080fd5b5060200151905060006114b6868660ff85166110b8565b90506114d7732260fac5e5542a773aa44fbcfedf7c193bc2c5998583611b8d565b925050506115d4565b600254600354604080516301e09fa360e41b81526001600160a01b0388811660048301529283166024820152815160009485941692631e09fa309260448082019391829003018186803b15801561153657600080fd5b505afa15801561154a573d6000803e3d6000fd5b505050506040513d604081101561156057600080fd5b5080516020909101519092509050816115aa5760405162461bcd60e51b8152600401808060200182810382526022815260200180612df16022913960400191505060405180910390fd5b60006115ba87878460ff166110b8565b600354909150611382906001600160a01b03168683611b8d565b9392505050565b80471015611630576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015290519081900360640190fd5b6040516000906001600160a01b0384169083908381818185875af1925050503d806000811461167b576040519150601f19603f3d011682016040523d82523d6000602084013e611680565b606091505b50509050806116c05760405162461bcd60e51b815260040180806020018281038252603a815260200180612d76603a913960400191505060405180910390fd5b505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526116c0908490611868565b3390565b6001600160a01b0381166117605760405162461bcd60e51b8152600401808060200182810382526026815260200180612d506026913960400191505060405180910390fd5b600080546040516001600160a01b038085169361010090930416917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b600081836118525760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156118175781810151838201526020016117ff565b50505050905090810190601f1680156118445780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161185e57fe5b0495945050505050565b61187a826001600160a01b0316612cf5565b6118cb576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b602083106119095780518252601f1990920191602091820191016118ea565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461196b576040519150601f19603f3d011682016040523d82523d6000602084013e611970565b606091505b5091509150816119c7576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b805115611070578080602001905160208110156119e357600080fd5b50516110705760405162461bcd60e51b815260040180806020018281038252602a815260200180612e13602a913960400191505060405180910390fd5b60008184841115611a725760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156118175781810151838201526020016117ff565b505050900390565b801580611b00575060408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b158015611ad257600080fd5b505afa158015611ae6573d6000803e3d6000fd5b505050506040513d6020811015611afc57600080fd5b5051155b611b3b5760405162461bcd60e51b8152600401808060200182810382526036815260200180612e3d6036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b1790526116c0908490611868565b6000826001600160a01b0316846001600160a01b03161415611bb05750806115d4565b6001600160a01b038416611e74576001600160a01b03831673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc21415611c535773c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015611c3257600080fd5b505af1158015611c46573d6000803e3d6000fd5b50505050508190506115d4565b604080516002808252606080830184529260208301908038833901905050905073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281600081518110611c9557fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508381600181518110611cc357fe5b6001600160a01b03909216602092830291909101820152604051637ff36ab560e01b81526001600482018181523060448401819052600f60fc1b60648501819052608060248601908152875160848701528751737a250d5630b4cf539739df2c5dacb4c659f2488d97637ff36ab5978c97968b9695949093909260a490920191878101910280838360005b83811015611d66578181015183820152602001611d4e565b50505050905001955050505050506000604051808303818588803b158015611d8d57600080fd5b505af1158015611da1573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526020811015611dcb57600080fd5b8101908080516040519392919084600160201b821115611dea57600080fd5b908301906020820185811115611dff57600080fd5b82518660208202830111600160201b82111715611e1b57600080fd5b82525081516020918201928201910280838360005b83811015611e48578181015183820152602001611e30565b50505050905001604052505050600182510381518110611e6457fe5b6020026020010151915050612ca8565b6001600160a01b0383166120ce576001600160a01b03841673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc21415611f215773c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611f0157600080fd5b505af1158015611f15573d6000803e3d6000fd5b505050508190506115d4565b611f4f6001600160a01b038516737a250d5630b4cf539739df2c5dacb4c659f2488d8463ffffffff611a7a16565b60408051600280825260608083018452926020830190803883390190505090508481600081518110611f7d57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281600181518110611fbf57fe5b6001600160a01b039092166020928302919091018201526040516318cbafe560e01b8152600481018581526001602483018190523060648401819052600f60fc1b6084850181905260a060448601908152875160a48701528751737a250d5630b4cf539739df2c5dacb4c659f2488d976318cbafe5978c978b9695949093909260c490920191878101910280838360005b83811015612068578181015183820152602001612050565b505050509050019650505050505050600060405180830381600087803b15801561209157600080fd5b505af11580156120a5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015611dcb57600080fd5b6120fc6001600160a01b038516737a250d5630b4cf539739df2c5dacb4c659f2488d8463ffffffff611a7a16565b6001600160a01b03841673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc214612a84576001600160a01b03831673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc214612968576040805163e6a4390560e01b81526001600160a01b038681166004830152851660248201529051600091735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f9163e6a4390591604480820192602092909190829003018186803b1580156121aa57600080fd5b505afa1580156121be573d6000803e3d6000fd5b505050506040513d60208110156121d457600080fd5b5051604080516002808252606080830184529394509091602083019080388339019050509050858160008151811061220857fe5b60200260200101906001600160a01b031690816001600160a01b031681525050848160018151811061223657fe5b6001600160a01b0392831660209182029290920101526000908316156123c9576040805163d06ca61f60e01b81526004810187815260248201928352845160448301528451737a250d5630b4cf539739df2c5dacb4c659f2488d9363d06ca61f938a938893909291606401906020808601910280838360005b838110156122c75781810151838201526020016122af565b50505050905001935050505060006040518083038186803b1580156122eb57600080fd5b505afa1580156122ff573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561232857600080fd5b8101908080516040519392919084600160201b82111561234757600080fd5b90830190602082018581111561235c57600080fd5b82518660208202830111600160201b8211171561237857600080fd5b82525081516020918201928201910280838360005b838110156123a557818101518382015260200161238d565b505050509050016040525050506001815181106123be57fe5b602002602001015190505b6040805160038082526080820190925260609160208201838038833901905050905087816000815181106123f957fe5b60200260200101906001600160a01b031690816001600160a01b03168152505073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28160018151811061243b57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050868160028151811061246957fe5b6001600160a01b039092166020928302919091018201526040805163d06ca61f60e01b81526004810189815260248201928352845160448301528451600094737a250d5630b4cf539739df2c5dacb4c659f2488d9463d06ca61f948d948994909360649092019185810191028083838c5b838110156124f25781810151838201526020016124da565b50505050905001935050505060006040518083038186803b15801561251657600080fd5b505afa15801561252a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561255357600080fd5b8101908080516040519392919084600160201b82111561257257600080fd5b90830190602082018581111561258757600080fd5b82518660208202830111600160201b821117156125a357600080fd5b82525081516020918201928201910280838360005b838110156125d05781810151838201526020016125b8565b505050509050016040525050506002815181106125e957fe5b602002602001015190508083106127ae57737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03166338ed17398860018730600f60fc1b6040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03166001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b838110156126a0578181015183820152602001612688565b505050509050019650505050505050600060405180830381600087803b1580156126c957600080fd5b505af11580156126dd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561270657600080fd5b8101908080516040519392919084600160201b82111561272557600080fd5b90830190602082018581111561273a57600080fd5b82518660208202830111600160201b8211171561275657600080fd5b82525081516020918201928201910280838360005b8381101561278357818101518382015260200161276b565b5050505090500160405250505060018551038151811061279f57fe5b6020026020010151955061295e565b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03166338ed17398860018530600f60fc1b6040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03166001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b8381101561285457818101518382015260200161283c565b505050509050019650505050505050600060405180830381600087803b15801561287d57600080fd5b505af1158015612891573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156128ba57600080fd5b8101908080516040519392919084600160201b8211156128d957600080fd5b9083019060208201858111156128ee57600080fd5b82518660208202830111600160201b8211171561290a57600080fd5b82525081516020918201928201910280838360005b8381101561293757818101518382015260200161291f565b5050505090500160405250505060018351038151811061295357fe5b602002602001015195505b5050505050612a7f565b6040805160028082526060808301845292602083019080388339019050509050848160008151811061299657fe5b60200260200101906001600160a01b031690816001600160a01b03168152505073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2816001815181106129d857fe5b6001600160a01b03929092166020928302919091018201526040516338ed173960e01b8152600481018581526001602483018190523060648401819052600f60fc1b6084850181905260a060448601908152875160a48701528751737a250d5630b4cf539739df2c5dacb4c659f2488d976338ed1739978c978b9695949093909260c490920191878101910280838360008315612068578181015183820152602001612050565b612ca8565b604080516002808252606080830184529260208301908038833901905050905073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281600081518110612ac657fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508381600181518110612af457fe5b6001600160a01b039092166020928302919091018201526040516338ed173960e01b8152600481018581526001602483018190523060648401819052600f60fc1b6084850181905260a060448601908152875160a48701528751737a250d5630b4cf539739df2c5dacb4c659f2488d976338ed1739978c978b9695949093909260c490920191878101910280838360005b83811015612b9d578181015183820152602001612b85565b505050509050019650505050505050600060405180830381600087803b158015612bc657600080fd5b505af1158015612bda573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015612c0357600080fd5b8101908080516040519392919084600160201b821115612c2257600080fd5b908301906020820185811115612c3757600080fd5b82518660208202830111600160201b82111715612c5357600080fd5b82525081516020918201928201910280838360005b83811015612c80578181015183820152602001612c68565b50505050905001604052505050600182510381518110612c9c57fe5b60200260200101519150505b600081116115d4576040805162461bcd60e51b81526020600482015260156024820152744572726f72205377617070696e6720546f6b656e7360581b604482015290519081900360640190fd5b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590612d2957508115155b949350505050565b6040518060800160405280600490602082028038833950919291505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d61792068617665207265766572746564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572506f6f6c20646f6573206e6f7420737570706f727420696e7465726d6564696174655361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365a265627a7a723158201eeb7c42ac798aa401a6f55b00bfb50efe756275256bc1adbe61f3f516e656a564736f6c63430005110032000000000000000000000000fedba6539cbc0bf508cff780793225780a247054
Deployed Bytecode
0x6080604052600436106101095760003560e01c806375f12b2111610095578063b0e0721211610064578063b0e0721214610360578063b10e1dbc14610375578063b2bdfa7b146103a3578063e5953382146103b8578063f2fde38b146103eb57610109565b806375f12b21146102da5780637810bf19146103035780638da5cb5b146103365780638f32d59b1461034b57610109565b80633ccfd60b116100dc5780633ccfd60b1461021e578063516d6ad214610233578063551196d5146102665780635de0398e14610299578063715018a6146102c557610109565b806304a863d4146101605780631385d24c146101c35780632810c14e146101d8578063374b09f814610209575b3332141561015e576040805162461bcd60e51b815260206004820152601860248201527f446f206e6f742073656e6420455448206469726563746c790000000000000000604482015290519081900360640190fd5b005b34801561016c57600080fd5b506101b1600480360360a081101561018357600080fd5b506001600160a01b03813581169160208101358216916040820135916060810135909116906080013561041e565b60408051918252519081900360200190f35b3480156101cf57600080fd5b5061015e61094d565b3480156101e457600080fd5b506101ed6109b5565b604080516001600160a01b039092168252519081900360200190f35b34801561021557600080fd5b506101ed6109c4565b34801561022a57600080fd5b5061015e6109d3565b34801561023f57600080fd5b5061015e6004803603602081101561025657600080fd5b50356001600160a01b0316610a5e565b34801561027257600080fd5b5061015e6004803603602081101561028957600080fd5b50356001600160a01b0316610b2a565b3480156102a557600080fd5b506102ae610c13565b6040805161ffff9092168252519081900360200190f35b3480156102d157600080fd5b5061015e610c24565b3480156102e657600080fd5b506102ef610cba565b604080519115158252519081900360200190f35b34801561030f57600080fd5b5061015e6004803603602081101561032657600080fd5b50356001600160a01b0316610cca565b34801561034257600080fd5b506101ed610d33565b34801561035757600080fd5b506102ef610d47565b34801561036c57600080fd5b506101ed610d70565b34801561038157600080fd5b5061015e6004803603602081101561039857600080fd5b503561ffff16610d7f565b3480156103af57600080fd5b506101ed610e42565b3480156103c457600080fd5b5061015e600480360360208110156103db57600080fd5b50356001600160a01b0316610e56565b3480156103f757600080fd5b5061015e6004803603602081101561040e57600080fd5b50356001600160a01b0316610f22565b60008054600160a81b900460ff1615610473576040805162461bcd60e51b815260206004820152601260248201527115195b5c1bdc985c9a5b1e4814185d5cd95960721b604482015290519081900360640190fd5b6002546040805163b8d7b66960e01b81526001600160a01b0388811660048301529151600093929092169163b8d7b66991602480820192602092909190829003018186803b1580156104c457600080fd5b505afa1580156104d8573d6000803e3d6000fd5b505050506040513d60208110156104ee57600080fd5b50516000805491925090600160b01b900461ffff16156105525760005461052d90610525908890600160b01b900461ffff16610f72565b612710610fd4565b600154909150610552906001600160a01b03848116913391168463ffffffff61101616565b61057933306105618985611076565b6001600160a01b03861692919063ffffffff61101616565b600254604080516301e09fa360e41b81526001600160a01b038a81166004830152888116602483015282516000948594921692631e09fa30926044808301939192829003018186803b1580156105ce57600080fd5b505afa1580156105e2573d6000803e3d6000fd5b505050506040513d60408110156105f857600080fd5b508051602090910151909250905081156106215761061a89898360ff166110b8565b94506108c4565b60025460408051632648f96560e11b81526001600160a01b038c8116600483015291519190921691634c91f2ca916024808301926020929190829003018186803b15801561066e57600080fd5b505afa158015610682573d6000803e3d6000fd5b505050506040513d602081101561069857600080fd5b5051156108b6576106a7612d31565b6002546040805163ca4f280360e01b81526001600160a01b038d811660048301529151919092169163ca4f2803916024808301926080929190829003018186803b1580156106f457600080fd5b505afa158015610708573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250608081101561072d57600080fd5b5090506000805b60048160ff16101561088e576002546000906001600160a01b03166324452aaf8560ff85166004811061076357fe5b60200201516040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156107ae57600080fd5b505afa1580156107c2573d6000803e3d6000fd5b505050506040513d60208110156107d857600080fd5b50516001600160a01b031614610886576002546001600160a01b03166324452aaf8460ff84166004811061080857fe5b60200201516040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561085357600080fd5b505afa158015610867573d6000803e3d6000fd5b505050506040513d602081101561087d57600080fd5b5051915061088e565b600101610734565b600061089e8d8d8460ff166110b8565b90506108ab83828d61138d565b9850505050506108c4565b6108c189898961138d565b94505b85851015610909576040805162461bcd60e51b815260206004820152600d60248201526c4869676820536c69707061676560981b604482015290519081900360640190fd5b6001600160a01b038716610926576109218a866115db565b610940565b6109406001600160a01b0388168b8763ffffffff6116c516565b5050505095945050505050565b610955610d47565b610994576040805162461bcd60e51b81526020600482018190526024820152600080516020612dd1833981519152604482015290519081900360640190fd5b6000805460ff60a81b198116600160a81b9182900460ff1615909102179055565b6001546001600160a01b031681565b6002546001600160a01b031681565b6109db610d47565b610a1a576040805162461bcd60e51b81526020600482018190526024820152600080516020612dd1833981519152604482015290519081900360640190fd5b600080546040516001600160a01b0361010090920491909116914780156108fc02929091818181858888f19350505050158015610a5b573d6000803e3d6000fd5b50565b610a66610d47565b610aa5576040805162461bcd60e51b81526020600482018190526024820152600080516020612dd1833981519152604482015290519081900360640190fd5b6003546001600160a01b0382811691161415610b08576040805162461bcd60e51b815260206004820152601f60248201527f416c7265616479207573696e67207468697320696e7465726d65646961746500604482015290519081900360640190fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b610b32610d47565b610b71576040805162461bcd60e51b81526020600482018190526024820152600080516020612dd1833981519152604482015290519081900360640190fd5b604080516370a0823160e01b815230600482015290516000916001600160a01b038416916370a0823191602480820192602092909190829003018186803b158015610bbb57600080fd5b505afa158015610bcf573d6000803e3d6000fd5b505050506040513d6020811015610be557600080fd5b5051600054909150610c0f906001600160a01b03848116916101009004168363ffffffff6116c516565b5050565b600054600160b01b900461ffff1681565b610c2c610d47565b610c6b576040805162461bcd60e51b81526020600482018190526024820152600080516020612dd1833981519152604482015290519081900360640190fd5b600080546040516101009091046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360008054610100600160a81b0319169055565b600054600160a81b900460ff1681565b610cd2610d47565b610d11576040805162461bcd60e51b81526020600482018190526024820152600080516020612dd1833981519152604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60005461010090046001600160a01b031690565b6000805461010090046001600160a01b0316610d61611717565b6001600160a01b031614905090565b6003546001600160a01b031681565b610d87610d47565b610dc6576040805162461bcd60e51b81526020600482018190526024820152600080516020612dd1833981519152604482015290519081900360640190fd5b6127108161ffff1610610e20576040805162461bcd60e51b815260206004820152601a60248201527f476f6f6457696c6c2056616c7565206e6f7420616c6c6f776564000000000000604482015290519081900360640190fd5b6000805461ffff909216600160b01b0261ffff60b01b19909216919091179055565b60005461010090046001600160a01b031681565b610e5e610d47565b610e9d576040805162461bcd60e51b81526020600482018190526024820152600080516020612dd1833981519152604482015290519081900360640190fd5b6002546001600160a01b0382811691161415610f00576040805162461bcd60e51b815260206004820152601b60248201527f416c7265616479207573696e6720746869732052656769737472790000000000604482015290519081900360640190fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b610f2a610d47565b610f69576040805162461bcd60e51b81526020600482018190526024820152600080516020612dd1833981519152604482015290519081900360640190fd5b610a5b8161171b565b600082610f8157506000610fce565b82820282848281610f8e57fe5b0414610fcb5760405162461bcd60e51b8152600401808060200182810382526021815260200180612db06021913960400191505060405180910390fd5b90505b92915050565b6000610fcb83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506117c6565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052611070908590611868565b50505050565b6000610fcb83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611a20565b6002546040805163ca4f280360e01b81526001600160a01b03868116600483015291516000938493169163ca4f2803916024808301926080929190829003018186803b15801561110757600080fd5b505afa15801561111b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250608081101561114057600080fd5b50836004811061114c57fe5b602002015190506000816001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156111ab57600080fd5b505afa1580156111bf573d6000803e3d6000fd5b505050506040513d60208110156111d557600080fd5b50516002546040805163b8d7b66960e01b81526001600160a01b038a811660048301529151939450600093919092169163b8d7b669916024808301926020929190829003018186803b15801561122a57600080fd5b505afa15801561123e573d6000803e3d6000fd5b505050506040513d602081101561125457600080fd5b505190506112736001600160a01b03821688600063ffffffff611a7a16565b61128d6001600160a01b038216888863ffffffff611a7a16565b60408051630d2680e960e11b815260048101889052600f87810b900b602482015260006044820181905291516001600160a01b038a1692631a4d01d2926064808201939182900301818387803b1580156112e657600080fd5b505af11580156112fa573d6000803e3d6000fd5b5050604080516370a0823160e01b8152306004820152905161138293508592506001600160a01b038716916370a08231916024808301926020929190829003018186803b15801561134a57600080fd5b505afa15801561135e573d6000803e3d6000fd5b505050506040513d602081101561137457600080fd5b50519063ffffffff61107616565b979650505050505050565b6002546040805163a19f017160e01b81526001600160a01b0386811660048301529151600093929092169163a19f017191602480820192602092909190829003018186803b1580156113de57600080fd5b505afa1580156113f2573d6000803e3d6000fd5b505050506040513d602081101561140857600080fd5b5051156114e057600254604080516301e09fa360e41b81526001600160a01b038781166004830152732260fac5e5542a773aa44fbcfedf7c193bc2c599602483015282516000949190911692631e09fa309260448082019391829003018186803b15801561147557600080fd5b505afa158015611489573d6000803e3d6000fd5b505050506040513d604081101561149f57600080fd5b5060200151905060006114b6868660ff85166110b8565b90506114d7732260fac5e5542a773aa44fbcfedf7c193bc2c5998583611b8d565b925050506115d4565b600254600354604080516301e09fa360e41b81526001600160a01b0388811660048301529283166024820152815160009485941692631e09fa309260448082019391829003018186803b15801561153657600080fd5b505afa15801561154a573d6000803e3d6000fd5b505050506040513d604081101561156057600080fd5b5080516020909101519092509050816115aa5760405162461bcd60e51b8152600401808060200182810382526022815260200180612df16022913960400191505060405180910390fd5b60006115ba87878460ff166110b8565b600354909150611382906001600160a01b03168683611b8d565b9392505050565b80471015611630576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015290519081900360640190fd5b6040516000906001600160a01b0384169083908381818185875af1925050503d806000811461167b576040519150601f19603f3d011682016040523d82523d6000602084013e611680565b606091505b50509050806116c05760405162461bcd60e51b815260040180806020018281038252603a815260200180612d76603a913960400191505060405180910390fd5b505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526116c0908490611868565b3390565b6001600160a01b0381166117605760405162461bcd60e51b8152600401808060200182810382526026815260200180612d506026913960400191505060405180910390fd5b600080546040516001600160a01b038085169361010090930416917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b600081836118525760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156118175781810151838201526020016117ff565b50505050905090810190601f1680156118445780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161185e57fe5b0495945050505050565b61187a826001600160a01b0316612cf5565b6118cb576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b602083106119095780518252601f1990920191602091820191016118ea565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461196b576040519150601f19603f3d011682016040523d82523d6000602084013e611970565b606091505b5091509150816119c7576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b805115611070578080602001905160208110156119e357600080fd5b50516110705760405162461bcd60e51b815260040180806020018281038252602a815260200180612e13602a913960400191505060405180910390fd5b60008184841115611a725760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156118175781810151838201526020016117ff565b505050900390565b801580611b00575060408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b158015611ad257600080fd5b505afa158015611ae6573d6000803e3d6000fd5b505050506040513d6020811015611afc57600080fd5b5051155b611b3b5760405162461bcd60e51b8152600401808060200182810382526036815260200180612e3d6036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b1790526116c0908490611868565b6000826001600160a01b0316846001600160a01b03161415611bb05750806115d4565b6001600160a01b038416611e74576001600160a01b03831673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc21415611c535773c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015611c3257600080fd5b505af1158015611c46573d6000803e3d6000fd5b50505050508190506115d4565b604080516002808252606080830184529260208301908038833901905050905073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281600081518110611c9557fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508381600181518110611cc357fe5b6001600160a01b03909216602092830291909101820152604051637ff36ab560e01b81526001600482018181523060448401819052600f60fc1b60648501819052608060248601908152875160848701528751737a250d5630b4cf539739df2c5dacb4c659f2488d97637ff36ab5978c97968b9695949093909260a490920191878101910280838360005b83811015611d66578181015183820152602001611d4e565b50505050905001955050505050506000604051808303818588803b158015611d8d57600080fd5b505af1158015611da1573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526020811015611dcb57600080fd5b8101908080516040519392919084600160201b821115611dea57600080fd5b908301906020820185811115611dff57600080fd5b82518660208202830111600160201b82111715611e1b57600080fd5b82525081516020918201928201910280838360005b83811015611e48578181015183820152602001611e30565b50505050905001604052505050600182510381518110611e6457fe5b6020026020010151915050612ca8565b6001600160a01b0383166120ce576001600160a01b03841673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc21415611f215773c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611f0157600080fd5b505af1158015611f15573d6000803e3d6000fd5b505050508190506115d4565b611f4f6001600160a01b038516737a250d5630b4cf539739df2c5dacb4c659f2488d8463ffffffff611a7a16565b60408051600280825260608083018452926020830190803883390190505090508481600081518110611f7d57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281600181518110611fbf57fe5b6001600160a01b039092166020928302919091018201526040516318cbafe560e01b8152600481018581526001602483018190523060648401819052600f60fc1b6084850181905260a060448601908152875160a48701528751737a250d5630b4cf539739df2c5dacb4c659f2488d976318cbafe5978c978b9695949093909260c490920191878101910280838360005b83811015612068578181015183820152602001612050565b505050509050019650505050505050600060405180830381600087803b15801561209157600080fd5b505af11580156120a5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015611dcb57600080fd5b6120fc6001600160a01b038516737a250d5630b4cf539739df2c5dacb4c659f2488d8463ffffffff611a7a16565b6001600160a01b03841673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc214612a84576001600160a01b03831673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc214612968576040805163e6a4390560e01b81526001600160a01b038681166004830152851660248201529051600091735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f9163e6a4390591604480820192602092909190829003018186803b1580156121aa57600080fd5b505afa1580156121be573d6000803e3d6000fd5b505050506040513d60208110156121d457600080fd5b5051604080516002808252606080830184529394509091602083019080388339019050509050858160008151811061220857fe5b60200260200101906001600160a01b031690816001600160a01b031681525050848160018151811061223657fe5b6001600160a01b0392831660209182029290920101526000908316156123c9576040805163d06ca61f60e01b81526004810187815260248201928352845160448301528451737a250d5630b4cf539739df2c5dacb4c659f2488d9363d06ca61f938a938893909291606401906020808601910280838360005b838110156122c75781810151838201526020016122af565b50505050905001935050505060006040518083038186803b1580156122eb57600080fd5b505afa1580156122ff573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561232857600080fd5b8101908080516040519392919084600160201b82111561234757600080fd5b90830190602082018581111561235c57600080fd5b82518660208202830111600160201b8211171561237857600080fd5b82525081516020918201928201910280838360005b838110156123a557818101518382015260200161238d565b505050509050016040525050506001815181106123be57fe5b602002602001015190505b6040805160038082526080820190925260609160208201838038833901905050905087816000815181106123f957fe5b60200260200101906001600160a01b031690816001600160a01b03168152505073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28160018151811061243b57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050868160028151811061246957fe5b6001600160a01b039092166020928302919091018201526040805163d06ca61f60e01b81526004810189815260248201928352845160448301528451600094737a250d5630b4cf539739df2c5dacb4c659f2488d9463d06ca61f948d948994909360649092019185810191028083838c5b838110156124f25781810151838201526020016124da565b50505050905001935050505060006040518083038186803b15801561251657600080fd5b505afa15801561252a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561255357600080fd5b8101908080516040519392919084600160201b82111561257257600080fd5b90830190602082018581111561258757600080fd5b82518660208202830111600160201b821117156125a357600080fd5b82525081516020918201928201910280838360005b838110156125d05781810151838201526020016125b8565b505050509050016040525050506002815181106125e957fe5b602002602001015190508083106127ae57737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03166338ed17398860018730600f60fc1b6040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03166001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b838110156126a0578181015183820152602001612688565b505050509050019650505050505050600060405180830381600087803b1580156126c957600080fd5b505af11580156126dd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561270657600080fd5b8101908080516040519392919084600160201b82111561272557600080fd5b90830190602082018581111561273a57600080fd5b82518660208202830111600160201b8211171561275657600080fd5b82525081516020918201928201910280838360005b8381101561278357818101518382015260200161276b565b5050505090500160405250505060018551038151811061279f57fe5b6020026020010151955061295e565b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03166338ed17398860018530600f60fc1b6040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03166001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b8381101561285457818101518382015260200161283c565b505050509050019650505050505050600060405180830381600087803b15801561287d57600080fd5b505af1158015612891573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156128ba57600080fd5b8101908080516040519392919084600160201b8211156128d957600080fd5b9083019060208201858111156128ee57600080fd5b82518660208202830111600160201b8211171561290a57600080fd5b82525081516020918201928201910280838360005b8381101561293757818101518382015260200161291f565b5050505090500160405250505060018351038151811061295357fe5b602002602001015195505b5050505050612a7f565b6040805160028082526060808301845292602083019080388339019050509050848160008151811061299657fe5b60200260200101906001600160a01b031690816001600160a01b03168152505073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2816001815181106129d857fe5b6001600160a01b03929092166020928302919091018201526040516338ed173960e01b8152600481018581526001602483018190523060648401819052600f60fc1b6084850181905260a060448601908152875160a48701528751737a250d5630b4cf539739df2c5dacb4c659f2488d976338ed1739978c978b9695949093909260c490920191878101910280838360008315612068578181015183820152602001612050565b612ca8565b604080516002808252606080830184529260208301908038833901905050905073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281600081518110612ac657fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508381600181518110612af457fe5b6001600160a01b039092166020928302919091018201526040516338ed173960e01b8152600481018581526001602483018190523060648401819052600f60fc1b6084850181905260a060448601908152875160a48701528751737a250d5630b4cf539739df2c5dacb4c659f2488d976338ed1739978c978b9695949093909260c490920191878101910280838360005b83811015612b9d578181015183820152602001612b85565b505050509050019650505050505050600060405180830381600087803b158015612bc657600080fd5b505af1158015612bda573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015612c0357600080fd5b8101908080516040519392919084600160201b821115612c2257600080fd5b908301906020820185811115612c3757600080fd5b82518660208202830111600160201b82111715612c5357600080fd5b82525081516020918201928201910280838360005b83811015612c80578181015183820152602001612c68565b50505050905001604052505050600182510381518110612c9c57fe5b60200260200101519150505b600081116115d4576040805162461bcd60e51b81526020600482015260156024820152744572726f72205377617070696e6720546f6b656e7360581b604482015290519081900360640190fd5b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590612d2957508115155b949350505050565b6040518060800160405280600490602082028038833950919291505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d61792068617665207265766572746564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572506f6f6c20646f6573206e6f7420737570706f727420696e7465726d6564696174655361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365a265627a7a723158201eeb7c42ac798aa401a6f55b00bfb50efe756275256bc1adbe61f3f516e656a564736f6c63430005110032
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000fedba6539cbc0bf508cff780793225780a247054
-----Decoded View---------------
Arg [0] : _curveRegistry (address): 0xFEdBa6539Cbc0bf508CFF780793225780A247054
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000fedba6539cbc0bf508cff780793225780a247054
Deployed Bytecode Sourcemap
27705:12187:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39829:10;39843:9;39829:23;;39821:60;;;;;-1:-1:-1;;;39821:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;27705:12187;29023:2478;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29023:2478:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;29023:2478:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;39227:88;;8:9:-1;5:2;;;30:1;27;20:12;5:2;39227:88:0;;;:::i;27908:85::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27908:85:0;;;:::i;:::-;;;;-1:-1:-1;;;;;27908:85:0;;;;;;;;;;;;;;28291:30;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28291:30:0;;;:::i;39385:96::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;39385:96:0;;;:::i;39489:285::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;39489:285:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39489:285:0;-1:-1:-1;;;;;39489:285:0;;:::i;38565:200::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38565:200:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38565:200:0;-1:-1:-1;;;;;38565:200:0;;:::i;27875:26::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27875:26:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4811:140;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4811:140:0;;;:::i;27841:27::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27841:27:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;39021:166;;8:9:-1;5:2;;;30:1;27;20:12;5:2;39021:166:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39021:166:0;-1:-1:-1;;;;;39021:166:0;;:::i;4000:79::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4000:79:0;;;:::i;4366:94::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4366:94:0;;;:::i;28520:87::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28520:87:0;;;:::i;38773:240::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38773:240:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38773:240:0;;;;:::i;3495:29::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3495:29:0;;;:::i;38328:229::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38328:229:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38328:229:0;-1:-1:-1;;;;;38328:229:0;;:::i;5106:117::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5106:117:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5106:117:0;-1:-1:-1;;;;;5106:117:0;;:::i;29023:2478::-;29236:22;28808:7;;-1:-1:-1;;;28808:7:0;;;;28804:102;;;28832:28;;;-1:-1:-1;;;28832:28:0;;;;;;;;;;;;-1:-1:-1;;;28832:28:0;;;;;;;;;;;;;;28804:102;29298:8;;:37;;;-1:-1:-1;;;29298:37:0;;-1:-1:-1;;;;;29298:37:0;;;;;;;;;29271:24;;29298:8;;;;;:24;;:37;;;;;;;;;;;;;;;:8;:37;;;5:2:-1;;;;30:1;27;20:12;5:2;29298:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29298:37:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29298:37:0;29346:23;29384:8;;29298:37;;-1:-1:-1;29346:23:0;-1:-1:-1;;;29384:8:0;;;;:12;29380:337;;29488:8;;29431:105;;29462:35;;29475:11;;-1:-1:-1;;;29488:8:0;;;;29462:12;:35::i;:::-;29516:5;29431:12;:105::i;:::-;29640:16;;29413:123;;-1:-1:-1;29551:154:0;;-1:-1:-1;;;;;29551:41:0;;;;29611:10;;29640:16;29413:123;29551:154;:41;:154;:::i;:::-;29727:162;29783:10;29816:4;29836:42;29849:11;29862:15;29836:12;:42::i;:::-;-1:-1:-1;;;;;29727:41:0;;;:162;;;:41;:162;:::i;:::-;29947:8;;:85;;;-1:-1:-1;;;29947:85:0;;-1:-1:-1;;;;;29947:85:0;;;;;;;;;;;;;;;;29903:17;;;;29947:8;;;:26;;:85;;;;;;;;;;;;:8;:85;;;5:2:-1;;;;30:1;27;20:12;5:2;29947:85:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29947:85:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29947:85:0;;;;;;;;;-1:-1:-1;29947:85:0;-1:-1:-1;30045:1177:0;;;;30095:119;30124:11;30154;30184:15;30095:119;;:10;:119::i;:::-;30078:136;;30045:1177;;;30236:8;;:32;;;-1:-1:-1;;;30236:32:0;;-1:-1:-1;;;;;30236:32:0;;;;;;;;;:8;;;;;:19;;:32;;;;;;;;;;;;;;:8;:32;;;5:2:-1;;;;30:1;27;20:12;5:2;30236:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30236:32:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30236:32:0;30232:990;;;30285:28;;:::i;:::-;30316:8;;:35;;;-1:-1:-1;;;30316:35:0;;-1:-1:-1;;;;;30316:35:0;;;;;;;;;:8;;;;;:22;;:35;;;;;;;;;;;;;;:8;:35;;;5:2:-1;;;;30:1;27;20:12;5:2;30316:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30316:35:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13:3;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;30316:35:0;-1:-1:-1;30366:31:0;;30434:236;30445:1;30441;:5;;;30434:236;;;30476:8;;30521:1;;-1:-1:-1;;;;;30476:8:0;:18;30495:10;:13;;;;;;;;;;;;;;30476:33;;;;;;;;;;;;;-1:-1:-1;;;;;30476:33:0;-1:-1:-1;;;;;30476:33:0;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30476:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30476:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30476:33:0;-1:-1:-1;;;;;30476:47:0;;30472:183;;30574:8;;-1:-1:-1;;;;;30574:8:0;:18;30593:10;:13;;;;;;;;;;;;;;30574:33;;;;;;;;;;;;;-1:-1:-1;;;;;30574:33:0;-1:-1:-1;;;;;30574:33:0;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30574:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30574:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30574:33:0;;-1:-1:-1;30630:5:0;;30472:183;30448:3;;30434:236;;;30744:26;30773:105;30802:11;30832;30862:1;30773:105;;:10;:105::i;:::-;30744:134;;30977;31010:23;31052:18;31089:7;30977:14;:134::i;:::-;30960:151;;30232:990;;;;;;;31161:49;31176:11;31189;31202:7;31161:14;:49::i;:::-;31144:66;;30232:990;31260:11;31242:14;:29;;31234:55;;;;;-1:-1:-1;;;31234:55:0;;;;;;;;;;;;-1:-1:-1;;;31234:55:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;31304:21:0;;31300:194;;31342:48;31360:13;31375:14;31342:17;:48::i;:::-;31300:194;;;31423:59;-1:-1:-1;;;;;31423:28:0;;31452:13;31467:14;31423:59;:28;:59;:::i;:::-;28893:1;;;;29023:2478;;;;;;;:::o;39227:88::-;4212:9;:7;:9::i;:::-;4204:54;;;;;-1:-1:-1;;;4204:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4204:54:0;;;;;;;;;;;;;;;39300:7;;;-1:-1:-1;;;;39289:18:0;;-1:-1:-1;;;39300:7:0;;;;;;39299:8;39289:18;;;;;;39227:88::o;27908:85::-;;;-1:-1:-1;;;;;27908:85:0;;:::o;28291:30::-;;;-1:-1:-1;;;;;28291:30:0;;:::o;39385:96::-;4212:9;:7;:9::i;:::-;4204:54;;;;;-1:-1:-1;;;4204:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4204:54:0;;;;;;;;;;;;;;;39435:6;;;:38;;-1:-1:-1;;;;;39435:6:0;;;;;;;;;39451:21;39435:38;;;;;39451:21;;39435:38;:6;:38;39451:21;39435:6;:38;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;39435:38:0;39385:96::o;39489:285::-;4212:9;:7;:9::i;:::-;4204:54;;;;;-1:-1:-1;;;4204:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4204:54:0;;;;;;;;;;;;;;;39642:18;;-1:-1:-1;;;;;39623:37:0;;;39642:18;;39623:37;;39601:118;;;;;-1:-1:-1;;;39601:118:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;39730:18;:36;;-1:-1:-1;;;;;;39730:36:0;-1:-1:-1;;;;;39730:36:0;;;;;;;;;;39489:285::o;38565:200::-;4212:9;:7;:9::i;:::-;4204:54;;;;;-1:-1:-1;;;4204:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4204:54:0;;;;;;;;;;;;;;;38661:38;;;-1:-1:-1;;;38661:38:0;;38693:4;38661:38;;;;;;38647:11;;-1:-1:-1;;;;;38661:23:0;;;;;:38;;;;;;;;;;;;;;;:23;:38;;;5:2:-1;;;;30:1;27;20:12;5:2;38661:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38661:38:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38661:38:0;38745:6;;38661:38;;-1:-1:-1;38710:47:0;;-1:-1:-1;;;;;38710:34:0;;;;38745:6;;;;38661:38;38710:47;:34;:47;:::i;:::-;4269:1;38565:200;:::o;27875:26::-;;;-1:-1:-1;;;27875:26:0;;;;;:::o;4811:140::-;4212:9;:7;:9::i;:::-;4204:54;;;;;-1:-1:-1;;;4204:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4204:54:0;;;;;;;;;;;;;;;4910:1;4894:6;;4873:40;;4894:6;;;;-1:-1:-1;;;;;4894:6:0;;4873:40;;4910:1;;4873:40;4941:1;4924:19;;-1:-1:-1;;;;;;4924:19:0;;;4811:140::o;27841:27::-;;;-1:-1:-1;;;27841:27:0;;;;;:::o;39021:166::-;4212:9;:7;:9::i;:::-;4204:54;;;;;-1:-1:-1;;;4204:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4204:54:0;;;;;;;;;;;;;;;39139:16;:40;;-1:-1:-1;;;;;;39139:40:0;-1:-1:-1;;;;;39139:40:0;;;;;;;;;;39021:166::o;4000:79::-;4038:7;4065:6;;;;-1:-1:-1;;;;;4065:6:0;;4000:79::o;4366:94::-;4406:4;4446:6;;;;;-1:-1:-1;;;;;4446:6:0;4430:12;:10;:12::i;:::-;-1:-1:-1;;;;;4430:22:0;;4423:29;;4366:94;:::o;28520:87::-;;;-1:-1:-1;;;;;28520:87:0;;:::o;38773:240::-;4212:9;:7;:9::i;:::-;4204:54;;;;;-1:-1:-1;;;4204:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4204:54:0;;;;;;;;;;;;;;;38911:5;38895:13;:21;;;38851:119;;;;;-1:-1:-1;;;38851:119:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;38981:8;:24;;;;;;-1:-1:-1;;;38981:24:0;-1:-1:-1;;;;38981:24:0;;;;;;;;;38773:240::o;3495:29::-;;;;;;-1:-1:-1;;;;;3495:29:0;;:::o;38328:229::-;4212:9;:7;:9::i;:::-;4204:54;;;;;-1:-1:-1;;;4204:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4204:54:0;;;;;;;;;;;;;;;38471:8;;-1:-1:-1;;;;;38451:28:0;;;38471:8;;38451:28;;38443:68;;;;;-1:-1:-1;;;38443:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;38522:8;:27;;-1:-1:-1;;;;;;38522:27:0;-1:-1:-1;;;;;38522:27:0;;;;;;;;;;38328:229::o;5106:117::-;4212:9;:7;:9::i;:::-;4204:54;;;;;-1:-1:-1;;;4204:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4204:54:0;;;;;;;;;;;;;;;5187:28;5206:8;5187:18;:28::i;7909:471::-;7967:7;8212:6;8208:47;;-1:-1:-1;8242:1:0;8235:8;;8208:47;8279:5;;;8283:1;8279;:5;:1;8303:5;;;;;:10;8295:56;;;;-1:-1:-1;;;8295:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8371:1;-1:-1:-1;7909:471:0;;;;;:::o;8848:132::-;8906:7;8933:39;8937:1;8940;8933:39;;;;;;;;;;;;;;;;;:3;:39::i;20428:284::-;20625:68;;;-1:-1:-1;;;;;20625:68:0;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;20625:68:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;20572:132:0;;20605:5;;20572:18;:132::i;:::-;20428:284;;;;:::o;6959:136::-;7017:7;7044:43;7048:1;7051;7044:43;;;;;;;;;;;;;;;;;:3;:43::i;32865:777::-;33056:8;;:35;;;-1:-1:-1;;;33056:35:0;;-1:-1:-1;;;;;33056:35:0;;;;;;;;;32994:22;;;;33056:8;;:22;;:35;;;;;;;;;;;;;;:8;:35;;;5:2:-1;;;;30:1;27;20:12;5:2;33056:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33056:35:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13:3;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;33092:5:0;33056:42;;;;;;;;;;;33029:69;;33109:19;33138:16;-1:-1:-1;;;;;33131:34:0;;33174:4;33131:49;;;;;;;;;;;;;-1:-1:-1;;;;;33131:49:0;-1:-1:-1;;;;;33131:49:0;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33131:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33131:49:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;33131:49:0;33216:8;;:37;;;-1:-1:-1;;;33216:37:0;;-1:-1:-1;;;;;33216:37:0;;;;;;;;;33131:49;;-1:-1:-1;33193:20:0;;33216:8;;;;;:24;;:37;;;;;33131:49;;33216:37;;;;;;;:8;:37;;;5:2:-1;;;;30:1;27;20:12;5:2;33216:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33216:37:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;33216:37:0;;-1:-1:-1;33264:48:0;-1:-1:-1;;;;;33264:32:0;;33297:11;33310:1;33264:48;:32;:48;:::i;:::-;33323:58;-1:-1:-1;;;;;33323:32:0;;33356:11;33369;33323:58;:32;:58;:::i;:::-;33392:130;;;-1:-1:-1;;;33392:130:0;;;;;;;;;;;;;;;;;;33510:1;33392:130;;;;;;;;-1:-1:-1;;;;;33392:49:0;;;;;:130;;;;;;;;;;;33510:1;33392:49;:130;;;5:2:-1;;;;30:1;27;20:12;5:2;33392:130:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;33553:49:0;;;-1:-1:-1;;;33553:49:0;;33596:4;33553:49;;;;;;33552:82;;-1:-1:-1;33622:11:0;;-1:-1:-1;;;;;;33553:34:0;;;;;:49;;;;;;;;;;;;;;:34;:49;;;5:2:-1;;;;30:1;27;20:12;5:2;33553:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33553:49:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;33553:49:0;;33552:82;:69;:82;:::i;:::-;33535:99;32865:777;-1:-1:-1;;;;;;;32865:777:0:o;31509:1348::-;31683:8;;:31;;;-1:-1:-1;;;31683:31:0;;-1:-1:-1;;;;;31683:31:0;;;;;;;;;31644:22;;31683:8;;;;;:18;;:31;;;;;;;;;;;;;;;:8;:31;;;5:2:-1;;;;30:1;27;20:12;5:2;31683:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31683:31:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31683:31:0;31679:1171;;;31753:8;;:99;;;-1:-1:-1;;;31753:99:0;;-1:-1:-1;;;;;31753:99:0;;;;;;;28471:42;31753:99;;;;;;31734:15;;31753:8;;;;;:26;;:99;;;;;;;;;;;:8;:99;;;5:2:-1;;;;30:1;27;20:12;5:2;31753:99:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31753:99:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31753:99:0;;;;-1:-1:-1;31867:26:0;31896:113;31925:11;31955;31896:113;;;:10;:113::i;:::-;31867:142;;32043:118;28471:42;32102:7;32128:18;32043:12;:118::i;:::-;32026:135;;31679:1171;;;;;32308:8;;32348:18;;32308:59;;;-1:-1:-1;;;32308:59:0;;-1:-1:-1;;;;;32308:59:0;;;;;;;32348:18;;;32308:59;;;;;;32213:29;;;;32308:8;;:26;;:59;;;;;;;;;;;:8;:59;;;5:2:-1;;;;30:1;27;20:12;5:2;32308:59:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32308:59:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32308:59:0;;;;;;;;;-1:-1:-1;32308:59:0;-1:-1:-1;32308:59:0;32384:120;;;;-1:-1:-1;;;32384:120:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32521:26;32550:127;32579:11;32609;32639:23;32550:127;;:10;:127::i;:::-;32742:18;;32521:156;;-1:-1:-1;32711:127:0;;-1:-1:-1;;;;;32742:18:0;32779:7;32521:156;32711:12;:127::i;31679:1171::-;31509:1348;;;;;:::o;19074:445::-;19203:6;19178:21;:31;;19156:110;;;;;-1:-1:-1;;;19156:110:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19353:32;;19335:12;;-1:-1:-1;;;;;19353:14:0;;;19374:6;;19335:12;19353:32;19335:12;19353:32;19374:6;19353:14;:32;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;19334:51:0;;;19418:7;19396:115;;;;-1:-1:-1;;;19396:115:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19074:445;;;:::o;20173:247::-;20343:58;;;-1:-1:-1;;;;;20343:58:0;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;20343:58:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;20290:122:0;;20323:5;;20290:18;:122::i;2692:98::-;2772:10;2692:98;:::o;5329:274::-;-1:-1:-1;;;;;5425:22:0;;5403:110;;;;-1:-1:-1;;;5403:110:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5550:6;;;5529:38;;-1:-1:-1;;;;;5529:38:0;;;;5550:6;;;;;;5529:38;;;5578:6;:17;;-1:-1:-1;;;;;5578:17:0;;;;;-1:-1:-1;;;;;;5578:17:0;;;;;;;;;5329:274::o;9510:379::-;9630:7;9732:12;9725:5;9717:28;;;;-1:-1:-1;;;9717:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;9717:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9756:9;9772:1;9768;:5;;;;;;;9510:379;-1:-1:-1;;;;;9510:379:0:o;22783:1176::-;23387:27;23395:5;-1:-1:-1;;;;;23387:25:0;;:27::i;:::-;23379:71;;;;;-1:-1:-1;;;23379:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;23524:12;23538:23;23573:5;-1:-1:-1;;;;;23565:19:0;23585:4;23565:25;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;23565:25:0;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;23523:67:0;;;;23609:7;23601:52;;;;;-1:-1:-1;;;23601:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23670:17;;:21;23666:286;;23843:10;23832:30;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23832:30:0;23806:134;;;;-1:-1:-1;;;23806:134:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7432:226;7552:7;7588:12;7580:6;;;;7572:29;;;;-1:-1:-1;;;7572:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;7572:29:0;-1:-1:-1;;;7624:5:0;;;7432:226::o;20720:706::-;21138:10;;;21137:62;;-1:-1:-1;21154:39:0;;;-1:-1:-1;;;21154:39:0;;21178:4;21154:39;;;;-1:-1:-1;;;;;21154:39:0;;;;;;;;;:15;;;;;;:39;;;;;;;;;;;;;;;:15;:39;;;5:2:-1;;;;30:1;27;20:12;5:2;21154:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21154:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21154:39:0;:44;21137:62;21115:166;;;;-1:-1:-1;;;21115:166:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21345:62;;;-1:-1:-1;;;;;21345:62:0;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;21345:62:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;21292:126:0;;21325:5;;21292:18;:126::i;33976:4344::-;34108:19;34157:7;-1:-1:-1;;;;;34144:20:0;:9;-1:-1:-1;;;;;34144:20:0;;34140:72;;;-1:-1:-1;34188:12:0;34181:19;;34140:72;-1:-1:-1;;;;;34228:23:0;;34224:4029;;-1:-1:-1;;;;;34272:20:0;;28376:42;34272:20;34268:145;;;28376:42;-1:-1:-1;;;;;34313:24:0;;34344:12;34313:46;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34313:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34313:46:0;;;;;34385:12;34378:19;;;;34268:145;34453:16;;;34467:1;34453:16;;;34429:21;34453:16;;;;;34429:21;34453:16;;;;;105:10:-1;34453:16:0;88:34:-1;136:17;;-1:-1;34453:16:0;34429:40;;28376:42;34484:4;34489:1;34484:7;;;;;;;;;;;;;:19;-1:-1:-1;;;;;34484:19:0;;;-1:-1:-1;;;;;34484:19:0;;;;;34528:7;34518:4;34523:1;34518:7;;;;;;;;-1:-1:-1;;;;;34518:17:0;;;:7;;;;;;;;;;:17;34564:121;;-1:-1:-1;;;34564:121:0;;34652:1;34564:121;;;;;;34669:4;34564:121;;;;;;-1:-1:-1;;;34564:121:0;;;;;;;;;;;;;;;;;;;;;28233:42;;34564:35;;34624:12;;34652:1;34655:4;;34669;28659:66;34564:121;;;;;;;;;;;;;;;;;-1:-1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;34564:121:0;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34564:121:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34564:121:0;;;;;;;39:16:-1;36:1;17:17;2:54;101:4;34564:121:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;13:2;5:11;;2:2;;;29:1;26;19:12;2:2;34564:121:0;;;;;;;;;;;;;-1:-1:-1;;;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1;;;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;373:25;;-1:-1;34564:121:0;;421:4:-1;412:14;;;;34564:121:0;;;;;412:14:-1;34564:121:0;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;34564:121:0;;;;;;;;;;;34700:1;34686:4;:11;:15;34564:138;;;;;;;;;;;;;;34550:152;;34224:4029;;;;-1:-1:-1;;;;;34724:21:0;;34720:3533;;-1:-1:-1;;;;;34766:22:0;;28376:42;34766:22;34762:140;;;28376:42;-1:-1:-1;;;;;34809:25:0;;34835:12;34809:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34809:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34809:39:0;;;;34874:12;34867:19;;;;34762:140;34918:67;-1:-1:-1;;;;;34918:29:0;;28233:42;34972:12;34918:67;:29;:67;:::i;:::-;35026:16;;;35040:1;35026:16;;;35002:21;35026:16;;;;;35002:21;35026:16;;;;;105:10:-1;35026:16:0;88:34:-1;136:17;;-1:-1;35026:16:0;35002:40;;35067:9;35057:4;35062:1;35057:7;;;;;;;;;;;;;:19;-1:-1:-1;;;;;35057:19:0;;;-1:-1:-1;;;;;35057:19:0;;;;;28376:42;35091:4;35096:1;35091:7;;;;;;;;-1:-1:-1;;;;;35091:19:0;;;:7;;;;;;;;;;:19;35139:183;;-1:-1:-1;;;35139:183:0;;;;;;;;35224:1;35139:183;;;;;;35275:4;35139:183;;;;;;-1:-1:-1;;;35139:183:0;;;;;;;;;;;;;;;;;;;;;28233:42;;35139:35;;35193:12;;35244:4;;35275;28659:66;35139:183;;;;;;;;;;;;;;;;;-1:-1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;35139:183:0;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35139:183:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35139:183:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;35139:183:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;13:2;5:11;;2:2;;;29:1;26;19:12;34720:3533:0;35372:67;-1:-1:-1;;;;;35372:29:0;;28233:42;35426:12;35372:67;:29;:67;:::i;:::-;-1:-1:-1;;;;;35460:22:0;;28376:42;35460:22;35456:2786;;-1:-1:-1;;;;;35507:20:0;;28376:42;35507:20;35503:2309;;35626:124;;;-1:-1:-1;;;35626:124:0;;-1:-1:-1;;;;;35626:124:0;;;;;;;;;;;;;;;35610:13;;28100:42;;35626:31;;:124;;;;;;;;;;;;;;;28100:42;35626:124;;;5:2:-1;;;;30:1;27;20:12;5:2;35626:124:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35626:124:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;35626:124:0;35798:16;;;35812:1;35798:16;;;35773:22;35798:16;;;;;35626:124;;-1:-1:-1;35798:16:0;;;;;;;105:10:-1;35798:16:0;88:34:-1;136:17;;-1:-1;35798:16:0;35773:41;;35848:9;35837:5;35843:1;35837:8;;;;;;;;;;;;;:20;-1:-1:-1;;;;;35837:20:0;;;-1:-1:-1;;;;;35837:20:0;;;;;35891:7;35880:5;35886:1;35880:8;;;;;;;;-1:-1:-1;;;;;35880:18:0;;;:8;;;;;;;;;:18;35921:12;;35960:19;;;35956:219;;36015:133;;;-1:-1:-1;;;36015:133:0;;;;;;;;;;;;;;;;;;;;;;28233:42;;36015:27;;36073:12;;36116:5;;36015:133;;;;;;;;;;;;;;;-1:-1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;36015:133:0;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36015:133:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36015:133:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;36015:133:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;13:2;5:11;;2:2;;;29:1;26;19:12;2:2;36015:133:0;;;;;;;;;;;;;-1:-1:-1;;;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1;;;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;373:25;;-1:-1;36015:133:0;;421:4:-1;412:14;;;;36015:133:0;;;;;412:14:-1;36015:133:0;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;36015:133:0;;;;;;;;;;;36149:1;36015:136;;;;;;;;;;;;;;36008:143;;35956:219;36290:16;;;36304:1;36290:16;;;;;;;;;36265:22;;36290:16;;;36265:22;;105:10:-1;36290:16:0;88:34:-1;136:17;;-1:-1;36290:16:0;36265:41;;36340:9;36329:5;36335:1;36329:8;;;;;;;;;;;;;:20;-1:-1:-1;;;;;36329:20:0;;;-1:-1:-1;;;;;36329:20:0;;;;;28376:42;36372:5;36378:1;36372:8;;;;;;;;;;;;;:20;-1:-1:-1;;;;;36372:20:0;;;-1:-1:-1;;;;;36372:20:0;;;;;36426:7;36415:5;36421:1;36415:8;;;;;;;;-1:-1:-1;;;;;36415:18:0;;;:8;;;;;;;;;;:18;36473:121;;;-1:-1:-1;;;36473:121:0;;;;;;;;;;;;;;;;;;;;;;36458:12;;28233:42;;36473:27;;36527:12;;36566:5;;36473:121;;;;;;;;;;;;;;;36458:12;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;36473:121:0;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36473:121:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36473:121:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;36473:121:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;13:2;5:11;;2:2;;;29:1;26;19:12;2:2;36473:121:0;;;;;;;;;;;;;-1:-1:-1;;;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1;;;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;373:25;;-1:-1;36473:121:0;;421:4:-1;412:14;;;;36473:121:0;;;;;412:14:-1;36473:121:0;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;36473:121:0;;;;;;;;;;;36595:1;36473:124;;;;;;;;;;;;;;36458:139;;36634:4;36626;:12;36622:708;;28233:42;-1:-1:-1;;;;;36681:38:0;;36750:12;36793:1;36825:5;36869:4;-1:-1:-1;;;36681:259:0;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36681:259:0;-1:-1:-1;;;;;36681:259:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;36681:259:0;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36681:259:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36681:259:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;36681:259:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;13:2;5:11;;2:2;;;29:1;26;19:12;2:2;36681:259:0;;;;;;;;;;;;;-1:-1:-1;;;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1;;;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;373:25;;-1:-1;36681:259:0;;421:4:-1;412:14;;;;36681:259:0;;;;;412:14:-1;36681:259:0;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;36681:259:0;;;;;;;;;;;36956:1;36941:5;:12;:16;36681:277;;;;;;;;;;;;;;36667:291;;36622:708;;;28233:42;-1:-1:-1;;;;;37029:38:0;;37098:12;37141:1;37173:5;37217:4;-1:-1:-1;;;37029:259:0;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37029:259:0;-1:-1:-1;;;;;37029:259:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;37029:259:0;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37029:259:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37029:259:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;37029:259:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;13:2;5:11;;2:2;;;29:1;26;19:12;2:2;37029:259:0;;;;;;;;;;;;;-1:-1:-1;;;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1;;;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;373:25;;-1:-1;37029:259:0;;421:4:-1;412:14;;;;37029:259:0;;;;;412:14:-1;37029:259:0;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;37029:259:0;;;;;;;;;;;37304:1;37289:5;:12;:16;37029:277;;;;;;;;;;;;;;37015:291;;36622:708;35503:2309;;;;;;;;37402:16;;;37416:1;37402:16;;;37378:21;37402:16;;;;;37378:21;37402:16;;;;;105:10:-1;37402:16:0;88:34:-1;136:17;;-1:-1;37402:16:0;37378:40;;37451:9;37441:4;37446:1;37441:7;;;;;;;;;;;;;:19;-1:-1:-1;;;;;37441:19:0;;;-1:-1:-1;;;;;37441:19:0;;;;;28376:42;37483:4;37488:1;37483:7;;;;;;;;-1:-1:-1;;;;;37483:19:0;;;;:7;;;;;;;;;;:19;37541:234;;-1:-1:-1;;;37541:234:0;;;;;;;;37645:1;37541:234;;;;;;37712:4;37541:234;;;;;;-1:-1:-1;;;37541:234:0;;;;;;;;;;;;;;;;;;;;;28233:42;;37541:38;;:234;;;;37712:4;28659:66;37541:234;;;;;;;;;;;;;;;;;-1:-1:-1;27:10;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;35503:2309:0;35456:2786;;;37876:16;;;37890:1;37876:16;;;37852:21;37876:16;;;;;37852:21;37876:16;;;;;105:10:-1;37876:16:0;88:34:-1;136:17;;-1:-1;37876:16:0;37852:40;;28376:42;37911:4;37916:1;37911:7;;;;;;;;;;;;;:19;-1:-1:-1;;;;;37911:19:0;;;-1:-1:-1;;;;;37911:19:0;;;;;37959:7;37949:4;37954:1;37949:7;;;;;;;;-1:-1:-1;;;;;37949:17:0;;;:7;;;;;;;;;;:17;37999:210;;-1:-1:-1;;;37999:210:0;;;;;;;;38095:1;37999:210;;;;;;38154:4;37999:210;;;;;;-1:-1:-1;;;37999:210:0;;;;;;;;;;;;;;;;;;;;;28233:42;;37999:38;;38060:12;;38119:4;;38154;28659:66;37999:210;;;;;;;;;;;;;;;;;-1:-1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;37999:210:0;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37999:210:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37999:210:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;37999:210:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;13:2;5:11;;2:2;;;29:1;26;19:12;2:2;37999:210:0;;;;;;;;;;;;;-1:-1:-1;;;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1;;;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;373:25;;-1:-1;37999:210:0;;421:4:-1;412:14;;;;37999:210:0;;;;;412:14:-1;37999:210:0;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;37999:210:0;;;;;;;;;;;38224:1;38210:4;:11;:15;37999:227;;;;;;;;;;;;;;37985:241;;35456:2786;;38285:1;38271:11;:15;38263:49;;;;;-1:-1:-1;;;38263:49:0;;;;;;;;;;;;-1:-1:-1;;;38263:49:0;;;;;;;;;;;;;;17062:659;17122:4;17621:20;;17451:66;17670:23;;;;;;:42;;-1:-1:-1;17697:15:0;;;17670:42;17662:51;17062:659;-1:-1:-1;;;;17062:659:0:o;27705:12187::-;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;-1:-1;27705:12187:0;;;-1:-1:-1;;27705:12187:0:o
Swarm Source
bzzr://1eeb7c42ac798aa401a6f55b00bfb50efe756275256bc1adbe61f3f516e656a5
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ 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.