Overview
ETH Balance
0 ETH
Eth Value
$0.00Token Holdings
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 5,744 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Zap Out With Per... | 13677218 | 1125 days ago | IN | 0 ETH | 0.00519629 | ||||
Zap Out With Per... | 13677205 | 1125 days ago | IN | 0 ETH | 0.00538939 | ||||
Renounce Ownersh... | 12654951 | 1285 days ago | IN | 0 ETH | 0.00050711 | ||||
Zap Out With Per... | 12589784 | 1295 days ago | IN | 0 ETH | 0.00794757 | ||||
Zap Out2Pair Tok... | 12501730 | 1308 days ago | IN | 0 ETH | 0.00081744 | ||||
Zap Out2Pair Tok... | 12501723 | 1308 days ago | IN | 0 ETH | 0.0008178 | ||||
Toggle Contract ... | 12501153 | 1308 days ago | IN | 0 ETH | 0.00122268 | ||||
Zap Out With Per... | 12501140 | 1308 days ago | IN | 0 ETH | 0.01690239 | ||||
Zap Out With Per... | 12501134 | 1308 days ago | IN | 0 ETH | 0.02261189 | ||||
Zap Out2Pair Tok... | 12501090 | 1308 days ago | IN | 0 ETH | 0.01025813 | ||||
Zap Out | 12500924 | 1309 days ago | IN | 0 ETH | 0.02641835 | ||||
Zap Out2Pair Tok... | 12500905 | 1309 days ago | IN | 0 ETH | 0.00702626 | ||||
Zap Out | 12500902 | 1309 days ago | IN | 0 ETH | 0.04662689 | ||||
Zap Out | 12500688 | 1309 days ago | IN | 0 ETH | 0.01350644 | ||||
Zap Out With Per... | 12500630 | 1309 days ago | IN | 0 ETH | 0.01722429 | ||||
Zap Out | 12500412 | 1309 days ago | IN | 0 ETH | 0.01563704 | ||||
Zap Out With Per... | 12500333 | 1309 days ago | IN | 0 ETH | 0.02088669 | ||||
Zap Out | 12500325 | 1309 days ago | IN | 0 ETH | 0.02514712 | ||||
Zap Out2Pair Tok... | 12500087 | 1309 days ago | IN | 0 ETH | 0.01159956 | ||||
Zap Out With Per... | 12500032 | 1309 days ago | IN | 0 ETH | 0.01450205 | ||||
Zap Out2Pair Tok... | 12499953 | 1309 days ago | IN | 0 ETH | 0.00815077 | ||||
Zap Out With Per... | 12499938 | 1309 days ago | IN | 0 ETH | 0.02249168 | ||||
Zap Out With Per... | 12499932 | 1309 days ago | IN | 0 ETH | 0.01265274 | ||||
Zap Out2Pair Tok... | 12499765 | 1309 days ago | IN | 0 ETH | 0.00679284 | ||||
Zap Out | 12499698 | 1309 days ago | IN | 0 ETH | 0.02336076 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
12501140 | 1308 days ago | 6.75311998 ETH | ||||
12501140 | 1308 days ago | 3.37468803 ETH | ||||
12501140 | 1308 days ago | 3.37843195 ETH | ||||
12501090 | 1308 days ago | 1.56194633 ETH | ||||
12501090 | 1308 days ago | 1.56194633 ETH | ||||
12500905 | 1309 days ago | 0.49396122 ETH | ||||
12500905 | 1309 days ago | 0.49396122 ETH | ||||
12500688 | 1309 days ago | 0.29577379 ETH | ||||
12500688 | 1309 days ago | 0.14842539 ETH | ||||
12500688 | 1309 days ago | 0.1473484 ETH | ||||
12500630 | 1309 days ago | 0.07419025 ETH | ||||
12500630 | 1309 days ago | 0.0370358 ETH | ||||
12500630 | 1309 days ago | 0.03715445 ETH | ||||
12500412 | 1309 days ago | 4.79056728 ETH | ||||
12500412 | 1309 days ago | 2.41199835 ETH | ||||
12500412 | 1309 days ago | 2.37856893 ETH | ||||
12500333 | 1309 days ago | 1.07089014 ETH | ||||
12500333 | 1309 days ago | 0.53455886 ETH | ||||
12500333 | 1309 days ago | 0.53633128 ETH | ||||
12500325 | 1309 days ago | 5.76069363 ETH | ||||
12500325 | 1309 days ago | 2.88123555 ETH | ||||
12500325 | 1309 days ago | 2.87945807 ETH | ||||
12500087 | 1309 days ago | 0.07236461 ETH | ||||
12500087 | 1309 days ago | 0.07236461 ETH | ||||
12500032 | 1309 days ago | 0.21047603 ETH |
Loading...
Loading
Contract Name:
UniswapV2_ZapOut_General_V3_0_1
Compiler Version
v0.5.17+commit.d19bba13
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-03-08 */ // ███████╗░█████╗░██████╗░██████╗░███████╗██████╗░░░░███████╗██╗ // ╚════██║██╔══██╗██╔══██╗██╔══██╗██╔════╝██╔══██╗░░░██╔════╝██║ // ░░███╔═╝███████║██████╔╝██████╔╝█████╗░░██████╔╝░░░█████╗░░██║ // ██╔══╝░░██╔══██║██╔═══╝░██╔═══╝░██╔══╝░░██╔══██╗░░░██╔══╝░░██║ // ███████╗██║░░██║██║░░░░░██║░░░░░███████╗██║░░██║██╗██║░░░░░██║ // ╚══════╝╚═╝░░╚═╝╚═╝░░░░░╚═╝░░░░░╚══════╝╚═╝░░╚═╝╚═╝╚═╝░░░░░╚═╝ // 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 Uniswap V2 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 balanceOf(address user) external view returns (uint256); 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 UniswapV2_ZapOut_General_V3_0_1 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; IUniswapV2Router02 private constant uniswapV2Router = IUniswapV2Router02( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); 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 both tokens @param FromUniPoolAddress Pool from which to remove liquidity @param IncomingLP Quantity of LP to remove from pool @param affiliate Affiliate address @return Quantity of tokens received after zapout */ function ZapOut2PairToken( address FromUniPoolAddress, uint256 IncomingLP, address affiliate ) public nonReentrant stopInEmergency returns (uint256 amountA, uint256 amountB) { IUniswapV2Pair pair = IUniswapV2Pair(FromUniPoolAddress); require(address(pair) != address(0), "Error: Invalid Unipool Address"); // get reserves address token0 = pair.token0(); address token1 = pair.token1(); IERC20 uniPool = IERC20(FromUniPoolAddress); uniPool.safeTransferFrom(msg.sender, address(this), IncomingLP); uniPool.safeApprove(address(uniswapV2Router), IncomingLP); if (token0 == wethTokenAddress || token1 == wethTokenAddress) { address _token = token0 == wethTokenAddress ? token1 : token0; (amountA, amountB) = uniswapV2Router.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) = uniswapV2Router.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, FromUniPoolAddress, token0, amountA); emit zapOut(msg.sender, FromUniPoolAddress, token1, amountB); } /** @notice Zap out in a single token @param ToTokenContractAddress Address of desired token @param FromUniPoolAddress 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 FromUniPoolAddress, uint256 IncomingLP, uint256 minTokensRec, address[] memory swapTargets, bytes memory swap1Data, bytes memory swap2Data, address affiliate ) public nonReentrant stopInEmergency returns (uint256 tokensRec) { (uint256 amountA, uint256 amountB) = _removeLiquidity( FromUniPoolAddress, IncomingLP ); //swaps tokens to token tokensRec = _swapTokens( FromUniPoolAddress, amountA, amountB, ToTokenContractAddress, swapTargets, swap1Data, swap2Data ); require(tokensRec >= minTokensRec, "High slippage"); uint256 totalGoodwillPortion; // transfer toTokens to sender if (ToTokenContractAddress == address(0)) { totalGoodwillPortion = _subtractGoodwill( ETHAddress, tokensRec, affiliate ); msg.sender.transfer(tokensRec.sub(totalGoodwillPortion)); } else { totalGoodwillPortion = _subtractGoodwill( ToTokenContractAddress, tokensRec, affiliate ); IERC20(ToTokenContractAddress).safeTransfer( msg.sender, tokensRec.sub(totalGoodwillPortion) ); } tokensRec = tokensRec.sub(totalGoodwillPortion); emit zapOut( msg.sender, FromUniPoolAddress, ToTokenContractAddress, tokensRec ); return tokensRec; } /** @notice Zap out in both tokens with permit @param FromUniPoolAddress 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 FromUniPoolAddress, uint256 IncomingLP, address affiliate, bytes calldata permitData ) external stopInEmergency returns (uint256 amountA, uint256 amountB) { // permit (bool success, ) = FromUniPoolAddress.call(permitData); require(success, "Could Not Permit"); (amountA, amountB) = ZapOut2PairToken( FromUniPoolAddress, IncomingLP, affiliate ); } /** @notice Zap out in a signle token with permit @param ToTokenContractAddress indicates the toToken address to which tokens to convert. @param FromUniPoolAddress indicates the liquidity pool @param IncomingLP indicates the amount of LP to remove from pool @param minTokensRec indicatest the minimum amount of toTokens to receive @param permitData indicates the encoded permit data, which contains owner, spender, value, deadline, v,r,s values. @param swapTargets indicates the execution target for swap. @param swap1Data DEX swap data @param swap2Data DEX swap data @param affiliate Affiliate address */ function ZapOutWithPermit( address ToTokenContractAddress, address FromUniPoolAddress, uint256 IncomingLP, uint256 minTokensRec, bytes memory permitData, address[] memory swapTargets, bytes memory swap1Data, bytes memory swap2Data, address affiliate ) public stopInEmergency returns (uint256) { // permit (bool success, ) = FromUniPoolAddress.call(permitData); require(success, "Could Not Permit"); return ( ZapOut( ToTokenContractAddress, FromUniPoolAddress, IncomingLP, minTokensRec, swapTargets, swap1Data, swap2Data, affiliate ) ); } function _removeLiquidity(address FromUniPoolAddress, uint256 IncomingLP) internal returns (uint256 amountA, uint256 amountB) { IUniswapV2Pair pair = IUniswapV2Pair(FromUniPoolAddress); require(address(pair) != address(0), "Error: Invalid Unipool Address"); address token0 = pair.token0(); address token1 = pair.token1(); IERC20(FromUniPoolAddress).safeTransferFrom( msg.sender, address(this), IncomingLP ); IERC20(FromUniPoolAddress).safeApprove( address(uniswapV2Router), IncomingLP ); (amountA, amountB) = uniswapV2Router.removeLiquidity( token0, token1, IncomingLP, 1, 1, address(this), deadline ); require(amountA > 0 && amountB > 0, "Removed insufficient Liquidity"); } function _swapTokens( address FromUniPoolAddress, uint256 amountA, uint256 amountB, address toToken, address[] memory swapTargets, bytes memory swap1Data, bytes memory swap2Data ) internal returns (uint256 tokensBought) { address token0 = IUniswapV2Pair(FromUniPoolAddress).token0(); address token1 = IUniswapV2Pair(FromUniPoolAddress).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 FromUniPoolAddress 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 FromUniPoolAddress, uint256 liquidity ) external view returns ( uint256 amountA, uint256 amountB, address token0, address token1 ) { IUniswapV2Pair pair = IUniswapV2Pair(FromUniPoolAddress); token0 = pair.token0(); token1 = pair.token1(); uint256 balance0 = IERC20(token0).balanceOf(FromUniPoolAddress); uint256 balance1 = IERC20(token1).balanceOf(FromUniPoolAddress); 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":"FromUniPoolAddress","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":"tokensRec","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"FromUniPoolAddress","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":"FromUniPoolAddress","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":"FromUniPoolAddress","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":"FromUniPoolAddress","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
60806040526000805460ff60a81b191690553480156200001e57600080fd5b506040516200327138038062003271833981810160405260408110156200004457600080fd5b5080516020909101516000805460ff191660011781556200006d6001600160e01b03620000ce16565b60008054610100600160a81b0319166101006001600160a01b038416908102919091178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600191909155600355620000d2565b3390565b61318f80620000e26000396000f3fe6080604052600436106101355760003560e01c80635ecb16cd116100ab5780638f32d59b1161006f5780638f32d59b1461091c578063cfd7789c14610931578063d408f657146109e4578063f21d3ab514610a17578063f2fde38b14610a5a578063fbec27bf14610a8d57610135565b80635ecb16cd146107de578063715018a61461085957806375f12b211461086e5780637ee99283146108835780638da5cb5b146108eb57610135565b80632753c8f6116100fd5780632753c8f6146102c65780633ff428c7146104af5780634f51e294146104ea578063542cdf0214610531578063550bfa561461079f5780635de0398e146107c957610135565b806301e980d41461018c5780630dc9de85146101b65780631385d24c146102315780631781261f1461024657806318b135e314610293575b3332141561018a576040805162461bcd60e51b815260206004820152601860248201527f446f206e6f742073656e6420455448206469726563746c790000000000000000604482015290519081900360640190fd5b005b34801561019857600080fd5b5061018a600480360360208110156101af57600080fd5b5035610ac8565b3480156101c257600080fd5b5061018a600480360360208110156101d957600080fd5b810190602081018135600160201b8111156101f357600080fd5b82018360208201111561020557600080fd5b803590602001918460208302840111600160201b8311171561022657600080fd5b509092509050610b54565b34801561023d57600080fd5b5061018a610d34565b34801561025257600080fd5b506102816004803603604081101561026957600080fd5b506001600160a01b0381358116916020013516610d9c565b60408051918252519081900360200190f35b34801561029f57600080fd5b50610281600480360360208110156102b657600080fd5b50356001600160a01b0316610db9565b3480156102d257600080fd5b5061028160048036036101008110156102ea57600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135600160201b81111561032957600080fd5b82018360208201111561033b57600080fd5b803590602001918460208302840111600160201b8311171561035c57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156103ab57600080fd5b8201836020820111156103bd57600080fd5b803590602001918460018302840111600160201b831117156103de57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561043057600080fd5b82018360208201111561044257600080fd5b803590602001918460018302840111600160201b8311171561046357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550505090356001600160a01b03169150610dcb9050565b3480156104bb57600080fd5b5061018a600480360360408110156104d257600080fd5b506001600160a01b0381351690602001351515611012565b3480156104f657600080fd5b5061051d6004803603602081101561050d57600080fd5b50356001600160a01b0316611084565b604080519115158252519081900360200190f35b34801561053d57600080fd5b50610281600480360361012081101561055557600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135600160201b81111561059457600080fd5b8201836020820111156105a657600080fd5b803590602001918460018302840111600160201b831117156105c757600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561061957600080fd5b82018360208201111561062b57600080fd5b803590602001918460208302840111600160201b8311171561064c57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561069b57600080fd5b8201836020820111156106ad57600080fd5b803590602001918460018302840111600160201b831117156106ce57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561072057600080fd5b82018360208201111561073257600080fd5b803590602001918460018302840111600160201b8311171561075357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550505090356001600160a01b031691506110999050565b3480156107ab57600080fd5b5061018a600480360360208110156107c257600080fd5b50356111f9565b3480156107d557600080fd5b5061028161129b565b3480156107ea57600080fd5b5061018a6004803603602081101561080157600080fd5b810190602081018135600160201b81111561081b57600080fd5b82018360208201111561082d57600080fd5b803590602001918460208302840111600160201b8311171561084e57600080fd5b5090925090506112a1565b34801561086557600080fd5b5061018a6114a4565b34801561087a57600080fd5b5061051d61153a565b34801561088f57600080fd5b506108bc600480360360408110156108a657600080fd5b506001600160a01b03813516906020013561154a565b6040805194855260208501939093526001600160a01b0391821684840152166060830152519081900360800190f35b3480156108f757600080fd5b506109006117d9565b604080516001600160a01b039092168252519081900360200190f35b34801561092857600080fd5b5061051d6117ed565b34801561093d57600080fd5b506109cb6004803603608081101561095457600080fd5b6001600160a01b038235811692602081013592604082013590921691810190608081016060820135600160201b81111561098d57600080fd5b82018360208201111561099f57600080fd5b803590602001918460018302840111600160201b831117156109c057600080fd5b509092509050611816565b6040805192835260208301919091528051918290030190f35b3480156109f057600080fd5b5061051d60048036036020811015610a0757600080fd5b50356001600160a01b0316611933565b348015610a2357600080fd5b506109cb60048036036060811015610a3a57600080fd5b506001600160a01b03813581169160208101359160409091013516611948565b348015610a6657600080fd5b5061018a60048036036020811015610a7d57600080fd5b50356001600160a01b0316611f20565b348015610a9957600080fd5b5061018a60048036036040811015610ab057600080fd5b506001600160a01b0381351690602001351515611f73565b610ad06117ed565b610b0f576040805162461bcd60e51b815260206004820181905260248201526000805160206130db833981519152604482015290519081900360640190fd5b6064811115610b4f5760405162461bcd60e51b81526004018080602001828103825260218152602001806130ba6021913960400191505060405180910390fd5b600355565b6000805b82811015610d2e5733600090815260056020526040812090858584818110610b7c57fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020549150600060056000336001600160a01b03166001600160a01b031681526020019081526020016000206000868685818110610be457fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002081905550610c6b8260066000878786818110610c2c57fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002054611fe590919063ffffffff16565b60066000868685818110610c7b57fe5b602090810292909201356001600160a01b03168352508101919091526040016000205573eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee848483818110610cbf57fe5b905060200201356001600160a01b03166001600160a01b03161415610ced57610ce83383612030565b610d26565b610d263383868685818110610cfe57fe5b905060200201356001600160a01b03166001600160a01b03166121159092919063ffffffff16565b600101610b58565b50505050565b610d3c6117ed565b610d7b576040805162461bcd60e51b815260206004820181905260248201526000805160206130db833981519152604482015290519081900360640190fd5b6000805460ff60a81b198116600160a81b9182900460ff1615909102179055565b600560209081526000928352604080842090915290825290205481565b60066020526000908152604090205481565b6000805460ff16610e23576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6000805460ff191690819055600160a81b900460ff1615610e80576040805162461bcd60e51b815260206004820152601260248201527115195b5c1bdc985c9a5b1e4814185d5cd95960721b604482015290519081900360640190fd5b600080610e8d8a8a612167565b91509150610ea08a83838e8b8b8b612411565b925087831015610ee7576040805162461bcd60e51b815260206004820152600d60248201526c4869676820736c69707061676560981b604482015290519081900360640190fd5b60006001600160a01b038c16610f5a57610f1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee85876125b1565b9050336108fc610f2c868463ffffffff611fe516565b6040518115909202916000818181858888f19350505050158015610f54573d6000803e3d6000fd5b50610f92565b610f658c85876125b1565b9050610f9233610f7b868463ffffffff611fe516565b6001600160a01b038f16919063ffffffff61211516565b610fa2848263ffffffff611fe516565b604080513381526001600160a01b03808f1660208301528f16818301526060810183905290519195507ff2d3e32195f8631c70e1d996c9bd5d4a3369d0580786dcd662bf13139310355d919081900360800190a15050506000805460ff1916600117905598975050505050505050565b61101a6117ed565b611059576040805162461bcd60e51b815260206004820181905260248201526000805160206130db833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600460205260409020805460ff1916911515919091179055565b60046020526000908152604090205460ff1681565b60008054600160a81b900460ff16156110ee576040805162461bcd60e51b815260206004820152601260248201527115195b5c1bdc985c9a5b1e4814185d5cd95960721b604482015290519081900360640190fd5b6000896001600160a01b0316876040518082805190602001908083835b6020831061112a5780518252601f19909201916020918201910161110b565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461118c576040519150601f19603f3d011682016040523d82523d6000602084013e611191565b606091505b50509050806111da576040805162461bcd60e51b815260206004820152601060248201526f10dbdd5b1908139bdd0814195c9b5a5d60821b604482015290519081900360640190fd5b6111ea8b8b8b8b8a8a8a8a610dcb565b9b9a5050505050505050505050565b6112016117ed565b611240576040805162461bcd60e51b815260206004820181905260248201526000805160206130db833981519152604482015290519081900360640190fd5b6064811115611296576040805162461bcd60e51b815260206004820152601a60248201527f476f6f6457696c6c2056616c7565206e6f7420616c6c6f776564000000000000604482015290519081900360640190fd5b600155565b60015481565b6112a96117ed565b6112e8576040805162461bcd60e51b815260206004820181905260248201526000805160206130db833981519152604482015290519081900360640190fd5b60005b8181101561149f57600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee84848481811061131657fe5b905060200201356001600160a01b03166001600160a01b031614156113a8576113886006600086868681811061134857fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b031681526020019081526020016000205447611fe590919063ffffffff16565b90506113a361139d6113986117d9565b6126db565b82612030565b611496565b61147c600660008686868181106113bb57fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020548585858181106113f857fe5b604080516370a0823160e01b81523060048201529051602092830294909401356001600160a01b0316936370a08231935060248083019392829003018186803b15801561144457600080fd5b505afa158015611458573d6000803e3d6000fd5b505050506040513d602081101561146e57600080fd5b50519063ffffffff611fe516565b90506114966114896117d9565b82868686818110610cfe57fe5b506001016112eb565b505050565b6114ac6117ed565b6114eb576040805162461bcd60e51b815260206004820181905260248201526000805160206130db833981519152604482015290519081900360640190fd5b600080546040516101009091046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360008054610100600160a81b0319169055565b600054600160a81b900460ff1681565b6000806000806000869050806001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561158e57600080fd5b505afa1580156115a2573d6000803e3d6000fd5b505050506040513d60208110156115b857600080fd5b50516040805163d21220a760e01b815290519194506001600160a01b0383169163d21220a791600480820192602092909190829003018186803b1580156115fe57600080fd5b505afa158015611612573d6000803e3d6000fd5b505050506040513d602081101561162857600080fd5b5051604080516370a0823160e01b81526001600160a01b038a811660048301529151929450600092918616916370a0823191602480820192602092909190829003018186803b15801561167a57600080fd5b505afa15801561168e573d6000803e3d6000fd5b505050506040513d60208110156116a457600080fd5b5051604080516370a0823160e01b81526001600160a01b038b811660048301529151929350600092918616916370a0823191602480820192602092909190829003018186803b1580156116f657600080fd5b505afa15801561170a573d6000803e3d6000fd5b505050506040513d602081101561172057600080fd5b5051604080516318160ddd60e01b815290519192506000916001600160a01b038616916318160ddd916004808301926020929190829003018186803b15801561176857600080fd5b505afa15801561177c573d6000803e3d6000fd5b505050506040513d602081101561179257600080fd5b50519050806117a78a8563ffffffff6126de16565b816117ae57fe5b049750806117c28a8463ffffffff6126de16565b816117c957fe5b0496505050505092959194509250565b60005461010090046001600160a01b031690565b6000805461010090046001600160a01b0316611807612737565b6001600160a01b031614905090565b600080548190600160a81b900460ff161561186d576040805162461bcd60e51b815260206004820152601260248201527115195b5c1bdc985c9a5b1e4814185d5cd95960721b604482015290519081900360640190fd5b6000876001600160a01b03168585604051808383808284376040519201945060009350909150508083038183865af19150503d80600081146118cb576040519150601f19603f3d011682016040523d82523d6000602084013e6118d0565b606091505b5050905080611919576040805162461bcd60e51b815260206004820152601060248201526f10dbdd5b1908139bdd0814195c9b5a5d60821b604482015290519081900360640190fd5b611924888888611948565b90999098509650505050505050565b60026020526000908152604090205460ff1681565b60008054819060ff166119a2576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6000805460ff191690819055600160a81b900460ff16156119ff576040805162461bcd60e51b815260206004820152601260248201527115195b5c1bdc985c9a5b1e4814185d5cd95960721b604482015290519081900360640190fd5b846001600160a01b038116611a5b576040805162461bcd60e51b815260206004820152601e60248201527f4572726f723a20496e76616c696420556e69706f6f6c20416464726573730000604482015290519081900360640190fd5b6000816001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015611a9657600080fd5b505afa158015611aaa573d6000803e3d6000fd5b505050506040513d6020811015611ac057600080fd5b50516040805163d21220a760e01b815290519192506000916001600160a01b0385169163d21220a7916004808301926020929190829003018186803b158015611b0857600080fd5b505afa158015611b1c573d6000803e3d6000fd5b505050506040513d6020811015611b3257600080fd5b5051905087611b526001600160a01b03821633308b63ffffffff61273b16565b611b806001600160a01b038216737a250d5630b4cf539739df2c5dacb4c659f2488d8a63ffffffff61279516565b6001600160a01b03831673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc21480611bc757506001600160a01b03821673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2145b15611d315760006001600160a01b03841673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc214611bf85783611bfa565b825b60408051629d473b60e21b81526001600160a01b0383166004820152602481018c90526001604482018190526064820152306084820152600f60fc1b60a48201528151929350737a250d5630b4cf539739df2c5dacb4c659f2488d926302751cec9260c4808401939192918290030181600087803b158015611c7b57600080fd5b505af1158015611c8f573d6000803e3d6000fd5b505050506040513d6040811015611ca557600080fd5b50805160209091015190975095506000611cc082898b6125b1565b90506000611ce373eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee898c6125b1565b9050611d1033611cf98b8563ffffffff611fe516565b6001600160a01b038616919063ffffffff61211516565b611d2933611d248a8463ffffffff611fe516565b612030565b505050611e65565b60408051635d5155ef60e11b81526001600160a01b03858116600483015284166024820152604481018a905260016064820181905260848201523060a4820152600f60fc1b60c48201528151737a250d5630b4cf539739df2c5dacb4c659f2488d9263baa2abde9260e480820193918290030181600087803b158015611db657600080fd5b505af1158015611dca573d6000803e3d6000fd5b505050506040513d6040811015611de057600080fd5b50805160209091015190965094506000611dfb84888a6125b1565b90506000611e0a84888b6125b1565b9050611e3733611e208a8563ffffffff611fe516565b6001600160a01b038816919063ffffffff61211516565b611e6233611e4b898463ffffffff611fe516565b6001600160a01b038716919063ffffffff61211516565b50505b604080513381526001600160a01b03808c1660208301528516818301526060810188905290517ff2d3e32195f8631c70e1d996c9bd5d4a3369d0580786dcd662bf13139310355d9181900360800190a1604080513381526001600160a01b03808c1660208301528416818301526060810187905290517ff2d3e32195f8631c70e1d996c9bd5d4a3369d0580786dcd662bf13139310355d9181900360800190a1505050506000805460ff191660011790559094909350915050565b611f286117ed565b611f67576040805162461bcd60e51b815260206004820181905260248201526000805160206130db833981519152604482015290519081900360640190fd5b611f70816128a8565b50565b611f7b6117ed565b611fba576040805162461bcd60e51b815260206004820181905260248201526000805160206130db833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600260205260409020805460ff1916911515919091179055565b600061202783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612953565b90505b92915050565b80471015612085576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015290519081900360640190fd5b6040516000906001600160a01b0384169083908381818185875af1925050503d80600081146120d0576040519150601f19603f3d011682016040523d82523d6000602084013e6120d5565b606091505b505090508061149f5760405162461bcd60e51b815260040180806020018281038252603a81526020018061305f603a913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261149f9084906129ea565b600080836001600160a01b0381166121c6576040805162461bcd60e51b815260206004820152601e60248201527f4572726f723a20496e76616c696420556e69706f6f6c20416464726573730000604482015290519081900360640190fd5b6000816001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561220157600080fd5b505afa158015612215573d6000803e3d6000fd5b505050506040513d602081101561222b57600080fd5b50516040805163d21220a760e01b815290519192506000916001600160a01b0385169163d21220a7916004808301926020929190829003018186803b15801561227357600080fd5b505afa158015612287573d6000803e3d6000fd5b505050506040513d602081101561229d57600080fd5b505190506122bc6001600160a01b03881633308963ffffffff61273b16565b6122ea6001600160a01b038816737a250d5630b4cf539739df2c5dacb4c659f2488d8863ffffffff61279516565b60408051635d5155ef60e11b81526001600160a01b038481166004830152831660248201526044810188905260016064820181905260848201523060a4820152600f60fc1b60c48201528151737a250d5630b4cf539739df2c5dacb4c659f2488d9263baa2abde9260e480820193918290030181600087803b15801561236f57600080fd5b505af1158015612383573d6000803e3d6000fd5b505050506040513d604081101561239957600080fd5b508051602090910151909550935084158015906123b65750600084115b612407576040805162461bcd60e51b815260206004820152601e60248201527f52656d6f76656420696e73756666696369656e74204c69717569646974790000604482015290519081900360640190fd5b5050509250929050565b600080886001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561244d57600080fd5b505afa158015612461573d6000803e3d6000fd5b505050506040513d602081101561247757600080fd5b50516040805163d21220a760e01b815290519192506000916001600160a01b038c169163d21220a7916004808301926020929190829003018186803b1580156124bf57600080fd5b505afa1580156124d3573d6000803e3d6000fd5b505050506040513d60208110156124e957600080fd5b505190506001600160a01b03828116908816141561251857612511838a63ffffffff612ba216565b925061254c565b61254961253c83898c8a60008151811061252e57fe5b60200260200101518a612bfc565b849063ffffffff612ba216565b92505b866001600160a01b0316816001600160a01b0316141561257d57612576838963ffffffff612ba216565b92506125a4565b6125a161253c82898b8a60018151811061259357fe5b602002602001015189612bfc565b92505b5050979650505050505050565b3360009081526002602052604081205460ff16801580156125d457506000600154115b156126d3576125f06125e8856001546126de565b612710612f55565b6001600160a01b03841660009081526004602052604090205490925060ff16156126d357600061263c6064612630600354866126de90919063ffffffff16565b9063ffffffff612f5516565b6001600160a01b038086166000908152600560209081526040808320938b1683529290522054909150612675908263ffffffff612ba216565b6001600160a01b038086166000908152600560209081526040808320938b1683529281528282209390935560069092529020546126b8908263ffffffff612ba216565b6001600160a01b038716600090815260066020526040902055505b509392505050565b90565b6000826126ed5750600061202a565b828202828482816126fa57fe5b04146120275760405162461bcd60e51b81526004018080602001828103825260218152602001806130996021913960400191505060405180910390fd5b3390565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610d2e9085906129ea565b80158061281b575060408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b1580156127ed57600080fd5b505afa158015612801573d6000803e3d6000fd5b505050506040513d602081101561281757600080fd5b5051155b6128565760405162461bcd60e51b81526004018080602001828103825260368152602001806131256036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b17905261149f9084906129ea565b6001600160a01b0381166128ed5760405162461bcd60e51b81526004018080602001828103825260268152602001806130396026913960400191505060405180910390fd5b600080546040516001600160a01b038085169361010090930416917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b600081848411156129e25760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156129a757818101518382015260200161298f565b50505050905090810190601f1680156129d45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6129fc826001600160a01b0316612f97565b612a4d576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b60208310612a8b5780518252601f199092019160209182019101612a6c565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612aed576040519150601f19603f3d011682016040523d82523d6000602084013e612af2565b606091505b509150915081612b49576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b805115610d2e57808060200190516020811015612b6557600080fd5b5051610d2e5760405162461bcd60e51b815260040180806020018281038252602a8152602001806130fb602a913960400191505060405180910390fd5b600082820183811015612027576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000806001600160a01b03871673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2148015612c3257506001600160a01b038616155b15612cb25773c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b0316632e1a7d4d866040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015612c9157600080fd5b505af1158015612ca5573d6000803e3d6000fd5b5050505084915050612f4c565b6001600160a01b038716612cc7575083612cff565b86612ce36001600160a01b03821686600063ffffffff61279516565b612cfd6001600160a01b038216868863ffffffff61279516565b505b60006001600160a01b03871615612d8757604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b158015612d5657600080fd5b505afa158015612d6a573d6000803e3d6000fd5b505050506040513d6020811015612d8057600080fd5b5051612d89565b475b90506000856001600160a01b031683866040518082805190602001908083835b60208310612dc85780518252601f199092019160209182019101612da9565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114612e2a576040519150601f19603f3d011682016040523d82523d6000602084013e612e2f565b606091505b5050905080612e7d576040805162461bcd60e51b81526020600482015260156024820152744572726f72205377617070696e6720546f6b656e7360581b604482015290519081900360640190fd5b60006001600160a01b03891615612edf57604080516370a0823160e01b81523060048201529051612eda9185916001600160a01b038d16916370a08231916024808301926020929190829003018186803b15801561144457600080fd5b612eef565b612eef478463ffffffff611fe516565b905060008111612f46576040805162461bcd60e51b815260206004820152601f60248201527f5377617070656420746f20496e76616c696420496e7465726d65646961746500604482015290519081900360640190fd5b93505050505b95945050505050565b600061202783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612fd3565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590612fcb57508115155b949350505050565b600081836130225760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156129a757818101518382015260200161298f565b50600083858161302e57fe5b049594505050505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d61792068617665207265766572746564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77416666696c696174652053706c69742056616c7565206e6f7420616c6c6f7765644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365a265627a7a7231582041446176ef86f5ca83dd8406a8110e2f2a9785a07e548f17f908c536c13ebd4264736f6c6343000511003200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106101355760003560e01c80635ecb16cd116100ab5780638f32d59b1161006f5780638f32d59b1461091c578063cfd7789c14610931578063d408f657146109e4578063f21d3ab514610a17578063f2fde38b14610a5a578063fbec27bf14610a8d57610135565b80635ecb16cd146107de578063715018a61461085957806375f12b211461086e5780637ee99283146108835780638da5cb5b146108eb57610135565b80632753c8f6116100fd5780632753c8f6146102c65780633ff428c7146104af5780634f51e294146104ea578063542cdf0214610531578063550bfa561461079f5780635de0398e146107c957610135565b806301e980d41461018c5780630dc9de85146101b65780631385d24c146102315780631781261f1461024657806318b135e314610293575b3332141561018a576040805162461bcd60e51b815260206004820152601860248201527f446f206e6f742073656e6420455448206469726563746c790000000000000000604482015290519081900360640190fd5b005b34801561019857600080fd5b5061018a600480360360208110156101af57600080fd5b5035610ac8565b3480156101c257600080fd5b5061018a600480360360208110156101d957600080fd5b810190602081018135600160201b8111156101f357600080fd5b82018360208201111561020557600080fd5b803590602001918460208302840111600160201b8311171561022657600080fd5b509092509050610b54565b34801561023d57600080fd5b5061018a610d34565b34801561025257600080fd5b506102816004803603604081101561026957600080fd5b506001600160a01b0381358116916020013516610d9c565b60408051918252519081900360200190f35b34801561029f57600080fd5b50610281600480360360208110156102b657600080fd5b50356001600160a01b0316610db9565b3480156102d257600080fd5b5061028160048036036101008110156102ea57600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135600160201b81111561032957600080fd5b82018360208201111561033b57600080fd5b803590602001918460208302840111600160201b8311171561035c57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156103ab57600080fd5b8201836020820111156103bd57600080fd5b803590602001918460018302840111600160201b831117156103de57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561043057600080fd5b82018360208201111561044257600080fd5b803590602001918460018302840111600160201b8311171561046357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550505090356001600160a01b03169150610dcb9050565b3480156104bb57600080fd5b5061018a600480360360408110156104d257600080fd5b506001600160a01b0381351690602001351515611012565b3480156104f657600080fd5b5061051d6004803603602081101561050d57600080fd5b50356001600160a01b0316611084565b604080519115158252519081900360200190f35b34801561053d57600080fd5b50610281600480360361012081101561055557600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135600160201b81111561059457600080fd5b8201836020820111156105a657600080fd5b803590602001918460018302840111600160201b831117156105c757600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561061957600080fd5b82018360208201111561062b57600080fd5b803590602001918460208302840111600160201b8311171561064c57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561069b57600080fd5b8201836020820111156106ad57600080fd5b803590602001918460018302840111600160201b831117156106ce57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561072057600080fd5b82018360208201111561073257600080fd5b803590602001918460018302840111600160201b8311171561075357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550505090356001600160a01b031691506110999050565b3480156107ab57600080fd5b5061018a600480360360208110156107c257600080fd5b50356111f9565b3480156107d557600080fd5b5061028161129b565b3480156107ea57600080fd5b5061018a6004803603602081101561080157600080fd5b810190602081018135600160201b81111561081b57600080fd5b82018360208201111561082d57600080fd5b803590602001918460208302840111600160201b8311171561084e57600080fd5b5090925090506112a1565b34801561086557600080fd5b5061018a6114a4565b34801561087a57600080fd5b5061051d61153a565b34801561088f57600080fd5b506108bc600480360360408110156108a657600080fd5b506001600160a01b03813516906020013561154a565b6040805194855260208501939093526001600160a01b0391821684840152166060830152519081900360800190f35b3480156108f757600080fd5b506109006117d9565b604080516001600160a01b039092168252519081900360200190f35b34801561092857600080fd5b5061051d6117ed565b34801561093d57600080fd5b506109cb6004803603608081101561095457600080fd5b6001600160a01b038235811692602081013592604082013590921691810190608081016060820135600160201b81111561098d57600080fd5b82018360208201111561099f57600080fd5b803590602001918460018302840111600160201b831117156109c057600080fd5b509092509050611816565b6040805192835260208301919091528051918290030190f35b3480156109f057600080fd5b5061051d60048036036020811015610a0757600080fd5b50356001600160a01b0316611933565b348015610a2357600080fd5b506109cb60048036036060811015610a3a57600080fd5b506001600160a01b03813581169160208101359160409091013516611948565b348015610a6657600080fd5b5061018a60048036036020811015610a7d57600080fd5b50356001600160a01b0316611f20565b348015610a9957600080fd5b5061018a60048036036040811015610ab057600080fd5b506001600160a01b0381351690602001351515611f73565b610ad06117ed565b610b0f576040805162461bcd60e51b815260206004820181905260248201526000805160206130db833981519152604482015290519081900360640190fd5b6064811115610b4f5760405162461bcd60e51b81526004018080602001828103825260218152602001806130ba6021913960400191505060405180910390fd5b600355565b6000805b82811015610d2e5733600090815260056020526040812090858584818110610b7c57fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020549150600060056000336001600160a01b03166001600160a01b031681526020019081526020016000206000868685818110610be457fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002081905550610c6b8260066000878786818110610c2c57fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002054611fe590919063ffffffff16565b60066000868685818110610c7b57fe5b602090810292909201356001600160a01b03168352508101919091526040016000205573eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee848483818110610cbf57fe5b905060200201356001600160a01b03166001600160a01b03161415610ced57610ce83383612030565b610d26565b610d263383868685818110610cfe57fe5b905060200201356001600160a01b03166001600160a01b03166121159092919063ffffffff16565b600101610b58565b50505050565b610d3c6117ed565b610d7b576040805162461bcd60e51b815260206004820181905260248201526000805160206130db833981519152604482015290519081900360640190fd5b6000805460ff60a81b198116600160a81b9182900460ff1615909102179055565b600560209081526000928352604080842090915290825290205481565b60066020526000908152604090205481565b6000805460ff16610e23576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6000805460ff191690819055600160a81b900460ff1615610e80576040805162461bcd60e51b815260206004820152601260248201527115195b5c1bdc985c9a5b1e4814185d5cd95960721b604482015290519081900360640190fd5b600080610e8d8a8a612167565b91509150610ea08a83838e8b8b8b612411565b925087831015610ee7576040805162461bcd60e51b815260206004820152600d60248201526c4869676820736c69707061676560981b604482015290519081900360640190fd5b60006001600160a01b038c16610f5a57610f1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee85876125b1565b9050336108fc610f2c868463ffffffff611fe516565b6040518115909202916000818181858888f19350505050158015610f54573d6000803e3d6000fd5b50610f92565b610f658c85876125b1565b9050610f9233610f7b868463ffffffff611fe516565b6001600160a01b038f16919063ffffffff61211516565b610fa2848263ffffffff611fe516565b604080513381526001600160a01b03808f1660208301528f16818301526060810183905290519195507ff2d3e32195f8631c70e1d996c9bd5d4a3369d0580786dcd662bf13139310355d919081900360800190a15050506000805460ff1916600117905598975050505050505050565b61101a6117ed565b611059576040805162461bcd60e51b815260206004820181905260248201526000805160206130db833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600460205260409020805460ff1916911515919091179055565b60046020526000908152604090205460ff1681565b60008054600160a81b900460ff16156110ee576040805162461bcd60e51b815260206004820152601260248201527115195b5c1bdc985c9a5b1e4814185d5cd95960721b604482015290519081900360640190fd5b6000896001600160a01b0316876040518082805190602001908083835b6020831061112a5780518252601f19909201916020918201910161110b565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461118c576040519150601f19603f3d011682016040523d82523d6000602084013e611191565b606091505b50509050806111da576040805162461bcd60e51b815260206004820152601060248201526f10dbdd5b1908139bdd0814195c9b5a5d60821b604482015290519081900360640190fd5b6111ea8b8b8b8b8a8a8a8a610dcb565b9b9a5050505050505050505050565b6112016117ed565b611240576040805162461bcd60e51b815260206004820181905260248201526000805160206130db833981519152604482015290519081900360640190fd5b6064811115611296576040805162461bcd60e51b815260206004820152601a60248201527f476f6f6457696c6c2056616c7565206e6f7420616c6c6f776564000000000000604482015290519081900360640190fd5b600155565b60015481565b6112a96117ed565b6112e8576040805162461bcd60e51b815260206004820181905260248201526000805160206130db833981519152604482015290519081900360640190fd5b60005b8181101561149f57600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee84848481811061131657fe5b905060200201356001600160a01b03166001600160a01b031614156113a8576113886006600086868681811061134857fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b031681526020019081526020016000205447611fe590919063ffffffff16565b90506113a361139d6113986117d9565b6126db565b82612030565b611496565b61147c600660008686868181106113bb57fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020548585858181106113f857fe5b604080516370a0823160e01b81523060048201529051602092830294909401356001600160a01b0316936370a08231935060248083019392829003018186803b15801561144457600080fd5b505afa158015611458573d6000803e3d6000fd5b505050506040513d602081101561146e57600080fd5b50519063ffffffff611fe516565b90506114966114896117d9565b82868686818110610cfe57fe5b506001016112eb565b505050565b6114ac6117ed565b6114eb576040805162461bcd60e51b815260206004820181905260248201526000805160206130db833981519152604482015290519081900360640190fd5b600080546040516101009091046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360008054610100600160a81b0319169055565b600054600160a81b900460ff1681565b6000806000806000869050806001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561158e57600080fd5b505afa1580156115a2573d6000803e3d6000fd5b505050506040513d60208110156115b857600080fd5b50516040805163d21220a760e01b815290519194506001600160a01b0383169163d21220a791600480820192602092909190829003018186803b1580156115fe57600080fd5b505afa158015611612573d6000803e3d6000fd5b505050506040513d602081101561162857600080fd5b5051604080516370a0823160e01b81526001600160a01b038a811660048301529151929450600092918616916370a0823191602480820192602092909190829003018186803b15801561167a57600080fd5b505afa15801561168e573d6000803e3d6000fd5b505050506040513d60208110156116a457600080fd5b5051604080516370a0823160e01b81526001600160a01b038b811660048301529151929350600092918616916370a0823191602480820192602092909190829003018186803b1580156116f657600080fd5b505afa15801561170a573d6000803e3d6000fd5b505050506040513d602081101561172057600080fd5b5051604080516318160ddd60e01b815290519192506000916001600160a01b038616916318160ddd916004808301926020929190829003018186803b15801561176857600080fd5b505afa15801561177c573d6000803e3d6000fd5b505050506040513d602081101561179257600080fd5b50519050806117a78a8563ffffffff6126de16565b816117ae57fe5b049750806117c28a8463ffffffff6126de16565b816117c957fe5b0496505050505092959194509250565b60005461010090046001600160a01b031690565b6000805461010090046001600160a01b0316611807612737565b6001600160a01b031614905090565b600080548190600160a81b900460ff161561186d576040805162461bcd60e51b815260206004820152601260248201527115195b5c1bdc985c9a5b1e4814185d5cd95960721b604482015290519081900360640190fd5b6000876001600160a01b03168585604051808383808284376040519201945060009350909150508083038183865af19150503d80600081146118cb576040519150601f19603f3d011682016040523d82523d6000602084013e6118d0565b606091505b5050905080611919576040805162461bcd60e51b815260206004820152601060248201526f10dbdd5b1908139bdd0814195c9b5a5d60821b604482015290519081900360640190fd5b611924888888611948565b90999098509650505050505050565b60026020526000908152604090205460ff1681565b60008054819060ff166119a2576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6000805460ff191690819055600160a81b900460ff16156119ff576040805162461bcd60e51b815260206004820152601260248201527115195b5c1bdc985c9a5b1e4814185d5cd95960721b604482015290519081900360640190fd5b846001600160a01b038116611a5b576040805162461bcd60e51b815260206004820152601e60248201527f4572726f723a20496e76616c696420556e69706f6f6c20416464726573730000604482015290519081900360640190fd5b6000816001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015611a9657600080fd5b505afa158015611aaa573d6000803e3d6000fd5b505050506040513d6020811015611ac057600080fd5b50516040805163d21220a760e01b815290519192506000916001600160a01b0385169163d21220a7916004808301926020929190829003018186803b158015611b0857600080fd5b505afa158015611b1c573d6000803e3d6000fd5b505050506040513d6020811015611b3257600080fd5b5051905087611b526001600160a01b03821633308b63ffffffff61273b16565b611b806001600160a01b038216737a250d5630b4cf539739df2c5dacb4c659f2488d8a63ffffffff61279516565b6001600160a01b03831673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc21480611bc757506001600160a01b03821673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2145b15611d315760006001600160a01b03841673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc214611bf85783611bfa565b825b60408051629d473b60e21b81526001600160a01b0383166004820152602481018c90526001604482018190526064820152306084820152600f60fc1b60a48201528151929350737a250d5630b4cf539739df2c5dacb4c659f2488d926302751cec9260c4808401939192918290030181600087803b158015611c7b57600080fd5b505af1158015611c8f573d6000803e3d6000fd5b505050506040513d6040811015611ca557600080fd5b50805160209091015190975095506000611cc082898b6125b1565b90506000611ce373eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee898c6125b1565b9050611d1033611cf98b8563ffffffff611fe516565b6001600160a01b038616919063ffffffff61211516565b611d2933611d248a8463ffffffff611fe516565b612030565b505050611e65565b60408051635d5155ef60e11b81526001600160a01b03858116600483015284166024820152604481018a905260016064820181905260848201523060a4820152600f60fc1b60c48201528151737a250d5630b4cf539739df2c5dacb4c659f2488d9263baa2abde9260e480820193918290030181600087803b158015611db657600080fd5b505af1158015611dca573d6000803e3d6000fd5b505050506040513d6040811015611de057600080fd5b50805160209091015190965094506000611dfb84888a6125b1565b90506000611e0a84888b6125b1565b9050611e3733611e208a8563ffffffff611fe516565b6001600160a01b038816919063ffffffff61211516565b611e6233611e4b898463ffffffff611fe516565b6001600160a01b038716919063ffffffff61211516565b50505b604080513381526001600160a01b03808c1660208301528516818301526060810188905290517ff2d3e32195f8631c70e1d996c9bd5d4a3369d0580786dcd662bf13139310355d9181900360800190a1604080513381526001600160a01b03808c1660208301528416818301526060810187905290517ff2d3e32195f8631c70e1d996c9bd5d4a3369d0580786dcd662bf13139310355d9181900360800190a1505050506000805460ff191660011790559094909350915050565b611f286117ed565b611f67576040805162461bcd60e51b815260206004820181905260248201526000805160206130db833981519152604482015290519081900360640190fd5b611f70816128a8565b50565b611f7b6117ed565b611fba576040805162461bcd60e51b815260206004820181905260248201526000805160206130db833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600260205260409020805460ff1916911515919091179055565b600061202783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612953565b90505b92915050565b80471015612085576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015290519081900360640190fd5b6040516000906001600160a01b0384169083908381818185875af1925050503d80600081146120d0576040519150601f19603f3d011682016040523d82523d6000602084013e6120d5565b606091505b505090508061149f5760405162461bcd60e51b815260040180806020018281038252603a81526020018061305f603a913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261149f9084906129ea565b600080836001600160a01b0381166121c6576040805162461bcd60e51b815260206004820152601e60248201527f4572726f723a20496e76616c696420556e69706f6f6c20416464726573730000604482015290519081900360640190fd5b6000816001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561220157600080fd5b505afa158015612215573d6000803e3d6000fd5b505050506040513d602081101561222b57600080fd5b50516040805163d21220a760e01b815290519192506000916001600160a01b0385169163d21220a7916004808301926020929190829003018186803b15801561227357600080fd5b505afa158015612287573d6000803e3d6000fd5b505050506040513d602081101561229d57600080fd5b505190506122bc6001600160a01b03881633308963ffffffff61273b16565b6122ea6001600160a01b038816737a250d5630b4cf539739df2c5dacb4c659f2488d8863ffffffff61279516565b60408051635d5155ef60e11b81526001600160a01b038481166004830152831660248201526044810188905260016064820181905260848201523060a4820152600f60fc1b60c48201528151737a250d5630b4cf539739df2c5dacb4c659f2488d9263baa2abde9260e480820193918290030181600087803b15801561236f57600080fd5b505af1158015612383573d6000803e3d6000fd5b505050506040513d604081101561239957600080fd5b508051602090910151909550935084158015906123b65750600084115b612407576040805162461bcd60e51b815260206004820152601e60248201527f52656d6f76656420696e73756666696369656e74204c69717569646974790000604482015290519081900360640190fd5b5050509250929050565b600080886001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561244d57600080fd5b505afa158015612461573d6000803e3d6000fd5b505050506040513d602081101561247757600080fd5b50516040805163d21220a760e01b815290519192506000916001600160a01b038c169163d21220a7916004808301926020929190829003018186803b1580156124bf57600080fd5b505afa1580156124d3573d6000803e3d6000fd5b505050506040513d60208110156124e957600080fd5b505190506001600160a01b03828116908816141561251857612511838a63ffffffff612ba216565b925061254c565b61254961253c83898c8a60008151811061252e57fe5b60200260200101518a612bfc565b849063ffffffff612ba216565b92505b866001600160a01b0316816001600160a01b0316141561257d57612576838963ffffffff612ba216565b92506125a4565b6125a161253c82898b8a60018151811061259357fe5b602002602001015189612bfc565b92505b5050979650505050505050565b3360009081526002602052604081205460ff16801580156125d457506000600154115b156126d3576125f06125e8856001546126de565b612710612f55565b6001600160a01b03841660009081526004602052604090205490925060ff16156126d357600061263c6064612630600354866126de90919063ffffffff16565b9063ffffffff612f5516565b6001600160a01b038086166000908152600560209081526040808320938b1683529290522054909150612675908263ffffffff612ba216565b6001600160a01b038086166000908152600560209081526040808320938b1683529281528282209390935560069092529020546126b8908263ffffffff612ba216565b6001600160a01b038716600090815260066020526040902055505b509392505050565b90565b6000826126ed5750600061202a565b828202828482816126fa57fe5b04146120275760405162461bcd60e51b81526004018080602001828103825260218152602001806130996021913960400191505060405180910390fd5b3390565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610d2e9085906129ea565b80158061281b575060408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b1580156127ed57600080fd5b505afa158015612801573d6000803e3d6000fd5b505050506040513d602081101561281757600080fd5b5051155b6128565760405162461bcd60e51b81526004018080602001828103825260368152602001806131256036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b17905261149f9084906129ea565b6001600160a01b0381166128ed5760405162461bcd60e51b81526004018080602001828103825260268152602001806130396026913960400191505060405180910390fd5b600080546040516001600160a01b038085169361010090930416917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b600081848411156129e25760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156129a757818101518382015260200161298f565b50505050905090810190601f1680156129d45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6129fc826001600160a01b0316612f97565b612a4d576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b60208310612a8b5780518252601f199092019160209182019101612a6c565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612aed576040519150601f19603f3d011682016040523d82523d6000602084013e612af2565b606091505b509150915081612b49576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b805115610d2e57808060200190516020811015612b6557600080fd5b5051610d2e5760405162461bcd60e51b815260040180806020018281038252602a8152602001806130fb602a913960400191505060405180910390fd5b600082820183811015612027576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000806001600160a01b03871673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2148015612c3257506001600160a01b038616155b15612cb25773c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b0316632e1a7d4d866040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015612c9157600080fd5b505af1158015612ca5573d6000803e3d6000fd5b5050505084915050612f4c565b6001600160a01b038716612cc7575083612cff565b86612ce36001600160a01b03821686600063ffffffff61279516565b612cfd6001600160a01b038216868863ffffffff61279516565b505b60006001600160a01b03871615612d8757604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b158015612d5657600080fd5b505afa158015612d6a573d6000803e3d6000fd5b505050506040513d6020811015612d8057600080fd5b5051612d89565b475b90506000856001600160a01b031683866040518082805190602001908083835b60208310612dc85780518252601f199092019160209182019101612da9565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114612e2a576040519150601f19603f3d011682016040523d82523d6000602084013e612e2f565b606091505b5050905080612e7d576040805162461bcd60e51b81526020600482015260156024820152744572726f72205377617070696e6720546f6b656e7360581b604482015290519081900360640190fd5b60006001600160a01b03891615612edf57604080516370a0823160e01b81523060048201529051612eda9185916001600160a01b038d16916370a08231916024808301926020929190829003018186803b15801561144457600080fd5b612eef565b612eef478463ffffffff611fe516565b905060008111612f46576040805162461bcd60e51b815260206004820152601f60248201527f5377617070656420746f20496e76616c696420496e7465726d65646961746500604482015290519081900360640190fd5b93505050505b95945050505050565b600061202783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612fd3565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590612fcb57508115155b949350505050565b600081836130225760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156129a757818101518382015260200161298f565b50600083858161302e57fe5b049594505050505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d61792068617665207265766572746564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77416666696c696174652053706c69742056616c7565206e6f7420616c6c6f7765644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365a265627a7a7231582041446176ef86f5ca83dd8406a8110e2f2a9785a07e548f17f908c536c13ebd4264736f6c63430005110032
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
25692:17180:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42809:10;42823:9;42809:23;;42801:60;;;;;-1:-1:-1;;;42801:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;25692:17180;40965:238;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40965:238:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;40965:238:0;;:::i;42140:614::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;42140:614:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;42140:614:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;42140:614:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;42140: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;42140:614:0;;-1:-1:-1;42140:614:0;-1:-1:-1;42140:614:0;:::i;40468:86::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40468:86:0;;;:::i;26210:71::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26210:71:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;26210:71:0;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;26312:56;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26312:56:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26312:56:0;-1:-1:-1;;;;;26312:56:0;;:::i;30760:1790::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30760:1790:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;30760:1790:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;30760:1790:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;30760:1790: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;30760:1790:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;30760:1790:0;;;;;;;;-1:-1:-1;30760:1790:0;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;30760:1790:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;30760:1790: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;30760:1790:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;30760:1790:0;;;;;;;;-1:-1:-1;30760:1790:0;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;30760:1790:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;30760:1790: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;30760:1790:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;30760:1790:0;;-1:-1:-1;;;30760:1790:0;;-1:-1:-1;;;;;30760:1790:0;;-1:-1:-1;30760:1790:0;;-1:-1:-1;30760:1790:0:i;41211:123::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;41211:123:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;41211:123:0;;;;;;;;;;:::i;26124:42::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26124:42:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26124:42:0;-1:-1:-1;;;;;26124:42:0;;:::i;:::-;;;;;;;;;;;;;;;;;;34168:837;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34168:837:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;34168:837:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;34168:837:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;34168:837: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;34168:837:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;34168:837:0;;;;;;;;-1:-1:-1;34168:837:0;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;34168:837:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;34168:837: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;34168:837:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;34168:837:0;;;;;;;;-1:-1:-1;34168:837:0;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;34168:837:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;34168:837: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;34168:837:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;34168:837:0;;;;;;;;-1:-1:-1;34168:837:0;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;34168:837:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;34168:837: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;34168:837:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;34168:837:0;;-1:-1:-1;;;34168:837:0;;-1:-1:-1;;;;;34168:837:0;;-1:-1:-1;34168:837:0;;-1:-1:-1;34168:837:0:i;40562:234::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40562:234:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;40562:234:0;;:::i;25902:23::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25902:23:0;;;:::i;41410:654::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;41410:654:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;41410:654:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;41410:654:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;41410: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;41410:654:0;;-1:-1:-1;41410:654:0;-1:-1:-1;41410:654:0;:::i;10493:140::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10493:140:0;;;:::i;25868:27::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25868:27:0;;;:::i;38781:752::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38781:752:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;38781:752:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;;;;38781:752:0;;;;;;;;;;;;;;;;;;;;;9682:79;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9682:79:0;;;:::i;:::-;;;;-1:-1:-1;;;;;9682:79:0;;;;;;;;;;;;;;10048:94;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10048:94:0;;;:::i;32970:523::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32970:523:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;32970:523:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;32970:523:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;32970:523: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;32970:523:0;;-1:-1:-1;32970:523:0;-1:-1:-1;32970:523:0;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;25976:44;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25976:44:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25976:44:0;-1:-1:-1;;;;;25976:44:0;;:::i;27596:2688::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27596:2688:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;27596:2688:0;;;;;;;;;;;;;;;;;:::i;10788:109::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10788:109:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10788:109:0;-1:-1:-1;;;;;10788:109:0;;:::i;40804:153::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40804:153:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;40804:153:0;;;;;;;;;;:::i;40965:238::-;9894:9;:7;:9::i;:::-;9886:54;;;;;-1:-1:-1;;;9886:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9886:54:0;;;;;;;;;;;;;;;41108:3;41086:18;:25;;41078:71;;;;-1:-1:-1;;;41078:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41160:14;:35;40965:238::o;42140:614::-;42215:16;;42242:505;42262:17;;;42242:505;;;42329:10;42312:28;;;;:16;:28;;;;;;42341:6;;42348:1;42341:9;;;;;;;;;;;;;-1:-1:-1;;;;;42341:9:0;-1:-1:-1;;;;;42312:39:0;-1:-1:-1;;;;;42312:39:0;;;;;;;;;;;;;42301:50;;42408:1;42366:16;:28;42383:10;-1:-1:-1;;;;;42366:28:0;-1:-1:-1;;;;;42366:28:0;;;;;;;;;;;;:39;42395:6;;42402:1;42395:9;;;;;;;;;;;;;-1:-1:-1;;;;;42395:9:0;-1:-1:-1;;;;;42366:39:0;-1:-1:-1;;;;;42366:39:0;;;;;;;;;;;;:43;;;;42459:64;42514:8;42459:21;:32;42481:6;;42488:1;42481:9;;;;;;;;;;;;;-1:-1:-1;;;;;42481:9:0;-1:-1:-1;;;;;42459:32:0;-1:-1:-1;;;;;42459:32:0;;;;;;;;;;;;;:54;;:64;;;;:::i;:::-;42424:21;:32;42446:6;;42453:1;42446:9;;;;;;;;;;;;;;;;-1:-1:-1;;;;;42446:9:0;42424:32;;-1:-1:-1;42424:32:0;;;;;;;;-1:-1:-1;42424:32:0;:99;26424:42;42544:6;;42551:1;42544:9;;;;;;;;;;;;;-1:-1:-1;;;;;42544:9:0;-1:-1:-1;;;;;42544:23:0;;42540:196;;;42588:39;42606:10;42618:8;42588:17;:39::i;:::-;42540:196;;;42668:52;42699:10;42711:8;42675:6;;42682:1;42675:9;;;;;;;;;;;;;-1:-1:-1;;;;;42675:9:0;-1:-1:-1;;;;;42668:30:0;;;:52;;;;;:::i;:::-;42281:3;;42242:505;;;;42140:614;;;:::o;40468:86::-;9894:9;:7;:9::i;:::-;9886:54;;;;;-1:-1:-1;;;9886:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9886:54:0;;;;;;;;;;;;;;;40539:7;;;-1:-1:-1;;;;40528:18:0;;-1:-1:-1;;;40539:7:0;;;;;;40538:8;40528:18;;;;;;40468:86::o;26210:71::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;26312:56::-;;;;;;;;;;;;;:::o;30760:1790::-;31099:17;19533:11;;;;19525:55;;;;;-1:-1:-1;;;19525:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19672:5;19658:19;;-1:-1:-1;;19658:19:0;;;;;-1:-1:-1;;;27083:7:0;;19658:19;27083:7;27079:102;;;27107:28;;;-1:-1:-1;;;27107:28:0;;;;;;;;;;;;-1:-1:-1;;;27107:28:0;;;;;;;;;;;;;;27079:102;31130:15;31147;31166:85;31197:18;31230:10;31166:16;:85::i;:::-;31129:122;;;;31309:210;31335:18;31368:7;31390;31412:22;31449:11;31475:9;31499;31309:11;:210::i;:::-;31297:222;;31551:12;31538:9;:25;;31530:51;;;;;-1:-1:-1;;;31530:51:0;;;;;;;;;;;;-1:-1:-1;;;31530:51:0;;;;;;;;;;;;;;;31594:28;-1:-1:-1;;;;;31679:36:0;;31675:625;;31755:117;26424:42;31820:9;31848;31755:17;:117::i;:::-;31732:140;-1:-1:-1;31889:10:0;:56;31909:35;:9;31732:140;31909:35;:13;:35;:::i;:::-;31889:56;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31889:56:0;31675:625;;;32001:129;32037:22;32078:9;32106;32001:17;:129::i;:::-;31978:152;-1:-1:-1;32147:141:0;32209:10;32238:35;:9;31978:152;32238:35;:13;:35;:::i;:::-;-1:-1:-1;;;;;32147:43:0;;;:141;;:43;:141;:::i;:::-;32324:35;:9;32338:20;32324:35;:13;:35;:::i;:::-;32377:136;;;32398:10;32377:136;;-1:-1:-1;;;;;32377:136:0;;;;;;;;;;;;;;;;;;;;;32312:47;;-1:-1:-1;32377:136:0;;;;;;;;;;-1:-1:-1;;;19838:11:0;:18;;-1:-1:-1;;19838:18:0;19852:4;19838:18;;;30760:1790;;-1:-1:-1;;;;;;;;30760:1790:0:o;41211:123::-;9894:9;:7;:9::i;:::-;9886:54;;;;;-1:-1:-1;;;9886:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9886:54:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;41296:21:0;;;;;;;;:10;:21;;;;;:30;;-1:-1:-1;;41296:30:0;;;;;;;;;;41211:123::o;26124:42::-;;;;;;;;;;;;;;;:::o;34168:837::-;34538:7;27083;;-1:-1:-1;;;27083:7:0;;;;27079:102;;;27107:28;;;-1:-1:-1;;;27107:28:0;;;;;;;;;;;;-1:-1:-1;;;27107:28:0;;;;;;;;;;;;;;27079:102;34578:12;34596:18;-1:-1:-1;;;;;34596:23:0;34620:10;34596:35;;;;;;;;;;;;;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;;;34596:35: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;;34577:54:0;;;34650:7;34642:36;;;;;-1:-1:-1;;;34642:36:0;;;;;;;;;;;;-1:-1:-1;;;34642:36:0;;;;;;;;;;;;;;;34713:273;34738:22;34779:18;34816:10;34845:12;34876:11;34906:9;34934;34962;34713:6;:273::i;:::-;34691:306;34168:837;-1:-1:-1;;;;;;;;;;;34168:837:0:o;40562:234::-;9894:9;:7;:9::i;:::-;9886:54;;;;;-1:-1:-1;;;9886:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9886:54:0;;;;;;;;;;;;;;;40697:3;40681:12;:19;;40638:116;;;;;-1:-1:-1;;;40638:116:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;40765:8;:23;40562:234::o;25902:23::-;;;;:::o;41410:654::-;9894:9;:7;:9::i;:::-;9886:54;;;;;-1:-1:-1;;;9886:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9886:54:0;;;;;;;;;;;;;;;41496:9;41491:566;41511:17;;;41491:566;;;41550:11;26424:42;41582:6;;41589:1;41582:9;;;;;;;;;;;;;-1:-1:-1;;;;;41582:9:0;-1:-1:-1;;;;;41582:23:0;;41578:468;;;41632:99;41680:21;:32;41702:6;;41709:1;41702:9;;;;;;;;;;;;;-1:-1:-1;;;;;41702:9:0;-1:-1:-1;;;;;41680:32:0;-1:-1:-1;;;;;41680:32:0;;;;;;;;;;;;;41632:21;:25;;:99;;;;:::i;:::-;41626:105;;41750:50;41768:26;41786:7;:5;:7::i;:::-;41768:17;:26::i;:::-;41796:3;41750:17;:50::i;:::-;41578:468;;;41847:120;41916:21;:32;41938:6;;41945:1;41938:9;;;;;;;;;;;;;-1:-1:-1;;;;;41938:9:0;-1:-1:-1;;;;;41916:32:0;-1:-1:-1;;;;;41916:32:0;;;;;;;;;;;;;41854:6;;41861:1;41854:9;;;;;;;41847:42;;;-1:-1:-1;;;41847:42:0;;41883:4;41847:42;;;;;;41854:9;;;;;;;;;-1:-1:-1;;;;;41854:9:0;;41847:27;;-1:-1:-1;41847:42:0;;;;;41854:9;41847:42;;;;;41854:9;41847:42;;;5:2:-1;;;;30:1;27;20:12;5:2;41847:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;41847:42:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;41847:42:0;;:120;:46;:120;:::i;:::-;41841:126;;41986:44;42017:7;:5;:7::i;:::-;42026:3;41993:6;;42000:1;41993:9;;;;;;41986:44;-1:-1:-1;41530:3:0;;41491:566;;;;41410:654;;:::o;10493:140::-;9894:9;:7;:9::i;:::-;9886:54;;;;;-1:-1:-1;;;9886:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9886:54:0;;;;;;;;;;;;;;;10592:1;10576:6;;10555:40;;10576:6;;;;-1:-1:-1;;;;;10576:6:0;;10555:40;;10592:1;;10555:40;10623:1;10606:19;;-1:-1:-1;;;;;;10606:19:0;;;10493:140::o;25868:27::-;;;-1:-1:-1;;;25868:27:0;;;;;:::o;38781:752::-;38948:15;38978;39008:14;39037;39079:19;39116:18;39079:56;;39155:4;-1:-1:-1;;;;;39155:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;39155:13:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;39155:13:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39155:13:0;39188;;;-1:-1:-1;;;39188:13:0;;;;39155;;-1:-1:-1;;;;;;39188:11:0;;;;;:13;;;;;39155;;39188;;;;;;;;:11;:13;;;5:2:-1;;;;30:1;27;20:12;5:2;39188:13:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;39188:13:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39188:13:0;39233:44;;;-1:-1:-1;;;39233:44:0;;-1:-1:-1;;;;;39233:44:0;;;;;;;;;39188:13;;-1:-1:-1;39214:16:0;;39233:24;;;;;;:44;;;;;39188:13;;39233:44;;;;;;;;:24;:44;;;5:2:-1;;;;30:1;27;20:12;5:2;39233:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;39233:44:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39233:44:0;39307;;;-1:-1:-1;;;39307:44:0;;-1:-1:-1;;;;;39307:44:0;;;;;;;;;39233;;-1:-1:-1;39288:16:0;;39307:24;;;;;;:44;;;;;39233;;39307;;;;;;;;:24;:44;;;5:2:-1;;;;30:1;27;20:12;5:2;39307:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;39307:44:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39307:44:0;39387:18;;;-1:-1:-1;;;39387:18:0;;;;39307:44;;-1:-1:-1;39364:20:0;;-1:-1:-1;;;;;39387:16:0;;;;;:18;;;;;39307:44;;39387:18;;;;;;;:16;:18;;;5:2:-1;;;;30:1;27;20:12;5:2;39387:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;39387:18:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39387:18:0;;-1:-1:-1;39387:18:0;39428:23;:9;39442:8;39428:23;:13;:23;:::i;:::-;:38;;;;;;;-1:-1:-1;39513:12:0;39487:23;:9;39501:8;39487:23;:13;:23;:::i;:::-;:38;;;;;;39477:48;;38781:752;;;;;;;;;;;:::o;9682:79::-;9720:7;9747:6;;;;-1:-1:-1;;;;;9747:6:0;;9682:79::o;10048:94::-;10088:4;10128:6;;;;;-1:-1:-1;;;;;10128:6:0;10112:12;:10;:12::i;:::-;-1:-1:-1;;;;;10112:22:0;;10105:29;;10048:94;:::o;32970:523::-;33177:15;27083:7;;33177:15;;-1:-1:-1;;;27083:7:0;;;;27079:102;;;27107:28;;;-1:-1:-1;;;27107:28:0;;;;;;;;;;;;-1:-1:-1;;;27107:28:0;;;;;;;;;;;;;;27079:102;33242:12;33260:18;-1:-1:-1;;;;;33260:23:0;33284:10;;33260:35;;;;;30:3:-1;22:6;14;1:33;33260:35:0;;45:16:-1;;;-1:-1;33260:35:0;;-1:-1:-1;33260:35:0;;-1:-1:-1;;33260:35: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;;33241:54:0;;;33314:7;33306:36;;;;;-1:-1:-1;;;33306:36:0;;;;;;;;;;;;-1:-1:-1;;;33306:36:0;;;;;;;;;;;;;;;33376:109;33407:18;33440:10;33465:9;33376:16;:109::i;:::-;33355:130;;;;-1:-1:-1;32970:523:0;-1:-1:-1;;;;;;;32970:523:0:o;25976:44::-;;;;;;;;;;;;;;;:::o;27596:2688::-;27804:15;19533:11;;27804:15;;19533:11;;19525:55;;;;;-1:-1:-1;;;19525:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19672:5;19658:19;;-1:-1:-1;;19658:19:0;;;;;-1:-1:-1;;;27083:7:0;;19658:19;27083:7;27079:102;;;27107:28;;;-1:-1:-1;;;27107:28:0;;;;;;;;;;;;-1:-1:-1;;;27107:28:0;;;;;;;;;;;;;;27079:102;27891:18;-1:-1:-1;;;;;27931:27:0;;27923:70;;;;;-1:-1:-1;;;27923:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;28031:14;28048:4;-1:-1:-1;;;;;28048:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28048:13:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28048:13:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28048:13:0;28089;;;-1:-1:-1;;;28089:13:0;;;;28048;;-1:-1:-1;28072:14:0;;-1:-1:-1;;;;;28089:11:0;;;;;:13;;;;;28048;;28089;;;;;;;:11;:13;;;5:2:-1;;;;30:1;27;20:12;5:2;28089:13:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28089:13:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28089:13:0;;-1:-1:-1;28139:18:0;28171:63;-1:-1:-1;;;;;28171:24:0;;28196:10;28216:4;28223:10;28171:63;:24;:63;:::i;:::-;28247:57;-1:-1:-1;;;;;28247:19:0;;26678:42;28293:10;28247:57;:19;:57;:::i;:::-;-1:-1:-1;;;;;28321:26:0;;26798:42;28321:26;;:56;;-1:-1:-1;;;;;;28351:26:0;;26798:42;28351:26;28321:56;28317:1818;;;28394:14;-1:-1:-1;;;;;28411:26:0;;26798:42;28411:26;:44;;28449:6;28411:44;;;28440:6;28411:44;28491:202;;;-1:-1:-1;;;28491:202:0;;-1:-1:-1;;;;;28491:202:0;;;;;;;;;;;;28598:1;28491:202;;;;;;;;;;28646:4;28491:202;;;;-1:-1:-1;;;28491:202:0;;;;;;28394:61;;-1:-1:-1;26678:42:0;;28491:34;;:202;;;;;;;;;;;;;-1:-1:-1;26678:42:0;28491:202;;;5:2:-1;;;;30:1;27;20:12;5:2;28491:202:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28491:202:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28491:202:0;;;;;;;;;-1:-1:-1;28491:202:0;-1:-1:-1;28744:21:0;28768:111;28804:6;28491:202;28855:9;28768:17;:111::i;:::-;28744:135;;28894:19;28916:115;26424:42;28981:7;29007:9;28916:17;:115::i;:::-;28894:137;-1:-1:-1;29076:67:0;29104:10;29116:26;:7;29128:13;29116:26;:11;:26;:::i;:::-;-1:-1:-1;;;;;29076:27:0;;;:67;;:27;:67;:::i;:::-;29158:55;29176:10;29188:24;:7;29200:11;29188:24;:11;:24;:::i;:::-;29158:17;:55::i;:::-;28317:1818;;;;;;29267:224;;;-1:-1:-1;;;29267:224:0;;-1:-1:-1;;;;;29267:224:0;;;;;;;;;;;;;;;;;;;29396:1;29267:224;;;;;;;;;;29444:4;29267:224;;;;-1:-1:-1;;;29267:224:0;;;;;;26678:42;;29267:31;;:224;;;;;;;;;;;-1:-1:-1;26678:42:0;29267:224;;;5:2:-1;;;;30:1;27;20:12;5:2;29267:224:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29267:224:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29267:224:0;;;;;;;;;-1:-1:-1;29267:224:0;-1:-1:-1;29542:22:0;29567:111;29603:6;29267:224;29654:9;29567:17;:111::i;:::-;29542:136;;29693:22;29718:111;29754:6;29779:7;29805:9;29718:17;:111::i;:::-;29693:136;-1:-1:-1;29874:117:0;29920:10;29949:27;:7;29961:14;29949:27;:11;:27;:::i;:::-;-1:-1:-1;;;;;29874:27:0;;;:117;;:27;:117;:::i;:::-;30006;30052:10;30081:27;:7;30093:14;30081:27;:11;:27;:::i;:::-;-1:-1:-1;;;;;30006:27:0;;;:117;;:27;:117;:::i;:::-;28317:1818;;;30150:55;;;30157:10;30150:55;;-1:-1:-1;;;;;30150:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30221;;;30228:10;30221:55;;-1:-1:-1;;;;;30221:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27168:1;;;;19838:11;:18;;-1:-1:-1;;19838:18:0;19852:4;19838:18;;;27596:2688;;;;-1:-1:-1;27596:2688:0;-1:-1:-1;;27596:2688:0:o;10788:109::-;9894:9;:7;:9::i;:::-;9886:54;;;;;-1:-1:-1;;;9886:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9886:54:0;;;;;;;;;;;;;;;10861:28;10880:8;10861:18;:28::i;:::-;10788:109;:::o;40804:153::-;9894:9;:7;:9::i;:::-;9886:54;;;;;-1:-1:-1;;;9886:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9886:54:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;40916:24:0;;;;;;;;:12;:24;;;;;:33;;-1:-1:-1;;40916:33:0;;;;;;;;;;40804:153::o;3263:136::-;3321:7;3348:43;3352:1;3355;3348:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;3341:50;;3263:136;;;;;:::o;17043:445::-;17172:6;17147:21;:31;;17125:110;;;;;-1:-1:-1;;;17125:110:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;17322:32;;17304:12;;-1:-1:-1;;;;;17322:14:0;;;17343:6;;17304:12;17322:32;17304:12;17322:32;17343:6;17322: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;;17303:51:0;;;17387:7;17365:115;;;;-1:-1:-1;;;17365:115:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20518:247;20688:58;;;-1:-1:-1;;;;;20688:58:0;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;20688:58:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;20635:122:0;;20668:5;;20635:18;:122::i;35013:968::-;35123:15;;35210:18;-1:-1:-1;;;;;35250:27:0;;35242:70;;;;;-1:-1:-1;;;35242:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;35325:14;35342:4;-1:-1:-1;;;;;35342:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35342:13:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35342:13:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;35342:13:0;35383;;;-1:-1:-1;;;35383:13:0;;;;35342;;-1:-1:-1;35366:14:0;;-1:-1:-1;;;;;35383:11:0;;;;;:13;;;;;35342;;35383;;;;;;;:11;:13;;;5:2:-1;;;;30:1;27;20:12;5:2;35383:13:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35383:13:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;35383:13:0;;-1:-1:-1;35409:132:0;-1:-1:-1;;;;;35409:43:0;;35467:10;35500:4;35520:10;35409:132;:43;:132;:::i;:::-;35554:113;-1:-1:-1;;;;;35554:38:0;;26678:42;35646:10;35554:113;:38;:113;:::i;:::-;35701:192;;;-1:-1:-1;;;35701:192:0;;-1:-1:-1;;;;;35701:192:0;;;;;;;;;;;;;;;;;;;35814:1;35701:192;;;;;;;;;;35854:4;35701:192;;;;-1:-1:-1;;;35701:192:0;;;;;;26678:42;;35701:31;;:192;;;;;;;;;;;-1:-1:-1;26678:42:0;35701:192;;;5:2:-1;;;;30:1;27;20:12;5:2;35701:192:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35701:192:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;35701:192:0;;;;;;;;;-1:-1:-1;35701:192:0;-1:-1:-1;35912:11:0;;;;;:26;;;35937:1;35927:7;:11;35912:26;35904:69;;;;;-1:-1:-1;;;35904:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;35013:968;;;;;;;;:::o;35989:1112::-;36255:20;36288:14;36320:18;-1:-1:-1;;;;;36305:41:0;;:43;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36305:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36305:43:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36305:43:0;36376;;;-1:-1:-1;;;36376:43:0;;;;36305;;-1:-1:-1;36359:14:0;;-1:-1:-1;;;;;36376:41:0;;;;;:43;;;;;36305;;36376;;;;;;;:41;:43;;;5:2:-1;;;;30:1;27;20:12;5:2;36376:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36376:43:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36376:43:0;;-1:-1:-1;;;;;;36470:17:0;;;;;;;36466:291;;;36519:25;:12;36536:7;36519:25;:16;:25;:::i;:::-;36504:40;;36466:291;;;36632:113;36667:63;36678:6;36686:7;36695;36704:11;36716:1;36704:14;;;;;;;;;;;;;;36720:9;36667:10;:63::i;:::-;36632:12;;:113;:16;:113;:::i;:::-;36617:128;;36466:291;36817:7;-1:-1:-1;;;;;36807:17:0;:6;-1:-1:-1;;;;;36807:17:0;;36803:291;;;36856:25;:12;36873:7;36856:25;:16;:25;:::i;:::-;36841:40;;36803:291;;;36969:113;37004:63;37015:6;37023:7;37032;37041:11;37053:1;37041:14;;;;;;;;;;;;;;37057:9;37004:10;:63::i;36969:113::-;36954:128;;36803:291;35989:1112;;;;;;;;;;;:::o;39541:887::-;39743:10;39670:28;39730:24;;;:12;:24;;;;;;;;39769:12;;:28;;;;;39796:1;39785:8;;:12;39769:28;39765:656;;;39837:100;39868:30;39881:6;39889:8;;39868:12;:30::i;:::-;39917:5;39837:12;:100::i;:::-;-1:-1:-1;;;;;39958:21:0;;;;;;:10;:21;;;;;;39814:123;;-1:-1:-1;39958:21:0;;39954:456;;;40000:24;40027:93;40116:3;40027:62;40074:14;;40027:20;:46;;:62;;;;:::i;:::-;:88;:93;:88;:93;:::i;:::-;-1:-1:-1;;;;;40176:27:0;;;;;;;:16;:27;;;;;;;;:34;;;;;;;;;;40000:120;;-1:-1:-1;40176:78:0;;40000:120;40176:78;:60;:78;:::i;:::-;-1:-1:-1;;;;;40139:27:0;;;;;;;:16;:27;;;;;;;;:34;;;;;;;;;;;:115;;;;40304:21;:28;;;;;;:90;;40359:16;40304:90;:32;:90;:::i;:::-;-1:-1:-1;;;;;40273:28:0;;;;;;:21;:28;;;;;:121;-1:-1:-1;39954:456:0;39541:887;;;;;;:::o;15907:159::-;16049:7;15907:159::o;4213:471::-;4271:7;4516:6;4512:47;;-1:-1:-1;4546:1:0;4539:8;;4512:47;4583:5;;;4587:1;4583;:5;:1;4607:5;;;;;:10;4599:56;;;;-1:-1:-1;;;4599:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8364:98;8444:10;8364:98;:::o;20773:284::-;20970:68;;;-1:-1:-1;;;;;20970:68:0;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;20970:68:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;20917:132:0;;20950:5;;20917:18;:132::i;21065:706::-;21483:10;;;21482:62;;-1:-1:-1;21499:39:0;;;-1:-1:-1;;;21499:39:0;;21523:4;21499:39;;;;-1:-1:-1;;;;;21499:39:0;;;;;;;;;:15;;;;;;:39;;;;;;;;;;;;;;;:15;:39;;;5:2:-1;;;;30:1;27;20:12;5:2;21499:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21499:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21499:39:0;:44;21482:62;21460:166;;;;-1:-1:-1;;;21460:166:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21690:62;;;-1:-1:-1;;;;;21690:62:0;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;21690:62:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;21637:126:0;;21670:5;;21637:18;:126::i;11003:266::-;-1:-1:-1;;;;;11091:22:0;;11069:110;;;;-1:-1:-1;;;11069:110:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11216:6;;;11195:38;;-1:-1:-1;;;;;11195:38:0;;;;11216:6;;;;;;11195:38;;;11244:6;:17;;-1:-1:-1;;;;;11244:17:0;;;;;-1:-1:-1;;;;;;11244:17:0;;;;;;;;;11003:266::o;3736:226::-;3856:7;3892:12;3884:6;;;;3876:29;;;;-1:-1:-1;;;3876: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;3876:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;3928:5:0;;;3736:226::o;23128:1176::-;23732:27;23740:5;-1:-1:-1;;;;;23732:25:0;;:27::i;:::-;23724:71;;;;;-1:-1:-1;;;23724:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;23869:12;23883:23;23918:5;-1:-1:-1;;;;;23910:19:0;23930:4;23910: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;;;23910: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;;23868:67:0;;;;23954:7;23946:52;;;;;-1:-1:-1;;;23946:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24015:17;;:21;24011:286;;24188:10;24177:30;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24177:30:0;24151:134;;;;-1:-1:-1;;;24151:134:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2807:181;2865:7;2897:5;;;2921:6;;;;2913:46;;;;;-1:-1:-1;;;2913:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;37109:1286;37301:7;;-1:-1:-1;;;;;37357:36:0;;26798:42;37357:36;:61;;;;-1:-1:-1;;;;;;37397:21:0;;;37357:61;37353:162;;;26798:42;-1:-1:-1;;;;;37435:32:0;;37468:6;37435:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37435:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37435:40:0;;;;37497:6;37490:13;;;;;37353:162;-1:-1:-1;;;;;37531:30:0;;37527:284;;-1:-1:-1;37592:6:0;37527:284;;;37657:16;37689:45;-1:-1:-1;;;;;37689:21:0;;37719:10;37631:16;37689:45;:21;:45;:::i;:::-;37749:50;-1:-1:-1;;;;;37749:21:0;;37779:10;37792:6;37749:50;:21;:50;:::i;:::-;37527:284;;37823:22;-1:-1:-1;;;;;37848:21:0;;;:114;;37922:40;;;-1:-1:-1;;;37922:40:0;;37956:4;37922:40;;;;;;-1:-1:-1;;;;;37922:25:0;;;;;:40;;;;;;;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;37922:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37922:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;37922:40:0;37848:114;;;37885:21;37848:114;37823:139;;37976:12;37994:10;-1:-1:-1;;;;;37994:15:0;38016:11;38029:8;37994: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;;;37994: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;;37975:63:0;;;38057:7;38049:41;;;;;-1:-1:-1;;;38049:41:0;;;;;;;;;;;;-1:-1:-1;;;38049:41:0;;;;;;;;;;;;;;;38103:20;-1:-1:-1;;;;;38126:21:0;;;:156;;38222:40;;;-1:-1:-1;;;38222:40:0;;38256:4;38222:40;;;;;;:60;;38267:14;;-1:-1:-1;;;;;38222:25:0;;;;;:40;;;;;;;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;38222:60:0;38126:156;;;38163:43;38164:21;38191:14;38163:43;:27;:43;:::i;:::-;38103:179;;38318:1;38303:12;:16;38295:60;;;;;-1:-1:-1;;;38295:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;38375:12;-1:-1:-1;;;;37109:1286:0;;;;;;;;:::o;5152:132::-;5210:7;5237:39;5241:1;5244;5237:39;;;;;;;;;;;;;;;;;:3;:39::i;15031:659::-;15091:4;15590:20;;15420:66;15639:23;;;;;;:42;;-1:-1:-1;15666:15:0;;;15639:42;15631:51;15031:659;-1:-1:-1;;;;15031:659:0:o;5814:379::-;5934:7;6036:12;6029:5;6021:28;;;;-1:-1:-1;;;6021:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;6021:28:0;;6060:9;6076:1;6072;:5;;;;;;;5814:379;-1:-1:-1;;;;;5814:379:0:o
Swarm Source
bzzr://41446176ef86f5ca83dd8406a8110e2f2a9785a07e548f17f908c536c13ebd42
Loading...
Loading
Loading...
Loading
OVERVIEW
Name Tag for remove for Zapper.FiMultichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.