More Info
Private Name Tags
ContractCreator
Latest 11 from a total of 11 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Buy Token | 16550785 | 728 days ago | IN | 0.04 ETH | 0.00208963 | ||||
Buy Token | 16341430 | 757 days ago | IN | 0.076 ETH | 0.00179707 | ||||
Buy Token | 16337314 | 758 days ago | IN | 0.00494172 ETH | 0.00113243 | ||||
Buy Token | 16337310 | 758 days ago | IN | 0.01101601 ETH | 0.00113256 | ||||
Buy Token | 16337263 | 758 days ago | IN | 0.02385023 ETH | 0.0018182 | ||||
Transfer Ownersh... | 16148069 | 784 days ago | IN | 0 ETH | 0.00108885 | ||||
Add Payable Toke... | 16096662 | 791 days ago | IN | 0 ETH | 0.00059206 | ||||
Update Token Rat... | 16096659 | 791 days ago | IN | 0 ETH | 0.00033743 | ||||
Add Payable Toke... | 15996413 | 805 days ago | IN | 0 ETH | 0.00195751 | ||||
Set Pre Sale Dat... | 15996403 | 805 days ago | IN | 0 ETH | 0.00087684 | ||||
Configure Sale T... | 15996383 | 805 days ago | IN | 0 ETH | 0.00211018 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
MetaRealFightsPreSaleContract
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-11-18 */ /** * This ICO Solution was made by ZiLab Technologies. * Web: www.zilab.co * Telegram: @zilab_technologies */ // Sources flattened with hardhat v2.8.0 https://hardhat.org // File @openzeppelin/contracts/utils/math/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol) pragma solidity ^0.8.17; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ 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) { unchecked { 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) { unchecked { 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) { unchecked { // 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) { unchecked { 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) { unchecked { 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) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return 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) { return a * b; } /** * @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. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { 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) { 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) { unchecked { 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. * * 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) { unchecked { 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) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File @openzeppelin/contracts/token/ERC20/[email protected] // OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File @openzeppelin/contracts/access/[email protected] // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(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"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File contracts/OwnerWithdrawable.sol pragma solidity ^0.8.0; contract OwnerWithdrawable is Ownable { using SafeMath for uint256; receive() external payable {} fallback() external payable {} function withdraw(address token, uint256 amt) public onlyOwner { IERC20(token).transfer(msg.sender, amt); } function withdrawAll(address token) public onlyOwner { uint256 amt = IERC20(token).balanceOf(address(this)); withdraw(token, amt); } function withdrawCurrency(uint256 amt) public onlyOwner { payable(msg.sender).transfer(amt); } // function deposit(address token, uint256 amt) public onlyOwner { // uint256 allowance = IERC20(token).allowance(msg.sender, address(this)); // require(allowance >= amt, "Check the token allowance"); // IERC20(token).transferFrom(owner(), address(this), amt); // } } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; 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"); (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"); (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"); (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"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal 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 assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File @openzeppelin/contracts/token/ERC20/utils/[email protected] // OpenZeppelin Contracts v4.4.1 (token/ERC20/utils/SafeERC20.sol) pragma solidity ^0.8.0; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender) + value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); uint256 newAllowance = oldAllowance - value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // File @openzeppelin/contracts/token/ERC20/extensions/[email protected] // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // File contracts/IRouter.sol pragma solidity ^0.8.0; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() 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 addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, 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 removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); 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 removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); 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 swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens( 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); } // pragma solidity >=0.6.2; interface IRouter is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } pragma solidity ^0.8.0; contract MetaRealFightsPreSaleContract is OwnerWithdrawable { using SafeMath for uint256; using SafeERC20 for IERC20; using SafeERC20 for IERC20Metadata; // UniSwap router IRouter public router; uint256 public rate; address public saleToken; uint public saleTokenDec; uint256 public totalTokensforSale; mapping(address => bool) public tokenWL; mapping(address => uint256) public tokenPrices; uint256 public preSaleStartTime; uint256 public preSaleEndTime; uint256 public totalTokensSold; constructor() {} modifier saleStarted(){ if (preSaleStartTime != 0) { require(block.timestamp < preSaleStartTime, "PreSale: Sale has already started. Cannot change Sale Params!"); } _; } //modifier to check if the sale is active or not modifier saleDuration(){ require(block.timestamp > preSaleStartTime, "Presale: Sale hasn't started"); require(block.timestamp < preSaleEndTime, "PreSale: Sale has already ended"); _; } //modifier to check if the Sale Duration and Locking periods are valid or not modifier saleValid( uint256 _preSaleStartTime, uint256 _preSaleEndTime ){ require(block.timestamp < _preSaleStartTime, "PreSale: Starting time is less than current TimeStamp!"); require(_preSaleStartTime < _preSaleEndTime, "PreSale: Invalid PreSale Dates!"); _; } //function to set information of Token sold in Pre-Sale and its rate in Native currency function configureSaleToken( address _saleToken, uint256 _totalTokensforSale, uint256 _rate )external onlyOwner saleStarted{ require(_rate != 0, "PreSale: Invalid Native Currency rate!"); rate = _rate; saleToken = _saleToken; saleTokenDec = IERC20Metadata(saleToken).decimals(); totalTokensforSale = _totalTokensforSale; IERC20(saleToken).safeTransferFrom(msg.sender, address(this), totalTokensforSale); } // function to set Pre-Sale duration function setPreSaleDates( uint256 _preSaleStartTime, uint256 _preSaleEndTime ) external onlyOwner saleStarted saleValid(_preSaleStartTime, _preSaleEndTime) { preSaleStartTime = _preSaleStartTime; preSaleEndTime = _preSaleEndTime; } // Add a token to buy presale token from, with price function addPayableToken( address[] memory _tokens, uint256[] memory _prices ) external onlyOwner saleStarted{ require( _tokens.length == _prices.length, "Presale: tokens & prices arrays length mismatch" ); for (uint256 i = 0; i < _tokens.length; i++) { require(_prices[i] != 0, "Presale: Cannot set price to 0"); tokenWL[_tokens[i]] = true; tokenPrices[_tokens[i]] = _prices[i]; } } function updateTokenRate( address[] memory _tokens, uint256[] memory _prices, uint256 _rate )external onlyOwner{ require( _tokens.length == _prices.length, "Presale: tokens & prices arrays length mismatch" ); if(_rate != 0){ rate = _rate; } for(uint256 i = 0; i < _tokens.length; i+=1){ require(tokenWL[_tokens[i]] == true, "Presale: Token not whitelisted"); require(_prices[i] != 0, "PreSale: Cannot set rate as 0"); tokenPrices[_tokens[i]] = _prices[i]; } } // Stop the Sale function stopPresale() external onlyOwner { require(block.timestamp > preSaleStartTime, "PreSale: Sale hasn't started yet!"); if(block.timestamp < preSaleEndTime){ preSaleEndTime = block.timestamp; } } // Public view function to calculate amount of sale tokens returned if you buy using "amount" of "token" function getTokenAmount(address token, uint256 amount) public view returns (uint256) { uint256 amtOut; if(token != address(0)){ require(tokenWL[token] == true, "Presale: Token not whitelisted"); // uint tokenDec = IERC20(token).decimals(); uint256 price = tokenPrices[token]; amtOut = amount.mul(10**saleTokenDec).div(price); } else{ amtOut = amount.mul(10**saleTokenDec).div(rate); } return amtOut; } // Public Function to buy tokens. APPROVAL needs to be done first function buyToken(address _token, uint256 _amount) external payable saleDuration{ uint256 saleTokenAmt; if(_token != address(0)){ require(_amount > 0, "Presale: Cannot buy with zero amount"); require(tokenWL[_token] == true, "Presale: Token not whitelisted"); saleTokenAmt = getTokenAmount(_token, _amount); IERC20(_token).safeTransferFrom(msg.sender, address(this), _amount); } else{ saleTokenAmt = getTokenAmount(address(0), msg.value); } require((totalTokensSold + saleTokenAmt) < totalTokensforSale, "PreSale: Total Token Sale Reached!"); IERC20(saleToken).safeTransfer(msg.sender, saleTokenAmt); // Update Stats totalTokensSold += saleTokenAmt; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address[]","name":"_tokens","type":"address[]"},{"internalType":"uint256[]","name":"_prices","type":"uint256[]"}],"name":"addPayableToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"buyToken","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_saleToken","type":"address"},{"internalType":"uint256","name":"_totalTokensforSale","type":"uint256"},{"internalType":"uint256","name":"_rate","type":"uint256"}],"name":"configureSaleToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getTokenAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSaleEndTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSaleStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"saleToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"saleTokenDec","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_preSaleStartTime","type":"uint256"},{"internalType":"uint256","name":"_preSaleEndTime","type":"uint256"}],"name":"setPreSaleDates","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stopPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokenPrices","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokenWL","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTokensSold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTokensforSale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_tokens","type":"address[]"},{"internalType":"uint256[]","name":"_prices","type":"uint256[]"},{"internalType":"uint256","name":"_rate","type":"uint256"}],"name":"updateTokenRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"withdrawCurrency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040523480156200001157600080fd5b5062000032620000266200003860201b60201c565b6200004060201b60201c565b62000104565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6130e480620001146000396000f3fe6080604052600436106101445760003560e01c80636bcedf9c116100b6578063e985e3671161006f578063e985e3671461041f578063f2fde38b1461044a578063f30de10e14610473578063f3fef3a31461049c578063f887ea40146104c5578063fa09e630146104f05761014b565b80636bcedf9c1461031f578063715018a61461034a5780638ce0b9d2146103615780638da5cb5b1461039e578063ace1741c146103c9578063cce29ea7146103f45761014b565b80633115329e116101085780633115329e146102345780633c00a36c1461025d5780634e13faeb146102865780636181f496146102af57806363b20117146102d857806368f8fc10146103035761014b565b806306d65af31461014d578063115ece4c146101785780631ad2ad1a146101b5578063204120bc146101cc5780632c4e722e146102095761014b565b3661014b57005b005b34801561015957600080fd5b50610162610519565b60405161016f9190611c61565b60405180910390f35b34801561018457600080fd5b5061019f600480360381019061019a9190611d1a565b61051f565b6040516101ac9190611c61565b60405180910390f35b3480156101c157600080fd5b506101ca6106aa565b005b3480156101d857600080fd5b506101f360048036038101906101ee9190611d5a565b61077e565b6040516102009190611c61565b60405180910390f35b34801561021557600080fd5b5061021e610796565b60405161022b9190611c61565b60405180910390f35b34801561024057600080fd5b5061025b60048036038101906102569190611fa3565b61079c565b005b34801561026957600080fd5b50610284600480360381019061027f919061202e565b610a14565b005b34801561029257600080fd5b506102ad60048036038101906102a8919061205b565b610ada565b005b3480156102bb57600080fd5b506102d660048036038101906102d191906120d3565b610d54565b005b3480156102e457600080fd5b506102ed610fa1565b6040516102fa9190611c61565b60405180910390f35b61031d60048036038101906103189190611d1a565b610fa7565b005b34801561032b57600080fd5b50610334611242565b6040516103419190611c61565b60405180910390f35b34801561035657600080fd5b5061035f611248565b005b34801561036d57600080fd5b5061038860048036038101906103839190611d5a565b6112d0565b6040516103959190612141565b60405180910390f35b3480156103aa57600080fd5b506103b36112f0565b6040516103c0919061216b565b60405180910390f35b3480156103d557600080fd5b506103de611319565b6040516103eb9190611c61565b60405180910390f35b34801561040057600080fd5b5061040961131f565b6040516104169190611c61565b60405180910390f35b34801561042b57600080fd5b50610434611325565b604051610441919061216b565b60405180910390f35b34801561045657600080fd5b50610471600480360381019061046c9190611d5a565b61134b565b005b34801561047f57600080fd5b5061049a60048036038101906104959190612186565b611442565b005b3480156104a857600080fd5b506104c360048036038101906104be9190611d1a565b6115a7565b005b3480156104d157600080fd5b506104da6116a6565b6040516104e79190612225565b60405180910390f35b3480156104fc57600080fd5b5061051760048036038101906105129190611d5a565b6116cc565b005b60085481565b600080600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146106685760011515600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146105e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105e09061229d565b60405180910390fd5b6000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061066081610652600454600a610643919061241f565b876117d490919063ffffffff16565b6117ea90919063ffffffff16565b9150506106a0565b61069d60025461068f600454600a610680919061241f565b866117d490919063ffffffff16565b6117ea90919063ffffffff16565b90505b8091505092915050565b6106b2611800565b73ffffffffffffffffffffffffffffffffffffffff166106d06112f0565b73ffffffffffffffffffffffffffffffffffffffff1614610726576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071d906124b6565b60405180910390fd5b600854421161076a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076190612548565b60405180910390fd5b60095442101561077c57426009819055505b565b60076020528060005260406000206000915090505481565b60025481565b6107a4611800565b73ffffffffffffffffffffffffffffffffffffffff166107c26112f0565b73ffffffffffffffffffffffffffffffffffffffff1614610818576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080f906124b6565b60405180910390fd5b815183511461085c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610853906125da565b60405180910390fd5b6000811461086c57806002819055505b60005b8351811015610a0e576001151560066000868481518110610893576108926125fa565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091c9061229d565b60405180910390fd5b600083828151811061093a576109396125fa565b5b602002602001015103610982576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097990612675565b60405180910390fd5b828181518110610995576109946125fa565b5b6020026020010151600760008684815181106109b4576109b36125fa565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600181610a079190612695565b905061086f565b50505050565b610a1c611800565b73ffffffffffffffffffffffffffffffffffffffff16610a3a6112f0565b73ffffffffffffffffffffffffffffffffffffffff1614610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a87906124b6565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610ad6573d6000803e3d6000fd5b5050565b610ae2611800565b73ffffffffffffffffffffffffffffffffffffffff16610b006112f0565b73ffffffffffffffffffffffffffffffffffffffff1614610b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4d906124b6565b60405180910390fd5b600060085414610ba5576008544210610ba4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9b9061273b565b60405180910390fd5b5b8051825114610be9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be0906125da565b60405180910390fd5b60005b8251811015610d4f576000828281518110610c0a57610c096125fa565b5b602002602001015103610c52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c49906127a7565b60405180910390fd5b600160066000858481518110610c6b57610c6a6125fa565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550818181518110610cd757610cd66125fa565b5b602002602001015160076000858481518110610cf657610cf56125fa565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080610d47906127c7565b915050610bec565b505050565b610d5c611800565b73ffffffffffffffffffffffffffffffffffffffff16610d7a6112f0565b73ffffffffffffffffffffffffffffffffffffffff1614610dd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc7906124b6565b60405180910390fd5b600060085414610e1f576008544210610e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e159061273b565b60405180910390fd5b5b60008103610e62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5990612881565b60405180910390fd5b8060028190555082600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3b91906128da565b60ff1660048190555081600581905550610f9c3330600554600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611808909392919063ffffffff16565b505050565b600a5481565b6008544211610feb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe290612953565b60405180910390fd5b600954421061102f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611026906129bf565b60405180910390fd5b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461117857600082116110a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109e90612a51565b60405180910390fd5b60011515600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151461113a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111319061229d565b60405180910390fd5b611144838361051f565b90506111733330848673ffffffffffffffffffffffffffffffffffffffff16611808909392919063ffffffff16565b611186565b61118360003461051f565b90505b60055481600a546111979190612695565b106111d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ce90612ae3565b60405180910390fd5b6112243382600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166118919092919063ffffffff16565b80600a60008282546112369190612695565b92505081905550505050565b60055481565b611250611800565b73ffffffffffffffffffffffffffffffffffffffff1661126e6112f0565b73ffffffffffffffffffffffffffffffffffffffff16146112c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bb906124b6565b60405180910390fd5b6112ce6000611917565b565b60066020528060005260406000206000915054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60045481565b60095481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611353611800565b73ffffffffffffffffffffffffffffffffffffffff166113716112f0565b73ffffffffffffffffffffffffffffffffffffffff16146113c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113be906124b6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611436576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142d90612b75565b60405180910390fd5b61143f81611917565b50565b61144a611800565b73ffffffffffffffffffffffffffffffffffffffff166114686112f0565b73ffffffffffffffffffffffffffffffffffffffff16146114be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b5906124b6565b60405180910390fd5b60006008541461150d57600854421061150c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115039061273b565b60405180910390fd5b5b8181814210611551576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154890612c07565b60405180910390fd5b808210611593576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158a90612c73565b60405180910390fd5b836008819055508260098190555050505050565b6115af611800565b73ffffffffffffffffffffffffffffffffffffffff166115cd6112f0565b73ffffffffffffffffffffffffffffffffffffffff1614611623576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161a906124b6565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b815260040161165e929190612c93565b6020604051808303816000875af115801561167d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a19190612ce8565b505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6116d4611800565b73ffffffffffffffffffffffffffffffffffffffff166116f26112f0565b73ffffffffffffffffffffffffffffffffffffffff1614611748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173f906124b6565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611783919061216b565b602060405180830381865afa1580156117a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c49190612d2a565b90506117d082826115a7565b5050565b600081836117e29190612d57565b905092915050565b600081836117f89190612dc8565b905092915050565b600033905090565b61188b846323b872dd60e01b85858560405160240161182993929190612df9565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506119db565b50505050565b6119128363a9059cbb60e01b84846040516024016118b0929190612c93565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506119db565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000611a3d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16611aa29092919063ffffffff16565b9050600081511115611a9d5780806020019051810190611a5d9190612ce8565b611a9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9390612ea2565b60405180910390fd5b5b505050565b6060611ab18484600085611aba565b90509392505050565b606082471015611aff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af690612f34565b60405180910390fd5b611b0885611bce565b611b47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3e90612fa0565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051611b709190613031565b60006040518083038185875af1925050503d8060008114611bad576040519150601f19603f3d011682016040523d82523d6000602084013e611bb2565b606091505b5091509150611bc2828286611be1565b92505050949350505050565b600080823b905060008111915050919050565b60608315611bf157829050611c41565b600083511115611c045782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c38919061308c565b60405180910390fd5b9392505050565b6000819050919050565b611c5b81611c48565b82525050565b6000602082019050611c766000830184611c52565b92915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611cbb82611c90565b9050919050565b611ccb81611cb0565b8114611cd657600080fd5b50565b600081359050611ce881611cc2565b92915050565b611cf781611c48565b8114611d0257600080fd5b50565b600081359050611d1481611cee565b92915050565b60008060408385031215611d3157611d30611c86565b5b6000611d3f85828601611cd9565b9250506020611d5085828601611d05565b9150509250929050565b600060208284031215611d7057611d6f611c86565b5b6000611d7e84828501611cd9565b91505092915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611dd582611d8c565b810181811067ffffffffffffffff82111715611df457611df3611d9d565b5b80604052505050565b6000611e07611c7c565b9050611e138282611dcc565b919050565b600067ffffffffffffffff821115611e3357611e32611d9d565b5b602082029050602081019050919050565b600080fd5b6000611e5c611e5784611e18565b611dfd565b90508083825260208201905060208402830185811115611e7f57611e7e611e44565b5b835b81811015611ea85780611e948882611cd9565b845260208401935050602081019050611e81565b5050509392505050565b600082601f830112611ec757611ec6611d87565b5b8135611ed7848260208601611e49565b91505092915050565b600067ffffffffffffffff821115611efb57611efa611d9d565b5b602082029050602081019050919050565b6000611f1f611f1a84611ee0565b611dfd565b90508083825260208201905060208402830185811115611f4257611f41611e44565b5b835b81811015611f6b5780611f578882611d05565b845260208401935050602081019050611f44565b5050509392505050565b600082601f830112611f8a57611f89611d87565b5b8135611f9a848260208601611f0c565b91505092915050565b600080600060608486031215611fbc57611fbb611c86565b5b600084013567ffffffffffffffff811115611fda57611fd9611c8b565b5b611fe686828701611eb2565b935050602084013567ffffffffffffffff81111561200757612006611c8b565b5b61201386828701611f75565b925050604061202486828701611d05565b9150509250925092565b60006020828403121561204457612043611c86565b5b600061205284828501611d05565b91505092915050565b6000806040838503121561207257612071611c86565b5b600083013567ffffffffffffffff8111156120905761208f611c8b565b5b61209c85828601611eb2565b925050602083013567ffffffffffffffff8111156120bd576120bc611c8b565b5b6120c985828601611f75565b9150509250929050565b6000806000606084860312156120ec576120eb611c86565b5b60006120fa86828701611cd9565b935050602061210b86828701611d05565b925050604061211c86828701611d05565b9150509250925092565b60008115159050919050565b61213b81612126565b82525050565b60006020820190506121566000830184612132565b92915050565b61216581611cb0565b82525050565b6000602082019050612180600083018461215c565b92915050565b6000806040838503121561219d5761219c611c86565b5b60006121ab85828601611d05565b92505060206121bc85828601611d05565b9150509250929050565b6000819050919050565b60006121eb6121e66121e184611c90565b6121c6565b611c90565b9050919050565b60006121fd826121d0565b9050919050565b600061220f826121f2565b9050919050565b61221f81612204565b82525050565b600060208201905061223a6000830184612216565b92915050565b600082825260208201905092915050565b7f50726573616c653a20546f6b656e206e6f742077686974656c69737465640000600082015250565b6000612287601e83612240565b915061229282612251565b602082019050919050565b600060208201905081810360008301526122b68161227a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156123435780860481111561231f5761231e6122bd565b5b600185161561232e5780820291505b808102905061233c856122ec565b9450612303565b94509492505050565b60008261235c5760019050612418565b8161236a5760009050612418565b8160018114612380576002811461238a576123b9565b6001915050612418565b60ff84111561239c5761239b6122bd565b5b8360020a9150848211156123b3576123b26122bd565b5b50612418565b5060208310610133831016604e8410600b84101617156123ee5782820a9050838111156123e9576123e86122bd565b5b612418565b6123fb84848460016122f9565b92509050818404811115612412576124116122bd565b5b81810290505b9392505050565b600061242a82611c48565b915061243583611c48565b92506124627fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461234c565b905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006124a0602083612240565b91506124ab8261246a565b602082019050919050565b600060208201905081810360008301526124cf81612493565b9050919050565b7f50726553616c653a2053616c65206861736e277420737461727465642079657460008201527f2100000000000000000000000000000000000000000000000000000000000000602082015250565b6000612532602183612240565b915061253d826124d6565b604082019050919050565b6000602082019050818103600083015261256181612525565b9050919050565b7f50726573616c653a20746f6b656e73202620707269636573206172726179732060008201527f6c656e677468206d69736d617463680000000000000000000000000000000000602082015250565b60006125c4602f83612240565b91506125cf82612568565b604082019050919050565b600060208201905081810360008301526125f3816125b7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f50726553616c653a2043616e6e6f742073657420726174652061732030000000600082015250565b600061265f601d83612240565b915061266a82612629565b602082019050919050565b6000602082019050818103600083015261268e81612652565b9050919050565b60006126a082611c48565b91506126ab83611c48565b92508282019050808211156126c3576126c26122bd565b5b92915050565b7f50726553616c653a2053616c652068617320616c72656164792073746172746560008201527f642e2043616e6e6f74206368616e67652053616c6520506172616d7321000000602082015250565b6000612725603d83612240565b9150612730826126c9565b604082019050919050565b6000602082019050818103600083015261275481612718565b9050919050565b7f50726573616c653a2043616e6e6f742073657420707269636520746f20300000600082015250565b6000612791601e83612240565b915061279c8261275b565b602082019050919050565b600060208201905081810360008301526127c081612784565b9050919050565b60006127d282611c48565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612804576128036122bd565b5b600182019050919050565b7f50726553616c653a20496e76616c6964204e61746976652043757272656e637960008201527f2072617465210000000000000000000000000000000000000000000000000000602082015250565b600061286b602683612240565b91506128768261280f565b604082019050919050565b6000602082019050818103600083015261289a8161285e565b9050919050565b600060ff82169050919050565b6128b7816128a1565b81146128c257600080fd5b50565b6000815190506128d4816128ae565b92915050565b6000602082840312156128f0576128ef611c86565b5b60006128fe848285016128c5565b91505092915050565b7f50726573616c653a2053616c65206861736e2774207374617274656400000000600082015250565b600061293d601c83612240565b915061294882612907565b602082019050919050565b6000602082019050818103600083015261296c81612930565b9050919050565b7f50726553616c653a2053616c652068617320616c726561647920656e64656400600082015250565b60006129a9601f83612240565b91506129b482612973565b602082019050919050565b600060208201905081810360008301526129d88161299c565b9050919050565b7f50726573616c653a2043616e6e6f74206275792077697468207a65726f20616d60008201527f6f756e7400000000000000000000000000000000000000000000000000000000602082015250565b6000612a3b602483612240565b9150612a46826129df565b604082019050919050565b60006020820190508181036000830152612a6a81612a2e565b9050919050565b7f50726553616c653a20546f74616c20546f6b656e2053616c652052656163686560008201527f6421000000000000000000000000000000000000000000000000000000000000602082015250565b6000612acd602283612240565b9150612ad882612a71565b604082019050919050565b60006020820190508181036000830152612afc81612ac0565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612b5f602683612240565b9150612b6a82612b03565b604082019050919050565b60006020820190508181036000830152612b8e81612b52565b9050919050565b7f50726553616c653a205374617274696e672074696d65206973206c657373207460008201527f68616e2063757272656e742054696d655374616d702100000000000000000000602082015250565b6000612bf1603683612240565b9150612bfc82612b95565b604082019050919050565b60006020820190508181036000830152612c2081612be4565b9050919050565b7f50726553616c653a20496e76616c69642050726553616c652044617465732100600082015250565b6000612c5d601f83612240565b9150612c6882612c27565b602082019050919050565b60006020820190508181036000830152612c8c81612c50565b9050919050565b6000604082019050612ca8600083018561215c565b612cb56020830184611c52565b9392505050565b612cc581612126565b8114612cd057600080fd5b50565b600081519050612ce281612cbc565b92915050565b600060208284031215612cfe57612cfd611c86565b5b6000612d0c84828501612cd3565b91505092915050565b600081519050612d2481611cee565b92915050565b600060208284031215612d4057612d3f611c86565b5b6000612d4e84828501612d15565b91505092915050565b6000612d6282611c48565b9150612d6d83611c48565b9250828202612d7b81611c48565b91508282048414831517612d9257612d916122bd565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612dd382611c48565b9150612dde83611c48565b925082612dee57612ded612d99565b5b828204905092915050565b6000606082019050612e0e600083018661215c565b612e1b602083018561215c565b612e286040830184611c52565b949350505050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000612e8c602a83612240565b9150612e9782612e30565b604082019050919050565b60006020820190508181036000830152612ebb81612e7f565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b6000612f1e602683612240565b9150612f2982612ec2565b604082019050919050565b60006020820190508181036000830152612f4d81612f11565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000612f8a601d83612240565b9150612f9582612f54565b602082019050919050565b60006020820190508181036000830152612fb981612f7d565b9050919050565b600081519050919050565b600081905092915050565b60005b83811015612ff4578082015181840152602081019050612fd9565b60008484015250505050565b600061300b82612fc0565b6130158185612fcb565b9350613025818560208601612fd6565b80840191505092915050565b600061303d8284613000565b915081905092915050565b600081519050919050565b600061305e82613048565b6130688185612240565b9350613078818560208601612fd6565b61308181611d8c565b840191505092915050565b600060208201905081810360008301526130a68184613053565b90509291505056fea264697066735822122027048fecd0fa620442ac15450e9ec21617fca3cf00178a3b964091effe0d71bd64736f6c63430008110033
Deployed Bytecode
0x6080604052600436106101445760003560e01c80636bcedf9c116100b6578063e985e3671161006f578063e985e3671461041f578063f2fde38b1461044a578063f30de10e14610473578063f3fef3a31461049c578063f887ea40146104c5578063fa09e630146104f05761014b565b80636bcedf9c1461031f578063715018a61461034a5780638ce0b9d2146103615780638da5cb5b1461039e578063ace1741c146103c9578063cce29ea7146103f45761014b565b80633115329e116101085780633115329e146102345780633c00a36c1461025d5780634e13faeb146102865780636181f496146102af57806363b20117146102d857806368f8fc10146103035761014b565b806306d65af31461014d578063115ece4c146101785780631ad2ad1a146101b5578063204120bc146101cc5780632c4e722e146102095761014b565b3661014b57005b005b34801561015957600080fd5b50610162610519565b60405161016f9190611c61565b60405180910390f35b34801561018457600080fd5b5061019f600480360381019061019a9190611d1a565b61051f565b6040516101ac9190611c61565b60405180910390f35b3480156101c157600080fd5b506101ca6106aa565b005b3480156101d857600080fd5b506101f360048036038101906101ee9190611d5a565b61077e565b6040516102009190611c61565b60405180910390f35b34801561021557600080fd5b5061021e610796565b60405161022b9190611c61565b60405180910390f35b34801561024057600080fd5b5061025b60048036038101906102569190611fa3565b61079c565b005b34801561026957600080fd5b50610284600480360381019061027f919061202e565b610a14565b005b34801561029257600080fd5b506102ad60048036038101906102a8919061205b565b610ada565b005b3480156102bb57600080fd5b506102d660048036038101906102d191906120d3565b610d54565b005b3480156102e457600080fd5b506102ed610fa1565b6040516102fa9190611c61565b60405180910390f35b61031d60048036038101906103189190611d1a565b610fa7565b005b34801561032b57600080fd5b50610334611242565b6040516103419190611c61565b60405180910390f35b34801561035657600080fd5b5061035f611248565b005b34801561036d57600080fd5b5061038860048036038101906103839190611d5a565b6112d0565b6040516103959190612141565b60405180910390f35b3480156103aa57600080fd5b506103b36112f0565b6040516103c0919061216b565b60405180910390f35b3480156103d557600080fd5b506103de611319565b6040516103eb9190611c61565b60405180910390f35b34801561040057600080fd5b5061040961131f565b6040516104169190611c61565b60405180910390f35b34801561042b57600080fd5b50610434611325565b604051610441919061216b565b60405180910390f35b34801561045657600080fd5b50610471600480360381019061046c9190611d5a565b61134b565b005b34801561047f57600080fd5b5061049a60048036038101906104959190612186565b611442565b005b3480156104a857600080fd5b506104c360048036038101906104be9190611d1a565b6115a7565b005b3480156104d157600080fd5b506104da6116a6565b6040516104e79190612225565b60405180910390f35b3480156104fc57600080fd5b5061051760048036038101906105129190611d5a565b6116cc565b005b60085481565b600080600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146106685760011515600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146105e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105e09061229d565b60405180910390fd5b6000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061066081610652600454600a610643919061241f565b876117d490919063ffffffff16565b6117ea90919063ffffffff16565b9150506106a0565b61069d60025461068f600454600a610680919061241f565b866117d490919063ffffffff16565b6117ea90919063ffffffff16565b90505b8091505092915050565b6106b2611800565b73ffffffffffffffffffffffffffffffffffffffff166106d06112f0565b73ffffffffffffffffffffffffffffffffffffffff1614610726576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071d906124b6565b60405180910390fd5b600854421161076a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076190612548565b60405180910390fd5b60095442101561077c57426009819055505b565b60076020528060005260406000206000915090505481565b60025481565b6107a4611800565b73ffffffffffffffffffffffffffffffffffffffff166107c26112f0565b73ffffffffffffffffffffffffffffffffffffffff1614610818576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080f906124b6565b60405180910390fd5b815183511461085c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610853906125da565b60405180910390fd5b6000811461086c57806002819055505b60005b8351811015610a0e576001151560066000868481518110610893576108926125fa565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091c9061229d565b60405180910390fd5b600083828151811061093a576109396125fa565b5b602002602001015103610982576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097990612675565b60405180910390fd5b828181518110610995576109946125fa565b5b6020026020010151600760008684815181106109b4576109b36125fa565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600181610a079190612695565b905061086f565b50505050565b610a1c611800565b73ffffffffffffffffffffffffffffffffffffffff16610a3a6112f0565b73ffffffffffffffffffffffffffffffffffffffff1614610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a87906124b6565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610ad6573d6000803e3d6000fd5b5050565b610ae2611800565b73ffffffffffffffffffffffffffffffffffffffff16610b006112f0565b73ffffffffffffffffffffffffffffffffffffffff1614610b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4d906124b6565b60405180910390fd5b600060085414610ba5576008544210610ba4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9b9061273b565b60405180910390fd5b5b8051825114610be9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be0906125da565b60405180910390fd5b60005b8251811015610d4f576000828281518110610c0a57610c096125fa565b5b602002602001015103610c52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c49906127a7565b60405180910390fd5b600160066000858481518110610c6b57610c6a6125fa565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550818181518110610cd757610cd66125fa565b5b602002602001015160076000858481518110610cf657610cf56125fa565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080610d47906127c7565b915050610bec565b505050565b610d5c611800565b73ffffffffffffffffffffffffffffffffffffffff16610d7a6112f0565b73ffffffffffffffffffffffffffffffffffffffff1614610dd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc7906124b6565b60405180910390fd5b600060085414610e1f576008544210610e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e159061273b565b60405180910390fd5b5b60008103610e62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5990612881565b60405180910390fd5b8060028190555082600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3b91906128da565b60ff1660048190555081600581905550610f9c3330600554600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611808909392919063ffffffff16565b505050565b600a5481565b6008544211610feb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe290612953565b60405180910390fd5b600954421061102f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611026906129bf565b60405180910390fd5b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461117857600082116110a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109e90612a51565b60405180910390fd5b60011515600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151461113a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111319061229d565b60405180910390fd5b611144838361051f565b90506111733330848673ffffffffffffffffffffffffffffffffffffffff16611808909392919063ffffffff16565b611186565b61118360003461051f565b90505b60055481600a546111979190612695565b106111d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ce90612ae3565b60405180910390fd5b6112243382600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166118919092919063ffffffff16565b80600a60008282546112369190612695565b92505081905550505050565b60055481565b611250611800565b73ffffffffffffffffffffffffffffffffffffffff1661126e6112f0565b73ffffffffffffffffffffffffffffffffffffffff16146112c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bb906124b6565b60405180910390fd5b6112ce6000611917565b565b60066020528060005260406000206000915054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60045481565b60095481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611353611800565b73ffffffffffffffffffffffffffffffffffffffff166113716112f0565b73ffffffffffffffffffffffffffffffffffffffff16146113c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113be906124b6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611436576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142d90612b75565b60405180910390fd5b61143f81611917565b50565b61144a611800565b73ffffffffffffffffffffffffffffffffffffffff166114686112f0565b73ffffffffffffffffffffffffffffffffffffffff16146114be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b5906124b6565b60405180910390fd5b60006008541461150d57600854421061150c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115039061273b565b60405180910390fd5b5b8181814210611551576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154890612c07565b60405180910390fd5b808210611593576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158a90612c73565b60405180910390fd5b836008819055508260098190555050505050565b6115af611800565b73ffffffffffffffffffffffffffffffffffffffff166115cd6112f0565b73ffffffffffffffffffffffffffffffffffffffff1614611623576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161a906124b6565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b815260040161165e929190612c93565b6020604051808303816000875af115801561167d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a19190612ce8565b505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6116d4611800565b73ffffffffffffffffffffffffffffffffffffffff166116f26112f0565b73ffffffffffffffffffffffffffffffffffffffff1614611748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173f906124b6565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611783919061216b565b602060405180830381865afa1580156117a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c49190612d2a565b90506117d082826115a7565b5050565b600081836117e29190612d57565b905092915050565b600081836117f89190612dc8565b905092915050565b600033905090565b61188b846323b872dd60e01b85858560405160240161182993929190612df9565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506119db565b50505050565b6119128363a9059cbb60e01b84846040516024016118b0929190612c93565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506119db565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000611a3d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16611aa29092919063ffffffff16565b9050600081511115611a9d5780806020019051810190611a5d9190612ce8565b611a9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9390612ea2565b60405180910390fd5b5b505050565b6060611ab18484600085611aba565b90509392505050565b606082471015611aff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af690612f34565b60405180910390fd5b611b0885611bce565b611b47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3e90612fa0565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051611b709190613031565b60006040518083038185875af1925050503d8060008114611bad576040519150601f19603f3d011682016040523d82523d6000602084013e611bb2565b606091505b5091509150611bc2828286611be1565b92505050949350505050565b600080823b905060008111915050919050565b60608315611bf157829050611c41565b600083511115611c045782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c38919061308c565b60405180910390fd5b9392505050565b6000819050919050565b611c5b81611c48565b82525050565b6000602082019050611c766000830184611c52565b92915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611cbb82611c90565b9050919050565b611ccb81611cb0565b8114611cd657600080fd5b50565b600081359050611ce881611cc2565b92915050565b611cf781611c48565b8114611d0257600080fd5b50565b600081359050611d1481611cee565b92915050565b60008060408385031215611d3157611d30611c86565b5b6000611d3f85828601611cd9565b9250506020611d5085828601611d05565b9150509250929050565b600060208284031215611d7057611d6f611c86565b5b6000611d7e84828501611cd9565b91505092915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611dd582611d8c565b810181811067ffffffffffffffff82111715611df457611df3611d9d565b5b80604052505050565b6000611e07611c7c565b9050611e138282611dcc565b919050565b600067ffffffffffffffff821115611e3357611e32611d9d565b5b602082029050602081019050919050565b600080fd5b6000611e5c611e5784611e18565b611dfd565b90508083825260208201905060208402830185811115611e7f57611e7e611e44565b5b835b81811015611ea85780611e948882611cd9565b845260208401935050602081019050611e81565b5050509392505050565b600082601f830112611ec757611ec6611d87565b5b8135611ed7848260208601611e49565b91505092915050565b600067ffffffffffffffff821115611efb57611efa611d9d565b5b602082029050602081019050919050565b6000611f1f611f1a84611ee0565b611dfd565b90508083825260208201905060208402830185811115611f4257611f41611e44565b5b835b81811015611f6b5780611f578882611d05565b845260208401935050602081019050611f44565b5050509392505050565b600082601f830112611f8a57611f89611d87565b5b8135611f9a848260208601611f0c565b91505092915050565b600080600060608486031215611fbc57611fbb611c86565b5b600084013567ffffffffffffffff811115611fda57611fd9611c8b565b5b611fe686828701611eb2565b935050602084013567ffffffffffffffff81111561200757612006611c8b565b5b61201386828701611f75565b925050604061202486828701611d05565b9150509250925092565b60006020828403121561204457612043611c86565b5b600061205284828501611d05565b91505092915050565b6000806040838503121561207257612071611c86565b5b600083013567ffffffffffffffff8111156120905761208f611c8b565b5b61209c85828601611eb2565b925050602083013567ffffffffffffffff8111156120bd576120bc611c8b565b5b6120c985828601611f75565b9150509250929050565b6000806000606084860312156120ec576120eb611c86565b5b60006120fa86828701611cd9565b935050602061210b86828701611d05565b925050604061211c86828701611d05565b9150509250925092565b60008115159050919050565b61213b81612126565b82525050565b60006020820190506121566000830184612132565b92915050565b61216581611cb0565b82525050565b6000602082019050612180600083018461215c565b92915050565b6000806040838503121561219d5761219c611c86565b5b60006121ab85828601611d05565b92505060206121bc85828601611d05565b9150509250929050565b6000819050919050565b60006121eb6121e66121e184611c90565b6121c6565b611c90565b9050919050565b60006121fd826121d0565b9050919050565b600061220f826121f2565b9050919050565b61221f81612204565b82525050565b600060208201905061223a6000830184612216565b92915050565b600082825260208201905092915050565b7f50726573616c653a20546f6b656e206e6f742077686974656c69737465640000600082015250565b6000612287601e83612240565b915061229282612251565b602082019050919050565b600060208201905081810360008301526122b68161227a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156123435780860481111561231f5761231e6122bd565b5b600185161561232e5780820291505b808102905061233c856122ec565b9450612303565b94509492505050565b60008261235c5760019050612418565b8161236a5760009050612418565b8160018114612380576002811461238a576123b9565b6001915050612418565b60ff84111561239c5761239b6122bd565b5b8360020a9150848211156123b3576123b26122bd565b5b50612418565b5060208310610133831016604e8410600b84101617156123ee5782820a9050838111156123e9576123e86122bd565b5b612418565b6123fb84848460016122f9565b92509050818404811115612412576124116122bd565b5b81810290505b9392505050565b600061242a82611c48565b915061243583611c48565b92506124627fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461234c565b905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006124a0602083612240565b91506124ab8261246a565b602082019050919050565b600060208201905081810360008301526124cf81612493565b9050919050565b7f50726553616c653a2053616c65206861736e277420737461727465642079657460008201527f2100000000000000000000000000000000000000000000000000000000000000602082015250565b6000612532602183612240565b915061253d826124d6565b604082019050919050565b6000602082019050818103600083015261256181612525565b9050919050565b7f50726573616c653a20746f6b656e73202620707269636573206172726179732060008201527f6c656e677468206d69736d617463680000000000000000000000000000000000602082015250565b60006125c4602f83612240565b91506125cf82612568565b604082019050919050565b600060208201905081810360008301526125f3816125b7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f50726553616c653a2043616e6e6f742073657420726174652061732030000000600082015250565b600061265f601d83612240565b915061266a82612629565b602082019050919050565b6000602082019050818103600083015261268e81612652565b9050919050565b60006126a082611c48565b91506126ab83611c48565b92508282019050808211156126c3576126c26122bd565b5b92915050565b7f50726553616c653a2053616c652068617320616c72656164792073746172746560008201527f642e2043616e6e6f74206368616e67652053616c6520506172616d7321000000602082015250565b6000612725603d83612240565b9150612730826126c9565b604082019050919050565b6000602082019050818103600083015261275481612718565b9050919050565b7f50726573616c653a2043616e6e6f742073657420707269636520746f20300000600082015250565b6000612791601e83612240565b915061279c8261275b565b602082019050919050565b600060208201905081810360008301526127c081612784565b9050919050565b60006127d282611c48565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612804576128036122bd565b5b600182019050919050565b7f50726553616c653a20496e76616c6964204e61746976652043757272656e637960008201527f2072617465210000000000000000000000000000000000000000000000000000602082015250565b600061286b602683612240565b91506128768261280f565b604082019050919050565b6000602082019050818103600083015261289a8161285e565b9050919050565b600060ff82169050919050565b6128b7816128a1565b81146128c257600080fd5b50565b6000815190506128d4816128ae565b92915050565b6000602082840312156128f0576128ef611c86565b5b60006128fe848285016128c5565b91505092915050565b7f50726573616c653a2053616c65206861736e2774207374617274656400000000600082015250565b600061293d601c83612240565b915061294882612907565b602082019050919050565b6000602082019050818103600083015261296c81612930565b9050919050565b7f50726553616c653a2053616c652068617320616c726561647920656e64656400600082015250565b60006129a9601f83612240565b91506129b482612973565b602082019050919050565b600060208201905081810360008301526129d88161299c565b9050919050565b7f50726573616c653a2043616e6e6f74206275792077697468207a65726f20616d60008201527f6f756e7400000000000000000000000000000000000000000000000000000000602082015250565b6000612a3b602483612240565b9150612a46826129df565b604082019050919050565b60006020820190508181036000830152612a6a81612a2e565b9050919050565b7f50726553616c653a20546f74616c20546f6b656e2053616c652052656163686560008201527f6421000000000000000000000000000000000000000000000000000000000000602082015250565b6000612acd602283612240565b9150612ad882612a71565b604082019050919050565b60006020820190508181036000830152612afc81612ac0565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612b5f602683612240565b9150612b6a82612b03565b604082019050919050565b60006020820190508181036000830152612b8e81612b52565b9050919050565b7f50726553616c653a205374617274696e672074696d65206973206c657373207460008201527f68616e2063757272656e742054696d655374616d702100000000000000000000602082015250565b6000612bf1603683612240565b9150612bfc82612b95565b604082019050919050565b60006020820190508181036000830152612c2081612be4565b9050919050565b7f50726553616c653a20496e76616c69642050726553616c652044617465732100600082015250565b6000612c5d601f83612240565b9150612c6882612c27565b602082019050919050565b60006020820190508181036000830152612c8c81612c50565b9050919050565b6000604082019050612ca8600083018561215c565b612cb56020830184611c52565b9392505050565b612cc581612126565b8114612cd057600080fd5b50565b600081519050612ce281612cbc565b92915050565b600060208284031215612cfe57612cfd611c86565b5b6000612d0c84828501612cd3565b91505092915050565b600081519050612d2481611cee565b92915050565b600060208284031215612d4057612d3f611c86565b5b6000612d4e84828501612d15565b91505092915050565b6000612d6282611c48565b9150612d6d83611c48565b9250828202612d7b81611c48565b91508282048414831517612d9257612d916122bd565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612dd382611c48565b9150612dde83611c48565b925082612dee57612ded612d99565b5b828204905092915050565b6000606082019050612e0e600083018661215c565b612e1b602083018561215c565b612e286040830184611c52565b949350505050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000612e8c602a83612240565b9150612e9782612e30565b604082019050919050565b60006020820190508181036000830152612ebb81612e7f565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b6000612f1e602683612240565b9150612f2982612ec2565b604082019050919050565b60006020820190508181036000830152612f4d81612f11565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000612f8a601d83612240565b9150612f9582612f54565b602082019050919050565b60006020820190508181036000830152612fb981612f7d565b9050919050565b600081519050919050565b600081905092915050565b60005b83811015612ff4578082015181840152602081019050612fd9565b60008484015250505050565b600061300b82612fc0565b6130158185612fcb565b9350613025818560208601612fd6565b80840191505092915050565b600061303d8284613000565b915081905092915050565b600081519050919050565b600061305e82613048565b6130688185612240565b9350613078818560208601612fd6565b61308181611d8c565b840191505092915050565b600060208201905081810360008301526130a68184613053565b90509291505056fea264697066735822122027048fecd0fa620442ac15450e9ec21617fca3cf00178a3b964091effe0d71bd64736f6c63430008110033
Deployed Bytecode Sourcemap
34053:5594:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34531:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38170:573;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37799:251;;;;;;;;;;;;;:::i;:::-;;34475:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34288:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37116:649;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14462:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36580:527;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35690:487;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34611:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38824:819;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34383:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13088:105;;;;;;;;;;;;;:::i;:::-;;34426:39;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12420:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34349:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34572:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34317:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13353:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36229:283;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14163:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34257:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14295:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34531:31;;;;:::o;38170:573::-;38276:7;38303:14;38349:1;38332:19;;:5;:19;;;38329:381;;38394:4;38376:22;;:7;:14;38384:5;38376:14;;;;;;;;;;;;;;;;;;;;;;;;;:22;;;38368:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;38508:13;38524:11;:18;38536:5;38524:18;;;;;;;;;;;;;;;;38508:34;;38567:39;38600:5;38567:28;38582:12;;38578:2;:16;;;;:::i;:::-;38567:6;:10;;:28;;;;:::i;:::-;:32;;:39;;;;:::i;:::-;38558:48;;38352:267;38329:381;;;38659:38;38692:4;;38659:28;38674:12;;38670:2;:16;;;;:::i;:::-;38659:6;:10;;:28;;;;:::i;:::-;:32;;:38;;;;:::i;:::-;38650:47;;38329:381;38728:6;38721:13;;;38170:573;;;;:::o;37799:251::-;12658:12;:10;:12::i;:::-;12647:23;;:7;:5;:7::i;:::-;:23;;;12639:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37879:16:::1;;37861:15;:34;37853:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;37966:14;;37948:15;:32;37945:97;;;38014:15;37997:14;:32;;;;37945:97;37799:251::o:0;34475:46::-;;;;;;;;;;;;;;;;;:::o;34288:19::-;;;;:::o;37116:649::-;12658:12;:10;:12::i;:::-;12647:23;;:7;:5;:7::i;:::-;:23;;;12639:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37316:7:::1;:14;37298:7;:14;:32;37275:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;37433:1;37424:5;:10;37421:55;;37458:5;37451:4;:12;;;;37421:55;37493:9;37489:268;37512:7;:14;37508:1;:18;37489:268;;;37580:4;37557:27;;:7;:19;37565:7;37573:1;37565:10;;;;;;;;:::i;:::-;;;;;;;;37557:19;;;;;;;;;;;;;;;;;;;;;;;;;:27;;;37549:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;37657:1;37643:7;37651:1;37643:10;;;;;;;;:::i;:::-;;;;;;;;:15:::0;37635:57:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;37734:7;37742:1;37734:10;;;;;;;;:::i;:::-;;;;;;;;37708:11;:23;37720:7;37728:1;37720:10;;;;;;;;:::i;:::-;;;;;;;;37708:23;;;;;;;;;;;;;;;:36;;;;37531:1;37528:4;;;;;:::i;:::-;;;37489:268;;;;37116:649:::0;;;:::o;14462:110::-;12658:12;:10;:12::i;:::-;12647:23;;:7;:5;:7::i;:::-;:23;;;12639:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14538:10:::1;14530:28;;:33;14559:3;14530:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;14462:110:::0;:::o;36580:527::-;12658:12;:10;:12::i;:::-;12647:23;;:7;:5;:7::i;:::-;:23;;;12639:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34734:1:::1;34714:16;;:21;34710:164;;34779:16;;34761:15;:34;34753:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;34710:164;36768:7:::2;:14;36750:7;:14;:32;36727:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;36878:9;36873:226;36897:7;:14;36893:1;:18;36873:226;;;36956:1;36942:7;36950:1;36942:10;;;;;;;;:::i;:::-;;;;;;;;:15:::0;36934:58:::2;;;;;;;;;;;;:::i;:::-;;;;;;;;;37030:4;37008:7;:19;37016:7;37024:1;37016:10;;;;;;;;:::i;:::-;;;;;;;;37008:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;37076:7;37084:1;37076:10;;;;;;;;:::i;:::-;;;;;;;;37050:11;:23;37062:7;37070:1;37062:10;;;;;;;;:::i;:::-;;;;;;;;37050:23;;;;;;;;;;;;;;;:36;;;;36913:3;;;;;:::i;:::-;;;;36873:226;;;;36580:527:::0;;:::o;35690:487::-;12658:12;:10;:12::i;:::-;12647:23;;:7;:5;:7::i;:::-;:23;;;12639:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34734:1:::1;34714:16;;:21;34710:164;;34779:16;;34761:15;:34;34753:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;34710:164;35858:1:::2;35849:5;:10:::0;35841:61:::2;;;;;;;;;;;;:::i;:::-;;;;;;;;;35921:5;35914:4;:12;;;;35950:10;35938:9;;:22;;;;;;;;;;;;;;;;;;36002:9;;;;;;;;;;;35987:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35972:51;;:12;:51;;;;36056:19;36035:18;:40;;;;36087:81;36122:10;36142:4;36149:18;;36094:9;;;;;;;;;;;36087:34;;;;:81;;;;;;:::i;:::-;35690:487:::0;;;:::o;34611:30::-;;;;:::o;38824:819::-;35020:16;;35002:15;:34;34994:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;35107:14;;35089:15;:32;35081:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;38916:20:::1;38969:1:::0;38951:20:::1;;:6;:20;;;38948:438;;39006:1;38996:7;:11;38988:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;39091:4;39072:23;;:7;:15;39080:6;39072:15;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;39064:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;39163:31;39178:6;39186:7;39163:14;:31::i;:::-;39148:46;;39210:67;39242:10;39262:4;39269:7;39217:6;39210:31;;;;:67;;;;;;:::i;:::-;38948:438;;;39336:37;39359:1;39363:9;39336:14;:37::i;:::-;39321:52;;38948:438;39440:18;;39424:12;39406:15;;:30;;;;:::i;:::-;39405:53;39397:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;39509:56;39540:10;39552:12;39516:9;;;;;;;;;;;39509:30;;;;:56;;;;;:::i;:::-;39622:12;39603:15;;:31;;;;;;;:::i;:::-;;;;;;;;38904:739;38824:819:::0;;:::o;34383:33::-;;;;:::o;13088:105::-;12658:12;:10;:12::i;:::-;12647:23;;:7;:5;:7::i;:::-;:23;;;12639:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13154:30:::1;13181:1;13154:18;:30::i;:::-;13088:105::o:0;34426:39::-;;;;;;;;;;;;;;;;;;;;;;:::o;12420:89::-;12466:7;12494:6;;;;;;;;;;;12487:13;;12420:89;:::o;34349:24::-;;;;:::o;34572:29::-;;;;:::o;34317:24::-;;;;;;;;;;;;;:::o;13353:204::-;12658:12;:10;:12::i;:::-;12647:23;;:7;:5;:7::i;:::-;:23;;;12639:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13463:1:::1;13443:22;;:8;:22;;::::0;13435:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;13520:28;13539:8;13520:18;:28::i;:::-;13353:204:::0;:::o;36229:283::-;12658:12;:10;:12::i;:::-;12647:23;;:7;:5;:7::i;:::-;:23;;;12639:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34734:1:::1;34714:16;;:21;34710:164;;34779:16;;34761:15;:34;34753:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;34710:164;36375:17:::2;36394:15;35398:17;35380:15;:35;35372:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;35514:15;35494:17;:35;35486:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;36442:17:::3;36423:16;:36;;;;36488:15;36471:14;:32;;;;34885:1:::2;;36229:283:::0;;:::o;14163:123::-;12658:12;:10;:12::i;:::-;12647:23;;:7;:5;:7::i;:::-;:23;;;12639:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14245:5:::1;14238:22;;;14261:10;14273:3;14238:39;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14163:123:::0;;:::o;34257:21::-;;;;;;;;;;;;;:::o;14295:158::-;12658:12;:10;:12::i;:::-;12647:23;;:7;:5;:7::i;:::-;:23;;;12639:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14360:11:::1;14381:5;14374:23;;;14406:4;14374:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14360:52;;14424:20;14433:5;14440:3;14424:8;:20::i;:::-;14348:105;14295:158:::0;:::o;3903:100::-;3961:7;3993:1;3989;:5;;;;:::i;:::-;3982:12;;3903:100;;;;:::o;4315:::-;4373:7;4405:1;4401;:5;;;;:::i;:::-;4394:12;;4315:100;;;;:::o;11106:::-;11159:7;11187:10;11180:17;;11106:100;:::o;24188:255::-;24338:96;24358:5;24388:27;;;24417:4;24423:2;24427:5;24365:68;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24338:19;:96::i;:::-;24188:255;;;;:::o;23962:217::-;24084:86;24104:5;24134:23;;;24159:2;24163:5;24111:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24084:19;:86::i;:::-;23962:217;;;:::o;13722:195::-;13797:16;13816:6;;;;;;;;;;;13797:25;;13843:8;13834:6;;:17;;;;;;;;;;;;;;;;;;13899:8;13868:40;;13889:8;13868:40;;;;;;;;;;;;13785:132;13722:195;:::o;26597:725::-;27025:23;27051:69;27079:4;27051:69;;;;;;;;;;;;;;;;;27059:5;27051:27;;;;:69;;;;;:::i;:::-;27025:95;;27156:1;27136:10;:17;:21;27132:182;;;27235:10;27224:30;;;;;;;;;;;;:::i;:::-;27216:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;27132:182;26667:655;26597:725;;:::o;18605:235::-;18746:12;18779:52;18801:6;18809:4;18815:1;18818:12;18779:21;:52::i;:::-;18772:59;;18605:235;;;;;:::o;19756:520::-;19931:12;19990:5;19965:21;:30;;19957:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;20058:18;20069:6;20058:10;:18::i;:::-;20050:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;20125:12;20139:23;20166:6;:11;;20185:5;20192:4;20166:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20124:73;;;;20216:51;20233:7;20242:10;20254:12;20216:16;:51::i;:::-;20209:58;;;;19756:520;;;;;;:::o;15741:396::-;15801:4;16013:12;16082:7;16070:20;16062:28;;16127:1;16120:4;:8;16113:15;;;15741:396;;;:::o;22507:731::-;22661:12;22691:7;22687:543;;;22723:10;22716:17;;;;22687:543;22860:1;22840:10;:17;:21;22836:382;;;23041:10;23035:17;23103:15;23090:10;23086:2;23082:19;23075:44;22836:382;23188:12;23181:20;;;;;;;;;;;:::i;:::-;;;;;;;;22507:731;;;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:75::-;475:6;508:2;502:9;492:19;;442:75;:::o;523:117::-;632:1;629;622:12;646:117;755:1;752;745:12;769:126;806:7;846:42;839:5;835:54;824:65;;769:126;;;:::o;901:96::-;938:7;967:24;985:5;967:24;:::i;:::-;956:35;;901:96;;;:::o;1003:122::-;1076:24;1094:5;1076:24;:::i;:::-;1069:5;1066:35;1056:63;;1115:1;1112;1105:12;1056:63;1003:122;:::o;1131:139::-;1177:5;1215:6;1202:20;1193:29;;1231:33;1258:5;1231:33;:::i;:::-;1131:139;;;;:::o;1276:122::-;1349:24;1367:5;1349:24;:::i;:::-;1342:5;1339:35;1329:63;;1388:1;1385;1378:12;1329:63;1276:122;:::o;1404:139::-;1450:5;1488:6;1475:20;1466:29;;1504:33;1531:5;1504:33;:::i;:::-;1404:139;;;;:::o;1549:474::-;1617:6;1625;1674:2;1662:9;1653:7;1649:23;1645:32;1642:119;;;1680:79;;:::i;:::-;1642:119;1800:1;1825:53;1870:7;1861:6;1850:9;1846:22;1825:53;:::i;:::-;1815:63;;1771:117;1927:2;1953:53;1998:7;1989:6;1978:9;1974:22;1953:53;:::i;:::-;1943:63;;1898:118;1549:474;;;;;:::o;2029:329::-;2088:6;2137:2;2125:9;2116:7;2112:23;2108:32;2105:119;;;2143:79;;:::i;:::-;2105:119;2263:1;2288:53;2333:7;2324:6;2313:9;2309:22;2288:53;:::i;:::-;2278:63;;2234:117;2029:329;;;;:::o;2364:117::-;2473:1;2470;2463:12;2487:102;2528:6;2579:2;2575:7;2570:2;2563:5;2559:14;2555:28;2545:38;;2487:102;;;:::o;2595:180::-;2643:77;2640:1;2633:88;2740:4;2737:1;2730:15;2764:4;2761:1;2754:15;2781:281;2864:27;2886:4;2864:27;:::i;:::-;2856:6;2852:40;2994:6;2982:10;2979:22;2958:18;2946:10;2943:34;2940:62;2937:88;;;3005:18;;:::i;:::-;2937:88;3045:10;3041:2;3034:22;2824:238;2781:281;;:::o;3068:129::-;3102:6;3129:20;;:::i;:::-;3119:30;;3158:33;3186:4;3178:6;3158:33;:::i;:::-;3068:129;;;:::o;3203:311::-;3280:4;3370:18;3362:6;3359:30;3356:56;;;3392:18;;:::i;:::-;3356:56;3442:4;3434:6;3430:17;3422:25;;3502:4;3496;3492:15;3484:23;;3203:311;;;:::o;3520:117::-;3629:1;3626;3619:12;3660:710;3756:5;3781:81;3797:64;3854:6;3797:64;:::i;:::-;3781:81;:::i;:::-;3772:90;;3882:5;3911:6;3904:5;3897:21;3945:4;3938:5;3934:16;3927:23;;3998:4;3990:6;3986:17;3978:6;3974:30;4027:3;4019:6;4016:15;4013:122;;;4046:79;;:::i;:::-;4013:122;4161:6;4144:220;4178:6;4173:3;4170:15;4144:220;;;4253:3;4282:37;4315:3;4303:10;4282:37;:::i;:::-;4277:3;4270:50;4349:4;4344:3;4340:14;4333:21;;4220:144;4204:4;4199:3;4195:14;4188:21;;4144:220;;;4148:21;3762:608;;3660:710;;;;;:::o;4393:370::-;4464:5;4513:3;4506:4;4498:6;4494:17;4490:27;4480:122;;4521:79;;:::i;:::-;4480:122;4638:6;4625:20;4663:94;4753:3;4745:6;4738:4;4730:6;4726:17;4663:94;:::i;:::-;4654:103;;4470:293;4393:370;;;;:::o;4769:311::-;4846:4;4936:18;4928:6;4925:30;4922:56;;;4958:18;;:::i;:::-;4922:56;5008:4;5000:6;4996:17;4988:25;;5068:4;5062;5058:15;5050:23;;4769:311;;;:::o;5103:710::-;5199:5;5224:81;5240:64;5297:6;5240:64;:::i;:::-;5224:81;:::i;:::-;5215:90;;5325:5;5354:6;5347:5;5340:21;5388:4;5381:5;5377:16;5370:23;;5441:4;5433:6;5429:17;5421:6;5417:30;5470:3;5462:6;5459:15;5456:122;;;5489:79;;:::i;:::-;5456:122;5604:6;5587:220;5621:6;5616:3;5613:15;5587:220;;;5696:3;5725:37;5758:3;5746:10;5725:37;:::i;:::-;5720:3;5713:50;5792:4;5787:3;5783:14;5776:21;;5663:144;5647:4;5642:3;5638:14;5631:21;;5587:220;;;5591:21;5205:608;;5103:710;;;;;:::o;5836:370::-;5907:5;5956:3;5949:4;5941:6;5937:17;5933:27;5923:122;;5964:79;;:::i;:::-;5923:122;6081:6;6068:20;6106:94;6196:3;6188:6;6181:4;6173:6;6169:17;6106:94;:::i;:::-;6097:103;;5913:293;5836:370;;;;:::o;6212:1039::-;6339:6;6347;6355;6404:2;6392:9;6383:7;6379:23;6375:32;6372:119;;;6410:79;;:::i;:::-;6372:119;6558:1;6547:9;6543:17;6530:31;6588:18;6580:6;6577:30;6574:117;;;6610:79;;:::i;:::-;6574:117;6715:78;6785:7;6776:6;6765:9;6761:22;6715:78;:::i;:::-;6705:88;;6501:302;6870:2;6859:9;6855:18;6842:32;6901:18;6893:6;6890:30;6887:117;;;6923:79;;:::i;:::-;6887:117;7028:78;7098:7;7089:6;7078:9;7074:22;7028:78;:::i;:::-;7018:88;;6813:303;7155:2;7181:53;7226:7;7217:6;7206:9;7202:22;7181:53;:::i;:::-;7171:63;;7126:118;6212:1039;;;;;:::o;7257:329::-;7316:6;7365:2;7353:9;7344:7;7340:23;7336:32;7333:119;;;7371:79;;:::i;:::-;7333:119;7491:1;7516:53;7561:7;7552:6;7541:9;7537:22;7516:53;:::i;:::-;7506:63;;7462:117;7257:329;;;;:::o;7592:894::-;7710:6;7718;7767:2;7755:9;7746:7;7742:23;7738:32;7735:119;;;7773:79;;:::i;:::-;7735:119;7921:1;7910:9;7906:17;7893:31;7951:18;7943:6;7940:30;7937:117;;;7973:79;;:::i;:::-;7937:117;8078:78;8148:7;8139:6;8128:9;8124:22;8078:78;:::i;:::-;8068:88;;7864:302;8233:2;8222:9;8218:18;8205:32;8264:18;8256:6;8253:30;8250:117;;;8286:79;;:::i;:::-;8250:117;8391:78;8461:7;8452:6;8441:9;8437:22;8391:78;:::i;:::-;8381:88;;8176:303;7592:894;;;;;:::o;8492:619::-;8569:6;8577;8585;8634:2;8622:9;8613:7;8609:23;8605:32;8602:119;;;8640:79;;:::i;:::-;8602:119;8760:1;8785:53;8830:7;8821:6;8810:9;8806:22;8785:53;:::i;:::-;8775:63;;8731:117;8887:2;8913:53;8958:7;8949:6;8938:9;8934:22;8913:53;:::i;:::-;8903:63;;8858:118;9015:2;9041:53;9086:7;9077:6;9066:9;9062:22;9041:53;:::i;:::-;9031:63;;8986:118;8492:619;;;;;:::o;9117:90::-;9151:7;9194:5;9187:13;9180:21;9169:32;;9117:90;;;:::o;9213:109::-;9294:21;9309:5;9294:21;:::i;:::-;9289:3;9282:34;9213:109;;:::o;9328:210::-;9415:4;9453:2;9442:9;9438:18;9430:26;;9466:65;9528:1;9517:9;9513:17;9504:6;9466:65;:::i;:::-;9328:210;;;;:::o;9544:118::-;9631:24;9649:5;9631:24;:::i;:::-;9626:3;9619:37;9544:118;;:::o;9668:222::-;9761:4;9799:2;9788:9;9784:18;9776:26;;9812:71;9880:1;9869:9;9865:17;9856:6;9812:71;:::i;:::-;9668:222;;;;:::o;9896:474::-;9964:6;9972;10021:2;10009:9;10000:7;9996:23;9992:32;9989:119;;;10027:79;;:::i;:::-;9989:119;10147:1;10172:53;10217:7;10208:6;10197:9;10193:22;10172:53;:::i;:::-;10162:63;;10118:117;10274:2;10300:53;10345:7;10336:6;10325:9;10321:22;10300:53;:::i;:::-;10290:63;;10245:118;9896:474;;;;;:::o;10376:60::-;10404:3;10425:5;10418:12;;10376:60;;;:::o;10442:142::-;10492:9;10525:53;10543:34;10552:24;10570:5;10552:24;:::i;:::-;10543:34;:::i;:::-;10525:53;:::i;:::-;10512:66;;10442:142;;;:::o;10590:126::-;10640:9;10673:37;10704:5;10673:37;:::i;:::-;10660:50;;10590:126;;;:::o;10722:142::-;10788:9;10821:37;10852:5;10821:37;:::i;:::-;10808:50;;10722:142;;;:::o;10870:163::-;10973:53;11020:5;10973:53;:::i;:::-;10968:3;10961:66;10870:163;;:::o;11039:254::-;11148:4;11186:2;11175:9;11171:18;11163:26;;11199:87;11283:1;11272:9;11268:17;11259:6;11199:87;:::i;:::-;11039:254;;;;:::o;11299:169::-;11383:11;11417:6;11412:3;11405:19;11457:4;11452:3;11448:14;11433:29;;11299:169;;;;:::o;11474:180::-;11614:32;11610:1;11602:6;11598:14;11591:56;11474:180;:::o;11660:366::-;11802:3;11823:67;11887:2;11882:3;11823:67;:::i;:::-;11816:74;;11899:93;11988:3;11899:93;:::i;:::-;12017:2;12012:3;12008:12;12001:19;;11660:366;;;:::o;12032:419::-;12198:4;12236:2;12225:9;12221:18;12213:26;;12285:9;12279:4;12275:20;12271:1;12260:9;12256:17;12249:47;12313:131;12439:4;12313:131;:::i;:::-;12305:139;;12032:419;;;:::o;12457:180::-;12505:77;12502:1;12495:88;12602:4;12599:1;12592:15;12626:4;12623:1;12616:15;12643:102;12685:8;12732:5;12729:1;12725:13;12704:34;;12643:102;;;:::o;12751:848::-;12812:5;12819:4;12843:6;12834:15;;12867:5;12858:14;;12881:712;12902:1;12892:8;12889:15;12881:712;;;12997:4;12992:3;12988:14;12982:4;12979:24;12976:50;;;13006:18;;:::i;:::-;12976:50;13056:1;13046:8;13042:16;13039:451;;;13471:4;13464:5;13460:16;13451:25;;13039:451;13521:4;13515;13511:15;13503:23;;13551:32;13574:8;13551:32;:::i;:::-;13539:44;;12881:712;;;12751:848;;;;;;;:::o;13605:1073::-;13659:5;13850:8;13840:40;;13871:1;13862:10;;13873:5;;13840:40;13899:4;13889:36;;13916:1;13907:10;;13918:5;;13889:36;13985:4;14033:1;14028:27;;;;14069:1;14064:191;;;;13978:277;;14028:27;14046:1;14037:10;;14048:5;;;14064:191;14109:3;14099:8;14096:17;14093:43;;;14116:18;;:::i;:::-;14093:43;14165:8;14162:1;14158:16;14149:25;;14200:3;14193:5;14190:14;14187:40;;;14207:18;;:::i;:::-;14187:40;14240:5;;;13978:277;;14364:2;14354:8;14351:16;14345:3;14339:4;14336:13;14332:36;14314:2;14304:8;14301:16;14296:2;14290:4;14287:12;14283:35;14267:111;14264:246;;;14420:8;14414:4;14410:19;14401:28;;14455:3;14448:5;14445:14;14442:40;;;14462:18;;:::i;:::-;14442:40;14495:5;;14264:246;14535:42;14573:3;14563:8;14557:4;14554:1;14535:42;:::i;:::-;14520:57;;;;14609:4;14604:3;14600:14;14593:5;14590:25;14587:51;;;14618:18;;:::i;:::-;14587:51;14667:4;14660:5;14656:16;14647:25;;13605:1073;;;;;;:::o;14684:285::-;14744:5;14768:23;14786:4;14768:23;:::i;:::-;14760:31;;14812:27;14830:8;14812:27;:::i;:::-;14800:39;;14858:104;14895:66;14885:8;14879:4;14858:104;:::i;:::-;14849:113;;14684:285;;;;:::o;14975:182::-;15115:34;15111:1;15103:6;15099:14;15092:58;14975:182;:::o;15163:366::-;15305:3;15326:67;15390:2;15385:3;15326:67;:::i;:::-;15319:74;;15402:93;15491:3;15402:93;:::i;:::-;15520:2;15515:3;15511:12;15504:19;;15163:366;;;:::o;15535:419::-;15701:4;15739:2;15728:9;15724:18;15716:26;;15788:9;15782:4;15778:20;15774:1;15763:9;15759:17;15752:47;15816:131;15942:4;15816:131;:::i;:::-;15808:139;;15535:419;;;:::o;15960:220::-;16100:34;16096:1;16088:6;16084:14;16077:58;16169:3;16164:2;16156:6;16152:15;16145:28;15960:220;:::o;16186:366::-;16328:3;16349:67;16413:2;16408:3;16349:67;:::i;:::-;16342:74;;16425:93;16514:3;16425:93;:::i;:::-;16543:2;16538:3;16534:12;16527:19;;16186:366;;;:::o;16558:419::-;16724:4;16762:2;16751:9;16747:18;16739:26;;16811:9;16805:4;16801:20;16797:1;16786:9;16782:17;16775:47;16839:131;16965:4;16839:131;:::i;:::-;16831:139;;16558:419;;;:::o;16983:234::-;17123:34;17119:1;17111:6;17107:14;17100:58;17192:17;17187:2;17179:6;17175:15;17168:42;16983:234;:::o;17223:366::-;17365:3;17386:67;17450:2;17445:3;17386:67;:::i;:::-;17379:74;;17462:93;17551:3;17462:93;:::i;:::-;17580:2;17575:3;17571:12;17564:19;;17223:366;;;:::o;17595:419::-;17761:4;17799:2;17788:9;17784:18;17776:26;;17848:9;17842:4;17838:20;17834:1;17823:9;17819:17;17812:47;17876:131;18002:4;17876:131;:::i;:::-;17868:139;;17595:419;;;:::o;18020:180::-;18068:77;18065:1;18058:88;18165:4;18162:1;18155:15;18189:4;18186:1;18179:15;18206:179;18346:31;18342:1;18334:6;18330:14;18323:55;18206:179;:::o;18391:366::-;18533:3;18554:67;18618:2;18613:3;18554:67;:::i;:::-;18547:74;;18630:93;18719:3;18630:93;:::i;:::-;18748:2;18743:3;18739:12;18732:19;;18391:366;;;:::o;18763:419::-;18929:4;18967:2;18956:9;18952:18;18944:26;;19016:9;19010:4;19006:20;19002:1;18991:9;18987:17;18980:47;19044:131;19170:4;19044:131;:::i;:::-;19036:139;;18763:419;;;:::o;19188:191::-;19228:3;19247:20;19265:1;19247:20;:::i;:::-;19242:25;;19281:20;19299:1;19281:20;:::i;:::-;19276:25;;19324:1;19321;19317:9;19310:16;;19345:3;19342:1;19339:10;19336:36;;;19352:18;;:::i;:::-;19336:36;19188:191;;;;:::o;19385:248::-;19525:34;19521:1;19513:6;19509:14;19502:58;19594:31;19589:2;19581:6;19577:15;19570:56;19385:248;:::o;19639:366::-;19781:3;19802:67;19866:2;19861:3;19802:67;:::i;:::-;19795:74;;19878:93;19967:3;19878:93;:::i;:::-;19996:2;19991:3;19987:12;19980:19;;19639:366;;;:::o;20011:419::-;20177:4;20215:2;20204:9;20200:18;20192:26;;20264:9;20258:4;20254:20;20250:1;20239:9;20235:17;20228:47;20292:131;20418:4;20292:131;:::i;:::-;20284:139;;20011:419;;;:::o;20436:180::-;20576:32;20572:1;20564:6;20560:14;20553:56;20436:180;:::o;20622:366::-;20764:3;20785:67;20849:2;20844:3;20785:67;:::i;:::-;20778:74;;20861:93;20950:3;20861:93;:::i;:::-;20979:2;20974:3;20970:12;20963:19;;20622:366;;;:::o;20994:419::-;21160:4;21198:2;21187:9;21183:18;21175:26;;21247:9;21241:4;21237:20;21233:1;21222:9;21218:17;21211:47;21275:131;21401:4;21275:131;:::i;:::-;21267:139;;20994:419;;;:::o;21419:233::-;21458:3;21481:24;21499:5;21481:24;:::i;:::-;21472:33;;21527:66;21520:5;21517:77;21514:103;;21597:18;;:::i;:::-;21514:103;21644:1;21637:5;21633:13;21626:20;;21419:233;;;:::o;21658:225::-;21798:34;21794:1;21786:6;21782:14;21775:58;21867:8;21862:2;21854:6;21850:15;21843:33;21658:225;:::o;21889:366::-;22031:3;22052:67;22116:2;22111:3;22052:67;:::i;:::-;22045:74;;22128:93;22217:3;22128:93;:::i;:::-;22246:2;22241:3;22237:12;22230:19;;21889:366;;;:::o;22261:419::-;22427:4;22465:2;22454:9;22450:18;22442:26;;22514:9;22508:4;22504:20;22500:1;22489:9;22485:17;22478:47;22542:131;22668:4;22542:131;:::i;:::-;22534:139;;22261:419;;;:::o;22686:86::-;22721:7;22761:4;22754:5;22750:16;22739:27;;22686:86;;;:::o;22778:118::-;22849:22;22865:5;22849:22;:::i;:::-;22842:5;22839:33;22829:61;;22886:1;22883;22876:12;22829:61;22778:118;:::o;22902:139::-;22957:5;22988:6;22982:13;22973:22;;23004:31;23029:5;23004:31;:::i;:::-;22902:139;;;;:::o;23047:347::-;23115:6;23164:2;23152:9;23143:7;23139:23;23135:32;23132:119;;;23170:79;;:::i;:::-;23132:119;23290:1;23315:62;23369:7;23360:6;23349:9;23345:22;23315:62;:::i;:::-;23305:72;;23261:126;23047:347;;;;:::o;23400:178::-;23540:30;23536:1;23528:6;23524:14;23517:54;23400:178;:::o;23584:366::-;23726:3;23747:67;23811:2;23806:3;23747:67;:::i;:::-;23740:74;;23823:93;23912:3;23823:93;:::i;:::-;23941:2;23936:3;23932:12;23925:19;;23584:366;;;:::o;23956:419::-;24122:4;24160:2;24149:9;24145:18;24137:26;;24209:9;24203:4;24199:20;24195:1;24184:9;24180:17;24173:47;24237:131;24363:4;24237:131;:::i;:::-;24229:139;;23956:419;;;:::o;24381:181::-;24521:33;24517:1;24509:6;24505:14;24498:57;24381:181;:::o;24568:366::-;24710:3;24731:67;24795:2;24790:3;24731:67;:::i;:::-;24724:74;;24807:93;24896:3;24807:93;:::i;:::-;24925:2;24920:3;24916:12;24909:19;;24568:366;;;:::o;24940:419::-;25106:4;25144:2;25133:9;25129:18;25121:26;;25193:9;25187:4;25183:20;25179:1;25168:9;25164:17;25157:47;25221:131;25347:4;25221:131;:::i;:::-;25213:139;;24940:419;;;:::o;25365:223::-;25505:34;25501:1;25493:6;25489:14;25482:58;25574:6;25569:2;25561:6;25557:15;25550:31;25365:223;:::o;25594:366::-;25736:3;25757:67;25821:2;25816:3;25757:67;:::i;:::-;25750:74;;25833:93;25922:3;25833:93;:::i;:::-;25951:2;25946:3;25942:12;25935:19;;25594:366;;;:::o;25966:419::-;26132:4;26170:2;26159:9;26155:18;26147:26;;26219:9;26213:4;26209:20;26205:1;26194:9;26190:17;26183:47;26247:131;26373:4;26247:131;:::i;:::-;26239:139;;25966:419;;;:::o;26391:221::-;26531:34;26527:1;26519:6;26515:14;26508:58;26600:4;26595:2;26587:6;26583:15;26576:29;26391:221;:::o;26618:366::-;26760:3;26781:67;26845:2;26840:3;26781:67;:::i;:::-;26774:74;;26857:93;26946:3;26857:93;:::i;:::-;26975:2;26970:3;26966:12;26959:19;;26618:366;;;:::o;26990:419::-;27156:4;27194:2;27183:9;27179:18;27171:26;;27243:9;27237:4;27233:20;27229:1;27218:9;27214:17;27207:47;27271:131;27397:4;27271:131;:::i;:::-;27263:139;;26990:419;;;:::o;27415:225::-;27555:34;27551:1;27543:6;27539:14;27532:58;27624:8;27619:2;27611:6;27607:15;27600:33;27415:225;:::o;27646:366::-;27788:3;27809:67;27873:2;27868:3;27809:67;:::i;:::-;27802:74;;27885:93;27974:3;27885:93;:::i;:::-;28003:2;27998:3;27994:12;27987:19;;27646:366;;;:::o;28018:419::-;28184:4;28222:2;28211:9;28207:18;28199:26;;28271:9;28265:4;28261:20;28257:1;28246:9;28242:17;28235:47;28299:131;28425:4;28299:131;:::i;:::-;28291:139;;28018:419;;;:::o;28443:241::-;28583:34;28579:1;28571:6;28567:14;28560:58;28652:24;28647:2;28639:6;28635:15;28628:49;28443:241;:::o;28690:366::-;28832:3;28853:67;28917:2;28912:3;28853:67;:::i;:::-;28846:74;;28929:93;29018:3;28929:93;:::i;:::-;29047:2;29042:3;29038:12;29031:19;;28690:366;;;:::o;29062:419::-;29228:4;29266:2;29255:9;29251:18;29243:26;;29315:9;29309:4;29305:20;29301:1;29290:9;29286:17;29279:47;29343:131;29469:4;29343:131;:::i;:::-;29335:139;;29062:419;;;:::o;29487:181::-;29627:33;29623:1;29615:6;29611:14;29604:57;29487:181;:::o;29674:366::-;29816:3;29837:67;29901:2;29896:3;29837:67;:::i;:::-;29830:74;;29913:93;30002:3;29913:93;:::i;:::-;30031:2;30026:3;30022:12;30015:19;;29674:366;;;:::o;30046:419::-;30212:4;30250:2;30239:9;30235:18;30227:26;;30299:9;30293:4;30289:20;30285:1;30274:9;30270:17;30263:47;30327:131;30453:4;30327:131;:::i;:::-;30319:139;;30046:419;;;:::o;30471:332::-;30592:4;30630:2;30619:9;30615:18;30607:26;;30643:71;30711:1;30700:9;30696:17;30687:6;30643:71;:::i;:::-;30724:72;30792:2;30781:9;30777:18;30768:6;30724:72;:::i;:::-;30471:332;;;;;:::o;30809:116::-;30879:21;30894:5;30879:21;:::i;:::-;30872:5;30869:32;30859:60;;30915:1;30912;30905:12;30859:60;30809:116;:::o;30931:137::-;30985:5;31016:6;31010:13;31001:22;;31032:30;31056:5;31032:30;:::i;:::-;30931:137;;;;:::o;31074:345::-;31141:6;31190:2;31178:9;31169:7;31165:23;31161:32;31158:119;;;31196:79;;:::i;:::-;31158:119;31316:1;31341:61;31394:7;31385:6;31374:9;31370:22;31341:61;:::i;:::-;31331:71;;31287:125;31074:345;;;;:::o;31425:143::-;31482:5;31513:6;31507:13;31498:22;;31529:33;31556:5;31529:33;:::i;:::-;31425:143;;;;:::o;31574:351::-;31644:6;31693:2;31681:9;31672:7;31668:23;31664:32;31661:119;;;31699:79;;:::i;:::-;31661:119;31819:1;31844:64;31900:7;31891:6;31880:9;31876:22;31844:64;:::i;:::-;31834:74;;31790:128;31574:351;;;;:::o;31931:410::-;31971:7;31994:20;32012:1;31994:20;:::i;:::-;31989:25;;32028:20;32046:1;32028:20;:::i;:::-;32023:25;;32083:1;32080;32076:9;32105:30;32123:11;32105:30;:::i;:::-;32094:41;;32284:1;32275:7;32271:15;32268:1;32265:22;32245:1;32238:9;32218:83;32195:139;;32314:18;;:::i;:::-;32195:139;31979:362;31931:410;;;;:::o;32347:180::-;32395:77;32392:1;32385:88;32492:4;32489:1;32482:15;32516:4;32513:1;32506:15;32533:185;32573:1;32590:20;32608:1;32590:20;:::i;:::-;32585:25;;32624:20;32642:1;32624:20;:::i;:::-;32619:25;;32663:1;32653:35;;32668:18;;:::i;:::-;32653:35;32710:1;32707;32703:9;32698:14;;32533:185;;;;:::o;32724:442::-;32873:4;32911:2;32900:9;32896:18;32888:26;;32924:71;32992:1;32981:9;32977:17;32968:6;32924:71;:::i;:::-;33005:72;33073:2;33062:9;33058:18;33049:6;33005:72;:::i;:::-;33087;33155:2;33144:9;33140:18;33131:6;33087:72;:::i;:::-;32724:442;;;;;;:::o;33172:229::-;33312:34;33308:1;33300:6;33296:14;33289:58;33381:12;33376:2;33368:6;33364:15;33357:37;33172:229;:::o;33407:366::-;33549:3;33570:67;33634:2;33629:3;33570:67;:::i;:::-;33563:74;;33646:93;33735:3;33646:93;:::i;:::-;33764:2;33759:3;33755:12;33748:19;;33407:366;;;:::o;33779:419::-;33945:4;33983:2;33972:9;33968:18;33960:26;;34032:9;34026:4;34022:20;34018:1;34007:9;34003:17;33996:47;34060:131;34186:4;34060:131;:::i;:::-;34052:139;;33779:419;;;:::o;34204:225::-;34344:34;34340:1;34332:6;34328:14;34321:58;34413:8;34408:2;34400:6;34396:15;34389:33;34204:225;:::o;34435:366::-;34577:3;34598:67;34662:2;34657:3;34598:67;:::i;:::-;34591:74;;34674:93;34763:3;34674:93;:::i;:::-;34792:2;34787:3;34783:12;34776:19;;34435:366;;;:::o;34807:419::-;34973:4;35011:2;35000:9;34996:18;34988:26;;35060:9;35054:4;35050:20;35046:1;35035:9;35031:17;35024:47;35088:131;35214:4;35088:131;:::i;:::-;35080:139;;34807:419;;;:::o;35232:179::-;35372:31;35368:1;35360:6;35356:14;35349:55;35232:179;:::o;35417:366::-;35559:3;35580:67;35644:2;35639:3;35580:67;:::i;:::-;35573:74;;35656:93;35745:3;35656:93;:::i;:::-;35774:2;35769:3;35765:12;35758:19;;35417:366;;;:::o;35789:419::-;35955:4;35993:2;35982:9;35978:18;35970:26;;36042:9;36036:4;36032:20;36028:1;36017:9;36013:17;36006:47;36070:131;36196:4;36070:131;:::i;:::-;36062:139;;35789:419;;;:::o;36214:98::-;36265:6;36299:5;36293:12;36283:22;;36214:98;;;:::o;36318:147::-;36419:11;36456:3;36441:18;;36318:147;;;;:::o;36471:246::-;36552:1;36562:113;36576:6;36573:1;36570:13;36562:113;;;36661:1;36656:3;36652:11;36646:18;36642:1;36637:3;36633:11;36626:39;36598:2;36595:1;36591:10;36586:15;;36562:113;;;36709:1;36700:6;36695:3;36691:16;36684:27;36533:184;36471:246;;;:::o;36723:386::-;36827:3;36855:38;36887:5;36855:38;:::i;:::-;36909:88;36990:6;36985:3;36909:88;:::i;:::-;36902:95;;37006:65;37064:6;37059:3;37052:4;37045:5;37041:16;37006:65;:::i;:::-;37096:6;37091:3;37087:16;37080:23;;36831:278;36723:386;;;;:::o;37115:271::-;37245:3;37267:93;37356:3;37347:6;37267:93;:::i;:::-;37260:100;;37377:3;37370:10;;37115:271;;;;:::o;37392:99::-;37444:6;37478:5;37472:12;37462:22;;37392:99;;;:::o;37497:377::-;37585:3;37613:39;37646:5;37613:39;:::i;:::-;37668:71;37732:6;37727:3;37668:71;:::i;:::-;37661:78;;37748:65;37806:6;37801:3;37794:4;37787:5;37783:16;37748:65;:::i;:::-;37838:29;37860:6;37838:29;:::i;:::-;37833:3;37829:39;37822:46;;37589:285;37497:377;;;;:::o;37880:313::-;37993:4;38031:2;38020:9;38016:18;38008:26;;38080:9;38074:4;38070:20;38066:1;38055:9;38051:17;38044:47;38108:78;38181:4;38172:6;38108:78;:::i;:::-;38100:86;;37880:313;;;;:::o
Swarm Source
ipfs://27048fecd0fa620442ac15450e9ec21617fca3cf00178a3b964091effe0d71bd
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | Ether (ETH) | 100.00% | $3,312.92 | 0.1558 | $516.18 |
Loading...
Loading
[ 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.