More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 31,875 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Zap In Token | 22415615 | 889 days ago | IN | 0 AVAX | 0.01081835 | ||||
Zap In Token | 22334558 | 891 days ago | IN | 0 AVAX | 0.00844707 | ||||
Zap In Token | 22277314 | 893 days ago | IN | 0 AVAX | 0.00917092 | ||||
Zap In Token | 22226103 | 894 days ago | IN | 0 AVAX | 0.01178433 | ||||
Zap In Token | 22215679 | 894 days ago | IN | 0 AVAX | 0.01190508 | ||||
Zap In Token | 22077056 | 897 days ago | IN | 0 AVAX | 0.00634124 | ||||
Zap In Token | 21983860 | 899 days ago | IN | 0 AVAX | 0.01174866 | ||||
Zap In Token | 21832770 | 903 days ago | IN | 0 AVAX | 0.01150386 | ||||
Zap In Token | 21671281 | 907 days ago | IN | 0 AVAX | 0.0143432 | ||||
Zap In Token | 21608791 | 908 days ago | IN | 0 AVAX | 0.01146498 | ||||
Zap In Token | 21607188 | 908 days ago | IN | 0 AVAX | 0.00900703 | ||||
Zap In Token | 21356176 | 914 days ago | IN | 0 AVAX | 0.00622829 | ||||
Zap In Token | 21205034 | 918 days ago | IN | 0 AVAX | 0.00586662 | ||||
Zap In Token | 20731165 | 929 days ago | IN | 0 AVAX | 0.00626592 | ||||
Zap In Token | 20731081 | 929 days ago | IN | 0 AVAX | 0.00622765 | ||||
Zap In Token | 20413859 | 937 days ago | IN | 0 AVAX | 0.00858586 | ||||
Zap In Token | 20344431 | 938 days ago | IN | 0 AVAX | 0.0062656 | ||||
Zap In Token | 20321291 | 939 days ago | IN | 0 AVAX | 0.0062656 | ||||
Zap In Token | 20271627 | 940 days ago | IN | 0 AVAX | 0.0063204 | ||||
Zap In Token | 20167002 | 943 days ago | IN | 0 AVAX | 0.00701919 | ||||
Zap In Token | 20083001 | 945 days ago | IN | 0 AVAX | 0.00622765 | ||||
Zap In Token | 20043457 | 946 days ago | IN | 0 AVAX | 0.01138739 | ||||
Zap In Token | 20001314 | 947 days ago | IN | 0 AVAX | 0.00601671 | ||||
Zap In Token | 19982937 | 948 days ago | IN | 0 AVAX | 0.00601671 | ||||
Zap In Token | 19982891 | 948 days ago | IN | 0 AVAX | 0.01150386 |
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
22415615 | 889 days ago | 0.00001804 AVAX | ||||
22415615 | 889 days ago | 0.00600332 AVAX | ||||
22415615 | 889 days ago | 0.00600332 AVAX | ||||
22415615 | 889 days ago | 0.01200665 AVAX | ||||
22226103 | 894 days ago | 0.00050739 AVAX | ||||
22226103 | 894 days ago | 0.16918485 AVAX | ||||
22226103 | 894 days ago | 0.16918485 AVAX | ||||
22226103 | 894 days ago | 0.33836971 AVAX | ||||
22215679 | 894 days ago | 0.0004881 AVAX | ||||
22215679 | 894 days ago | 0.16275031 AVAX | ||||
22215679 | 894 days ago | 0.16275031 AVAX | ||||
22215679 | 894 days ago | 0.32550063 AVAX | ||||
21983860 | 899 days ago | 0.01514665 AVAX | ||||
21983860 | 899 days ago | 5.11337207 AVAX | ||||
21983860 | 899 days ago | 5.11337207 AVAX | ||||
21983860 | 899 days ago | 10.22674415 AVAX | ||||
21832770 | 903 days ago | 0.00342982 AVAX | ||||
21832770 | 903 days ago | 1.14563078 AVAX | ||||
21832770 | 903 days ago | 1.14563078 AVAX | ||||
21832770 | 903 days ago | 2.29126157 AVAX | ||||
21671281 | 907 days ago | 0.24663427 AVAX | ||||
21671281 | 907 days ago | 0.24663427 AVAX | ||||
21671281 | 907 days ago | 0.49326855 AVAX | ||||
21608791 | 908 days ago | 0.00000018 AVAX | ||||
21608791 | 908 days ago | 0.00006135 AVAX |
Loading...
Loading
Contract Name:
Zap
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at snowscan.xyz on 2021-11-06 */ // SPDX-License-Identifier: MIXED // File @openzeppelin/contracts/math/[email protected] // License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b > a) return (false, 0); return (true, a - b); } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a / b); } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a % b); } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath: subtraction overflow"); return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) return 0; uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: division by zero"); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: modulo by zero"); return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); return a - b; } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryDiv}. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a % b; } } // File @openzeppelin/contracts/token/ERC20/[email protected] // License-Identifier: MIT pragma solidity >=0.6.0 <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 @openzeppelin/contracts/utils/[email protected] // License-Identifier: MIT pragma solidity >=0.6.2 <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 @openzeppelin/contracts/token/ERC20/[email protected] // License-Identifier: MIT pragma solidity >=0.6.0 <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 SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @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).add(value); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. 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 @openzeppelin/contracts-upgradeable/proxy/[email protected] // License-Identifier: MIT // solhint-disable-next-line compiler-version pragma solidity >=0.4.24 <0.8.0; /** * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect. * * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}. * * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity. */ abstract contract Initializable { /** * @dev Indicates that the contract has been initialized. */ bool private _initialized; /** * @dev Indicates that the contract is in the process of being initialized. */ bool private _initializing; /** * @dev Modifier to protect an initializer function from being invoked twice. */ modifier initializer() { require(_initializing || _isConstructor() || !_initialized, "Initializable: contract is already initialized"); bool isTopLevelCall = !_initializing; if (isTopLevelCall) { _initializing = true; _initialized = true; } _; if (isTopLevelCall) { _initializing = false; } } /// @dev Returns true if and only if the function is running in the constructor function _isConstructor() private view returns (bool) { // extcodesize checks the size of the code stored in an address, and // address returns the current address. Since the code is still not // deployed when running a constructor, any checks on its code size will // yield zero, making it an effective way to detect if a contract is // under construction or not. address self = address(this); uint256 cs; // solhint-disable-next-line no-inline-assembly assembly { cs := extcodesize(self) } return cs == 0; } } // File @openzeppelin/contracts-upgradeable/GSN/[email protected] // License-Identifier: MIT pragma solidity >=0.6.0 <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 GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract ContextUpgradeable is Initializable { function __Context_init() internal initializer { __Context_init_unchained(); } function __Context_init_unchained() internal initializer { } function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } uint256[50] private __gap; } // File @openzeppelin/contracts-upgradeable/access/[email protected] // License-Identifier: MIT pragma solidity >=0.6.0 <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 OwnableUpgradeable is Initializable, ContextUpgradeable { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ function __Ownable_init() internal initializer { __Context_init_unchained(); __Ownable_init_unchained(); } function __Ownable_init_unchained() internal initializer { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_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; } uint256[49] private __gap; } // File contracts/traderjoe/interfaces/IJoePair.sol // License-Identifier: GPL-3.0 pragma solidity >=0.5.0; interface IJoePair { event Approval(address indexed owner, address indexed spender, uint256 value); event Transfer(address indexed from, address indexed to, uint256 value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn(address indexed sender, uint256 amount0, uint256 amount1, address indexed to); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns ( uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast ); function price0CumulativeLast() external view returns (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } // File contracts/traderjoe/interfaces/IJoeRouter01.sol // License-Identifier: GPL-3.0 pragma solidity >=0.6.2; interface IJoeRouter01 { function factory() external pure returns (address); function WAVAX() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityAVAX( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountAVAXMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountAVAX, uint256 liquidity ); 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 amountAVAX); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityAVAXWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountAVAXMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountAVAX); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactAVAXForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactAVAX( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForAVAX( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapAVAXForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } // File contracts/traderjoe/interfaces/IJoeRouter02.sol // License-Identifier: GPL-3.0 pragma solidity >=0.6.2; interface IJoeRouter02 is IJoeRouter01 { function removeLiquidityAVAXSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountAVAXMin, address to, uint256 deadline ) external returns (uint256 amountAVAX); function removeLiquidityAVAXWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountAVAXMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountAVAX); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactAVAXForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForAVAXSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } // File contracts/traderjoe/interfaces/IWAVAX.sol // License-Identifier: GPL-3.0 pragma solidity >=0.5.0; interface IWAVAX { function deposit() external payable; function transfer(address to, uint256 value) external returns (bool); function withdraw(uint256) external; } // File contracts/Zap.sol // License-Identifier: MIT pragma solidity =0.6.12; /* * Trader Joe * MIT License; modified from PancakeBunny * */ contract Zap is OwnableUpgradeable { using SafeMath for uint256; using SafeERC20 for IERC20; /* ========== CONSTANT VARIABLES ========== */ address public JOE; address public constant USDT = 0xde3A24028580884448a5397872046a019649b084; address public constant DAI = 0xbA7dEebBFC5fA1100Fb055a87773e1E99Cd3507a; address public constant WAVAX = 0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7; IJoeRouter02 private ROUTER; /* ========== STATE VARIABLES ========== */ mapping(address => bool) private notLP; mapping(address => address) private routePairAddresses; address[] public tokens; /* ========== INITIALIZER ========== */ function initialize(address _joe, address _router) external initializer { __Ownable_init(); require(owner() != address(0), "ZapETH: owner must be set"); JOE = _joe; ROUTER = IJoeRouter02(_router); setNotLP(WAVAX); setNotLP(USDT); setNotLP(JOE); setNotLP(DAI); } receive() external payable {} /* ========== View Functions ========== */ function isLP(address _address) public view returns (bool) { return !notLP[_address]; } function routePair(address _address) external view returns (address) { return routePairAddresses[_address]; } /* ========== External Functions ========== */ function zapInToken( address _from, uint256 amount, address _to ) external { IERC20(_from).safeTransferFrom(msg.sender, address(this), amount); _approveTokenIfNeeded(_from); if (isLP(_to)) { IJoePair pair = IJoePair(_to); address token0 = pair.token0(); address token1 = pair.token1(); if (_from == token0 || _from == token1) { // swap half amount for other address other = _from == token0 ? token1 : token0; _approveTokenIfNeeded(other); uint256 sellAmount = amount.div(2); uint256 otherAmount = _swap(_from, sellAmount, other, address(this)); ROUTER.addLiquidity( _from, other, amount.sub(sellAmount), otherAmount, 0, 0, msg.sender, block.timestamp ); } else { uint256 avaxAmount = _swapTokenForAVAX(_from, amount, address(this)); _swapAVAXToLP(_to, avaxAmount, msg.sender); } } else { _swap(_from, amount, _to, msg.sender); } } function zapIn(address _to) external payable { _swapAVAXToLP(_to, msg.value, msg.sender); } function zapOut(address _from, uint256 amount) external { IERC20(_from).safeTransferFrom(msg.sender, address(this), amount); _approveTokenIfNeeded(_from); if (!isLP(_from)) { _swapTokenForAVAX(_from, amount, msg.sender); } else { IJoePair pair = IJoePair(_from); address token0 = pair.token0(); address token1 = pair.token1(); if (token0 == WAVAX || token1 == WAVAX) { ROUTER.removeLiquidityAVAX( token0 != WAVAX ? token0 : token1, amount, 0, 0, msg.sender, block.timestamp ); } else { ROUTER.removeLiquidity(token0, token1, amount, 0, 0, msg.sender, block.timestamp); } } } /* ========== Private Functions ========== */ function _approveTokenIfNeeded(address token) private { if (IERC20(token).allowance(address(this), address(ROUTER)) == 0) { IERC20(token).safeApprove(address(ROUTER), uint256(~0)); } } function _swapAVAXToLP( address lp, uint256 amount, address receiver ) private { if (!isLP(lp)) { _swapAVAXForToken(lp, amount, receiver); } else { // lp IJoePair pair = IJoePair(lp); address token0 = pair.token0(); address token1 = pair.token1(); if (token0 == WAVAX || token1 == WAVAX) { address token = token0 == WAVAX ? token1 : token0; uint256 swapValue = amount.div(2); uint256 tokenAmount = _swapAVAXForToken(token, swapValue, address(this)); _approveTokenIfNeeded(token); ROUTER.addLiquidityAVAX{value: amount.sub(swapValue)}( token, tokenAmount, 0, 0, receiver, block.timestamp ); } else { uint256 swapValue = amount.div(2); uint256 token0Amount = _swapAVAXForToken(token0, swapValue, address(this)); uint256 token1Amount = _swapAVAXForToken(token1, amount.sub(swapValue), address(this)); _approveTokenIfNeeded(token0); _approveTokenIfNeeded(token1); ROUTER.addLiquidity(token0, token1, token0Amount, token1Amount, 0, 0, receiver, block.timestamp); } } } function _swapAVAXForToken( address token, uint256 value, address receiver ) private returns (uint256) { address[] memory path; if (routePairAddresses[token] != address(0)) { path = new address[](3); path[0] = WAVAX; path[1] = routePairAddresses[token]; path[2] = token; } else { path = new address[](2); path[0] = WAVAX; path[1] = token; } uint256[] memory amounts = ROUTER.swapExactAVAXForTokens{value: value}(0, path, receiver, block.timestamp); return amounts[amounts.length - 1]; } function _swapTokenForAVAX( address token, uint256 amount, address receiver ) private returns (uint256) { address[] memory path; if (routePairAddresses[token] != address(0)) { path = new address[](3); path[0] = token; path[1] = routePairAddresses[token]; path[2] = WAVAX; } else { path = new address[](2); path[0] = token; path[1] = WAVAX; } uint256[] memory amounts = ROUTER.swapExactTokensForAVAX(amount, 0, path, receiver, block.timestamp); return amounts[amounts.length - 1]; } function _swap( address _from, uint256 amount, address _to, address receiver ) private returns (uint256) { address intermediate = routePairAddresses[_from]; if (intermediate == address(0)) { intermediate = routePairAddresses[_to]; } address[] memory path; if (intermediate != address(0) && (_from == WAVAX || _to == WAVAX)) { // [WAVAX, BUSD, VAI] or [VAI, BUSD, WAVAX] path = new address[](3); path[0] = _from; path[1] = intermediate; path[2] = _to; } else if (intermediate != address(0) && (_from == intermediate || _to == intermediate)) { // [VAI, BUSD] or [BUSD, VAI] path = new address[](2); path[0] = _from; path[1] = _to; } else if (intermediate != address(0) && routePairAddresses[_from] == routePairAddresses[_to]) { // [VAI, DAI] or [VAI, USDC] path = new address[](3); path[0] = _from; path[1] = intermediate; path[2] = _to; } else if ( routePairAddresses[_from] != address(0) && routePairAddresses[_to] != address(0) && routePairAddresses[_from] != routePairAddresses[_to] ) { // routePairAddresses[xToken] = xRoute // [VAI, BUSD, WAVAX, xRoute, xToken] path = new address[](5); path[0] = _from; path[1] = routePairAddresses[_from]; path[2] = WAVAX; path[3] = routePairAddresses[_to]; path[4] = _to; } else if (intermediate != address(0) && routePairAddresses[_from] != address(0)) { // [VAI, BUSD, WAVAX, BUNNY] path = new address[](4); path[0] = _from; path[1] = intermediate; path[2] = WAVAX; path[3] = _to; } else if (intermediate != address(0) && routePairAddresses[_to] != address(0)) { // [BUNNY, WAVAX, BUSD, VAI] path = new address[](4); path[0] = _from; path[1] = WAVAX; path[2] = intermediate; path[3] = _to; } else if (_from == WAVAX || _to == WAVAX) { // [WAVAX, BUNNY] or [BUNNY, WAVAX] path = new address[](2); path[0] = _from; path[1] = _to; } else { // [USDT, BUNNY] or [BUNNY, USDT] path = new address[](3); path[0] = _from; path[1] = WAVAX; path[2] = _to; } uint256[] memory amounts = ROUTER.swapExactTokensForTokens(amount, 0, path, receiver, block.timestamp); return amounts[amounts.length - 1]; } /* ========== RESTRICTED FUNCTIONS ========== */ function setRoutePairAddress(address asset, address route) external onlyOwner { routePairAddresses[asset] = route; } function setNotLP(address token) public onlyOwner { bool needPush = notLP[token] == false; notLP[token] = true; if (needPush) { tokens.push(token); } } function removeToken(uint256 i) external onlyOwner { address token = tokens[i]; notLP[token] = false; tokens[i] = tokens[tokens.length - 1]; tokens.pop(); } function sweep() external onlyOwner { for (uint256 i = 0; i < tokens.length; i++) { address token = tokens[i]; if (token == address(0)) continue; uint256 amount = IERC20(token).balanceOf(address(this)); if (amount > 0) { if (token == WAVAX) { IWAVAX(token).withdraw(amount); } else { _swapTokenForAVAX(token, amount, owner()); } } } uint256 balance = address(this).balance; if (balance > 0) { payable(owner()).transfer(balance); } } function withdraw(address token) external onlyOwner { if (token == address(0)) { payable(owner()).transfer(address(this).balance); return; } IERC20(token).transfer(owner(), IERC20(token).balanceOf(address(this))); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"DAI","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"JOE","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"USDT","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WAVAX","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_joe","type":"address"},{"internalType":"address","name":"_router","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"isLP","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"i","type":"uint256"}],"name":"removeToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"routePair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"setNotLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"route","type":"address"}],"name":"setRoutePairAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sweep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"zapIn","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"_to","type":"address"}],"name":"zapInToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"zapOut","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405234801561001057600080fd5b50612ea8806100206000396000f3fe6080604052600436106101185760003560e01c806373b295c2116100a0578063d9139f6311610064578063d9139f6314610398578063e0bab4c4146103d1578063f2fde38b146103e6578063fe47068d14610419578063ffebad301461043f5761011f565b806373b295c2146102df5780637df0f767146102f45780638da5cb5b1461033b578063985c9d5614610350578063c54e44eb146103835761011f565b806336c5d724116100e757806336c5d724146101ec578063485cc955146102165780634f64b2be1461025157806351cff8d914610297578063715018a6146102ca5761011f565b80631c286c8a146101245780631c4009f9146101615780631eff9adb146101a457806335faa416146101d75761011f565b3661011f57005b600080fd5b34801561013057600080fd5b5061015f6004803603604081101561014757600080fd5b506001600160a01b0381358116916020013516610454565b005b34801561016d57600080fd5b5061015f6004803603606081101561018457600080fd5b506001600160a01b038135811691602081013591604090910135166104da565b3480156101b057600080fd5b5061015f600480360360208110156101c757600080fd5b50356001600160a01b0316610767565b3480156101e357600080fd5b5061015f61083e565b3480156101f857600080fd5b5061015f6004803603602081101561020f57600080fd5b5035610a43565b34801561022257600080fd5b5061015f6004803603604081101561023957600080fd5b506001600160a01b0381358116916020013516610b71565b34801561025d57600080fd5b5061027b6004803603602081101561027457600080fd5b5035610d18565b604080516001600160a01b039092168252519081900360200190f35b3480156102a357600080fd5b5061015f600480360360208110156102ba57600080fd5b50356001600160a01b0316610d3f565b3480156102d657600080fd5b5061015f610eed565b3480156102eb57600080fd5b5061027b610f8f565b34801561030057600080fd5b506103276004803603602081101561031757600080fd5b50356001600160a01b0316610fa1565b604080519115158252519081900360200190f35b34801561034757600080fd5b5061027b610fc0565b34801561035c57600080fd5b5061027b6004803603602081101561037357600080fd5b50356001600160a01b0316610fcf565b34801561038f57600080fd5b5061027b610fed565b3480156103a457600080fd5b5061015f600480360360408110156103bb57600080fd5b506001600160a01b038135169060200135611005565b3480156103dd57600080fd5b5061027b6112dd565b3480156103f257600080fd5b5061015f6004803603602081101561040957600080fd5b50356001600160a01b03166112f5565b61015f6004803603602081101561042f57600080fd5b50356001600160a01b03166113ee565b34801561044b57600080fd5b5061027b6113f9565b61045c611408565b6033546001600160a01b039081169116146104ac576040805162461bcd60e51b81526020600482018190526024820152600080516020612dd3833981519152604482015290519081900360640190fd5b6001600160a01b03918216600090815260686020526040902080546001600160a01b03191691909216179055565b6104ef6001600160a01b03841633308561140c565b6104f883611466565b61050181610fa1565b156107545760008190506000816001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561054657600080fd5b505afa15801561055a573d6000803e3d6000fd5b505050506040513d602081101561057057600080fd5b50516040805163d21220a760e01b815290519192506000916001600160a01b0385169163d21220a7916004808301926020929190829003018186803b1580156105b857600080fd5b505afa1580156105cc573d6000803e3d6000fd5b505050506040513d60208110156105e257600080fd5b505190506001600160a01b0386811690831614806106115750806001600160a01b0316866001600160a01b0316145b15610730576000826001600160a01b0316876001600160a01b0316146106375782610639565b815b905061064481611466565b6000610651876002611505565b905060006106618983853061156c565b6066549091506001600160a01b031663e8e337008a856106818c87611dd3565b604080516001600160e01b031960e087901b1681526001600160a01b03948516600482015292909316602483015260448201526064810185905260006084820181905260a482018190523360c48301524260e483015291516101048083019360609383900390910190829087803b1580156106fb57600080fd5b505af115801561070f573d6000803e3d6000fd5b505050506040513d606081101561072557600080fd5b5061074c9350505050565b600061073d878730611e30565b905061074a858233612162565b505b505050610762565b6107608383833361156c565b505b505050565b61076f611408565b6033546001600160a01b039081169116146107bf576040805162461bcd60e51b81526020600482018190526024820152600080516020612dd3833981519152604482015290519081900360640190fd5b6001600160a01b0381166000908152606760205260409020805460ff19811660011790915560ff1615801561083a57606980546001810182556000919091527f7fb4302e8e91f9110a6554c2c0a24601252c2a42c2220ca988efcfe3999143080180546001600160a01b0319166001600160a01b0384161790555b5050565b610846611408565b6033546001600160a01b03908116911614610896576040805162461bcd60e51b81526020600482018190526024820152600080516020612dd3833981519152604482015290519081900360640190fd5b60005b6069548110156109f8576000606982815481106108b257fe5b6000918252602090912001546001600160a01b03169050806108d457506109f0565b6000816001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561092357600080fd5b505afa158015610937573d6000803e3d6000fd5b505050506040513d602081101561094d57600080fd5b5051905080156109ed576001600160a01b038216600080516020612df383398151915214156109d957816001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156109bc57600080fd5b505af11580156109d0573d6000803e3d6000fd5b505050506109ed565b6109eb82826109e6610fc0565b611e30565b505b50505b600101610899565b50478015610a4057610a08610fc0565b6001600160a01b03166108fc829081150290604051600060405180830381858888f1935050505015801561083a573d6000803e3d6000fd5b50565b610a4b611408565b6033546001600160a01b03908116911614610a9b576040805162461bcd60e51b81526020600482018190526024820152600080516020612dd3833981519152604482015290519081900360640190fd5b600060698281548110610aaa57fe5b60009182526020808320909101546001600160a01b031680835260679091526040909120805460ff1916905560698054919250906000198101908110610aec57fe5b600091825260209091200154606980546001600160a01b039092169184908110610b1257fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506069805480610b4b57fe5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b600054610100900460ff1680610b8a5750610b8a6124ae565b80610b98575060005460ff16155b610bd35760405162461bcd60e51b815260040180806020018281038252602e815260200180612da5602e913960400191505060405180910390fd5b600054610100900460ff16158015610bfe576000805460ff1961ff0019909116610100171660011790555b610c066124b4565b6000610c10610fc0565b6001600160a01b03161415610c6c576040805162461bcd60e51b815260206004820152601960248201527f5a61704554483a206f776e6572206d7573742062652073657400000000000000604482015290519081900360640190fd5b606580546001600160a01b038086166001600160a01b0319928316179092556066805492851692909116919091179055610cb3600080516020612df3833981519152610767565b610cd073de3a24028580884448a5397872046a019649b084610767565b606554610ce5906001600160a01b0316610767565b610d0273ba7deebbfc5fa1100fb055a87773e1e99cd3507a610767565b8015610762576000805461ff0019169055505050565b60698181548110610d2557fe5b6000918252602090912001546001600160a01b0316905081565b610d47611408565b6033546001600160a01b03908116911614610d97576040805162461bcd60e51b81526020600482018190526024820152600080516020612dd3833981519152604482015290519081900360640190fd5b6001600160a01b038116610deb57610dad610fc0565b6001600160a01b03166108fc479081150290604051600060405180830381858888f19350505050158015610de5573d6000803e3d6000fd5b50610a40565b806001600160a01b031663a9059cbb610e02610fc0565b604080516370a0823160e01b815230600482015290516001600160a01b038616916370a08231916024808301926020929190829003018186803b158015610e4857600080fd5b505afa158015610e5c573d6000803e3d6000fd5b505050506040513d6020811015610e7257600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b158015610ec357600080fd5b505af1158015610ed7573d6000803e3d6000fd5b505050506040513d602081101561076257600080fd5b610ef5611408565b6033546001600160a01b03908116911614610f45576040805162461bcd60e51b81526020600482018190526024820152600080516020612dd3833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b600080516020612df383398151915281565b6001600160a01b031660009081526067602052604090205460ff161590565b6033546001600160a01b031690565b6001600160a01b039081166000908152606860205260409020541690565b73de3a24028580884448a5397872046a019649b08481565b61101a6001600160a01b03831633308461140c565b61102382611466565b61102c82610fa1565b6110415761103b828233611e30565b5061083a565b60008290506000816001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561108157600080fd5b505afa158015611095573d6000803e3d6000fd5b505050506040513d60208110156110ab57600080fd5b50516040805163d21220a760e01b815290519192506000916001600160a01b0385169163d21220a7916004808301926020929190829003018186803b1580156110f357600080fd5b505afa158015611107573d6000803e3d6000fd5b505050506040513d602081101561111d57600080fd5b505190506001600160a01b038216600080516020612df3833981519152148061115c57506001600160a01b038116600080516020612df3833981519152145b15611230576066546001600160a01b03908116906333c6b725908416600080516020612df383398151915214156111935782611195565b835b604080516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201889052600060448301819052606483018190523360848401524260a4840152815160c4808501949192918390030190829087803b1580156111fe57600080fd5b505af1158015611212573d6000803e3d6000fd5b505050506040513d604081101561122857600080fd5b506112d69050565b60665460408051635d5155ef60e11b81526001600160a01b038581166004830152848116602483015260448201889052600060648301819052608483018190523360a48401524260c48401528351919094169363baa2abde9360e480850194919392918390030190829087803b1580156112a957600080fd5b505af11580156112bd573d6000803e3d6000fd5b505050506040513d60408110156112d357600080fd5b50505b5050505050565b73ba7deebbfc5fa1100fb055a87773e1e99cd3507a81565b6112fd611408565b6033546001600160a01b0390811691161461134d576040805162461bcd60e51b81526020600482018190526024820152600080516020612dd3833981519152604482015290519081900360640190fd5b6001600160a01b0381166113925760405162461bcd60e51b8152600401808060200182810382526026815260200180612d596026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b610a40813433612162565b6065546001600160a01b031681565b3390565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610760908590612565565b60665460408051636eb1769f60e11b81523060048201526001600160a01b03928316602482015290519183169163dd62ed3e91604480820192602092909190829003018186803b1580156114b957600080fd5b505afa1580156114cd573d6000803e3d6000fd5b505050506040513d60208110156114e357600080fd5b5051610a4057606654610a40906001600160a01b038381169116600019612616565b600080821161155b576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161156457fe5b049392505050565b6001600160a01b03808516600090815260686020526040812054909116806115ab57506001600160a01b03808416600090815260686020526040902054165b60606001600160a01b038216158015906115fb57506001600160a01b038716600080516020612df383398151915214806115fb57506001600160a01b038516600080516020612df3833981519152145b156116c157600360005b5060405190808252806020026020018201604052801561162f578160200160208202803683370190505b509050868160008151811061164057fe5b60200260200101906001600160a01b031690816001600160a01b031681525050818160018151811061166e57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050848160028151811061169c57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050611c1e565b6001600160a01b038216158015906117055750816001600160a01b0316876001600160a01b031614806117055750816001600160a01b0316856001600160a01b0316145b1561177857600260005b50604051908082528060200260200182016040528015611739578160200160208202803683370190505b509050868160008151811061174a57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050848160018151811061169c57fe5b6001600160a01b038216158015906117b457506001600160a01b03808616600090815260686020526040808220548a8416835291205482169116145b156117c25760036000611605565b6001600160a01b03878116600090815260686020526040902054161580159061180457506001600160a01b038581166000908152606860205260409020541615155b801561183557506001600160a01b03808616600090815260686020526040808220548a841683529120548216911614155b1561194f5760408051600580825260c08201909252906020820160a080368337019050509050868160008151811061186957fe5b6001600160a01b039283166020918202929092018101919091528882166000908152606890915260409020548251911690829060019081106118a757fe5b60200260200101906001600160a01b031690816001600160a01b031681525050600080516020612df3833981519152816002815181106118e357fe5b6001600160a01b0392831660209182029290920181019190915286821660009081526068909152604090205482519116908290600390811061192157fe5b60200260200101906001600160a01b031690816001600160a01b031681525050848160048151811061169c57fe5b6001600160a01b0382161580159061198057506001600160a01b038781166000908152606860205260409020541615155b15611a4c5760408051600480825260a08201909252906020820160808036833701905050905086816000815181106119b457fe5b60200260200101906001600160a01b031690816001600160a01b03168152505081816001815181106119e257fe5b60200260200101906001600160a01b031690816001600160a01b031681525050600080516020612df383398151915281600281518110611a1e57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050848160038151811061169c57fe5b6001600160a01b03821615801590611a7d57506001600160a01b038581166000908152606860205260409020541615155b15611b1b5760408051600480825260a0820190925290602082016080803683370190505090508681600081518110611ab157fe5b60200260200101906001600160a01b031690816001600160a01b031681525050600080516020612df383398151915281600181518110611aed57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508181600281518110611a1e57fe5b6001600160a01b038716600080516020612df38339815191521480611b5657506001600160a01b038516600080516020612df3833981519152145b15611b64576002600061170f565b6040805160038082526080820190925290602082016060803683370190505090508681600081518110611b9357fe5b60200260200101906001600160a01b031690816001600160a01b031681525050600080516020612df383398151915281600181518110611bcf57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508481600281518110611bfd57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250505b6060606660009054906101000a90046001600160a01b03166001600160a01b03166338ed17398860008589426040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015611cba578181015183820152602001611ca2565b505050509050019650505050505050600060405180830381600087803b158015611ce357600080fd5b505af1158015611cf7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015611d2057600080fd5b8101908080516040519392919084640100000000821115611d4057600080fd5b908301906020820185811115611d5557600080fd5b8251866020820283011164010000000082111715611d7257600080fd5b82525081516020918201928201910280838360005b83811015611d9f578181015183820152602001611d87565b50505050905001604052505050905080600182510381518110611dbe57fe5b60200260200101519350505050949350505050565b600082821115611e2a576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6001600160a01b0383811660009081526068602052604081205490916060911615611f23576040805160038082526080820190925290602082016060803683370190505090508481600081518110611e8457fe5b6001600160a01b03928316602091820292909201810191909152868216600090815260689091526040902054825191169082906001908110611ec257fe5b60200260200101906001600160a01b031690816001600160a01b031681525050600080516020612df383398151915281600281518110611efe57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050611fae565b60408051600280825260608201835290916020830190803683370190505090508481600081518110611f5157fe5b60200260200101906001600160a01b031690816001600160a01b031681525050600080516020612df383398151915281600181518110611f8d57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250505b6060606660009054906101000a90046001600160a01b03166001600160a01b031663676528d18660008588426040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b8381101561204a578181015183820152602001612032565b505050509050019650505050505050600060405180830381600087803b15801561207357600080fd5b505af1158015612087573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156120b057600080fd5b81019080805160405193929190846401000000008211156120d057600080fd5b9083019060208201858111156120e557600080fd5b825186602082028301116401000000008211171561210257600080fd5b82525081516020918201928201910280838360005b8381101561212f578181015183820152602001612117565b5050505090500160405250505090508060018251038151811061214e57fe5b6020026020010151925050505b9392505050565b61216b83610fa1565b6121805761217a838383612729565b50610762565b60008390506000816001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156121c057600080fd5b505afa1580156121d4573d6000803e3d6000fd5b505050506040513d60208110156121ea57600080fd5b50516040805163d21220a760e01b815290519192506000916001600160a01b0385169163d21220a7916004808301926020929190829003018186803b15801561223257600080fd5b505afa158015612246573d6000803e3d6000fd5b505050506040513d602081101561225c57600080fd5b505190506001600160a01b038216600080516020612df3833981519152148061229b57506001600160a01b038116600080516020612df3833981519152145b156123ab5760006001600160a01b038316600080516020612df3833981519152146122c657826122c8565b815b905060006122d7876002611505565b905060006122e6838330612729565b90506122f183611466565b6066546001600160a01b031663f91b3f7261230c8a85611dd3565b604080516001600160e01b031960e085901b1681526001600160a01b0380891660048301526024820187905260006044830181905260648301528c1660848201524260a4820152905160c480830192606092919082900301818588803b15801561237557600080fd5b505af1158015612389573d6000803e3d6000fd5b50505050506040513d60608110156123a057600080fd5b506124a69350505050565b60006123b8866002611505565b905060006123c7848330612729565b905060006123df846123d98a86611dd3565b30612729565b90506123ea85611466565b6123f384611466565b6066546040805162e8e33760e81b81526001600160a01b0388811660048301528781166024830152604482018690526064820185905260006084830181905260a483018190528b821660c48401524260e4840152925193169263e8e337009261010480840193606093929083900390910190829087803b15801561247657600080fd5b505af115801561248a573d6000803e3d6000fd5b505050506040513d60608110156124a057600080fd5b50505050505b505050505050565b303b1590565b600054610100900460ff16806124cd57506124cd6124ae565b806124db575060005460ff16155b6125165760405162461bcd60e51b815260040180806020018281038252602e815260200180612da5602e913960400191505060405180910390fd5b600054610100900460ff16158015612541576000805460ff1961ff0019909116610100171660011790555b6125496129a2565b612551612a42565b8015610a40576000805461ff001916905550565b60606125ba826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612b3b9092919063ffffffff16565b805190915015610762578080602001905160208110156125d957600080fd5b50516107625760405162461bcd60e51b815260040180806020018281038252602a815260200180612e13602a913960400191505060405180910390fd5b80158061269c575060408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b15801561266e57600080fd5b505afa158015612682573d6000803e3d6000fd5b505050506040513d602081101561269857600080fd5b5051155b6126d75760405162461bcd60e51b8152600401808060200182810382526036815260200180612e3d6036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052610762908490612565565b6001600160a01b038381166000908152606860205260408120549091606091161561281c57604080516003808252608082019092529060208201606080368337019050509050600080516020612df38339815191528160008151811061278b57fe5b6001600160a01b039283166020918202929092018101919091528682166000908152606890915260409020548251911690829060019081106127c957fe5b60200260200101906001600160a01b031690816001600160a01b03168152505084816002815181106127f757fe5b60200260200101906001600160a01b031690816001600160a01b0316815250506128a7565b6040805160028082526060820183529091602083019080368337019050509050600080516020612df38339815191528160008151811061285857fe5b60200260200101906001600160a01b031690816001600160a01b031681525050848160018151811061288657fe5b60200260200101906001600160a01b031690816001600160a01b0316815250505b6060606660009054906101000a90046001600160a01b03166001600160a01b031663a2a1623d8660008588426040518663ffffffff1660e01b81526004018085815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b8381101561293d578181015183820152602001612925565b50505050905001955050505050506000604051808303818588803b15801561296457600080fd5b505af1158015612978573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f1916820160405260208110156120b057600080fd5b600054610100900460ff16806129bb57506129bb6124ae565b806129c9575060005460ff16155b612a045760405162461bcd60e51b815260040180806020018281038252602e815260200180612da5602e913960400191505060405180910390fd5b600054610100900460ff16158015612551576000805460ff1961ff0019909116610100171660011790558015610a40576000805461ff001916905550565b600054610100900460ff1680612a5b5750612a5b6124ae565b80612a69575060005460ff16155b612aa45760405162461bcd60e51b815260040180806020018281038252602e815260200180612da5602e913960400191505060405180910390fd5b600054610100900460ff16158015612acf576000805460ff1961ff0019909116610100171660011790555b6000612ad9611408565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015610a40576000805461ff001916905550565b6060612b4a8484600085612b52565b949350505050565b606082471015612b935760405162461bcd60e51b8152600401808060200182810382526026815260200180612d7f6026913960400191505060405180910390fd5b612b9c85612cae565b612bed576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b60208310612c2c5780518252601f199092019160209182019101612c0d565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114612c8e576040519150601f19603f3d011682016040523d82523d6000602084013e612c93565b606091505b5091509150612ca3828286612cb4565b979650505050505050565b3b151590565b60608315612cc357508161215b565b825115612cd35782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612d1d578181015183820152602001612d05565b50505050905090810190601f168015612d4a5780820380516001836020036101000a031916815260200191505b509250505060405180910390fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572000000000000000000000000b31f66aa3c1e785363f0875a1b74e27b85fd66c75361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365a264697066735822122064134e92553c322c245f3afb0dbedc34bf0d9d13a1961144ac4801a79a4e2fcd64736f6c634300060c0033
Deployed Bytecode
0x6080604052600436106101185760003560e01c806373b295c2116100a0578063d9139f6311610064578063d9139f6314610398578063e0bab4c4146103d1578063f2fde38b146103e6578063fe47068d14610419578063ffebad301461043f5761011f565b806373b295c2146102df5780637df0f767146102f45780638da5cb5b1461033b578063985c9d5614610350578063c54e44eb146103835761011f565b806336c5d724116100e757806336c5d724146101ec578063485cc955146102165780634f64b2be1461025157806351cff8d914610297578063715018a6146102ca5761011f565b80631c286c8a146101245780631c4009f9146101615780631eff9adb146101a457806335faa416146101d75761011f565b3661011f57005b600080fd5b34801561013057600080fd5b5061015f6004803603604081101561014757600080fd5b506001600160a01b0381358116916020013516610454565b005b34801561016d57600080fd5b5061015f6004803603606081101561018457600080fd5b506001600160a01b038135811691602081013591604090910135166104da565b3480156101b057600080fd5b5061015f600480360360208110156101c757600080fd5b50356001600160a01b0316610767565b3480156101e357600080fd5b5061015f61083e565b3480156101f857600080fd5b5061015f6004803603602081101561020f57600080fd5b5035610a43565b34801561022257600080fd5b5061015f6004803603604081101561023957600080fd5b506001600160a01b0381358116916020013516610b71565b34801561025d57600080fd5b5061027b6004803603602081101561027457600080fd5b5035610d18565b604080516001600160a01b039092168252519081900360200190f35b3480156102a357600080fd5b5061015f600480360360208110156102ba57600080fd5b50356001600160a01b0316610d3f565b3480156102d657600080fd5b5061015f610eed565b3480156102eb57600080fd5b5061027b610f8f565b34801561030057600080fd5b506103276004803603602081101561031757600080fd5b50356001600160a01b0316610fa1565b604080519115158252519081900360200190f35b34801561034757600080fd5b5061027b610fc0565b34801561035c57600080fd5b5061027b6004803603602081101561037357600080fd5b50356001600160a01b0316610fcf565b34801561038f57600080fd5b5061027b610fed565b3480156103a457600080fd5b5061015f600480360360408110156103bb57600080fd5b506001600160a01b038135169060200135611005565b3480156103dd57600080fd5b5061027b6112dd565b3480156103f257600080fd5b5061015f6004803603602081101561040957600080fd5b50356001600160a01b03166112f5565b61015f6004803603602081101561042f57600080fd5b50356001600160a01b03166113ee565b34801561044b57600080fd5b5061027b6113f9565b61045c611408565b6033546001600160a01b039081169116146104ac576040805162461bcd60e51b81526020600482018190526024820152600080516020612dd3833981519152604482015290519081900360640190fd5b6001600160a01b03918216600090815260686020526040902080546001600160a01b03191691909216179055565b6104ef6001600160a01b03841633308561140c565b6104f883611466565b61050181610fa1565b156107545760008190506000816001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561054657600080fd5b505afa15801561055a573d6000803e3d6000fd5b505050506040513d602081101561057057600080fd5b50516040805163d21220a760e01b815290519192506000916001600160a01b0385169163d21220a7916004808301926020929190829003018186803b1580156105b857600080fd5b505afa1580156105cc573d6000803e3d6000fd5b505050506040513d60208110156105e257600080fd5b505190506001600160a01b0386811690831614806106115750806001600160a01b0316866001600160a01b0316145b15610730576000826001600160a01b0316876001600160a01b0316146106375782610639565b815b905061064481611466565b6000610651876002611505565b905060006106618983853061156c565b6066549091506001600160a01b031663e8e337008a856106818c87611dd3565b604080516001600160e01b031960e087901b1681526001600160a01b03948516600482015292909316602483015260448201526064810185905260006084820181905260a482018190523360c48301524260e483015291516101048083019360609383900390910190829087803b1580156106fb57600080fd5b505af115801561070f573d6000803e3d6000fd5b505050506040513d606081101561072557600080fd5b5061074c9350505050565b600061073d878730611e30565b905061074a858233612162565b505b505050610762565b6107608383833361156c565b505b505050565b61076f611408565b6033546001600160a01b039081169116146107bf576040805162461bcd60e51b81526020600482018190526024820152600080516020612dd3833981519152604482015290519081900360640190fd5b6001600160a01b0381166000908152606760205260409020805460ff19811660011790915560ff1615801561083a57606980546001810182556000919091527f7fb4302e8e91f9110a6554c2c0a24601252c2a42c2220ca988efcfe3999143080180546001600160a01b0319166001600160a01b0384161790555b5050565b610846611408565b6033546001600160a01b03908116911614610896576040805162461bcd60e51b81526020600482018190526024820152600080516020612dd3833981519152604482015290519081900360640190fd5b60005b6069548110156109f8576000606982815481106108b257fe5b6000918252602090912001546001600160a01b03169050806108d457506109f0565b6000816001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561092357600080fd5b505afa158015610937573d6000803e3d6000fd5b505050506040513d602081101561094d57600080fd5b5051905080156109ed576001600160a01b038216600080516020612df383398151915214156109d957816001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156109bc57600080fd5b505af11580156109d0573d6000803e3d6000fd5b505050506109ed565b6109eb82826109e6610fc0565b611e30565b505b50505b600101610899565b50478015610a4057610a08610fc0565b6001600160a01b03166108fc829081150290604051600060405180830381858888f1935050505015801561083a573d6000803e3d6000fd5b50565b610a4b611408565b6033546001600160a01b03908116911614610a9b576040805162461bcd60e51b81526020600482018190526024820152600080516020612dd3833981519152604482015290519081900360640190fd5b600060698281548110610aaa57fe5b60009182526020808320909101546001600160a01b031680835260679091526040909120805460ff1916905560698054919250906000198101908110610aec57fe5b600091825260209091200154606980546001600160a01b039092169184908110610b1257fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506069805480610b4b57fe5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b600054610100900460ff1680610b8a5750610b8a6124ae565b80610b98575060005460ff16155b610bd35760405162461bcd60e51b815260040180806020018281038252602e815260200180612da5602e913960400191505060405180910390fd5b600054610100900460ff16158015610bfe576000805460ff1961ff0019909116610100171660011790555b610c066124b4565b6000610c10610fc0565b6001600160a01b03161415610c6c576040805162461bcd60e51b815260206004820152601960248201527f5a61704554483a206f776e6572206d7573742062652073657400000000000000604482015290519081900360640190fd5b606580546001600160a01b038086166001600160a01b0319928316179092556066805492851692909116919091179055610cb3600080516020612df3833981519152610767565b610cd073de3a24028580884448a5397872046a019649b084610767565b606554610ce5906001600160a01b0316610767565b610d0273ba7deebbfc5fa1100fb055a87773e1e99cd3507a610767565b8015610762576000805461ff0019169055505050565b60698181548110610d2557fe5b6000918252602090912001546001600160a01b0316905081565b610d47611408565b6033546001600160a01b03908116911614610d97576040805162461bcd60e51b81526020600482018190526024820152600080516020612dd3833981519152604482015290519081900360640190fd5b6001600160a01b038116610deb57610dad610fc0565b6001600160a01b03166108fc479081150290604051600060405180830381858888f19350505050158015610de5573d6000803e3d6000fd5b50610a40565b806001600160a01b031663a9059cbb610e02610fc0565b604080516370a0823160e01b815230600482015290516001600160a01b038616916370a08231916024808301926020929190829003018186803b158015610e4857600080fd5b505afa158015610e5c573d6000803e3d6000fd5b505050506040513d6020811015610e7257600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b158015610ec357600080fd5b505af1158015610ed7573d6000803e3d6000fd5b505050506040513d602081101561076257600080fd5b610ef5611408565b6033546001600160a01b03908116911614610f45576040805162461bcd60e51b81526020600482018190526024820152600080516020612dd3833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b600080516020612df383398151915281565b6001600160a01b031660009081526067602052604090205460ff161590565b6033546001600160a01b031690565b6001600160a01b039081166000908152606860205260409020541690565b73de3a24028580884448a5397872046a019649b08481565b61101a6001600160a01b03831633308461140c565b61102382611466565b61102c82610fa1565b6110415761103b828233611e30565b5061083a565b60008290506000816001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561108157600080fd5b505afa158015611095573d6000803e3d6000fd5b505050506040513d60208110156110ab57600080fd5b50516040805163d21220a760e01b815290519192506000916001600160a01b0385169163d21220a7916004808301926020929190829003018186803b1580156110f357600080fd5b505afa158015611107573d6000803e3d6000fd5b505050506040513d602081101561111d57600080fd5b505190506001600160a01b038216600080516020612df3833981519152148061115c57506001600160a01b038116600080516020612df3833981519152145b15611230576066546001600160a01b03908116906333c6b725908416600080516020612df383398151915214156111935782611195565b835b604080516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201889052600060448301819052606483018190523360848401524260a4840152815160c4808501949192918390030190829087803b1580156111fe57600080fd5b505af1158015611212573d6000803e3d6000fd5b505050506040513d604081101561122857600080fd5b506112d69050565b60665460408051635d5155ef60e11b81526001600160a01b038581166004830152848116602483015260448201889052600060648301819052608483018190523360a48401524260c48401528351919094169363baa2abde9360e480850194919392918390030190829087803b1580156112a957600080fd5b505af11580156112bd573d6000803e3d6000fd5b505050506040513d60408110156112d357600080fd5b50505b5050505050565b73ba7deebbfc5fa1100fb055a87773e1e99cd3507a81565b6112fd611408565b6033546001600160a01b0390811691161461134d576040805162461bcd60e51b81526020600482018190526024820152600080516020612dd3833981519152604482015290519081900360640190fd5b6001600160a01b0381166113925760405162461bcd60e51b8152600401808060200182810382526026815260200180612d596026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b610a40813433612162565b6065546001600160a01b031681565b3390565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610760908590612565565b60665460408051636eb1769f60e11b81523060048201526001600160a01b03928316602482015290519183169163dd62ed3e91604480820192602092909190829003018186803b1580156114b957600080fd5b505afa1580156114cd573d6000803e3d6000fd5b505050506040513d60208110156114e357600080fd5b5051610a4057606654610a40906001600160a01b038381169116600019612616565b600080821161155b576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161156457fe5b049392505050565b6001600160a01b03808516600090815260686020526040812054909116806115ab57506001600160a01b03808416600090815260686020526040902054165b60606001600160a01b038216158015906115fb57506001600160a01b038716600080516020612df383398151915214806115fb57506001600160a01b038516600080516020612df3833981519152145b156116c157600360005b5060405190808252806020026020018201604052801561162f578160200160208202803683370190505b509050868160008151811061164057fe5b60200260200101906001600160a01b031690816001600160a01b031681525050818160018151811061166e57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050848160028151811061169c57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050611c1e565b6001600160a01b038216158015906117055750816001600160a01b0316876001600160a01b031614806117055750816001600160a01b0316856001600160a01b0316145b1561177857600260005b50604051908082528060200260200182016040528015611739578160200160208202803683370190505b509050868160008151811061174a57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050848160018151811061169c57fe5b6001600160a01b038216158015906117b457506001600160a01b03808616600090815260686020526040808220548a8416835291205482169116145b156117c25760036000611605565b6001600160a01b03878116600090815260686020526040902054161580159061180457506001600160a01b038581166000908152606860205260409020541615155b801561183557506001600160a01b03808616600090815260686020526040808220548a841683529120548216911614155b1561194f5760408051600580825260c08201909252906020820160a080368337019050509050868160008151811061186957fe5b6001600160a01b039283166020918202929092018101919091528882166000908152606890915260409020548251911690829060019081106118a757fe5b60200260200101906001600160a01b031690816001600160a01b031681525050600080516020612df3833981519152816002815181106118e357fe5b6001600160a01b0392831660209182029290920181019190915286821660009081526068909152604090205482519116908290600390811061192157fe5b60200260200101906001600160a01b031690816001600160a01b031681525050848160048151811061169c57fe5b6001600160a01b0382161580159061198057506001600160a01b038781166000908152606860205260409020541615155b15611a4c5760408051600480825260a08201909252906020820160808036833701905050905086816000815181106119b457fe5b60200260200101906001600160a01b031690816001600160a01b03168152505081816001815181106119e257fe5b60200260200101906001600160a01b031690816001600160a01b031681525050600080516020612df383398151915281600281518110611a1e57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050848160038151811061169c57fe5b6001600160a01b03821615801590611a7d57506001600160a01b038581166000908152606860205260409020541615155b15611b1b5760408051600480825260a0820190925290602082016080803683370190505090508681600081518110611ab157fe5b60200260200101906001600160a01b031690816001600160a01b031681525050600080516020612df383398151915281600181518110611aed57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508181600281518110611a1e57fe5b6001600160a01b038716600080516020612df38339815191521480611b5657506001600160a01b038516600080516020612df3833981519152145b15611b64576002600061170f565b6040805160038082526080820190925290602082016060803683370190505090508681600081518110611b9357fe5b60200260200101906001600160a01b031690816001600160a01b031681525050600080516020612df383398151915281600181518110611bcf57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508481600281518110611bfd57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250505b6060606660009054906101000a90046001600160a01b03166001600160a01b03166338ed17398860008589426040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015611cba578181015183820152602001611ca2565b505050509050019650505050505050600060405180830381600087803b158015611ce357600080fd5b505af1158015611cf7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015611d2057600080fd5b8101908080516040519392919084640100000000821115611d4057600080fd5b908301906020820185811115611d5557600080fd5b8251866020820283011164010000000082111715611d7257600080fd5b82525081516020918201928201910280838360005b83811015611d9f578181015183820152602001611d87565b50505050905001604052505050905080600182510381518110611dbe57fe5b60200260200101519350505050949350505050565b600082821115611e2a576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6001600160a01b0383811660009081526068602052604081205490916060911615611f23576040805160038082526080820190925290602082016060803683370190505090508481600081518110611e8457fe5b6001600160a01b03928316602091820292909201810191909152868216600090815260689091526040902054825191169082906001908110611ec257fe5b60200260200101906001600160a01b031690816001600160a01b031681525050600080516020612df383398151915281600281518110611efe57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050611fae565b60408051600280825260608201835290916020830190803683370190505090508481600081518110611f5157fe5b60200260200101906001600160a01b031690816001600160a01b031681525050600080516020612df383398151915281600181518110611f8d57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250505b6060606660009054906101000a90046001600160a01b03166001600160a01b031663676528d18660008588426040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b8381101561204a578181015183820152602001612032565b505050509050019650505050505050600060405180830381600087803b15801561207357600080fd5b505af1158015612087573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156120b057600080fd5b81019080805160405193929190846401000000008211156120d057600080fd5b9083019060208201858111156120e557600080fd5b825186602082028301116401000000008211171561210257600080fd5b82525081516020918201928201910280838360005b8381101561212f578181015183820152602001612117565b5050505090500160405250505090508060018251038151811061214e57fe5b6020026020010151925050505b9392505050565b61216b83610fa1565b6121805761217a838383612729565b50610762565b60008390506000816001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156121c057600080fd5b505afa1580156121d4573d6000803e3d6000fd5b505050506040513d60208110156121ea57600080fd5b50516040805163d21220a760e01b815290519192506000916001600160a01b0385169163d21220a7916004808301926020929190829003018186803b15801561223257600080fd5b505afa158015612246573d6000803e3d6000fd5b505050506040513d602081101561225c57600080fd5b505190506001600160a01b038216600080516020612df3833981519152148061229b57506001600160a01b038116600080516020612df3833981519152145b156123ab5760006001600160a01b038316600080516020612df3833981519152146122c657826122c8565b815b905060006122d7876002611505565b905060006122e6838330612729565b90506122f183611466565b6066546001600160a01b031663f91b3f7261230c8a85611dd3565b604080516001600160e01b031960e085901b1681526001600160a01b0380891660048301526024820187905260006044830181905260648301528c1660848201524260a4820152905160c480830192606092919082900301818588803b15801561237557600080fd5b505af1158015612389573d6000803e3d6000fd5b50505050506040513d60608110156123a057600080fd5b506124a69350505050565b60006123b8866002611505565b905060006123c7848330612729565b905060006123df846123d98a86611dd3565b30612729565b90506123ea85611466565b6123f384611466565b6066546040805162e8e33760e81b81526001600160a01b0388811660048301528781166024830152604482018690526064820185905260006084830181905260a483018190528b821660c48401524260e4840152925193169263e8e337009261010480840193606093929083900390910190829087803b15801561247657600080fd5b505af115801561248a573d6000803e3d6000fd5b505050506040513d60608110156124a057600080fd5b50505050505b505050505050565b303b1590565b600054610100900460ff16806124cd57506124cd6124ae565b806124db575060005460ff16155b6125165760405162461bcd60e51b815260040180806020018281038252602e815260200180612da5602e913960400191505060405180910390fd5b600054610100900460ff16158015612541576000805460ff1961ff0019909116610100171660011790555b6125496129a2565b612551612a42565b8015610a40576000805461ff001916905550565b60606125ba826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612b3b9092919063ffffffff16565b805190915015610762578080602001905160208110156125d957600080fd5b50516107625760405162461bcd60e51b815260040180806020018281038252602a815260200180612e13602a913960400191505060405180910390fd5b80158061269c575060408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b15801561266e57600080fd5b505afa158015612682573d6000803e3d6000fd5b505050506040513d602081101561269857600080fd5b5051155b6126d75760405162461bcd60e51b8152600401808060200182810382526036815260200180612e3d6036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052610762908490612565565b6001600160a01b038381166000908152606860205260408120549091606091161561281c57604080516003808252608082019092529060208201606080368337019050509050600080516020612df38339815191528160008151811061278b57fe5b6001600160a01b039283166020918202929092018101919091528682166000908152606890915260409020548251911690829060019081106127c957fe5b60200260200101906001600160a01b031690816001600160a01b03168152505084816002815181106127f757fe5b60200260200101906001600160a01b031690816001600160a01b0316815250506128a7565b6040805160028082526060820183529091602083019080368337019050509050600080516020612df38339815191528160008151811061285857fe5b60200260200101906001600160a01b031690816001600160a01b031681525050848160018151811061288657fe5b60200260200101906001600160a01b031690816001600160a01b0316815250505b6060606660009054906101000a90046001600160a01b03166001600160a01b031663a2a1623d8660008588426040518663ffffffff1660e01b81526004018085815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b8381101561293d578181015183820152602001612925565b50505050905001955050505050506000604051808303818588803b15801561296457600080fd5b505af1158015612978573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f1916820160405260208110156120b057600080fd5b600054610100900460ff16806129bb57506129bb6124ae565b806129c9575060005460ff16155b612a045760405162461bcd60e51b815260040180806020018281038252602e815260200180612da5602e913960400191505060405180910390fd5b600054610100900460ff16158015612551576000805460ff1961ff0019909116610100171660011790558015610a40576000805461ff001916905550565b600054610100900460ff1680612a5b5750612a5b6124ae565b80612a69575060005460ff16155b612aa45760405162461bcd60e51b815260040180806020018281038252602e815260200180612da5602e913960400191505060405180910390fd5b600054610100900460ff16158015612acf576000805460ff1961ff0019909116610100171660011790555b6000612ad9611408565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015610a40576000805461ff001916905550565b6060612b4a8484600085612b52565b949350505050565b606082471015612b935760405162461bcd60e51b8152600401808060200182810382526026815260200180612d7f6026913960400191505060405180910390fd5b612b9c85612cae565b612bed576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b60208310612c2c5780518252601f199092019160209182019101612c0d565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114612c8e576040519150601f19603f3d011682016040523d82523d6000602084013e612c93565b606091505b5091509150612ca3828286612cb4565b979650505050505050565b3b151590565b60608315612cc357508161215b565b825115612cd35782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612d1d578181015183820152602001612d05565b50505050905090810190601f168015612d4a5780820380516001836020036101000a031916815260200191505b509250505060405180910390fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572000000000000000000000000b31f66aa3c1e785363f0875a1b74e27b85fd66c75361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365a264697066735822122064134e92553c322c245f3afb0dbedc34bf0d9d13a1961144ac4801a79a4e2fcd64736f6c634300060c0033
Deployed Bytecode Sourcemap
37946:11284:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47733:130;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;47733:130:0;;;;;;;;;;:::i;:::-;;39378:1326;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;39378:1326:0;;;;;;;;;;;;;;;;;:::i;47871:205::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47871:205:0;-1:-1:-1;;;;;47871:205:0;;:::i;48289:655::-;;;;;;;;;;;;;:::i;48084:197::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48084:197:0;;:::i;38649:340::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;38649:340:0;;;;;;;;;;:::i;38570:23::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38570:23:0;;:::i;:::-;;;;-1:-1:-1;;;;;38570:23:0;;;;;;;;;;;;;;48952:275;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48952:275:0;-1:-1:-1;;;;;48952:275:0;;:::i;28133:148::-;;;;;;;;;;;;;:::i;38294:74::-;;;;;;;;;;;;;:::i;39084:101::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39084:101:0;-1:-1:-1;;;;;39084:101:0;;:::i;:::-;;;;;;;;;;;;;;;;;;27491:79;;;;;;;;;;;;;:::i;39193:123::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39193:123:0;-1:-1:-1;;;;;39193:123:0;;:::i;38135:73::-;;;;;;;;;;;;;:::i;40825:894::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;40825:894:0;;;;;;;;:::i;38215:72::-;;;;;;;;;;;;;:::i;28436:244::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28436:244:0;-1:-1:-1;;;;;28436:244:0;;:::i;40712:105::-;;;;;;;;;;;;;;;;-1:-1:-1;40712:105:0;-1:-1:-1;;;;;40712:105:0;;:::i;38110:18::-;;;;;;;;;;;;;:::i;47733:130::-;27713:12;:10;:12::i;:::-;27703:6;;-1:-1:-1;;;;;27703:6:0;;;:22;;;27695:67;;;;;-1:-1:-1;;;27695:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;27695:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;47822:25:0;;::::1;;::::0;;;:18:::1;:25;::::0;;;;:33;;-1:-1:-1;;;;;;47822:33:0::1;::::0;;;::::1;;::::0;;47733:130::o;39378:1326::-;39496:65;-1:-1:-1;;;;;39496:30:0;;39527:10;39547:4;39554:6;39496:30;:65::i;:::-;39572:28;39594:5;39572:21;:28::i;:::-;39617:9;39622:3;39617:4;:9::i;:::-;39613:1084;;;39643:13;39668:3;39643:29;;39687:14;39704:4;-1:-1:-1;;;;;39704:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39704:13:0;39749;;;-1:-1:-1;;;39749:13:0;;;;39704;;-1:-1:-1;39732:14:0;;-1:-1:-1;;;;;39749:11:0;;;;;:13;;;;;39704;;39749;;;;;;;:11;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39749:13:0;;-1:-1:-1;;;;;;39781:15:0;;;;;;;;:34;;;39809:6;-1:-1:-1;;;;;39800:15:0;:5;-1:-1:-1;;;;;39800:15:0;;39781:34;39777:839;;;39883:13;39908:6;-1:-1:-1;;;;;39899:15:0;:5;-1:-1:-1;;;;;39899:15:0;;:33;;39926:6;39899:33;;;39917:6;39899:33;39883:49;;39951:28;39973:5;39951:21;:28::i;:::-;39998:18;40019:13;:6;40030:1;40019:10;:13::i;:::-;39998:34;;40051:19;40073:46;40079:5;40086:10;40098:5;40113:4;40073:5;:46::i;:::-;40138:6;;40051:68;;-1:-1:-1;;;;;;40138:6:0;:19;40180:5;40208;40236:22;:6;40247:10;40236;:22::i;:::-;40138:292;;;-1:-1:-1;;;;;;40138:292:0;;;;;;;-1:-1:-1;;;;;40138:292:0;;;;;;;;;;;;;;;;;;;;;;;;;40315:1;40138:292;;;;;;;;;;;;40363:10;40138:292;;;;40396:15;40138:292;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39777:839:0;;-1:-1:-1;;;;39777:839:0;;40471:18;40492:47;40510:5;40517:6;40533:4;40492:17;:47::i;:::-;40471:68;;40558:42;40572:3;40577:10;40589;40558:13;:42::i;:::-;39777:839;;39613:1084;;;;;;40648:37;40654:5;40661:6;40669:3;40674:10;40648:5;:37::i;:::-;;39613:1084;39378:1326;;;:::o;47871:205::-;27713:12;:10;:12::i;:::-;27703:6;;-1:-1:-1;;;;;27703:6:0;;;:22;;;27695:67;;;;;-1:-1:-1;;;27695:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;27695:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;47948:12:0;::::1;47932:13;47948:12:::0;;;:5:::1;:12;::::0;;;;;;-1:-1:-1;;47980:19:0;::::1;47948:12:::0;47980:19:::1;::::0;;;47948:12:::1;;:21;::::0;::::1;48010:59;;48039:6;:18:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;48039:18:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;48039:18:0::1;-1:-1:-1::0;;;;;48039:18:0;::::1;;::::0;;48010:59:::1;27773:1;47871:205:::0;:::o;48289:655::-;27713:12;:10;:12::i;:::-;27703:6;;-1:-1:-1;;;;;27703:6:0;;;:22;;;27695:67;;;;;-1:-1:-1;;;27695:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;27695:67:0;;;;;;;;;;;;;;;48341:9:::1;48336:461;48360:6;:13:::0;48356:17;::::1;48336:461;;;48395:13;48411:6;48418:1;48411:9;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;48411:9:0::1;::::0;-1:-1:-1;48439:19:0;48435:33:::1;;48460:8;;;48435:33;48483:14;48507:5;-1:-1:-1::0;;;;;48500:23:0::1;;48532:4;48500:38;;;;;;;;;;;;;-1:-1:-1::0;;;;;48500:38:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;48500:38:0;;-1:-1:-1;48557:10:0;;48553:233:::1;;-1:-1:-1::0;;;;;48592:14:0;::::1;-1:-1:-1::0;;;;;;;;;;;48592:14:0::1;48588:183;;;48638:5;-1:-1:-1::0;;;;;48631:22:0::1;;48654:6;48631:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;48588:183;;;48710:41;48728:5;48735:6;48743:7;:5;:7::i;:::-;48710:17;:41::i;:::-;;48588:183;48336:461;;;48375:3;;48336:461;;;-1:-1:-1::0;48827:21:0::1;48863:11:::0;;48859:78:::1;;48899:7;:5;:7::i;:::-;-1:-1:-1::0;;;;;48891:25:0::1;:34;48917:7;48891:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;48859:78;27773:1;48289:655::o:0;48084:197::-;27713:12;:10;:12::i;:::-;27703:6;;-1:-1:-1;;;;;27703:6:0;;;:22;;;27695:67;;;;;-1:-1:-1;;;27695:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;27695:67:0;;;;;;;;;;;;;;;48146:13:::1;48162:6;48169:1;48162:9;;;;;;;;;::::0;;;::::1;::::0;;;;;::::1;::::0;-1:-1:-1;;;;;48162:9:0::1;48182:12:::0;;;:5:::1;:12:::0;;;;;;;:20;;-1:-1:-1;;48182:20:0::1;::::0;;48225:6:::1;48232:13:::0;;48162:9;;-1:-1:-1;48225:6:0;-1:-1:-1;;48232:17:0;;;48225:25;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;48213:6:::1;:9:::0;;-1:-1:-1;;;;;48225:25:0;;::::1;::::0;48220:1;;48213:9;::::1;;;;;;;;;;;;;:37;;;;;-1:-1:-1::0;;;;;48213:37:0::1;;;;;-1:-1:-1::0;;;;;48213:37:0::1;;;;;;48261:6;:12;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;48261:12:0;;;;;-1:-1:-1;;;;;;48261:12:0::1;::::0;;;;;-1:-1:-1;;48084:197:0:o;38649:340::-;23779:13;;;;;;;;:33;;;23796:16;:14;:16::i;:::-;23779:50;;;-1:-1:-1;23817:12:0;;;;23816:13;23779:50;23771:109;;;;-1:-1:-1;;;23771:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23893:19;23916:13;;;;;;23915:14;23940:101;;;;23975:13;:20;;-1:-1:-1;;;;23975:20:0;;;;;24010:19;23991:4;24010:19;;;23940:101;38732:16:::1;:14;:16::i;:::-;38786:1;38767:7;:5;:7::i;:::-;-1:-1:-1::0;;;;;38767:21:0::1;;;38759:59;;;::::0;;-1:-1:-1;;;38759:59:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;38831:3;:10:::0;;-1:-1:-1;;;;;38831:10:0;;::::1;-1:-1:-1::0;;;;;;38831:10:0;;::::1;;::::0;;;38852:6:::1;:30:::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;38893:15:::1;-1:-1:-1::0;;;;;;;;;;;38893:8:0::1;:15::i;:::-;38919:14;38166:42;38919:8;:14::i;:::-;38953:3;::::0;38944:13:::1;::::0;-1:-1:-1;;;;;38953:3:0::1;38944:8;:13::i;:::-;38968;38245:42;38968:8;:13::i;:::-;24071:14:::0;24067:68;;;24118:5;24102:21;;-1:-1:-1;;24102:21:0;;;38649:340;;;:::o;38570:23::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38570:23:0;;-1:-1:-1;38570:23:0;:::o;48952:275::-;27713:12;:10;:12::i;:::-;27703:6;;-1:-1:-1;;;;;27703:6:0;;;:22;;;27695:67;;;;;-1:-1:-1;;;27695:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;27695:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;49019:19:0;::::1;49015:121;;49063:7;:5;:7::i;:::-;-1:-1:-1::0;;;;;49055:25:0::1;:48;49081:21;49055:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;49118:7;;49015:121;49155:5;-1:-1:-1::0;;;;;49148:22:0::1;;49171:7;:5;:7::i;:::-;49180:38;::::0;;-1:-1:-1;;;49180:38:0;;49212:4:::1;49180:38;::::0;::::1;::::0;;;-1:-1:-1;;;;;49180:23:0;::::1;::::0;::::1;::::0;:38;;;;;::::1;::::0;;;;;;;;:23;:38;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;49180:38:0;49148:71:::1;::::0;;-1:-1:-1;;;;;;49148:71:0::1;::::0;;;;;;-1:-1:-1;;;;;49148:71:0;;::::1;;::::0;::::1;::::0;;;;;;;;;;;;;;49180:38:::1;::::0;49148:71;;;;;;;-1:-1:-1;49148:71:0;;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;28133:148:::0;27713:12;:10;:12::i;:::-;27703:6;;-1:-1:-1;;;;;27703:6:0;;;:22;;;27695:67;;;;;-1:-1:-1;;;27695:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;27695:67:0;;;;;;;;;;;;;;;28224:6:::1;::::0;28203:40:::1;::::0;28240:1:::1;::::0;-1:-1:-1;;;;;28224:6:0::1;::::0;28203:40:::1;::::0;28240:1;;28203:40:::1;28254:6;:19:::0;;-1:-1:-1;;;;;;28254:19:0::1;::::0;;28133:148::o;38294:74::-;-1:-1:-1;;;;;;;;;;;38294:74:0;:::o;39084:101::-;-1:-1:-1;;;;;39162:15:0;39137:4;39162:15;;;:5;:15;;;;;;;;39161:16;;39084:101::o;27491:79::-;27556:6;;-1:-1:-1;;;;;27556:6:0;27491:79;:::o;39193:123::-;-1:-1:-1;;;;;39280:28:0;;;39253:7;39280:28;;;:18;:28;;;;;;;;39193:123::o;38135:73::-;38166:42;38135:73;:::o;40825:894::-;40892:65;-1:-1:-1;;;;;40892:30:0;;40923:10;40943:4;40950:6;40892:30;:65::i;:::-;40968:28;40990:5;40968:21;:28::i;:::-;41014:11;41019:5;41014:4;:11::i;:::-;41009:703;;41042:44;41060:5;41067:6;41075:10;41042:17;:44::i;:::-;;41009:703;;;41119:13;41144:5;41119:31;;41165:14;41182:4;-1:-1:-1;;;;;41182:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41182:13:0;41227;;;-1:-1:-1;;;41227:13:0;;;;41182;;-1:-1:-1;41210:14:0;;-1:-1:-1;;;;;41227:11:0;;;;;:13;;;;;41182;;41227;;;;;;;:11;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41227:13:0;;-1:-1:-1;;;;;;41259:15:0;;-1:-1:-1;;;;;;;;;;;41259:15:0;;:34;;-1:-1:-1;;;;;;41278:15:0;;-1:-1:-1;;;;;;;;;;;41278:15:0;41259:34;41255:446;;;41314:6;;-1:-1:-1;;;;;41314:6:0;;;;:26;;41363:15;;-1:-1:-1;;;;;;;;;;;41363:15:0;;:33;;41390:6;41363:33;;;41381:6;41363:33;41314:249;;;-1:-1:-1;;;;;;41314:249:0;;;;;;;-1:-1:-1;;;;;41314:249:0;;;;;;;;;;;;;41448:1;41314:249;;;;;;;;;;;;41496:10;41314:249;;;;41529:15;41314:249;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41255:446:0;;-1:-1:-1;41255:446:0;;41604:6;;:81;;;-1:-1:-1;;;41604:81:0;;-1:-1:-1;;;;;41604:81:0;;;;;;;;;;;;;;;;;;;;:6;:81;;;;;;;;;;;;41657:10;41604:81;;;;41669:15;41604:81;;;;;;:6;;;;;:22;;:81;;;;;;;;;;;;;;;;:6;:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;41255:446:0;41009:703;;;40825:894;;:::o;38215:72::-;38245:42;38215:72;:::o;28436:244::-;27713:12;:10;:12::i;:::-;27703:6;;-1:-1:-1;;;;;27703:6:0;;;:22;;;27695:67;;;;;-1:-1:-1;;;27695:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;27695:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;28525:22:0;::::1;28517:73;;;;-1:-1:-1::0;;;28517:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28627:6;::::0;28606:38:::1;::::0;-1:-1:-1;;;;;28606:38:0;;::::1;::::0;28627:6:::1;::::0;28606:38:::1;::::0;28627:6:::1;::::0;28606:38:::1;28655:6;:17:::0;;-1:-1:-1;;;;;;28655:17:0::1;-1:-1:-1::0;;;;;28655:17:0;;;::::1;::::0;;;::::1;::::0;;28436:244::o;40712:105::-;40768:41;40782:3;40787:9;40798:10;40768:13;:41::i;38110:18::-;;;-1:-1:-1;;;;;38110:18:0;;:::o;25732:106::-;25820:10;25732:106;:::o;19314:205::-;19442:68;;;-1:-1:-1;;;;;19442:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19442:68:0;-1:-1:-1;;;19442:68:0;;;19415:96;;19435:5;;19415:19;:96::i;41780:220::-;41896:6;;41849:55;;;-1:-1:-1;;;41849:55:0;;41881:4;41849:55;;;;-1:-1:-1;;;;;41896:6:0;;;41849:55;;;;;;:23;;;;;;:55;;;;;;;;;;;;;;;:23;:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41849:55:0;41845:148;;41960:6;;41926:55;;-1:-1:-1;;;;;41926:25:0;;;;41960:6;-1:-1:-1;;41926:25:0;:55::i;4441:153::-;4499:7;4531:1;4527;:5;4519:44;;;;;-1:-1:-1;;;4519:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;4585:1;4581;:5;;;;;;;4441:153;-1:-1:-1;;;4441:153:0:o;44834:2835::-;-1:-1:-1;;;;;45014:25:0;;;44971:7;45014:25;;;:18;:25;;;;;;44971:7;;45014:25;45054:26;45050:97;;-1:-1:-1;;;;;;45112:23:0;;;;;;;:18;:23;;;;;;;45050:97;45159:21;-1:-1:-1;;;;;45195:26:0;;;;;;:62;;-1:-1:-1;;;;;;45226:14:0;;-1:-1:-1;;;;;;;;;;;45226:14:0;;:30;;-1:-1:-1;;;;;;45244:12:0;;-1:-1:-1;;;;;;;;;;;45244:12:0;45226:30;45191:2311;;;45352:1;45338:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45338:16:0;;45331:23;;45379:5;45369:4;45374:1;45369:7;;;;;;;;;;;;;:15;-1:-1:-1;;;;;45369:15:0;;;-1:-1:-1;;;;;45369:15:0;;;;;45409:12;45399:4;45404:1;45399:7;;;;;;;;;;;;;:22;-1:-1:-1;;;;;45399:22:0;;;-1:-1:-1;;;;;45399:22:0;;;;;45446:3;45436:4;45441:1;45436:7;;;;;;;;;;;;;:13;-1:-1:-1;;;;;45436:13:0;;;-1:-1:-1;;;;;45436:13:0;;;;;45191:2311;;;-1:-1:-1;;;;;45471:26:0;;;;;;:76;;;45511:12;-1:-1:-1;;;;;45502:21:0;:5;-1:-1:-1;;;;;45502:21:0;;:44;;;;45534:12;-1:-1:-1;;;;;45527:19:0;:3;-1:-1:-1;;;;;45527:19:0;;45502:44;45467:2035;;;45628:1;45614:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45614:16:0;;45607:23;;45655:5;45645:4;45650:1;45645:7;;;;;;;;;;;;;:15;-1:-1:-1;;;;;45645:15:0;;;-1:-1:-1;;;;;45645:15:0;;;;;45685:3;45675:4;45680:1;45675:7;;;;;;;45467:2035;-1:-1:-1;;;;;45710:26:0;;;;;;:82;;-1:-1:-1;;;;;;45769:23:0;;;;;;;:18;:23;;;;;;;45740:25;;;;;;;;;;45769:23;;45740:52;45710:82;45706:1796;;;45872:1;45858:16;;;45706:1796;-1:-1:-1;;;;;46005:25:0;;;46042:1;46005:25;;;:18;:25;;;;;;;:39;;;;:93;;-1:-1:-1;;;;;;46061:23:0;;;46096:1;46061:23;;;:18;:23;;;;;;;:37;;46005:93;:162;;;;-1:-1:-1;;;;;;46144:23:0;;;;;;;:18;:23;;;;;;;46115:25;;;;;;;;;;46144:23;;46115:52;;46005:162;45987:1515;;;46304:16;;;46318:1;46304:16;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46304:16:0;46297:23;;46345:5;46335:4;46340:1;46335:7;;;;;;;;-1:-1:-1;;;;;46335:15:0;;;:7;;;;;;;;;;:15;;;;46375:25;;;;;;;:18;:25;;;;;;;46365:7;;46375:25;;;46365:4;;46375:25;;46365:7;;;;;;;;;;;:35;-1:-1:-1;;;;;46365:35:0;;;-1:-1:-1;;;;;46365:35:0;;;;;-1:-1:-1;;;;;;;;;;;46415:4:0;46420:1;46415:7;;;;;;;;-1:-1:-1;;;;;46415:15:0;;;:7;;;;;;;;;;:15;;;;46455:23;;;;;;;:18;:23;;;;;;;46445:7;;46455:23;;;46445:4;;46450:1;;46445:7;;;;;;;;;;;:33;-1:-1:-1;;;;;46445:33:0;;;-1:-1:-1;;;;;46445:33:0;;;;;46503:3;46493:4;46498:1;46493:7;;;;;;;45987:1515;-1:-1:-1;;;;;46528:26:0;;;;;;:69;;-1:-1:-1;;;;;;46558:25:0;;;46595:1;46558:25;;;:18;:25;;;;;;;:39;;46528:69;46524:978;;;46663:16;;;46677:1;46663:16;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46663:16:0;46656:23;;46704:5;46694:4;46699:1;46694:7;;;;;;;;;;;;;:15;-1:-1:-1;;;;;46694:15:0;;;-1:-1:-1;;;;;46694:15:0;;;;;46734:12;46724:4;46729:1;46724:7;;;;;;;;;;;;;:22;-1:-1:-1;;;;;46724:22:0;;;-1:-1:-1;;;;;46724:22:0;;;;;-1:-1:-1;;;;;;;;;;;46761:4:0;46766:1;46761:7;;;;;;;;;;;;;:15;-1:-1:-1;;;;;46761:15:0;;;-1:-1:-1;;;;;46761:15:0;;;;;46801:3;46791:4;46796:1;46791:7;;;;;;;46524:978;-1:-1:-1;;;;;46826:26:0;;;;;;:67;;-1:-1:-1;;;;;;46856:23:0;;;46891:1;46856:23;;;:18;:23;;;;;;;:37;;46826:67;46822:680;;;46959:16;;;46973:1;46959:16;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46959:16:0;46952:23;;47000:5;46990:4;46995:1;46990:7;;;;;;;;;;;;;:15;-1:-1:-1;;;;;46990:15:0;;;-1:-1:-1;;;;;46990:15:0;;;;;-1:-1:-1;;;;;;;;;;;47020:4:0;47025:1;47020:7;;;;;;;;;;;;;:15;-1:-1:-1;;;;;47020:15:0;;;-1:-1:-1;;;;;47020:15:0;;;;;47060:12;47050:4;47055:1;47050:7;;;;;;;46822:680;-1:-1:-1;;;;;47122:14:0;;-1:-1:-1;;;;;;;;;;;47122:14:0;;:30;;-1:-1:-1;;;;;;47140:12:0;;-1:-1:-1;;;;;;;;;;;47140:12:0;47122:30;47118:384;;;47239:1;47225:16;;;47118:384;47386:16;;;47400:1;47386:16;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47386:16:0;47379:23;;47427:5;47417:4;47422:1;47417:7;;;;;;;;;;;;;:15;-1:-1:-1;;;;;47417:15:0;;;-1:-1:-1;;;;;47417:15:0;;;;;-1:-1:-1;;;;;;;;;;;47447:4:0;47452:1;47447:7;;;;;;;;;;;;;:15;-1:-1:-1;;;;;47447:15:0;;;-1:-1:-1;;;;;47447:15:0;;;;;47487:3;47477:4;47482:1;47477:7;;;;;;;;;;;;;:13;-1:-1:-1;;;;;47477:13:0;;;-1:-1:-1;;;;;47477:13:0;;;;;47118:384;47514:24;47541:6;;;;;;;;;-1:-1:-1;;;;;47541:6:0;-1:-1:-1;;;;;47541:31:0;;47573:6;47581:1;47584:4;47590:8;47600:15;47541:75;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;47541:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;47541:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47541:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47514:102;;47634:7;47659:1;47642:7;:14;:18;47634:27;;;;;;;;;;;;;;47627:34;;;;;44834:2835;;;;;;:::o;3326:158::-;3384:7;3417:1;3412;:6;;3404:49;;;;;-1:-1:-1;;;3404:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3471:5:0;;;3326:158::o;44161:665::-;-1:-1:-1;;;;;44344:25:0;;;44288:7;44344:25;;;:18;:25;;;;;;44288:7;;44308:21;;44344:25;:39;44340:321;;44407:16;;;44421:1;44407:16;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44407:16:0;44400:23;;44448:5;44438:4;44443:1;44438:7;;;;;;;;-1:-1:-1;;;;;44438:15:0;;;:7;;;;;;;;;;:15;;;;44478:25;;;;;;;:18;:25;;;;;;;44468:7;;44478:25;;;44468:4;;44478:25;;44468:7;;;;;;;;;;;:35;-1:-1:-1;;;;;44468:35:0;;;-1:-1:-1;;;;;44468:35:0;;;;;-1:-1:-1;;;;;;;;;;;44518:4:0;44523:1;44518:7;;;;;;;;;;;;;:15;-1:-1:-1;;;;;44518:15:0;;;-1:-1:-1;;;;;44518:15:0;;;;;44340:321;;;44573:16;;;44587:1;44573:16;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44573:16:0;44566:23;;44614:5;44604:4;44609:1;44604:7;;;;;;;;;;;;;:15;-1:-1:-1;;;;;44604:15:0;;;-1:-1:-1;;;;;44604:15:0;;;;;-1:-1:-1;;;;;;;;;;;44634:4:0;44639:1;44634:7;;;;;;;;;;;;;:15;-1:-1:-1;;;;;44634:15:0;;;-1:-1:-1;;;;;44634:15:0;;;;;44340:321;44673:24;44700:6;;;;;;;;;-1:-1:-1;;;;;44700:6:0;-1:-1:-1;;;;;44700:29:0;;44730:6;44738:1;44741:4;44747:8;44757:15;44700:73;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;44700:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;44700:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44700:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44673:100;;44791:7;44816:1;44799:7;:14;:18;44791:27;;;;;;;;;;;;;;44784:34;;;;44161:665;;;;;;:::o;42008:1465::-;42135:8;42140:2;42135:4;:8::i;:::-;42130:1336;;42160:39;42178:2;42182:6;42190:8;42160:17;:39::i;:::-;;42130:1336;;;42251:13;42276:2;42251:28;;42294:14;42311:4;-1:-1:-1;;;;;42311:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42311:13:0;42356;;;-1:-1:-1;;;42356:13:0;;;;42311;;-1:-1:-1;42339:14:0;;-1:-1:-1;;;;;42356:11:0;;;;;:13;;;;;42311;;42356;;;;;;;:11;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42356:13:0;;-1:-1:-1;;;;;;42388:15:0;;-1:-1:-1;;;;;;;;;;;42388:15:0;;:34;;-1:-1:-1;;;;;;42407:15:0;;-1:-1:-1;;;;;;;;;;;42407:15:0;42388:34;42384:1071;;;42443:13;-1:-1:-1;;;;;42459:15:0;;-1:-1:-1;;;;;;;;;;;42459:15:0;:33;;42486:6;42459:33;;;42477:6;42459:33;42443:49;-1:-1:-1;42511:17:0;42531:13;:6;42542:1;42531:10;:13::i;:::-;42511:33;;42563:19;42585:50;42603:5;42610:9;42629:4;42585:17;:50::i;:::-;42563:72;;42656:28;42678:5;42656:21;:28::i;:::-;42703:6;;-1:-1:-1;;;;;42703:6:0;:23;42734:21;:6;42745:9;42734:10;:21::i;:::-;42703:251;;;-1:-1:-1;;;;;;42703:251:0;;;;;;;-1:-1:-1;;;;;42703:251:0;;;;;;;;;;;;;42841:1;42703:251;;;;;;;;;;;;;;;;42920:15;42703:251;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42384:1071:0;;-1:-1:-1;;;;42384:1071:0;;42995:17;43015:13;:6;43026:1;43015:10;:13::i;:::-;42995:33;;43047:20;43070:51;43088:6;43096:9;43115:4;43070:17;:51::i;:::-;43047:74;-1:-1:-1;43140:20:0;43163:63;43181:6;43189:21;:6;43200:9;43189:10;:21::i;:::-;43220:4;43163:17;:63::i;:::-;43140:86;;43247:29;43269:6;43247:21;:29::i;:::-;43295;43317:6;43295:21;:29::i;:::-;43343:6;;:96;;;-1:-1:-1;;;43343:96:0;;-1:-1:-1;;;;;43343:96:0;;;;;;;;;;;;;;;;;;;;;;;;;;:6;:96;;;;;;;;;;;;;;;;;;;43423:15;43343:96;;;;;;:6;;;:19;;:96;;;;;;;;;;;;;;;;;;:6;:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;42384:1071:0;42130:1336;;;42008:1465;;;:::o;24235:604::-;24677:4;24788:17;24824:7;24235:604;:::o;27077:129::-;23779:13;;;;;;;;:33;;;23796:16;:14;:16::i;:::-;23779:50;;;-1:-1:-1;23817:12:0;;;;23816:13;23779:50;23771:109;;;;-1:-1:-1;;;23771:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23893:19;23916:13;;;;;;23915:14;23940:101;;;;23975:13;:20;;-1:-1:-1;;;;23975:20:0;;;;;24010:19;23991:4;24010:19;;;23940:101;27135:26:::1;:24;:26::i;:::-;27172;:24;:26::i;:::-;24071:14:::0;24067:68;;;24118:5;24102:21;;-1:-1:-1;;24102:21:0;;;27077:129;:::o;21434:761::-;21858:23;21884:69;21912:4;21884:69;;;;;;;;;;;;;;;;;21892:5;-1:-1:-1;;;;;21884:27:0;;;:69;;;;;:::i;:::-;21968:17;;21858:95;;-1:-1:-1;21968:21:0;21964:224;;22110:10;22099:30;;;;;;;;;;;;;;;-1:-1:-1;22099:30:0;22091:85;;;;-1:-1:-1;;;22091:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19788:622;20158:10;;;20157:62;;-1:-1:-1;20174:39:0;;;-1:-1:-1;;;20174:39:0;;20198:4;20174:39;;;;-1:-1:-1;;;;;20174:39:0;;;;;;;;;:15;;;;;;:39;;;;;;;;;;;;;;;:15;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20174:39:0;:44;20157:62;20149:152;;;;-1:-1:-1;;;20149:152:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20339:62;;;-1:-1:-1;;;;;20339:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20339:62:0;-1:-1:-1;;;20339:62:0;;;20312:90;;20332:5;;20312:19;:90::i;43481:672::-;-1:-1:-1;;;;;43665:25:0;;;43607:7;43665:25;;;:18;:25;;;;;;43607:7;;43627:21;;43665:25;:39;43661:321;;43728:16;;;43742:1;43728:16;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43728:16:0;43721:23;;-1:-1:-1;;;;;;;;;;;43759:4:0;43764:1;43759:7;;;;;;;;-1:-1:-1;;;;;43759:15:0;;;:7;;;;;;;;;;:15;;;;43799:25;;;;;;;:18;:25;;;;;;;43789:7;;43799:25;;;43789:4;;43799:25;;43789:7;;;;;;;;;;;:35;-1:-1:-1;;;;;43789:35:0;;;-1:-1:-1;;;;;43789:35:0;;;;;43849:5;43839:4;43844:1;43839:7;;;;;;;;;;;;;:15;-1:-1:-1;;;;;43839:15:0;;;-1:-1:-1;;;;;43839:15:0;;;;;43661:321;;;43894:16;;;43908:1;43894:16;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43894:16:0;43887:23;;-1:-1:-1;;;;;;;;;;;43925:4:0;43930:1;43925:7;;;;;;;;;;;;;:15;-1:-1:-1;;;;;43925:15:0;;;-1:-1:-1;;;;;43925:15:0;;;;;43965:5;43955:4;43960:1;43955:7;;;;;;;;;;;;;:15;-1:-1:-1;;;;;43955:15:0;;;-1:-1:-1;;;;;43955:15:0;;;;;43661:321;43994:24;44021:6;;;;;;;;;-1:-1:-1;;;;;44021:6:0;-1:-1:-1;;;;;44021:29:0;;44058:5;44065:1;44068:4;44074:8;44084:15;44021:79;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;44021:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;44021:79:0;;;;;;;;;;;;;;25661:65;23779:13;;;;;;;;:33;;;23796:16;:14;:16::i;:::-;23779:50;;;-1:-1:-1;23817:12:0;;;;23816:13;23779:50;23771:109;;;;-1:-1:-1;;;23771:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23893:19;23916:13;;;;;;23915:14;23940:101;;;;23975:13;:20;;-1:-1:-1;;;;23975:20:0;;;;;24010:19;23991:4;24010:19;;;24071:14;24067:68;;;24118:5;24102:21;;-1:-1:-1;;24102:21:0;;;25661:65;:::o;27214:196::-;23779:13;;;;;;;;:33;;;23796:16;:14;:16::i;:::-;23779:50;;;-1:-1:-1;23817:12:0;;;;23816:13;23779:50;23771:109;;;;-1:-1:-1;;;23771:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23893:19;23916:13;;;;;;23915:14;23940:101;;;;23975:13;:20;;-1:-1:-1;;;;23975:20:0;;;;;24010:19;23991:4;24010:19;;;23940:101;27282:17:::1;27302:12;:10;:12::i;:::-;27325:6;:18:::0;;-1:-1:-1;;;;;;27325:18:0::1;-1:-1:-1::0;;;;;27325:18:0;::::1;::::0;;::::1;::::0;;;27359:43:::1;::::0;27325:18;;-1:-1:-1;27325:18:0;-1:-1:-1;;27359:43:0::1;::::0;-1:-1:-1;;27359:43:0::1;24053:1;24071:14:::0;24067:68;;;24118:5;24102:21;;-1:-1:-1;;24102:21:0;;;27214:196;:::o;14094:195::-;14197:12;14229:52;14251:6;14259:4;14265:1;14268:12;14229:21;:52::i;:::-;14222:59;14094:195;-1:-1:-1;;;;14094:195:0:o;15146:530::-;15273:12;15331:5;15306:21;:30;;15298:81;;;;-1:-1:-1;;;15298:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15398:18;15409:6;15398:10;:18::i;:::-;15390:60;;;;;-1:-1:-1;;;15390:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15524:12;15538:23;15565:6;-1:-1:-1;;;;;15565:11:0;15585:5;15593:4;15565:33;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;15565:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15523:75;;;;15616:52;15634:7;15643:10;15655:12;15616:17;:52::i;:::-;15609:59;15146:530;-1:-1:-1;;;;;;;15146:530:0:o;11176:422::-;11543:20;11582:8;;;11176:422::o;17686:742::-;17801:12;17830:7;17826:595;;;-1:-1:-1;17861:10:0;17854:17;;17826:595;17975:17;;:21;17971:439;;18238:10;18232:17;18299:15;18286:10;18282:2;18278:19;18271:44;18186:148;18381:12;18374:20;;-1:-1:-1;;;18374:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Swarm Source
ipfs://64134e92553c322c245f3afb0dbedc34bf0d9d13a1961144ac4801a79a4e2fcd
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
AVAX | 36.62% | $0.99999 | 695.9967 | $695.99 | |
AVAX | 19.55% | $22.76 | 16.3261 | $371.55 | |
AVAX | 12.71% | $22.77 | 10.6063 | $241.51 | |
AVAX | 10.47% | $1 | 198.9286 | $198.97 | |
AVAX | 10.39% | $0.202133 | 976.8896 | $197.46 | |
AVAX | 8.91% | $1,789.01 | 0.0946 | $169.31 | |
AVAX | 0.84% | $0.999946 | 15.9791 | $15.98 | |
AVAX | 0.25% | $0.005049 | 957.9182 | $4.84 | |
AVAX | 0.17% | $0.999939 | 3.1518 | $3.15 | |
AVAX | 0.10% | $0.264389 | 7.0783 | $1.87 |
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.