Contract
0x85560d8Ee2e714E60645f887Dd4133ee0479B362
Feature Tip: Add private address tag to any address under My Name Tag !
Zapper.Fi: Balancer Zap in ETH or ERC20 contract has migrated to a new address.
Overview
ETH Balance
30.02 ETH
Eth Value
$68,437.56 (@ $2,279.73/ETH)Token Holdings
More Info
Private Name Tags
ContractCreator
Transactions Sent
Latest:
N/A
First:
N/A
Latest 25 from a total of 211 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Easy Zap In | 10940249 | 1450 days ago | IN | 0.02 ETH | 0.0011169 | ||||
Easy Zap In | 10348888 | 1542 days ago | IN | 30 ETH | 0.00098658 | ||||
Easy Zap In | 10348644 | 1542 days ago | IN | 0 ETH | 0.00092937 | ||||
Easy Zap In | 10345638 | 1542 days ago | IN | 0 ETH | 0.00061958 | ||||
Easy Zap In | 10345626 | 1542 days ago | IN | 0 ETH | 0.00061958 | ||||
Destruct | 10345021 | 1542 days ago | IN | 0 ETH | 0.00029538 | ||||
Easy Zap In | 10344780 | 1542 days ago | IN | 0 ETH | 0.00736067 | ||||
Easy Zap In | 10344757 | 1542 days ago | IN | 0 ETH | 0.00709579 | ||||
Easy Zap In | 10344757 | 1542 days ago | IN | 0 ETH | 0.00854601 | ||||
Easy Zap In | 10344740 | 1542 days ago | IN | 0 ETH | 0.01297337 | ||||
Easy Zap In | 10344727 | 1542 days ago | IN | 0 ETH | 0.00480321 | ||||
Easy Zap In | 10344703 | 1542 days ago | IN | 0 ETH | 0.00371373 | ||||
Easy Zap In | 10344594 | 1542 days ago | IN | 0 ETH | 0.0074861 | ||||
Easy Zap In | 10344468 | 1542 days ago | IN | 0 ETH | 0.00501811 | ||||
Easy Zap In | 10344378 | 1542 days ago | IN | 1.7 ETH | 0.00571905 | ||||
Easy Zap In | 10344342 | 1542 days ago | IN | 0.2355 ETH | 0.00497682 | ||||
Easy Zap In | 10344256 | 1542 days ago | IN | 0.03 ETH | 0.00533864 | ||||
Easy Zap In | 10344243 | 1542 days ago | IN | 0 ETH | 0.00826765 | ||||
Easy Zap In | 10344220 | 1542 days ago | IN | 0.02 ETH | 0.00647895 | ||||
Easy Zap In | 10344199 | 1542 days ago | IN | 0.15 ETH | 0.00551097 | ||||
Easy Zap In | 10344172 | 1542 days ago | IN | 0 ETH | 0.0216956 | ||||
Easy Zap In | 10343984 | 1542 days ago | IN | 0.001 ETH | 0.00986085 | ||||
Easy Zap In | 10343910 | 1542 days ago | IN | 0.0001 ETH | 0.00517616 | ||||
Easy Zap In | 10343825 | 1542 days ago | IN | 20 ETH | 0.00544252 | ||||
Easy Zap In | 10343211 | 1542 days ago | IN | 0.01 ETH | 0.00536185 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
10345021 | 1542 days ago | 0 ETH | ||||
10344378 | 1542 days ago | 1.7 ETH | ||||
10344342 | 1542 days ago | 0.2355 ETH | ||||
10344256 | 1542 days ago | 0.03 ETH | ||||
10344220 | 1542 days ago | 0.02 ETH | ||||
10344199 | 1542 days ago | 0.15 ETH | ||||
10343984 | 1542 days ago | 0.001 ETH | ||||
10343910 | 1542 days ago | 0.0001 ETH | ||||
10343825 | 1542 days ago | 20 ETH | ||||
10343211 | 1542 days ago | 0.01 ETH | ||||
10343056 | 1542 days ago | 0.38 ETH | ||||
10342916 | 1542 days ago | 7.7802 ETH | ||||
10342661 | 1543 days ago | 0.01 ETH | ||||
10342560 | 1543 days ago | 0.8 ETH | ||||
10341707 | 1543 days ago | 0.04 ETH | ||||
10341603 | 1543 days ago | 0.1 ETH | ||||
10341275 | 1543 days ago | 0.3 ETH | ||||
10341168 | 1543 days ago | 0.1 ETH | ||||
10341116 | 1543 days ago | 0.1 ETH | ||||
10341112 | 1543 days ago | 0.263 ETH | ||||
10340596 | 1543 days ago | 0.18 ETH | ||||
10339788 | 1543 days ago | 5 ETH | ||||
10339297 | 1543 days ago | 0.3 ETH | ||||
10339017 | 1543 days ago | 0.3 ETH | ||||
10338447 | 1543 days ago | 50 ETH |
Loading...
Loading
Contract Self Destruct called at Txn Hash 0xf0727c4c33c608b03ad0d581e6469227e52e92f9ed84a4d44f67de0bf37dc0a7
Contract Name:
Balancer_ZapIn_General_V1
Compiler Version
v0.5.12+commit.7709ece9
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-06-20 */ // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.5.5; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Converts an `address` into `address payable`. Note that this is * simply a type cast: the actual underlying value is not changed. * * _Available since v2.4.0._ */ function toPayable(address account) internal pure returns (address payable) { return address(uint160(account)); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. * * _Available since v2.4.0._ */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-call-value (bool success, ) = recipient.call.value(amount)(""); require(success, "Address: unable to send value, recipient may have reverted"); } } // File: @openzeppelin/contracts/token/ERC20/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/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/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/math/SafeMath.sol pragma solidity ^0.5.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. * * _Available since v2.4.0._ */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. * * _Available since v2.4.0._ */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. * * _Available since v2.4.0._ */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } // File: contracts/Balancer-pool/Balancer_Zapin_general_v1.sol // File: browser/Balancer_ZapIn_General_V1.sol // Copyright (C) 2020 defizap, dipeshsukhani, nodarjanashia, suhailg, sumitrajput, apoorvlathey // 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 // File: localhost/defizap/node_modules/@openzeppelin/contracts-ethereum-package/contracts/token/ERC20/IERC20.sol ///@author DeFiZap ///@notice this contract helps in investing in balancer pools through ETH or ERC20 tokens pragma solidity 0.5.12; interface IBFactory_Balancer_ZapIn_General_V1 { function isBPool(address b) external view returns (bool); } interface IBPool_Balancer_ZapIn_General_V1 { function joinswapExternAmountIn( address tokenIn, uint256 tokenAmountIn, uint256 minPoolAmountOut ) external payable returns (uint256 poolAmountOut); function isBound(address t) external view returns (bool); function getFinalTokens() external view returns (address[] memory tokens); function totalSupply() external view returns (uint256); function getDenormalizedWeight(address token) external view returns (uint256); function getTotalDenormalizedWeight() external view returns (uint256); function getSwapFee() external view returns (uint256); function calcPoolOutGivenSingleIn( uint256 tokenBalanceIn, uint256 tokenWeightIn, uint256 poolSupply, uint256 totalWeight, uint256 tokenAmountIn, uint256 swapFee ) external pure returns (uint256 poolAmountOut); function getBalance(address token) external view returns (uint256); } interface IuniswapFactory_Balancer_ZapIn_General_V1 { function getExchange(address token) external view returns (address exchange); } interface Iuniswap_Balancer_ZapIn_General_V1 { function ethToTokenSwapInput(uint256 min_tokens, uint256 deadline) external payable returns (uint256 tokens_bought); // converting ERC20 to ERC20 and transfer function tokenToTokenSwapInput( uint256 tokens_sold, uint256 min_tokens_bought, uint256 min_eth_bought, uint256 deadline, address token_addr ) external returns (uint256 tokens_bought); function getTokenToEthInputPrice(uint256 tokens_sold) external view returns (uint256 eth_bought); function getEthToTokenInputPrice(uint256 eth_sold) external view returns (uint256 tokens_bought); function balanceOf(address _owner) external view returns (uint256); function transfer(address _to, uint256 _value) external returns (bool); function transferFrom(address from, address to, uint256 tokens) external returns (bool success); } interface IWETH { function deposit() external payable; function transfer(address to, uint256 value) external returns (bool); function withdraw(uint256) external; } contract Balancer_ZapIn_General_V1 is ReentrancyGuard, Ownable { using SafeMath for uint256; using Address for address; bool private stopped = false; uint16 public goodwill; address public dzgoodwillAddress; uint256 public defaultSlippage; IuniswapFactory_Balancer_ZapIn_General_V1 public UniSwapFactoryAddress = IuniswapFactory_Balancer_ZapIn_General_V1( 0xc0a47dFe034B400B47bDaD5FecDa2621de6c4d95 ); IBFactory_Balancer_ZapIn_General_V1 BalancerFactory = IBFactory_Balancer_ZapIn_General_V1( 0x9424B1412450D0f8Fc2255FAf6046b98213B76Bd ); address wethTokenAddress = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; event Zapin( address _toWhomToIssue, address _toBalancerPoolAddress, uint256 _OutgoingBPT ); constructor( uint16 _goodwill, address _dzgoodwillAddress, uint256 _slippage ) public { goodwill = _goodwill; dzgoodwillAddress = _dzgoodwillAddress; defaultSlippage = _slippage; } // circuit breaker modifiers modifier stopInEmergency { if (stopped) { revert("Temporarily Paused"); } else { _; } } /** @notice This function is used to invest in given balancer pool through ETH/ERC20 Tokens @param _FromTokenContractAddress The token used for investment (address(0x00) if ether) @param _ToBalancerPoolAddress The address of balancer pool to zapin @param _amount The amount of ERC to invest @param slippage slippage user wants @return success or failure */ function EasyZapIn( address _FromTokenContractAddress, address _ToBalancerPoolAddress, uint256 _amount, uint256 slippage ) public payable nonReentrant stopInEmergency returns (uint256 tokensBought) { require( BalancerFactory.isBPool(_ToBalancerPoolAddress), "Invalid Balancer Pool" ); uint256 withSlippage = slippage > 0 && slippage < 10000 ? slippage : defaultSlippage; if (_FromTokenContractAddress == address(0)) { require(msg.value > 0, "ERR: No ETH sent"); address _ToTokenContractAddress = _getBestDeal( _ToBalancerPoolAddress, msg.value, _FromTokenContractAddress ); tokensBought = _performZapIn( msg.sender, _FromTokenContractAddress, _ToBalancerPoolAddress, msg.value, _ToTokenContractAddress, withSlippage ); return tokensBought; } require(_amount > 0, "ERR: No ERC sent"); require(msg.value == 0, "ERR: ETH sent with tokens"); //transfer tokens to contract require( IERC20(_FromTokenContractAddress).transferFrom( msg.sender, address(this), _amount ), "Error in transferring ERC: 1" ); address _ToTokenContractAddress = _getBestDeal( _ToBalancerPoolAddress, _amount, _FromTokenContractAddress ); tokensBought = _performZapIn( msg.sender, _FromTokenContractAddress, _ToBalancerPoolAddress, _amount, _ToTokenContractAddress, withSlippage ); } /** @notice This function is used to invest in given balancer pool through ETH/ERC20 Tokens with interface @param _toWhomToIssue The user address who want to invest @param _FromTokenContractAddress The token used for investment (address(0x00) if ether) @param _ToBalancerPoolAddress The address of balancer pool to zapin @param _amount The amount of ERC to invest @param _IntermediateToken The token for intermediate conversion before zapin @param slippage slippage user wants @return The quantity of Balancer Pool tokens returned */ function ZapIn( address payable _toWhomToIssue, address _FromTokenContractAddress, address _ToBalancerPoolAddress, uint256 _amount, address _IntermediateToken, uint256 slippage ) public payable nonReentrant stopInEmergency returns (uint256 tokensBought) { uint256 withSlippage = slippage > 0 && slippage < 10000 ? slippage : defaultSlippage; if (_FromTokenContractAddress == address(0)) { require(msg.value > 0, "ERR: No ETH sent"); tokensBought = _performZapIn( _toWhomToIssue, _FromTokenContractAddress, _ToBalancerPoolAddress, msg.value, _IntermediateToken, withSlippage ); return tokensBought; } require(_amount > 0, "ERR: No ERC sent"); require(msg.value == 0, "ERR: ETH sent with tokens"); //transfer tokens to contract require( IERC20(_FromTokenContractAddress).transferFrom( _toWhomToIssue, address(this), _amount ), "Error in transferring ERC: 2" ); tokensBought = _performZapIn( _toWhomToIssue, _FromTokenContractAddress, _ToBalancerPoolAddress, _amount, _IntermediateToken, withSlippage ); } /** @notice This function internally called by ZapIn() and EasyZapIn() @param _toWhomToIssue The user address who want to invest @param _FromTokenContractAddress The token used for investment (address(0x00) if ether) @param _ToBalancerPoolAddress The address of balancer pool to zapin @param _amount The amount of ETH/ERC to invest @param _IntermediateToken The token for intermediate conversion before zapin @param slippage slippage user wants @return The quantity of Balancer Pool tokens returned */ function _performZapIn( address _toWhomToIssue, address _FromTokenContractAddress, address _ToBalancerPoolAddress, uint256 _amount, address _IntermediateToken, uint256 slippage ) internal returns (uint256 tokensBought) { // check if isBound() bool isBound = IBPool_Balancer_ZapIn_General_V1(_ToBalancerPoolAddress) .isBound(_FromTokenContractAddress); uint256 balancerTokens; if (isBound) { balancerTokens = _enter2Balancer( _ToBalancerPoolAddress, _FromTokenContractAddress, _amount ); } else { // swap tokens or eth uint256 tokenBought; if (_FromTokenContractAddress == address(0)) { tokenBought = _eth2Token(_IntermediateToken, slippage); } else { tokenBought = _token2Token( _FromTokenContractAddress, _IntermediateToken, _amount, slippage ); } //get BPT balancerTokens = _enter2Balancer( _ToBalancerPoolAddress, _IntermediateToken, tokenBought ); } //transfer goodwill uint256 goodwillPortion = _transferGoodwill( _ToBalancerPoolAddress, balancerTokens ); emit Zapin( _toWhomToIssue, _ToBalancerPoolAddress, SafeMath.sub(balancerTokens, goodwillPortion) ); //transfer tokens to user IERC20(_ToBalancerPoolAddress).transfer( _toWhomToIssue, SafeMath.sub(balancerTokens, goodwillPortion) ); return SafeMath.sub(balancerTokens, goodwillPortion); } /** @notice This function is used to calculate and transfer goodwill @param _tokenContractAddress Token in which goodwill is deducted @param tokens2Trade The total amount of tokens to be zapped in @return The quantity of goodwill deducted */ function _transferGoodwill( address _tokenContractAddress, uint256 tokens2Trade ) internal returns (uint256 goodwillPortion) { goodwillPortion = SafeMath.div( SafeMath.mul(tokens2Trade, goodwill), 10000 ); if (goodwillPortion == 0) { return 0; } require( IERC20(_tokenContractAddress).transfer( dzgoodwillAddress, goodwillPortion ), "Error in transferring BPT:1" ); } /** @notice This function is used to zapin to balancer pool @param _ToBalancerPoolAddress The address of balancer pool to zap in @param _FromTokenContractAddress The token used to zap in @param tokens2Trade The amount of tokens to invest @return The quantity of Balancer Pool tokens returned */ function _enter2Balancer( address _ToBalancerPoolAddress, address _FromTokenContractAddress, uint256 tokens2Trade ) internal returns (uint256 poolTokensOut) { require( IBPool_Balancer_ZapIn_General_V1(_ToBalancerPoolAddress).isBound( _FromTokenContractAddress ), "Token not bound" ); uint256 allowance = IERC20(_FromTokenContractAddress).allowance( address(this), _ToBalancerPoolAddress ); if (allowance < tokens2Trade) { IERC20(_FromTokenContractAddress).approve( _ToBalancerPoolAddress, uint256(-1) ); } poolTokensOut = IBPool_Balancer_ZapIn_General_V1(_ToBalancerPoolAddress) .joinswapExternAmountIn(_FromTokenContractAddress, tokens2Trade, 1); require(poolTokensOut > 0, "Error in entering balancer pool"); } /** @notice This function finds best token from the final tokens of balancer pool @param _ToBalancerPoolAddress The address of balancer pool to zap in @param _amount amount of eth/erc to invest @param _FromTokenContractAddress the token address which is used to invest @return The token address having max liquidity */ function _getBestDeal( address _ToBalancerPoolAddress, uint256 _amount, address _FromTokenContractAddress ) internal view returns (address _token) { //get token list address[] memory tokens = IBPool_Balancer_ZapIn_General_V1( _ToBalancerPoolAddress ).getFinalTokens(); uint256 amount = _amount; if (_FromTokenContractAddress != address(0)) { // check if isBound() bool isBound = IBPool_Balancer_ZapIn_General_V1( _ToBalancerPoolAddress ).isBound(_FromTokenContractAddress); if (isBound) return _FromTokenContractAddress; //get eth value for given token Iuniswap_Balancer_ZapIn_General_V1 FromUniSwapExchangeContractAddress = Iuniswap_Balancer_ZapIn_General_V1( UniSwapFactoryAddress.getExchange(_FromTokenContractAddress) ); //get qty of eth expected amount = Iuniswap_Balancer_ZapIn_General_V1( FromUniSwapExchangeContractAddress ).getTokenToEthInputPrice(_amount); } uint256 maxBPT; for (uint256 index = 0; index < tokens.length; index++) { Iuniswap_Balancer_ZapIn_General_V1 FromUniSwapExchangeContractAddress = Iuniswap_Balancer_ZapIn_General_V1( UniSwapFactoryAddress.getExchange(tokens[index]) ); if (address(FromUniSwapExchangeContractAddress) == address(0)) { continue; } //get qty of tokens uint256 expectedTokens = Iuniswap_Balancer_ZapIn_General_V1( FromUniSwapExchangeContractAddress ).getEthToTokenInputPrice(amount); //get bpt for given tokens uint256 expectedBPT = getToken2BPT( _ToBalancerPoolAddress, expectedTokens, tokens[index] ); //get token giving max BPT if (maxBPT < expectedBPT) { maxBPT = expectedBPT; _token = tokens[index]; } } } /** @notice Function gives the expected amount of pool tokens on investing @param _ToBalancerPoolAddress Address of balancer pool to zapin @param _IncomingERC The amount of ERC to invest @param _FromToken Address of token to zap in with @return Amount of BPT token */ function getToken2BPT( address _ToBalancerPoolAddress, uint256 _IncomingERC, address _FromToken ) internal view returns (uint256 tokensReturned) { uint256 totalSupply = IBPool_Balancer_ZapIn_General_V1( _ToBalancerPoolAddress ).totalSupply(); uint256 swapFee = IBPool_Balancer_ZapIn_General_V1( _ToBalancerPoolAddress ).getSwapFee(); uint256 totalWeight = IBPool_Balancer_ZapIn_General_V1( _ToBalancerPoolAddress ).getTotalDenormalizedWeight(); uint256 balance = IBPool_Balancer_ZapIn_General_V1( _ToBalancerPoolAddress ).getBalance(_FromToken); uint256 denorm = IBPool_Balancer_ZapIn_General_V1( _ToBalancerPoolAddress ).getDenormalizedWeight(_FromToken); tokensReturned = IBPool_Balancer_ZapIn_General_V1( _ToBalancerPoolAddress ).calcPoolOutGivenSingleIn( balance, denorm, totalSupply, totalWeight, _IncomingERC, swapFee ); } /** @notice This function is used to buy tokens from eth @param _tokenContractAddress Token address which we want to buy @return The quantity of token bought */ function _eth2Token(address _tokenContractAddress, uint256 slippage) internal returns (uint256 tokenBought) { if(_tokenContractAddress == wethTokenAddress) { IWETH(wethTokenAddress).deposit.value(msg.value)(); return msg.value; } Iuniswap_Balancer_ZapIn_General_V1 FromUniSwapExchangeContractAddress = Iuniswap_Balancer_ZapIn_General_V1( UniSwapFactoryAddress.getExchange(_tokenContractAddress) ); uint256 minTokenBought = FromUniSwapExchangeContractAddress .getEthToTokenInputPrice(msg.value); minTokenBought = SafeMath.div( SafeMath.mul(minTokenBought, SafeMath.sub(10000, slippage)), 10000 ); tokenBought = FromUniSwapExchangeContractAddress .ethToTokenSwapInput .value(msg.value)(minTokenBought, SafeMath.add(now, 300)); } /** @notice This function is used to swap tokens @param _FromTokenContractAddress The token address to swap from @param _ToTokenContractAddress The token address to swap to @param tokens2Trade The amount of tokens to swap @return The quantity of tokens bought */ function _token2Token( address _FromTokenContractAddress, address _ToTokenContractAddress, uint256 tokens2Trade, uint256 slippage ) internal returns (uint256 tokenBought) { Iuniswap_Balancer_ZapIn_General_V1 FromUniSwapExchangeContractAddress = Iuniswap_Balancer_ZapIn_General_V1( UniSwapFactoryAddress.getExchange(_FromTokenContractAddress) ); Iuniswap_Balancer_ZapIn_General_V1 ToUniSwapExchangeContractAddress = Iuniswap_Balancer_ZapIn_General_V1( UniSwapFactoryAddress.getExchange(_ToTokenContractAddress) ); IERC20(_FromTokenContractAddress).approve( address(FromUniSwapExchangeContractAddress), tokens2Trade ); uint256 minEthBought = FromUniSwapExchangeContractAddress .getTokenToEthInputPrice(tokens2Trade); minEthBought = SafeMath.div( SafeMath.mul(minEthBought, SafeMath.sub(10000, slippage)), 10000 ); uint256 minTokenBought = ToUniSwapExchangeContractAddress .getEthToTokenInputPrice(minEthBought); minTokenBought = SafeMath.div( SafeMath.mul(minTokenBought, SafeMath.sub(10000, slippage)), 10000 ); tokenBought = FromUniSwapExchangeContractAddress.tokenToTokenSwapInput( tokens2Trade, minTokenBought, minEthBought, SafeMath.add(now, 1800), _ToTokenContractAddress ); require(tokenBought > 0, "Error in swapping ERC: 1"); } function updateSlippage(uint256 _newSlippage) public onlyOwner { require( _newSlippage > 0 && _newSlippage < 10000, "Slippage Value not allowed" ); defaultSlippage = _newSlippage; } function set_new_goodwill(uint16 _new_goodwill) public onlyOwner { require( _new_goodwill >= 0 && _new_goodwill < 10000, "GoodWill Value not allowed" ); goodwill = _new_goodwill; } function set_new_dzgoodwillAddress(address _new_dzgoodwillAddress) public onlyOwner { dzgoodwillAddress = _new_dzgoodwillAddress; } function inCaseTokengetsStuck(IERC20 _TokenAddress) public onlyOwner { uint256 qty = _TokenAddress.balanceOf(address(this)); _TokenAddress.transfer(owner(), qty); } // - to Pause the contract function toggleContractActive() public onlyOwner { stopped = !stopped; } // - to withdraw any ETH balance sitting in the contract function withdraw() public onlyOwner { uint256 contractBalance = address(this).balance; address payable _to = owner().toPayable(); _to.transfer(contractBalance); } // - to kill the contract function destruct() public onlyOwner { address payable _to = owner().toPayable(); selfdestruct(_to); } function() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint16","name":"_goodwill","type":"uint16"},{"internalType":"address","name":"_dzgoodwillAddress","type":"address"},{"internalType":"uint256","name":"_slippage","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":"_toWhomToIssue","type":"address"},{"indexed":false,"internalType":"address","name":"_toBalancerPoolAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"_OutgoingBPT","type":"uint256"}],"name":"Zapin","type":"event"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":false,"inputs":[{"internalType":"address","name":"_FromTokenContractAddress","type":"address"},{"internalType":"address","name":"_ToBalancerPoolAddress","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"slippage","type":"uint256"}],"name":"EasyZapIn","outputs":[{"internalType":"uint256","name":"tokensBought","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"UniSwapFactoryAddress","outputs":[{"internalType":"contract IuniswapFactory_Balancer_ZapIn_General_V1","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address payable","name":"_toWhomToIssue","type":"address"},{"internalType":"address","name":"_FromTokenContractAddress","type":"address"},{"internalType":"address","name":"_ToBalancerPoolAddress","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_IntermediateToken","type":"address"},{"internalType":"uint256","name":"slippage","type":"uint256"}],"name":"ZapIn","outputs":[{"internalType":"uint256","name":"tokensBought","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"defaultSlippage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"destruct","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"dzgoodwillAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"goodwill","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IERC20","name":"_TokenAddress","type":"address"}],"name":"inCaseTokengetsStuck","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_dzgoodwillAddress","type":"address"}],"name":"set_new_dzgoodwillAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint16","name":"_new_goodwill","type":"uint16"}],"name":"set_new_goodwill","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"toggleContractActive","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_newSlippage","type":"uint256"}],"name":"updateSlippage","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526000805460ff60a81b19169055600380546001600160a01b031990811673c0a47dfe034b400b47bdad5fecda2621de6c4d9517909155600480548216739424b1412450d0f8fc2255faf6046b98213b76bd1790556005805490911673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc217905534801561008357600080fd5b506040516200283538038062002835833981810160405260608110156100a857600080fd5b50805160208201516040909201516000805460ff191660011781559192916100d76001600160e01b0361018616565b60008054610100600160a81b0319166101006001600160a01b038416908102919091178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506000805461ffff9094167601000000000000000000000000000000000000000000000261ffff60b01b1990941693909317909255600180546001600160a01b039092166001600160a01b031990921691909117905560025561018a565b3390565b61269b806200019a6000396000f3fe6080604052600436106100fe5760003560e01c80635de0398e116100955780638da5cb5b116100645780638da5cb5b146102ee5780638f32d59b14610303578063b10e1dbc1461032c578063c3a8fcb01461035a578063f2fde38b1461036f576100fe565b80635de0398e14610230578063715018a61461025c5780638070653014610271578063849e25f4146102bb576100fe565b806344da4abd116100d157806344da4abd14610169578063525d509e146101b75780635487404a146101e8578063551196d5146101fd576100fe565b80631385d24c1461010057806315b0d496146101155780632b68b9c61461013f5780633ccfd60b14610154575b005b34801561010c57600080fd5b506100fe6103a2565b34801561012157600080fd5b506100fe6004803603602081101561013857600080fd5b503561040a565b34801561014b57600080fd5b506100fe6104b8565b34801561016057600080fd5b506100fe610528565b6101a56004803603608081101561017f57600080fd5b506001600160a01b038135811691602081013590911690604081013590606001356105bc565b60408051918252519081900360200190f35b3480156101c357600080fd5b506101cc610982565b604080516001600160a01b039092168252519081900360200190f35b3480156101f457600080fd5b506101a5610991565b34801561020957600080fd5b506100fe6004803603602081101561022057600080fd5b50356001600160a01b0316610997565b34801561023c57600080fd5b50610245610aed565b6040805161ffff9092168252519081900360200190f35b34801561026857600080fd5b506100fe610afe565b6101a5600480360360c081101561028757600080fd5b506001600160a01b038135811691602081013582169160408201358116916060810135916080820135169060a00135610ba1565b3480156102c757600080fd5b506100fe600480360360208110156102de57600080fd5b50356001600160a01b0316610e7f565b3480156102fa57600080fd5b506101cc610ef5565b34801561030f57600080fd5b50610318610f09565b604080519115158252519081900360200190f35b34801561033857600080fd5b506100fe6004803603602081101561034f57600080fd5b503561ffff16610f32565b34801561036657600080fd5b506101cc610ff5565b34801561037b57600080fd5b506100fe6004803603602081101561039257600080fd5b50356001600160a01b0316611004565b6103aa610f09565b6103e9576040805162461bcd60e51b81526020600482018190526024820152600080516020612647833981519152604482015290519081900360640190fd5b6000805460ff60a81b198116600160a81b9182900460ff1615909102179055565b610412610f09565b610451576040805162461bcd60e51b81526020600482018190526024820152600080516020612647833981519152604482015290519081900360640190fd5b600081118015610462575061271081105b6104b3576040805162461bcd60e51b815260206004820152601a60248201527f536c6970706167652056616c7565206e6f7420616c6c6f776564000000000000604482015290519081900360640190fd5b600255565b6104c0610f09565b6104ff576040805162461bcd60e51b81526020600482018190526024820152600080516020612647833981519152604482015290519081900360640190fd5b600061051a61050c610ef5565b6001600160a01b0316611057565b9050806001600160a01b0316ff5b610530610f09565b61056f576040805162461bcd60e51b81526020600482018190526024820152600080516020612647833981519152604482015290519081900360640190fd5b3031600061057e61050c610ef5565b6040519091506001600160a01b0382169083156108fc029084906000818181858888f193505050501580156105b7573d6000803e3d6000fd5b505050565b6000805460ff16610614576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6000805460ff191690819055600160a81b900460ff1615610671576040805162461bcd60e51b815260206004820152601260248201527115195b5c1bdc985c9a5b1e4814185d5cd95960721b604482015290519081900360640190fd5b600480546040805163615db6e160e11b81526001600160a01b03888116948201949094529051929091169163c2bb6dc291602480820192602092909190829003018186803b1580156106c257600080fd5b505afa1580156106d6573d6000803e3d6000fd5b505050506040513d60208110156106ec57600080fd5b505161073f576040805162461bcd60e51b815260206004820152601560248201527f496e76616c69642042616c616e63657220506f6f6c0000000000000000000000604482015290519081900360640190fd5b60008083118015610751575061271083105b61075d5760025461075f565b825b90506001600160a01b0386166107de57600034116107b7576040805162461bcd60e51b815260206004820152601060248201526f1154948e88139bc8115512081cd95b9d60821b604482015290519081900360640190fd5b60006107c486348961105a565b90506107d433888834858761149e565b925061096d915050565b60008411610826576040805162461bcd60e51b815260206004820152601060248201526f1154948e88139bc8115490c81cd95b9d60821b604482015290519081900360640190fd5b3415610879576040805162461bcd60e51b815260206004820152601960248201527f4552523a204554482073656e74207769746820746f6b656e7300000000000000604482015290519081900360640190fd5b604080516323b872dd60e01b81523360048201523060248201526044810186905290516001600160a01b038816916323b872dd9160648083019260209291908290030181600087803b1580156108ce57600080fd5b505af11580156108e2573d6000803e3d6000fd5b505050506040513d60208110156108f857600080fd5b505161094b576040805162461bcd60e51b815260206004820152601c60248201527f4572726f7220696e207472616e7366657272696e67204552433a203100000000604482015290519081900360640190fd5b600061095886868961105a565b905061096833888888858761149e565b925050505b6000805460ff19166001179055949350505050565b6003546001600160a01b031681565b60025481565b61099f610f09565b6109de576040805162461bcd60e51b81526020600482018190526024820152600080516020612647833981519152604482015290519081900360640190fd5b604080516370a0823160e01b815230600482015290516000916001600160a01b038416916370a0823191602480820192602092909190829003018186803b158015610a2857600080fd5b505afa158015610a3c573d6000803e3d6000fd5b505050506040513d6020811015610a5257600080fd5b505190506001600160a01b03821663a9059cbb610a6d610ef5565b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015610abd57600080fd5b505af1158015610ad1573d6000803e3d6000fd5b505050506040513d6020811015610ae757600080fd5b50505050565b600054600160b01b900461ffff1681565b610b06610f09565b610b45576040805162461bcd60e51b81526020600482018190526024820152600080516020612647833981519152604482015290519081900360640190fd5b600080546040516101009091046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a36000805474ffffffffffffffffffffffffffffffffffffffff0019169055565b6000805460ff16610bf9576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6000805460ff191690819055600160a81b900460ff1615610c56576040805162461bcd60e51b815260206004820152601260248201527115195b5c1bdc985c9a5b1e4814185d5cd95960721b604482015290519081900360640190fd5b60008083118015610c68575061271083105b610c7457600254610c76565b825b90506001600160a01b038716610ce55760003411610cce576040805162461bcd60e51b815260206004820152601060248201526f1154948e88139bc8115512081cd95b9d60821b604482015290519081900360640190fd5b610cdc88888834888661149e565b9150610e689050565b60008511610d2d576040805162461bcd60e51b815260206004820152601060248201526f1154948e88139bc8115490c81cd95b9d60821b604482015290519081900360640190fd5b3415610d80576040805162461bcd60e51b815260206004820152601960248201527f4552523a204554482073656e74207769746820746f6b656e7300000000000000604482015290519081900360640190fd5b604080516323b872dd60e01b81526001600160a01b038a81166004830152306024830152604482018890529151918916916323b872dd916064808201926020929091908290030181600087803b158015610dd957600080fd5b505af1158015610ded573d6000803e3d6000fd5b505050506040513d6020811015610e0357600080fd5b5051610e56576040805162461bcd60e51b815260206004820152601c60248201527f4572726f7220696e207472616e7366657272696e67204552433a203200000000604482015290519081900360640190fd5b610e6488888888888661149e565b9150505b6000805460ff191660011790559695505050505050565b610e87610f09565b610ec6576040805162461bcd60e51b81526020600482018190526024820152600080516020612647833981519152604482015290519081900360640190fd5b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b60005461010090046001600160a01b031690565b6000805461010090046001600160a01b0316610f23611690565b6001600160a01b031614905090565b610f3a610f09565b610f79576040805162461bcd60e51b81526020600482018190526024820152600080516020612647833981519152604482015290519081900360640190fd5b6127108161ffff1610610fd3576040805162461bcd60e51b815260206004820152601a60248201527f476f6f6457696c6c2056616c7565206e6f7420616c6c6f776564000000000000604482015290519081900360640190fd5b6000805461ffff909216600160b01b0261ffff60b01b19909216919091179055565b6001546001600160a01b031681565b61100c610f09565b61104b576040805162461bcd60e51b81526020600482018190526024820152600080516020612647833981519152604482015290519081900360640190fd5b61105481611694565b50565b90565b60006060846001600160a01b031663be3bbd2e6040518163ffffffff1660e01b815260040160006040518083038186803b15801561109757600080fd5b505afa1580156110ab573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156110d457600080fd5b81019080805160405193929190846401000000008211156110f457600080fd5b90830190602082018581111561110957600080fd5b825186602082028301116401000000008211171561112657600080fd5b82525081516020918201928201910280838360005b8381101561115357818101518382015260200161113b565b50505050919091016040525092935086925050506001600160a01b03841615611306576000866001600160a01b0316632f37b624866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156111ce57600080fd5b505afa1580156111e2573d6000803e3d6000fd5b505050506040513d60208110156111f857600080fd5b50519050801561120d57849350505050611497565b600354604080516303795fb160e11b81526001600160a01b038881166004830152915160009392909216916306f2bf6291602480820192602092909190829003018186803b15801561125e57600080fd5b505afa158015611272573d6000803e3d6000fd5b505050506040513d602081101561128857600080fd5b5051604080516395b68fe760e01b8152600481018a905290519192506001600160a01b038316916395b68fe791602480820192602092909190829003018186803b1580156112d557600080fd5b505afa1580156112e9573d6000803e3d6000fd5b505050506040513d60208110156112ff57600080fd5b5051925050505b6000805b83518110156114925760035484516000916001600160a01b0316906306f2bf629087908590811061133757fe5b60200260200101516040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561138557600080fd5b505afa158015611399573d6000803e3d6000fd5b505050506040513d60208110156113af57600080fd5b505190506001600160a01b0381166113c7575061148a565b6000816001600160a01b031663cd7724c3866040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561140d57600080fd5b505afa158015611421573d6000803e3d6000fd5b505050506040513d602081101561143757600080fd5b50518651909150600090611462908c9084908a908890811061145557fe5b602002602001015161174c565b9050808510156114865780945086848151811061147b57fe5b602002602001015197505b5050505b60010161130a565b505050505b9392505050565b600080856001600160a01b0316632f37b624886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156114f757600080fd5b505afa15801561150b573d6000803e3d6000fd5b505050506040513d602081101561152157600080fd5b505190506000811561153f57611538878988611a37565b905061157e565b60006001600160a01b038916611560576115598686611cf6565b905061156f565b61156c89878988611f2a565b90505b61157a888783611a37565b9150505b600061158a88836122cc565b90507f7c58760c09b45377b9759b1584bfa97aaad8a040feb4ec965b2b76e20b4af07f8a896115b985856123cc565b604080516001600160a01b0394851681529290931660208301528183015290519081900360600190a1876001600160a01b031663a9059cbb8b6115fc85856123cc565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561164b57600080fd5b505af115801561165f573d6000803e3d6000fd5b505050506040513d602081101561167557600080fd5b50611682905082826123cc565b9a9950505050505050505050565b3390565b6001600160a01b0381166116d95760405162461bcd60e51b81526004018080602001828103825260268152602001806126006026913960400191505060405180910390fd5b600080546040516001600160a01b038085169361010090930416917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166101000274ffffffffffffffffffffffffffffffffffffffff0019909216919091179055565b600080846001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561178857600080fd5b505afa15801561179c573d6000803e3d6000fd5b505050506040513d60208110156117b257600080fd5b505160408051631a995bed60e31b815290519192506000916001600160a01b0388169163d4cadf68916004808301926020929190829003018186803b1580156117fa57600080fd5b505afa15801561180e573d6000803e3d6000fd5b505050506040513d602081101561182457600080fd5b50516040805163936c347760e01b815290519192506000916001600160a01b0389169163936c3477916004808301926020929190829003018186803b15801561186c57600080fd5b505afa158015611880573d6000803e3d6000fd5b505050506040513d602081101561189657600080fd5b50516040805163f8b2cb4f60e01b81526001600160a01b0388811660048301529151929350600092918a169163f8b2cb4f91602480820192602092909190829003018186803b1580156118e857600080fd5b505afa1580156118fc573d6000803e3d6000fd5b505050506040513d602081101561191257600080fd5b505160408051634a46c67360e11b81526001600160a01b0389811660048301529151929350600092918b169163948d8ce691602480820192602092909190829003018186803b15801561196457600080fd5b505afa158015611978573d6000803e3d6000fd5b505050506040513d602081101561198e57600080fd5b505160408051638656b65360e01b815260048101859052602481018390526044810188905260648101869052608481018b905260a4810187905290519192506001600160a01b038b1691638656b6539160c480820192602092909190829003018186803b1580156119fe57600080fd5b505afa158015611a12573d6000803e3d6000fd5b505050506040513d6020811015611a2857600080fd5b50519998505050505050505050565b6000836001600160a01b0316632f37b624846040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611a8f57600080fd5b505afa158015611aa3573d6000803e3d6000fd5b505050506040513d6020811015611ab957600080fd5b5051611b0c576040805162461bcd60e51b815260206004820152600f60248201527f546f6b656e206e6f7420626f756e640000000000000000000000000000000000604482015290519081900360640190fd5b60408051636eb1769f60e11b81523060048201526001600160a01b038681166024830152915160009286169163dd62ed3e916044808301926020929190829003018186803b158015611b5d57600080fd5b505afa158015611b71573d6000803e3d6000fd5b505050506040513d6020811015611b8757600080fd5b5051905082811015611c14576040805163095ea7b360e01b81526001600160a01b038781166004830152600019602483015291519186169163095ea7b3916044808201926020929091908290030181600087803b158015611be757600080fd5b505af1158015611bfb573d6000803e3d6000fd5b505050506040513d6020811015611c1157600080fd5b50505b60408051635db3427760e01b81526001600160a01b0386811660048301526024820186905260016044830152915191871691635db34277916064808201926020929091908290030181600087803b158015611c6e57600080fd5b505af1158015611c82573d6000803e3d6000fd5b505050506040513d6020811015611c9857600080fd5b5051915081611cee576040805162461bcd60e51b815260206004820152601f60248201527f4572726f7220696e20656e746572696e672062616c616e63657220706f6f6c00604482015290519081900360640190fd5b509392505050565b6005546000906001600160a01b0384811691161415611d8057600560009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d5f57600080fd5b505af1158015611d73573d6000803e3d6000fd5b5050505050349050611f24565b600354604080516303795fb160e11b81526001600160a01b038681166004830152915160009392909216916306f2bf6291602480820192602092909190829003018186803b158015611dd157600080fd5b505afa158015611de5573d6000803e3d6000fd5b505050506040513d6020811015611dfb57600080fd5b50516040805163cd7724c360e01b815234600482015290519192506000916001600160a01b0384169163cd7724c3916024808301926020929190829003018186803b158015611e4957600080fd5b505afa158015611e5d573d6000803e3d6000fd5b505050506040513d6020811015611e7357600080fd5b50519050611e97611e8f82611e8a612710886123cc565b61240e565b612710612467565b9050816001600160a01b031663f39b5b9b3483611eb64261012c6124a9565b6040518463ffffffff1660e01b815260040180838152602001828152602001925050506020604051808303818588803b158015611ef257600080fd5b505af1158015611f06573d6000803e3d6000fd5b50505050506040513d6020811015611f1d57600080fd5b5051925050505b92915050565b600354604080516303795fb160e11b81526001600160a01b0387811660048301529151600093849316916306f2bf62916024808301926020929190829003018186803b158015611f7957600080fd5b505afa158015611f8d573d6000803e3d6000fd5b505050506040513d6020811015611fa357600080fd5b5051600354604080516303795fb160e11b81526001600160a01b038981166004830152915193945060009391909216916306f2bf62916024808301926020929190829003018186803b158015611ff857600080fd5b505afa15801561200c573d6000803e3d6000fd5b505050506040513d602081101561202257600080fd5b50516040805163095ea7b360e01b81526001600160a01b0385811660048301526024820189905291519293509089169163095ea7b3916044808201926020929091908290030181600087803b15801561207a57600080fd5b505af115801561208e573d6000803e3d6000fd5b505050506040513d60208110156120a457600080fd5b5050604080516395b68fe760e01b81526004810187905290516000916001600160a01b038516916395b68fe791602480820192602092909190829003018186803b1580156120f157600080fd5b505afa158015612105573d6000803e3d6000fd5b505050506040513d602081101561211b57600080fd5b50519050612132611e8f82611e8a612710896123cc565b90506000826001600160a01b031663cd7724c3836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561217a57600080fd5b505afa15801561218e573d6000803e3d6000fd5b505050506040513d60208110156121a457600080fd5b505190506121bb611e8f82611e8a6127108a6123cc565b9050836001600160a01b031663ddf7e1a78883856121db426107086124a9565b8d6040518663ffffffff1660e01b815260040180868152602001858152602001848152602001838152602001826001600160a01b03166001600160a01b0316815260200195505050505050602060405180830381600087803b15801561224057600080fd5b505af1158015612254573d6000803e3d6000fd5b505050506040513d602081101561226a57600080fd5b50519450846122c0576040805162461bcd60e51b815260206004820152601860248201527f4572726f7220696e207377617070696e67204552433a20310000000000000000604482015290519081900360640190fd5b50505050949350505050565b600080546122ea90611e8f908490600160b01b900461ffff1661240e565b9050806122f957506000611f24565b6001546040805163a9059cbb60e01b81526001600160a01b0392831660048201526024810184905290519185169163a9059cbb916044808201926020929091908290030181600087803b15801561234f57600080fd5b505af1158015612363573d6000803e3d6000fd5b505050506040513d602081101561237957600080fd5b5051611f24576040805162461bcd60e51b815260206004820152601b60248201527f4572726f7220696e207472616e7366657272696e67204250543a310000000000604482015290519081900360640190fd5b600061149783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612503565b60008261241d57506000611f24565b8282028284828161242a57fe5b04146114975760405162461bcd60e51b81526004018080602001828103825260218152602001806126266021913960400191505060405180910390fd5b600061149783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061259a565b600082820183811015611497576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600081848411156125925760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561255757818101518382015260200161253f565b50505050905090810190601f1680156125845780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081836125e95760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561255757818101518382015260200161253f565b5060008385816125f557fe5b049594505050505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a265627a7a723158200424d2843a78a795f0ed3632b4061e624ed4c743a0d4eb651330bfd247e5d89f64736f6c634300050c00320000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f79cabc4caca5eca8ee6a36651a0ad5a2190f04e00000000000000000000000000000000000000000000000000000000000000c8
Deployed Bytecode
0x6080604052600436106100fe5760003560e01c80635de0398e116100955780638da5cb5b116100645780638da5cb5b146102ee5780638f32d59b14610303578063b10e1dbc1461032c578063c3a8fcb01461035a578063f2fde38b1461036f576100fe565b80635de0398e14610230578063715018a61461025c5780638070653014610271578063849e25f4146102bb576100fe565b806344da4abd116100d157806344da4abd14610169578063525d509e146101b75780635487404a146101e8578063551196d5146101fd576100fe565b80631385d24c1461010057806315b0d496146101155780632b68b9c61461013f5780633ccfd60b14610154575b005b34801561010c57600080fd5b506100fe6103a2565b34801561012157600080fd5b506100fe6004803603602081101561013857600080fd5b503561040a565b34801561014b57600080fd5b506100fe6104b8565b34801561016057600080fd5b506100fe610528565b6101a56004803603608081101561017f57600080fd5b506001600160a01b038135811691602081013590911690604081013590606001356105bc565b60408051918252519081900360200190f35b3480156101c357600080fd5b506101cc610982565b604080516001600160a01b039092168252519081900360200190f35b3480156101f457600080fd5b506101a5610991565b34801561020957600080fd5b506100fe6004803603602081101561022057600080fd5b50356001600160a01b0316610997565b34801561023c57600080fd5b50610245610aed565b6040805161ffff9092168252519081900360200190f35b34801561026857600080fd5b506100fe610afe565b6101a5600480360360c081101561028757600080fd5b506001600160a01b038135811691602081013582169160408201358116916060810135916080820135169060a00135610ba1565b3480156102c757600080fd5b506100fe600480360360208110156102de57600080fd5b50356001600160a01b0316610e7f565b3480156102fa57600080fd5b506101cc610ef5565b34801561030f57600080fd5b50610318610f09565b604080519115158252519081900360200190f35b34801561033857600080fd5b506100fe6004803603602081101561034f57600080fd5b503561ffff16610f32565b34801561036657600080fd5b506101cc610ff5565b34801561037b57600080fd5b506100fe6004803603602081101561039257600080fd5b50356001600160a01b0316611004565b6103aa610f09565b6103e9576040805162461bcd60e51b81526020600482018190526024820152600080516020612647833981519152604482015290519081900360640190fd5b6000805460ff60a81b198116600160a81b9182900460ff1615909102179055565b610412610f09565b610451576040805162461bcd60e51b81526020600482018190526024820152600080516020612647833981519152604482015290519081900360640190fd5b600081118015610462575061271081105b6104b3576040805162461bcd60e51b815260206004820152601a60248201527f536c6970706167652056616c7565206e6f7420616c6c6f776564000000000000604482015290519081900360640190fd5b600255565b6104c0610f09565b6104ff576040805162461bcd60e51b81526020600482018190526024820152600080516020612647833981519152604482015290519081900360640190fd5b600061051a61050c610ef5565b6001600160a01b0316611057565b9050806001600160a01b0316ff5b610530610f09565b61056f576040805162461bcd60e51b81526020600482018190526024820152600080516020612647833981519152604482015290519081900360640190fd5b3031600061057e61050c610ef5565b6040519091506001600160a01b0382169083156108fc029084906000818181858888f193505050501580156105b7573d6000803e3d6000fd5b505050565b6000805460ff16610614576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6000805460ff191690819055600160a81b900460ff1615610671576040805162461bcd60e51b815260206004820152601260248201527115195b5c1bdc985c9a5b1e4814185d5cd95960721b604482015290519081900360640190fd5b600480546040805163615db6e160e11b81526001600160a01b03888116948201949094529051929091169163c2bb6dc291602480820192602092909190829003018186803b1580156106c257600080fd5b505afa1580156106d6573d6000803e3d6000fd5b505050506040513d60208110156106ec57600080fd5b505161073f576040805162461bcd60e51b815260206004820152601560248201527f496e76616c69642042616c616e63657220506f6f6c0000000000000000000000604482015290519081900360640190fd5b60008083118015610751575061271083105b61075d5760025461075f565b825b90506001600160a01b0386166107de57600034116107b7576040805162461bcd60e51b815260206004820152601060248201526f1154948e88139bc8115512081cd95b9d60821b604482015290519081900360640190fd5b60006107c486348961105a565b90506107d433888834858761149e565b925061096d915050565b60008411610826576040805162461bcd60e51b815260206004820152601060248201526f1154948e88139bc8115490c81cd95b9d60821b604482015290519081900360640190fd5b3415610879576040805162461bcd60e51b815260206004820152601960248201527f4552523a204554482073656e74207769746820746f6b656e7300000000000000604482015290519081900360640190fd5b604080516323b872dd60e01b81523360048201523060248201526044810186905290516001600160a01b038816916323b872dd9160648083019260209291908290030181600087803b1580156108ce57600080fd5b505af11580156108e2573d6000803e3d6000fd5b505050506040513d60208110156108f857600080fd5b505161094b576040805162461bcd60e51b815260206004820152601c60248201527f4572726f7220696e207472616e7366657272696e67204552433a203100000000604482015290519081900360640190fd5b600061095886868961105a565b905061096833888888858761149e565b925050505b6000805460ff19166001179055949350505050565b6003546001600160a01b031681565b60025481565b61099f610f09565b6109de576040805162461bcd60e51b81526020600482018190526024820152600080516020612647833981519152604482015290519081900360640190fd5b604080516370a0823160e01b815230600482015290516000916001600160a01b038416916370a0823191602480820192602092909190829003018186803b158015610a2857600080fd5b505afa158015610a3c573d6000803e3d6000fd5b505050506040513d6020811015610a5257600080fd5b505190506001600160a01b03821663a9059cbb610a6d610ef5565b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015610abd57600080fd5b505af1158015610ad1573d6000803e3d6000fd5b505050506040513d6020811015610ae757600080fd5b50505050565b600054600160b01b900461ffff1681565b610b06610f09565b610b45576040805162461bcd60e51b81526020600482018190526024820152600080516020612647833981519152604482015290519081900360640190fd5b600080546040516101009091046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a36000805474ffffffffffffffffffffffffffffffffffffffff0019169055565b6000805460ff16610bf9576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6000805460ff191690819055600160a81b900460ff1615610c56576040805162461bcd60e51b815260206004820152601260248201527115195b5c1bdc985c9a5b1e4814185d5cd95960721b604482015290519081900360640190fd5b60008083118015610c68575061271083105b610c7457600254610c76565b825b90506001600160a01b038716610ce55760003411610cce576040805162461bcd60e51b815260206004820152601060248201526f1154948e88139bc8115512081cd95b9d60821b604482015290519081900360640190fd5b610cdc88888834888661149e565b9150610e689050565b60008511610d2d576040805162461bcd60e51b815260206004820152601060248201526f1154948e88139bc8115490c81cd95b9d60821b604482015290519081900360640190fd5b3415610d80576040805162461bcd60e51b815260206004820152601960248201527f4552523a204554482073656e74207769746820746f6b656e7300000000000000604482015290519081900360640190fd5b604080516323b872dd60e01b81526001600160a01b038a81166004830152306024830152604482018890529151918916916323b872dd916064808201926020929091908290030181600087803b158015610dd957600080fd5b505af1158015610ded573d6000803e3d6000fd5b505050506040513d6020811015610e0357600080fd5b5051610e56576040805162461bcd60e51b815260206004820152601c60248201527f4572726f7220696e207472616e7366657272696e67204552433a203200000000604482015290519081900360640190fd5b610e6488888888888661149e565b9150505b6000805460ff191660011790559695505050505050565b610e87610f09565b610ec6576040805162461bcd60e51b81526020600482018190526024820152600080516020612647833981519152604482015290519081900360640190fd5b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b60005461010090046001600160a01b031690565b6000805461010090046001600160a01b0316610f23611690565b6001600160a01b031614905090565b610f3a610f09565b610f79576040805162461bcd60e51b81526020600482018190526024820152600080516020612647833981519152604482015290519081900360640190fd5b6127108161ffff1610610fd3576040805162461bcd60e51b815260206004820152601a60248201527f476f6f6457696c6c2056616c7565206e6f7420616c6c6f776564000000000000604482015290519081900360640190fd5b6000805461ffff909216600160b01b0261ffff60b01b19909216919091179055565b6001546001600160a01b031681565b61100c610f09565b61104b576040805162461bcd60e51b81526020600482018190526024820152600080516020612647833981519152604482015290519081900360640190fd5b61105481611694565b50565b90565b60006060846001600160a01b031663be3bbd2e6040518163ffffffff1660e01b815260040160006040518083038186803b15801561109757600080fd5b505afa1580156110ab573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156110d457600080fd5b81019080805160405193929190846401000000008211156110f457600080fd5b90830190602082018581111561110957600080fd5b825186602082028301116401000000008211171561112657600080fd5b82525081516020918201928201910280838360005b8381101561115357818101518382015260200161113b565b50505050919091016040525092935086925050506001600160a01b03841615611306576000866001600160a01b0316632f37b624866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156111ce57600080fd5b505afa1580156111e2573d6000803e3d6000fd5b505050506040513d60208110156111f857600080fd5b50519050801561120d57849350505050611497565b600354604080516303795fb160e11b81526001600160a01b038881166004830152915160009392909216916306f2bf6291602480820192602092909190829003018186803b15801561125e57600080fd5b505afa158015611272573d6000803e3d6000fd5b505050506040513d602081101561128857600080fd5b5051604080516395b68fe760e01b8152600481018a905290519192506001600160a01b038316916395b68fe791602480820192602092909190829003018186803b1580156112d557600080fd5b505afa1580156112e9573d6000803e3d6000fd5b505050506040513d60208110156112ff57600080fd5b5051925050505b6000805b83518110156114925760035484516000916001600160a01b0316906306f2bf629087908590811061133757fe5b60200260200101516040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561138557600080fd5b505afa158015611399573d6000803e3d6000fd5b505050506040513d60208110156113af57600080fd5b505190506001600160a01b0381166113c7575061148a565b6000816001600160a01b031663cd7724c3866040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561140d57600080fd5b505afa158015611421573d6000803e3d6000fd5b505050506040513d602081101561143757600080fd5b50518651909150600090611462908c9084908a908890811061145557fe5b602002602001015161174c565b9050808510156114865780945086848151811061147b57fe5b602002602001015197505b5050505b60010161130a565b505050505b9392505050565b600080856001600160a01b0316632f37b624886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156114f757600080fd5b505afa15801561150b573d6000803e3d6000fd5b505050506040513d602081101561152157600080fd5b505190506000811561153f57611538878988611a37565b905061157e565b60006001600160a01b038916611560576115598686611cf6565b905061156f565b61156c89878988611f2a565b90505b61157a888783611a37565b9150505b600061158a88836122cc565b90507f7c58760c09b45377b9759b1584bfa97aaad8a040feb4ec965b2b76e20b4af07f8a896115b985856123cc565b604080516001600160a01b0394851681529290931660208301528183015290519081900360600190a1876001600160a01b031663a9059cbb8b6115fc85856123cc565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561164b57600080fd5b505af115801561165f573d6000803e3d6000fd5b505050506040513d602081101561167557600080fd5b50611682905082826123cc565b9a9950505050505050505050565b3390565b6001600160a01b0381166116d95760405162461bcd60e51b81526004018080602001828103825260268152602001806126006026913960400191505060405180910390fd5b600080546040516001600160a01b038085169361010090930416917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166101000274ffffffffffffffffffffffffffffffffffffffff0019909216919091179055565b600080846001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561178857600080fd5b505afa15801561179c573d6000803e3d6000fd5b505050506040513d60208110156117b257600080fd5b505160408051631a995bed60e31b815290519192506000916001600160a01b0388169163d4cadf68916004808301926020929190829003018186803b1580156117fa57600080fd5b505afa15801561180e573d6000803e3d6000fd5b505050506040513d602081101561182457600080fd5b50516040805163936c347760e01b815290519192506000916001600160a01b0389169163936c3477916004808301926020929190829003018186803b15801561186c57600080fd5b505afa158015611880573d6000803e3d6000fd5b505050506040513d602081101561189657600080fd5b50516040805163f8b2cb4f60e01b81526001600160a01b0388811660048301529151929350600092918a169163f8b2cb4f91602480820192602092909190829003018186803b1580156118e857600080fd5b505afa1580156118fc573d6000803e3d6000fd5b505050506040513d602081101561191257600080fd5b505160408051634a46c67360e11b81526001600160a01b0389811660048301529151929350600092918b169163948d8ce691602480820192602092909190829003018186803b15801561196457600080fd5b505afa158015611978573d6000803e3d6000fd5b505050506040513d602081101561198e57600080fd5b505160408051638656b65360e01b815260048101859052602481018390526044810188905260648101869052608481018b905260a4810187905290519192506001600160a01b038b1691638656b6539160c480820192602092909190829003018186803b1580156119fe57600080fd5b505afa158015611a12573d6000803e3d6000fd5b505050506040513d6020811015611a2857600080fd5b50519998505050505050505050565b6000836001600160a01b0316632f37b624846040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611a8f57600080fd5b505afa158015611aa3573d6000803e3d6000fd5b505050506040513d6020811015611ab957600080fd5b5051611b0c576040805162461bcd60e51b815260206004820152600f60248201527f546f6b656e206e6f7420626f756e640000000000000000000000000000000000604482015290519081900360640190fd5b60408051636eb1769f60e11b81523060048201526001600160a01b038681166024830152915160009286169163dd62ed3e916044808301926020929190829003018186803b158015611b5d57600080fd5b505afa158015611b71573d6000803e3d6000fd5b505050506040513d6020811015611b8757600080fd5b5051905082811015611c14576040805163095ea7b360e01b81526001600160a01b038781166004830152600019602483015291519186169163095ea7b3916044808201926020929091908290030181600087803b158015611be757600080fd5b505af1158015611bfb573d6000803e3d6000fd5b505050506040513d6020811015611c1157600080fd5b50505b60408051635db3427760e01b81526001600160a01b0386811660048301526024820186905260016044830152915191871691635db34277916064808201926020929091908290030181600087803b158015611c6e57600080fd5b505af1158015611c82573d6000803e3d6000fd5b505050506040513d6020811015611c9857600080fd5b5051915081611cee576040805162461bcd60e51b815260206004820152601f60248201527f4572726f7220696e20656e746572696e672062616c616e63657220706f6f6c00604482015290519081900360640190fd5b509392505050565b6005546000906001600160a01b0384811691161415611d8057600560009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d5f57600080fd5b505af1158015611d73573d6000803e3d6000fd5b5050505050349050611f24565b600354604080516303795fb160e11b81526001600160a01b038681166004830152915160009392909216916306f2bf6291602480820192602092909190829003018186803b158015611dd157600080fd5b505afa158015611de5573d6000803e3d6000fd5b505050506040513d6020811015611dfb57600080fd5b50516040805163cd7724c360e01b815234600482015290519192506000916001600160a01b0384169163cd7724c3916024808301926020929190829003018186803b158015611e4957600080fd5b505afa158015611e5d573d6000803e3d6000fd5b505050506040513d6020811015611e7357600080fd5b50519050611e97611e8f82611e8a612710886123cc565b61240e565b612710612467565b9050816001600160a01b031663f39b5b9b3483611eb64261012c6124a9565b6040518463ffffffff1660e01b815260040180838152602001828152602001925050506020604051808303818588803b158015611ef257600080fd5b505af1158015611f06573d6000803e3d6000fd5b50505050506040513d6020811015611f1d57600080fd5b5051925050505b92915050565b600354604080516303795fb160e11b81526001600160a01b0387811660048301529151600093849316916306f2bf62916024808301926020929190829003018186803b158015611f7957600080fd5b505afa158015611f8d573d6000803e3d6000fd5b505050506040513d6020811015611fa357600080fd5b5051600354604080516303795fb160e11b81526001600160a01b038981166004830152915193945060009391909216916306f2bf62916024808301926020929190829003018186803b158015611ff857600080fd5b505afa15801561200c573d6000803e3d6000fd5b505050506040513d602081101561202257600080fd5b50516040805163095ea7b360e01b81526001600160a01b0385811660048301526024820189905291519293509089169163095ea7b3916044808201926020929091908290030181600087803b15801561207a57600080fd5b505af115801561208e573d6000803e3d6000fd5b505050506040513d60208110156120a457600080fd5b5050604080516395b68fe760e01b81526004810187905290516000916001600160a01b038516916395b68fe791602480820192602092909190829003018186803b1580156120f157600080fd5b505afa158015612105573d6000803e3d6000fd5b505050506040513d602081101561211b57600080fd5b50519050612132611e8f82611e8a612710896123cc565b90506000826001600160a01b031663cd7724c3836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561217a57600080fd5b505afa15801561218e573d6000803e3d6000fd5b505050506040513d60208110156121a457600080fd5b505190506121bb611e8f82611e8a6127108a6123cc565b9050836001600160a01b031663ddf7e1a78883856121db426107086124a9565b8d6040518663ffffffff1660e01b815260040180868152602001858152602001848152602001838152602001826001600160a01b03166001600160a01b0316815260200195505050505050602060405180830381600087803b15801561224057600080fd5b505af1158015612254573d6000803e3d6000fd5b505050506040513d602081101561226a57600080fd5b50519450846122c0576040805162461bcd60e51b815260206004820152601860248201527f4572726f7220696e207377617070696e67204552433a20310000000000000000604482015290519081900360640190fd5b50505050949350505050565b600080546122ea90611e8f908490600160b01b900461ffff1661240e565b9050806122f957506000611f24565b6001546040805163a9059cbb60e01b81526001600160a01b0392831660048201526024810184905290519185169163a9059cbb916044808201926020929091908290030181600087803b15801561234f57600080fd5b505af1158015612363573d6000803e3d6000fd5b505050506040513d602081101561237957600080fd5b5051611f24576040805162461bcd60e51b815260206004820152601b60248201527f4572726f7220696e207472616e7366657272696e67204250543a310000000000604482015290519081900360640190fd5b600061149783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612503565b60008261241d57506000611f24565b8282028284828161242a57fe5b04146114975760405162461bcd60e51b81526004018080602001828103825260218152602001806126266021913960400191505060405180910390fd5b600061149783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061259a565b600082820183811015611497576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600081848411156125925760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561255757818101518382015260200161253f565b50505050905090810190601f1680156125845780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081836125e95760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561255757818101518382015260200161253f565b5060008385816125f557fe5b049594505050505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a265627a7a723158200424d2843a78a795f0ed3632b4061e624ed4c743a0d4eb651330bfd247e5d89f64736f6c634300050c0032
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f79cabc4caca5eca8ee6a36651a0ad5a2190f04e00000000000000000000000000000000000000000000000000000000000000c8
-----Decoded View---------------
Arg [0] : _goodwill (uint16): 0
Arg [1] : _dzgoodwillAddress (address): 0xf79Cabc4cacA5ECa8eE6A36651A0Ad5A2190F04E
Arg [2] : _slippage (uint256): 200
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [1] : 000000000000000000000000f79cabc4caca5eca8ee6a36651a0ad5a2190f04e
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000c8
Deployed Bytecode Sourcemap
21232:18952:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39628:86;;8:9:-1;5:2;;;30:1;27;20:12;5:2;39628:86:0;;;:::i;38732:239::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38732:239:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38732:239:0;;:::i;40018:125::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40018:125:0;;;:::i;39784:195::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;39784:195:0;;;:::i;22895:1931::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;22895:1931:0;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;21509:174;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21509:174:0;;;:::i;:::-;;;;-1:-1:-1;;;;;21509:174:0;;;;;;;;;;;;;;21470:30;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21470:30:0;;;:::i;39401:187::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;39401:187:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39401:187:0;-1:-1:-1;;;;;39401:187:0;;:::i;21402:22::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21402:22:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8924:140;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8924:140:0;;;:::i;25419:1516::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;25419:1516:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;39225:168::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;39225:168:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39225:168:0;-1:-1:-1;;;;;39225:168:0;;:::i;8113:79::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8113:79:0;;;:::i;8479:94::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8479:94:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;38979:238;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38979:238:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38979:238:0;;;;:::i;21431:32::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21431:32:0;;;:::i;9219:109::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9219:109:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9219:109:0;-1:-1:-1;;;;;9219:109:0;;:::i;39628:86::-;8325:9;:7;:9::i;:::-;8317:54;;;;;-1:-1:-1;;;8317:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8317:54:0;;;;;;;;;;;;;;;39699:7;;;-1:-1:-1;;;;39688:18:0;;-1:-1:-1;;;39699:7:0;;;;;;39698:8;39688:18;;;;;;39628:86::o;38732:239::-;8325:9;:7;:9::i;:::-;8317:54;;;;;-1:-1:-1;;;8317:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8317:54:0;;;;;;;;;;;;;;;38843:1;38828:12;:16;:40;;;;;38863:5;38848:12;:20;38828:40;38806:116;;;;;-1:-1:-1;;;38806:116:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;38933:15;:30;38732:239::o;40018:125::-;8325:9;:7;:9::i;:::-;8317:54;;;;;-1:-1:-1;;;8317:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8317:54:0;;;;;;;;;;;;;;;40066:19;40088;:7;:5;:7::i;:::-;-1:-1:-1;;;;;40088:17:0;;:19::i;:::-;40066:41;;40131:3;-1:-1:-1;;;;;40118:17:0;;39784:195;8325:9;:7;:9::i;:::-;8317:54;;;;;-1:-1:-1;;;8317:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8317:54:0;;;;;;;;;;;;;;;39866:4;39858:21;39832:23;39912:19;:7;:5;:7::i;:19::-;39942:29;;39890:41;;-1:-1:-1;;;;;;39942:12:0;;;:29;;;;;39955:15;;39942:29;;;;39955:15;39942:12;:29;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;39942:29:0;8382:1;;39784:195::o;22895:1931::-;23112:20;11709:11;;;;11701:55;;;;;-1:-1:-1;;;11701:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;11848:5;11834:19;;-1:-1:-1;;11834:19:0;;;;;-1:-1:-1;;;22384:7:0;;11834:19;22384:7;22380:102;;;22408:28;;;-1:-1:-1;;;22408:28:0;;;;;;;;;;;;-1:-1:-1;;;22408:28:0;;;;;;;;;;;;;;22380:102;23167:15;;;:47;;;-1:-1:-1;;;23167:47:0;;-1:-1:-1;;;;;23167:47:0;;;;;;;;;;;;:15;;;;;:23;;:47;;;;;;;;;;;;;;;:15;:47;;;5:2:-1;;;;30:1;27;20:12;5:2;23167:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23167:47:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23167:47:0;23145:118;;;;;-1:-1:-1;;;23145:118:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;23276:20;23310:1;23299:8;:12;:32;;;;;23326:5;23315:8;:16;23299:32;:87;;23371:15;;23299:87;;;23347:8;23299:87;23276:110;-1:-1:-1;;;;;;23403:39:0;;23399:616;;23479:1;23467:9;:13;23459:42;;;;;-1:-1:-1;;;23459:42:0;;;;;;;;;;;;-1:-1:-1;;;23459:42:0;;;;;;;;;;;;;;;23518:31;23552:140;23583:22;23624:9;23652:25;23552:12;:140::i;:::-;23518:174;;23724:243;23756:10;23785:25;23829:22;23870:9;23898:23;23940:12;23724:13;:243::i;:::-;23709:258;-1:-1:-1;23984:19:0;;-1:-1:-1;;23984:19:0;23399:616;24045:1;24035:7;:11;24027:40;;;;;-1:-1:-1;;;24027:40:0;;;;;;;;;;;;-1:-1:-1;;;24027:40:0;;;;;;;;;;;;;;;24086:9;:14;24078:52;;;;;-1:-1:-1;;;24078:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;24204:148;;;-1:-1:-1;;;24204:148:0;;24269:10;24204:148;;;;24306:4;24204:148;;;;;;;;;;;;-1:-1:-1;;;;;24204:46:0;;;;;:148;;;;;;;;;;;;;;-1:-1:-1;24204:46:0;:148;;;5:2:-1;;;;30:1;27;20:12;5:2;24204:148:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24204:148:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24204:148:0;24182:226;;;;;-1:-1:-1;;;24182:226:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;24421:31;24455:122;24482:22;24519:7;24541:25;24455:12;:122::i;:::-;24421:156;;24605:213;24633:10;24658:25;24698:22;24735:7;24757:23;24795:12;24605:13;:213::i;:::-;24590:228;;22469:1;;;12014:11;:18;;-1:-1:-1;;12014:18:0;12028:4;12014:18;;;22895:1931;;-1:-1:-1;;;;22895:1931:0:o;21509:174::-;;;-1:-1:-1;;;;;21509:174:0;;:::o;21470:30::-;;;;:::o;39401:187::-;8325:9;:7;:9::i;:::-;8317:54;;;;;-1:-1:-1;;;8317:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8317:54:0;;;;;;;;;;;;;;;39495:38;;;-1:-1:-1;;;39495:38:0;;39527:4;39495:38;;;;;;39481:11;;-1:-1:-1;;;;;39495:23:0;;;;;:38;;;;;;;;;;;;;;;:23;:38;;;5:2:-1;;;;30:1;27;20:12;5:2;39495:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;39495:38:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39495:38:0;;-1:-1:-1;;;;;;39544:22:0;;;39567:7;:5;:7::i;:::-;39576:3;39544:36;;;;;;;;;;;;;-1:-1:-1;;;;;39544:36:0;-1:-1:-1;;;;;39544:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;39544:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;39544:36:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;39401:187:0:o;21402:22::-;;;-1:-1:-1;;;21402:22:0;;;;;:::o;8924:140::-;8325:9;:7;:9::i;:::-;8317:54;;;;;-1:-1:-1;;;8317:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8317:54:0;;;;;;;;;;;;;;;9023:1;9007:6;;8986:40;;9007:6;;;;-1:-1:-1;;;;;9007:6:0;;8986:40;;9023:1;;8986:40;9054:1;9037:19;;-1:-1:-1;;9037:19:0;;;8924:140::o;25419:1516::-;25710:20;11709:11;;;;11701:55;;;;;-1:-1:-1;;;11701:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;11848:5;11834:19;;-1:-1:-1;;11834:19:0;;;;;-1:-1:-1;;;22384:7:0;;11834:19;22384:7;22380:102;;;22408:28;;;-1:-1:-1;;;22408:28:0;;;;;;;;;;;;-1:-1:-1;;;22408:28:0;;;;;;;;;;;;;;22380:102;25743:20;25777:1;25766:8;:12;:32;;;;;25793:5;25782:8;:16;25766:32;:87;;25838:15;;25766:87;;;25814:8;25766:87;25743:110;-1:-1:-1;;;;;;25870:39:0;;25866:424;;25946:1;25934:9;:13;25926:42;;;;;-1:-1:-1;;;25926:42:0;;;;;;;;;;;;-1:-1:-1;;;25926:42:0;;;;;;;;;;;;;;;26000:242;26032:14;26065:25;26109:22;26150:9;26178:18;26215:12;26000:13;:242::i;:::-;25985:257;-1:-1:-1;26259:19:0;;-1:-1:-1;26259:19:0;25866:424;26320:1;26310:7;:11;26302:40;;;;;-1:-1:-1;;;26302:40:0;;;;;;;;;;;;-1:-1:-1;;;26302:40:0;;;;;;;;;;;;;;;26361:9;:14;26353:52;;;;;-1:-1:-1;;;26353:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;26479:152;;;-1:-1:-1;;;26479:152:0;;-1:-1:-1;;;;;26479:152:0;;;;;;;26585:4;26479:152;;;;;;;;;;;;:46;;;;;;:152;;;;;;;;;;;;;;;-1:-1:-1;26479:46:0;:152;;;5:2:-1;;;;30:1;27;20:12;5:2;26479:152:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26479:152:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26479:152:0;26457:230;;;;;-1:-1:-1;;;26457:230:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;26715:212;26743:14;26772:25;26812:22;26849:7;26871:18;26904:12;26715:13;:212::i;:::-;26700:227;;22469:1;;12014:11;:18;;-1:-1:-1;;12014:18:0;12028:4;12014:18;;;25419:1516;;-1:-1:-1;;;;;;25419:1516:0:o;39225:168::-;8325:9;:7;:9::i;:::-;8317:54;;;;;-1:-1:-1;;;8317:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8317:54:0;;;;;;;;;;;;;;;39343:17;:42;;-1:-1:-1;;39343:42:0;-1:-1:-1;;;;;39343:42:0;;;;;;;;;;39225:168::o;8113:79::-;8151:7;8178:6;;;;-1:-1:-1;;;;;8178:6:0;;8113:79::o;8479:94::-;8519:4;8559:6;;;;;-1:-1:-1;;;;;8559:6:0;8543:12;:10;:12::i;:::-;-1:-1:-1;;;;;8543:22:0;;8536:29;;8479:94;:::o;38979:238::-;8325:9;:7;:9::i;:::-;8317:54;;;;;-1:-1:-1;;;8317:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8317:54:0;;;;;;;;;;;;;;;39115:5;39099:13;:21;;;39055:119;;;;;-1:-1:-1;;;39055:119:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;39185:8;:24;;;;;;-1:-1:-1;;;39185:24:0;-1:-1:-1;;;;39185:24:0;;;;;;;;;38979:238::o;21431:32::-;;;-1:-1:-1;;;;;21431:32:0;;:::o;9219:109::-;8325:9;:7;:9::i;:::-;8317:54;;;;;-1:-1:-1;;;8317:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8317:54:0;;;;;;;;;;;;;;;9292:28;9311:8;9292:18;:28::i;:::-;9219:109;:::o;1599:127::-;1709:7;1599:127::o;31959:2226::-;32122:14;32175:23;32248:22;-1:-1:-1;;;;;32201:95:0;;:97;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32201:97:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32201:97:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;32201:97:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;13:2;5:11;;2:2;;;29:1;26;19:12;2:2;32201:97:0;;;;;;;;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;261:11;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;373:25;;-1:-1;32201:97:0;;421:4:-1;412:14;;;;32201:97:0;;;;;412:14:-1;32201:97: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;;;-1:-1;;;;32201:97:0;;;;;;-1:-1:-1;32175:123:0;;-1:-1:-1;32328:7:0;;-1:-1:-1;;;;;;;;32352:39:0;;;32348:784;;32443:12;32509:22;-1:-1:-1;;;;;32458:96:0;;32555:25;32458:123;;;;;;;;;;;;;-1:-1:-1;;;;;32458:123:0;-1:-1:-1;;;;;32458:123:0;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32458:123:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32458:123:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32458:123:0;;-1:-1:-1;32598:45:0;;;;32618:25;32611:32;;;;;;;32598:45;32845:21;;:60;;;-1:-1:-1;;;32845:60:0;;-1:-1:-1;;;;;32845:60:0;;;;;;;;;32707:69;;32845:21;;;;;:33;;:60;;;;;;;;;;;;;;;:21;:60;;;5:2:-1;;;;30:1;27;20:12;5:2;32845:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32845:60:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32845:60:0;32985:135;;;-1:-1:-1;;;32985:135:0;;;;;;;;;;32845:60;;-1:-1:-1;;;;;;32985:126:0;;;;;:135;;;;;32845:60;;32985:135;;;;;;;;:126;:135;;;5:2:-1;;;;30:1;27;20:12;5:2;32985:135:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32985:135:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32985:135:0;;-1:-1:-1;;;32348:784:0;33144:14;;33171:1007;33203:6;:13;33195:5;:21;33171:1007;;;33382:21;;33416:13;;33244:69;;-1:-1:-1;;;;;33382:21:0;;:33;;33416:6;;33423:5;;33416:13;;;;;;;;;;;;33382:48;;;;;;;;;;;;;-1:-1:-1;;;;;33382:48:0;-1:-1:-1;;;;;33382:48:0;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33382:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33382:48:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;33382:48:0;;-1:-1:-1;;;;;;33466:57:0;;33462:106;;33544:8;;;33462:106;33617:22;33695:34;-1:-1:-1;;;;;33642:126:0;;33769:6;33642:134;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33642:134:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33642:134:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;33642:134:0;33960:13;;33642:134;;-1:-1:-1;33833:19:0;;33855:133;;33886:22;;33642:134;;33960:6;;33967:5;;33960:13;;;;;;;;;;;;33855:12;:133::i;:::-;33833:155;;34058:11;34049:6;:20;34045:122;;;34099:11;34090:20;;34138:6;34145:5;34138:13;;;;;;;;;;;;;;34129:22;;34045:122;33171:1007;;;;33218:7;;33171:1007;;;;31959:2226;;;;;;;;;:::o;27496:1931::-;27752:20;27816:12;27864:22;-1:-1:-1;;;;;27831:78:0;;27910:25;27831:105;;;;;;;;;;;;;-1:-1:-1;;;;;27831:105:0;-1:-1:-1;;;;;27831:105:0;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27831:105:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27831:105:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27831:105:0;;-1:-1:-1;27949:22:0;27984:864;;;;28029:141;28063:22;28104:25;28148:7;28029:15;:141::i;:::-;28012:158;;27984:864;;;28238:19;-1:-1:-1;;;;;28276:39:0;;28272:370;;28350:40;28361:18;28381:8;28350:10;:40::i;:::-;28336:54;;28272:370;;;28445:181;28480:25;28528:18;28569:7;28599:8;28445:12;:181::i;:::-;28431:195;;28272:370;28698:138;28732:22;28773:18;28810:11;28698:15;:138::i;:::-;28681:155;;27984:864;;28889:23;28915:94;28947:22;28984:14;28915:17;:94::i;:::-;28889:120;;29027:142;29047:14;29076:22;29113:45;29126:14;29142:15;29113:12;:45::i;:::-;29027:142;;;-1:-1:-1;;;;;29027:142:0;;;;;;;;;;;;;;;;;;;;;;;;;;;29224:22;-1:-1:-1;;;;;29217:39:0;;29271:14;29300:45;29313:14;29329:15;29300:12;:45::i;:::-;29217:139;;;;;;;;;;;;;-1:-1:-1;;;;;29217:139:0;-1:-1:-1;;;;;29217:139:0;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29217:139:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29217:139:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29374:45:0;;-1:-1:-1;29387:14:0;29403:15;29374:12;:45::i;:::-;29367:52;27496:1931;-1:-1:-1;;;;;;;;;;27496:1931:0:o;6819:98::-;6899:10;6819:98;:::o;9434:229::-;-1:-1:-1;;;;;9508:22:0;;9500:73;;;;-1:-1:-1;;;9500:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9610:6;;;9589:38;;-1:-1:-1;;;;;9589:38:0;;;;9610:6;;;;;;9589:38;;;9638:6;:17;;-1:-1:-1;;;;;9638:17:0;;;;;-1:-1:-1;;9638:17:0;;;;;;;;;9434:229::o;34497:1140::-;34650:22;34685:19;34754:22;-1:-1:-1;;;;;34707:92:0;;:94;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34707:94:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34707:94:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;34707:94:0;34830:93;;;-1:-1:-1;;;34830:93:0;;;;34707:94;;-1:-1:-1;34812:15:0;;-1:-1:-1;;;;;34830:91:0;;;;;:93;;;;;34707:94;;34830:93;;;;;;;:91;:93;;;5:2:-1;;;;30:1;27;20:12;5:2;34830:93:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34830:93:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;34830:93:0;34956:109;;;-1:-1:-1;;;34956:109:0;;;;34830:93;;-1:-1:-1;34934:19:0;;-1:-1:-1;;;;;34956:107:0;;;;;:109;;;;;34830:93;;34956:109;;;;;;;:107;:109;;;5:2:-1;;;;30:1;27;20:12;5:2;34956:109:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34956:109:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;34956:109:0;35094:103;;;-1:-1:-1;;;35094:103:0;;-1:-1:-1;;;;;35094:103:0;;;;;;;;;34956:109;;-1:-1:-1;35076:15:0;;35094:91;;;;;;:103;;;;;34956:109;;35094:103;;;;;;;;:91;:103;;;5:2:-1;;;;30:1;27;20:12;5:2;35094:103:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35094:103:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;35094:103:0;35225:114;;;-1:-1:-1;;;35225:114:0;;-1:-1:-1;;;;;35225:114:0;;;;;;;;;35094:103;;-1:-1:-1;35208:14:0;;35225:102;;;;;;:114;;;;;35094:103;;35225:114;;;;;;;;:102;:114;;;5:2:-1;;;;30:1;27;20:12;5:2;35225:114:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35225:114:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;35225:114:0;35369:260;;;-1:-1:-1;;;35369:260:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35225:114;;-1:-1:-1;;;;;;35369:105:0;;;;;:260;;;;;35225:114;;35369:260;;;;;;;;:105;:260;;;5:2:-1;;;;30:1;27;20:12;5:2;35369:260:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35369:260:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;35369:260:0;;34497:1140;-1:-1:-1;;;;;;;;;34497:1140:0:o;30612:984::-;30778:21;30867:22;-1:-1:-1;;;;;30834:64:0;;30917:25;30834:123;;;;;;;;;;;;;-1:-1:-1;;;;;30834:123:0;-1:-1:-1;;;;;30834:123:0;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30834:123:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30834:123:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30834:123:0;30812:188;;;;;-1:-1:-1;;;30812:188:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;31033:119;;;-1:-1:-1;;;31033:119:0;;31099:4;31033:119;;;;-1:-1:-1;;;;;31033:119:0;;;;;;;;;31013:17;;31033:43;;;;;:119;;;;;;;;;;;;;;:43;:119;;;5:2:-1;;;;30:1;27;20:12;5:2;31033:119:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31033:119:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31033:119:0;;-1:-1:-1;31169:24:0;;;31165:184;;;31210:127;;;-1:-1:-1;;;31210:127:0;;-1:-1:-1;;;;;31210:127:0;;;;;;;-1:-1:-1;;31210:127:0;;;;;;:41;;;;;;:127;;;;;;;;;;;;;;;-1:-1:-1;31210:41:0;:127;;;5:2:-1;;;;30:1;27;20:12;5:2;31210:127:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31210:127:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;31165:184:0;31377:137;;;-1:-1:-1;;;31377:137:0;;-1:-1:-1;;;;;31377:137:0;;;;;;;;;;;;;31512:1;31377:137;;;;;;:93;;;;;;:137;;;;;;;;;;;;;;;-1:-1:-1;31377:93:0;:137;;;5:2:-1;;;;30:1;27;20:12;5:2;31377:137:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31377:137:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31377:137:0;;-1:-1:-1;31535:17:0;31527:61;;;;;-1:-1:-1;;;31527:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;30612:984;;;;;;:::o;35832:945::-;36002:16;;35937:19;;-1:-1:-1;;;;;35977:41:0;;;36002:16;;35977:41;35974:154;;;36041:16;;;;;;;;;-1:-1:-1;;;;;36041:16:0;-1:-1:-1;;;;;36035:31:0;;36073:9;36035:50;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36035:50:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36035:50:0;;;;;36107:9;36100:16;;;;35974:154;36270:21;;:56;;;-1:-1:-1;;;36270:56:0;;-1:-1:-1;;;;;36270:56:0;;;;;;;;;36140:69;;36270:21;;;;;:33;;:56;;;;;;;;;;;;;;;:21;:56;;;5:2:-1;;;;30:1;27;20:12;5:2;36270:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36270:56:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36270:56:0;36375:83;;;-1:-1:-1;;;36375:83:0;;36448:9;36375:83;;;;;;36270:56;;-1:-1:-1;36350:22:0;;-1:-1:-1;;;;;36375:72:0;;;;;:83;;;;;36270:56;;36375:83;;;;;;;:72;:83;;;5:2:-1;;;;30:1;27;20:12;5:2;36375:83:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36375:83:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36375:83:0;;-1:-1:-1;36486:117:0;36513:59;36375:83;36542:29;36555:5;36562:8;36542:12;:29::i;:::-;36513:12;:59::i;:::-;36587:5;36486:12;:117::i;:::-;36469:134;;36630:34;-1:-1:-1;;;;;36630:68:0;;36719:9;36730:14;36746:22;36759:3;36764;36746:12;:22::i;:::-;36630:139;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36630:139:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36630:139:0;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36630:139:0;;-1:-1:-1;;;35832:945:0;;;;;:::o;37084:1640::-;37439:21;;:60;;;-1:-1:-1;;;37439:60:0;;-1:-1:-1;;;;;37439:60:0;;;;;;;;;37275:19;;;;37439:21;;:33;;:60;;;;;;;;;;;;;;:21;:60;;;5:2:-1;;;;30:1;27;20:12;5:2;37439:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37439:60:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;37439:60:0;37651:21;;:58;;;-1:-1:-1;;;37651:58:0;;-1:-1:-1;;;;;37651:58:0;;;;;;;;;37439:60;;-1:-1:-1;37523:67:0;;37651:21;;;;;:33;;:58;;;;;37439:60;;37651:58;;;;;;;:21;:58;;;5:2:-1;;;;30:1;27;20:12;5:2;37651:58:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37651:58:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;37651:58:0;37733:137;;;-1:-1:-1;;;37733:137:0;;-1:-1:-1;;;;;37733:137:0;;;;;;;;;;;;;;;37651:58;;-1:-1:-1;37733:41:0;;;;;;:137;;;;;37651:58;;37733:137;;;;;;;;-1:-1:-1;37733:41:0;:137;;;5:2:-1;;;;30:1;27;20:12;5:2;37733:137:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37733:137:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;37906:86:0;;;-1:-1:-1;;;37906:86:0;;;;;;;;;;37883:20;;-1:-1:-1;;;;;37906:72:0;;;;;:86;;;;;37733:137;;37906:86;;;;;;;;:72;:86;;;5:2:-1;;;;30:1;27;20:12;5:2;37906:86:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37906:86:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;37906:86:0;;-1:-1:-1;38018:115:0;38045:57;37906:86;38072:29;38085:5;38092:8;38072:12;:29::i;38018:115::-;38003:130;;38146:22;38171:32;-1:-1:-1;;;;;38171:70:0;;38242:12;38171:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38171:84:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38171:84:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38171:84:0;;-1:-1:-1;38283:117:0;38310:59;38171:84;38339:29;38352:5;38359:8;38339:12;:29::i;38283:117::-;38266:134;;38427:34;-1:-1:-1;;;;;38427:56:0;;38498:12;38525:14;38554:12;38581:23;38594:3;38599:4;38581:12;:23::i;:::-;38619;38427:226;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38427:226:0;-1:-1:-1;;;;;38427:226:0;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38427:226:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38427:226:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38427:226:0;;-1:-1:-1;38672:15:0;38664:52;;;;;-1:-1:-1;;;38664:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;37084:1640;;;;;;;;;;:::o;29708:565::-;29831:23;29939:8;;29885:94;;29912:36;;29925:12;;-1:-1:-1;;;29939:8:0;;;;29912:12;:36::i;29885:94::-;29867:112;-1:-1:-1;29996:20:0;29992:61;;-1:-1:-1;30040:1:0;30033:8;;29992:61;30144:17;;30087:123;;;-1:-1:-1;;;30087:123:0;;-1:-1:-1;;;;;30144:17:0;;;30087:123;;;;;;;;;;;;:38;;;;;;:123;;;;;;;;;;;;;;;30144:17;30087:38;:123;;;5:2:-1;;;;30:1;27;20:12;5:2;30087:123:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30087:123:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30087:123:0;30065:200;;;;;-1:-1:-1;;;30065:200:0;;;;;;;;;;;;;;;;;;;;;;;;;;;13416:136;13474:7;13501:43;13505:1;13508;13501:43;;;;;;;;;;;;;;;;;:3;:43::i;14332:471::-;14390:7;14635:6;14631:47;;-1:-1:-1;14665:1:0;14658:8;;14631:47;14702:5;;;14706:1;14702;:5;:1;14726:5;;;;;:10;14718:56;;;;-1:-1:-1;;;14718:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15271:132;15329:7;15356:39;15360:1;15363;15356:39;;;;;;;;;;;;;;;;;:3;:39::i;12960:181::-;13018:7;13050:5;;;13074:6;;;;13066:46;;;;;-1:-1:-1;;;13066:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;13889:192;13975:7;14011:12;14003:6;;;;13995:29;;;;-1:-1:-1;;;13995: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;13995:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;14047:5:0;;;13889:192::o;15933:345::-;16019:7;16121:12;16114:5;16106:28;;;;-1:-1:-1;;;16106:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;16106:28:0;;16145:9;16161:1;16157;:5;;;;;;;15933:345;-1:-1:-1;;;;;15933:345:0:o
Swarm Source
bzzr://0424d2843a78a795f0ed3632b4061e624ed4c743a0d4eb651330bfd247e5d89f
Loading...
Loading
Loading...
Loading
OVERVIEW
Zapper.Fi: Balancer Zap in ETH or ERC20 contract has migrated to 0x03E86D24C462fa6aD88568053361186E4A5aF68e.Multichain Portfolio | 27 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | Ether (ETH) | 100.00% | $2,279.73 | 30.02 | $68,437.56 |
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.