More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 2,772 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Zap Out With Per... | 13441531 | 1219 days ago | IN | 0 ETH | 0.00205182 | ||||
Renounce Ownersh... | 12654921 | 1341 days ago | IN | 0 ETH | 0.00039442 | ||||
Toggle Contract ... | 12501152 | 1365 days ago | IN | 0 ETH | 0.00122268 | ||||
Zap Out With Per... | 12500857 | 1365 days ago | IN | 0 ETH | 0.03004061 | ||||
Zap Out2Pair Tok... | 12500687 | 1365 days ago | IN | 0 ETH | 0.01033216 | ||||
Zap Out | 12500597 | 1365 days ago | IN | 0 ETH | 0.01263564 | ||||
Zap Out2Pair Tok... | 12500407 | 1365 days ago | IN | 0 ETH | 0.00964435 | ||||
Zap Out With Per... | 12500364 | 1365 days ago | IN | 0 ETH | 0.01568061 | ||||
Zap Out2Pair Tok... | 12500269 | 1365 days ago | IN | 0 ETH | 0.00911274 | ||||
Zap Out With Per... | 12499932 | 1365 days ago | IN | 0 ETH | 0.0159618 | ||||
Zap Out | 12499888 | 1365 days ago | IN | 0 ETH | 0.05056942 | ||||
Zap Out | 12499837 | 1365 days ago | IN | 0 ETH | 0.04417869 | ||||
Zap Out | 12499720 | 1365 days ago | IN | 0 ETH | 0.02668646 | ||||
Zap Out | 12499718 | 1365 days ago | IN | 0 ETH | 0.01934235 | ||||
Zap Out | 12499479 | 1365 days ago | IN | 0 ETH | 0.01642819 | ||||
Zap Out With Per... | 12499455 | 1365 days ago | IN | 0 ETH | 0.03428183 | ||||
Zap Out2Pair Tok... | 12499313 | 1365 days ago | IN | 0 ETH | 0.01373738 | ||||
Zap Out | 12499193 | 1365 days ago | IN | 0 ETH | 0.02711655 | ||||
Zap Out With Per... | 12499023 | 1365 days ago | IN | 0 ETH | 0.04477444 | ||||
Zap Out With Per... | 12499017 | 1365 days ago | IN | 0 ETH | 0.05956674 | ||||
Zap Out With Per... | 12498970 | 1365 days ago | IN | 0 ETH | 0.06070003 | ||||
Zap Out With Per... | 12498338 | 1365 days ago | IN | 0 ETH | 0.01880634 | ||||
Zap Out With Per... | 12498101 | 1365 days ago | IN | 0 ETH | 0.03192998 | ||||
Zap Out With Per... | 12498082 | 1365 days ago | IN | 0 ETH | 0.03776391 | ||||
Zap Out With Per... | 12497802 | 1366 days ago | IN | 0 ETH | 0.01976961 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
12500857 | 1365 days ago | 46.77277048 ETH | ||||
12500857 | 1365 days ago | 23.60432539 ETH | ||||
12500857 | 1365 days ago | 23.16844509 ETH | ||||
12500687 | 1365 days ago | 4.48294072 ETH | ||||
12500687 | 1365 days ago | 4.48294072 ETH | ||||
12500597 | 1365 days ago | 0.70743025 ETH | ||||
12500597 | 1365 days ago | 0.35424714 ETH | ||||
12500597 | 1365 days ago | 0.35318311 ETH | ||||
12500407 | 1365 days ago | 0.1711846 ETH | ||||
12500407 | 1365 days ago | 0.1711846 ETH | ||||
12500364 | 1365 days ago | 1.10399371 ETH | ||||
12500364 | 1365 days ago | 0.55285395 ETH | ||||
12500364 | 1365 days ago | 0.55113976 ETH | ||||
12500269 | 1365 days ago | 3.27285984 ETH | ||||
12500269 | 1365 days ago | 3.27285984 ETH | ||||
12499932 | 1365 days ago | 0.20001999 ETH | ||||
12499932 | 1365 days ago | 0.10015578 ETH | ||||
12499932 | 1365 days ago | 0.09986421 ETH | ||||
12499718 | 1365 days ago | 1.61265992 ETH | ||||
12499718 | 1365 days ago | 0.80586292 ETH | ||||
12499718 | 1365 days ago | 0.806797 ETH | ||||
12499479 | 1365 days ago | 4.92756407 ETH | ||||
12499479 | 1365 days ago | 2.47200852 ETH | ||||
12499479 | 1365 days ago | 2.45555554 ETH | ||||
12499313 | 1365 days ago | 1.37735483 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Sushiswap_ZapOut_General_V2
Compiler Version
v0.5.17+commit.d19bba13
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-03-05 */ // ███████╗░█████╗░██████╗░██████╗░███████╗██████╗░░░░███████╗██╗ // ╚════██║██╔══██╗██╔══██╗██╔══██╗██╔════╝██╔══██╗░░░██╔════╝██║ // ░░███╔═╝███████║██████╔╝██████╔╝█████╗░░██████╔╝░░░█████╗░░██║ // ██╔══╝░░██╔══██║██╔═══╝░██╔═══╝░██╔══╝░░██╔══██╗░░░██╔══╝░░██║ // ███████╗██║░░██║██║░░░░░██║░░░░░███████╗██║░░██║██╗██║░░░░░██║ // ╚══════╝╚═╝░░╚═╝╚═╝░░░░░╚═╝░░░░░╚══════╝╚═╝░░╚═╝╚═╝╚═╝░░░░░╚═╝ // Copyright (C) 2021 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. // // Visit <https://www.gnu.org/licenses/>for a copy of the GNU Affero General Public License ///@author Zapper ///@notice this contract implements one click removal of liquidity from Sushiswap pools, receiving ETH, ERC tokens or both. pragma solidity ^0.5.7; /** * @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: @openzeppelin/contracts/GSN/Context.sol pragma solidity ^0.5.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with 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: @openzeppelin/contracts/ownership/Ownable.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 private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() internal { address 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 newOwner) public onlyOwner { _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). */ function _transferOwnership(address newOwner) internal { require( newOwner != address(0), "Ownable: new owner is the zero address" ); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File: @openzeppelin/contracts/token/ERC20/IERC20.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: @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/utils/ReentrancyGuard.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. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. * * _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/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 IUniswapV2Router02 { function WETH() external pure returns (address); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); } interface IUniswapV2Pair { function token0() external pure returns (address); function token1() external pure returns (address); function totalSupply() external view returns (uint256); function getReserves() external view returns ( uint112 _reserve0, uint112 _reserve1, uint32 _blockTimestampLast ); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; } interface IWETH { function withdraw(uint256 wad) external; } contract Sushiswap_ZapOut_General_V2 is ReentrancyGuard, Ownable { using SafeMath for uint256; using SafeERC20 for IERC20; using Address for address; bool public stopped = false; uint256 public goodwill; // if true, goodwill is not deducted mapping(address => bool) public feeWhitelist; // % share of goodwill (0-100 %) uint256 affiliateSplit; // restrict affiliates mapping(address => bool) public affiliates; // affiliate => token => amount mapping(address => mapping(address => uint256)) public affiliateBalance; // token => amount mapping(address => uint256) public totalAffiliateBalance; address private constant ETHAddress = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; uint256 private constant deadline = 0xf000000000000000000000000000000000000000000000000000000000000000; // sushiSwap IUniswapV2Router02 private constant sushiSwapRouter = IUniswapV2Router02( 0xd9e1cE17f2641f24aE83637ab66a2cca9C378B9F ); address private constant wethTokenAddress = address( 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 ); constructor(uint256 _goodwill, uint256 _affiliateSplit) public { goodwill = _goodwill; affiliateSplit = _affiliateSplit; } // circuit breaker modifiers modifier stopInEmergency { if (stopped) { revert("Temporarily Paused"); } else { _; } } event zapOut( address sender, address pool, address token, uint256 tokensRec ); /** @notice Zap out in a single token with permit @param ToTokenContractAddress Address of desired token @param FromSushiPoolAddress Pool from which to remove liquidity @param IncomingLP Quantity of LP to remove from pool @param minTokensRec Minimum quantity of tokens to receive @param permitData Encoded permit data, which contains owner, spender, value, deadline, r,s,v values @param swapTargets Execution targets for swaps @param swap1Data DEX swap data @param swap2Data DEX swap data @param affiliate Affiliate address */ function ZapOutWithPermit( address ToTokenContractAddress, address FromSushiPoolAddress, uint256 IncomingLP, uint256 minTokensRec, bytes calldata permitData, address[] calldata swapTargets, bytes calldata swap1Data, bytes calldata swap2Data, address affiliate ) external stopInEmergency returns (uint256) { // permit (bool success, ) = FromSushiPoolAddress.call(permitData); require(success, "Could Not Permit"); return ( ZapOut( ToTokenContractAddress, FromSushiPoolAddress, IncomingLP, minTokensRec, swapTargets, swap1Data, swap2Data, affiliate ) ); } /** @notice Zap out in both tokens with permit @param FromSushiPoolAddress Pool from which to remove liquidity @param IncomingLP Quantity of LP to remove from pool @param affiliate Affiliate address to share fees @param permitData Encoded permit data, which contains owner, spender, value, deadline, r,s,v values @return amountA, amountB - Quantity of tokens received */ function ZapOut2PairTokenWithPermit( address FromSushiPoolAddress, uint256 IncomingLP, address affiliate, bytes calldata permitData ) external stopInEmergency returns (uint256 amountA, uint256 amountB) { // permit (bool success, ) = FromSushiPoolAddress.call(permitData); require(success, "Could Not Permit"); (amountA, amountB) = ZapOut2PairToken( FromSushiPoolAddress, IncomingLP, affiliate ); } /** @notice Zap out in both tokens with permit @param FromSushiPoolAddress Pool from which to remove liquidity @param IncomingLP Quantity of LP to remove from pool @param affiliate Affiliate address to share fees @return amountA, amountB - Quantity of tokens received */ function ZapOut2PairToken( address FromSushiPoolAddress, uint256 IncomingLP, address affiliate ) public nonReentrant stopInEmergency returns (uint256 amountA, uint256 amountB) { IUniswapV2Pair pair = IUniswapV2Pair(FromSushiPoolAddress); require( address(pair) != address(0), "Error: Invalid Sushipool Address" ); //get reserves address token0 = pair.token0(); address token1 = pair.token1(); IERC20 sushiPool = IERC20(FromSushiPoolAddress); sushiPool.safeTransferFrom(msg.sender, address(this), IncomingLP); sushiPool.safeApprove(address(sushiSwapRouter), IncomingLP); if (token0 == wethTokenAddress || token1 == wethTokenAddress) { address _token = token0 == wethTokenAddress ? token1 : token0; (amountA, amountB) = sushiSwapRouter.removeLiquidityETH( _token, IncomingLP, 1, 1, address(this), deadline ); // subtract goodwill uint256 tokenGoodwill = _subtractGoodwill( _token, amountA, affiliate ); uint256 ethGoodwill = _subtractGoodwill( ETHAddress, amountB, affiliate ); // send tokens IERC20(_token).safeTransfer(msg.sender, amountA.sub(tokenGoodwill)); Address.sendValue(msg.sender, amountB.sub(ethGoodwill)); } else { (amountA, amountB) = sushiSwapRouter.removeLiquidity( token0, token1, IncomingLP, 1, 1, address(this), deadline ); // subtract goodwill uint256 tokenAGoodwill = _subtractGoodwill( token0, amountA, affiliate ); uint256 tokenBGoodwill = _subtractGoodwill( token1, amountB, affiliate ); // send tokens IERC20(token0).safeTransfer( msg.sender, amountA.sub(tokenAGoodwill) ); IERC20(token1).safeTransfer( msg.sender, amountB.sub(tokenBGoodwill) ); } emit zapOut(msg.sender, FromSushiPoolAddress, token0, amountA); emit zapOut(msg.sender, FromSushiPoolAddress, token1, amountB); } /** @notice Zap out in a single token @param ToTokenContractAddress Address of desired token @param FromSushiPoolAddress Pool from which to remove liquidity @param IncomingLP Quantity of LP to remove from pool @param minTokensRec Minimum quantity of tokens to receive @param swapTargets Execution targets for swaps @param swap1Data DEX swap data @param swap2Data DEX swap data @param affiliate Affiliate address */ function ZapOut( address ToTokenContractAddress, address FromSushiPoolAddress, uint256 IncomingLP, uint256 minTokensRec, address[] memory swapTargets, bytes memory swap1Data, bytes memory swap2Data, address affiliate ) public nonReentrant stopInEmergency returns (uint256 tokenBought) { (uint256 amountA, uint256 amountB) = _removeLiquidity( FromSushiPoolAddress, IncomingLP ); tokenBought = _swapTokens( FromSushiPoolAddress, amountA, amountB, ToTokenContractAddress, swapTargets, swap1Data, swap2Data ); require(tokenBought >= minTokensRec, "High slippage"); uint256 totalGoodwillPortion; if (ToTokenContractAddress == address(0)) { totalGoodwillPortion = _subtractGoodwill( ETHAddress, tokenBought, affiliate ); msg.sender.transfer(tokenBought.sub(totalGoodwillPortion)); } else { totalGoodwillPortion = _subtractGoodwill( ToTokenContractAddress, tokenBought, affiliate ); IERC20(ToTokenContractAddress).safeTransfer( msg.sender, tokenBought.sub(totalGoodwillPortion) ); } uint256 tokensRec = tokenBought.sub(totalGoodwillPortion); emit zapOut( msg.sender, FromSushiPoolAddress, ToTokenContractAddress, tokensRec ); return tokensRec; } function _removeLiquidity(address FromSushiPoolAddress, uint256 IncomingLP) internal returns (uint256 amountA, uint256 amountB) { IUniswapV2Pair pair = IUniswapV2Pair(FromSushiPoolAddress); require( address(pair) != address(0), "Error: Invalid Sushipool Address" ); address token0 = pair.token0(); address token1 = pair.token1(); IERC20 sushiPool = IERC20(FromSushiPoolAddress); sushiPool.safeTransferFrom(msg.sender, address(this), IncomingLP); sushiPool.safeApprove(address(sushiSwapRouter), IncomingLP); (amountA, amountB) = sushiSwapRouter.removeLiquidity( token0, token1, IncomingLP, 1, 1, address(this), deadline ); require(amountA > 0 && amountB > 0, "Removed insufficient liquidity"); } function _swapTokens( address FromSushiPoolAddress, uint256 amountA, uint256 amountB, address toToken, address[] memory swapTargets, bytes memory swap1Data, bytes memory swap2Data ) internal returns (uint256 tokensBought) { address token0 = IUniswapV2Pair(FromSushiPoolAddress).token0(); address token1 = IUniswapV2Pair(FromSushiPoolAddress).token1(); //swap token0 to toToken if (token0 == toToken) { tokensBought = tokensBought.add(amountA); } else { //swap token using 0x swap tokensBought = tokensBought.add( _fillQuote(token0, toToken, amountA, swapTargets[0], swap1Data) ); } //swap token1 to toToken if (token1 == toToken) { tokensBought = tokensBought.add(amountB); } else { //swap token using 0x swap tokensBought = tokensBought.add( _fillQuote(token1, toToken, amountB, swapTargets[1], swap2Data) ); } } function _fillQuote( address fromTokenAddress, address toToken, uint256 amount, address swapTarget, bytes memory swapData ) internal returns (uint256) { uint256 valueToSend; if (fromTokenAddress == wethTokenAddress && toToken == address(0)) { IWETH(wethTokenAddress).withdraw(amount); return amount; } if (fromTokenAddress == address(0)) { valueToSend = amount; } else { IERC20 fromToken = IERC20(fromTokenAddress); fromToken.safeApprove(address(swapTarget), 0); fromToken.safeApprove(address(swapTarget), amount); } uint256 initialBalance = toToken == address(0) ? address(this).balance : IERC20(toToken).balanceOf(address(this)); (bool success, ) = swapTarget.call.value(valueToSend)(swapData); require(success, "Error Swapping Tokens"); uint256 finalBalance = toToken == address(0) ? (address(this).balance).sub(initialBalance) : IERC20(toToken).balanceOf(address(this)).sub(initialBalance); require(finalBalance > 0, "Swapped to Invalid Intermediate"); return finalBalance; } /** @notice Utility function to determine quantity and addresses of tokens being removed @param FromSushiPoolAddress Pool from which to remove liquidity @param liquidity Quantity of LP tokens to remove. @return amountA- amountB- Quantity of token0 and token1 removed @return token0- token1- Addresses of the underlying tokens to be removed */ function removeLiquidityReturn( address FromSushiPoolAddress, uint256 liquidity ) external view returns ( uint256 amountA, uint256 amountB, address token0, address token1 ) { IUniswapV2Pair pair = IUniswapV2Pair(FromSushiPoolAddress); token0 = pair.token0(); token1 = pair.token1(); uint256 balance0 = IERC20(token0).balanceOf(FromSushiPoolAddress); uint256 balance1 = IERC20(token1).balanceOf(FromSushiPoolAddress); uint256 _totalSupply = pair.totalSupply(); amountA = liquidity.mul(balance0) / _totalSupply; amountB = liquidity.mul(balance1) / _totalSupply; } function _subtractGoodwill( address token, uint256 amount, address affiliate ) internal returns (uint256 totalGoodwillPortion) { bool whitelisted = feeWhitelist[msg.sender]; if (!whitelisted && goodwill > 0) { totalGoodwillPortion = SafeMath.div( SafeMath.mul(amount, goodwill), 10000 ); if (affiliates[affiliate]) { uint256 affiliatePortion = totalGoodwillPortion .mul(affiliateSplit) .div(100); affiliateBalance[affiliate][token] = affiliateBalance[affiliate][token] .add(affiliatePortion); totalAffiliateBalance[token] = totalAffiliateBalance[token].add( affiliatePortion ); } } } // - to Pause the contract function toggleContractActive() public onlyOwner { stopped = !stopped; } function set_new_goodwill(uint256 new_goodwill) public onlyOwner { require( new_goodwill >= 0 && new_goodwill <= 100, "GoodWill Value not allowed" ); goodwill = new_goodwill; } function set_feeWhitelist(address zapAddress, bool status) external onlyOwner { feeWhitelist[zapAddress] = status; } function set_new_affiliateSplit(uint256 new_affiliateSplit) external onlyOwner { require(new_affiliateSplit <= 100, "Affiliate Split Value not allowed"); affiliateSplit = new_affiliateSplit; } function set_affiliate(address affiliate, bool status) external onlyOwner { affiliates[affiliate] = status; } ///@notice Withdraw goodwill share, retaining affilliate share function withdrawTokens(address[] calldata tokens) external onlyOwner { for (uint256 i = 0; i < tokens.length; i++) { uint256 qty; if (tokens[i] == ETHAddress) { qty = address(this).balance.sub( totalAffiliateBalance[tokens[i]] ); Address.sendValue(Address.toPayable(owner()), qty); } else { qty = IERC20(tokens[i]).balanceOf(address(this)).sub( totalAffiliateBalance[tokens[i]] ); IERC20(tokens[i]).safeTransfer(owner(), qty); } } } ///@notice Withdraw affilliate share, retaining goodwill share function affilliateWithdraw(address[] calldata tokens) external { uint256 tokenBal; for (uint256 i = 0; i < tokens.length; i++) { tokenBal = affiliateBalance[msg.sender][tokens[i]]; affiliateBalance[msg.sender][tokens[i]] = 0; totalAffiliateBalance[tokens[i]] = totalAffiliateBalance[tokens[i]] .sub(tokenBal); if (tokens[i] == ETHAddress) { Address.sendValue(msg.sender, tokenBal); } else { IERC20(tokens[i]).safeTransfer(msg.sender, tokenBal); } } } 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":"uint256","name":"_goodwill","type":"uint256"},{"internalType":"uint256","name":"_affiliateSplit","type":"uint256"}],"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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokensRec","type":"uint256"}],"name":"zapOut","type":"event"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":false,"inputs":[{"internalType":"address","name":"ToTokenContractAddress","type":"address"},{"internalType":"address","name":"FromSushiPoolAddress","type":"address"},{"internalType":"uint256","name":"IncomingLP","type":"uint256"},{"internalType":"uint256","name":"minTokensRec","type":"uint256"},{"internalType":"address[]","name":"swapTargets","type":"address[]"},{"internalType":"bytes","name":"swap1Data","type":"bytes"},{"internalType":"bytes","name":"swap2Data","type":"bytes"},{"internalType":"address","name":"affiliate","type":"address"}],"name":"ZapOut","outputs":[{"internalType":"uint256","name":"tokenBought","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"FromSushiPoolAddress","type":"address"},{"internalType":"uint256","name":"IncomingLP","type":"uint256"},{"internalType":"address","name":"affiliate","type":"address"}],"name":"ZapOut2PairToken","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"FromSushiPoolAddress","type":"address"},{"internalType":"uint256","name":"IncomingLP","type":"uint256"},{"internalType":"address","name":"affiliate","type":"address"},{"internalType":"bytes","name":"permitData","type":"bytes"}],"name":"ZapOut2PairTokenWithPermit","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"ToTokenContractAddress","type":"address"},{"internalType":"address","name":"FromSushiPoolAddress","type":"address"},{"internalType":"uint256","name":"IncomingLP","type":"uint256"},{"internalType":"uint256","name":"minTokensRec","type":"uint256"},{"internalType":"bytes","name":"permitData","type":"bytes"},{"internalType":"address[]","name":"swapTargets","type":"address[]"},{"internalType":"bytes","name":"swap1Data","type":"bytes"},{"internalType":"bytes","name":"swap2Data","type":"bytes"},{"internalType":"address","name":"affiliate","type":"address"}],"name":"ZapOutWithPermit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"affiliateBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"affiliates","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address[]","name":"tokens","type":"address[]"}],"name":"affilliateWithdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"feeWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"goodwill","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":true,"inputs":[{"internalType":"address","name":"FromSushiPoolAddress","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"name":"removeLiquidityReturn","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"},{"internalType":"address","name":"token0","type":"address"},{"internalType":"address","name":"token1","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"affiliate","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"set_affiliate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"zapAddress","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"set_feeWhitelist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"new_affiliateSplit","type":"uint256"}],"name":"set_new_affiliateSplit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"new_goodwill","type":"uint256"}],"name":"set_new_goodwill","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":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalAffiliateBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address[]","name":"tokens","type":"address[]"}],"name":"withdrawTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526000805460ff60a81b191690553480156200001e57600080fd5b506040516200325638038062003256833981810160405260408110156200004457600080fd5b5080516020909101516000805460ff191660011781556200006d6001600160e01b03620000ce16565b60008054610100600160a81b0319166101006001600160a01b038416908102919091178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600191909155600355620000d2565b3390565b61317480620000e26000396000f3fe6080604052600436106101355760003560e01c80635ecb16cd116100ab5780638f32d59b1161006f5780638f32d59b14610848578063cfd7789c1461085d578063d408f65714610910578063f21d3ab514610943578063f2fde38b14610986578063fbec27bf146109b957610135565b80635ecb16cd1461070a578063715018a61461078557806375f12b211461079a5780637ee99283146107af5780638da5cb5b1461081757610135565b80632753c8f6116100fd5780632753c8f6146102c65780633ff428c7146104af5780634f51e294146104ea578063542cdf0214610531578063550bfa56146106cb5780635de0398e146106f557610135565b806301e980d41461018c5780630dc9de85146101b65780631385d24c146102315780631781261f1461024657806318b135e314610293575b3332141561018a576040805162461bcd60e51b815260206004820152601860248201527f446f206e6f742073656e6420455448206469726563746c790000000000000000604482015290519081900360640190fd5b005b34801561019857600080fd5b5061018a600480360360208110156101af57600080fd5b50356109f4565b3480156101c257600080fd5b5061018a600480360360208110156101d957600080fd5b810190602081018135600160201b8111156101f357600080fd5b82018360208201111561020557600080fd5b803590602001918460208302840111600160201b8311171561022657600080fd5b509092509050610a80565b34801561023d57600080fd5b5061018a610c60565b34801561025257600080fd5b506102816004803603604081101561026957600080fd5b506001600160a01b0381358116916020013516610cc8565b60408051918252519081900360200190f35b34801561029f57600080fd5b50610281600480360360208110156102b657600080fd5b50356001600160a01b0316610ce5565b3480156102d257600080fd5b5061028160048036036101008110156102ea57600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135600160201b81111561032957600080fd5b82018360208201111561033b57600080fd5b803590602001918460208302840111600160201b8311171561035c57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156103ab57600080fd5b8201836020820111156103bd57600080fd5b803590602001918460018302840111600160201b831117156103de57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561043057600080fd5b82018360208201111561044257600080fd5b803590602001918460018302840111600160201b8311171561046357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550505090356001600160a01b03169150610cf79050565b3480156104bb57600080fd5b5061018a600480360360408110156104d257600080fd5b506001600160a01b0381351690602001351515610f75565b3480156104f657600080fd5b5061051d6004803603602081101561050d57600080fd5b50356001600160a01b0316610fe7565b604080519115158252519081900360200190f35b34801561053d57600080fd5b50610281600480360361012081101561055557600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135600160201b81111561059457600080fd5b8201836020820111156105a657600080fd5b803590602001918460018302840111600160201b831117156105c757600080fd5b919390929091602081019035600160201b8111156105e457600080fd5b8201836020820111156105f657600080fd5b803590602001918460208302840111600160201b8311171561061757600080fd5b919390929091602081019035600160201b81111561063457600080fd5b82018360208201111561064657600080fd5b803590602001918460018302840111600160201b8311171561066757600080fd5b919390929091602081019035600160201b81111561068457600080fd5b82018360208201111561069657600080fd5b803590602001918460018302840111600160201b831117156106b757600080fd5b9193509150356001600160a01b0316610ffc565b3480156106d757600080fd5b5061018a600480360360208110156106ee57600080fd5b50356111dc565b34801561070157600080fd5b5061028161127e565b34801561071657600080fd5b5061018a6004803603602081101561072d57600080fd5b810190602081018135600160201b81111561074757600080fd5b82018360208201111561075957600080fd5b803590602001918460208302840111600160201b8311171561077a57600080fd5b509092509050611284565b34801561079157600080fd5b5061018a611487565b3480156107a657600080fd5b5061051d61151d565b3480156107bb57600080fd5b506107e8600480360360408110156107d257600080fd5b506001600160a01b03813516906020013561152d565b6040805194855260208501939093526001600160a01b0391821684840152166060830152519081900360800190f35b34801561082357600080fd5b5061082c6117bc565b604080516001600160a01b039092168252519081900360200190f35b34801561085457600080fd5b5061051d6117d0565b34801561086957600080fd5b506108f76004803603608081101561088057600080fd5b6001600160a01b038235811692602081013592604082013590921691810190608081016060820135600160201b8111156108b957600080fd5b8201836020820111156108cb57600080fd5b803590602001918460018302840111600160201b831117156108ec57600080fd5b5090925090506117f9565b6040805192835260208301919091528051918290030190f35b34801561091c57600080fd5b5061051d6004803603602081101561093357600080fd5b50356001600160a01b0316611916565b34801561094f57600080fd5b506108f76004803603606081101561096657600080fd5b506001600160a01b0381358116916020810135916040909101351661192b565b34801561099257600080fd5b5061018a600480360360208110156109a957600080fd5b50356001600160a01b0316611f03565b3480156109c557600080fd5b5061018a600480360360408110156109dc57600080fd5b506001600160a01b0381351690602001351515611f56565b6109fc6117d0565b610a3b576040805162461bcd60e51b815260206004820181905260248201526000805160206130c0833981519152604482015290519081900360640190fd5b6064811115610a7b5760405162461bcd60e51b815260040180806020018281038252602181526020018061309f6021913960400191505060405180910390fd5b600355565b6000805b82811015610c5a5733600090815260056020526040812090858584818110610aa857fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020549150600060056000336001600160a01b03166001600160a01b031681526020019081526020016000206000868685818110610b1057fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002081905550610b978260066000878786818110610b5857fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002054611fc890919063ffffffff16565b60066000868685818110610ba757fe5b602090810292909201356001600160a01b03168352508101919091526040016000205573eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee848483818110610beb57fe5b905060200201356001600160a01b03166001600160a01b03161415610c1957610c143383612013565b610c52565b610c523383868685818110610c2a57fe5b905060200201356001600160a01b03166001600160a01b03166120f89092919063ffffffff16565b600101610a84565b50505050565b610c686117d0565b610ca7576040805162461bcd60e51b815260206004820181905260248201526000805160206130c0833981519152604482015290519081900360640190fd5b6000805460ff60a81b198116600160a81b9182900460ff1615909102179055565b600560209081526000928352604080842090915290825290205481565b60066020526000908152604090205481565b6000805460ff16610d4f576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6000805460ff191690819055600160a81b900460ff1615610dac576040805162461bcd60e51b815260206004820152601260248201527115195b5c1bdc985c9a5b1e4814185d5cd95960721b604482015290519081900360640190fd5b600080610db98a8a61214a565b91509150610dcc8a83838e8b8b8b6123f6565b925087831015610e13576040805162461bcd60e51b815260206004820152600d60248201526c4869676820736c69707061676560981b604482015290519081900360640190fd5b60006001600160a01b038c16610e8657610e4273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee8587612596565b9050336108fc610e58868463ffffffff611fc816565b6040518115909202916000818181858888f19350505050158015610e80573d6000803e3d6000fd5b50610ebe565b610e918c8587612596565b9050610ebe33610ea7868463ffffffff611fc816565b6001600160a01b038f16919063ffffffff6120f816565b6000610ed0858363ffffffff611fc816565b90507ff2d3e32195f8631c70e1d996c9bd5d4a3369d0580786dcd662bf13139310355d338d8f8460405180856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b0316815260200182815260200194505050505060405180910390a193505050506000805460ff1916600117905598975050505050505050565b610f7d6117d0565b610fbc576040805162461bcd60e51b815260206004820181905260248201526000805160206130c0833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600460205260409020805460ff1916911515919091179055565b60046020526000908152604090205460ff1681565b60008054600160a81b900460ff1615611051576040805162461bcd60e51b815260206004820152601260248201527115195b5c1bdc985c9a5b1e4814185d5cd95960721b604482015290519081900360640190fd5b60008d6001600160a01b03168b8b604051808383808284376040519201945060009350909150508083038183865af19150503d80600081146110af576040519150601f19603f3d011682016040523d82523d6000602084013e6110b4565b606091505b50509050806110fd576040805162461bcd60e51b815260206004820152601060248201526f10dbdd5b1908139bdd0814195c9b5a5d60821b604482015290519081900360640190fd5b6111c98f8f8f8f8d8d80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508d9250610cf7915050565b9f9e505050505050505050505050505050565b6111e46117d0565b611223576040805162461bcd60e51b815260206004820181905260248201526000805160206130c0833981519152604482015290519081900360640190fd5b6064811115611279576040805162461bcd60e51b815260206004820152601a60248201527f476f6f6457696c6c2056616c7565206e6f7420616c6c6f776564000000000000604482015290519081900360640190fd5b600155565b60015481565b61128c6117d0565b6112cb576040805162461bcd60e51b815260206004820181905260248201526000805160206130c0833981519152604482015290519081900360640190fd5b60005b8181101561148257600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee8484848181106112f957fe5b905060200201356001600160a01b03166001600160a01b0316141561138b5761136b6006600086868681811061132b57fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b031681526020019081526020016000205447611fc890919063ffffffff16565b905061138661138061137b6117bc565b6126c0565b82612013565b611479565b61145f6006600086868681811061139e57fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020548585858181106113db57fe5b604080516370a0823160e01b81523060048201529051602092830294909401356001600160a01b0316936370a08231935060248083019392829003018186803b15801561142757600080fd5b505afa15801561143b573d6000803e3d6000fd5b505050506040513d602081101561145157600080fd5b50519063ffffffff611fc816565b905061147961146c6117bc565b82868686818110610c2a57fe5b506001016112ce565b505050565b61148f6117d0565b6114ce576040805162461bcd60e51b815260206004820181905260248201526000805160206130c0833981519152604482015290519081900360640190fd5b600080546040516101009091046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360008054610100600160a81b0319169055565b600054600160a81b900460ff1681565b6000806000806000869050806001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561157157600080fd5b505afa158015611585573d6000803e3d6000fd5b505050506040513d602081101561159b57600080fd5b50516040805163d21220a760e01b815290519194506001600160a01b0383169163d21220a791600480820192602092909190829003018186803b1580156115e157600080fd5b505afa1580156115f5573d6000803e3d6000fd5b505050506040513d602081101561160b57600080fd5b5051604080516370a0823160e01b81526001600160a01b038a811660048301529151929450600092918616916370a0823191602480820192602092909190829003018186803b15801561165d57600080fd5b505afa158015611671573d6000803e3d6000fd5b505050506040513d602081101561168757600080fd5b5051604080516370a0823160e01b81526001600160a01b038b811660048301529151929350600092918616916370a0823191602480820192602092909190829003018186803b1580156116d957600080fd5b505afa1580156116ed573d6000803e3d6000fd5b505050506040513d602081101561170357600080fd5b5051604080516318160ddd60e01b815290519192506000916001600160a01b038616916318160ddd916004808301926020929190829003018186803b15801561174b57600080fd5b505afa15801561175f573d6000803e3d6000fd5b505050506040513d602081101561177557600080fd5b505190508061178a8a8563ffffffff6126c316565b8161179157fe5b049750806117a58a8463ffffffff6126c316565b816117ac57fe5b0496505050505092959194509250565b60005461010090046001600160a01b031690565b6000805461010090046001600160a01b03166117ea61271c565b6001600160a01b031614905090565b600080548190600160a81b900460ff1615611850576040805162461bcd60e51b815260206004820152601260248201527115195b5c1bdc985c9a5b1e4814185d5cd95960721b604482015290519081900360640190fd5b6000876001600160a01b03168585604051808383808284376040519201945060009350909150508083038183865af19150503d80600081146118ae576040519150601f19603f3d011682016040523d82523d6000602084013e6118b3565b606091505b50509050806118fc576040805162461bcd60e51b815260206004820152601060248201526f10dbdd5b1908139bdd0814195c9b5a5d60821b604482015290519081900360640190fd5b61190788888861192b565b90999098509650505050505050565b60026020526000908152604090205460ff1681565b60008054819060ff16611985576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6000805460ff191690819055600160a81b900460ff16156119e2576040805162461bcd60e51b815260206004820152601260248201527115195b5c1bdc985c9a5b1e4814185d5cd95960721b604482015290519081900360640190fd5b846001600160a01b038116611a3e576040805162461bcd60e51b815260206004820181905260248201527f4572726f723a20496e76616c6964205375736869706f6f6c2041646472657373604482015290519081900360640190fd5b6000816001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015611a7957600080fd5b505afa158015611a8d573d6000803e3d6000fd5b505050506040513d6020811015611aa357600080fd5b50516040805163d21220a760e01b815290519192506000916001600160a01b0385169163d21220a7916004808301926020929190829003018186803b158015611aeb57600080fd5b505afa158015611aff573d6000803e3d6000fd5b505050506040513d6020811015611b1557600080fd5b5051905087611b356001600160a01b03821633308b63ffffffff61272016565b611b636001600160a01b03821673d9e1ce17f2641f24ae83637ab66a2cca9c378b9f8a63ffffffff61277a16565b6001600160a01b03831673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc21480611baa57506001600160a01b03821673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2145b15611d145760006001600160a01b03841673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc214611bdb5783611bdd565b825b60408051629d473b60e21b81526001600160a01b0383166004820152602481018c90526001604482018190526064820152306084820152600f60fc1b60a4820152815192935073d9e1ce17f2641f24ae83637ab66a2cca9c378b9f926302751cec9260c4808401939192918290030181600087803b158015611c5e57600080fd5b505af1158015611c72573d6000803e3d6000fd5b505050506040513d6040811015611c8857600080fd5b50805160209091015190975095506000611ca382898b612596565b90506000611cc673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee898c612596565b9050611cf333611cdc8b8563ffffffff611fc816565b6001600160a01b038616919063ffffffff6120f816565b611d0c33611d078a8463ffffffff611fc816565b612013565b505050611e48565b60408051635d5155ef60e11b81526001600160a01b03858116600483015284166024820152604481018a905260016064820181905260848201523060a4820152600f60fc1b60c4820152815173d9e1ce17f2641f24ae83637ab66a2cca9c378b9f9263baa2abde9260e480820193918290030181600087803b158015611d9957600080fd5b505af1158015611dad573d6000803e3d6000fd5b505050506040513d6040811015611dc357600080fd5b50805160209091015190965094506000611dde84888a612596565b90506000611ded84888b612596565b9050611e1a33611e038a8563ffffffff611fc816565b6001600160a01b038816919063ffffffff6120f816565b611e4533611e2e898463ffffffff611fc816565b6001600160a01b038716919063ffffffff6120f816565b50505b604080513381526001600160a01b03808c1660208301528516818301526060810188905290517ff2d3e32195f8631c70e1d996c9bd5d4a3369d0580786dcd662bf13139310355d9181900360800190a1604080513381526001600160a01b03808c1660208301528416818301526060810187905290517ff2d3e32195f8631c70e1d996c9bd5d4a3369d0580786dcd662bf13139310355d9181900360800190a1505050506000805460ff191660011790559094909350915050565b611f0b6117d0565b611f4a576040805162461bcd60e51b815260206004820181905260248201526000805160206130c0833981519152604482015290519081900360640190fd5b611f538161288d565b50565b611f5e6117d0565b611f9d576040805162461bcd60e51b815260206004820181905260248201526000805160206130c0833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600260205260409020805460ff1916911515919091179055565b600061200a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612938565b90505b92915050565b80471015612068576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015290519081900360640190fd5b6040516000906001600160a01b0384169083908381818185875af1925050503d80600081146120b3576040519150601f19603f3d011682016040523d82523d6000602084013e6120b8565b606091505b50509050806114825760405162461bcd60e51b815260040180806020018281038252603a815260200180613044603a913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526114829084906129cf565b600080836001600160a01b0381166121a9576040805162461bcd60e51b815260206004820181905260248201527f4572726f723a20496e76616c6964205375736869706f6f6c2041646472657373604482015290519081900360640190fd5b6000816001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156121e457600080fd5b505afa1580156121f8573d6000803e3d6000fd5b505050506040513d602081101561220e57600080fd5b50516040805163d21220a760e01b815290519192506000916001600160a01b0385169163d21220a7916004808301926020929190829003018186803b15801561225657600080fd5b505afa15801561226a573d6000803e3d6000fd5b505050506040513d602081101561228057600080fd5b50519050866122a06001600160a01b03821633308a63ffffffff61272016565b6122ce6001600160a01b03821673d9e1ce17f2641f24ae83637ab66a2cca9c378b9f8963ffffffff61277a16565b60408051635d5155ef60e11b81526001600160a01b038581166004830152841660248201526044810189905260016064820181905260848201523060a4820152600f60fc1b60c4820152815173d9e1ce17f2641f24ae83637ab66a2cca9c378b9f9263baa2abde9260e480820193918290030181600087803b15801561235357600080fd5b505af1158015612367573d6000803e3d6000fd5b505050506040513d604081101561237d57600080fd5b5080516020909101519096509450851580159061239a5750600085115b6123eb576040805162461bcd60e51b815260206004820152601e60248201527f52656d6f76656420696e73756666696369656e74206c69717569646974790000604482015290519081900360640190fd5b505050509250929050565b600080886001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561243257600080fd5b505afa158015612446573d6000803e3d6000fd5b505050506040513d602081101561245c57600080fd5b50516040805163d21220a760e01b815290519192506000916001600160a01b038c169163d21220a7916004808301926020929190829003018186803b1580156124a457600080fd5b505afa1580156124b8573d6000803e3d6000fd5b505050506040513d60208110156124ce57600080fd5b505190506001600160a01b0382811690881614156124fd576124f6838a63ffffffff612b8716565b9250612531565b61252e61252183898c8a60008151811061251357fe5b60200260200101518a612be1565b849063ffffffff612b8716565b92505b866001600160a01b0316816001600160a01b031614156125625761255b838963ffffffff612b8716565b9250612589565b61258661252182898b8a60018151811061257857fe5b602002602001015189612be1565b92505b5050979650505050505050565b3360009081526002602052604081205460ff16801580156125b957506000600154115b156126b8576125d56125cd856001546126c3565b612710612f3a565b6001600160a01b03841660009081526004602052604090205490925060ff16156126b85760006126216064612615600354866126c390919063ffffffff16565b9063ffffffff612f3a16565b6001600160a01b038086166000908152600560209081526040808320938b168352929052205490915061265a908263ffffffff612b8716565b6001600160a01b038086166000908152600560209081526040808320938b16835292815282822093909355600690925290205461269d908263ffffffff612b8716565b6001600160a01b038716600090815260066020526040902055505b509392505050565b90565b6000826126d25750600061200d565b828202828482816126df57fe5b041461200a5760405162461bcd60e51b815260040180806020018281038252602181526020018061307e6021913960400191505060405180910390fd5b3390565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610c5a9085906129cf565b801580612800575060408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b1580156127d257600080fd5b505afa1580156127e6573d6000803e3d6000fd5b505050506040513d60208110156127fc57600080fd5b5051155b61283b5760405162461bcd60e51b815260040180806020018281038252603681526020018061310a6036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b1790526114829084906129cf565b6001600160a01b0381166128d25760405162461bcd60e51b815260040180806020018281038252602681526020018061301e6026913960400191505060405180910390fd5b600080546040516001600160a01b038085169361010090930416917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b600081848411156129c75760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561298c578181015183820152602001612974565b50505050905090810190601f1680156129b95780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6129e1826001600160a01b0316612f7c565b612a32576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b60208310612a705780518252601f199092019160209182019101612a51565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612ad2576040519150601f19603f3d011682016040523d82523d6000602084013e612ad7565b606091505b509150915081612b2e576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b805115610c5a57808060200190516020811015612b4a57600080fd5b5051610c5a5760405162461bcd60e51b815260040180806020018281038252602a8152602001806130e0602a913960400191505060405180910390fd5b60008282018381101561200a576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000806001600160a01b03871673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2148015612c1757506001600160a01b038616155b15612c975773c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b0316632e1a7d4d866040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015612c7657600080fd5b505af1158015612c8a573d6000803e3d6000fd5b5050505084915050612f31565b6001600160a01b038716612cac575083612ce4565b86612cc86001600160a01b03821686600063ffffffff61277a16565b612ce26001600160a01b038216868863ffffffff61277a16565b505b60006001600160a01b03871615612d6c57604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b158015612d3b57600080fd5b505afa158015612d4f573d6000803e3d6000fd5b505050506040513d6020811015612d6557600080fd5b5051612d6e565b475b90506000856001600160a01b031683866040518082805190602001908083835b60208310612dad5780518252601f199092019160209182019101612d8e565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114612e0f576040519150601f19603f3d011682016040523d82523d6000602084013e612e14565b606091505b5050905080612e62576040805162461bcd60e51b81526020600482015260156024820152744572726f72205377617070696e6720546f6b656e7360581b604482015290519081900360640190fd5b60006001600160a01b03891615612ec457604080516370a0823160e01b81523060048201529051612ebf9185916001600160a01b038d16916370a08231916024808301926020929190829003018186803b15801561142757600080fd5b612ed4565b612ed4478463ffffffff611fc816565b905060008111612f2b576040805162461bcd60e51b815260206004820152601f60248201527f5377617070656420746f20496e76616c696420496e7465726d65646961746500604482015290519081900360640190fd5b93505050505b95945050505050565b600061200a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612fb8565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590612fb057508115155b949350505050565b600081836130075760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561298c578181015183820152602001612974565b50600083858161301357fe5b049594505050505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d61792068617665207265766572746564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77416666696c696174652053706c69742056616c7565206e6f7420616c6c6f7765644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365a265627a7a723158204ee3b3d91d5d9c0aafd0370853ef89e2fbbb2559cc91eb91d89f3e6a3aec11d164736f6c6343000511003200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106101355760003560e01c80635ecb16cd116100ab5780638f32d59b1161006f5780638f32d59b14610848578063cfd7789c1461085d578063d408f65714610910578063f21d3ab514610943578063f2fde38b14610986578063fbec27bf146109b957610135565b80635ecb16cd1461070a578063715018a61461078557806375f12b211461079a5780637ee99283146107af5780638da5cb5b1461081757610135565b80632753c8f6116100fd5780632753c8f6146102c65780633ff428c7146104af5780634f51e294146104ea578063542cdf0214610531578063550bfa56146106cb5780635de0398e146106f557610135565b806301e980d41461018c5780630dc9de85146101b65780631385d24c146102315780631781261f1461024657806318b135e314610293575b3332141561018a576040805162461bcd60e51b815260206004820152601860248201527f446f206e6f742073656e6420455448206469726563746c790000000000000000604482015290519081900360640190fd5b005b34801561019857600080fd5b5061018a600480360360208110156101af57600080fd5b50356109f4565b3480156101c257600080fd5b5061018a600480360360208110156101d957600080fd5b810190602081018135600160201b8111156101f357600080fd5b82018360208201111561020557600080fd5b803590602001918460208302840111600160201b8311171561022657600080fd5b509092509050610a80565b34801561023d57600080fd5b5061018a610c60565b34801561025257600080fd5b506102816004803603604081101561026957600080fd5b506001600160a01b0381358116916020013516610cc8565b60408051918252519081900360200190f35b34801561029f57600080fd5b50610281600480360360208110156102b657600080fd5b50356001600160a01b0316610ce5565b3480156102d257600080fd5b5061028160048036036101008110156102ea57600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135600160201b81111561032957600080fd5b82018360208201111561033b57600080fd5b803590602001918460208302840111600160201b8311171561035c57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156103ab57600080fd5b8201836020820111156103bd57600080fd5b803590602001918460018302840111600160201b831117156103de57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561043057600080fd5b82018360208201111561044257600080fd5b803590602001918460018302840111600160201b8311171561046357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550505090356001600160a01b03169150610cf79050565b3480156104bb57600080fd5b5061018a600480360360408110156104d257600080fd5b506001600160a01b0381351690602001351515610f75565b3480156104f657600080fd5b5061051d6004803603602081101561050d57600080fd5b50356001600160a01b0316610fe7565b604080519115158252519081900360200190f35b34801561053d57600080fd5b50610281600480360361012081101561055557600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135600160201b81111561059457600080fd5b8201836020820111156105a657600080fd5b803590602001918460018302840111600160201b831117156105c757600080fd5b919390929091602081019035600160201b8111156105e457600080fd5b8201836020820111156105f657600080fd5b803590602001918460208302840111600160201b8311171561061757600080fd5b919390929091602081019035600160201b81111561063457600080fd5b82018360208201111561064657600080fd5b803590602001918460018302840111600160201b8311171561066757600080fd5b919390929091602081019035600160201b81111561068457600080fd5b82018360208201111561069657600080fd5b803590602001918460018302840111600160201b831117156106b757600080fd5b9193509150356001600160a01b0316610ffc565b3480156106d757600080fd5b5061018a600480360360208110156106ee57600080fd5b50356111dc565b34801561070157600080fd5b5061028161127e565b34801561071657600080fd5b5061018a6004803603602081101561072d57600080fd5b810190602081018135600160201b81111561074757600080fd5b82018360208201111561075957600080fd5b803590602001918460208302840111600160201b8311171561077a57600080fd5b509092509050611284565b34801561079157600080fd5b5061018a611487565b3480156107a657600080fd5b5061051d61151d565b3480156107bb57600080fd5b506107e8600480360360408110156107d257600080fd5b506001600160a01b03813516906020013561152d565b6040805194855260208501939093526001600160a01b0391821684840152166060830152519081900360800190f35b34801561082357600080fd5b5061082c6117bc565b604080516001600160a01b039092168252519081900360200190f35b34801561085457600080fd5b5061051d6117d0565b34801561086957600080fd5b506108f76004803603608081101561088057600080fd5b6001600160a01b038235811692602081013592604082013590921691810190608081016060820135600160201b8111156108b957600080fd5b8201836020820111156108cb57600080fd5b803590602001918460018302840111600160201b831117156108ec57600080fd5b5090925090506117f9565b6040805192835260208301919091528051918290030190f35b34801561091c57600080fd5b5061051d6004803603602081101561093357600080fd5b50356001600160a01b0316611916565b34801561094f57600080fd5b506108f76004803603606081101561096657600080fd5b506001600160a01b0381358116916020810135916040909101351661192b565b34801561099257600080fd5b5061018a600480360360208110156109a957600080fd5b50356001600160a01b0316611f03565b3480156109c557600080fd5b5061018a600480360360408110156109dc57600080fd5b506001600160a01b0381351690602001351515611f56565b6109fc6117d0565b610a3b576040805162461bcd60e51b815260206004820181905260248201526000805160206130c0833981519152604482015290519081900360640190fd5b6064811115610a7b5760405162461bcd60e51b815260040180806020018281038252602181526020018061309f6021913960400191505060405180910390fd5b600355565b6000805b82811015610c5a5733600090815260056020526040812090858584818110610aa857fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020549150600060056000336001600160a01b03166001600160a01b031681526020019081526020016000206000868685818110610b1057fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002081905550610b978260066000878786818110610b5857fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002054611fc890919063ffffffff16565b60066000868685818110610ba757fe5b602090810292909201356001600160a01b03168352508101919091526040016000205573eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee848483818110610beb57fe5b905060200201356001600160a01b03166001600160a01b03161415610c1957610c143383612013565b610c52565b610c523383868685818110610c2a57fe5b905060200201356001600160a01b03166001600160a01b03166120f89092919063ffffffff16565b600101610a84565b50505050565b610c686117d0565b610ca7576040805162461bcd60e51b815260206004820181905260248201526000805160206130c0833981519152604482015290519081900360640190fd5b6000805460ff60a81b198116600160a81b9182900460ff1615909102179055565b600560209081526000928352604080842090915290825290205481565b60066020526000908152604090205481565b6000805460ff16610d4f576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6000805460ff191690819055600160a81b900460ff1615610dac576040805162461bcd60e51b815260206004820152601260248201527115195b5c1bdc985c9a5b1e4814185d5cd95960721b604482015290519081900360640190fd5b600080610db98a8a61214a565b91509150610dcc8a83838e8b8b8b6123f6565b925087831015610e13576040805162461bcd60e51b815260206004820152600d60248201526c4869676820736c69707061676560981b604482015290519081900360640190fd5b60006001600160a01b038c16610e8657610e4273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee8587612596565b9050336108fc610e58868463ffffffff611fc816565b6040518115909202916000818181858888f19350505050158015610e80573d6000803e3d6000fd5b50610ebe565b610e918c8587612596565b9050610ebe33610ea7868463ffffffff611fc816565b6001600160a01b038f16919063ffffffff6120f816565b6000610ed0858363ffffffff611fc816565b90507ff2d3e32195f8631c70e1d996c9bd5d4a3369d0580786dcd662bf13139310355d338d8f8460405180856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b0316815260200182815260200194505050505060405180910390a193505050506000805460ff1916600117905598975050505050505050565b610f7d6117d0565b610fbc576040805162461bcd60e51b815260206004820181905260248201526000805160206130c0833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600460205260409020805460ff1916911515919091179055565b60046020526000908152604090205460ff1681565b60008054600160a81b900460ff1615611051576040805162461bcd60e51b815260206004820152601260248201527115195b5c1bdc985c9a5b1e4814185d5cd95960721b604482015290519081900360640190fd5b60008d6001600160a01b03168b8b604051808383808284376040519201945060009350909150508083038183865af19150503d80600081146110af576040519150601f19603f3d011682016040523d82523d6000602084013e6110b4565b606091505b50509050806110fd576040805162461bcd60e51b815260206004820152601060248201526f10dbdd5b1908139bdd0814195c9b5a5d60821b604482015290519081900360640190fd5b6111c98f8f8f8f8d8d80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508d9250610cf7915050565b9f9e505050505050505050505050505050565b6111e46117d0565b611223576040805162461bcd60e51b815260206004820181905260248201526000805160206130c0833981519152604482015290519081900360640190fd5b6064811115611279576040805162461bcd60e51b815260206004820152601a60248201527f476f6f6457696c6c2056616c7565206e6f7420616c6c6f776564000000000000604482015290519081900360640190fd5b600155565b60015481565b61128c6117d0565b6112cb576040805162461bcd60e51b815260206004820181905260248201526000805160206130c0833981519152604482015290519081900360640190fd5b60005b8181101561148257600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee8484848181106112f957fe5b905060200201356001600160a01b03166001600160a01b0316141561138b5761136b6006600086868681811061132b57fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b031681526020019081526020016000205447611fc890919063ffffffff16565b905061138661138061137b6117bc565b6126c0565b82612013565b611479565b61145f6006600086868681811061139e57fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020548585858181106113db57fe5b604080516370a0823160e01b81523060048201529051602092830294909401356001600160a01b0316936370a08231935060248083019392829003018186803b15801561142757600080fd5b505afa15801561143b573d6000803e3d6000fd5b505050506040513d602081101561145157600080fd5b50519063ffffffff611fc816565b905061147961146c6117bc565b82868686818110610c2a57fe5b506001016112ce565b505050565b61148f6117d0565b6114ce576040805162461bcd60e51b815260206004820181905260248201526000805160206130c0833981519152604482015290519081900360640190fd5b600080546040516101009091046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360008054610100600160a81b0319169055565b600054600160a81b900460ff1681565b6000806000806000869050806001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561157157600080fd5b505afa158015611585573d6000803e3d6000fd5b505050506040513d602081101561159b57600080fd5b50516040805163d21220a760e01b815290519194506001600160a01b0383169163d21220a791600480820192602092909190829003018186803b1580156115e157600080fd5b505afa1580156115f5573d6000803e3d6000fd5b505050506040513d602081101561160b57600080fd5b5051604080516370a0823160e01b81526001600160a01b038a811660048301529151929450600092918616916370a0823191602480820192602092909190829003018186803b15801561165d57600080fd5b505afa158015611671573d6000803e3d6000fd5b505050506040513d602081101561168757600080fd5b5051604080516370a0823160e01b81526001600160a01b038b811660048301529151929350600092918616916370a0823191602480820192602092909190829003018186803b1580156116d957600080fd5b505afa1580156116ed573d6000803e3d6000fd5b505050506040513d602081101561170357600080fd5b5051604080516318160ddd60e01b815290519192506000916001600160a01b038616916318160ddd916004808301926020929190829003018186803b15801561174b57600080fd5b505afa15801561175f573d6000803e3d6000fd5b505050506040513d602081101561177557600080fd5b505190508061178a8a8563ffffffff6126c316565b8161179157fe5b049750806117a58a8463ffffffff6126c316565b816117ac57fe5b0496505050505092959194509250565b60005461010090046001600160a01b031690565b6000805461010090046001600160a01b03166117ea61271c565b6001600160a01b031614905090565b600080548190600160a81b900460ff1615611850576040805162461bcd60e51b815260206004820152601260248201527115195b5c1bdc985c9a5b1e4814185d5cd95960721b604482015290519081900360640190fd5b6000876001600160a01b03168585604051808383808284376040519201945060009350909150508083038183865af19150503d80600081146118ae576040519150601f19603f3d011682016040523d82523d6000602084013e6118b3565b606091505b50509050806118fc576040805162461bcd60e51b815260206004820152601060248201526f10dbdd5b1908139bdd0814195c9b5a5d60821b604482015290519081900360640190fd5b61190788888861192b565b90999098509650505050505050565b60026020526000908152604090205460ff1681565b60008054819060ff16611985576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6000805460ff191690819055600160a81b900460ff16156119e2576040805162461bcd60e51b815260206004820152601260248201527115195b5c1bdc985c9a5b1e4814185d5cd95960721b604482015290519081900360640190fd5b846001600160a01b038116611a3e576040805162461bcd60e51b815260206004820181905260248201527f4572726f723a20496e76616c6964205375736869706f6f6c2041646472657373604482015290519081900360640190fd5b6000816001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015611a7957600080fd5b505afa158015611a8d573d6000803e3d6000fd5b505050506040513d6020811015611aa357600080fd5b50516040805163d21220a760e01b815290519192506000916001600160a01b0385169163d21220a7916004808301926020929190829003018186803b158015611aeb57600080fd5b505afa158015611aff573d6000803e3d6000fd5b505050506040513d6020811015611b1557600080fd5b5051905087611b356001600160a01b03821633308b63ffffffff61272016565b611b636001600160a01b03821673d9e1ce17f2641f24ae83637ab66a2cca9c378b9f8a63ffffffff61277a16565b6001600160a01b03831673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc21480611baa57506001600160a01b03821673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2145b15611d145760006001600160a01b03841673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc214611bdb5783611bdd565b825b60408051629d473b60e21b81526001600160a01b0383166004820152602481018c90526001604482018190526064820152306084820152600f60fc1b60a4820152815192935073d9e1ce17f2641f24ae83637ab66a2cca9c378b9f926302751cec9260c4808401939192918290030181600087803b158015611c5e57600080fd5b505af1158015611c72573d6000803e3d6000fd5b505050506040513d6040811015611c8857600080fd5b50805160209091015190975095506000611ca382898b612596565b90506000611cc673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee898c612596565b9050611cf333611cdc8b8563ffffffff611fc816565b6001600160a01b038616919063ffffffff6120f816565b611d0c33611d078a8463ffffffff611fc816565b612013565b505050611e48565b60408051635d5155ef60e11b81526001600160a01b03858116600483015284166024820152604481018a905260016064820181905260848201523060a4820152600f60fc1b60c4820152815173d9e1ce17f2641f24ae83637ab66a2cca9c378b9f9263baa2abde9260e480820193918290030181600087803b158015611d9957600080fd5b505af1158015611dad573d6000803e3d6000fd5b505050506040513d6040811015611dc357600080fd5b50805160209091015190965094506000611dde84888a612596565b90506000611ded84888b612596565b9050611e1a33611e038a8563ffffffff611fc816565b6001600160a01b038816919063ffffffff6120f816565b611e4533611e2e898463ffffffff611fc816565b6001600160a01b038716919063ffffffff6120f816565b50505b604080513381526001600160a01b03808c1660208301528516818301526060810188905290517ff2d3e32195f8631c70e1d996c9bd5d4a3369d0580786dcd662bf13139310355d9181900360800190a1604080513381526001600160a01b03808c1660208301528416818301526060810187905290517ff2d3e32195f8631c70e1d996c9bd5d4a3369d0580786dcd662bf13139310355d9181900360800190a1505050506000805460ff191660011790559094909350915050565b611f0b6117d0565b611f4a576040805162461bcd60e51b815260206004820181905260248201526000805160206130c0833981519152604482015290519081900360640190fd5b611f538161288d565b50565b611f5e6117d0565b611f9d576040805162461bcd60e51b815260206004820181905260248201526000805160206130c0833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600260205260409020805460ff1916911515919091179055565b600061200a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612938565b90505b92915050565b80471015612068576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015290519081900360640190fd5b6040516000906001600160a01b0384169083908381818185875af1925050503d80600081146120b3576040519150601f19603f3d011682016040523d82523d6000602084013e6120b8565b606091505b50509050806114825760405162461bcd60e51b815260040180806020018281038252603a815260200180613044603a913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526114829084906129cf565b600080836001600160a01b0381166121a9576040805162461bcd60e51b815260206004820181905260248201527f4572726f723a20496e76616c6964205375736869706f6f6c2041646472657373604482015290519081900360640190fd5b6000816001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156121e457600080fd5b505afa1580156121f8573d6000803e3d6000fd5b505050506040513d602081101561220e57600080fd5b50516040805163d21220a760e01b815290519192506000916001600160a01b0385169163d21220a7916004808301926020929190829003018186803b15801561225657600080fd5b505afa15801561226a573d6000803e3d6000fd5b505050506040513d602081101561228057600080fd5b50519050866122a06001600160a01b03821633308a63ffffffff61272016565b6122ce6001600160a01b03821673d9e1ce17f2641f24ae83637ab66a2cca9c378b9f8963ffffffff61277a16565b60408051635d5155ef60e11b81526001600160a01b038581166004830152841660248201526044810189905260016064820181905260848201523060a4820152600f60fc1b60c4820152815173d9e1ce17f2641f24ae83637ab66a2cca9c378b9f9263baa2abde9260e480820193918290030181600087803b15801561235357600080fd5b505af1158015612367573d6000803e3d6000fd5b505050506040513d604081101561237d57600080fd5b5080516020909101519096509450851580159061239a5750600085115b6123eb576040805162461bcd60e51b815260206004820152601e60248201527f52656d6f76656420696e73756666696369656e74206c69717569646974790000604482015290519081900360640190fd5b505050509250929050565b600080886001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561243257600080fd5b505afa158015612446573d6000803e3d6000fd5b505050506040513d602081101561245c57600080fd5b50516040805163d21220a760e01b815290519192506000916001600160a01b038c169163d21220a7916004808301926020929190829003018186803b1580156124a457600080fd5b505afa1580156124b8573d6000803e3d6000fd5b505050506040513d60208110156124ce57600080fd5b505190506001600160a01b0382811690881614156124fd576124f6838a63ffffffff612b8716565b9250612531565b61252e61252183898c8a60008151811061251357fe5b60200260200101518a612be1565b849063ffffffff612b8716565b92505b866001600160a01b0316816001600160a01b031614156125625761255b838963ffffffff612b8716565b9250612589565b61258661252182898b8a60018151811061257857fe5b602002602001015189612be1565b92505b5050979650505050505050565b3360009081526002602052604081205460ff16801580156125b957506000600154115b156126b8576125d56125cd856001546126c3565b612710612f3a565b6001600160a01b03841660009081526004602052604090205490925060ff16156126b85760006126216064612615600354866126c390919063ffffffff16565b9063ffffffff612f3a16565b6001600160a01b038086166000908152600560209081526040808320938b168352929052205490915061265a908263ffffffff612b8716565b6001600160a01b038086166000908152600560209081526040808320938b16835292815282822093909355600690925290205461269d908263ffffffff612b8716565b6001600160a01b038716600090815260066020526040902055505b509392505050565b90565b6000826126d25750600061200d565b828202828482816126df57fe5b041461200a5760405162461bcd60e51b815260040180806020018281038252602181526020018061307e6021913960400191505060405180910390fd5b3390565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610c5a9085906129cf565b801580612800575060408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b1580156127d257600080fd5b505afa1580156127e6573d6000803e3d6000fd5b505050506040513d60208110156127fc57600080fd5b5051155b61283b5760405162461bcd60e51b815260040180806020018281038252603681526020018061310a6036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b1790526114829084906129cf565b6001600160a01b0381166128d25760405162461bcd60e51b815260040180806020018281038252602681526020018061301e6026913960400191505060405180910390fd5b600080546040516001600160a01b038085169361010090930416917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b600081848411156129c75760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561298c578181015183820152602001612974565b50505050905090810190601f1680156129b95780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6129e1826001600160a01b0316612f7c565b612a32576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b60208310612a705780518252601f199092019160209182019101612a51565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612ad2576040519150601f19603f3d011682016040523d82523d6000602084013e612ad7565b606091505b509150915081612b2e576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b805115610c5a57808060200190516020811015612b4a57600080fd5b5051610c5a5760405162461bcd60e51b815260040180806020018281038252602a8152602001806130e0602a913960400191505060405180910390fd5b60008282018381101561200a576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000806001600160a01b03871673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2148015612c1757506001600160a01b038616155b15612c975773c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b0316632e1a7d4d866040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015612c7657600080fd5b505af1158015612c8a573d6000803e3d6000fd5b5050505084915050612f31565b6001600160a01b038716612cac575083612ce4565b86612cc86001600160a01b03821686600063ffffffff61277a16565b612ce26001600160a01b038216868863ffffffff61277a16565b505b60006001600160a01b03871615612d6c57604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b158015612d3b57600080fd5b505afa158015612d4f573d6000803e3d6000fd5b505050506040513d6020811015612d6557600080fd5b5051612d6e565b475b90506000856001600160a01b031683866040518082805190602001908083835b60208310612dad5780518252601f199092019160209182019101612d8e565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114612e0f576040519150601f19603f3d011682016040523d82523d6000602084013e612e14565b606091505b5050905080612e62576040805162461bcd60e51b81526020600482015260156024820152744572726f72205377617070696e6720546f6b656e7360581b604482015290519081900360640190fd5b60006001600160a01b03891615612ec457604080516370a0823160e01b81523060048201529051612ebf9185916001600160a01b038d16916370a08231916024808301926020929190829003018186803b15801561142757600080fd5b612ed4565b612ed4478463ffffffff611fc816565b905060008111612f2b576040805162461bcd60e51b815260206004820152601f60248201527f5377617070656420746f20496e76616c696420496e7465726d65646961746500604482015290519081900360640190fd5b93505050505b95945050505050565b600061200a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612fb8565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590612fb057508115155b949350505050565b600081836130075760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561298c578181015183820152602001612974565b50600083858161301357fe5b049594505050505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d61792068617665207265766572746564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77416666696c696174652053706c69742056616c7565206e6f7420616c6c6f7765644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365a265627a7a723158204ee3b3d91d5d9c0aafd0370853ef89e2fbbb2559cc91eb91d89f3e6a3aec11d164736f6c63430005110032
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _goodwill (uint256): 0
Arg [1] : _affiliateSplit (uint256): 0
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
25618:17189:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42744:10;42758:9;42744:23;;42736:60;;;;;-1:-1:-1;;;42736:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;25618:17189;40900:238;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40900:238:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;40900:238:0;;:::i;42075:614::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;42075:614:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;42075:614:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;42075:614:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;42075:614:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;-1:-1;42075:614:0;;-1:-1:-1;42075:614:0;-1:-1:-1;42075:614:0;:::i;40403:86::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40403:86:0;;;:::i;26132:71::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26132:71:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;26132:71:0;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;26234:56;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26234:56:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26234:56:0;-1:-1:-1;;;;;26234:56:0;;:::i;33191:1751::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33191:1751:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;33191:1751:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;33191:1751:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;33191:1751:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;33191:1751:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;33191:1751:0;;;;;;;;-1:-1:-1;33191:1751:0;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;33191:1751:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;33191:1751:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;33191:1751:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;33191:1751:0;;;;;;;;-1:-1:-1;33191:1751:0;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;33191:1751:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;33191:1751:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;33191:1751:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;33191:1751:0;;-1:-1:-1;;;33191:1751:0;;-1:-1:-1;;;;;33191:1751:0;;-1:-1:-1;33191:1751:0;;-1:-1:-1;33191:1751:0:i;41146:123::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;41146:123:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;41146:123:0;;;;;;;;;;:::i;26046:42::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26046:42:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26046:42:0;-1:-1:-1;;;;;26046:42:0;;:::i;:::-;;;;;;;;;;;;;;;;;;27851:853;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27851:853:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;27851:853:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;27851:853:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;27851:853:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;27851:853:0;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;27851:853:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;27851:853:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;27851:853:0;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;27851:853:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;27851:853:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;27851:853:0;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;27851:853:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;27851:853:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;27851:853:0;;-1:-1:-1;27851:853:0;-1:-1:-1;27851:853:0;-1:-1:-1;;;;;27851:853:0;;:::i;40497:234::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40497:234:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;40497:234:0;;:::i;25824:23::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25824:23:0;;;:::i;41345:654::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;41345:654:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;41345:654:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;41345:654:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;41345:654:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;-1:-1;41345:654:0;;-1:-1:-1;41345:654:0;-1:-1:-1;41345:654:0;:::i;10492:140::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10492:140:0;;;:::i;25790:27::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25790:27:0;;;:::i;38708:760::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38708:760:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;38708:760:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;;;;38708:760:0;;;;;;;;;;;;;;;;;;;;;9681:79;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9681:79:0;;;:::i;:::-;;;;-1:-1:-1;;;;;9681:79:0;;;;;;;;;;;;;;10047:94;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10047:94:0;;;:::i;29126:529::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29126:529:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;29126:529:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;29126:529:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;29126:529:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;29126:529:0;;-1:-1:-1;29126:529:0;-1:-1:-1;29126:529:0;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;25898:44;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25898:44:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25898:44:0;-1:-1:-1;;;;;25898:44:0;;:::i;29971:2742::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29971:2742:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;29971:2742:0;;;;;;;;;;;;;;;;;:::i;10787:109::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10787:109:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10787:109:0;-1:-1:-1;;;;;10787:109:0;;:::i;40739:153::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40739:153:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;40739:153:0;;;;;;;;;;:::i;40900:238::-;9893:9;:7;:9::i;:::-;9885:54;;;;;-1:-1:-1;;;9885:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9885:54:0;;;;;;;;;;;;;;;41043:3;41021:18;:25;;41013:71;;;;-1:-1:-1;;;41013:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41095:14;:35;40900:238::o;42075:614::-;42150:16;;42177:505;42197:17;;;42177:505;;;42264:10;42247:28;;;;:16;:28;;;;;;42276:6;;42283:1;42276:9;;;;;;;;;;;;;-1:-1:-1;;;;;42276:9:0;-1:-1:-1;;;;;42247:39:0;-1:-1:-1;;;;;42247:39:0;;;;;;;;;;;;;42236:50;;42343:1;42301:16;:28;42318:10;-1:-1:-1;;;;;42301:28:0;-1:-1:-1;;;;;42301:28:0;;;;;;;;;;;;:39;42330:6;;42337:1;42330:9;;;;;;;;;;;;;-1:-1:-1;;;;;42330:9:0;-1:-1:-1;;;;;42301:39:0;-1:-1:-1;;;;;42301:39:0;;;;;;;;;;;;:43;;;;42394:64;42449:8;42394:21;:32;42416:6;;42423:1;42416:9;;;;;;;;;;;;;-1:-1:-1;;;;;42416:9:0;-1:-1:-1;;;;;42394:32:0;-1:-1:-1;;;;;42394:32:0;;;;;;;;;;;;;:54;;:64;;;;:::i;:::-;42359:21;:32;42381:6;;42388:1;42381:9;;;;;;;;;;;;;;;;-1:-1:-1;;;;;42381:9:0;42359:32;;-1:-1:-1;42359:32:0;;;;;;;;-1:-1:-1;42359:32:0;:99;26346:42;42479:6;;42486:1;42479:9;;;;;;;;;;;;;-1:-1:-1;;;;;42479:9:0;-1:-1:-1;;;;;42479:23:0;;42475:196;;;42523:39;42541:10;42553:8;42523:17;:39::i;:::-;42475:196;;;42603:52;42634:10;42646:8;42610:6;;42617:1;42610:9;;;;;;;;;;;;;-1:-1:-1;;;;;42610:9:0;-1:-1:-1;;;;;42603:30:0;;;:52;;;;;:::i;:::-;42216:3;;42177:505;;;;42075:614;;;:::o;40403:86::-;9893:9;:7;:9::i;:::-;9885:54;;;;;-1:-1:-1;;;9885:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9885:54:0;;;;;;;;;;;;;;;40474:7;;;-1:-1:-1;;;;40463:18:0;;-1:-1:-1;;;40474:7:0;;;;;;40473:8;40463:18;;;;;;40403:86::o;26132:71::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;26234:56::-;;;;;;;;;;;;;:::o;33191:1751::-;33532:19;19532:11;;;;19524:55;;;;;-1:-1:-1;;;19524:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19671:5;19657:19;;-1:-1:-1;;19657:19:0;;;;;-1:-1:-1;;;27023:7:0;;19657:19;27023:7;27019:102;;;27047:28;;;-1:-1:-1;;;27047:28:0;;;;;;;;;;;;-1:-1:-1;;;27047:28:0;;;;;;;;;;;;;;27019:102;33565:15;33582;33601:87;33632:20;33667:10;33601:16;:87::i;:::-;33564:124;;;;33715:212;33741:20;33776:7;33798;33820:22;33857:11;33883:9;33907;33715:11;:212::i;:::-;33701:226;;33963:12;33948:11;:27;;33940:53;;;;;-1:-1:-1;;;33940:53:0;;;;;;;;;;;;-1:-1:-1;;;33940:53:0;;;;;;;;;;;;;;;34006:28;-1:-1:-1;;;;;34051:36:0;;34047:633;;34127:119;26346:42;34192:11;34222:9;34127:17;:119::i;:::-;34104:142;-1:-1:-1;34263:10:0;:58;34283:37;:11;34104:142;34283:37;:15;:37;:::i;:::-;34263:58;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34263:58:0;34047:633;;;34377:131;34413:22;34454:11;34484:9;34377:17;:131::i;:::-;34354:154;-1:-1:-1;34525:143:0;34587:10;34616:37;:11;34354:154;34616:37;:15;:37;:::i;:::-;-1:-1:-1;;;;;34525:43:0;;;:143;;:43;:143;:::i;:::-;34692:17;34712:37;:11;34728:20;34712:37;:15;:37;:::i;:::-;34692:57;;34767:138;34788:10;34813:20;34848:22;34885:9;34767:138;;;;-1:-1:-1;;;;;34767:138:0;-1:-1:-1;;;;;34767:138:0;;;;;;-1:-1:-1;;;;;34767:138:0;-1:-1:-1;;;;;34767:138:0;;;;;;-1:-1:-1;;;;;34767:138:0;-1:-1:-1;;;;;34767:138:0;;;;;;;;;;;;;;;;;;;;;;;34925:9;-1:-1:-1;;;;19837:11:0;:18;;-1:-1:-1;;19837:18:0;19851:4;19837:18;;;33191:1751;;-1:-1:-1;;;;;;;;33191:1751:0:o;41146:123::-;9893:9;:7;:9::i;:::-;9885:54;;;;;-1:-1:-1;;;9885:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9885:54:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;41231:21:0;;;;;;;;:10;:21;;;;;:30;;-1:-1:-1;;41231:30:0;;;;;;;;;;41146:123::o;26046:42::-;;;;;;;;;;;;;;;:::o;27851:853::-;28233:7;27023;;-1:-1:-1;;;27023:7:0;;;;27019:102;;;27047:28;;;-1:-1:-1;;;27047:28:0;;;;;;;;;;;;-1:-1:-1;;;27047:28:0;;;;;;;;;;;;;;27019:102;28273:12;28291:20;-1:-1:-1;;;;;28291:25:0;28317:10;;28291:37;;;;;30:3:-1;22:6;14;1:33;28291:37:0;;45:16:-1;;;-1:-1;28291:37:0;;-1:-1:-1;28291:37:0;;-1:-1:-1;;28291:37: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;;28272:56:0;;;28347:7;28339:36;;;;;-1:-1:-1;;;28339:36:0;;;;;;;;;;;;-1:-1:-1;;;28339:36:0;;;;;;;;;;;;;;;28410:275;28435:22;28476:20;28515:10;28544:12;28575:11;;28410:275;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;28410:275:0;;;;;;28605:9;;28410:275;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;28410:275:0;;;;;;28633:9;;28410:275;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;28661:9:0;;-1:-1:-1;28410:6:0;;-1:-1:-1;;28410:275:0:i;:::-;28388:308;27851:853;-1:-1:-1;;;;;;;;;;;;;;;27851:853:0:o;40497:234::-;9893:9;:7;:9::i;:::-;9885:54;;;;;-1:-1:-1;;;9885:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9885:54:0;;;;;;;;;;;;;;;40632:3;40616:12;:19;;40573:116;;;;;-1:-1:-1;;;40573:116:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;40700:8;:23;40497:234::o;25824:23::-;;;;:::o;41345:654::-;9893:9;:7;:9::i;:::-;9885:54;;;;;-1:-1:-1;;;9885:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9885:54:0;;;;;;;;;;;;;;;41431:9;41426:566;41446:17;;;41426:566;;;41485:11;26346:42;41517:6;;41524:1;41517:9;;;;;;;;;;;;;-1:-1:-1;;;;;41517:9:0;-1:-1:-1;;;;;41517:23:0;;41513:468;;;41567:99;41615:21;:32;41637:6;;41644:1;41637:9;;;;;;;;;;;;;-1:-1:-1;;;;;41637:9:0;-1:-1:-1;;;;;41615:32:0;-1:-1:-1;;;;;41615:32:0;;;;;;;;;;;;;41567:21;:25;;:99;;;;:::i;:::-;41561:105;;41685:50;41703:26;41721:7;:5;:7::i;:::-;41703:17;:26::i;:::-;41731:3;41685:17;:50::i;:::-;41513:468;;;41782:120;41851:21;:32;41873:6;;41880:1;41873:9;;;;;;;;;;;;;-1:-1:-1;;;;;41873:9:0;-1:-1:-1;;;;;41851:32:0;-1:-1:-1;;;;;41851:32:0;;;;;;;;;;;;;41789:6;;41796:1;41789:9;;;;;;;41782:42;;;-1:-1:-1;;;41782:42:0;;41818:4;41782:42;;;;;;41789:9;;;;;;;;;-1:-1:-1;;;;;41789:9:0;;41782:27;;-1:-1:-1;41782:42:0;;;;;41789:9;41782:42;;;;;41789:9;41782:42;;;5:2:-1;;;;30:1;27;20:12;5:2;41782:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;41782:42:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;41782:42:0;;:120;:46;:120;:::i;:::-;41776:126;;41921:44;41952:7;:5;:7::i;:::-;41961:3;41928:6;;41935:1;41928:9;;;;;;41921:44;-1:-1:-1;41465:3:0;;41426:566;;;;41345:654;;:::o;10492:140::-;9893:9;:7;:9::i;:::-;9885:54;;;;;-1:-1:-1;;;9885:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9885:54:0;;;;;;;;;;;;;;;10591:1;10575:6;;10554:40;;10575:6;;;;-1:-1:-1;;;;;10575:6:0;;10554:40;;10591:1;;10554:40;10622:1;10605:19;;-1:-1:-1;;;;;;10605:19:0;;;10492:140::o;25790:27::-;;;-1:-1:-1;;;25790:27:0;;;;;:::o;38708:760::-;38877:15;38907;38937:14;38966;39008:19;39045:20;39008:58;;39086:4;-1:-1:-1;;;;;39086:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;39086:13:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;39086:13:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39086:13:0;39119;;;-1:-1:-1;;;39119:13:0;;;;39086;;-1:-1:-1;;;;;;39119:11:0;;;;;:13;;;;;39086;;39119;;;;;;;;:11;:13;;;5:2:-1;;;;30:1;27;20:12;5:2;39119:13:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;39119:13:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39119:13:0;39164:46;;;-1:-1:-1;;;39164:46:0;;-1:-1:-1;;;;;39164:46:0;;;;;;;;;39119:13;;-1:-1:-1;39145:16:0;;39164:24;;;;;;:46;;;;;39119:13;;39164:46;;;;;;;;:24;:46;;;5:2:-1;;;;30:1;27;20:12;5:2;39164:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;39164:46:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39164:46:0;39240;;;-1:-1:-1;;;39240:46:0;;-1:-1:-1;;;;;39240:46:0;;;;;;;;;39164;;-1:-1:-1;39221:16:0;;39240:24;;;;;;:46;;;;;39164;;39240;;;;;;;;:24;:46;;;5:2:-1;;;;30:1;27;20:12;5:2;39240:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;39240:46:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39240:46:0;39322:18;;;-1:-1:-1;;;39322:18:0;;;;39240:46;;-1:-1:-1;39299:20:0;;-1:-1:-1;;;;;39322:16:0;;;;;:18;;;;;39240:46;;39322:18;;;;;;;:16;:18;;;5:2:-1;;;;30:1;27;20:12;5:2;39322:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;39322:18:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39322:18:0;;-1:-1:-1;39322:18:0;39363:23;:9;39377:8;39363:23;:13;:23;:::i;:::-;:38;;;;;;;-1:-1:-1;39448:12:0;39422:23;:9;39436:8;39422:23;:13;:23;:::i;:::-;:38;;;;;;39412:48;;38708:760;;;;;;;;;;;:::o;9681:79::-;9719:7;9746:6;;;;-1:-1:-1;;;;;9746:6:0;;9681:79::o;10047:94::-;10087:4;10127:6;;;;;-1:-1:-1;;;;;10127:6:0;10111:12;:10;:12::i;:::-;-1:-1:-1;;;;;10111:22:0;;10104:29;;10047:94;:::o;29126:529::-;29335:15;27023:7;;29335:15;;-1:-1:-1;;;27023:7:0;;;;27019:102;;;27047:28;;;-1:-1:-1;;;27047:28:0;;;;;;;;;;;;-1:-1:-1;;;27047:28:0;;;;;;;;;;;;;;27019:102;29400:12;29418:20;-1:-1:-1;;;;;29418:25:0;29444:10;;29418:37;;;;;30:3:-1;22:6;14;1:33;29418:37:0;;45:16:-1;;;-1:-1;29418:37:0;;-1:-1:-1;29418:37:0;;-1:-1:-1;;29418:37: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;;29399:56:0;;;29474:7;29466:36;;;;;-1:-1:-1;;;29466:36:0;;;;;;;;;;;;-1:-1:-1;;;29466:36:0;;;;;;;;;;;;;;;29536:111;29567:20;29602:10;29627:9;29536:16;:111::i;:::-;29515:132;;;;-1:-1:-1;29126:529:0;-1:-1:-1;;;;;;;29126:529:0:o;25898:44::-;;;;;;;;;;;;;;;:::o;29971:2742::-;30181:15;19532:11;;30181:15;;19532:11;;19524:55;;;;;-1:-1:-1;;;19524:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19671:5;19657:19;;-1:-1:-1;;19657:19:0;;;;;-1:-1:-1;;;27023:7:0;;19657:19;27023:7;27019:102;;;27047:28;;;-1:-1:-1;;;27047:28:0;;;;;;;;;;;;-1:-1:-1;;;27047:28:0;;;;;;;;;;;;;;27019:102;30268:20;-1:-1:-1;;;;;30324:27:0;;30302:109;;;;;-1:-1:-1;;;30302:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30448:14;30465:4;-1:-1:-1;;;;;30465:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30465:13:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30465:13:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30465:13:0;30506;;;-1:-1:-1;;;30506:13:0;;;;30465;;-1:-1:-1;30489:14:0;;-1:-1:-1;;;;;30506:11:0;;;;;:13;;;;;30465;;30506;;;;;;;:11;:13;;;5:2:-1;;;;30:1;27;20:12;5:2;30506:13:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30506:13:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30506:13:0;;-1:-1:-1;30558:20:0;30592:65;-1:-1:-1;;;;;30592:26:0;;30619:10;30639:4;30646:10;30592:65;:26;:65;:::i;:::-;30670:59;-1:-1:-1;;;;;30670:21:0;;26618:42;30718:10;30670:59;:21;:59;:::i;:::-;-1:-1:-1;;;;;30746:26:0;;26738:42;30746:26;;:56;;-1:-1:-1;;;;;;30776:26:0;;26738:42;30776:26;30746:56;30742:1818;;;30819:14;-1:-1:-1;;;;;30836:26:0;;26738:42;30836:26;:44;;30874:6;30836:44;;;30865:6;30836:44;30916:202;;;-1:-1:-1;;;30916:202:0;;-1:-1:-1;;;;;30916:202:0;;;;;;;;;;;;31023:1;30916:202;;;;;;;;;;31071:4;30916:202;;;;-1:-1:-1;;;30916:202:0;;;;;;30819:61;;-1:-1:-1;26618:42:0;;30916:34;;:202;;;;;;;;;;;;;-1:-1:-1;26618:42:0;30916:202;;;5:2:-1;;;;30:1;27;20:12;5:2;30916:202:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30916:202:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30916:202:0;;;;;;;;;-1:-1:-1;30916:202:0;-1:-1:-1;31169:21:0;31193:111;31229:6;30916:202;31280:9;31193:17;:111::i;:::-;31169:135;;31319:19;31341:115;26346:42;31406:7;31432:9;31341:17;:115::i;:::-;31319:137;-1:-1:-1;31501:67:0;31529:10;31541:26;:7;31553:13;31541:26;:11;:26;:::i;:::-;-1:-1:-1;;;;;31501:27:0;;;:67;;:27;:67;:::i;:::-;31583:55;31601:10;31613:24;:7;31625:11;31613:24;:11;:24;:::i;:::-;31583:17;:55::i;:::-;30742:1818;;;;;;31692:224;;;-1:-1:-1;;;31692:224:0;;-1:-1:-1;;;;;31692:224:0;;;;;;;;;;;;;;;;;;;31821:1;31692:224;;;;;;;;;;31869:4;31692:224;;;;-1:-1:-1;;;31692:224:0;;;;;;26618:42;;31692:31;;:224;;;;;;;;;;;-1:-1:-1;26618:42:0;31692:224;;;5:2:-1;;;;30:1;27;20:12;5:2;31692:224:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31692:224:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31692:224:0;;;;;;;;;-1:-1:-1;31692:224:0;-1:-1:-1;31967:22:0;31992:111;32028:6;31692:224;32079:9;31992:17;:111::i;:::-;31967:136;;32118:22;32143:111;32179:6;32204:7;32230:9;32143:17;:111::i;:::-;32118:136;-1:-1:-1;32299:117:0;32345:10;32374:27;:7;32386:14;32374:27;:11;:27;:::i;:::-;-1:-1:-1;;;;;32299:27:0;;;:117;;:27;:117;:::i;:::-;32431;32477:10;32506:27;:7;32518:14;32506:27;:11;:27;:::i;:::-;-1:-1:-1;;;;;32431:27:0;;;:117;;:27;:117;:::i;:::-;30742:1818;;;32575:57;;;32582:10;32575:57;;-1:-1:-1;;;;;32575:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32648;;;32655:10;32648:57;;-1:-1:-1;;;;;32648:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27108:1;;;;19837:11;:18;;-1:-1:-1;;19837:18:0;19851:4;19837:18;;;29971:2742;;;;-1:-1:-1;29971:2742:0;-1:-1:-1;;29971:2742:0:o;10787:109::-;9893:9;:7;:9::i;:::-;9885:54;;;;;-1:-1:-1;;;9885:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9885:54:0;;;;;;;;;;;;;;;10860:28;10879:8;10860:18;:28::i;:::-;10787:109;:::o;40739:153::-;9893:9;:7;:9::i;:::-;9885:54;;;;;-1:-1:-1;;;9885:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9885:54:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;40851:24:0;;;;;;;;:12;:24;;;;;:33;;-1:-1:-1;;40851:33:0;;;;;;;;;;40739:153::o;3262:136::-;3320:7;3347:43;3351:1;3354;3347:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;3340:50;;3262:136;;;;;:::o;17042:445::-;17171:6;17146:21;:31;;17124:110;;;;;-1:-1:-1;;;17124:110:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;17321:32;;17303:12;;-1:-1:-1;;;;;17321:14:0;;;17342:6;;17303:12;17321:32;17303:12;17321:32;17342:6;17321: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;;17302:51:0;;;17386:7;17364:115;;;;-1:-1:-1;;;17364:115:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20517:247;20687:58;;;-1:-1:-1;;;;;20687:58:0;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;20687:58:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;20634:122:0;;20667:5;;20634:18;:122::i;34950:950::-;35062:15;;35149:20;-1:-1:-1;;;;;35205:27:0;;35183:109;;;;;-1:-1:-1;;;35183:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35305:14;35322:4;-1:-1:-1;;;;;35322:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35322:13:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35322:13:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;35322:13:0;35363;;;-1:-1:-1;;;35363:13:0;;;;35322;;-1:-1:-1;35346:14:0;;-1:-1:-1;;;;;35363:11:0;;;;;:13;;;;;35322;;35363;;;;;;;:11;:13;;;5:2:-1;;;;30:1;27;20:12;5:2;35363:13:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35363:13:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;35363:13:0;;-1:-1:-1;35415:20:0;35449:65;-1:-1:-1;;;;;35449:26:0;;35476:10;35496:4;35503:10;35449:65;:26;:65;:::i;:::-;35527:59;-1:-1:-1;;;;;35527:21:0;;26618:42;35575:10;35527:59;:21;:59;:::i;:::-;35620:192;;;-1:-1:-1;;;35620:192:0;;-1:-1:-1;;;;;35620:192:0;;;;;;;;;;;;;;;;;;;35733:1;35620:192;;;;;;;;;;35773:4;35620:192;;;;-1:-1:-1;;;35620:192:0;;;;;;26618:42;;35620:31;;:192;;;;;;;;;;;-1:-1:-1;26618:42:0;35620:192;;;5:2:-1;;;;30:1;27;20:12;5:2;35620:192:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35620:192:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;35620:192:0;;;;;;;;;-1:-1:-1;35620:192:0;-1:-1:-1;35831:11:0;;;;;:26;;;35856:1;35846:7;:11;35831:26;35823:69;;;;;-1:-1:-1;;;35823:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;34950:950;;;;;;;;;:::o;35908:1118::-;36176:20;36209:14;36241:20;-1:-1:-1;;;;;36226:43:0;;:45;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36226:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36226:45:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36226:45:0;36299;;;-1:-1:-1;;;36299:45:0;;;;36226;;-1:-1:-1;36282:14:0;;-1:-1:-1;;;;;36299:43:0;;;;;:45;;;;;36226;;36299;;;;;;;:43;:45;;;5:2:-1;;;;30:1;27;20:12;5:2;36299:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36299:45:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36299:45:0;;-1:-1:-1;;;;;;36395:17:0;;;;;;;36391:291;;;36444:25;:12;36461:7;36444:25;:16;:25;:::i;:::-;36429:40;;36391:291;;;36557:113;36592:63;36603:6;36611:7;36620;36629:11;36641:1;36629:14;;;;;;;;;;;;;;36645:9;36592:10;:63::i;:::-;36557:12;;:113;:16;:113;:::i;:::-;36542:128;;36391:291;36742:7;-1:-1:-1;;;;;36732:17:0;:6;-1:-1:-1;;;;;36732:17:0;;36728:291;;;36781:25;:12;36798:7;36781:25;:16;:25;:::i;:::-;36766:40;;36728:291;;;36894:113;36929:63;36940:6;36948:7;36957;36966:11;36978:1;36966:14;;;;;;;;;;;;;;36982:9;36929:10;:63::i;36894:113::-;36879:128;;36728:291;35908:1118;;;;;;;;;;;:::o;39476:887::-;39678:10;39605:28;39665:24;;;:12;:24;;;;;;;;39704:12;;:28;;;;;39731:1;39720:8;;:12;39704:28;39700:656;;;39772:100;39803:30;39816:6;39824:8;;39803:12;:30::i;:::-;39852:5;39772:12;:100::i;:::-;-1:-1:-1;;;;;39893:21:0;;;;;;:10;:21;;;;;;39749:123;;-1:-1:-1;39893:21:0;;39889:456;;;39935:24;39962:93;40051:3;39962:62;40009:14;;39962:20;:46;;:62;;;;:::i;:::-;:88;:93;:88;:93;:::i;:::-;-1:-1:-1;;;;;40111:27:0;;;;;;;:16;:27;;;;;;;;:34;;;;;;;;;;39935:120;;-1:-1:-1;40111:78:0;;39935:120;40111:78;:60;:78;:::i;:::-;-1:-1:-1;;;;;40074:27:0;;;;;;;:16;:27;;;;;;;;:34;;;;;;;;;;;:115;;;;40239:21;:28;;;;;;:90;;40294:16;40239:90;:32;:90;:::i;:::-;-1:-1:-1;;;;;40208:28:0;;;;;;:21;:28;;;;;:121;-1:-1:-1;39889:456:0;39476:887;;;;;;:::o;15906:159::-;16048:7;15906:159::o;4212:471::-;4270:7;4515:6;4511:47;;-1:-1:-1;4545:1:0;4538:8;;4511:47;4582:5;;;4586:1;4582;:5;:1;4606:5;;;;;:10;4598:56;;;;-1:-1:-1;;;4598:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8363:98;8443:10;8363:98;:::o;20772:284::-;20969:68;;;-1:-1:-1;;;;;20969:68:0;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;20969:68:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;20916:132:0;;20949:5;;20916:18;:132::i;21064:706::-;21482:10;;;21481:62;;-1:-1:-1;21498:39:0;;;-1:-1:-1;;;21498:39:0;;21522:4;21498:39;;;;-1:-1:-1;;;;;21498:39:0;;;;;;;;;:15;;;;;;:39;;;;;;;;;;;;;;;:15;:39;;;5:2:-1;;;;30:1;27;20:12;5:2;21498:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21498:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21498:39:0;:44;21481:62;21459:166;;;;-1:-1:-1;;;21459:166:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21689:62;;;-1:-1:-1;;;;;21689:62:0;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;21689:62:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;21636:126:0;;21669:5;;21636:18;:126::i;11002:266::-;-1:-1:-1;;;;;11090:22:0;;11068:110;;;;-1:-1:-1;;;11068:110:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11215:6;;;11194:38;;-1:-1:-1;;;;;11194:38:0;;;;11215:6;;;;;;11194:38;;;11243:6;:17;;-1:-1:-1;;;;;11243:17:0;;;;;-1:-1:-1;;;;;;11243:17:0;;;;;;;;;11002:266::o;3735:226::-;3855:7;3891:12;3883:6;;;;3875:29;;;;-1:-1:-1;;;3875:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;3875:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;3927:5:0;;;3735:226::o;23127:1176::-;23731:27;23739:5;-1:-1:-1;;;;;23731:25:0;;:27::i;:::-;23723:71;;;;;-1:-1:-1;;;23723:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;23868:12;23882:23;23917:5;-1:-1:-1;;;;;23909:19:0;23929:4;23909: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;;;23909: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;;23867:67:0;;;;23953:7;23945:52;;;;;-1:-1:-1;;;23945:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24014:17;;:21;24010:286;;24187:10;24176:30;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24176:30:0;24150:134;;;;-1:-1:-1;;;24150:134:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2806:181;2864:7;2896:5;;;2920:6;;;;2912:46;;;;;-1:-1:-1;;;2912:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;37034:1286;37226:7;;-1:-1:-1;;;;;37282:36:0;;26738:42;37282:36;:61;;;;-1:-1:-1;;;;;;37322:21:0;;;37282:61;37278:162;;;26738:42;-1:-1:-1;;;;;37360:32:0;;37393:6;37360:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37360:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37360:40:0;;;;37422:6;37415:13;;;;;37278:162;-1:-1:-1;;;;;37456:30:0;;37452:284;;-1:-1:-1;37517:6:0;37452:284;;;37582:16;37614:45;-1:-1:-1;;;;;37614:21:0;;37644:10;37556:16;37614:45;:21;:45;:::i;:::-;37674:50;-1:-1:-1;;;;;37674:21:0;;37704:10;37717:6;37674:50;:21;:50;:::i;:::-;37452:284;;37748:22;-1:-1:-1;;;;;37773:21:0;;;:114;;37847:40;;;-1:-1:-1;;;37847:40:0;;37881:4;37847:40;;;;;;-1:-1:-1;;;;;37847:25:0;;;;;:40;;;;;;;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;37847:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37847:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;37847:40:0;37773:114;;;37810:21;37773:114;37748:139;;37901:12;37919:10;-1:-1:-1;;;;;37919:15:0;37941:11;37954:8;37919:44;;;;;;;;;;;;;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;;;37919:44: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;;37900:63:0;;;37982:7;37974:41;;;;;-1:-1:-1;;;37974:41:0;;;;;;;;;;;;-1:-1:-1;;;37974:41:0;;;;;;;;;;;;;;;38028:20;-1:-1:-1;;;;;38051:21:0;;;:156;;38147:40;;;-1:-1:-1;;;38147:40:0;;38181:4;38147:40;;;;;;:60;;38192:14;;-1:-1:-1;;;;;38147:25:0;;;;;:40;;;;;;;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;38147:60:0;38051:156;;;38088:43;38089:21;38116:14;38088:43;:27;:43;:::i;:::-;38028:179;;38243:1;38228:12;:16;38220:60;;;;;-1:-1:-1;;;38220:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;38300:12;-1:-1:-1;;;;37034:1286:0;;;;;;;;:::o;5151:132::-;5209:7;5236:39;5240:1;5243;5236:39;;;;;;;;;;;;;;;;;:3;:39::i;15030:659::-;15090:4;15589:20;;15419:66;15638:23;;;;;;:42;;-1:-1:-1;15665:15:0;;;15638:42;15630:51;15030:659;-1:-1:-1;;;;15030:659:0:o;5813:379::-;5933:7;6035:12;6028:5;6020:28;;;;-1:-1:-1;;;6020:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;6020:28:0;;6059:9;6075:1;6071;:5;;;;;;;5813:379;-1:-1:-1;;;;;5813:379:0:o
Swarm Source
bzzr://4ee3b3d91d5d9c0aafd0370853ef89e2fbbb2559cc91eb91d89f3e6a3aec11d1
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 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.