Overview
AVAX Balance
AVAX Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 1,224 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Zap Out | 17454127 | 1010 days ago | IN | 0 AVAX | 0.01394013 | ||||
Zap Out | 17378716 | 1012 days ago | IN | 0 AVAX | 0.02064259 | ||||
Zap Out | 17263398 | 1015 days ago | IN | 0 AVAX | 0.01372305 | ||||
Zap Out | 17263376 | 1015 days ago | IN | 0 AVAX | 0.01420792 | ||||
Zap Out | 17251327 | 1015 days ago | IN | 0 AVAX | 0.01979126 | ||||
Zap Out | 17251254 | 1015 days ago | IN | 0 AVAX | 0.01925988 | ||||
Zap Out | 17195143 | 1016 days ago | IN | 0 AVAX | 0.01415153 | ||||
Zap Out | 17155347 | 1017 days ago | IN | 0 AVAX | 0.02094408 | ||||
Zap Out | 17106558 | 1019 days ago | IN | 0 AVAX | 0.01348667 | ||||
Zap Out | 17071488 | 1019 days ago | IN | 0 AVAX | 0.02119973 | ||||
Zap Out | 17025939 | 1020 days ago | IN | 0 AVAX | 0.01957955 | ||||
Zap Out | 16984312 | 1021 days ago | IN | 0 AVAX | 0.01957955 | ||||
Zap Out | 16973237 | 1022 days ago | IN | 0 AVAX | 0.01455679 | ||||
Zap Out | 16957493 | 1022 days ago | IN | 0 AVAX | 0.01396417 | ||||
Zap Out | 16955940 | 1022 days ago | IN | 0 AVAX | 0.01479567 | ||||
Zap Out | 16920076 | 1023 days ago | IN | 0 AVAX | 0.01461312 | ||||
Zap Out | 16879098 | 1024 days ago | IN | 0 AVAX | 0.01979157 | ||||
Zap Out2Pair Tok... | 16790109 | 1026 days ago | IN | 0 AVAX | 0.00964772 | ||||
Zap Out | 16737615 | 1027 days ago | IN | 0 AVAX | 0.01461252 | ||||
Zap Out | 16737606 | 1027 days ago | IN | 0 AVAX | 0.0134712 | ||||
Zap Out | 16563853 | 1031 days ago | IN | 0 AVAX | 0.02836289 | ||||
Zap Out | 16536846 | 1032 days ago | IN | 0 AVAX | 0.03308896 | ||||
Zap Out | 16486417 | 1033 days ago | IN | 0 AVAX | 0.01400673 | ||||
Zap Out | 16336710 | 1036 days ago | IN | 0 AVAX | 0.01449438 | ||||
Zap Out | 16206940 | 1039 days ago | IN | 0 AVAX | 0.01453108 |
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
16955940 | 1022 days ago | 0.24658814 AVAX | ||||
16955940 | 1022 days ago | 0.12347932 AVAX | ||||
16955940 | 1022 days ago | 0.12310882 AVAX | ||||
16920076 | 1023 days ago | 1.12313903 AVAX | ||||
16920076 | 1023 days ago | 0.56206857 AVAX | ||||
16920076 | 1023 days ago | 0.56107045 AVAX | ||||
16790109 | 1026 days ago | 953.08666267 AVAX | ||||
16790109 | 1026 days ago | 953.08666267 AVAX | ||||
16737615 | 1027 days ago | 0.01558415 AVAX | ||||
16737615 | 1027 days ago | 0.0077768 AVAX | ||||
16737615 | 1027 days ago | 0.00780734 AVAX | ||||
16563853 | 1031 days ago | 2.36000064 AVAX | ||||
16563853 | 1031 days ago | 1.17721539 AVAX | ||||
16563853 | 1031 days ago | 1.18278525 AVAX | ||||
16536846 | 1032 days ago | 4.86620221 AVAX | ||||
16536846 | 1032 days ago | 2.4274873 AVAX | ||||
16536846 | 1032 days ago | 2.43871491 AVAX | ||||
16336710 | 1036 days ago | 3.9962095 AVAX | ||||
16336710 | 1036 days ago | 2.00269052 AVAX | ||||
16336710 | 1036 days ago | 1.99351897 AVAX | ||||
15866860 | 1047 days ago | 1,777.26463781 AVAX | ||||
15866860 | 1047 days ago | 890.25387688 AVAX | ||||
15866860 | 1047 days ago | 887.01076092 AVAX | ||||
15335024 | 1060 days ago | 6,534.22200625 AVAX | ||||
15335024 | 1060 days ago | 6,534.22200625 AVAX |
Loading...
Loading
Contract Name:
TraderJoe_ZapOut_V1_0_1
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at snowscan.xyz on 2021-11-19 */ // ███████╗░█████╗░██████╗░██████╗░███████╗██████╗░░░░███████╗██╗ // ╚════██║██╔══██╗██╔══██╗██╔══██╗██╔════╝██╔══██╗░░░██╔════╝██║ // ░░███╔═╝███████║██████╔╝██████╔╝█████╗░░██████╔╝░░░█████╗░░██║ // ██╔══╝░░██╔══██║██╔═══╝░██╔═══╝░██╔══╝░░██╔══██╗░░░██╔══╝░░██║ // ███████╗██║░░██║██║░░░░░██║░░░░░███████╗██║░░██║██╗██║░░░░░██║ // ╚══════╝╚═╝░░╚═╝╚═╝░░░░░╚═╝░░░░░╚══════╝╚═╝░░╚═╝╚═╝╚═╝░░░░░╚═╝ // Copyright (C) 2021 zapper // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // // Visit <https://www.gnu.org/licenses/>for a copy of the GNU Affero General Public License ///@author Zapper ///@notice This contract removes liquidity from TraderJoe pools on Avalanche, receiving AVAX, ERC20 or both. // SPDX-License-Identifier: GPL-2.0 AND MIT // File contracts/oz/0.8.0/utils/Context.sol pragma solidity ^0.8.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 meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File contracts/oz/0.8.0/access/Ownable.sol pragma solidity ^0.8.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. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * 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. */ abstract 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() { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the 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 virtual 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 virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File contracts/oz/0.8.0/token/ERC20/IERC20.sol pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ 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 contracts/oz/0.8.0/utils/Address.sol pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require( address(this).balance >= amount, "Address: insufficient balance" ); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require( success, "Address: unable to send value, recipient may have reverted" ); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue( target, data, value, "Address: low-level call with value failed" ); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require( address(this).balance >= value, "Address: insufficient balance for call" ); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall( target, data, "Address: low-level static call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall( target, data, "Address: low-level delegate call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File contracts/oz/0.8.0/token/ERC20/utils/SafeERC20.sol pragma solidity ^0.8.0; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn( token, abi.encodeWithSelector(token.transfer.selector, to, value) ); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn( token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value) ); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn( token, abi.encodeWithSelector(token.approve.selector, spender, value) ); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender) + value; _callOptionalReturn( token, abi.encodeWithSelector( token.approve.selector, spender, newAllowance ) ); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require( oldAllowance >= value, "SafeERC20: decreased allowance below zero" ); uint256 newAllowance = oldAllowance - value; _callOptionalReturn( token, abi.encodeWithSelector( token.approve.selector, spender, newAllowance ) ); } } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall( data, "SafeERC20: low-level call failed" ); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require( abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed" ); } } } // File contracts/oz/0.8.0/token/ERC20/extensions/IERC20Metadata.sol pragma solidity ^0.8.0; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // File contracts/_base/ZapBaseV2_1.sol // ███████╗░█████╗░██████╗░██████╗░███████╗██████╗░░░░███████╗██╗ // ╚════██║██╔══██╗██╔══██╗██╔══██╗██╔════╝██╔══██╗░░░██╔════╝██║ // ░░███╔═╝███████║██████╔╝██████╔╝█████╗░░██████╔╝░░░█████╗░░██║ // ██╔══╝░░██╔══██║██╔═══╝░██╔═══╝░██╔══╝░░██╔══██╗░░░██╔══╝░░██║ // ███████╗██║░░██║██║░░░░░██║░░░░░███████╗██║░░██║██╗██║░░░░░██║ // ╚══════╝╚═╝░░╚═╝╚═╝░░░░░╚═╝░░░░░╚══════╝╚═╝░░╚═╝╚═╝╚═╝░░░░░╚═╝ // Copyright (C) 2021 zapper // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // /// @author Zapper /// @notice This abstract contract, which is inherited by Zaps, /// provides utility functions for moving tokens, checking allowances /// and balances, and accounting /// for fees. pragma solidity ^0.8.0; abstract contract ZapBaseV2_1 is Ownable { using SafeERC20 for IERC20; bool public stopped = false; // if true, goodwill is not deducted mapping(address => bool) public feeWhitelist; uint256 public goodwill; // % share of goodwill (0-100 %) uint256 affiliateSplit; // restrict affiliates mapping(address => bool) public affiliates; // affiliate => token => amount mapping(address => mapping(address => uint256)) public affiliateBalance; // token => amount mapping(address => uint256) public totalAffiliateBalance; // swapTarget => approval status mapping(address => bool) public approvedTargets; address internal constant ETHAddress = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; address internal constant ZapperAdmin = 0x3CE37278de6388532C3949ce4e886F365B14fB56; constructor(uint256 _goodwill, uint256 _affiliateSplit) { goodwill = _goodwill; affiliateSplit = _affiliateSplit; } // circuit breaker modifiers modifier stopInEmergency { if (stopped) { revert("Paused"); } else { _; } } function _getBalance(address token) internal view returns (uint256 balance) { if (token == address(0)) { balance = address(this).balance; } else { balance = IERC20(token).balanceOf(address(this)); } } function _approveToken(address token, address spender) internal { IERC20 _token = IERC20(token); if (_token.allowance(address(this), spender) > 0) return; else { _token.safeApprove(spender, type(uint256).max); } } function _approveToken( address token, address spender, uint256 amount ) internal { IERC20(token).safeApprove(spender, 0); IERC20(token).safeApprove(spender, amount); } // - to Pause the contract function toggleContractActive() public onlyOwner { stopped = !stopped; } function set_feeWhitelist(address zapAddress, bool status) external onlyOwner { feeWhitelist[zapAddress] = status; } function set_new_goodwill(uint256 _new_goodwill) public onlyOwner { require( _new_goodwill >= 0 && _new_goodwill <= 100, "GoodWill Value not allowed" ); goodwill = _new_goodwill; } function set_new_affiliateSplit(uint256 _new_affiliateSplit) external onlyOwner { require( _new_affiliateSplit <= 100, "Affiliate Split Value not allowed" ); affiliateSplit = _new_affiliateSplit; } function set_affiliate(address _affiliate, bool _status) external onlyOwner { affiliates[_affiliate] = _status; } ///@notice Withdraw goodwill share, retaining affilliate share function withdrawTokens(address[] calldata tokens) external onlyOwner { for (uint256 i = 0; i < tokens.length; i++) { uint256 qty; if (tokens[i] == ETHAddress) { qty = address(this).balance - totalAffiliateBalance[tokens[i]]; Address.sendValue(payable(owner()), qty); } else { qty = IERC20(tokens[i]).balanceOf(address(this)) - totalAffiliateBalance[tokens[i]]; IERC20(tokens[i]).safeTransfer(owner(), qty); } } } ///@notice Withdraw affilliate share, retaining goodwill share function affilliateWithdraw(address[] calldata tokens) external { uint256 tokenBal; for (uint256 i = 0; i < tokens.length; i++) { tokenBal = affiliateBalance[msg.sender][tokens[i]]; affiliateBalance[msg.sender][tokens[i]] = 0; totalAffiliateBalance[tokens[i]] = totalAffiliateBalance[tokens[i]] - tokenBal; if (tokens[i] == ETHAddress) { Address.sendValue(payable(msg.sender), tokenBal); } else { IERC20(tokens[i]).safeTransfer(msg.sender, tokenBal); } } } function setApprovedTargets( address[] calldata targets, bool[] calldata isApproved ) external onlyOwner { require(targets.length == isApproved.length, "Invalid Input length"); for (uint256 i = 0; i < targets.length; i++) { approvedTargets[targets[i]] = isApproved[i]; } } function _subtractGoodwill( address token, uint256 amount, address affiliate, bool enableGoodwill ) internal returns (uint256 totalGoodwillPortion) { bool whitelisted = feeWhitelist[msg.sender]; if (enableGoodwill && !whitelisted && goodwill > 0) { totalGoodwillPortion = (amount * goodwill) / 10000; if (affiliates[affiliate]) { if (token == address(0)) { token = ETHAddress; } uint256 affiliatePortion = (totalGoodwillPortion * affiliateSplit) / 100; affiliateBalance[affiliate][token] += affiliatePortion; totalAffiliateBalance[token] += affiliatePortion; } } } receive() external payable { require(msg.sender != tx.origin, "Do not send ETH directly"); } } // File contracts/_base/ZapOutBaseV3_1.sol pragma solidity ^0.8.0; abstract contract ZapOutBaseV3_1 is ZapBaseV2_1 { using SafeERC20 for IERC20; /** @dev Transfer tokens from msg.sender to this contract @param token The ERC20 token to transfer to this contract @return Quantity of tokens transferred to this contract */ function _pullTokens(address token, uint256 amount) internal returns (uint256) { IERC20(token).safeTransferFrom(msg.sender, address(this), amount); return amount; } } // File contracts/Avalanche/TraderJoe/TraderJoe_ZapOut_V1.sol pragma solidity ^0.8.0; interface IUniswapV2Router02 { function WETH() external pure returns (address); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityAVAX( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountAVAXMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); } interface IUniswapV2Pair { function token0() external pure returns (address); function token1() external pure returns (address); function balanceOf(address user) external view returns (uint256); function totalSupply() external view returns (uint256); function getReserves() external view returns ( uint112 _reserve0, uint112 _reserve1, uint32 _blockTimestampLast ); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; } interface IWETH { function withdraw(uint256 wad) external; } contract TraderJoe_ZapOut_V1_0_1 is ZapOutBaseV3_1 { using SafeERC20 for IERC20; uint256 private constant deadline = 0xf000000000000000000000000000000000000000000000000000000000000000; uint256 private constant permitAllowance = 79228162514260000000000000000; IUniswapV2Router02 private constant joeRouter = IUniswapV2Router02(0x60aE616a2155Ee3d9A68541Ba4544862310933d4); address private constant wavaxTokenAddress = address(0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7); constructor(uint256 _goodwill, uint256 _affiliateSplit) ZapBaseV2_1(_goodwill, _affiliateSplit) { // 0x exchange approvedTargets[0xDef1C0ded9bec7F1a1670819833240f027b25EfF] = true; } event zapOut( address sender, address pool, address token, uint256 tokensRec, address affiliate ); /** @notice Zap out in both tokens @param fromPoolAddress Pool from which to remove liquidity @param incomingLP Quantity of LP to remove from pool @param affiliate Affiliate address @return amountA Quantity of tokenA received after zapout @return amountB Quantity of tokenB received after zapout */ function ZapOut2PairToken( address fromPoolAddress, uint256 incomingLP, address affiliate ) public stopInEmergency returns (uint256 amountA, uint256 amountB) { IUniswapV2Pair pair = IUniswapV2Pair(fromPoolAddress); require(address(pair) != address(0), "Pool Cannot be Zero Address"); // get reserves address token0 = pair.token0(); address token1 = pair.token1(); IERC20(fromPoolAddress).safeTransferFrom( msg.sender, address(this), incomingLP ); _approveToken(fromPoolAddress, address(joeRouter), incomingLP); if (token0 == wavaxTokenAddress || token1 == wavaxTokenAddress) { address _token = token0 == wavaxTokenAddress ? token1 : token0; (amountA, amountB) = joeRouter.removeLiquidityAVAX( _token, incomingLP, 1, 1, address(this), deadline ); // subtract goodwill uint256 tokenGoodwill = _subtractGoodwill(_token, amountA, affiliate, true); uint256 ethGoodwill = _subtractGoodwill(ETHAddress, amountB, affiliate, true); // send tokens IERC20(_token).safeTransfer(msg.sender, amountA - tokenGoodwill); Address.sendValue(payable(msg.sender), amountB - ethGoodwill); } else { (amountA, amountB) = joeRouter.removeLiquidity( token0, token1, incomingLP, 1, 1, address(this), deadline ); // subtract goodwill uint256 tokenAGoodwill = _subtractGoodwill(token0, amountA, affiliate, true); uint256 tokenBGoodwill = _subtractGoodwill(token1, amountB, affiliate, true); // send tokens IERC20(token0).safeTransfer(msg.sender, amountA - tokenAGoodwill); IERC20(token1).safeTransfer(msg.sender, amountB - tokenBGoodwill); } emit zapOut(msg.sender, fromPoolAddress, token0, amountA, affiliate); emit zapOut(msg.sender, fromPoolAddress, token1, amountB, affiliate); } /** @notice Zap out in a single token @param toTokenAddress Address of desired token @param fromPoolAddress Pool from which to remove liquidity @param incomingLP Quantity of LP to remove from pool @param minTokensRec Minimum quantity of tokens to receive @param swapTargets Execution targets for swaps @param swapData DEX swap data @param affiliate Affiliate address */ function ZapOut( address toTokenAddress, address fromPoolAddress, uint256 incomingLP, uint256 minTokensRec, address[] memory swapTargets, bytes[] memory swapData, address affiliate ) public stopInEmergency returns (uint256 tokensRec) { (uint256 amount0, uint256 amount1) = _removeLiquidity(fromPoolAddress, incomingLP); //swaps tokens to token tokensRec = _swapTokens( fromPoolAddress, amount0, amount1, toTokenAddress, swapTargets, swapData ); require(tokensRec >= minTokensRec, "High Slippage"); uint256 totalGoodwillPortion; // transfer toTokens to sender if (toTokenAddress == address(0)) { totalGoodwillPortion = _subtractGoodwill( ETHAddress, tokensRec, affiliate, true ); payable(msg.sender).transfer(tokensRec - totalGoodwillPortion); } else { totalGoodwillPortion = _subtractGoodwill( toTokenAddress, tokensRec, affiliate, true ); IERC20(toTokenAddress).safeTransfer( msg.sender, tokensRec - totalGoodwillPortion ); } tokensRec = tokensRec - totalGoodwillPortion; emit zapOut( msg.sender, fromPoolAddress, toTokenAddress, tokensRec, affiliate ); return tokensRec; } /** @notice Zap out in both tokens with permit @param fromPoolAddress Pool from which to remove liquidity @param incomingLP Quantity of LP to remove from pool @param affiliate Affiliate address to share fees @param permitSig Signature for permit @return amountA Quantity of tokenA received @return amountB Quantity of tokenB received */ function ZapOut2PairTokenWithPermit( address fromPoolAddress, uint256 incomingLP, address affiliate, bytes calldata permitSig ) external stopInEmergency returns (uint256 amountA, uint256 amountB) { // permit _permit(fromPoolAddress, permitAllowance, permitSig); (amountA, amountB) = ZapOut2PairToken( fromPoolAddress, incomingLP, affiliate ); } /** @notice Zap out in a single token with permit @param toTokenAddress Address of desired token @param fromPoolAddress Pool from which to remove liquidity @param incomingLP Quantity of LP to remove from pool @param minTokensRec Minimum quantity of tokens to receive @param permitSig Signature for permit @param swapTargets Execution targets for swaps @param swapData DEX swap data @param affiliate Affiliate address */ function ZapOutWithPermit( address toTokenAddress, address fromPoolAddress, uint256 incomingLP, uint256 minTokensRec, bytes calldata permitSig, address[] memory swapTargets, bytes[] memory swapData, address affiliate ) public stopInEmergency returns (uint256) { // permit _permit(fromPoolAddress, permitAllowance, permitSig); return ( ZapOut( toTokenAddress, fromPoolAddress, incomingLP, minTokensRec, swapTargets, swapData, affiliate ) ); } function _permit( address fromPoolAddress, uint256 amountIn, bytes memory permitSig ) internal { require(permitSig.length == 65, "Invalid signature length"); bytes32 r; bytes32 s; uint8 v; assembly { r := mload(add(permitSig, 32)) s := mload(add(permitSig, 64)) v := byte(0, mload(add(permitSig, 96))) } IUniswapV2Pair(fromPoolAddress).permit( msg.sender, address(this), amountIn, deadline, v, r, s ); } function _removeLiquidity(address fromPoolAddress, uint256 incomingLP) internal returns (uint256 amount0, uint256 amount1) { IUniswapV2Pair pair = IUniswapV2Pair(fromPoolAddress); require(address(pair) != address(0), "Pool Cannot be Zero Address"); address token0 = pair.token0(); address token1 = pair.token1(); _pullTokens(fromPoolAddress, incomingLP); _approveToken(fromPoolAddress, address(joeRouter), incomingLP); (amount0, amount1) = joeRouter.removeLiquidity( token0, token1, incomingLP, 1, 1, address(this), deadline ); require(amount0 > 0 && amount1 > 0, "Removed Insufficient Liquidity"); } function _swapTokens( address fromPoolAddress, uint256 amount0, uint256 amount1, address toToken, address[] memory swapTargets, bytes[] memory swapData ) internal returns (uint256 tokensBought) { address token0 = IUniswapV2Pair(fromPoolAddress).token0(); address token1 = IUniswapV2Pair(fromPoolAddress).token1(); //swap token0 to toToken if (token0 == toToken) { tokensBought = tokensBought + amount0; } else { //swap token using 0x swap tokensBought = tokensBought + _fillQuote( token0, toToken, amount0, swapTargets[0], swapData[0] ); } //swap token1 to toToken if (token1 == toToken) { tokensBought = tokensBought + amount1; } else { //swap token using 0x swap tokensBought = tokensBought + _fillQuote( token1, toToken, amount1, swapTargets[1], swapData[1] ); } } function _fillQuote( address fromTokenAddress, address toToken, uint256 amount, address swapTarget, bytes memory swapData ) internal returns (uint256) { if (fromTokenAddress == wavaxTokenAddress && toToken == address(0)) { IWETH(wavaxTokenAddress).withdraw(amount); return amount; } uint256 valueToSend; if (fromTokenAddress == address(0)) { valueToSend = amount; } else { _approveToken(fromTokenAddress, swapTarget, amount); } uint256 initialBalance = _getBalance(toToken); require(approvedTargets[swapTarget], "Target not Authorized"); (bool success, ) = swapTarget.call{ value: valueToSend }(swapData); require(success, "Error Swapping Tokens"); uint256 finalBalance = _getBalance(toToken) - initialBalance; require(finalBalance > 0, "Swapped to Invalid Intermediate"); return finalBalance; } /** @notice Utility function to determine quantity and addresses of tokens being removed @param fromPoolAddress Pool from which to remove liquidity @param liquidity Quantity of LP tokens to remove. @return amountA Quantity of tokenA removed @return amountB Quantity of tokenB removed @return token0 Address of the underlying token to be removed @return token1 Address of the underlying token to be removed */ function removeLiquidityReturn(address fromPoolAddress, uint256 liquidity) external view returns ( uint256 amountA, uint256 amountB, address token0, address token1 ) { IUniswapV2Pair pair = IUniswapV2Pair(fromPoolAddress); token0 = pair.token0(); token1 = pair.token1(); uint256 balance0 = IERC20(token0).balanceOf(fromPoolAddress); uint256 balance1 = IERC20(token1).balanceOf(fromPoolAddress); uint256 _totalSupply = pair.totalSupply(); amountA = (liquidity * balance0) / _totalSupply; amountB = (liquidity * balance1) / _totalSupply; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"uint256","name":"_goodwill","type":"uint256"},{"internalType":"uint256","name":"_affiliateSplit","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokensRec","type":"uint256"},{"indexed":false,"internalType":"address","name":"affiliate","type":"address"}],"name":"zapOut","type":"event"},{"inputs":[{"internalType":"address","name":"toTokenAddress","type":"address"},{"internalType":"address","name":"fromPoolAddress","type":"address"},{"internalType":"uint256","name":"incomingLP","type":"uint256"},{"internalType":"uint256","name":"minTokensRec","type":"uint256"},{"internalType":"address[]","name":"swapTargets","type":"address[]"},{"internalType":"bytes[]","name":"swapData","type":"bytes[]"},{"internalType":"address","name":"affiliate","type":"address"}],"name":"ZapOut","outputs":[{"internalType":"uint256","name":"tokensRec","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"fromPoolAddress","type":"address"},{"internalType":"uint256","name":"incomingLP","type":"uint256"},{"internalType":"address","name":"affiliate","type":"address"}],"name":"ZapOut2PairToken","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"fromPoolAddress","type":"address"},{"internalType":"uint256","name":"incomingLP","type":"uint256"},{"internalType":"address","name":"affiliate","type":"address"},{"internalType":"bytes","name":"permitSig","type":"bytes"}],"name":"ZapOut2PairTokenWithPermit","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"toTokenAddress","type":"address"},{"internalType":"address","name":"fromPoolAddress","type":"address"},{"internalType":"uint256","name":"incomingLP","type":"uint256"},{"internalType":"uint256","name":"minTokensRec","type":"uint256"},{"internalType":"bytes","name":"permitSig","type":"bytes"},{"internalType":"address[]","name":"swapTargets","type":"address[]"},{"internalType":"bytes[]","name":"swapData","type":"bytes[]"},{"internalType":"address","name":"affiliate","type":"address"}],"name":"ZapOutWithPermit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"affiliateBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"affiliates","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"tokens","type":"address[]"}],"name":"affilliateWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"approvedTargets","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"feeWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"goodwill","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"fromPoolAddress","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"name":"removeLiquidityReturn","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"},{"internalType":"address","name":"token0","type":"address"},{"internalType":"address","name":"token1","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"targets","type":"address[]"},{"internalType":"bool[]","name":"isApproved","type":"bool[]"}],"name":"setApprovedTargets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_affiliate","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"set_affiliate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"zapAddress","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"set_feeWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new_affiliateSplit","type":"uint256"}],"name":"set_new_affiliateSplit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new_goodwill","type":"uint256"}],"name":"set_new_goodwill","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stopped","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleContractActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalAffiliateBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"tokens","type":"address[]"}],"name":"withdrawTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526000805460ff60a01b191690553480156200001e57600080fd5b50604051620030a2380380620030a28339810160408190526200004191620000e0565b600080546001600160a01b03191633908117825560405184928492918291907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600291909155600355505073def1c0ded9bec7f1a1670819833240f027b25eff60005260076020527ff6019cd1944dc466e824190b288e5a63528dd4c9a6d8cbd707956fd30d2f1e0d805460ff1916600117905562000105565b60008060408385031215620000f457600080fd5b505080516020909101519092909150565b612f8d80620001156000396000f3fe6080604052600436106101445760003560e01c8063715018a6116100b65780639779d1a61161006f5780639779d1a614610435578063cfd7789c14610465578063d408f6571461049a578063f21d3ab5146104ca578063f2fde38b146104ea578063fbec27bf1461050a57600080fd5b8063715018a61461034857806375f12b211461035d5780637ee992831461037e5780638da5cb5b146103cd57806391027c5b146103f55780639735a6341461041557600080fd5b80633ff428c7116101085780633ff428c7146102725780634f51e29414610292578063550bfa56146102d25780635938b827146102f25780635de0398e146103125780635ecb16cd1461032857600080fd5b806301e980d4146101a55780630dc9de85146101c55780631385d24c146101e55780631781261f146101fa57806318b135e31461024557600080fd5b366101a0573332141561019e5760405162461bcd60e51b815260206004820152601860248201527f446f206e6f742073656e6420455448206469726563746c79000000000000000060448201526064015b60405180910390fd5b005b600080fd5b3480156101b157600080fd5b5061019e6101c0366004612c79565b61052a565b3480156101d157600080fd5b5061019e6101e0366004612b91565b6105b4565b3480156101f157600080fd5b5061019e6107bb565b34801561020657600080fd5b506102326102153660046128c5565b600560209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b34801561025157600080fd5b5061023261026036600461288b565b60066020526000908152604090205481565b34801561027e57600080fd5b5061019e61028d366004612a82565b610806565b34801561029e57600080fd5b506102c26102ad36600461288b565b60046020526000908152604090205460ff1681565b604051901515815260200161023c565b3480156102de57600080fd5b5061019e6102ed366004612c79565b61085b565b3480156102fe57600080fd5b5061023261030d3660046128fe565b6108db565b34801561031e57600080fd5b5061023260025481565b34801561033457600080fd5b5061019e610343366004612b91565b610a5d565b34801561035457600080fd5b5061019e610c88565b34801561036957600080fd5b506000546102c290600160a01b900460ff1681565b34801561038a57600080fd5b5061039e610399366004612ab0565b610cfc565b6040805194855260208501939093526001600160a01b039182169284019290925216606082015260800161023c565b3480156103d957600080fd5b506000546040516001600160a01b03909116815260200161023c565b34801561040157600080fd5b506102326104103660046129af565b610f9b565b34801561042157600080fd5b5061019e610430366004612bd3565b611030565b34801561044157600080fd5b506102c261045036600461288b565b60076020526000908152604090205460ff1681565b34801561047157600080fd5b50610485610480366004612b1e565b61113e565b6040805192835260208301919091520161023c565b3480156104a657600080fd5b506102c26104b536600461288b565b60016020526000908152604090205460ff1681565b3480156104d657600080fd5b506104856104e5366004612adc565b6111d1565b3480156104f657600080fd5b5061019e61050536600461288b565b61168f565b34801561051657600080fd5b5061019e610525366004612a82565b611779565b6000546001600160a01b031633146105545760405162461bcd60e51b815260040161019590612dae565b60648111156105af5760405162461bcd60e51b815260206004820152602160248201527f416666696c696174652053706c69742056616c7565206e6f7420616c6c6f77656044820152601960fa1b6064820152608401610195565b600355565b6000805b828110156107b557336000908152600560205260408120908585848181106105e2576105e2612f05565b90506020020160208101906105f7919061288b565b6001600160a01b0316815260208082019290925260409081016000908120543382526005909352908120919350908186868581811061063857610638612f05565b905060200201602081019061064d919061288b565b6001600160a01b03166001600160a01b0316815260200190815260200160002081905550816006600086868581811061068857610688612f05565b905060200201602081019061069d919061288b565b6001600160a01b03166001600160a01b03168152602001908152602001600020546106c89190612e91565b600660008686858181106106de576106de612f05565b90506020020160208101906106f3919061288b565b6001600160a01b0316815260208101919091526040016000205573eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee84848381811061073457610734612f05565b9050602002016020810190610749919061288b565b6001600160a01b031614156107675761076233836117ce565b6107a3565b6107a3338386868581811061077e5761077e612f05565b9050602002016020810190610793919061288b565b6001600160a01b031691906118e7565b806107ad81612ed4565b9150506105b8565b50505050565b6000546001600160a01b031633146107e55760405162461bcd60e51b815260040161019590612dae565b6000805460ff60a01b198116600160a01b9182900460ff1615909102179055565b6000546001600160a01b031633146108305760405162461bcd60e51b815260040161019590612dae565b6001600160a01b03919091166000908152600460205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146108855760405162461bcd60e51b815260040161019590612dae565b60648111156108d65760405162461bcd60e51b815260206004820152601a60248201527f476f6f6457696c6c2056616c7565206e6f7420616c6c6f7765640000000000006044820152606401610195565b600255565b60008054600160a01b900460ff16156109065760405162461bcd60e51b815260040161019590612d8e565b600080610913898961194a565b915091506109258983838d8a8a611bbb565b9250868310156109675760405162461bcd60e51b815260206004820152600d60248201526c4869676820536c69707061676560981b6044820152606401610195565b60006001600160a01b038b166109d65761099873eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee85876001611d97565b9050336108fc6109a88387612e91565b6040518115909202916000818181858888f193505050501580156109d0573d6000803e3d6000fd5b50610a04565b6109e38b85876001611d97565b9050610a04336109f38387612e91565b6001600160a01b038e1691906118e7565b610a0e8185612e91565b93507f701df21467d86143c88f54ea67eb82e3a66aabe03ad9126f8efa180431cc6fae338b8d8789604051610a47959493929190612ceb565b60405180910390a1505050979650505050505050565b6000546001600160a01b03163314610a875760405162461bcd60e51b815260040161019590612dae565b60005b81811015610c8357600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee848484818110610abb57610abb612f05565b9050602002016020810190610ad0919061288b565b6001600160a01b03161415610b505760066000858585818110610af557610af5612f05565b9050602002016020810190610b0a919061288b565b6001600160a01b03168152602081019190915260400160002054610b2e9047612e91565b9050610b4b610b456000546001600160a01b031690565b826117ce565b610c70565b60066000858585818110610b6657610b66612f05565b9050602002016020810190610b7b919061288b565b6001600160a01b03166001600160a01b0316815260200190815260200160002054848484818110610bae57610bae612f05565b9050602002016020810190610bc3919061288b565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a082319060240160206040518083038186803b158015610c0457600080fd5b505afa158015610c18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3c9190612c92565b610c469190612e91565b9050610c70610c5d6000546001600160a01b031690565b8286868681811061077e5761077e612f05565b5080610c7b81612ed4565b915050610a8a565b505050565b6000546001600160a01b03163314610cb25760405162461bcd60e51b815260040161019590612dae565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000806000806000869050806001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015610d4057600080fd5b505afa158015610d54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d7891906128a8565b9250806001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015610db357600080fd5b505afa158015610dc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610deb91906128a8565b6040516370a0823160e01b81526001600160a01b0389811660048301529193506000918516906370a082319060240160206040518083038186803b158015610e3257600080fd5b505afa158015610e46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6a9190612c92565b6040516370a0823160e01b81526001600160a01b038a811660048301529192506000918516906370a082319060240160206040518083038186803b158015610eb157600080fd5b505afa158015610ec5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee99190612c92565b90506000836001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f2657600080fd5b505afa158015610f3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5e9190612c92565b905080610f6b848b612e72565b610f759190612e50565b975080610f82838b612e72565b610f8c9190612e50565b96505050505092959194509250565b60008054600160a01b900460ff1615610fc65760405162461bcd60e51b815260040161019590612d8e565b611013896bfffffffffff096fb4da2000088888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611ec292505050565b6110228a8a8a8a8888886108db565b9a9950505050505050505050565b6000546001600160a01b0316331461105a5760405162461bcd60e51b815260040161019590612dae565b8281146110a05760405162461bcd60e51b8152602060048201526014602482015273092dcecc2d8d2c84092dce0eae840d8cadccee8d60631b6044820152606401610195565b60005b83811015611137578282828181106110bd576110bd612f05565b90506020020160208101906110d29190612c3f565b600760008787858181106110e8576110e8612f05565b90506020020160208101906110fd919061288b565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061112f81612ed4565b9150506110a3565b5050505050565b600080548190600160a01b900460ff161561116b5760405162461bcd60e51b815260040161019590612d8e565b6111b8876bfffffffffff096fb4da2000086868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611ec292505050565b6111c38787876111d1565b909890975095505050505050565b600080548190600160a01b900460ff16156111fe5760405162461bcd60e51b815260040161019590612d8e565b846001600160a01b0381166112555760405162461bcd60e51b815260206004820152601b60248201527f506f6f6c2043616e6e6f74206265205a65726f204164647265737300000000006044820152606401610195565b6000816001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561129057600080fd5b505afa1580156112a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c891906128a8565b90506000826001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561130557600080fd5b505afa158015611319573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061133d91906128a8565b90506113546001600160a01b03891633308a611fb7565b611373887360ae616a2155ee3d9a68541ba4544862310933d489611fef565b6001600160a01b03821673b31f66aa3c1e785363f0875a1b74e27b85fd66c714806113ba57506001600160a01b03811673b31f66aa3c1e785363f0875a1b74e27b85fd66c7145b156115165760006001600160a01b03831673b31f66aa3c1e785363f0875a1b74e27b85fd66c7146113eb57826113ed565b815b6040516333c6b72560e01b81526001600160a01b0382166004820152602481018a90526001604482018190526064820152306084820152600f60fc1b60a48201529091507360ae616a2155ee3d9a68541ba4544862310933d4906333c6b7259060c4016040805180830381600087803b15801561146957600080fd5b505af115801561147d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a19190612cab565b909650945060006114b582888a6001611d97565b905060006114da73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee888b6001611d97565b90506114fb336114ea848b612e91565b6001600160a01b03861691906118e7565b61150e33611509838a612e91565b6117ce565b505050611606565b604051635d5155ef60e11b81527360ae616a2155ee3d9a68541ba4544862310933d49063baa2abde9061155e90859085908c9060019081903090600f60fc1b90600401612d1b565b6040805180830381600087803b15801561157757600080fd5b505af115801561158b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115af9190612cab565b909550935060006115c38387896001611d97565b905060006115d483878a6001611d97565b90506115f5336115e4848a612e91565b6001600160a01b03871691906118e7565b611603336114ea8389612e91565b50505b7f701df21467d86143c88f54ea67eb82e3a66aabe03ad9126f8efa180431cc6fae338984888a60405161163d959493929190612ceb565b60405180910390a17f701df21467d86143c88f54ea67eb82e3a66aabe03ad9126f8efa180431cc6fae338983878a60405161167c959493929190612ceb565b60405180910390a1505050935093915050565b6000546001600160a01b031633146116b95760405162461bcd60e51b815260040161019590612dae565b6001600160a01b03811661171e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610195565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146117a35760405162461bcd60e51b815260040161019590612dae565b6001600160a01b03919091166000908152600160205260409020805460ff1916911515919091179055565b8047101561181e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610195565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461186b576040519150601f19603f3d011682016040523d82523d6000602084013e611870565b606091505b5050905080610c835760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610195565b6040516001600160a01b038316602482015260448101829052610c8390849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612018565b600080836001600160a01b0381166119a45760405162461bcd60e51b815260206004820152601b60248201527f506f6f6c2043616e6e6f74206265205a65726f204164647265737300000000006044820152606401610195565b6000816001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156119df57600080fd5b505afa1580156119f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1791906128a8565b90506000826001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015611a5457600080fd5b505afa158015611a68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a8c91906128a8565b9050611a9887876120ea565b50611ab8877360ae616a2155ee3d9a68541ba4544862310933d488611fef565b604051635d5155ef60e11b81527360ae616a2155ee3d9a68541ba4544862310933d49063baa2abde90611b0090859085908b9060019081903090600f60fc1b90600401612d1b565b6040805180830381600087803b158015611b1957600080fd5b505af1158015611b2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b519190612cab565b90955093508415801590611b655750600084115b611bb15760405162461bcd60e51b815260206004820152601e60248201527f52656d6f76656420496e73756666696369656e74204c697175696469747900006044820152606401610195565b5050509250929050565b600080876001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015611bf757600080fd5b505afa158015611c0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2f91906128a8565b90506000886001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015611c6c57600080fd5b505afa158015611c80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ca491906128a8565b9050856001600160a01b0316826001600160a01b03161415611cd157611cca8884612e38565b9250611d1f565b611d1282878a88600081518110611cea57611cea612f05565b602002602001015188600081518110611d0557611d05612f05565b6020026020010151612107565b611d1c9084612e38565b92505b856001600160a01b0316816001600160a01b03161415611d4a57611d438784612e38565b9250611d8b565b611d7e81878988600181518110611d6357611d63612f05565b602002602001015188600181518110611d0557611d05612f05565b611d889084612e38565b92505b50509695505050505050565b3360009081526001602052604081205460ff16828015611db5575080155b8015611dc357506000600254115b15611eb95761271060025486611dd99190612e72565b611de39190612e50565b6001600160a01b03851660009081526004602052604090205490925060ff1615611eb9576001600160a01b038616611e2d5773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee95505b6000606460035484611e3f9190612e72565b611e499190612e50565b6001600160a01b038087166000908152600560209081526040808320938c16835292905290812080549293508392909190611e85908490612e38565b90915550506001600160a01b03871660009081526006602052604081208054839290611eb2908490612e38565b9091555050505b50949350505050565b8051604114611f135760405162461bcd60e51b815260206004820152601860248201527f496e76616c6964207369676e6174757265206c656e67746800000000000000006044820152606401610195565b60208101516040808301516060840151915163d505accf60e01b815233600482015230602482015260448101869052600f60fc1b606482015260009290921a6084830181905260a4830184905260c4830182905290916001600160a01b0387169063d505accf9060e401600060405180830381600087803b158015611f9757600080fd5b505af1158015611fab573d6000803e3d6000fd5b50505050505050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526107b59085906323b872dd60e01b90608401611913565b6120046001600160a01b03841683600061235b565b610c836001600160a01b038416838361235b565b600061206d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661247f9092919063ffffffff16565b805190915015610c83578080602001905181019061208b9190612c5c565b610c835760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610195565b60006121016001600160a01b038416333085611fb7565b50919050565b60006001600160a01b03861673b31f66aa3c1e785363f0875a1b74e27b85fd66c714801561213c57506001600160a01b038516155b156121ae57604051632e1a7d4d60e01b81526004810185905273b31f66aa3c1e785363f0875a1b74e27b85fd66c790632e1a7d4d90602401600060405180830381600087803b15801561218e57600080fd5b505af11580156121a2573d6000803e3d6000fd5b50505050839050612352565b60006001600160a01b0387166121c55750836121d0565b6121d0878587611fef565b60006121db87612498565b6001600160a01b03861660009081526007602052604090205490915060ff1661223e5760405162461bcd60e51b815260206004820152601560248201527415185c99d95d081b9bdd08105d5d1a1bdc9a5e9959605a1b6044820152606401610195565b6000856001600160a01b031683866040516122599190612ccf565b60006040518083038185875af1925050503d8060008114612296576040519150601f19603f3d011682016040523d82523d6000602084013e61229b565b606091505b50509050806122e45760405162461bcd60e51b81526020600482015260156024820152744572726f72205377617070696e6720546f6b656e7360581b6044820152606401610195565b6000826122f08a612498565b6122fa9190612e91565b90506000811161234c5760405162461bcd60e51b815260206004820152601f60248201527f5377617070656420746f20496e76616c696420496e7465726d656469617465006044820152606401610195565b93505050505b95945050505050565b8015806123e45750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e9060440160206040518083038186803b1580156123aa57600080fd5b505afa1580156123be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123e29190612c92565b155b61244f5760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b6064820152608401610195565b6040516001600160a01b038316602482015260448101829052610c8390849063095ea7b360e01b90606401611913565b606061248e848460008561252e565b90505b9392505050565b60006001600160a01b0382166124af575047919050565b6040516370a0823160e01b81523060048201526001600160a01b038316906370a082319060240160206040518083038186803b1580156124ee57600080fd5b505afa158015612502573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125269190612c92565b90505b919050565b60608247101561258f5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610195565b843b6125dd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610195565b600080866001600160a01b031685876040516125f99190612ccf565b60006040518083038185875af1925050503d8060008114612636576040519150601f19603f3d011682016040523d82523d6000602084013e61263b565b606091505b509150915061264b828286612656565b979650505050505050565b60608315612665575081612491565b8251156126755782518084602001fd5b8160405162461bcd60e51b81526004016101959190612d5b565b803561252981612f31565b60008083601f8401126126ac57600080fd5b50813567ffffffffffffffff8111156126c457600080fd5b6020830191508360208260051b85010111156126df57600080fd5b9250929050565b600082601f8301126126f757600080fd5b8135602061270c61270783612e14565b612de3565b80838252828201915082860187848660051b890101111561272c57600080fd5b60005b8581101561275457813561274281612f31565b8452928401929084019060010161272f565b5090979650505050505050565b6000601f838184011261277357600080fd5b8235602061278361270783612e14565b80838252828201915082870188848660051b8a010111156127a357600080fd5b60005b8581101561283b57813567ffffffffffffffff808211156127c657600080fd5b818b0191508b603f8301126127da57600080fd5b868201356040828211156127f0576127f0612f1b565b612801828c01601f19168a01612de3565b92508183528d8183860101111561281757600080fd5b818185018a85013750600090820188015285525092840192908401906001016127a6565b509098975050505050505050565b60008083601f84011261285b57600080fd5b50813567ffffffffffffffff81111561287357600080fd5b6020830191508360208285010111156126df57600080fd5b60006020828403121561289d57600080fd5b813561249181612f31565b6000602082840312156128ba57600080fd5b815161249181612f31565b600080604083850312156128d857600080fd5b82356128e381612f31565b915060208301356128f381612f31565b809150509250929050565b600080600080600080600060e0888a03121561291957600080fd5b873561292481612f31565b9650602088013561293481612f31565b95506040880135945060608801359350608088013567ffffffffffffffff8082111561295f57600080fd5b61296b8b838c016126e6565b945060a08a013591508082111561298157600080fd5b5061298e8a828b01612761565b92505060c088013561299f81612f31565b8091505092959891949750929550565b60008060008060008060008060006101008a8c0312156129ce57600080fd5b6129d78a61268f565b98506129e560208b0161268f565b975060408a0135965060608a0135955060808a013567ffffffffffffffff80821115612a1057600080fd5b612a1c8d838e01612849565b909750955060a08c0135915080821115612a3557600080fd5b612a418d838e016126e6565b945060c08c0135915080821115612a5757600080fd5b50612a648c828d01612761565b925050612a7360e08b0161268f565b90509295985092959850929598565b60008060408385031215612a9557600080fd5b8235612aa081612f31565b915060208301356128f381612f49565b60008060408385031215612ac357600080fd5b8235612ace81612f31565b946020939093013593505050565b600080600060608486031215612af157600080fd5b8335612afc81612f31565b9250602084013591506040840135612b1381612f31565b809150509250925092565b600080600080600060808688031215612b3657600080fd5b8535612b4181612f31565b9450602086013593506040860135612b5881612f31565b9250606086013567ffffffffffffffff811115612b7457600080fd5b612b8088828901612849565b969995985093965092949392505050565b60008060208385031215612ba457600080fd5b823567ffffffffffffffff811115612bbb57600080fd5b612bc78582860161269a565b90969095509350505050565b60008060008060408587031215612be957600080fd5b843567ffffffffffffffff80821115612c0157600080fd5b612c0d8883890161269a565b90965094506020870135915080821115612c2657600080fd5b50612c338782880161269a565b95989497509550505050565b600060208284031215612c5157600080fd5b813561249181612f49565b600060208284031215612c6e57600080fd5b815161249181612f49565b600060208284031215612c8b57600080fd5b5035919050565b600060208284031215612ca457600080fd5b5051919050565b60008060408385031215612cbe57600080fd5b505080516020909101519092909150565b60008251612ce1818460208701612ea8565b9190910192915050565b6001600160a01b039586168152938516602085015291841660408401526060830152909116608082015260a00190565b6001600160a01b039788168152958716602087015260408601949094526060850192909252608084015290921660a082015260c081019190915260e00190565b6020815260008251806020840152612d7a816040850160208701612ea8565b601f01601f19169190910160400192915050565b60208082526006908201526514185d5cd95960d21b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b604051601f8201601f1916810167ffffffffffffffff81118282101715612e0c57612e0c612f1b565b604052919050565b600067ffffffffffffffff821115612e2e57612e2e612f1b565b5060051b60200190565b60008219821115612e4b57612e4b612eef565b500190565b600082612e6d57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612e8c57612e8c612eef565b500290565b600082821015612ea357612ea3612eef565b500390565b60005b83811015612ec3578181015183820152602001612eab565b838111156107b55750506000910152565b6000600019821415612ee857612ee8612eef565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114612f4657600080fd5b50565b8015158114612f4657600080fdfea2646970667358221220e61388ee4ab23353bcf56c057f941bda1a3b9aeb7edb5118324b5e3ed23ec0bb64736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106101445760003560e01c8063715018a6116100b65780639779d1a61161006f5780639779d1a614610435578063cfd7789c14610465578063d408f6571461049a578063f21d3ab5146104ca578063f2fde38b146104ea578063fbec27bf1461050a57600080fd5b8063715018a61461034857806375f12b211461035d5780637ee992831461037e5780638da5cb5b146103cd57806391027c5b146103f55780639735a6341461041557600080fd5b80633ff428c7116101085780633ff428c7146102725780634f51e29414610292578063550bfa56146102d25780635938b827146102f25780635de0398e146103125780635ecb16cd1461032857600080fd5b806301e980d4146101a55780630dc9de85146101c55780631385d24c146101e55780631781261f146101fa57806318b135e31461024557600080fd5b366101a0573332141561019e5760405162461bcd60e51b815260206004820152601860248201527f446f206e6f742073656e6420455448206469726563746c79000000000000000060448201526064015b60405180910390fd5b005b600080fd5b3480156101b157600080fd5b5061019e6101c0366004612c79565b61052a565b3480156101d157600080fd5b5061019e6101e0366004612b91565b6105b4565b3480156101f157600080fd5b5061019e6107bb565b34801561020657600080fd5b506102326102153660046128c5565b600560209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b34801561025157600080fd5b5061023261026036600461288b565b60066020526000908152604090205481565b34801561027e57600080fd5b5061019e61028d366004612a82565b610806565b34801561029e57600080fd5b506102c26102ad36600461288b565b60046020526000908152604090205460ff1681565b604051901515815260200161023c565b3480156102de57600080fd5b5061019e6102ed366004612c79565b61085b565b3480156102fe57600080fd5b5061023261030d3660046128fe565b6108db565b34801561031e57600080fd5b5061023260025481565b34801561033457600080fd5b5061019e610343366004612b91565b610a5d565b34801561035457600080fd5b5061019e610c88565b34801561036957600080fd5b506000546102c290600160a01b900460ff1681565b34801561038a57600080fd5b5061039e610399366004612ab0565b610cfc565b6040805194855260208501939093526001600160a01b039182169284019290925216606082015260800161023c565b3480156103d957600080fd5b506000546040516001600160a01b03909116815260200161023c565b34801561040157600080fd5b506102326104103660046129af565b610f9b565b34801561042157600080fd5b5061019e610430366004612bd3565b611030565b34801561044157600080fd5b506102c261045036600461288b565b60076020526000908152604090205460ff1681565b34801561047157600080fd5b50610485610480366004612b1e565b61113e565b6040805192835260208301919091520161023c565b3480156104a657600080fd5b506102c26104b536600461288b565b60016020526000908152604090205460ff1681565b3480156104d657600080fd5b506104856104e5366004612adc565b6111d1565b3480156104f657600080fd5b5061019e61050536600461288b565b61168f565b34801561051657600080fd5b5061019e610525366004612a82565b611779565b6000546001600160a01b031633146105545760405162461bcd60e51b815260040161019590612dae565b60648111156105af5760405162461bcd60e51b815260206004820152602160248201527f416666696c696174652053706c69742056616c7565206e6f7420616c6c6f77656044820152601960fa1b6064820152608401610195565b600355565b6000805b828110156107b557336000908152600560205260408120908585848181106105e2576105e2612f05565b90506020020160208101906105f7919061288b565b6001600160a01b0316815260208082019290925260409081016000908120543382526005909352908120919350908186868581811061063857610638612f05565b905060200201602081019061064d919061288b565b6001600160a01b03166001600160a01b0316815260200190815260200160002081905550816006600086868581811061068857610688612f05565b905060200201602081019061069d919061288b565b6001600160a01b03166001600160a01b03168152602001908152602001600020546106c89190612e91565b600660008686858181106106de576106de612f05565b90506020020160208101906106f3919061288b565b6001600160a01b0316815260208101919091526040016000205573eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee84848381811061073457610734612f05565b9050602002016020810190610749919061288b565b6001600160a01b031614156107675761076233836117ce565b6107a3565b6107a3338386868581811061077e5761077e612f05565b9050602002016020810190610793919061288b565b6001600160a01b031691906118e7565b806107ad81612ed4565b9150506105b8565b50505050565b6000546001600160a01b031633146107e55760405162461bcd60e51b815260040161019590612dae565b6000805460ff60a01b198116600160a01b9182900460ff1615909102179055565b6000546001600160a01b031633146108305760405162461bcd60e51b815260040161019590612dae565b6001600160a01b03919091166000908152600460205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146108855760405162461bcd60e51b815260040161019590612dae565b60648111156108d65760405162461bcd60e51b815260206004820152601a60248201527f476f6f6457696c6c2056616c7565206e6f7420616c6c6f7765640000000000006044820152606401610195565b600255565b60008054600160a01b900460ff16156109065760405162461bcd60e51b815260040161019590612d8e565b600080610913898961194a565b915091506109258983838d8a8a611bbb565b9250868310156109675760405162461bcd60e51b815260206004820152600d60248201526c4869676820536c69707061676560981b6044820152606401610195565b60006001600160a01b038b166109d65761099873eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee85876001611d97565b9050336108fc6109a88387612e91565b6040518115909202916000818181858888f193505050501580156109d0573d6000803e3d6000fd5b50610a04565b6109e38b85876001611d97565b9050610a04336109f38387612e91565b6001600160a01b038e1691906118e7565b610a0e8185612e91565b93507f701df21467d86143c88f54ea67eb82e3a66aabe03ad9126f8efa180431cc6fae338b8d8789604051610a47959493929190612ceb565b60405180910390a1505050979650505050505050565b6000546001600160a01b03163314610a875760405162461bcd60e51b815260040161019590612dae565b60005b81811015610c8357600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee848484818110610abb57610abb612f05565b9050602002016020810190610ad0919061288b565b6001600160a01b03161415610b505760066000858585818110610af557610af5612f05565b9050602002016020810190610b0a919061288b565b6001600160a01b03168152602081019190915260400160002054610b2e9047612e91565b9050610b4b610b456000546001600160a01b031690565b826117ce565b610c70565b60066000858585818110610b6657610b66612f05565b9050602002016020810190610b7b919061288b565b6001600160a01b03166001600160a01b0316815260200190815260200160002054848484818110610bae57610bae612f05565b9050602002016020810190610bc3919061288b565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a082319060240160206040518083038186803b158015610c0457600080fd5b505afa158015610c18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3c9190612c92565b610c469190612e91565b9050610c70610c5d6000546001600160a01b031690565b8286868681811061077e5761077e612f05565b5080610c7b81612ed4565b915050610a8a565b505050565b6000546001600160a01b03163314610cb25760405162461bcd60e51b815260040161019590612dae565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000806000806000869050806001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015610d4057600080fd5b505afa158015610d54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d7891906128a8565b9250806001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015610db357600080fd5b505afa158015610dc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610deb91906128a8565b6040516370a0823160e01b81526001600160a01b0389811660048301529193506000918516906370a082319060240160206040518083038186803b158015610e3257600080fd5b505afa158015610e46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6a9190612c92565b6040516370a0823160e01b81526001600160a01b038a811660048301529192506000918516906370a082319060240160206040518083038186803b158015610eb157600080fd5b505afa158015610ec5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee99190612c92565b90506000836001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f2657600080fd5b505afa158015610f3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5e9190612c92565b905080610f6b848b612e72565b610f759190612e50565b975080610f82838b612e72565b610f8c9190612e50565b96505050505092959194509250565b60008054600160a01b900460ff1615610fc65760405162461bcd60e51b815260040161019590612d8e565b611013896bfffffffffff096fb4da2000088888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611ec292505050565b6110228a8a8a8a8888886108db565b9a9950505050505050505050565b6000546001600160a01b0316331461105a5760405162461bcd60e51b815260040161019590612dae565b8281146110a05760405162461bcd60e51b8152602060048201526014602482015273092dcecc2d8d2c84092dce0eae840d8cadccee8d60631b6044820152606401610195565b60005b83811015611137578282828181106110bd576110bd612f05565b90506020020160208101906110d29190612c3f565b600760008787858181106110e8576110e8612f05565b90506020020160208101906110fd919061288b565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061112f81612ed4565b9150506110a3565b5050505050565b600080548190600160a01b900460ff161561116b5760405162461bcd60e51b815260040161019590612d8e565b6111b8876bfffffffffff096fb4da2000086868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611ec292505050565b6111c38787876111d1565b909890975095505050505050565b600080548190600160a01b900460ff16156111fe5760405162461bcd60e51b815260040161019590612d8e565b846001600160a01b0381166112555760405162461bcd60e51b815260206004820152601b60248201527f506f6f6c2043616e6e6f74206265205a65726f204164647265737300000000006044820152606401610195565b6000816001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561129057600080fd5b505afa1580156112a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c891906128a8565b90506000826001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561130557600080fd5b505afa158015611319573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061133d91906128a8565b90506113546001600160a01b03891633308a611fb7565b611373887360ae616a2155ee3d9a68541ba4544862310933d489611fef565b6001600160a01b03821673b31f66aa3c1e785363f0875a1b74e27b85fd66c714806113ba57506001600160a01b03811673b31f66aa3c1e785363f0875a1b74e27b85fd66c7145b156115165760006001600160a01b03831673b31f66aa3c1e785363f0875a1b74e27b85fd66c7146113eb57826113ed565b815b6040516333c6b72560e01b81526001600160a01b0382166004820152602481018a90526001604482018190526064820152306084820152600f60fc1b60a48201529091507360ae616a2155ee3d9a68541ba4544862310933d4906333c6b7259060c4016040805180830381600087803b15801561146957600080fd5b505af115801561147d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a19190612cab565b909650945060006114b582888a6001611d97565b905060006114da73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee888b6001611d97565b90506114fb336114ea848b612e91565b6001600160a01b03861691906118e7565b61150e33611509838a612e91565b6117ce565b505050611606565b604051635d5155ef60e11b81527360ae616a2155ee3d9a68541ba4544862310933d49063baa2abde9061155e90859085908c9060019081903090600f60fc1b90600401612d1b565b6040805180830381600087803b15801561157757600080fd5b505af115801561158b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115af9190612cab565b909550935060006115c38387896001611d97565b905060006115d483878a6001611d97565b90506115f5336115e4848a612e91565b6001600160a01b03871691906118e7565b611603336114ea8389612e91565b50505b7f701df21467d86143c88f54ea67eb82e3a66aabe03ad9126f8efa180431cc6fae338984888a60405161163d959493929190612ceb565b60405180910390a17f701df21467d86143c88f54ea67eb82e3a66aabe03ad9126f8efa180431cc6fae338983878a60405161167c959493929190612ceb565b60405180910390a1505050935093915050565b6000546001600160a01b031633146116b95760405162461bcd60e51b815260040161019590612dae565b6001600160a01b03811661171e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610195565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146117a35760405162461bcd60e51b815260040161019590612dae565b6001600160a01b03919091166000908152600160205260409020805460ff1916911515919091179055565b8047101561181e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610195565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461186b576040519150601f19603f3d011682016040523d82523d6000602084013e611870565b606091505b5050905080610c835760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610195565b6040516001600160a01b038316602482015260448101829052610c8390849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612018565b600080836001600160a01b0381166119a45760405162461bcd60e51b815260206004820152601b60248201527f506f6f6c2043616e6e6f74206265205a65726f204164647265737300000000006044820152606401610195565b6000816001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156119df57600080fd5b505afa1580156119f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1791906128a8565b90506000826001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015611a5457600080fd5b505afa158015611a68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a8c91906128a8565b9050611a9887876120ea565b50611ab8877360ae616a2155ee3d9a68541ba4544862310933d488611fef565b604051635d5155ef60e11b81527360ae616a2155ee3d9a68541ba4544862310933d49063baa2abde90611b0090859085908b9060019081903090600f60fc1b90600401612d1b565b6040805180830381600087803b158015611b1957600080fd5b505af1158015611b2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b519190612cab565b90955093508415801590611b655750600084115b611bb15760405162461bcd60e51b815260206004820152601e60248201527f52656d6f76656420496e73756666696369656e74204c697175696469747900006044820152606401610195565b5050509250929050565b600080876001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015611bf757600080fd5b505afa158015611c0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2f91906128a8565b90506000886001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015611c6c57600080fd5b505afa158015611c80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ca491906128a8565b9050856001600160a01b0316826001600160a01b03161415611cd157611cca8884612e38565b9250611d1f565b611d1282878a88600081518110611cea57611cea612f05565b602002602001015188600081518110611d0557611d05612f05565b6020026020010151612107565b611d1c9084612e38565b92505b856001600160a01b0316816001600160a01b03161415611d4a57611d438784612e38565b9250611d8b565b611d7e81878988600181518110611d6357611d63612f05565b602002602001015188600181518110611d0557611d05612f05565b611d889084612e38565b92505b50509695505050505050565b3360009081526001602052604081205460ff16828015611db5575080155b8015611dc357506000600254115b15611eb95761271060025486611dd99190612e72565b611de39190612e50565b6001600160a01b03851660009081526004602052604090205490925060ff1615611eb9576001600160a01b038616611e2d5773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee95505b6000606460035484611e3f9190612e72565b611e499190612e50565b6001600160a01b038087166000908152600560209081526040808320938c16835292905290812080549293508392909190611e85908490612e38565b90915550506001600160a01b03871660009081526006602052604081208054839290611eb2908490612e38565b9091555050505b50949350505050565b8051604114611f135760405162461bcd60e51b815260206004820152601860248201527f496e76616c6964207369676e6174757265206c656e67746800000000000000006044820152606401610195565b60208101516040808301516060840151915163d505accf60e01b815233600482015230602482015260448101869052600f60fc1b606482015260009290921a6084830181905260a4830184905260c4830182905290916001600160a01b0387169063d505accf9060e401600060405180830381600087803b158015611f9757600080fd5b505af1158015611fab573d6000803e3d6000fd5b50505050505050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526107b59085906323b872dd60e01b90608401611913565b6120046001600160a01b03841683600061235b565b610c836001600160a01b038416838361235b565b600061206d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661247f9092919063ffffffff16565b805190915015610c83578080602001905181019061208b9190612c5c565b610c835760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610195565b60006121016001600160a01b038416333085611fb7565b50919050565b60006001600160a01b03861673b31f66aa3c1e785363f0875a1b74e27b85fd66c714801561213c57506001600160a01b038516155b156121ae57604051632e1a7d4d60e01b81526004810185905273b31f66aa3c1e785363f0875a1b74e27b85fd66c790632e1a7d4d90602401600060405180830381600087803b15801561218e57600080fd5b505af11580156121a2573d6000803e3d6000fd5b50505050839050612352565b60006001600160a01b0387166121c55750836121d0565b6121d0878587611fef565b60006121db87612498565b6001600160a01b03861660009081526007602052604090205490915060ff1661223e5760405162461bcd60e51b815260206004820152601560248201527415185c99d95d081b9bdd08105d5d1a1bdc9a5e9959605a1b6044820152606401610195565b6000856001600160a01b031683866040516122599190612ccf565b60006040518083038185875af1925050503d8060008114612296576040519150601f19603f3d011682016040523d82523d6000602084013e61229b565b606091505b50509050806122e45760405162461bcd60e51b81526020600482015260156024820152744572726f72205377617070696e6720546f6b656e7360581b6044820152606401610195565b6000826122f08a612498565b6122fa9190612e91565b90506000811161234c5760405162461bcd60e51b815260206004820152601f60248201527f5377617070656420746f20496e76616c696420496e7465726d656469617465006044820152606401610195565b93505050505b95945050505050565b8015806123e45750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e9060440160206040518083038186803b1580156123aa57600080fd5b505afa1580156123be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123e29190612c92565b155b61244f5760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b6064820152608401610195565b6040516001600160a01b038316602482015260448101829052610c8390849063095ea7b360e01b90606401611913565b606061248e848460008561252e565b90505b9392505050565b60006001600160a01b0382166124af575047919050565b6040516370a0823160e01b81523060048201526001600160a01b038316906370a082319060240160206040518083038186803b1580156124ee57600080fd5b505afa158015612502573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125269190612c92565b90505b919050565b60608247101561258f5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610195565b843b6125dd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610195565b600080866001600160a01b031685876040516125f99190612ccf565b60006040518083038185875af1925050503d8060008114612636576040519150601f19603f3d011682016040523d82523d6000602084013e61263b565b606091505b509150915061264b828286612656565b979650505050505050565b60608315612665575081612491565b8251156126755782518084602001fd5b8160405162461bcd60e51b81526004016101959190612d5b565b803561252981612f31565b60008083601f8401126126ac57600080fd5b50813567ffffffffffffffff8111156126c457600080fd5b6020830191508360208260051b85010111156126df57600080fd5b9250929050565b600082601f8301126126f757600080fd5b8135602061270c61270783612e14565b612de3565b80838252828201915082860187848660051b890101111561272c57600080fd5b60005b8581101561275457813561274281612f31565b8452928401929084019060010161272f565b5090979650505050505050565b6000601f838184011261277357600080fd5b8235602061278361270783612e14565b80838252828201915082870188848660051b8a010111156127a357600080fd5b60005b8581101561283b57813567ffffffffffffffff808211156127c657600080fd5b818b0191508b603f8301126127da57600080fd5b868201356040828211156127f0576127f0612f1b565b612801828c01601f19168a01612de3565b92508183528d8183860101111561281757600080fd5b818185018a85013750600090820188015285525092840192908401906001016127a6565b509098975050505050505050565b60008083601f84011261285b57600080fd5b50813567ffffffffffffffff81111561287357600080fd5b6020830191508360208285010111156126df57600080fd5b60006020828403121561289d57600080fd5b813561249181612f31565b6000602082840312156128ba57600080fd5b815161249181612f31565b600080604083850312156128d857600080fd5b82356128e381612f31565b915060208301356128f381612f31565b809150509250929050565b600080600080600080600060e0888a03121561291957600080fd5b873561292481612f31565b9650602088013561293481612f31565b95506040880135945060608801359350608088013567ffffffffffffffff8082111561295f57600080fd5b61296b8b838c016126e6565b945060a08a013591508082111561298157600080fd5b5061298e8a828b01612761565b92505060c088013561299f81612f31565b8091505092959891949750929550565b60008060008060008060008060006101008a8c0312156129ce57600080fd5b6129d78a61268f565b98506129e560208b0161268f565b975060408a0135965060608a0135955060808a013567ffffffffffffffff80821115612a1057600080fd5b612a1c8d838e01612849565b909750955060a08c0135915080821115612a3557600080fd5b612a418d838e016126e6565b945060c08c0135915080821115612a5757600080fd5b50612a648c828d01612761565b925050612a7360e08b0161268f565b90509295985092959850929598565b60008060408385031215612a9557600080fd5b8235612aa081612f31565b915060208301356128f381612f49565b60008060408385031215612ac357600080fd5b8235612ace81612f31565b946020939093013593505050565b600080600060608486031215612af157600080fd5b8335612afc81612f31565b9250602084013591506040840135612b1381612f31565b809150509250925092565b600080600080600060808688031215612b3657600080fd5b8535612b4181612f31565b9450602086013593506040860135612b5881612f31565b9250606086013567ffffffffffffffff811115612b7457600080fd5b612b8088828901612849565b969995985093965092949392505050565b60008060208385031215612ba457600080fd5b823567ffffffffffffffff811115612bbb57600080fd5b612bc78582860161269a565b90969095509350505050565b60008060008060408587031215612be957600080fd5b843567ffffffffffffffff80821115612c0157600080fd5b612c0d8883890161269a565b90965094506020870135915080821115612c2657600080fd5b50612c338782880161269a565b95989497509550505050565b600060208284031215612c5157600080fd5b813561249181612f49565b600060208284031215612c6e57600080fd5b815161249181612f49565b600060208284031215612c8b57600080fd5b5035919050565b600060208284031215612ca457600080fd5b5051919050565b60008060408385031215612cbe57600080fd5b505080516020909101519092909150565b60008251612ce1818460208701612ea8565b9190910192915050565b6001600160a01b039586168152938516602085015291841660408401526060830152909116608082015260a00190565b6001600160a01b039788168152958716602087015260408601949094526060850192909252608084015290921660a082015260c081019190915260e00190565b6020815260008251806020840152612d7a816040850160208701612ea8565b601f01601f19169190910160400192915050565b60208082526006908201526514185d5cd95960d21b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b604051601f8201601f1916810167ffffffffffffffff81118282101715612e0c57612e0c612f1b565b604052919050565b600067ffffffffffffffff821115612e2e57612e2e612f1b565b5060051b60200190565b60008219821115612e4b57612e4b612eef565b500190565b600082612e6d57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612e8c57612e8c612eef565b500290565b600082821015612ea357612ea3612eef565b500390565b60005b83811015612ec3578181015183820152602001612eab565b838111156107b55750506000910152565b6000600019821415612ee857612ee8612eef565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114612f4657600080fd5b50565b8015158114612f4657600080fdfea2646970667358221220e61388ee4ab23353bcf56c057f941bda1a3b9aeb7edb5118324b5e3ed23ec0bb64736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _goodwill (uint256): 0
Arg [1] : _affiliateSplit (uint256): 0
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
31771:12875:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29646:10;29660:9;29646:23;;29638:60;;;;-1:-1:-1;;;29638:60:0;;16211:2:1;29638:60:0;;;16193:21:1;16250:2;16230:18;;;16223:30;16289:26;16269:18;;;16262:54;16333:18;;29638:60:0;;;;;;;;;31771:12875;;;;;26601:278;;;;;;;;;;-1:-1:-1;26601:278:0;;;;;:::i;:::-;;:::i;27791:636::-;;;;;;;;;;-1:-1:-1;27791:636:0;;;;;:::i;:::-;;:::i;26100:86::-;;;;;;;;;;;;;:::i;24485:71::-;;;;;;;;;;-1:-1:-1;24485:71:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;22886:25:1;;;22874:2;22859:18;24485:71:0;;;;;;;;24587:56;;;;;;;;;;-1:-1:-1;24587:56:0;;;;;:::i;:::-;;;;;;;;;;;;;;26887:150;;;;;;;;;;-1:-1:-1;26887:150:0;;;;;:::i;:::-;;:::i;24399:42::-;;;;;;;;;;-1:-1:-1;24399:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14910:14:1;;14903:22;14885:41;;14873:2;14858:18;24399:42:0;14745:187:1;26355:238:0;;;;;;;;;;-1:-1:-1;26355:238:0;;;;;:::i;:::-;;:::i;35856:1706::-;;;;;;;;;;-1:-1:-1;35856:1706:0;;;;;:::i;:::-;;:::i;24274:23::-;;;;;;;;;;;;;;;;27113:602;;;;;;;;;;-1:-1:-1;27113:602:0;;;;;:::i;:::-;;:::i;4698:148::-;;;;;;;;;;;;;:::i;24143:27::-;;;;;;;;;;-1:-1:-1;24143:27:0;;;;-1:-1:-1;;;24143:27:0;;;;;;43930:713;;;;;;;;;;-1:-1:-1;43930:713:0;;;;;:::i;:::-;;:::i;:::-;;;;23406:25:1;;;23462:2;23447:18;;23440:34;;;;-1:-1:-1;;;;;23548:15:1;;;23528:18;;;23521:43;;;;23600:15;23595:2;23580:18;;23573:43;23393:3;23378:19;43930:713:0;23175:447:1;4047:87:0;;;;;;;;;;-1:-1:-1;4093:7:0;4120:6;4047:87;;-1:-1:-1;;;;;4120:6:0;;;11193:51:1;;11181:2;11166:18;4047:87:0;11047:203:1;38902:706:0;;;;;;;;;;-1:-1:-1;38902:706:0;;;;;:::i;:::-;;:::i;28435:342::-;;;;;;;;;;-1:-1:-1;28435:342:0;;;;;:::i;:::-;;:::i;24688:47::-;;;;;;;;;;-1:-1:-1;24688:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;37952:467;;;;;;;;;;-1:-1:-1;37952:467:0;;;;;:::i;:::-;;:::i;:::-;;;;23096:25:1;;;23152:2;23137:18;;23130:34;;;;23069:18;37952:467:0;22922:248:1;24221:44:0;;;;;;;;;;-1:-1:-1;24221:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;33053:2375;;;;;;;;;;-1:-1:-1;33053:2375:0;;;;;:::i;:::-;;:::i;5001:281::-;;;;;;;;;;-1:-1:-1;5001:281:0;;;;;:::i;:::-;;:::i;26194:153::-;;;;;;;;;;-1:-1:-1;26194:153:0;;;;;:::i;:::-;;:::i;26601:278::-;4093:7;4120:6;-1:-1:-1;;;;;4120:6:0;2671:10;4267:23;4259:68;;;;-1:-1:-1;;;4259:68:0;;;;;;;:::i;:::-;26760:3:::1;26737:19;:26;;26715:109;;;::::0;-1:-1:-1;;;26715:109:0;;19915:2:1;26715:109:0::1;::::0;::::1;19897:21:1::0;19954:2;19934:18;;;19927:30;19993:34;19973:18;;;19966:62;-1:-1:-1;;;20044:18:1;;;20037:31;20085:19;;26715:109:0::1;19713:397:1::0;26715:109:0::1;26835:14;:36:::0;26601:278::o;27791:636::-;27866:16;;27893:527;27913:17;;;27893:527;;;27980:10;27963:28;;;;:16;:28;;;;;;27992:6;;27999:1;27992:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27963:39:0;;;;;;;;;;;;;;;-1:-1:-1;27963:39:0;;;;28034:10;28017:28;;:16;:28;;;;;;27963:39;;-1:-1:-1;;;28046:6:0;;28053:1;28046:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28017:39:0;-1:-1:-1;;;;;28017:39:0;;;;;;;;;;;;:43;;;;28179:8;28127:21;:32;28149:6;;28156:1;28149:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28127:32:0;-1:-1:-1;;;;;28127:32:0;;;;;;;;;;;;;:60;;;;:::i;:::-;28075:21;:32;28097:6;;28104:1;28097:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28075:32:0;;;;;;;;;;;;-1:-1:-1;28075:32:0;:112;24792:42;28208:6;;28215:1;28208:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28208:23:0;;28204:205;;;28252:48;28278:10;28291:8;28252:17;:48::i;:::-;28204:205;;;28341:52;28372:10;28384:8;28348:6;;28355:1;28348:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28341:30:0;;:52;:30;:52::i;:::-;27932:3;;;;:::i;:::-;;;;27893:527;;;;27855:572;27791:636;;:::o;26100:86::-;4093:7;4120:6;-1:-1:-1;;;;;4120:6:0;2671:10;4267:23;4259:68;;;;-1:-1:-1;;;4259:68:0;;;;;;;:::i;:::-;26171:7:::1;::::0;;-1:-1:-1;;;;26160:18:0;::::1;-1:-1:-1::0;;;26171:7:0;;;::::1;;;26170:8;26160:18:::0;;::::1;;::::0;;26100:86::o;26887:150::-;4093:7;4120:6;-1:-1:-1;;;;;4120:6:0;2671:10;4267:23;4259:68;;;;-1:-1:-1;;;4259:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26997:22:0;;;::::1;;::::0;;;:10:::1;:22;::::0;;;;:32;;-1:-1:-1;;26997:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26887:150::o;26355:238::-;4093:7;4120:6;-1:-1:-1;;;;;4120:6:0;2671:10;4267:23;4259:68;;;;-1:-1:-1;;;4259:68:0;;;;;;;:::i;:::-;26493:3:::1;26476:13;:20;;26432:118;;;::::0;-1:-1:-1;;;26432:118:0;;18855:2:1;26432:118:0::1;::::0;::::1;18837:21:1::0;18894:2;18874:18;;;18867:30;18933:28;18913:18;;;18906:56;18979:18;;26432:118:0::1;18653:350:1::0;26432:118:0::1;26561:8;:24:::0;26355:238::o;35856:1706::-;36139:17;25163:7;;-1:-1:-1;;;25163:7:0;;;;25159:90;;;25187:16;;-1:-1:-1;;;25187:16:0;;;;;;;:::i;25159:90::-;36170:15:::1;36187::::0;36219:45:::1;36236:15;36253:10;36219:16;:45::i;:::-;36169:95;;;;36322:174;36348:15;36378:7;36400;36422:14;36451:11;36477:8;36322:11;:174::i;:::-;36310:186;;36528:12;36515:9;:25;;36507:51;;;::::0;-1:-1:-1;;;36507:51:0;;16564:2:1;36507:51:0::1;::::0;::::1;16546:21:1::0;16603:2;16583:18;;;16576:30;-1:-1:-1;;;16622:18:1;;;16615:43;16675:18;;36507:51:0::1;16362:337:1::0;36507:51:0::1;36571:28;-1:-1:-1::0;;;;;36656:28:0;::::1;36652:650;;36724:140;24792:42;36789:9;36817;36845:4;36724:17;:140::i;:::-;36701:163:::0;-1:-1:-1;36889:10:0::1;36881:62;36910:32;36701:163:::0;36910:9;:32:::1;:::i;:::-;36881:62;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;36652:650;;;36999:144;37035:14;37068:9;37096;37124:4;36999:17;:144::i;:::-;36976:167:::0;-1:-1:-1;37160:130:0::1;37214:10;37243:32;36976:167:::0;37243:9;:32:::1;:::i;:::-;-1:-1:-1::0;;;;;37160:35:0;::::1;::::0;:130;:35:::1;:130::i;:::-;37326:32;37338:20:::0;37326:9;:32:::1;:::i;:::-;37314:44;;37376:149;37397:10;37422:15;37452:14;37481:9;37505;37376:149;;;;;;;;;;:::i;:::-;;;;;;;;37538:16;;;35856:1706:::0;;;;;;;;;:::o;27113:602::-;4093:7;4120:6;-1:-1:-1;;;;;4120:6:0;2671:10;4267:23;4259:68;;;;-1:-1:-1;;;4259:68:0;;;;;;;:::i;:::-;27199:9:::1;27194:514;27214:17:::0;;::::1;27194:514;;;27253:11;24792:42;27285:6:::0;;27292:1;27285:9;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27285:23:0::1;;27281:416;;;27359:21;:32;27381:6;;27388:1;27381:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27359:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;27359:32:0;;27335:56:::1;::::0;:21:::1;:56;:::i;:::-;27329:62;;27412:40;27438:7;4093::::0;4120:6;-1:-1:-1;;;;;4120:6:0;;4047:87;27438:7:::1;27448:3;27412:17;:40::i;:::-;27281:416;;;27586:21;:32;27608:6;;27615:1;27608:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27586:32:0::1;-1:-1:-1::0;;;;;27586:32:0::1;;;;;;;;;;;;;27527:6;;27534:1;27527:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;27520:42;::::0;-1:-1:-1;;;27520:42:0;;27556:4:::1;27520:42;::::0;::::1;11193:51:1::0;-1:-1:-1;;;;;27520:27:0;;;::::1;::::0;::::1;::::0;11166:18:1;;27520:42:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:98;;;;:::i;:::-;27493:125;;27637:44;27668:7;4093::::0;4120:6;-1:-1:-1;;;;;4120:6:0;;4047:87;27668:7:::1;27677:3;27644:6;;27651:1;27644:9;;;;;;;:::i;27637:44::-;-1:-1:-1::0;27233:3:0;::::1;::::0;::::1;:::i;:::-;;;;27194:514;;;;27113:602:::0;;:::o;4698:148::-;4093:7;4120:6;-1:-1:-1;;;;;4120:6:0;2671:10;4267:23;4259:68;;;;-1:-1:-1;;;4259:68:0;;;;;;;:::i;:::-;4805:1:::1;4789:6:::0;;4768:40:::1;::::0;-1:-1:-1;;;;;4789:6:0;;::::1;::::0;4768:40:::1;::::0;4805:1;;4768:40:::1;4836:1;4819:19:::0;;-1:-1:-1;;;;;;4819:19:0::1;::::0;;4698:148::o;43930:713::-;44069:15;44099;44129:14;44158;44200:19;44237:15;44200:53;;44273:4;-1:-1:-1;;;;;44273:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44264:22;;44306:4;-1:-1:-1;;;;;44306:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44351:41;;-1:-1:-1;;;44351:41:0;;-1:-1:-1;;;;;11211:32:1;;;44351:41:0;;;11193:51:1;44297:22:0;;-1:-1:-1;44332:16:0;;44351:24;;;;;11166:18:1;;44351:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44422;;-1:-1:-1;;;44422:41:0;;-1:-1:-1;;;;;11211:32:1;;;44422:41:0;;;11193:51:1;44332:60:0;;-1:-1:-1;44403:16:0;;44422:24;;;;;11166:18:1;;44422:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44403:60;;44476:20;44499:4;-1:-1:-1;;;;;44499:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44476:41;-1:-1:-1;44476:41:0;44541:20;44553:8;44541:9;:20;:::i;:::-;44540:37;;;;:::i;:::-;44530:47;-1:-1:-1;44623:12:0;44599:20;44611:8;44599:9;:20;:::i;:::-;44598:37;;;;:::i;:::-;44588:47;;44189:454;;;;43930:713;;;;;;;:::o;38902:706::-;39230:7;25163;;-1:-1:-1;;;25163:7:0;;;;25159:90;;;25187:16;;-1:-1:-1;;;25187:16:0;;;;;;;:::i;25159:90::-;39269:52:::1;39277:15;32027:29;39311:9;;39269:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;39269:7:0::1;::::0;-1:-1:-1;;;39269:52:0:i:1;:::-;39356:233;39381:14;39414:15;39448:10;39477:12;39508:11;39538:8;39565:9;39356:6;:233::i;:::-;39334:266:::0;38902:706;-1:-1:-1;;;;;;;;;;38902:706:0:o;28435:342::-;4093:7;4120:6;-1:-1:-1;;;;;4120:6:0;2671:10;4267:23;4259:68;;;;-1:-1:-1;;;4259:68:0;;;;;;;:::i;:::-;28582:35;;::::1;28574:68;;;::::0;-1:-1:-1;;;28574:68:0;;19566:2:1;28574:68:0::1;::::0;::::1;19548:21:1::0;19605:2;19585:18;;;19578:30;-1:-1:-1;;;19624:18:1;;;19617:50;19684:18;;28574:68:0::1;19364:344:1::0;28574:68:0::1;28660:9;28655:115;28675:18:::0;;::::1;28655:115;;;28745:10;;28756:1;28745:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;28715:15;:27;28731:7;;28739:1;28731:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28715:27:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;28715:27:0;:43;;-1:-1:-1;;28715:43:0::1;::::0;::::1;;::::0;;;::::1;::::0;;28695:3;::::1;::::0;::::1;:::i;:::-;;;;28655:115;;;;28435:342:::0;;;;:::o;37952:467::-;38155:15;25163:7;;38155:15;;-1:-1:-1;;;25163:7:0;;;;25159:90;;;25187:16;;-1:-1:-1;;;25187:16:0;;;;;;;:::i;25159:90::-;38219:52:::1;38227:15;32027:29;38261:9;;38219:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;38219:7:0::1;::::0;-1:-1:-1;;;38219:52:0:i:1;:::-;38305:106;38336:15;38366:10;38391:9;38305:16;:106::i;:::-;38284:127:::0;;;;-1:-1:-1;37952:467:0;-1:-1:-1;;;;;;37952:467:0:o;33053:2375::-;33209:15;25163:7;;33209:15;;-1:-1:-1;;;25163:7:0;;;;25159:90;;;25187:16;;-1:-1:-1;;;25187:16:0;;;;;;;:::i;25159:90::-;33291:15;-1:-1:-1;;;;;33328:27:0;::::1;33320:67;;;::::0;-1:-1:-1;;;33320:67:0;;19210:2:1;33320:67:0::1;::::0;::::1;19192:21:1::0;19249:2;19229:18;;;19222:30;19288:29;19268:18;;;19261:57;19335:18;;33320:67:0::1;19008:351:1::0;33320:67:0::1;33425:14;33442:4;-1:-1:-1::0;;;;;33442:11:0::1;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33425:30;;33466:14;33483:4;-1:-1:-1::0;;;;;33483:11:0::1;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33466:30:::0;-1:-1:-1;33509:129:0::1;-1:-1:-1::0;;;;;33509:40:0;::::1;33564:10;33597:4;33617:10:::0;33509:40:::1;:129::i;:::-;33651:62;33665:15;32141:42;33702:10;33651:13;:62::i;:::-;-1:-1:-1::0;;;;;33730:27:0;::::1;32255:42;33730:27;::::0;:58:::1;;-1:-1:-1::0;;;;;;33761:27:0;::::1;32255:42;33761:27;33730:58;33726:1537;;;33805:14;-1:-1:-1::0;;;;;33822:27:0;::::1;32255:42;33822:27;:45;;33861:6;33822:45;;;33852:6;33822:45;33903:197;::::0;-1:-1:-1;;;33903:197:0;;-1:-1:-1;;;;;14492:15:1;;33903:197:0::1;::::0;::::1;14474:34:1::0;14524:18;;;14517:34;;;34005:1:0::1;14567:18:1::0;;;14560:34;;;14610:18;;;14603:34;34053:4:0::1;14653:19:1::0;;;14646:44;-1:-1:-1;;;14706:19:1;;;14699:35;33805:62:0;;-1:-1:-1;32141:42:0::1;::::0;33903:29:::1;::::0;14408:19:1;;33903:197:0::1;::::0;::::1;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33882:218:::0;;-1:-1:-1;33882:218:0;-1:-1:-1;34151:21:0::1;34192:51;34210:6:::0;33882:218;34227:9;34238:4:::1;34192:17;:51::i;:::-;34151:92;;34258:19;34297:55;24792:42;34327:7;34336:9;34347:4;34297:17;:55::i;:::-;34258:94:::0;-1:-1:-1;34397:64:0::1;34425:10;34437:23;34447:13:::0;34437:7;:23:::1;:::i;:::-;-1:-1:-1::0;;;;;34397:27:0;::::1;::::0;:64;:27:::1;:64::i;:::-;34476:61;34502:10;34515:21;34525:11:::0;34515:7;:21:::1;:::i;:::-;34476:17;:61::i;:::-;33790:759;;;33726:1537;;;34591:218;::::0;-1:-1:-1;;;34591:218:0;;32141:42:::1;::::0;34591:25:::1;::::0;:218:::1;::::0;34635:6;;34660;;34685:10;;34714:1:::1;::::0;;;34762:4:::1;::::0;-1:-1:-1;;;31909:66:0;34591:218:::1;;;:::i;:::-;;::::0;::::1;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34570:239:::0;;-1:-1:-1;34570:239:0;-1:-1:-1;34860:22:0::1;34902:51;34920:6:::0;34570:239;34937:9;34948:4:::1;34902:17;:51::i;:::-;34860:93;;34968:22;35010:51;35028:6;35036:7;35045:9;35056:4;35010:17;:51::i;:::-;34968:93:::0;-1:-1:-1;35106:65:0::1;35134:10;35146:24;35156:14:::0;35146:7;:24:::1;:::i;:::-;-1:-1:-1::0;;;;;35106:27:0;::::1;::::0;:65;:27:::1;:65::i;:::-;35186;35214:10;35226:24;35236:14:::0;35226:7;:24:::1;:::i;35186:65::-;34555:708;;33726:1537;35278:63;35285:10;35297:15;35314:6;35322:7;35331:9;35278:63;;;;;;;;;;:::i;:::-;;;;;;;;35357;35364:10;35376:15;35393:6;35401:7;35410:9;35357:63;;;;;;;;;;:::i;:::-;;;;;;;;33243:2185;;;33053:2375:::0;;;;;;:::o;5001:281::-;4093:7;4120:6;-1:-1:-1;;;;;4120:6:0;2671:10;4267:23;4259:68;;;;-1:-1:-1;;;4259:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5104:22:0;::::1;5082:110;;;::::0;-1:-1:-1;;;5082:110:0;;16906:2:1;5082:110:0::1;::::0;::::1;16888:21:1::0;16945:2;16925:18;;;16918:30;16984:34;16964:18;;;16957:62;-1:-1:-1;;;17035:18:1;;;17028:36;17081:19;;5082:110:0::1;16704:402:1::0;5082:110:0::1;5229:6;::::0;;5208:38:::1;::::0;-1:-1:-1;;;;;5208:38:0;;::::1;::::0;5229:6;::::1;::::0;5208:38:::1;::::0;::::1;5257:6;:17:::0;;-1:-1:-1;;;;;;5257:17:0::1;-1:-1:-1::0;;;;;5257:17:0;;;::::1;::::0;;;::::1;::::0;;5001:281::o;26194:153::-;4093:7;4120:6;-1:-1:-1;;;;;4120:6:0;2671:10;4267:23;4259:68;;;;-1:-1:-1;;;4259:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26306:24:0;;;::::1;;::::0;;;:12:::1;:24;::::0;;;;:33;;-1:-1:-1;;26306:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26194:153::o;10330:471::-;10459:6;10434:21;:31;;10412:110;;;;-1:-1:-1;;;10412:110:0;;18090:2:1;10412:110:0;;;18072:21:1;18129:2;18109:18;;;18102:30;18168:31;18148:18;;;18141:59;18217:18;;10412:110:0;17888:353:1;10412:110:0;10614:12;10632:9;-1:-1:-1;;;;;10632:14:0;10655:6;10632:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10613:54;;;10700:7;10678:115;;;;-1:-1:-1;;;10678:115:0;;17663:2:1;10678:115:0;;;17645:21:1;17702:2;17682:18;;;17675:30;17741:34;17721:18;;;17714:62;17812:28;17792:18;;;17785:56;17858:19;;10678:115:0;17461:422:1;17519:248:0;17690:58;;-1:-1:-1;;;;;14046:32:1;;17690:58:0;;;14028:51:1;14095:18;;;14088:34;;;17636:123:0;;17670:5;;-1:-1:-1;;;17713:23:0;14001:18:1;;17690:58:0;;;;-1:-1:-1;;17690:58:0;;;;;;;;;;;;;;-1:-1:-1;;;;;17690:58:0;-1:-1:-1;;;;;;17690:58:0;;;;;;;;;;17636:19;:123::i;40268:810::-;40375:15;;40462;-1:-1:-1;;;;;40499:27:0;;40491:67;;;;-1:-1:-1;;;40491:67:0;;19210:2:1;40491:67:0;;;19192:21:1;19249:2;19229:18;;;19222:30;19288:29;19268:18;;;19261:57;19335:18;;40491:67:0;19008:351:1;40491:67:0;40571:14;40588:4;-1:-1:-1;;;;;40588:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40571:30;;40612:14;40629:4;-1:-1:-1;;;;;40629:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40612:30;;40655:40;40667:15;40684:10;40655:11;:40::i;:::-;;40708:62;40722:15;32141:42;40759:10;40708:13;:62::i;:::-;40804:186;;-1:-1:-1;;;40804:186:0;;32141:42;;40804:25;;:186;;40844:6;;40865;;40886:10;;40911:1;;;;40951:4;;-1:-1:-1;;;31909:66:0;40804:186;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40783:207;;-1:-1:-1;40783:207:0;-1:-1:-1;41009:11:0;;;;;:26;;;41034:1;41024:7;:11;41009:26;41001:69;;;;-1:-1:-1;;;41001:69:0;;21749:2:1;41001:69:0;;;21731:21:1;21788:2;21768:18;;;21761:30;21827:32;21807:18;;;21800:60;21877:18;;41001:69:0;21547:354:1;41001:69:0;40414:664;;;40268:810;;;;;:::o;41086:1315::-;41317:20;41350:14;41382:15;-1:-1:-1;;;;;41367:38:0;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41350:57;;41418:14;41450:15;-1:-1:-1;;;;;41435:38:0;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41418:57;;41536:7;-1:-1:-1;;;;;41526:17:0;:6;-1:-1:-1;;;;;41526:17:0;;41522:413;;;41575:22;41590:7;41575:12;:22;:::i;:::-;41560:37;;41522:413;;;41734:189;41767:6;41796:7;41826;41856:11;41868:1;41856:14;;;;;;;;:::i;:::-;;;;;;;41893:8;41902:1;41893:11;;;;;;;;:::i;:::-;;;;;;;41734:10;:189::i;:::-;41702:221;;:12;:221;:::i;:::-;41670:253;;41522:413;41995:7;-1:-1:-1;;;;;41985:17:0;:6;-1:-1:-1;;;;;41985:17:0;;41981:413;;;42034:22;42049:7;42034:12;:22;:::i;:::-;42019:37;;41981:413;;;42193:189;42226:6;42255:7;42285;42315:11;42327:1;42315:14;;;;;;;;:::i;:::-;;;;;;;42352:8;42361:1;42352:11;;;;;;;;:::i;42193:189::-;42161:221;;:12;:221;:::i;:::-;42129:253;;41981:413;41339:1062;;41086:1315;;;;;;;;:::o;28785:807::-;29017:10;28944:28;29004:24;;;:12;:24;;;;;;;;29043:14;:30;;;;;29062:11;29061:12;29043:30;:46;;;;;29088:1;29077:8;;:12;29043:46;29039:546;;;29151:5;29139:8;;29130:6;:17;;;;:::i;:::-;29129:27;;;;:::i;:::-;-1:-1:-1;;;;;29177:21:0;;;;;;:10;:21;;;;;;29106:50;;-1:-1:-1;29177:21:0;;29173:401;;;-1:-1:-1;;;;;29223:19:0;;29219:86;;24792:42;29267:18;;29219:86;29325:24;29415:3;29397:14;;29374:20;:37;;;;:::i;:::-;29373:45;;;;:::i;:::-;-1:-1:-1;;;;;29437:27:0;;;;;;;:16;:27;;;;;;;;:34;;;;;;;;;;;:54;;29325:93;;-1:-1:-1;29325:93:0;;29437:34;;:27;:54;;29325:93;;29437:54;:::i;:::-;;;;-1:-1:-1;;;;;;;29510:28:0;;;;;;:21;:28;;;;;:48;;29542:16;;29510:28;:48;;29542:16;;29510:48;:::i;:::-;;;;-1:-1:-1;;;29173:401:0;28974:618;28785:807;;;;;;:::o;39616:644::-;39762:9;:16;39782:2;39762:22;39754:59;;;;-1:-1:-1;;;39754:59:0;;21396:2:1;39754:59:0;;;21378:21:1;21435:2;21415:18;;;21408:30;21474:26;21454:18;;;21447:54;21518:18;;39754:59:0;21194:348:1;39754:59:0;39934:2;39919:18;;39913:25;39978:2;39963:18;;;39957:25;40030:2;40015:18;;40009:25;40056:196;;-1:-1:-1;;;40056:196:0;;40109:10;40056:196;;;13528:34:1;40142:4:0;13578:18:1;;;13571:43;13630:18;;;13623:34;;;-1:-1:-1;;;13673:18:1;;;13666:34;39826:9:0;40001:34;;;;13716:19:1;;;13709:46;;;13771:19;;;13764:35;;;13815:19;;;13808:35;;;39957:25:0;;-1:-1:-1;;;;;40056:38:0;;;;;13462:19:1;;40056:196:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39743:517;;;39616:644;;;:::o;17775:285::-;17973:68;;-1:-1:-1;;;;;12364:15:1;;;17973:68:0;;;12346:34:1;12416:15;;12396:18;;;12389:43;12448:18;;;12441:34;;;17919:133:0;;17953:5;;-1:-1:-1;;;17996:27:0;12281:18:1;;17973:68:0;12106:375:1;25837:223:0;25962:37;-1:-1:-1;;;;;25962:25:0;;25988:7;25997:1;25962:25;:37::i;:::-;26010:42;-1:-1:-1;;;;;26010:25:0;;26036:7;26045:6;26010:25;:42::i;20540:885::-;20964:23;21003:118;21049:4;21003:118;;;;;;;;;;;;;;;;;21011:5;-1:-1:-1;;;;;21003:27:0;;;:118;;;;;:::i;:::-;21136:17;;20964:157;;-1:-1:-1;21136:21:0;21132:286;;21309:10;21298:30;;;;;;;;;;;;:::i;:::-;21272:134;;;;-1:-1:-1;;;21272:134:0;;22108:2:1;21272:134:0;;;22090:21:1;22147:2;22127:18;;;22120:30;22186:34;22166:18;;;22159:62;-1:-1:-1;;;22237:18:1;;;22230:40;22287:19;;21272:134:0;21906:406:1;30077:212:0;30165:7;30190:65;-1:-1:-1;;;;;30190:30:0;;30221:10;30241:4;30248:6;30190:30;:65::i;:::-;-1:-1:-1;30275:6:0;30077:212;-1:-1:-1;30077:212:0:o;42409:1031::-;42601:7;-1:-1:-1;;;;;42625:37:0;;32255:42;42625:37;:62;;;;-1:-1:-1;;;;;;42666:21:0;;;42625:62;42621:164;;;42704:41;;-1:-1:-1;;;42704:41:0;;;;;22886:25:1;;;32255:42:0;;42704:33;;22859:18:1;;42704:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42767:6;42760:13;;;;42621:164;42797:19;-1:-1:-1;;;;;42831:30:0;;42827:167;;-1:-1:-1;42892:6:0;42827:167;;;42931:51;42945:16;42963:10;42975:6;42931:13;:51::i;:::-;43006:22;43031:20;43043:7;43031:11;:20::i;:::-;-1:-1:-1;;;;;43072:27:0;;;;;;:15;:27;;;;;;43006:45;;-1:-1:-1;43072:27:0;;43064:61;;;;-1:-1:-1;;;43064:61:0;;15527:2:1;43064:61:0;;;15509:21:1;15566:2;15546:18;;;15539:30;-1:-1:-1;;;15585:18:1;;;15578:51;15646:18;;43064:61:0;15325:345:1;43064:61:0;43137:12;43155:10;-1:-1:-1;;;;;43155:15:0;43179:11;43193:8;43155:47;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43136:66;;;43221:7;43213:41;;;;-1:-1:-1;;;43213:41:0;;17313:2:1;43213:41:0;;;17295:21:1;17352:2;17332:18;;;17325:30;-1:-1:-1;;;17371:18:1;;;17364:51;17432:18;;43213:41:0;17111:345:1;43213:41:0;43267:20;43313:14;43290:20;43302:7;43290:11;:20::i;:::-;:37;;;;:::i;:::-;43267:60;;43363:1;43348:12;:16;43340:60;;;;-1:-1:-1;;;43340:60:0;;20678:2:1;43340:60:0;;;20660:21:1;20717:2;20697:18;;;20690:30;20756:33;20736:18;;;20729:61;20807:18;;43340:60:0;20476:355:1;43340:60:0;43420:12;-1:-1:-1;;;;42409:1031:0;;;;;;;;:::o;18329:707::-;18747:10;;;18746:62;;-1:-1:-1;18763:39:0;;-1:-1:-1;;;18763:39:0;;18787:4;18763:39;;;11467:34:1;-1:-1:-1;;;;;11537:15:1;;;11517:18;;;11510:43;18763:15:0;;;;;11402:18:1;;18763:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;18746:62;18724:166;;;;-1:-1:-1;;;18724:166:0;;22519:2:1;18724:166:0;;;22501:21:1;22558:2;22538:18;;;22531:30;22597:34;22577:18;;;22570:62;-1:-1:-1;;;22648:18:1;;;22641:52;22710:19;;18724:166:0;22317:418:1;18724:166:0;18955:62;;-1:-1:-1;;;;;14046:32:1;;18955:62:0;;;14028:51:1;14095:18;;;14088:34;;;18901:127:0;;18935:5;;-1:-1:-1;;;18978:22:0;14001:18:1;;18955:62:0;13854:274:1;11990:229:0;12127:12;12159:52;12181:6;12189:4;12195:1;12198:12;12159:21;:52::i;:::-;12152:59;;11990:229;;;;;;:::o;25264:290::-;25350:15;-1:-1:-1;;;;;25387:19:0;;25383:164;;-1:-1:-1;25433:21:0;25264:290;;;:::o;25383:164::-;25497:38;;-1:-1:-1;;;25497:38:0;;25529:4;25497:38;;;11193:51:1;-1:-1:-1;;;;;25497:23:0;;;;;11166:18:1;;25497:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25487:48;;25383:164;25264:290;;;:::o;13206:623::-;13376:12;13448:5;13423:21;:30;;13401:118;;;;-1:-1:-1;;;13401:118:0;;18448:2:1;13401:118:0;;;18430:21:1;18487:2;18467:18;;;18460:30;18526:34;18506:18;;;18499:62;-1:-1:-1;;;18577:18:1;;;18570:36;18623:19;;13401:118:0;18246:402:1;13401:118:0;9331:20;;13530:60;;;;-1:-1:-1;;;13530:60:0;;21038:2:1;13530:60:0;;;21020:21:1;21077:2;21057:18;;;21050:30;21116:31;21096:18;;;21089:59;21165:18;;13530:60:0;20836:353:1;13530:60:0;13664:12;13678:23;13718:6;-1:-1:-1;;;;;13718:11:0;13738:5;13746:4;13718:33;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13663:88;;;;13769:52;13787:7;13796:10;13808:12;13769:17;:52::i;:::-;13762:59;13206:623;-1:-1:-1;;;;;;;13206:623:0:o;16120:777::-;16270:12;16299:7;16295:595;;;-1:-1:-1;16330:10:0;16323:17;;16295:595;16444:17;;:21;16440:439;;16707:10;16701:17;16768:15;16755:10;16751:2;16747:19;16740:44;16440:439;16850:12;16843:20;;-1:-1:-1;;;16843:20:0;;;;;;;;:::i;14:134:1:-;82:20;;111:31;82:20;111:31;:::i;153:367::-;216:8;226:6;280:3;273:4;265:6;261:17;257:27;247:55;;298:1;295;288:12;247:55;-1:-1:-1;321:20:1;;364:18;353:30;;350:50;;;396:1;393;386:12;350:50;433:4;425:6;421:17;409:29;;493:3;486:4;476:6;473:1;469:14;461:6;457:27;453:38;450:47;447:67;;;510:1;507;500:12;447:67;153:367;;;;;:::o;525:748::-;579:5;632:3;625:4;617:6;613:17;609:27;599:55;;650:1;647;640:12;599:55;686:6;673:20;712:4;736:60;752:43;792:2;752:43;:::i;:::-;736:60;:::i;:::-;818:3;842:2;837:3;830:15;870:2;865:3;861:12;854:19;;905:2;897:6;893:15;957:3;952:2;946;943:1;939:10;931:6;927:23;923:32;920:41;917:61;;;974:1;971;964:12;917:61;996:1;1006:238;1020:2;1017:1;1014:9;1006:238;;;1091:3;1078:17;1108:31;1133:5;1108:31;:::i;:::-;1152:18;;1190:12;;;;1222;;;;1038:1;1031:9;1006:238;;;-1:-1:-1;1262:5:1;;525:748;-1:-1:-1;;;;;;;525:748:1:o;1278:1337::-;1330:5;1360:4;1404:3;1399:2;1391:6;1387:15;1383:25;1373:53;;1422:1;1419;1412:12;1373:53;1458:6;1445:20;1484:4;1508:60;1524:43;1564:2;1524:43;:::i;1508:60::-;1590:3;1614:2;1609:3;1602:15;1642:2;1637:3;1633:12;1626:19;;1677:2;1669:6;1665:15;1729:3;1724:2;1718;1715:1;1711:10;1703:6;1699:23;1695:32;1692:41;1689:61;;;1746:1;1743;1736:12;1689:61;1768:1;1778:808;1792:2;1789:1;1786:9;1778:808;;;1869:3;1856:17;1896:18;1946:2;1933:11;1930:19;1927:39;;;1962:1;1959;1952:12;1927:39;2001:11;1993:6;1989:24;1979:34;;2053:3;2048:2;2044;2040:11;2036:21;2026:49;;2071:1;2068;2061:12;2026:49;2119:2;2115;2111:11;2098:25;2146:2;2171;2167;2164:10;2161:36;;;2177:18;;:::i;:::-;2225:51;2249:11;;;-1:-1:-1;;2245:25:1;2241:34;;2225:51;:::i;:::-;2210:66;;2305:2;2296:7;2289:19;2349:3;2344:2;2339;2335;2331:11;2327:20;2324:29;2321:49;;;2366:1;2363;2356:12;2321:49;2427:2;2422;2418;2414:11;2409:2;2400:7;2396:16;2383:47;-1:-1:-1;2477:1:1;2454:16;;;2450:25;;2443:36;2492:20;;-1:-1:-1;2532:12:1;;;;2564;;;;1810:1;1803:9;1778:808;;;-1:-1:-1;2604:5:1;;1278:1337;-1:-1:-1;;;;;;;;1278:1337:1:o;2620:347::-;2671:8;2681:6;2735:3;2728:4;2720:6;2716:17;2712:27;2702:55;;2753:1;2750;2743:12;2702:55;-1:-1:-1;2776:20:1;;2819:18;2808:30;;2805:50;;;2851:1;2848;2841:12;2805:50;2888:4;2880:6;2876:17;2864:29;;2940:3;2933:4;2924:6;2916;2912:19;2908:30;2905:39;2902:59;;;2957:1;2954;2947:12;2972:247;3031:6;3084:2;3072:9;3063:7;3059:23;3055:32;3052:52;;;3100:1;3097;3090:12;3052:52;3139:9;3126:23;3158:31;3183:5;3158:31;:::i;3224:251::-;3294:6;3347:2;3335:9;3326:7;3322:23;3318:32;3315:52;;;3363:1;3360;3353:12;3315:52;3395:9;3389:16;3414:31;3439:5;3414:31;:::i;3480:388::-;3548:6;3556;3609:2;3597:9;3588:7;3584:23;3580:32;3577:52;;;3625:1;3622;3615:12;3577:52;3664:9;3651:23;3683:31;3708:5;3683:31;:::i;:::-;3733:5;-1:-1:-1;3790:2:1;3775:18;;3762:32;3803:33;3762:32;3803:33;:::i;:::-;3855:7;3845:17;;;3480:388;;;;;:::o;3873:1159::-;4045:6;4053;4061;4069;4077;4085;4093;4146:3;4134:9;4125:7;4121:23;4117:33;4114:53;;;4163:1;4160;4153:12;4114:53;4202:9;4189:23;4221:31;4246:5;4221:31;:::i;:::-;4271:5;-1:-1:-1;4328:2:1;4313:18;;4300:32;4341:33;4300:32;4341:33;:::i;:::-;4393:7;-1:-1:-1;4447:2:1;4432:18;;4419:32;;-1:-1:-1;4498:2:1;4483:18;;4470:32;;-1:-1:-1;4553:3:1;4538:19;;4525:33;4577:18;4607:14;;;4604:34;;;4634:1;4631;4624:12;4604:34;4657:61;4710:7;4701:6;4690:9;4686:22;4657:61;:::i;:::-;4647:71;;4771:3;4760:9;4756:19;4743:33;4727:49;;4801:2;4791:8;4788:16;4785:36;;;4817:1;4814;4807:12;4785:36;;4840:61;4893:7;4882:8;4871:9;4867:24;4840:61;:::i;:::-;4830:71;;;4953:3;4942:9;4938:19;4925:33;4967;4992:7;4967:33;:::i;:::-;5019:7;5009:17;;;3873:1159;;;;;;;;;;:::o;5037:1252::-;5229:6;5237;5245;5253;5261;5269;5277;5285;5293;5346:3;5334:9;5325:7;5321:23;5317:33;5314:53;;;5363:1;5360;5353:12;5314:53;5386:29;5405:9;5386:29;:::i;:::-;5376:39;;5434:38;5468:2;5457:9;5453:18;5434:38;:::i;:::-;5424:48;;5519:2;5508:9;5504:18;5491:32;5481:42;;5570:2;5559:9;5555:18;5542:32;5532:42;;5625:3;5614:9;5610:19;5597:33;5649:18;5690:2;5682:6;5679:14;5676:34;;;5706:1;5703;5696:12;5676:34;5745:58;5795:7;5786:6;5775:9;5771:22;5745:58;:::i;:::-;5822:8;;-1:-1:-1;5719:84:1;-1:-1:-1;5910:3:1;5895:19;;5882:33;;-1:-1:-1;5927:16:1;;;5924:36;;;5956:1;5953;5946:12;5924:36;5979:63;6034:7;6023:8;6012:9;6008:24;5979:63;:::i;:::-;5969:73;;6095:3;6084:9;6080:19;6067:33;6051:49;;6125:2;6115:8;6112:16;6109:36;;;6141:1;6138;6131:12;6109:36;;6164:61;6217:7;6206:8;6195:9;6191:24;6164:61;:::i;:::-;6154:71;;;6244:39;6278:3;6267:9;6263:19;6244:39;:::i;:::-;6234:49;;5037:1252;;;;;;;;;;;:::o;6294:382::-;6359:6;6367;6420:2;6408:9;6399:7;6395:23;6391:32;6388:52;;;6436:1;6433;6426:12;6388:52;6475:9;6462:23;6494:31;6519:5;6494:31;:::i;:::-;6544:5;-1:-1:-1;6601:2:1;6586:18;;6573:32;6614:30;6573:32;6614:30;:::i;6681:315::-;6749:6;6757;6810:2;6798:9;6789:7;6785:23;6781:32;6778:52;;;6826:1;6823;6816:12;6778:52;6865:9;6852:23;6884:31;6909:5;6884:31;:::i;:::-;6934:5;6986:2;6971:18;;;;6958:32;;-1:-1:-1;;;6681:315:1:o;7001:456::-;7078:6;7086;7094;7147:2;7135:9;7126:7;7122:23;7118:32;7115:52;;;7163:1;7160;7153:12;7115:52;7202:9;7189:23;7221:31;7246:5;7221:31;:::i;:::-;7271:5;-1:-1:-1;7323:2:1;7308:18;;7295:32;;-1:-1:-1;7379:2:1;7364:18;;7351:32;7392:33;7351:32;7392:33;:::i;:::-;7444:7;7434:17;;;7001:456;;;;;:::o;7462:754::-;7559:6;7567;7575;7583;7591;7644:3;7632:9;7623:7;7619:23;7615:33;7612:53;;;7661:1;7658;7651:12;7612:53;7700:9;7687:23;7719:31;7744:5;7719:31;:::i;:::-;7769:5;-1:-1:-1;7821:2:1;7806:18;;7793:32;;-1:-1:-1;7877:2:1;7862:18;;7849:32;7890:33;7849:32;7890:33;:::i;:::-;7942:7;-1:-1:-1;8000:2:1;7985:18;;7972:32;8027:18;8016:30;;8013:50;;;8059:1;8056;8049:12;8013:50;8098:58;8148:7;8139:6;8128:9;8124:22;8098:58;:::i;:::-;7462:754;;;;-1:-1:-1;7462:754:1;;-1:-1:-1;8175:8:1;;8072:84;7462:754;-1:-1:-1;;;7462:754:1:o;8221:437::-;8307:6;8315;8368:2;8356:9;8347:7;8343:23;8339:32;8336:52;;;8384:1;8381;8374:12;8336:52;8424:9;8411:23;8457:18;8449:6;8446:30;8443:50;;;8489:1;8486;8479:12;8443:50;8528:70;8590:7;8581:6;8570:9;8566:22;8528:70;:::i;:::-;8617:8;;8502:96;;-1:-1:-1;8221:437:1;-1:-1:-1;;;;8221:437:1:o;8663:770::-;8782:6;8790;8798;8806;8859:2;8847:9;8838:7;8834:23;8830:32;8827:52;;;8875:1;8872;8865:12;8827:52;8915:9;8902:23;8944:18;8985:2;8977:6;8974:14;8971:34;;;9001:1;8998;8991:12;8971:34;9040:70;9102:7;9093:6;9082:9;9078:22;9040:70;:::i;:::-;9129:8;;-1:-1:-1;9014:96:1;-1:-1:-1;9217:2:1;9202:18;;9189:32;;-1:-1:-1;9233:16:1;;;9230:36;;;9262:1;9259;9252:12;9230:36;;9301:72;9365:7;9354:8;9343:9;9339:24;9301:72;:::i;:::-;8663:770;;;;-1:-1:-1;9392:8:1;-1:-1:-1;;;;8663:770:1:o;9438:241::-;9494:6;9547:2;9535:9;9526:7;9522:23;9518:32;9515:52;;;9563:1;9560;9553:12;9515:52;9602:9;9589:23;9621:28;9643:5;9621:28;:::i;9684:245::-;9751:6;9804:2;9792:9;9783:7;9779:23;9775:32;9772:52;;;9820:1;9817;9810:12;9772:52;9852:9;9846:16;9871:28;9893:5;9871:28;:::i;9934:180::-;9993:6;10046:2;10034:9;10025:7;10021:23;10017:32;10014:52;;;10062:1;10059;10052:12;10014:52;-1:-1:-1;10085:23:1;;9934:180;-1:-1:-1;9934:180:1:o;10119:184::-;10189:6;10242:2;10230:9;10221:7;10217:23;10213:32;10210:52;;;10258:1;10255;10248:12;10210:52;-1:-1:-1;10281:16:1;;10119:184;-1:-1:-1;10119:184:1:o;10308:245::-;10387:6;10395;10448:2;10436:9;10427:7;10423:23;10419:32;10416:52;;;10464:1;10461;10454:12;10416:52;-1:-1:-1;;10487:16:1;;10543:2;10528:18;;;10522:25;10487:16;;10522:25;;-1:-1:-1;10308:245:1:o;10558:274::-;10687:3;10725:6;10719:13;10741:53;10787:6;10782:3;10775:4;10767:6;10763:17;10741:53;:::i;:::-;10810:16;;;;;10558:274;-1:-1:-1;;10558:274:1:o;11564:537::-;-1:-1:-1;;;;;11879:15:1;;;11861:34;;11931:15;;;11926:2;11911:18;;11904:43;11983:15;;;11978:2;11963:18;;11956:43;12030:2;12015:18;;12008:34;12079:15;;;12073:3;12058:19;;12051:44;11810:3;11795:19;;11564:537::o;12486:688::-;-1:-1:-1;;;;;12873:15:1;;;12855:34;;12925:15;;;12920:2;12905:18;;12898:43;12972:2;12957:18;;12950:34;;;;13015:2;13000:18;;12993:34;;;;13058:3;13043:19;;13036:35;13108:15;;;12835:3;13087:19;;13080:44;13155:3;13140:19;;13133:35;;;;12804:3;12789:19;;12486:688::o;14937:383::-;15086:2;15075:9;15068:21;15049:4;15118:6;15112:13;15161:6;15156:2;15145:9;15141:18;15134:34;15177:66;15236:6;15231:2;15220:9;15216:18;15211:2;15203:6;15199:15;15177:66;:::i;:::-;15304:2;15283:15;-1:-1:-1;;15279:29:1;15264:45;;;;15311:2;15260:54;;14937:383;-1:-1:-1;;14937:383:1:o;15675:329::-;15877:2;15859:21;;;15916:1;15896:18;;;15889:29;-1:-1:-1;;;15949:2:1;15934:18;;15927:36;15995:2;15980:18;;15675:329::o;20115:356::-;20317:2;20299:21;;;20336:18;;;20329:30;20395:34;20390:2;20375:18;;20368:62;20462:2;20447:18;;20115:356::o;23627:275::-;23698:2;23692:9;23763:2;23744:13;;-1:-1:-1;;23740:27:1;23728:40;;23798:18;23783:34;;23819:22;;;23780:62;23777:88;;;23845:18;;:::i;:::-;23881:2;23874:22;23627:275;;-1:-1:-1;23627:275:1:o;23907:183::-;23967:4;24000:18;23992:6;23989:30;23986:56;;;24022:18;;:::i;:::-;-1:-1:-1;24067:1:1;24063:14;24079:4;24059:25;;23907:183::o;24095:128::-;24135:3;24166:1;24162:6;24159:1;24156:13;24153:39;;;24172:18;;:::i;:::-;-1:-1:-1;24208:9:1;;24095:128::o;24228:217::-;24268:1;24294;24284:132;;24338:10;24333:3;24329:20;24326:1;24319:31;24373:4;24370:1;24363:15;24401:4;24398:1;24391:15;24284:132;-1:-1:-1;24430:9:1;;24228:217::o;24450:168::-;24490:7;24556:1;24552;24548:6;24544:14;24541:1;24538:21;24533:1;24526:9;24519:17;24515:45;24512:71;;;24563:18;;:::i;:::-;-1:-1:-1;24603:9:1;;24450:168::o;24623:125::-;24663:4;24691:1;24688;24685:8;24682:34;;;24696:18;;:::i;:::-;-1:-1:-1;24733:9:1;;24623:125::o;24753:258::-;24825:1;24835:113;24849:6;24846:1;24843:13;24835:113;;;24925:11;;;24919:18;24906:11;;;24899:39;24871:2;24864:10;24835:113;;;24966:6;24963:1;24960:13;24957:48;;;-1:-1:-1;;25001:1:1;24983:16;;24976:27;24753:258::o;25016:135::-;25055:3;-1:-1:-1;;25076:17:1;;25073:43;;;25096:18;;:::i;:::-;-1:-1:-1;25143:1:1;25132:13;;25016:135::o;25156:127::-;25217:10;25212:3;25208:20;25205:1;25198:31;25248:4;25245:1;25238:15;25272:4;25269:1;25262:15;25288:127;25349:10;25344:3;25340:20;25337:1;25330:31;25380:4;25377:1;25370:15;25404:4;25401:1;25394:15;25420:127;25481:10;25476:3;25472:20;25469:1;25462:31;25512:4;25509:1;25502:15;25536:4;25533:1;25526:15;25552:131;-1:-1:-1;;;;;25627:31:1;;25617:42;;25607:70;;25673:1;25670;25663:12;25607:70;25552:131;:::o;25688:118::-;25774:5;25767:13;25760:21;25753:5;25750:32;25740:60;;25796:1;25793;25786:12
Swarm Source
ipfs://e61388ee4ab23353bcf56c057f941bda1a3b9aeb7edb5118324b5e3ed23ec0bb
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
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.