Overview
Max Total Supply
1,000,000,000,000,000 ENGOS
Holders
120 (0.00%)
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
32,430,970,441.547149125 ENGOSValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Engos
Compiler Version
v0.8.10+commit.fc410830
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion, Unlicense license, Audited
Contract Source Code (Solidity)Audit Report
/** *Submitted for verification at Etherscan.io on 2022-02-22 */ /** *Submitted for verification at Etherscan.io on 2022-01-13 */ // SPDX-License-Identifier: Unlicensed /** ¦¦¦¦¦¦¦ ¦¦¦ ¦¦ ¦¦¦¦¦¦ ¦¦¦¦¦¦ ¦¦¦¦¦¦¦ ¦¦ ¦¦¦¦ ¦¦ ¦¦ ¦¦ ¦¦ ¦¦ ¦¦¦¦¦ ¦¦ ¦¦ ¦¦ ¦¦ ¦¦¦ ¦¦ ¦¦ ¦¦¦¦¦¦¦ ¦¦ ¦¦ ¦¦ ¦¦ ¦¦ ¦¦ ¦¦ ¦¦ ¦¦ ¦¦¦¦¦¦¦ ¦¦ ¦¦¦¦ ¦¦¦¦¦¦ ¦¦¦¦¦¦ ¦¦¦¦¦¦¦ */ pragma solidity 0.8.10; /** * @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); } /** * @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; } } /** * @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); } } /** * @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); } } } } /** * @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. */ // 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; } } } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } /** Name: Engos Symbol:EGO Digit: 9 digit decimal Owner wallet deploy from: 0x56FBA6b95321DF366EEf57723667632D16Df610e Marketing wallet 1: 0x9610A10A55690E160844d98dEFdf9f4F3E6409f5 The buy tax 6% - 2% reflection, 2% marketing, 2% liquidity The sell tax 9% - 3% reflection, 3% marketing, 3% liquidity 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D // uniswap 0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3 // Testnet for pancake 0x10ED43C718714eb63d5aA57B78B54704E256024E // Mainnet for BSC */ contract Engos is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isExcludedFromFee; mapping (address => bool) private _isExcluded; address[] private _excluded; // Liquidity Pairs mapping (address => bool) public _isPair; // Banned contracts mapping (address => bool) public _isBanned; uint256 private constant MAX = ~uint256(0); uint256 private constant _tTotal = 1000000000000000 * 10**9; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; string private constant _name = "Engos"; string private constant _symbol = "ENGOS"; uint8 private constant _decimals = 9; // Wallets address public _MarketingWalletAddress; address public _liqWalletAddress; // Fees - all fee values represent 0.1% // Buy Fees uint256 public _buyTaxFee = 20; uint256 public _buyMarketingFee = 20; uint256 public _buyLiquidityFee = 20; // Sell Fees uint256 public _sellTaxFee = 30; uint256 public _sellMarketingFee = 30; uint256 public _sellLiquidityFee = 30; // Fees (Current) uint256 private _taxFee; uint256 private _MarketingFee; uint256 private _liquidityFee; bool public _contractFeesEnabled = true; mapping (address => bool) private _isBlackListedBot; address[] private _blackListedBots; function isBot(address account) public view returns (bool) { return _isBlackListedBot[account]; } IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; bool private inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; bool public swapEnabled = true; uint256 public _maxTxAmount = _tTotal; uint256 public numTokensSellToAddToLiquidity = 1000000000; // Events event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); event NumTokensSellToAddToLiquidityUpdated(uint256 numTokensSellToAddToLiquidity); event SetContractFeesEnabled(bool _bool); event RouterSet(address _router); event SetIsPair(address _address, bool _bool); event SetIsBanned(address _address, bool _bool); event SetSwapEnabled(bool enabled); event SetMarketingWalletAddress(address _address); event SetLiqWalletAddress(address _address); event WithdrawalBNB(uint256 _amount, address to); event WithdrawalToken(address _tokenAddr, uint256 _amount, address to); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor(address router, address MarketingWallet, address liqWallet) { _rOwned[owner()] = _rTotal; _setRouter(router); _MarketingWalletAddress = MarketingWallet; _liqWalletAddress = liqWallet; // Exclude owner, dev wallet, liq wallet, and this contract from fee _isExcludedFromFee[owner()] = true; _isExcludedFromFee[MarketingWallet] = true; _isExcludedFromFee[liqWallet] = true; _isExcludedFromFee[address(this)] = true; emit Transfer(address(0), owner(), _tTotal); } function name() external pure returns (string memory) { return _name; } function symbol() external pure returns (string memory) { return _symbol; } function decimals() external pure returns (uint8) { return _decimals; } function totalSupply() external pure override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) external override returns (bool) { require(!_isBlackListedBot[recipient], "You have no power here!"); require(!_isBlackListedBot[tx.origin], "You have no power here!"); _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) external view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) external override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) { require(!_isBlackListedBot[recipient], "You have no power here!"); require(!_isBlackListedBot[tx.origin], "You have no power here!"); _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) external virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function isExcludedFromReward(address account) external view returns (bool) { return _isExcluded[account]; } function totalFees() external view returns (uint256) { return _tFeeTotal; } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) external view returns(uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferFee) { (uint256 rAmount,,,,,,) = _getValues(tAmount); return rAmount; } else { (,uint256 rTransferAmount,,,,,) = _getValues(tAmount); return rTransferAmount; } } function tokenFromReflection(uint256 rAmount) public view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function excludeFromReward(address account) public onlyOwner() { require(!_isExcluded[account], "Account is already excluded"); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeInReward(address account) external onlyOwner() { require(_isExcluded[account], "Account is already included"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tdev) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takedev(tdev); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function excludeFromFee(address account) external onlyOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) external onlyOwner { _isExcludedFromFee[account] = false; } function setBuyTaxFeePercent(uint256 taxFee) external onlyOwner() { _buyTaxFee = taxFee; require(_buyTaxFee + _buyMarketingFee + _buyLiquidityFee <= 100, "Total fees exceed 100%"); } function setBuyMarketingFeePercent(uint256 MarketingFee) external onlyOwner() { _buyMarketingFee = MarketingFee; require(_buyTaxFee + _buyMarketingFee + _buyLiquidityFee <= 100, "Total fees exceed 100%"); } function setBuyLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() { _buyLiquidityFee = liquidityFee; require(_buyTaxFee + _buyMarketingFee + _buyLiquidityFee <= 100, "Total fees exceed 100%"); } function setSellTaxFeePercent(uint256 taxFee) external onlyOwner() { _sellTaxFee = taxFee; require(_sellTaxFee + _sellMarketingFee + _sellLiquidityFee <= 100, "Total fees exceed 100%"); } function setSellMarketingFeePercent(uint256 MarketingFee) external onlyOwner() { _sellMarketingFee = MarketingFee; require(_sellTaxFee + _sellMarketingFee + _sellLiquidityFee <= 100, "Total fees exceed 100%"); } function setSellLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() { _sellLiquidityFee = liquidityFee; require(_sellTaxFee + _sellMarketingFee + _sellLiquidityFee <= 100, "Total fees exceed 100%"); } function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() { _maxTxAmount = _tTotal.mul(maxTxPercent).div( 10**2 ); } function setSwapAndLiquifyEnabled(bool _enabled) external onlyOwner() { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } function setSwapEnabled(bool _enabled) external onlyOwner() { swapEnabled = _enabled; emit SetSwapEnabled(_enabled); } function setMarketingWalletAddress(address _address) external onlyOwner() { require(_address != address(0), "Error: MarketingWallet address cannot be zero address"); _MarketingWalletAddress = _address; emit SetMarketingWalletAddress(_address); } function setLiqWalletAddress(address _address) external onlyOwner() { require(_address != address(0), "Error: liqWallet address cannot be zero address"); _liqWalletAddress = _address; emit SetLiqWalletAddress(_address); } function setNumTokensSellToAddToLiquidity(uint256 _amount) external onlyOwner() { require(_amount > 0); numTokensSellToAddToLiquidity = _amount; emit NumTokensSellToAddToLiquidityUpdated(_amount); } function setContractFeesEnabled(bool _bool) external onlyOwner() { _contractFeesEnabled = _bool; emit SetContractFeesEnabled(_bool); } function _setRouter(address _router) private { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(_router); uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).getPair(address(this), _uniswapV2Router.WETH()); if(uniswapV2Pair == address(0)) uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; setIsPair(uniswapV2Pair, true); emit RouterSet(_router); } function setRouter(address _router) external onlyOwner() { _setRouter(_router); } // to receive ETH from uniswapV2Router when swapping receive() external payable {} function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256, uint256) { (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tdev) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, tdev, _getRate()); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity, tdev); } function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256) { uint256 tFee = calculateTaxFee(tAmount); uint256 tLiquidity = calculateLiquidityFee(tAmount); uint256 tdev = calculateMarketingFee(tAmount); uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity).sub(tdev); return (tTransferAmount, tFee, tLiquidity, tdev); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 tdev, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rLiquidity = tLiquidity.mul(currentRate); uint256 rdev = tdev.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity).sub(rdev); return (rAmount, rTransferAmount, rFee); } function _getRate() private view returns(uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(tSupply); } function _getCurrentSupply() private view returns(uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _excluded.length; i++) { if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal); rSupply = rSupply.sub(_rOwned[_excluded[i]]); tSupply = tSupply.sub(_tOwned[_excluded[i]]); } if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _takeLiquidity(uint256 tLiquidity) private { uint256 currentRate = _getRate(); uint256 rLiquidity = tLiquidity.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity); if(_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity); } function _takedev(uint256 tdev) private { uint256 currentRate = _getRate(); uint256 rdev = tdev.mul(currentRate); _rOwned[_MarketingWalletAddress] = _rOwned[_MarketingWalletAddress].add(rdev); if(_isExcluded[_MarketingWalletAddress]) _tOwned[_MarketingWalletAddress] = _tOwned[_MarketingWalletAddress].add(tdev); } function calculateTaxFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_taxFee).div( 10**3 ); } function calculateMarketingFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_MarketingFee).div( 10**3 ); } function calculateLiquidityFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_liquidityFee).div( 10**3 ); } function removeAllFee() private { _taxFee = 0; _MarketingFee = 0; _liquidityFee = 0; } function isExcludedFromFee(address account) external view returns(bool) { return _isExcludedFromFee[account]; } function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer( address from, address to, uint256 amount ) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); if(from != owner() && to != owner()) require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount."); if(!swapEnabled && (_isPair[to] || _isPair[from])) revert("Buying and selling is disabled"); if(_isBanned[from] || _isBanned[to]) { revert("Address is banned"); } // is the token balance of this contract address over the min number of // tokens that we need to initiate a swap + liquidity lock? // also, don't get caught in a circular liquidity event. // also, don't swap & liquify if sender is uniswap pair. uint256 contractTokenBalance = balanceOf(address(this)); if(contractTokenBalance >= _maxTxAmount) { contractTokenBalance = _maxTxAmount; } bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity; if ( overMinTokenBalance && !inSwapAndLiquify && _isPair[to] && swapAndLiquifyEnabled && !_isExcludedFromFee[from] ) { contractTokenBalance = numTokensSellToAddToLiquidity; swapAndLiquify(contractTokenBalance); } // Indicates if fee should be deducted from transfer bool takeFee = true; // Remove fees except for buying and selling if(!_isPair[from] && !_isPair[to]) { takeFee = false; } // Enable fees if contract fees are enabled and to or from is a contract if(_contractFeesEnabled && (from.isContract() || to.isContract())) { takeFee = true; } // If any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){ takeFee = false; } // Set buy fees if(_isPair[from] || from.isContract()) { _taxFee = _buyTaxFee; _MarketingFee = _buyMarketingFee; _liquidityFee = _buyLiquidityFee; } // Set sell fees if(_isPair[to] || to.isContract()) { _taxFee = _sellTaxFee; _MarketingFee = _sellMarketingFee; _liquidityFee = _sellLiquidityFee; } // Transfer amount, it will take tax, burn, liquidity fee _tokenTransfer(from,to,amount,takeFee); } function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap { // split the contract balance into halves uint256 half = contractTokenBalance.div(2); uint256 otherHalf = contractTokenBalance.sub(half); // capture the contract's current ETH balance. // this is so that we can capture exactly the amount of ETH that the // swap creates, and not make the liquidity event include any ETH that // has been manually sent to the contract uint256 initialBalance = address(this).balance; // swap tokens for ETH swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered // how much ETH did we just swap into? uint256 newBalance = address(this).balance.sub(initialBalance); // add liquidity to uniswap addLiquidity(otherHalf, newBalance); emit SwapAndLiquify(half, newBalance, otherHalf); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable _liqWalletAddress, block.timestamp ); emit Transfer(address(this), uniswapV2Pair, tokenAmount); } //this method is responsible for taking all fee, if takeFee is true function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private { if(!takeFee) removeAllFee(); if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, amount); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } } function _transferStandard(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tdev) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takedev(tdev); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferToExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tdev) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takedev(tdev); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tdev) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takedev(tdev); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function setIsPair(address _address, bool value) public onlyOwner() { _isPair[_address] = value; emit SetIsPair(_address, value); } function setIsBanned(address _address, bool value) external onlyOwner() { require(_address.isContract(), "Error: Can only ban or unban contract addresses"); _isBanned[_address] = value; emit SetIsBanned(_address, value); } function withdrawalToken(address _tokenAddr, uint _amount, address to) external onlyOwner() { IERC20 token = IERC20(_tokenAddr); token.transfer(to, _amount); emit WithdrawalToken(_tokenAddr, _amount, to); } function withdrawalBNB(uint _amount, address to) external onlyOwner() { require(address(this).balance >= _amount); payable(to).transfer(_amount); emit WithdrawalBNB(_amount, to); } function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _rTotal += amount; _rOwned[account] += amount; emit Transfer(address(0), account, amount); } function mint(uint256 amount) public onlyOwner { _mint(msg.sender, amount); } function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _rOwned[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); _rOwned[account] = accountBalance - amount; _rTotal -= amount; emit Transfer(account, address(0), amount); } function burn(uint256 amount) public onlyOwner { _burn(msg.sender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be to transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { } }
Contract Security Audit
- Interfi network - Mar 21th, 2022 - Security Audit Report
Contract ABI
API[{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"MarketingWallet","type":"address"},{"internalType":"address","name":"liqWallet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"numTokensSellToAddToLiquidity","type":"uint256"}],"name":"NumTokensSellToAddToLiquidityUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_router","type":"address"}],"name":"RouterSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"_bool","type":"bool"}],"name":"SetContractFeesEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"_bool","type":"bool"}],"name":"SetIsBanned","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"_bool","type":"bool"}],"name":"SetIsPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"}],"name":"SetLiqWalletAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"}],"name":"SetMarketingWalletAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SetSwapEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"to","type":"address"}],"name":"WithdrawalBNB","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_tokenAddr","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"to","type":"address"}],"name":"WithdrawalToken","type":"event"},{"inputs":[],"name":"_MarketingWalletAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_contractFeesEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBanned","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liqWalletAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setBuyLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"MarketingFee","type":"uint256"}],"name":"setBuyMarketingFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setBuyTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_bool","type":"bool"}],"name":"setContractFeesEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setIsBanned","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setIsPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setLiqWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setMarketingWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"setRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setSellLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"MarketingFee","type":"uint256"}],"name":"setSellMarketingFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setSellTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"withdrawalBNB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddr","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"withdrawalToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526200001c69d3c21bcecceda100000060001962000680565b6200002a90600019620006a3565b6009556014600d819055600e819055600f55601e601081905560118190556012556016805460ff19166001179055601a805461010160a81b61ffff60a81b1990911617905569d3c21bcecceda1000000601b55633b9aca00601c553480156200009257600080fd5b50604051620040f3380380620040f3833981016040819052620000b591620006e6565b620000c03362000220565b60095460016000620000da6000546001600160a01b031690565b6001600160a01b03168152602081019190915260400160002055620000ff8362000270565b600b80546001600160a01b038085166001600160a01b031992831617909255600c805492841692909116919091179055600160046000620001486000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055868216815260049093528183208054851660019081179091559085168352818320805485168217905530835291208054909216179055620001bf6000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef69d3c21bcecceda10000006040516200020f91815260200190565b60405180910390a350505062000755565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000819050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002b4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002da919062000730565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000328573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200034e919062000730565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa1580156200039a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003c0919062000730565b601a80546001600160a01b0319166001600160a01b039290921691821790556200055257806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000423573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000449919062000730565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000497573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004bd919062000730565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200050b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000531919062000730565b601a80546001600160a01b0319166001600160a01b03929092169190911790555b601980546001600160a01b0319166001600160a01b0383811691909117909155601a546200058391166001620005c4565b6040516001600160a01b03831681527fc6b438e6a8a59579ce6a4406cbd203b740e0d47b458aae6596339bcd40c40d15906020015b60405180910390a15050565b6000546001600160a01b03163314620006235760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640160405180910390fd5b6001600160a01b038216600081815260076020908152604091829020805460ff19168515159081179091558251938452908301527f92d4086705a3958aa2cd18830ddaff7bb93db05b6818910190392a55047397ee9101620005b8565b6000826200069e57634e487b7160e01b600052601260045260246000fd5b500690565b600082821015620006c457634e487b7160e01b600052601160045260246000fd5b500390565b80516001600160a01b0381168114620006e157600080fd5b919050565b600080600060608486031215620006fc57600080fd5b6200070784620006c9565b92506200071760208501620006c9565b91506200072760408501620006c9565b90509250925092565b6000602082840312156200074357600080fd5b6200074e82620006c9565b9392505050565b61398e80620007656000396000f3fe6080604052600436106103a65760003560e01c80637d1db4a5116101e7578063c49b9a801161010d578063e01af92c116100a0578063f0f165af1161006f578063f0f165af14610b52578063f2fde38b14610b72578063faef9e6714610b92578063fb81062914610bb257600080fd5b8063e01af92c14610adc578063ea2f0b3714610afc578063eedeacbe14610b1c578063efcc52de14610b3c57600080fd5b8063d12a7688116100dc578063d12a768814610a4a578063d543dbeb14610a60578063dc44b6a014610a80578063dd62ed3e14610a9657600080fd5b8063c49b9a80146109de578063c5d24189146109fe578063c860795214610a14578063d0e0352314610a2a57600080fd5b8063996c398511610185578063a928681c11610154578063a928681c1461093e578063c069d9561461095e578063c0d786551461098e578063c14a4239146109ae57600080fd5b8063996c3985146108be578063a0712d68146108de578063a457c2d7146108fe578063a9059cbb1461091e57600080fd5b80638da5cb5b116101c15780638da5cb5b1461083257806395558d841461085057806395d89b4114610870578063978e1cc81461089e57600080fd5b80637d1db4a5146107cd57806388790a68146107e357806388f82020146107f957600080fd5b806339509351116102cc5780634cb80fd51161026a5780635876ccc5116102395780635876ccc5146107575780636ddd17131461077757806370a0823114610798578063715018a6146107b857600080fd5b80634cb80fd5146106be5780634fab9edf146106de57806352390c02146106fe5780635342acb41461071e57600080fd5b8063437823ec116102a6578063437823ec1461063d5780634549b0391461065d57806349bd5a5e1461067d5780634a74bb021461069d57600080fd5b806339509351146105c45780633bbac579146105e457806342966c681461061d57600080fd5b8063200a692d116103445780632d838119116103135780632d83811914610548578063313ce5671461056857806335e17cb9146105845780633685d419146105a457600080fd5b8063200a692d146104d857806323b872dd146104ee5780632410d8871461050e5780632d513f361461052e57600080fd5b806311889b761161038057806311889b761461044457806313114a9d146104645780631694505e1461048357806318160ddd146104bb57600080fd5b806306fdde03146103b25780630844af26146103f2578063095ea7b31461041457600080fd5b366103ad57005b600080fd5b3480156103be57600080fd5b50604080518082019091526005815264456e676f7360d81b60208201525b6040516103e991906134ae565b60405180910390f35b3480156103fe57600080fd5b5061041261040d366004613503565b610bd2565b005b34801561042057600080fd5b5061043461042f366004613531565b610c73565b60405190151581526020016103e9565b34801561045057600080fd5b5061041261045f366004613503565b610c8a565b34801561047057600080fd5b50600a545b6040519081526020016103e9565b34801561048f57600080fd5b506019546104a3906001600160a01b031681565b6040516001600160a01b0390911681526020016103e9565b3480156104c757600080fd5b5069d3c21bcecceda1000000610475565b3480156104e457600080fd5b5061047560105481565b3480156104fa57600080fd5b5061043461050936600461355d565b610ccd565b34801561051a57600080fd5b506104126105293660046135ac565b610d9d565b34801561053a57600080fd5b506016546104349060ff1681565b34801561055457600080fd5b50610475610563366004613503565b610e2b565b34801561057457600080fd5b50604051600981526020016103e9565b34801561059057600080fd5b5061041261059f3660046135e5565b610eaf565b3480156105b057600080fd5b506104126105bf366004613627565b610fa0565b3480156105d057600080fd5b506104346105df366004613531565b611157565b3480156105f057600080fd5b506104346105ff366004613627565b6001600160a01b031660009081526017602052604090205460ff1690565b34801561062957600080fd5b50610412610638366004613503565b61118d565b34801561064957600080fd5b50610412610658366004613627565b6111c1565b34801561066957600080fd5b50610475610678366004613644565b61120f565b34801561068957600080fd5b50601a546104a3906001600160a01b031681565b3480156106a957600080fd5b50601a5461043490600160a81b900460ff1681565b3480156106ca57600080fd5b506104126106d9366004613627565b6112a6565b3480156106ea57600080fd5b506104126106f9366004613669565b611399565b34801561070a57600080fd5b50610412610719366004613627565b611404565b34801561072a57600080fd5b50610434610739366004613627565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561076357600080fd5b50610412610772366004613503565b611557565b34801561078357600080fd5b50601a5461043490600160b01b900460ff1681565b3480156107a457600080fd5b506104756107b3366004613627565b61159b565b3480156107c457600080fd5b506104126115fa565b3480156107d957600080fd5b50610475601b5481565b3480156107ef57600080fd5b5061047560125481565b34801561080557600080fd5b50610434610814366004613627565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561083e57600080fd5b506000546001600160a01b03166104a3565b34801561085c57600080fd5b50600c546104a3906001600160a01b031681565b34801561087c57600080fd5b50604080518082019091526005815264454e474f5360d81b60208201526103dc565b3480156108aa57600080fd5b506104126108b93660046135ac565b611630565b3480156108ca57600080fd5b506104126108d9366004613503565b611725565b3480156108ea57600080fd5b506104126108f9366004613503565b611769565b34801561090a57600080fd5b50610434610919366004613531565b61179d565b34801561092a57600080fd5b50610434610939366004613531565b6117ec565b34801561094a57600080fd5b50610412610959366004613503565b611860565b34801561096a57600080fd5b50610434610979366004613627565b60086020526000908152604090205460ff1681565b34801561099a57600080fd5b506104126109a9366004613627565b6118a4565b3480156109ba57600080fd5b506104346109c9366004613627565b60076020526000908152604090205460ff1681565b3480156109ea57600080fd5b506104126109f9366004613669565b6118d7565b348015610a0a57600080fd5b50610475600e5481565b348015610a2057600080fd5b5061047560115481565b348015610a3657600080fd5b50610412610a45366004613503565b61194e565b348015610a5657600080fd5b50610475601c5481565b348015610a6c57600080fd5b50610412610a7b366004613503565b611991565b348015610a8c57600080fd5b50610475600f5481565b348015610aa257600080fd5b50610475610ab1366004613686565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610ae857600080fd5b50610412610af7366004613669565b6119e0565b348015610b0857600080fd5b50610412610b17366004613627565b611a57565b348015610b2857600080fd5b50600b546104a3906001600160a01b031681565b348015610b4857600080fd5b50610475600d5481565b348015610b5e57600080fd5b50610412610b6d366004613503565b611aa2565b348015610b7e57600080fd5b50610412610b8d366004613627565b611b0e565b348015610b9e57600080fd5b50610412610bad3660046136b4565b611ba6565b348015610bbe57600080fd5b50610412610bcd366004613627565b611c52565b6000546001600160a01b03163314610c055760405162461bcd60e51b8152600401610bfc906136d9565b60405180910390fd5b600e819055600f54600d5460649190610c1f908490613724565b610c299190613724565b1115610c705760405162461bcd60e51b8152602060048201526016602482015275546f74616c206665657320657863656564203130302560501b6044820152606401610bfc565b50565b6000610c80338484611d38565b5060015b92915050565b6000546001600160a01b03163314610cb45760405162461bcd60e51b8152600401610bfc906136d9565b600d819055600f54600e5460649190610c1f9084613724565b6001600160a01b03821660009081526017602052604081205460ff1615610d065760405162461bcd60e51b8152600401610bfc9061373c565b3260009081526017602052604090205460ff1615610d365760405162461bcd60e51b8152600401610bfc9061373c565b610d41848484611e5d565b610d938433610d8e856040518060600160405280602881526020016138ec602891396001600160a01b038a1660009081526003602090815260408083203384529091529020549190612355565b611d38565b5060019392505050565b6000546001600160a01b03163314610dc75760405162461bcd60e51b8152600401610bfc906136d9565b6001600160a01b038216600081815260076020908152604091829020805460ff19168515159081179091558251938452908301527f92d4086705a3958aa2cd18830ddaff7bb93db05b6818910190392a55047397ee91015b60405180910390a15050565b6000600954821115610e925760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610bfc565b6000610e9c612381565b9050610ea883826123a4565b9392505050565b6000546001600160a01b03163314610ed95760405162461bcd60e51b8152600401610bfc906136d9565b60405163a9059cbb60e01b81526001600160a01b0382811660048301526024820184905284919082169063a9059cbb906044016020604051808303816000875af1158015610f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4f9190613773565b50604080516001600160a01b0386811682526020820186905284168183015290517f03e22ea144aa78f0a88a3bc6036c5f6d5bc2d276affbc5f88c38a9346c5b2eee9181900360600190a150505050565b6000546001600160a01b03163314610fca5760405162461bcd60e51b8152600401610bfc906136d9565b6001600160a01b03811660009081526005602052604090205460ff166110325760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c7564656400000000006044820152606401610bfc565b60005b60065481101561115357816001600160a01b03166006828154811061105c5761105c613790565b6000918252602090912001546001600160a01b031614156111415760068054611087906001906137a6565b8154811061109757611097613790565b600091825260209091200154600680546001600160a01b0390921691839081106110c3576110c3613790565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff19169055600680548061111b5761111b6137bd565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061114b816137d3565b915050611035565b5050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610c80918590610d8e90866123b0565b6000546001600160a01b031633146111b75760405162461bcd60e51b8152600401610bfc906136d9565b610c7033826123bc565b6000546001600160a01b031633146111eb5760405162461bcd60e51b8152600401610bfc906136d9565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b600069d3c21bcecceda100000083111561126b5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610bfc565b8161128b57600061127b846124f9565b50949650610c8495505050505050565b6000611296846124f9565b50939650610c8495505050505050565b6000546001600160a01b031633146112d05760405162461bcd60e51b8152600401610bfc906136d9565b6001600160a01b0381166113445760405162461bcd60e51b815260206004820152603560248201527f4572726f723a204d61726b6574696e6757616c6c657420616464726573732063604482015274616e6e6f74206265207a65726f206164647265737360581b6064820152608401610bfc565b600b80546001600160a01b0319166001600160a01b0383169081179091556040519081527fc4a1411139e23115772923254c039e2ecfed9a653a3a8db99706b25b50fa3122906020015b60405180910390a150565b6000546001600160a01b031633146113c35760405162461bcd60e51b8152600401610bfc906136d9565b6016805460ff19168215159081179091556040519081527f75b4185b2596596b18e7ded7eec3b258b81f659c5b4097d5023706248fb123e69060200161138e565b6000546001600160a01b0316331461142e5760405162461bcd60e51b8152600401610bfc906136d9565b6001600160a01b03811660009081526005602052604090205460ff16156114975760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610bfc565b6001600160a01b038116600090815260016020526040902054156114f1576001600160a01b0381166000908152600160205260409020546114d790610e2b565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b6000546001600160a01b031633146115815760405162461bcd60e51b8152600401610bfc906136d9565b60128190556011546010546064918391610c1f9190613724565b6001600160a01b03811660009081526005602052604081205460ff16156115d857506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610c8490610e2b565b6000546001600160a01b031633146116245760405162461bcd60e51b8152600401610bfc906136d9565b61162e6000612554565b565b6000546001600160a01b0316331461165a5760405162461bcd60e51b8152600401610bfc906136d9565b6001600160a01b0382163b6116c95760405162461bcd60e51b815260206004820152602f60248201527f4572726f723a2043616e206f6e6c792062616e206f7220756e62616e20636f6e60448201526e74726163742061646472657373657360881b6064820152608401610bfc565b6001600160a01b038216600081815260086020908152604091829020805460ff19168515159081179091558251938452908301527f80069036c5381e9b8bf3feeaddce86ce3886eaabaddb4b90926400a11ba6bd1a9101610e1f565b6000546001600160a01b0316331461174f5760405162461bcd60e51b8152600401610bfc906136d9565b600f819055600e54600d546064918391610c1f9190613724565b6000546001600160a01b031633146117935760405162461bcd60e51b8152600401610bfc906136d9565b610c7033826125a4565b6000610c803384610d8e85604051806060016040528060258152602001613934602591393360009081526003602090815260408083206001600160a01b038d1684529091529020549190612355565b6001600160a01b03821660009081526017602052604081205460ff16156118255760405162461bcd60e51b8152600401610bfc9061373c565b3260009081526017602052604090205460ff16156118555760405162461bcd60e51b8152600401610bfc9061373c565b610c80338484611e5d565b6000546001600160a01b0316331461188a5760405162461bcd60e51b8152600401610bfc906136d9565b601181905560125460105460649190610c1f908490613724565b6000546001600160a01b031633146118ce5760405162461bcd60e51b8152600401610bfc906136d9565b610c7081612672565b6000546001600160a01b031633146119015760405162461bcd60e51b8152600401610bfc906136d9565b601a8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061138e90831515815260200190565b6000546001600160a01b031633146119785760405162461bcd60e51b8152600401610bfc906136d9565b601081905560125460115460649190610c1f9084613724565b6000546001600160a01b031633146119bb5760405162461bcd60e51b8152600401610bfc906136d9565b6119da60646119d469d3c21bcecceda1000000846129a9565b906123a4565b601b5550565b6000546001600160a01b03163314611a0a5760405162461bcd60e51b8152600401610bfc906136d9565b601a8054821515600160b01b0260ff60b01b199091161790556040517f8bcc108c7d867d0a70433f71ecba3056c4dcc48eaabe4ca987f9fb1f836091d59061138e90831515815260200190565b6000546001600160a01b03163314611a815760405162461bcd60e51b8152600401610bfc906136d9565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b03163314611acc5760405162461bcd60e51b8152600401610bfc906136d9565b60008111611ad957600080fd5b601c8190556040518181527fab1090599596cfb0c655b6424e552fba2cedf77457ed354fbe96e9abf4aa1f139060200161138e565b6000546001600160a01b03163314611b385760405162461bcd60e51b8152600401610bfc906136d9565b6001600160a01b038116611b9d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bfc565b610c7081612554565b6000546001600160a01b03163314611bd05760405162461bcd60e51b8152600401610bfc906136d9565b81471015611bdd57600080fd5b6040516001600160a01b0382169083156108fc029084906000818181858888f19350505050158015611c13573d6000803e3d6000fd5b50604080518381526001600160a01b03831660208201527f26d71ad100dab0e70a6d987dc1c52b5adfed7fb530cf990e0ce0207438e31f259101610e1f565b6000546001600160a01b03163314611c7c5760405162461bcd60e51b8152600401610bfc906136d9565b6001600160a01b038116611cea5760405162461bcd60e51b815260206004820152602f60248201527f4572726f723a206c697157616c6c657420616464726573732063616e6e6f742060448201526e6265207a65726f206164647265737360881b6064820152608401610bfc565b600c80546001600160a01b0319166001600160a01b0383169081179091556040519081527f6e9a0b8203652d5225235c014e4f37e3858eec49cf1711b07649267d6cab26969060200161138e565b6001600160a01b038316611d9a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bfc565b6001600160a01b038216611dfb5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bfc565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611ec15760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610bfc565b6001600160a01b038216611f235760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610bfc565b60008111611f855760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610bfc565b6000546001600160a01b03848116911614801590611fb157506000546001600160a01b03838116911614155b1561201957601b548111156120195760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610bfc565b601a54600160b01b900460ff1615801561206d57506001600160a01b03821660009081526007602052604090205460ff168061206d57506001600160a01b03831660009081526007602052604090205460ff165b156120ba5760405162461bcd60e51b815260206004820152601e60248201527f427579696e6720616e642073656c6c696e672069732064697361626c656400006044820152606401610bfc565b6001600160a01b03831660009081526008602052604090205460ff16806120f957506001600160a01b03821660009081526008602052604090205460ff165b1561213a5760405162461bcd60e51b81526020600482015260116024820152701059191c995cdcc81a5cc818985b9b9959607a1b6044820152606401610bfc565b60006121453061159b565b9050601b5481106121555750601b545b601c54811080159081906121735750601a54600160a01b900460ff16155b801561219757506001600160a01b03841660009081526007602052604090205460ff165b80156121ac5750601a54600160a81b900460ff165b80156121d157506001600160a01b03851660009081526004602052604090205460ff16155b156121e457601c5491506121e4826129b5565b6001600160a01b03851660009081526007602052604090205460019060ff1615801561222957506001600160a01b03851660009081526007602052604090205460ff16155b15612232575060005b60165460ff16801561226057506001600160a01b0386163b15158061226057506001600160a01b0385163b15155b15612269575060015b6001600160a01b03861660009081526004602052604090205460ff16806122a857506001600160a01b03851660009081526004602052604090205460ff165b156122b1575060005b6001600160a01b03861660009081526007602052604090205460ff16806122e157506001600160a01b0386163b15155b156122f957600d54601355600e54601455600f546015555b6001600160a01b03851660009081526007602052604090205460ff168061232957506001600160a01b0385163b15155b15612341576010546013556011546014556012546015555b61234d86868684612a5c565b505050505050565b600081848411156123795760405162461bcd60e51b8152600401610bfc91906134ae565b505050900390565b600080600061238e612b7d565b909250905061239d82826123a4565b9250505090565b6000610ea882846137ee565b6000610ea88284613724565b6001600160a01b03821661241c5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610bfc565b6001600160a01b038216600090815260016020526040902054818110156124905760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610bfc565b61249a82826137a6565b6001600160a01b038416600090815260016020526040812091909155600980548492906124c89084906137a6565b90915550506040518281526000906001600160a01b0385169060008051602061391483398151915290602001611e50565b60008060008060008060008060008060006125138c612d22565b935093509350935060008060006125348f87878761252f612381565b612d77565b919f509d509b509599509397509195509350505050919395979092949650565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0382166125fa5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610bfc565b806009600082825461260c9190613724565b90915550506001600160a01b03821660009081526001602052604081208054839290612639908490613724565b90915550506040518181526001600160a01b03831690600090600080516020613914833981519152906020015b60405180910390a35050565b6000819050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126d99190613810565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612726573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061274a9190613810565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612795573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127b99190613810565b601a80546001600160a01b0319166001600160a01b0392909216918217905561294157806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561281a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061283e9190613810565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561288b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128af9190613810565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156128fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129209190613810565b601a80546001600160a01b0319166001600160a01b03929092169190911790555b601980546001600160a01b0319166001600160a01b0383811691909117909155601a5461297091166001610d9d565b6040516001600160a01b03831681527fc6b438e6a8a59579ce6a4406cbd203b740e0d47b458aae6596339bcd40c40d1590602001610e1f565b6000610ea8828461382d565b601a805460ff60a01b1916600160a01b17905560006129d58260026123a4565b905060006129e38383612dd9565b9050476129ef83612de5565b60006129fb4783612dd9565b9050612a078382612f37565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050601a805460ff60a01b19169055505050565b80612a7557612a75600060138190556014819055601555565b6001600160a01b03841660009081526005602052604090205460ff168015612ab657506001600160a01b03831660009081526005602052604090205460ff16155b15612acb57612ac6848484613016565b612b77565b6001600160a01b03841660009081526005602052604090205460ff16158015612b0c57506001600160a01b03831660009081526005602052604090205460ff165b15612b1c57612ac684848461314a565b6001600160a01b03841660009081526005602052604090205460ff168015612b5c57506001600160a01b03831660009081526005602052604090205460ff165b15612b6c57612ac6848484613209565b612b77848484613292565b50505050565b600954600090819069d3c21bcecceda1000000825b600654811015612cde57826001600060068481548110612bb457612bb4613790565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612c1f5750816002600060068481548110612bf857612bf8613790565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612c3c5750506009549369d3c21bcecceda10000009350915050565b612c826001600060068481548110612c5657612c56613790565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612dd9565b9250612cca6002600060068481548110612c9e57612c9e613790565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612dd9565b915080612cd6816137d3565b915050612b92565b50600954612cf69069d3c21bcecceda10000006123a4565b821015612d145750506009549269d3c21bcecceda100000092509050565b90939092509050565b505050565b6000806000806000612d33866132ec565b90506000612d4087613309565b90506000612d4d88613326565b90506000612d6782612d6185818d89612dd9565b90612dd9565b9993985091965094509092505050565b6000808080612d8689866129a9565b90506000612d9489876129a9565b90506000612da289886129a9565b90506000612db089896129a9565b90506000612dc482612d6185818989612dd9565b949d949c50929a509298505050505050505050565b6000610ea882846137a6565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612e1a57612e1a613790565b6001600160a01b03928316602091820292909201810191909152601954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612e73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e979190613810565b81600181518110612eaa57612eaa613790565b6001600160a01b039283166020918202929092010152601954612ed09130911684611d38565b60195460405163791ac94760e01b81526001600160a01b039091169063791ac94790612f0990859060009086903090429060040161384c565b600060405180830381600087803b158015612f2357600080fd5b505af115801561234d573d6000803e3d6000fd5b601954612f4f9030906001600160a01b031684611d38565b601954600c5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612fbf573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612fe491906138bd565b5050601a546040518481526001600160a01b039091169150309060008051602061391483398151915290602001612666565b600080600080600080600061302a886124f9565b965096509650965096509650965061307088600260008d6001600160a01b03166001600160a01b0316815260200190815260200160002054612dd990919063ffffffff16565b6001600160a01b038b1660009081526002602090815260408083209390935560019052205461309f9088612dd9565b6001600160a01b03808c1660009081526001602052604080822093909355908b16815220546130ce90876123b0565b6001600160a01b038a166000908152600160205260409020556130f082613343565b6130f9816133cb565b613103858461348a565b886001600160a01b03168a6001600160a01b03166000805160206139148339815191528660405161313691815260200190565b60405180910390a350505050505050505050565b600080600080600080600061315e886124f9565b96509650965096509650965096506131a487600160008d6001600160a01b03166001600160a01b0316815260200190815260200160002054612dd990919063ffffffff16565b6001600160a01b03808c16600090815260016020908152604080832094909455918c168152600290915220546131da90856123b0565b6001600160a01b038a166000908152600260209081526040808320939093556001905220546130ce90876123b0565b600080600080600080600061321d886124f9565b965096509650965096509650965061326388600260008d6001600160a01b03166001600160a01b0316815260200190815260200160002054612dd990919063ffffffff16565b6001600160a01b038b166000908152600260209081526040808320939093556001905220546131a49088612dd9565b60008060008060008060006132a6886124f9565b965096509650965096509650965061309f87600160008d6001600160a01b03166001600160a01b0316815260200190815260200160002054612dd990919063ffffffff16565b6000610c846103e86119d4601354856129a990919063ffffffff16565b6000610c846103e86119d4601554856129a990919063ffffffff16565b6000610c846103e86119d4601454856129a990919063ffffffff16565b600061334d612381565b9050600061335b83836129a9565b3060009081526001602052604090205490915061337890826123b0565b3060009081526001602090815260408083209390935560059052205460ff1615612d1d57306000908152600260205260409020546133b690846123b0565b30600090815260026020526040902055505050565b60006133d5612381565b905060006133e383836129a9565b600b546001600160a01b031660009081526001602052604090205490915061340b90826123b0565b600b80546001600160a01b03908116600090815260016020908152604080832095909555925490911681526005909152205460ff1615612d1d57600b546001600160a01b031660009081526002602052604090205461346a90846123b0565b600b546001600160a01b0316600090815260026020526040902055505050565b6009546134979083612dd9565b600955600a546134a790826123b0565b600a555050565b600060208083528351808285015260005b818110156134db578581018301518582016040015282016134bf565b818111156134ed576000604083870101525b50601f01601f1916929092016040019392505050565b60006020828403121561351557600080fd5b5035919050565b6001600160a01b0381168114610c7057600080fd5b6000806040838503121561354457600080fd5b823561354f8161351c565b946020939093013593505050565b60008060006060848603121561357257600080fd5b833561357d8161351c565b9250602084013561358d8161351c565b929592945050506040919091013590565b8015158114610c7057600080fd5b600080604083850312156135bf57600080fd5b82356135ca8161351c565b915060208301356135da8161359e565b809150509250929050565b6000806000606084860312156135fa57600080fd5b83356136058161351c565b925060208401359150604084013561361c8161351c565b809150509250925092565b60006020828403121561363957600080fd5b8135610ea88161351c565b6000806040838503121561365757600080fd5b8235915060208301356135da8161359e565b60006020828403121561367b57600080fd5b8135610ea88161359e565b6000806040838503121561369957600080fd5b82356136a48161351c565b915060208301356135da8161351c565b600080604083850312156136c757600080fd5b8235915060208301356135da8161351c565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082198211156137375761373761370e565b500190565b60208082526017908201527f596f752068617665206e6f20706f776572206865726521000000000000000000604082015260600190565b60006020828403121561378557600080fd5b8151610ea88161359e565b634e487b7160e01b600052603260045260246000fd5b6000828210156137b8576137b861370e565b500390565b634e487b7160e01b600052603160045260246000fd5b60006000198214156137e7576137e761370e565b5060010190565b60008261380b57634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561382257600080fd5b8151610ea88161351c565b60008160001904831182151516156138475761384761370e565b500290565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561389c5784516001600160a01b031683529383019391830191600101613877565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156138d257600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122015f8780731c16c4df7e728df84ae093dd8eeebb20bfa81c039a99c6549dd5ecd64736f6c634300080a00330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000009610a10a55690e160844d98defdf9f4f3e6409f500000000000000000000000056fba6b95321df366eef57723667632d16df610e
Deployed Bytecode
0x6080604052600436106103a65760003560e01c80637d1db4a5116101e7578063c49b9a801161010d578063e01af92c116100a0578063f0f165af1161006f578063f0f165af14610b52578063f2fde38b14610b72578063faef9e6714610b92578063fb81062914610bb257600080fd5b8063e01af92c14610adc578063ea2f0b3714610afc578063eedeacbe14610b1c578063efcc52de14610b3c57600080fd5b8063d12a7688116100dc578063d12a768814610a4a578063d543dbeb14610a60578063dc44b6a014610a80578063dd62ed3e14610a9657600080fd5b8063c49b9a80146109de578063c5d24189146109fe578063c860795214610a14578063d0e0352314610a2a57600080fd5b8063996c398511610185578063a928681c11610154578063a928681c1461093e578063c069d9561461095e578063c0d786551461098e578063c14a4239146109ae57600080fd5b8063996c3985146108be578063a0712d68146108de578063a457c2d7146108fe578063a9059cbb1461091e57600080fd5b80638da5cb5b116101c15780638da5cb5b1461083257806395558d841461085057806395d89b4114610870578063978e1cc81461089e57600080fd5b80637d1db4a5146107cd57806388790a68146107e357806388f82020146107f957600080fd5b806339509351116102cc5780634cb80fd51161026a5780635876ccc5116102395780635876ccc5146107575780636ddd17131461077757806370a0823114610798578063715018a6146107b857600080fd5b80634cb80fd5146106be5780634fab9edf146106de57806352390c02146106fe5780635342acb41461071e57600080fd5b8063437823ec116102a6578063437823ec1461063d5780634549b0391461065d57806349bd5a5e1461067d5780634a74bb021461069d57600080fd5b806339509351146105c45780633bbac579146105e457806342966c681461061d57600080fd5b8063200a692d116103445780632d838119116103135780632d83811914610548578063313ce5671461056857806335e17cb9146105845780633685d419146105a457600080fd5b8063200a692d146104d857806323b872dd146104ee5780632410d8871461050e5780632d513f361461052e57600080fd5b806311889b761161038057806311889b761461044457806313114a9d146104645780631694505e1461048357806318160ddd146104bb57600080fd5b806306fdde03146103b25780630844af26146103f2578063095ea7b31461041457600080fd5b366103ad57005b600080fd5b3480156103be57600080fd5b50604080518082019091526005815264456e676f7360d81b60208201525b6040516103e991906134ae565b60405180910390f35b3480156103fe57600080fd5b5061041261040d366004613503565b610bd2565b005b34801561042057600080fd5b5061043461042f366004613531565b610c73565b60405190151581526020016103e9565b34801561045057600080fd5b5061041261045f366004613503565b610c8a565b34801561047057600080fd5b50600a545b6040519081526020016103e9565b34801561048f57600080fd5b506019546104a3906001600160a01b031681565b6040516001600160a01b0390911681526020016103e9565b3480156104c757600080fd5b5069d3c21bcecceda1000000610475565b3480156104e457600080fd5b5061047560105481565b3480156104fa57600080fd5b5061043461050936600461355d565b610ccd565b34801561051a57600080fd5b506104126105293660046135ac565b610d9d565b34801561053a57600080fd5b506016546104349060ff1681565b34801561055457600080fd5b50610475610563366004613503565b610e2b565b34801561057457600080fd5b50604051600981526020016103e9565b34801561059057600080fd5b5061041261059f3660046135e5565b610eaf565b3480156105b057600080fd5b506104126105bf366004613627565b610fa0565b3480156105d057600080fd5b506104346105df366004613531565b611157565b3480156105f057600080fd5b506104346105ff366004613627565b6001600160a01b031660009081526017602052604090205460ff1690565b34801561062957600080fd5b50610412610638366004613503565b61118d565b34801561064957600080fd5b50610412610658366004613627565b6111c1565b34801561066957600080fd5b50610475610678366004613644565b61120f565b34801561068957600080fd5b50601a546104a3906001600160a01b031681565b3480156106a957600080fd5b50601a5461043490600160a81b900460ff1681565b3480156106ca57600080fd5b506104126106d9366004613627565b6112a6565b3480156106ea57600080fd5b506104126106f9366004613669565b611399565b34801561070a57600080fd5b50610412610719366004613627565b611404565b34801561072a57600080fd5b50610434610739366004613627565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561076357600080fd5b50610412610772366004613503565b611557565b34801561078357600080fd5b50601a5461043490600160b01b900460ff1681565b3480156107a457600080fd5b506104756107b3366004613627565b61159b565b3480156107c457600080fd5b506104126115fa565b3480156107d957600080fd5b50610475601b5481565b3480156107ef57600080fd5b5061047560125481565b34801561080557600080fd5b50610434610814366004613627565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561083e57600080fd5b506000546001600160a01b03166104a3565b34801561085c57600080fd5b50600c546104a3906001600160a01b031681565b34801561087c57600080fd5b50604080518082019091526005815264454e474f5360d81b60208201526103dc565b3480156108aa57600080fd5b506104126108b93660046135ac565b611630565b3480156108ca57600080fd5b506104126108d9366004613503565b611725565b3480156108ea57600080fd5b506104126108f9366004613503565b611769565b34801561090a57600080fd5b50610434610919366004613531565b61179d565b34801561092a57600080fd5b50610434610939366004613531565b6117ec565b34801561094a57600080fd5b50610412610959366004613503565b611860565b34801561096a57600080fd5b50610434610979366004613627565b60086020526000908152604090205460ff1681565b34801561099a57600080fd5b506104126109a9366004613627565b6118a4565b3480156109ba57600080fd5b506104346109c9366004613627565b60076020526000908152604090205460ff1681565b3480156109ea57600080fd5b506104126109f9366004613669565b6118d7565b348015610a0a57600080fd5b50610475600e5481565b348015610a2057600080fd5b5061047560115481565b348015610a3657600080fd5b50610412610a45366004613503565b61194e565b348015610a5657600080fd5b50610475601c5481565b348015610a6c57600080fd5b50610412610a7b366004613503565b611991565b348015610a8c57600080fd5b50610475600f5481565b348015610aa257600080fd5b50610475610ab1366004613686565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610ae857600080fd5b50610412610af7366004613669565b6119e0565b348015610b0857600080fd5b50610412610b17366004613627565b611a57565b348015610b2857600080fd5b50600b546104a3906001600160a01b031681565b348015610b4857600080fd5b50610475600d5481565b348015610b5e57600080fd5b50610412610b6d366004613503565b611aa2565b348015610b7e57600080fd5b50610412610b8d366004613627565b611b0e565b348015610b9e57600080fd5b50610412610bad3660046136b4565b611ba6565b348015610bbe57600080fd5b50610412610bcd366004613627565b611c52565b6000546001600160a01b03163314610c055760405162461bcd60e51b8152600401610bfc906136d9565b60405180910390fd5b600e819055600f54600d5460649190610c1f908490613724565b610c299190613724565b1115610c705760405162461bcd60e51b8152602060048201526016602482015275546f74616c206665657320657863656564203130302560501b6044820152606401610bfc565b50565b6000610c80338484611d38565b5060015b92915050565b6000546001600160a01b03163314610cb45760405162461bcd60e51b8152600401610bfc906136d9565b600d819055600f54600e5460649190610c1f9084613724565b6001600160a01b03821660009081526017602052604081205460ff1615610d065760405162461bcd60e51b8152600401610bfc9061373c565b3260009081526017602052604090205460ff1615610d365760405162461bcd60e51b8152600401610bfc9061373c565b610d41848484611e5d565b610d938433610d8e856040518060600160405280602881526020016138ec602891396001600160a01b038a1660009081526003602090815260408083203384529091529020549190612355565b611d38565b5060019392505050565b6000546001600160a01b03163314610dc75760405162461bcd60e51b8152600401610bfc906136d9565b6001600160a01b038216600081815260076020908152604091829020805460ff19168515159081179091558251938452908301527f92d4086705a3958aa2cd18830ddaff7bb93db05b6818910190392a55047397ee91015b60405180910390a15050565b6000600954821115610e925760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610bfc565b6000610e9c612381565b9050610ea883826123a4565b9392505050565b6000546001600160a01b03163314610ed95760405162461bcd60e51b8152600401610bfc906136d9565b60405163a9059cbb60e01b81526001600160a01b0382811660048301526024820184905284919082169063a9059cbb906044016020604051808303816000875af1158015610f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4f9190613773565b50604080516001600160a01b0386811682526020820186905284168183015290517f03e22ea144aa78f0a88a3bc6036c5f6d5bc2d276affbc5f88c38a9346c5b2eee9181900360600190a150505050565b6000546001600160a01b03163314610fca5760405162461bcd60e51b8152600401610bfc906136d9565b6001600160a01b03811660009081526005602052604090205460ff166110325760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c7564656400000000006044820152606401610bfc565b60005b60065481101561115357816001600160a01b03166006828154811061105c5761105c613790565b6000918252602090912001546001600160a01b031614156111415760068054611087906001906137a6565b8154811061109757611097613790565b600091825260209091200154600680546001600160a01b0390921691839081106110c3576110c3613790565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff19169055600680548061111b5761111b6137bd565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061114b816137d3565b915050611035565b5050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610c80918590610d8e90866123b0565b6000546001600160a01b031633146111b75760405162461bcd60e51b8152600401610bfc906136d9565b610c7033826123bc565b6000546001600160a01b031633146111eb5760405162461bcd60e51b8152600401610bfc906136d9565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b600069d3c21bcecceda100000083111561126b5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610bfc565b8161128b57600061127b846124f9565b50949650610c8495505050505050565b6000611296846124f9565b50939650610c8495505050505050565b6000546001600160a01b031633146112d05760405162461bcd60e51b8152600401610bfc906136d9565b6001600160a01b0381166113445760405162461bcd60e51b815260206004820152603560248201527f4572726f723a204d61726b6574696e6757616c6c657420616464726573732063604482015274616e6e6f74206265207a65726f206164647265737360581b6064820152608401610bfc565b600b80546001600160a01b0319166001600160a01b0383169081179091556040519081527fc4a1411139e23115772923254c039e2ecfed9a653a3a8db99706b25b50fa3122906020015b60405180910390a150565b6000546001600160a01b031633146113c35760405162461bcd60e51b8152600401610bfc906136d9565b6016805460ff19168215159081179091556040519081527f75b4185b2596596b18e7ded7eec3b258b81f659c5b4097d5023706248fb123e69060200161138e565b6000546001600160a01b0316331461142e5760405162461bcd60e51b8152600401610bfc906136d9565b6001600160a01b03811660009081526005602052604090205460ff16156114975760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610bfc565b6001600160a01b038116600090815260016020526040902054156114f1576001600160a01b0381166000908152600160205260409020546114d790610e2b565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b6000546001600160a01b031633146115815760405162461bcd60e51b8152600401610bfc906136d9565b60128190556011546010546064918391610c1f9190613724565b6001600160a01b03811660009081526005602052604081205460ff16156115d857506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610c8490610e2b565b6000546001600160a01b031633146116245760405162461bcd60e51b8152600401610bfc906136d9565b61162e6000612554565b565b6000546001600160a01b0316331461165a5760405162461bcd60e51b8152600401610bfc906136d9565b6001600160a01b0382163b6116c95760405162461bcd60e51b815260206004820152602f60248201527f4572726f723a2043616e206f6e6c792062616e206f7220756e62616e20636f6e60448201526e74726163742061646472657373657360881b6064820152608401610bfc565b6001600160a01b038216600081815260086020908152604091829020805460ff19168515159081179091558251938452908301527f80069036c5381e9b8bf3feeaddce86ce3886eaabaddb4b90926400a11ba6bd1a9101610e1f565b6000546001600160a01b0316331461174f5760405162461bcd60e51b8152600401610bfc906136d9565b600f819055600e54600d546064918391610c1f9190613724565b6000546001600160a01b031633146117935760405162461bcd60e51b8152600401610bfc906136d9565b610c7033826125a4565b6000610c803384610d8e85604051806060016040528060258152602001613934602591393360009081526003602090815260408083206001600160a01b038d1684529091529020549190612355565b6001600160a01b03821660009081526017602052604081205460ff16156118255760405162461bcd60e51b8152600401610bfc9061373c565b3260009081526017602052604090205460ff16156118555760405162461bcd60e51b8152600401610bfc9061373c565b610c80338484611e5d565b6000546001600160a01b0316331461188a5760405162461bcd60e51b8152600401610bfc906136d9565b601181905560125460105460649190610c1f908490613724565b6000546001600160a01b031633146118ce5760405162461bcd60e51b8152600401610bfc906136d9565b610c7081612672565b6000546001600160a01b031633146119015760405162461bcd60e51b8152600401610bfc906136d9565b601a8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061138e90831515815260200190565b6000546001600160a01b031633146119785760405162461bcd60e51b8152600401610bfc906136d9565b601081905560125460115460649190610c1f9084613724565b6000546001600160a01b031633146119bb5760405162461bcd60e51b8152600401610bfc906136d9565b6119da60646119d469d3c21bcecceda1000000846129a9565b906123a4565b601b5550565b6000546001600160a01b03163314611a0a5760405162461bcd60e51b8152600401610bfc906136d9565b601a8054821515600160b01b0260ff60b01b199091161790556040517f8bcc108c7d867d0a70433f71ecba3056c4dcc48eaabe4ca987f9fb1f836091d59061138e90831515815260200190565b6000546001600160a01b03163314611a815760405162461bcd60e51b8152600401610bfc906136d9565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b03163314611acc5760405162461bcd60e51b8152600401610bfc906136d9565b60008111611ad957600080fd5b601c8190556040518181527fab1090599596cfb0c655b6424e552fba2cedf77457ed354fbe96e9abf4aa1f139060200161138e565b6000546001600160a01b03163314611b385760405162461bcd60e51b8152600401610bfc906136d9565b6001600160a01b038116611b9d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bfc565b610c7081612554565b6000546001600160a01b03163314611bd05760405162461bcd60e51b8152600401610bfc906136d9565b81471015611bdd57600080fd5b6040516001600160a01b0382169083156108fc029084906000818181858888f19350505050158015611c13573d6000803e3d6000fd5b50604080518381526001600160a01b03831660208201527f26d71ad100dab0e70a6d987dc1c52b5adfed7fb530cf990e0ce0207438e31f259101610e1f565b6000546001600160a01b03163314611c7c5760405162461bcd60e51b8152600401610bfc906136d9565b6001600160a01b038116611cea5760405162461bcd60e51b815260206004820152602f60248201527f4572726f723a206c697157616c6c657420616464726573732063616e6e6f742060448201526e6265207a65726f206164647265737360881b6064820152608401610bfc565b600c80546001600160a01b0319166001600160a01b0383169081179091556040519081527f6e9a0b8203652d5225235c014e4f37e3858eec49cf1711b07649267d6cab26969060200161138e565b6001600160a01b038316611d9a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bfc565b6001600160a01b038216611dfb5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bfc565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611ec15760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610bfc565b6001600160a01b038216611f235760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610bfc565b60008111611f855760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610bfc565b6000546001600160a01b03848116911614801590611fb157506000546001600160a01b03838116911614155b1561201957601b548111156120195760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610bfc565b601a54600160b01b900460ff1615801561206d57506001600160a01b03821660009081526007602052604090205460ff168061206d57506001600160a01b03831660009081526007602052604090205460ff165b156120ba5760405162461bcd60e51b815260206004820152601e60248201527f427579696e6720616e642073656c6c696e672069732064697361626c656400006044820152606401610bfc565b6001600160a01b03831660009081526008602052604090205460ff16806120f957506001600160a01b03821660009081526008602052604090205460ff165b1561213a5760405162461bcd60e51b81526020600482015260116024820152701059191c995cdcc81a5cc818985b9b9959607a1b6044820152606401610bfc565b60006121453061159b565b9050601b5481106121555750601b545b601c54811080159081906121735750601a54600160a01b900460ff16155b801561219757506001600160a01b03841660009081526007602052604090205460ff165b80156121ac5750601a54600160a81b900460ff165b80156121d157506001600160a01b03851660009081526004602052604090205460ff16155b156121e457601c5491506121e4826129b5565b6001600160a01b03851660009081526007602052604090205460019060ff1615801561222957506001600160a01b03851660009081526007602052604090205460ff16155b15612232575060005b60165460ff16801561226057506001600160a01b0386163b15158061226057506001600160a01b0385163b15155b15612269575060015b6001600160a01b03861660009081526004602052604090205460ff16806122a857506001600160a01b03851660009081526004602052604090205460ff165b156122b1575060005b6001600160a01b03861660009081526007602052604090205460ff16806122e157506001600160a01b0386163b15155b156122f957600d54601355600e54601455600f546015555b6001600160a01b03851660009081526007602052604090205460ff168061232957506001600160a01b0385163b15155b15612341576010546013556011546014556012546015555b61234d86868684612a5c565b505050505050565b600081848411156123795760405162461bcd60e51b8152600401610bfc91906134ae565b505050900390565b600080600061238e612b7d565b909250905061239d82826123a4565b9250505090565b6000610ea882846137ee565b6000610ea88284613724565b6001600160a01b03821661241c5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610bfc565b6001600160a01b038216600090815260016020526040902054818110156124905760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610bfc565b61249a82826137a6565b6001600160a01b038416600090815260016020526040812091909155600980548492906124c89084906137a6565b90915550506040518281526000906001600160a01b0385169060008051602061391483398151915290602001611e50565b60008060008060008060008060008060006125138c612d22565b935093509350935060008060006125348f87878761252f612381565b612d77565b919f509d509b509599509397509195509350505050919395979092949650565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0382166125fa5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610bfc565b806009600082825461260c9190613724565b90915550506001600160a01b03821660009081526001602052604081208054839290612639908490613724565b90915550506040518181526001600160a01b03831690600090600080516020613914833981519152906020015b60405180910390a35050565b6000819050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126d99190613810565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612726573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061274a9190613810565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612795573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127b99190613810565b601a80546001600160a01b0319166001600160a01b0392909216918217905561294157806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561281a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061283e9190613810565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561288b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128af9190613810565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156128fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129209190613810565b601a80546001600160a01b0319166001600160a01b03929092169190911790555b601980546001600160a01b0319166001600160a01b0383811691909117909155601a5461297091166001610d9d565b6040516001600160a01b03831681527fc6b438e6a8a59579ce6a4406cbd203b740e0d47b458aae6596339bcd40c40d1590602001610e1f565b6000610ea8828461382d565b601a805460ff60a01b1916600160a01b17905560006129d58260026123a4565b905060006129e38383612dd9565b9050476129ef83612de5565b60006129fb4783612dd9565b9050612a078382612f37565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050601a805460ff60a01b19169055505050565b80612a7557612a75600060138190556014819055601555565b6001600160a01b03841660009081526005602052604090205460ff168015612ab657506001600160a01b03831660009081526005602052604090205460ff16155b15612acb57612ac6848484613016565b612b77565b6001600160a01b03841660009081526005602052604090205460ff16158015612b0c57506001600160a01b03831660009081526005602052604090205460ff165b15612b1c57612ac684848461314a565b6001600160a01b03841660009081526005602052604090205460ff168015612b5c57506001600160a01b03831660009081526005602052604090205460ff165b15612b6c57612ac6848484613209565b612b77848484613292565b50505050565b600954600090819069d3c21bcecceda1000000825b600654811015612cde57826001600060068481548110612bb457612bb4613790565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612c1f5750816002600060068481548110612bf857612bf8613790565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612c3c5750506009549369d3c21bcecceda10000009350915050565b612c826001600060068481548110612c5657612c56613790565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612dd9565b9250612cca6002600060068481548110612c9e57612c9e613790565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612dd9565b915080612cd6816137d3565b915050612b92565b50600954612cf69069d3c21bcecceda10000006123a4565b821015612d145750506009549269d3c21bcecceda100000092509050565b90939092509050565b505050565b6000806000806000612d33866132ec565b90506000612d4087613309565b90506000612d4d88613326565b90506000612d6782612d6185818d89612dd9565b90612dd9565b9993985091965094509092505050565b6000808080612d8689866129a9565b90506000612d9489876129a9565b90506000612da289886129a9565b90506000612db089896129a9565b90506000612dc482612d6185818989612dd9565b949d949c50929a509298505050505050505050565b6000610ea882846137a6565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612e1a57612e1a613790565b6001600160a01b03928316602091820292909201810191909152601954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612e73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e979190613810565b81600181518110612eaa57612eaa613790565b6001600160a01b039283166020918202929092010152601954612ed09130911684611d38565b60195460405163791ac94760e01b81526001600160a01b039091169063791ac94790612f0990859060009086903090429060040161384c565b600060405180830381600087803b158015612f2357600080fd5b505af115801561234d573d6000803e3d6000fd5b601954612f4f9030906001600160a01b031684611d38565b601954600c5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612fbf573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612fe491906138bd565b5050601a546040518481526001600160a01b039091169150309060008051602061391483398151915290602001612666565b600080600080600080600061302a886124f9565b965096509650965096509650965061307088600260008d6001600160a01b03166001600160a01b0316815260200190815260200160002054612dd990919063ffffffff16565b6001600160a01b038b1660009081526002602090815260408083209390935560019052205461309f9088612dd9565b6001600160a01b03808c1660009081526001602052604080822093909355908b16815220546130ce90876123b0565b6001600160a01b038a166000908152600160205260409020556130f082613343565b6130f9816133cb565b613103858461348a565b886001600160a01b03168a6001600160a01b03166000805160206139148339815191528660405161313691815260200190565b60405180910390a350505050505050505050565b600080600080600080600061315e886124f9565b96509650965096509650965096506131a487600160008d6001600160a01b03166001600160a01b0316815260200190815260200160002054612dd990919063ffffffff16565b6001600160a01b03808c16600090815260016020908152604080832094909455918c168152600290915220546131da90856123b0565b6001600160a01b038a166000908152600260209081526040808320939093556001905220546130ce90876123b0565b600080600080600080600061321d886124f9565b965096509650965096509650965061326388600260008d6001600160a01b03166001600160a01b0316815260200190815260200160002054612dd990919063ffffffff16565b6001600160a01b038b166000908152600260209081526040808320939093556001905220546131a49088612dd9565b60008060008060008060006132a6886124f9565b965096509650965096509650965061309f87600160008d6001600160a01b03166001600160a01b0316815260200190815260200160002054612dd990919063ffffffff16565b6000610c846103e86119d4601354856129a990919063ffffffff16565b6000610c846103e86119d4601554856129a990919063ffffffff16565b6000610c846103e86119d4601454856129a990919063ffffffff16565b600061334d612381565b9050600061335b83836129a9565b3060009081526001602052604090205490915061337890826123b0565b3060009081526001602090815260408083209390935560059052205460ff1615612d1d57306000908152600260205260409020546133b690846123b0565b30600090815260026020526040902055505050565b60006133d5612381565b905060006133e383836129a9565b600b546001600160a01b031660009081526001602052604090205490915061340b90826123b0565b600b80546001600160a01b03908116600090815260016020908152604080832095909555925490911681526005909152205460ff1615612d1d57600b546001600160a01b031660009081526002602052604090205461346a90846123b0565b600b546001600160a01b0316600090815260026020526040902055505050565b6009546134979083612dd9565b600955600a546134a790826123b0565b600a555050565b600060208083528351808285015260005b818110156134db578581018301518582016040015282016134bf565b818111156134ed576000604083870101525b50601f01601f1916929092016040019392505050565b60006020828403121561351557600080fd5b5035919050565b6001600160a01b0381168114610c7057600080fd5b6000806040838503121561354457600080fd5b823561354f8161351c565b946020939093013593505050565b60008060006060848603121561357257600080fd5b833561357d8161351c565b9250602084013561358d8161351c565b929592945050506040919091013590565b8015158114610c7057600080fd5b600080604083850312156135bf57600080fd5b82356135ca8161351c565b915060208301356135da8161359e565b809150509250929050565b6000806000606084860312156135fa57600080fd5b83356136058161351c565b925060208401359150604084013561361c8161351c565b809150509250925092565b60006020828403121561363957600080fd5b8135610ea88161351c565b6000806040838503121561365757600080fd5b8235915060208301356135da8161359e565b60006020828403121561367b57600080fd5b8135610ea88161359e565b6000806040838503121561369957600080fd5b82356136a48161351c565b915060208301356135da8161351c565b600080604083850312156136c757600080fd5b8235915060208301356135da8161351c565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082198211156137375761373761370e565b500190565b60208082526017908201527f596f752068617665206e6f20706f776572206865726521000000000000000000604082015260600190565b60006020828403121561378557600080fd5b8151610ea88161359e565b634e487b7160e01b600052603260045260246000fd5b6000828210156137b8576137b861370e565b500390565b634e487b7160e01b600052603160045260246000fd5b60006000198214156137e7576137e761370e565b5060010190565b60008261380b57634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561382257600080fd5b8151610ea88161351c565b60008160001904831182151516156138475761384761370e565b500290565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561389c5784516001600160a01b031683529383019391830191600101613877565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156138d257600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122015f8780731c16c4df7e728df84ae093dd8eeebb20bfa81c039a99c6549dd5ecd64736f6c634300080a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000009610a10a55690e160844d98defdf9f4f3e6409f500000000000000000000000056fba6b95321df366eef57723667632d16df610e
-----Decoded View---------------
Arg [0] : router (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [1] : MarketingWallet (address): 0x9610A10A55690E160844d98dEFdf9f4F3E6409f5
Arg [2] : liqWallet (address): 0x56FBA6b95321DF366EEf57723667632D16Df610e
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [1] : 0000000000000000000000009610a10a55690e160844d98defdf9f4f3e6409f5
Arg [2] : 00000000000000000000000056fba6b95321df366eef57723667632d16df610e
Deployed Bytecode Sourcemap
30266:26474:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33862:85;;;;;;;;;;-1:-1:-1;33934:5:0;;;;;;;;;;;;-1:-1:-1;;;33934:5:0;;;;33862:85;;;;;;;:::i;:::-;;;;;;;;39014:229;;;;;;;;;;-1:-1:-1;39014:229:0;;;;;:::i;:::-;;:::i;:::-;;34938:163;;;;;;;;;;-1:-1:-1;34938:163:0;;;;;:::i;:::-;;:::i;:::-;;;1422:14:1;;1415:22;1397:41;;1385:2;1370:18;34938:163:0;1257:187:1;38801:205:0;;;;;;;;;;-1:-1:-1;38801:205:0;;;;;:::i;:::-;;:::i;36221:89::-;;;;;;;;;;-1:-1:-1;36292:10:0;;36221:89;;;1595:25:1;;;1583:2;1568:18;36221:89:0;1449:177:1;32038:41:0;;;;;;;;;;-1:-1:-1;32038:41:0;;;;-1:-1:-1;;;;;32038:41:0;;;;;;-1:-1:-1;;;;;1822:32:1;;;1804:51;;1792:2;1777:18;32038:41:0;1631:230:1;34145:97:0;;;;;;;;;;-1:-1:-1;30944:24:0;34145:97;;31514:31;;;;;;;;;;;;;;;;35109:467;;;;;;;;;;-1:-1:-1;35109:467:0;;;;;:::i;:::-;;:::i;54124:154::-;;;;;;;;;;-1:-1:-1;54124:154:0;;;;;:::i;:::-;;:::i;31769:39::-;;;;;;;;;;-1:-1:-1;31769:39:0;;;;;;;;36766:253;;;;;;;;;;-1:-1:-1;36766:253:0;;;;;:::i;:::-;;:::i;34052:85::-;;;;;;;;;;-1:-1:-1;34052:85:0;;31195:1;2979:36:1;;2967:2;2952:18;34052:85:0;2837:184:1;54548:238:0;;;;;;;;;;-1:-1:-1;54548:238:0;;;;;:::i;:::-;;:::i;37368:479::-;;;;;;;;;;-1:-1:-1;37368:479:0;;;;;:::i;:::-;;:::i;35584:220::-;;;;;;;;;;-1:-1:-1;35584:220:0;;;;;:::i;:::-;;:::i;31918:112::-;;;;;;;;;;-1:-1:-1;31918:112:0;;;;;:::i;:::-;-1:-1:-1;;;;;31996:26:0;31971:4;31996:26;;;:17;:26;;;;;;;;;31918:112;55945:91;;;;;;;;;;-1:-1:-1;55945:91:0;;;;;:::i;:::-;;:::i;38552:113::-;;;;;;;;;;-1:-1:-1;38552:113:0;;;;;:::i;:::-;;:::i;36318:440::-;;;;;;;;;;-1:-1:-1;36318:440:0;;;;;:::i;:::-;;:::i;32086:28::-;;;;;;;;;;-1:-1:-1;32086:28:0;;;;-1:-1:-1;;;;;32086:28:0;;;32163:40;;;;;;;;;;-1:-1:-1;32163:40:0;;;;-1:-1:-1;;;32163:40:0;;;;;;40711:277;;;;;;;;;;-1:-1:-1;40711:277:0;;;;;:::i;:::-;;:::i;41499:157::-;;;;;;;;;;-1:-1:-1;41499:157:0;;;;;:::i;:::-;;:::i;37027:333::-;;;;;;;;;;-1:-1:-1;37027:333:0;;;;;:::i;:::-;;:::i;46099:125::-;;;;;;;;;;-1:-1:-1;46099:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;46189:27:0;46165:4;46189:27;;;:18;:27;;;;;;;;;46099:125;39956:234;;;;;;;;;;-1:-1:-1;39956:234:0;;;;;:::i;:::-;;:::i;32210:30::-;;;;;;;;;;-1:-1:-1;32210:30:0;;;;-1:-1:-1;;;32210:30:0;;;;;;34250:198;;;;;;;;;;-1:-1:-1;34250:198:0;;;;;:::i;:::-;;:::i;5578:103::-;;;;;;;;;;;;;:::i;32253:37::-;;;;;;;;;;;;;;;;31596;;;;;;;;;;;;;;;;36091:122;;;;;;;;;;-1:-1:-1;36091:122:0;;;;;:::i;:::-;-1:-1:-1;;;;;36185:20:0;36161:4;36185:20;;;:11;:20;;;;;;;;;36091:122;4927:87;;;;;;;;;;-1:-1:-1;4973:7:0;5000:6;-1:-1:-1;;;;;5000:6:0;4927:87;;31266:32;;;;;;;;;;-1:-1:-1;31266:32:0;;;;-1:-1:-1;;;;;31266:32:0;;;33955:89;;;;;;;;;;-1:-1:-1;34029:7:0;;;;;;;;;;;;-1:-1:-1;;;34029:7:0;;;;33955:89;;54286:254;;;;;;;;;;-1:-1:-1;54286:254:0;;;;;:::i;:::-;;:::i;39255:229::-;;;;;;;;;;-1:-1:-1;39255:229:0;;;;;:::i;:::-;;:::i;55356:91::-;;;;;;;;;;-1:-1:-1;55356:91:0;;;;;:::i;:::-;;:::i;35812:271::-;;;;;;;;;;-1:-1:-1;35812:271:0;;;;;:::i;:::-;;:::i;34456:321::-;;;;;;;;;;-1:-1:-1;34456:321:0;;;;;:::i;:::-;;:::i;39710:234::-;;;;;;;;;;-1:-1:-1;39710:234:0;;;;;:::i;:::-;;:::i;30808:42::-;;;;;;;;;;-1:-1:-1;30808:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;42217:95;;;;;;;;;;-1:-1:-1;42217:95:0;;;;;:::i;:::-;;:::i;30734:40::-;;;;;;;;;;-1:-1:-1;30734:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;40371:175;;;;;;;;;;-1:-1:-1;40371:175:0;;;;;:::i;:::-;;:::i;31408:36::-;;;;;;;;;;;;;;;;31552:37;;;;;;;;;;;;;;;;39492:210;;;;;;;;;;-1:-1:-1;39492:210:0;;;;;:::i;:::-;;:::i;32297:57::-;;;;;;;;;;;;;;;;40201:162;;;;;;;;;;-1:-1:-1;40201:162:0;;;;;:::i;:::-;;:::i;31451:36::-;;;;;;;;;;;;;;;;34785:145;;;;;;;;;;-1:-1:-1;34785:145:0;;;;;:::i;:::-;-1:-1:-1;;;;;34895:18:0;;;34868:7;34895:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;34785:145;40558:141;;;;;;;;;;-1:-1:-1;40558:141:0;;;;;:::i;:::-;;:::i;38677:112::-;;;;;;;;;;-1:-1:-1;38677:112:0;;;;;:::i;:::-;;:::i;31221:38::-;;;;;;;;;;-1:-1:-1;31221:38:0;;;;-1:-1:-1;;;;;31221:38:0;;;31371:30;;;;;;;;;;;;;;;;41261:230;;;;;;;;;;-1:-1:-1;41261:230:0;;;;;:::i;:::-;;:::i;5836:201::-;;;;;;;;;;-1:-1:-1;5836:201:0;;;;;:::i;:::-;;:::i;54798:212::-;;;;;;;;;;-1:-1:-1;54798:212:0;;;;;:::i;:::-;;:::i;40996:253::-;;;;;;;;;;-1:-1:-1;40996:253:0;;;;;:::i;:::-;;:::i;39014:229::-;4973:7;5000:6;-1:-1:-1;;;;;5000:6:0;3874:10;5147:23;5139:68;;;;-1:-1:-1;;;5139:68:0;;;;;;;:::i;:::-;;;;;;;;;39103:16:::1;:31:::0;;;39185:16:::1;::::0;39153:10:::1;::::0;39205:3:::1;::::0;39185:16;39153:29:::1;::::0;39122:12;;39153:29:::1;:::i;:::-;:48;;;;:::i;:::-;:55;;39145:90;;;::::0;-1:-1:-1;;;39145:90:0;;6048:2:1;39145:90:0::1;::::0;::::1;6030:21:1::0;6087:2;6067:18;;;6060:30;-1:-1:-1;;;6106:18:1;;;6099:52;6168:18;;39145:90:0::1;5846:346:1::0;39145:90:0::1;39014:229:::0;:::o;34938:163::-;35015:4;35032:39;3874:10;35055:7;35064:6;35032:8;:39::i;:::-;-1:-1:-1;35089:4:0;34938:163;;;;;:::o;38801:205::-;4973:7;5000:6;-1:-1:-1;;;;;5000:6:0;3874:10;5147:23;5139:68;;;;-1:-1:-1;;;5139:68:0;;;;;;;:::i;:::-;38878:10:::1;:19:::0;;;38948:16:::1;::::0;38929::::1;::::0;38968:3:::1;::::0;38948:16;38916:29:::1;::::0;38891:6;38916:29:::1;:::i;35109:467::-:0;-1:-1:-1;;;;;35235:28:0;;35209:4;35235:28;;;:17;:28;;;;;;;;35234:29;35226:65;;;;-1:-1:-1;;;35226:65:0;;;;;;;:::i;:::-;35329:9;35311:28;;;;:17;:28;;;;;;;;35310:29;35302:65;;;;-1:-1:-1;;;35302:65:0;;;;;;;:::i;:::-;35378:36;35388:6;35396:9;35407:6;35378:9;:36::i;:::-;35425:121;35434:6;3874:10;35456:89;35494:6;35456:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35456:19:0;;;;;;:11;:19;;;;;;;;3874:10;35456:33;;;;;;;;;;:37;:89::i;:::-;35425:8;:121::i;:::-;-1:-1:-1;35564:4:0;35109:467;;;;;:::o;54124:154::-;4973:7;5000:6;-1:-1:-1;;;;;5000:6:0;3874:10;5147:23;5139:68;;;;-1:-1:-1;;;5139:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;54203:17:0;::::1;;::::0;;;:7:::1;:17;::::0;;;;;;;;:25;;-1:-1:-1;;54203:25:0::1;::::0;::::1;;::::0;;::::1;::::0;;;54244:26;;6717:51:1;;;6784:18;;;6777:50;54244:26:0::1;::::0;6690:18:1;54244:26:0::1;;;;;;;;54124:154:::0;;:::o;36766:253::-;36832:7;36871;;36860;:18;;36852:73;;;;-1:-1:-1;;;36852:73:0;;7040:2:1;36852:73:0;;;7022:21:1;7079:2;7059:18;;;7052:30;7118:34;7098:18;;;7091:62;-1:-1:-1;;;7169:18:1;;;7162:40;7219:19;;36852:73:0;6838:406:1;36852:73:0;36936:19;36959:10;:8;:10::i;:::-;36936:33;-1:-1:-1;36987:24:0;:7;36936:33;36987:11;:24::i;:::-;36980:31;36766:253;-1:-1:-1;;;36766:253:0:o;54548:238::-;4973:7;5000:6;-1:-1:-1;;;;;5000:6:0;3874:10;5147:23;5139:68;;;;-1:-1:-1;;;5139:68:0;;;;;;;:::i;:::-;54695:27:::1;::::0;-1:-1:-1;;;54695:27:0;;-1:-1:-1;;;;;7441:32:1;;;54695:27:0::1;::::0;::::1;7423:51:1::0;7490:18;;;7483:34;;;54673:10:0;;54695:14;;::::1;::::0;::::1;::::0;7396:18:1;;54695:27:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;54738:40:0::1;::::0;;-1:-1:-1;;;;;8036:15:1;;;8018:34;;8083:2;8068:18;;8061:34;;;8131:15;;8111:18;;;8104:43;54738:40:0;;::::1;::::0;;;;7968:2:1;54738:40:0;;::::1;54640:146;54548:238:::0;;;:::o;37368:479::-;4973:7;5000:6;-1:-1:-1;;;;;5000:6:0;3874:10;5147:23;5139:68;;;;-1:-1:-1;;;5139:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37450:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;37442:60;;;::::0;-1:-1:-1;;;37442:60:0;;8360:2:1;37442:60:0::1;::::0;::::1;8342:21:1::0;8399:2;8379:18;;;8372:30;8438:29;8418:18;;;8411:57;8485:18;;37442:60:0::1;8158:351:1::0;37442:60:0::1;37518:9;37513:327;37537:9;:16:::0;37533:20;::::1;37513:327;;;37595:7;-1:-1:-1::0;;;;;37579:23:0::1;:9;37589:1;37579:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;37579:12:0::1;:23;37575:254;;;37638:9;37648:16:::0;;:20:::1;::::0;37667:1:::1;::::0;37648:20:::1;:::i;:::-;37638:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;37623:9:::1;:12:::0;;-1:-1:-1;;;;;37638:31:0;;::::1;::::0;37633:1;;37623:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;37623:46:0::1;-1:-1:-1::0;;;;;37623:46:0;;::::1;;::::0;;37688:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;37727:11:::1;:20:::0;;;;:28;;-1:-1:-1;;37727:28:0::1;::::0;;37774:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;37774:15:0;;;;;-1:-1:-1;;;;;;37774:15:0::1;::::0;;;;;37513:327:::1;37368:479:::0;:::o;37575:254::-:1;37555:3:::0;::::1;::::0;::::1;:::i;:::-;;;;37513:327;;;;37368:479:::0;:::o;35584:220::-;3874:10;35674:4;35723:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;35723:34:0;;;;;;;;;;35674:4;;35691:83;;35714:7;;35723:50;;35762:10;35723:38;:50::i;55945:91::-;4973:7;5000:6;-1:-1:-1;;;;;5000:6:0;3874:10;5147:23;5139:68;;;;-1:-1:-1;;;5139:68:0;;;;;;;:::i;:::-;56003:25:::1;56009:10;56021:6;56003:5;:25::i;38552:113::-:0;4973:7;5000:6;-1:-1:-1;;;;;5000:6:0;3874:10;5147:23;5139:68;;;;-1:-1:-1;;;5139:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38623:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;38623:34:0::1;38653:4;38623:34;::::0;;38552:113::o;36318:440::-;36410:7;30944:24;36438:7;:18;;36430:62;;;;-1:-1:-1;;;36430:62:0;;9250:2:1;36430:62:0;;;9232:21:1;9289:2;9269:18;;;9262:30;9328:33;9308:18;;;9301:61;9379:18;;36430:62:0;9048:355:1;36430:62:0;36508:17;36503:248;;36543:15;36568:19;36579:7;36568:10;:19::i;:::-;-1:-1:-1;36542:45:0;;-1:-1:-1;36602:14:0;;-1:-1:-1;;;;;;36602:14:0;36503:248;36651:23;36683:19;36694:7;36683:10;:19::i;:::-;-1:-1:-1;36649:53:0;;-1:-1:-1;36717:22:0;;-1:-1:-1;;;;;;36717:22:0;40711:277;4973:7;5000:6;-1:-1:-1;;;;;5000:6:0;3874:10;5147:23;5139:68;;;;-1:-1:-1;;;5139:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40804:22:0;::::1;40796:88;;;::::0;-1:-1:-1;;;40796:88:0;;9610:2:1;40796:88:0::1;::::0;::::1;9592:21:1::0;9649:2;9629:18;;;9622:30;9688:34;9668:18;;;9661:62;-1:-1:-1;;;9739:18:1;;;9732:51;9800:19;;40796:88:0::1;9408:417:1::0;40796:88:0::1;40895:23;:34:::0;;-1:-1:-1;;;;;;40895:34:0::1;-1:-1:-1::0;;;;;40895:34:0;::::1;::::0;;::::1;::::0;;;40945:35:::1;::::0;1804:51:1;;;40945:35:0::1;::::0;1792:2:1;1777:18;40945:35:0::1;;;;;;;;40711:277:::0;:::o;41499:157::-;4973:7;5000:6;-1:-1:-1;;;;;5000:6:0;3874:10;5147:23;5139:68;;;;-1:-1:-1;;;5139:68:0;;;;;;;:::i;:::-;41575:20:::1;:28:::0;;-1:-1:-1;;41575:28:0::1;::::0;::::1;;::::0;;::::1;::::0;;;41619:29:::1;::::0;1397:41:1;;;41619:29:0::1;::::0;1385:2:1;1370:18;41619:29:0::1;1257:187:1::0;37027:333:0;4973:7;5000:6;-1:-1:-1;;;;;5000:6:0;3874:10;5147:23;5139:68;;;;-1:-1:-1;;;5139:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37110:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;37109:21;37101:61;;;::::0;-1:-1:-1;;;37101:61:0;;10032:2:1;37101:61:0::1;::::0;::::1;10014:21:1::0;10071:2;10051:18;;;10044:30;10110:29;10090:18;;;10083:57;10157:18;;37101:61:0::1;9830:351:1::0;37101:61:0::1;-1:-1:-1::0;;;;;37176:16:0;::::1;37195:1;37176:16:::0;;;:7:::1;:16;::::0;;;;;:20;37173:108:::1;;-1:-1:-1::0;;;;;37252:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;37232:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;37213:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;37173:108:::1;-1:-1:-1::0;;;;;37291:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;37291:27:0::1;37314:4;37291:27:::0;;::::1;::::0;;;37329:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;37329:23:0::1;::::0;;::::1;::::0;;37027:333::o;39956:234::-;4973:7;5000:6;-1:-1:-1;;;;;5000:6:0;3874:10;5147:23;5139:68;;;;-1:-1:-1;;;5139:68:0;;;;;;;:::i;:::-;40046:17:::1;:32:::0;;;40111:17:::1;::::0;40097:11:::1;::::0;40152:3:::1;::::0;40066:12;;40097:31:::1;::::0;40111:17;40097:31:::1;:::i;34250:198::-:0;-1:-1:-1;;;;;34340:20:0;;34316:7;34340:20;;;:11;:20;;;;;;;;34336:49;;;-1:-1:-1;;;;;;34369:16:0;;;;;:7;:16;;;;;;;34250:198::o;34336:49::-;-1:-1:-1;;;;;34423:16:0;;;;;;:7;:16;;;;;;34403:37;;:19;:37::i;5578:103::-;4973:7;5000:6;-1:-1:-1;;;;;5000:6:0;3874:10;5147:23;5139:68;;;;-1:-1:-1;;;5139:68:0;;;;;;;:::i;:::-;5643:30:::1;5670:1;5643:18;:30::i;:::-;5578:103::o:0;54286:254::-;4973:7;5000:6;-1:-1:-1;;;;;5000:6:0;3874:10;5147:23;5139:68;;;;-1:-1:-1;;;5139:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;54377:19:0;::::1;7399:20:::0;54369:81:::1;;;::::0;-1:-1:-1;;;54369:81:0;;10388:2:1;54369:81:0::1;::::0;::::1;10370:21:1::0;10427:2;10407:18;;;10400:30;10466:34;10446:18;;;10439:62;-1:-1:-1;;;10517:18:1;;;10510:45;10572:19;;54369:81:0::1;10186:411:1::0;54369:81:0::1;-1:-1:-1::0;;;;;54461:19:0;::::1;;::::0;;;:9:::1;:19;::::0;;;;;;;;:27;;-1:-1:-1;;54461:27:0::1;::::0;::::1;;::::0;;::::1;::::0;;;54504:28;;6717:51:1;;;6784:18;;;6777:50;54504:28:0::1;::::0;6690:18:1;54504:28:0::1;6549:284:1::0;39255:229:0;4973:7;5000:6;-1:-1:-1;;;;;5000:6:0;3874:10;5147:23;5139:68;;;;-1:-1:-1;;;5139:68:0;;;;;;;:::i;:::-;39344:16:::1;:31:::0;;;39407:16:::1;::::0;39394:10:::1;::::0;39446:3:::1;::::0;39363:12;;39394:29:::1;::::0;39407:16;39394:29:::1;:::i;55356:91::-:0;4973:7;5000:6;-1:-1:-1;;;;;5000:6:0;3874:10;5147:23;5139:68;;;;-1:-1:-1;;;5139:68:0;;;;;;;:::i;:::-;55414:25:::1;55420:10;55432:6;55414:5;:25::i;35812:271::-:0;35907:4;35924:129;3874:10;35947:7;35956:96;35995:15;35956:96;;;;;;;;;;;;;;;;;3874:10;35956:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;35956:34:0;;;;;;;;;;;;:38;:96::i;34456:321::-;-1:-1:-1;;;;;34562:28:0;;34536:4;34562:28;;;:17;:28;;;;;;;;34561:29;34553:65;;;;-1:-1:-1;;;34553:65:0;;;;;;;:::i;:::-;34656:9;34638:28;;;;:17;:28;;;;;;;;34637:29;34629:65;;;;-1:-1:-1;;;34629:65:0;;;;;;;:::i;:::-;34705:42;3874:10;34729:9;34740:6;34705:9;:42::i;39710:234::-;4973:7;5000:6;-1:-1:-1;;;;;5000:6:0;3874:10;5147:23;5139:68;;;;-1:-1:-1;;;5139:68:0;;;;;;;:::i;:::-;39800:17:::1;:32:::0;;;39885:17:::1;::::0;39851:11:::1;::::0;39906:3:::1;::::0;39885:17;39851:31:::1;::::0;39820:12;;39851:31:::1;:::i;42217:95::-:0;4973:7;5000:6;-1:-1:-1;;;;;5000:6:0;3874:10;5147:23;5139:68;;;;-1:-1:-1;;;5139:68:0;;;;;;;:::i;:::-;42285:19:::1;42296:7;42285:10;:19::i;40371:175::-:0;4973:7;5000:6;-1:-1:-1;;;;;5000:6:0;3874:10;5147:23;5139:68;;;;-1:-1:-1;;;5139:68:0;;;;;;;:::i;:::-;40452:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;40452:32:0::1;-1:-1:-1::0;;;;40452:32:0;;::::1;;::::0;;40500:38:::1;::::0;::::1;::::0;::::1;::::0;40476:8;1422:14:1;1415:22;1397:41;;1385:2;1370:18;;1257:187;39492:210:0;4973:7;5000:6;-1:-1:-1;;;;;5000:6:0;3874:10;5147:23;5139:68;;;;-1:-1:-1;;;5139:68:0;;;;;;;:::i;:::-;39570:11:::1;:20:::0;;;39643:17:::1;::::0;39623::::1;::::0;39664:3:::1;::::0;39643:17;39609:31:::1;::::0;39584:6;39609:31:::1;:::i;40201:162::-:0;4973:7;5000:6;-1:-1:-1;;;;;5000:6:0;3874:10;5147:23;5139:68;;;;-1:-1:-1;;;5139:68:0;;;;;;;:::i;:::-;40295:60:::1;40339:5;40295:25;30944:24;40307:12:::0;40295:11:::1;:25::i;:::-;:29:::0;::::1;:60::i;:::-;40280:12;:75:::0;-1:-1:-1;40201:162:0:o;40558:141::-;4973:7;5000:6;-1:-1:-1;;;;;5000:6:0;3874:10;5147:23;5139:68;;;;-1:-1:-1;;;5139:68:0;;;;;;;:::i;:::-;40629:11:::1;:22:::0;;;::::1;;-1:-1:-1::0;;;40629:22:0::1;-1:-1:-1::0;;;;40629:22:0;;::::1;;::::0;;40667:24:::1;::::0;::::1;::::0;::::1;::::0;40643:8;1422:14:1;1415:22;1397:41;;1385:2;1370:18;;1257:187;38677:112:0;4973:7;5000:6;-1:-1:-1;;;;;5000:6:0;3874:10;5147:23;5139:68;;;;-1:-1:-1;;;5139:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38746:27:0::1;38776:5;38746:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;38746:35:0::1;::::0;;38677:112::o;41261:230::-;4973:7;5000:6;-1:-1:-1;;;;;5000:6:0;3874:10;5147:23;5139:68;;;;-1:-1:-1;;;5139:68:0;;;;;;;:::i;:::-;41370:1:::1;41360:7;:11;41352:20;;;::::0;::::1;;41383:29;:39:::0;;;41438:45:::1;::::0;1595:25:1;;;41438:45:0::1;::::0;1583:2:1;1568:18;41438:45:0::1;1449:177:1::0;5836:201:0;4973:7;5000:6;-1:-1:-1;;;;;5000:6:0;3874:10;5147:23;5139:68;;;;-1:-1:-1;;;5139:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5925:22:0;::::1;5917:73;;;::::0;-1:-1:-1;;;5917:73:0;;10804:2:1;5917:73:0::1;::::0;::::1;10786:21:1::0;10843:2;10823:18;;;10816:30;10882:34;10862:18;;;10855:62;-1:-1:-1;;;10933:18:1;;;10926:36;10979:19;;5917:73:0::1;10602:402:1::0;5917:73:0::1;6001:28;6020:8;6001:18;:28::i;54798:212::-:0;4973:7;5000:6;-1:-1:-1;;;;;5000:6:0;3874:10;5147:23;5139:68;;;;-1:-1:-1;;;5139:68:0;;;;;;;:::i;:::-;54912:7:::1;54887:21;:32;;54879:41;;;::::0;::::1;;54931:29;::::0;-1:-1:-1;;;;;54931:20:0;::::1;::::0;:29;::::1;;;::::0;54952:7;;54931:29:::1;::::0;;;54952:7;54931:20;:29;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;54976:26:0::1;::::0;;11183:25:1;;;-1:-1:-1;;;;;11244:32:1;;11239:2;11224:18;;11217:60;54976:26:0::1;::::0;11156:18:1;54976:26:0::1;11009:274:1::0;40996:253:0;4973:7;5000:6;-1:-1:-1;;;;;5000:6:0;3874:10;5147:23;5139:68;;;;-1:-1:-1;;;5139:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41083:22:0;::::1;41075:82;;;::::0;-1:-1:-1;;;41075:82:0;;11490:2:1;41075:82:0::1;::::0;::::1;11472:21:1::0;11529:2;11509:18;;;11502:30;11568:34;11548:18;;;11541:62;-1:-1:-1;;;11619:18:1;;;11612:45;11674:19;;41075:82:0::1;11288:411:1::0;41075:82:0::1;41168:17;:28:::0;;-1:-1:-1;;;;;;41168:28:0::1;-1:-1:-1::0;;;;;41168:28:0;::::1;::::0;;::::1;::::0;;;41212:29:::1;::::0;1804:51:1;;;41212:29:0::1;::::0;1792:2:1;1777:18;41212:29:0::1;1631:230:1::0;46232:337:0;-1:-1:-1;;;;;46325:19:0;;46317:68;;;;-1:-1:-1;;;46317:68:0;;11906:2:1;46317:68:0;;;11888:21:1;11945:2;11925:18;;;11918:30;11984:34;11964:18;;;11957:62;-1:-1:-1;;;12035:18:1;;;12028:34;12079:19;;46317:68:0;11704:400:1;46317:68:0;-1:-1:-1;;;;;46404:21:0;;46396:68;;;;-1:-1:-1;;;46396:68:0;;12311:2:1;46396:68:0;;;12293:21:1;12350:2;12330:18;;;12323:30;12389:34;12369:18;;;12362:62;-1:-1:-1;;;12440:18:1;;;12433:32;12482:19;;46396:68:0;12109:398:1;46396:68:0;-1:-1:-1;;;;;46477:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;46529:32;;1595:25:1;;;46529:32:0;;1568:18:1;46529:32:0;;;;;;;;46232:337;;;:::o;46577:2833::-;-1:-1:-1;;;;;46699:18:0;;46691:68;;;;-1:-1:-1;;;46691:68:0;;12714:2:1;46691:68:0;;;12696:21:1;12753:2;12733:18;;;12726:30;12792:34;12772:18;;;12765:62;-1:-1:-1;;;12843:18:1;;;12836:35;12888:19;;46691:68:0;12512:401:1;46691:68:0;-1:-1:-1;;;;;46778:16:0;;46770:64;;;;-1:-1:-1;;;46770:64:0;;13120:2:1;46770:64:0;;;13102:21:1;13159:2;13139:18;;;13132:30;13198:34;13178:18;;;13171:62;-1:-1:-1;;;13249:18:1;;;13242:33;13292:19;;46770:64:0;12918:399:1;46770:64:0;46862:1;46853:6;:10;46845:64;;;;-1:-1:-1;;;46845:64:0;;13524:2:1;46845:64:0;;;13506:21:1;13563:2;13543:18;;;13536:30;13602:34;13582:18;;;13575:62;-1:-1:-1;;;13653:18:1;;;13646:39;13702:19;;46845:64:0;13322:405:1;46845:64:0;4973:7;5000:6;-1:-1:-1;;;;;46923:15:0;;;5000:6;;46923:15;;;;:32;;-1:-1:-1;4973:7:0;5000:6;-1:-1:-1;;;;;46942:13:0;;;5000:6;;46942:13;;46923:32;46920:125;;;46988:12;;46978:6;:22;;46970:75;;;;-1:-1:-1;;;46970:75:0;;13934:2:1;46970:75:0;;;13916:21:1;13973:2;13953:18;;;13946:30;14012:34;13992:18;;;13985:62;-1:-1:-1;;;14063:18:1;;;14056:38;14111:19;;46970:75:0;13732:404:1;46970:75:0;47074:11;;-1:-1:-1;;;47074:11:0;;;;47073:12;:46;;;;-1:-1:-1;;;;;;47090:11:0;;;;;;:7;:11;;;;;;;;;:28;;-1:-1:-1;;;;;;47105:13:0;;;;;;:7;:13;;;;;;;;47090:28;47070:104;;;47134:40;;-1:-1:-1;;;47134:40:0;;14343:2:1;47134:40:0;;;14325:21:1;14382:2;14362:18;;;14355:30;14421:32;14401:18;;;14394:60;14471:18;;47134:40:0;14141:354:1;47070:104:0;-1:-1:-1;;;;;47190:15:0;;;;;;:9;:15;;;;;;;;;:32;;-1:-1:-1;;;;;;47209:13:0;;;;;;:9;:13;;;;;;;;47190:32;47187:91;;;47239:27;;-1:-1:-1;;;47239:27:0;;14702:2:1;47239:27:0;;;14684:21:1;14741:2;14721:18;;;14714:30;-1:-1:-1;;;14760:18:1;;;14753:47;14817:18;;47239:27:0;14500:341:1;47187:91:0;47572:28;47603:24;47621:4;47603:9;:24::i;:::-;47572:55;;47675:12;;47651:20;:36;47648:103;;-1:-1:-1;47727:12:0;;47648:103;47822:29;;47798:53;;;;;;;47880;;-1:-1:-1;47917:16:0;;-1:-1:-1;;;47917:16:0;;;;47916:17;47880:53;:81;;;;-1:-1:-1;;;;;;47950:11:0;;;;;;:7;:11;;;;;;;;47880:81;:119;;;;-1:-1:-1;47978:21:0;;-1:-1:-1;;;47978:21:0;;;;47880:119;:161;;;;-1:-1:-1;;;;;;48017:24:0;;;;;;:18;:24;;;;;;;;48016:25;47880:161;47862:321;;;48091:29;;48068:52;;48135:36;48150:20;48135:14;:36::i;:::-;-1:-1:-1;;;;;48355:13:0;;48265:12;48355:13;;;:7;:13;;;;;;48280:4;;48355:13;;48354:14;:30;;;;-1:-1:-1;;;;;;48373:11:0;;;;;;:7;:11;;;;;;;;48372:12;48354:30;48351:77;;;-1:-1:-1;48411:5:0;48351:77;48525:20;;;;:62;;;;-1:-1:-1;;;;;;48550:15:0;;7399:20;7447:8;;48550:36;;;-1:-1:-1;;;;;;48571:13:0;;7399:20;7447:8;;48571:15;48522:108;;;-1:-1:-1;48614:4:0;48522:108;-1:-1:-1;;;;;48730:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;48758:22:0;;;;;;:18;:22;;;;;;;;48730:50;48727:96;;;-1:-1:-1;48806:5:0;48727:96;-1:-1:-1;;;;;48863:13:0;;;;;;:7;:13;;;;;;;;;:34;;-1:-1:-1;;;;;;48880:15:0;;7399:20;7447:8;;48880:17;48860:180;;;48924:10;;48914:7;:20;48965:16;;48949:13;:32;49012:16;;48996:13;:32;48860:180;-1:-1:-1;;;;;49089:11:0;;;;;;:7;:11;;;;;;;;;:30;;-1:-1:-1;;;;;;49104:13:0;;7399:20;7447:8;;49104:15;49086:191;;;49146:11;;49136:7;:21;49188:17;;49172:13;:33;49236:17;;49220:13;:33;49086:191;49364:38;49379:4;49384:2;49387:6;49394:7;49364:14;:38::i;:::-;46680:2730;;;46577:2833;;;:::o;19910:240::-;20030:7;20091:12;20083:6;;;;20075:29;;;;-1:-1:-1;;;20075:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;20126:5:0;;;19910:240::o;43963:163::-;44004:7;44025:15;44042;44061:19;:17;:19::i;:::-;44024:56;;-1:-1:-1;44024:56:0;-1:-1:-1;44098:20:0;44024:56;;44098:11;:20::i;:::-;44091:27;;;;43963:163;:::o;18768:98::-;18826:7;18853:5;18857:1;18853;:5;:::i;17631:98::-;17689:7;17716:5;17720:1;17716;:5;:::i;55455:485::-;-1:-1:-1;;;;;55539:21:0;;55531:67;;;;-1:-1:-1;;;55531:67:0;;15270:2:1;55531:67:0;;;15252:21:1;15309:2;15289:18;;;15282:30;15348:34;15328:18;;;15321:62;-1:-1:-1;;;15399:18:1;;;15392:31;15440:19;;55531:67:0;15068:397:1;55531:67:0;-1:-1:-1;;;;;55698:16:0;;55673:22;55698:16;;;:7;:16;;;;;;55733:24;;;;55725:71;;;;-1:-1:-1;;;55725:71:0;;15672:2:1;55725:71:0;;;15654:21:1;15711:2;15691:18;;;15684:30;15750:34;15730:18;;;15723:62;-1:-1:-1;;;15801:18:1;;;15794:32;15843:19;;55725:71:0;15470:398:1;55725:71:0;55826:23;55843:6;55826:14;:23;:::i;:::-;-1:-1:-1;;;;;55807:16:0;;;;;;:7;:16;;;;;:42;;;;55860:7;:17;;55871:6;;55807:16;55860:17;;55871:6;;55860:17;:::i;:::-;;;;-1:-1:-1;;55895:37:0;;1595:25:1;;;55921:1:0;;-1:-1:-1;;;;;55895:37:0;;;-1:-1:-1;;;;;;;;;;;55895:37:0;1583:2:1;1568:18;55895:37:0;1449:177:1;42574:454:0;42633:7;42642;42651;42660;42669;42678;42687;42708:23;42733:12;42747:18;42767:12;42783:20;42795:7;42783:11;:20::i;:::-;42707:96;;;;;;;;42815:15;42832:23;42857:12;42873:56;42885:7;42894:4;42900:10;42912:4;42918:10;:8;:10::i;:::-;42873:11;:56::i;:::-;42814:115;;-1:-1:-1;42814:115:0;-1:-1:-1;42814:115:0;-1:-1:-1;42980:15:0;;-1:-1:-1;42997:4:0;;-1:-1:-1;43003:10:0;;-1:-1:-1;43015:4:0;-1:-1:-1;;;;42574:454:0;;;;;;;;;:::o;6197:191::-;6271:16;6290:6;;-1:-1:-1;;;;;6307:17:0;;;-1:-1:-1;;;;;;6307:17:0;;;;;;6340:40;;6290:6;;;;;;;6340:40;;6271:16;6340:40;6260:128;6197:191;:::o;55018:331::-;-1:-1:-1;;;;;55102:21:0;;55094:65;;;;-1:-1:-1;;;55094:65:0;;16075:2:1;55094:65:0;;;16057:21:1;16114:2;16094:18;;;16087:30;16153:33;16133:18;;;16126:61;16204:18;;55094:65:0;15873:355:1;55094:65:0;55245:6;55234:7;;:17;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;55262:16:0;;;;;;:7;:16;;;;;:26;;55282:6;;55262:16;:26;;55282:6;;55262:26;:::i;:::-;;;;-1:-1:-1;;55304:37:0;;1595:25:1;;;-1:-1:-1;;;;;55304:37:0;;;55321:1;;-1:-1:-1;;;;;;;;;;;55304:37:0;1583:2:1;1568:18;55304:37:0;;;;;;;;55018:331;;:::o;41668:537::-;41724:35;41781:7;41724:65;;41834:16;-1:-1:-1;;;;;41834:24:0;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;41816:53:0;;41878:4;41885:16;-1:-1:-1;;;;;41885:21:0;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41816:93;;-1:-1:-1;;;;;;41816:93:0;;;;;;;-1:-1:-1;;;;;16719:15:1;;;41816:93:0;;;16701:34:1;16771:15;;16751:18;;;16744:43;16636:18;;41816:93:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41800:13;:109;;-1:-1:-1;;;;;;41800:109:0;-1:-1:-1;;;;;41800:109:0;;;;;;;;;41920:157;;41999:16;-1:-1:-1;;;;;41999:24:0;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;41981:56:0;;42046:4;42053:16;-1:-1:-1;;;;;42053:21:0;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41981:96;;-1:-1:-1;;;;;;41981:96:0;;;;;;;-1:-1:-1;;;;;16719:15:1;;;41981:96:0;;;16701:34:1;16771:15;;16751:18;;;16744:43;16636:18;;41981:96:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41965:13;:112;;-1:-1:-1;;;;;;41965:112:0;-1:-1:-1;;;;;41965:112:0;;;;;;;;;;41920:157;42088:15;:34;;-1:-1:-1;;;;;;42088:34:0;-1:-1:-1;;;;;42088:34:0;;;;;;;;;;42143:13;;42133:30;;42143:13;-1:-1:-1;42133:9:0;:30::i;:::-;42179:18;;-1:-1:-1;;;;;1822:32:1;;1804:51;;42179:18:0;;1792:2:1;1777:18;42179::0;1631:230:1;18369:98:0;18427:7;18454:5;18458:1;18454;:5;:::i;49418:985::-;33168:16;:23;;-1:-1:-1;;;;33168:23:0;-1:-1:-1;;;33168:23:0;;;;49569:27:::1;:20:::0;49594:1:::1;49569:24;:27::i;:::-;49554:42:::0;-1:-1:-1;49607:17:0::1;49627:30;:20:::0;49554:42;49627:24:::1;:30::i;:::-;49607:50:::0;-1:-1:-1;49960:21:0::1;50026:22;50043:4:::0;50026:16:::1;:22::i;:::-;50179:18;50200:41;:21;50226:14:::0;50200:25:::1;:41::i;:::-;50179:62;;50291:35;50304:9;50315:10;50291:12;:35::i;:::-;50352:43;::::0;;17173:25:1;;;17229:2;17214:18;;17207:34;;;17257:18;;;17250:34;;;50352:43:0::1;::::0;17161:2:1;17146:18;50352:43:0::1;;;;;;;-1:-1:-1::0;;33214:16:0;:24;;-1:-1:-1;;;;33214:24:0;;;-1:-1:-1;;;49418:985:0:o;51679:642::-;51790:7;51786:40;;51812:14;46022:1;46012:7;:11;;;46034:13;:17;;;46062:13;:17;45969:118;51812:14;-1:-1:-1;;;;;51851:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;51875:22:0;;;;;;:11;:22;;;;;;;;51874:23;51851:46;51847:467;;;51914:48;51936:6;51944:9;51955:6;51914:21;:48::i;:::-;51847:467;;;-1:-1:-1;;;;;51985:19:0;;;;;;:11;:19;;;;;;;;51984:20;:46;;;;-1:-1:-1;;;;;;52008:22:0;;;;;;:11;:22;;;;;;;;51984:46;51980:334;;;52047:46;52067:6;52075:9;52086:6;52047:19;:46::i;51980:334::-;-1:-1:-1;;;;;52115:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;52138:22:0;;;;;;:11;:22;;;;;;;;52115:45;52111:203;;;52177:48;52199:6;52207:9;52218:6;52177:21;:48::i;52111:203::-;52258:44;52276:6;52284:9;52295:6;52258:17;:44::i;:::-;51679:642;;;;:::o;44134:561::-;44231:7;;44184;;;;30944:24;44184:7;44291:289;44315:9;:16;44311:20;;44291:289;;;44381:7;44357;:21;44365:9;44375:1;44365:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;44365:12:0;44357:21;;;;;;;;;;;;;:31;;:66;;;44416:7;44392;:21;44400:9;44410:1;44400:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;44400:12:0;44392:21;;;;;;;;;;;;;:31;44357:66;44353:97;;;-1:-1:-1;;44433:7:0;;;30944:24;;-1:-1:-1;44134:561:0;-1:-1:-1;;44134:561:0:o;44353:97::-;44475:34;44487:7;:21;44495:9;44505:1;44495:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;44495:12:0;44487:21;;;;;;;;;;;;;44475:7;;:11;:34::i;:::-;44465:44;;44534:34;44546:7;:21;44554:9;44564:1;44554:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;44554:12:0;44546:21;;;;;;;;;;;;;44534:7;;:11;:34::i;:::-;44524:44;-1:-1:-1;44333:3:0;;;;:::i;:::-;;;;44291:289;;;-1:-1:-1;44604:7:0;;:20;;30944:24;44604:11;:20::i;:::-;44594:7;:30;44590:61;;;-1:-1:-1;;44634:7:0;;;30944:24;;-1:-1:-1;44134:561:0;-1:-1:-1;44134:561:0:o;44590:61::-;44670:7;;44679;;-1:-1:-1;44134:561:0;-1:-1:-1;44134:561:0:o;56639:92::-;;;;:::o;43036:411::-;43096:7;43105;43114;43123;43143:12;43158:24;43174:7;43158:15;:24::i;:::-;43143:39;;43193:18;43214:30;43236:7;43214:21;:30::i;:::-;43193:51;;43255:12;43270:30;43292:7;43270:21;:30::i;:::-;43255:45;-1:-1:-1;43311:23:0;43337:43;43255:45;43337:33;43359:10;43337:33;:7;43349:4;43337:11;:17::i;:::-;:21;;:33::i;:43::-;43311:69;43416:4;;-1:-1:-1;43422:10:0;;-1:-1:-1;43422:10:0;-1:-1:-1;43036:411:0;;-1:-1:-1;;;43036:411:0:o;43455:500::-;43584:7;;;;43640:24;:7;43652:11;43640;:24::i;:::-;43622:42;-1:-1:-1;43675:12:0;43690:21;:4;43699:11;43690:8;:21::i;:::-;43675:36;-1:-1:-1;43722:18:0;43743:27;:10;43758:11;43743:14;:27::i;:::-;43722:48;-1:-1:-1;43781:12:0;43796:21;:4;43805:11;43796:8;:21::i;:::-;43781:36;-1:-1:-1;43828:23:0;43854:43;43781:36;43854:33;43876:10;43854:33;:7;43866:4;43854:11;:17::i;:43::-;43916:7;;;;-1:-1:-1;43942:4:0;;-1:-1:-1;43455:500:0;;-1:-1:-1;;;;;;;;;43455:500:0:o;18012:98::-;18070:7;18097:5;18101:1;18097;:5;:::i;50411:589::-;50561:16;;;50575:1;50561:16;;;;;;;;50537:21;;50561:16;;;;;;;;;;-1:-1:-1;50561:16:0;50537:40;;50606:4;50588;50593:1;50588:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;50588:23:0;;;:7;;;;;;;;;;:23;;;;50632:15;;:22;;;-1:-1:-1;;;50632:22:0;;;;:15;;;;;:20;;:22;;;;;50588:7;;50632:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50622:4;50627:1;50622:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;50622:32:0;;;:7;;;;;;;;;:32;50699:15;;50667:62;;50684:4;;50699:15;50717:11;50667:8;:62::i;:::-;50768:15;;:224;;-1:-1:-1;;;50768:224:0;;-1:-1:-1;;;;;50768:15:0;;;;:66;;:224;;50849:11;;50768:15;;50919:4;;50946;;50966:15;;50768:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51008:590;51188:15;;51156:62;;51173:4;;-1:-1:-1;;;;;51188:15:0;51206:11;51156:8;:62::i;:::-;51261:15;;51465:17;;51261:262;;-1:-1:-1;;;51261:262:0;;51333:4;51261:262;;;18753:34:1;18803:18;;;18796:34;;;51261:15:0;18846:18:1;;;18839:34;;;18889:18;;;18882:34;-1:-1:-1;;;;;51465:17:0;;;18932:19:1;;;18925:44;51497:15:0;18985:19:1;;;18978:35;51261:15:0;;;:31;;51300:9;;18687:19:1;;51261:262:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;51563:13:0;;51539:51;;1595:25:1;;;-1:-1:-1;;;;;51563:13:0;;;;-1:-1:-1;51556:4:0;;-1:-1:-1;;;;;;;;;;;51539:51:0;1583:2:1;1568:18;51539:51:0;1449:177:1;53511:605:0;53614:15;53631:23;53656:12;53670:23;53695:12;53709:18;53729:12;53745:19;53756:7;53745:10;:19::i;:::-;53613:151;;;;;;;;;;;;;;53793:28;53813:7;53793;:15;53801:6;-1:-1:-1;;;;;53793:15:0;-1:-1:-1;;;;;53793:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;53775:15:0;;;;;;:7;:15;;;;;;;;:46;;;;53850:7;:15;;;;:28;;53870:7;53850:19;:28::i;:::-;-1:-1:-1;;;;;53832:15:0;;;;;;;:7;:15;;;;;;:46;;;;53910:18;;;;;;;:39;;53933:15;53910:22;:39::i;:::-;-1:-1:-1;;;;;53889:18:0;;;;;;:7;:18;;;;;:60;53963:26;53978:10;53963:14;:26::i;:::-;54000:14;54009:4;54000:8;:14::i;:::-;54025:23;54037:4;54043;54025:11;:23::i;:::-;54081:9;-1:-1:-1;;;;;54064:44:0;54073:6;-1:-1:-1;;;;;54064:44:0;-1:-1:-1;;;;;;;;;;;54092:15:0;54064:44;;;;1595:25:1;;1583:2;1568:18;;1449:177;54064:44:0;;;;;;;;53602:514;;;;;;;53511:605;;;:::o;52878:625::-;52979:15;52996:23;53021:12;53035:23;53060:12;53074:18;53094:12;53110:19;53121:7;53110:10;:19::i;:::-;52978:151;;;;;;;;;;;;;;53158:28;53178:7;53158;:15;53166:6;-1:-1:-1;;;;;53158:15:0;-1:-1:-1;;;;;53158:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;53140:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;53218:18;;;;;:7;:18;;;;;:39;;53241:15;53218:22;:39::i;:::-;-1:-1:-1;;;;;53197:18:0;;;;;;:7;:18;;;;;;;;:60;;;;53289:7;:18;;;;:39;;53312:15;53289:22;:39::i;37859:681::-;37962:15;37979:23;38004:12;38018:23;38043:12;38057:18;38077:12;38093:19;38104:7;38093:10;:19::i;:::-;37961:151;;;;;;;;;;;;;;38141:28;38161:7;38141;:15;38149:6;-1:-1:-1;;;;;38141:15:0;-1:-1:-1;;;;;38141:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;38123:15:0;;;;;;:7;:15;;;;;;;;:46;;;;38198:7;:15;;;;:28;;38218:7;38198:19;:28::i;52329:541::-;52428:15;52445:23;52470:12;52484:23;52509:12;52523:18;52543:12;52559:19;52570:7;52559:10;:19::i;:::-;52427:151;;;;;;;;;;;;;;52607:28;52627:7;52607;:15;52615:6;-1:-1:-1;;;;;52607:15:0;-1:-1:-1;;;;;52607:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;45455:154::-;45519:7;45546:55;45585:5;45546:20;45558:7;;45546;:11;;:20;;;;:::i;45791:166::-;45861:7;45888:61;45933:5;45888:26;45900:13;;45888:7;:11;;:26;;;;:::i;45617:166::-;45687:7;45714:61;45759:5;45714:26;45726:13;;45714:7;:11;;:26;;;;:::i;44707:355::-;44770:19;44793:10;:8;:10::i;:::-;44770:33;-1:-1:-1;44814:18:0;44835:27;:10;44770:33;44835:14;:27::i;:::-;44914:4;44898:22;;;;:7;:22;;;;;;44814:48;;-1:-1:-1;44898:38:0;;44814:48;44898:26;:38::i;:::-;44889:4;44873:22;;;;:7;:22;;;;;;;;:63;;;;44950:11;:26;;;;;;44947:107;;;45032:4;45016:22;;;;:7;:22;;;;;;:38;;45043:10;45016:26;:38::i;:::-;45007:4;44991:22;;;;:7;:22;;;;;:63;44759:303;;44707:355;:::o;45074:369::-;45125:19;45148:10;:8;:10::i;:::-;45125:33;-1:-1:-1;45169:12:0;45184:21;:4;45125:33;45184:8;:21::i;:::-;45259:23;;-1:-1:-1;;;;;45259:23:0;45251:32;;;;:7;:32;;;;;;45169:36;;-1:-1:-1;45251:42:0;;45169:36;45251;:42::i;:::-;45224:23;;;-1:-1:-1;;;;;45224:23:0;;;45216:32;;;;:7;:32;;;;;;;;:77;;;;45319:23;;;;;45307:36;;:11;:36;;;;;;;45304:131;;;45401:23;;-1:-1:-1;;;;;45401:23:0;45393:32;;;;:7;:32;;;;;;:42;;45430:4;45393:36;:42::i;:::-;45366:23;;-1:-1:-1;;;;;45366:23:0;45358:32;;;;:7;:32;;;;;:77;45114:329;;45074:369;:::o;42419:147::-;42497:7;;:17;;42509:4;42497:11;:17::i;:::-;42487:7;:27;42538:10;;:20;;42553:4;42538:14;:20::i;:::-;42525:10;:33;-1:-1:-1;;42419:147:0:o;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:180::-;675:6;728:2;716:9;707:7;703:23;699:32;696:52;;;744:1;741;734:12;696:52;-1:-1:-1;767:23:1;;616:180;-1:-1:-1;616:180:1:o;801:131::-;-1:-1:-1;;;;;876:31:1;;866:42;;856:70;;922:1;919;912:12;937:315;1005:6;1013;1066:2;1054:9;1045:7;1041:23;1037:32;1034:52;;;1082:1;1079;1072:12;1034:52;1121:9;1108:23;1140:31;1165:5;1140:31;:::i;:::-;1190:5;1242:2;1227:18;;;;1214:32;;-1:-1:-1;;;937:315:1:o;1866:456::-;1943:6;1951;1959;2012:2;2000:9;1991:7;1987:23;1983:32;1980:52;;;2028:1;2025;2018:12;1980:52;2067:9;2054:23;2086:31;2111:5;2086:31;:::i;:::-;2136:5;-1:-1:-1;2193:2:1;2178:18;;2165:32;2206:33;2165:32;2206:33;:::i;:::-;1866:456;;2258:7;;-1:-1:-1;;;2312:2:1;2297:18;;;;2284:32;;1866:456::o;2327:118::-;2413:5;2406:13;2399:21;2392:5;2389:32;2379:60;;2435:1;2432;2425:12;2450:382;2515:6;2523;2576:2;2564:9;2555:7;2551:23;2547:32;2544:52;;;2592:1;2589;2582:12;2544:52;2631:9;2618:23;2650:31;2675:5;2650:31;:::i;:::-;2700:5;-1:-1:-1;2757:2:1;2742:18;;2729:32;2770:30;2729:32;2770:30;:::i;:::-;2819:7;2809:17;;;2450:382;;;;;:::o;3026:456::-;3103:6;3111;3119;3172:2;3160:9;3151:7;3147:23;3143:32;3140:52;;;3188:1;3185;3178:12;3140:52;3227:9;3214:23;3246:31;3271:5;3246:31;:::i;:::-;3296:5;-1:-1:-1;3348:2:1;3333:18;;3320:32;;-1:-1:-1;3404:2:1;3389:18;;3376:32;3417:33;3376:32;3417:33;:::i;:::-;3469:7;3459:17;;;3026:456;;;;;:::o;3487:247::-;3546:6;3599:2;3587:9;3578:7;3574:23;3570:32;3567:52;;;3615:1;3612;3605:12;3567:52;3654:9;3641:23;3673:31;3698:5;3673:31;:::i;3739:309::-;3804:6;3812;3865:2;3853:9;3844:7;3840:23;3836:32;3833:52;;;3881:1;3878;3871:12;3833:52;3917:9;3904:23;3894:33;;3977:2;3966:9;3962:18;3949:32;3990:28;4012:5;3990:28;:::i;4261:241::-;4317:6;4370:2;4358:9;4349:7;4345:23;4341:32;4338:52;;;4386:1;4383;4376:12;4338:52;4425:9;4412:23;4444:28;4466:5;4444:28;:::i;4507:388::-;4575:6;4583;4636:2;4624:9;4615:7;4611:23;4607:32;4604:52;;;4652:1;4649;4642:12;4604:52;4691:9;4678:23;4710:31;4735:5;4710:31;:::i;:::-;4760:5;-1:-1:-1;4817:2:1;4802:18;;4789:32;4830:33;4789:32;4830:33;:::i;4900:315::-;4968:6;4976;5029:2;5017:9;5008:7;5004:23;5000:32;4997:52;;;5045:1;5042;5035:12;4997:52;5081:9;5068:23;5058:33;;5141:2;5130:9;5126:18;5113:32;5154:31;5179:5;5154:31;:::i;5220:356::-;5422:2;5404:21;;;5441:18;;;5434:30;5500:34;5495:2;5480:18;;5473:62;5567:2;5552:18;;5220:356::o;5581:127::-;5642:10;5637:3;5633:20;5630:1;5623:31;5673:4;5670:1;5663:15;5697:4;5694:1;5687:15;5713:128;5753:3;5784:1;5780:6;5777:1;5774:13;5771:39;;;5790:18;;:::i;:::-;-1:-1:-1;5826:9:1;;5713:128::o;6197:347::-;6399:2;6381:21;;;6438:2;6418:18;;;6411:30;6477:25;6472:2;6457:18;;6450:53;6535:2;6520:18;;6197:347::o;7528:245::-;7595:6;7648:2;7636:9;7627:7;7623:23;7619:32;7616:52;;;7664:1;7661;7654:12;7616:52;7696:9;7690:16;7715:28;7737:5;7715:28;:::i;8514:127::-;8575:10;8570:3;8566:20;8563:1;8556:31;8606:4;8603:1;8596:15;8630:4;8627:1;8620:15;8646:125;8686:4;8714:1;8711;8708:8;8705:34;;;8719:18;;:::i;:::-;-1:-1:-1;8756:9:1;;8646:125::o;8776:127::-;8837:10;8832:3;8828:20;8825:1;8818:31;8868:4;8865:1;8858:15;8892:4;8889:1;8882:15;8908:135;8947:3;-1:-1:-1;;8968:17:1;;8965:43;;;8988:18;;:::i;:::-;-1:-1:-1;9035:1:1;9024:13;;8908:135::o;14846:217::-;14886:1;14912;14902:132;;14956:10;14951:3;14947:20;14944:1;14937:31;14991:4;14988:1;14981:15;15019:4;15016:1;15009:15;14902:132;-1:-1:-1;15048:9:1;;14846:217::o;16233:251::-;16303:6;16356:2;16344:9;16335:7;16331:23;16327:32;16324:52;;;16372:1;16369;16362:12;16324:52;16404:9;16398:16;16423:31;16448:5;16423:31;:::i;16798:168::-;16838:7;16904:1;16900;16896:6;16892:14;16889:1;16886:21;16881:1;16874:9;16867:17;16863:45;16860:71;;;16911:18;;:::i;:::-;-1:-1:-1;16951:9:1;;16798:168::o;17427:980::-;17689:4;17737:3;17726:9;17722:19;17768:6;17757:9;17750:25;17794:2;17832:6;17827:2;17816:9;17812:18;17805:34;17875:3;17870:2;17859:9;17855:18;17848:31;17899:6;17934;17928:13;17965:6;17957;17950:22;18003:3;17992:9;17988:19;17981:26;;18042:2;18034:6;18030:15;18016:29;;18063:1;18073:195;18087:6;18084:1;18081:13;18073:195;;;18152:13;;-1:-1:-1;;;;;18148:39:1;18136:52;;18243:15;;;;18208:12;;;;18184:1;18102:9;18073:195;;;-1:-1:-1;;;;;;;18324:32:1;;;;18319:2;18304:18;;18297:60;-1:-1:-1;;;18388:3:1;18373:19;18366:35;18285:3;17427:980;-1:-1:-1;;;17427:980:1:o;19024:306::-;19112:6;19120;19128;19181:2;19169:9;19160:7;19156:23;19152:32;19149:52;;;19197:1;19194;19187:12;19149:52;19226:9;19220:16;19210:26;;19276:2;19265:9;19261:18;19255:25;19245:35;;19320:2;19309:9;19305:18;19299:25;19289:35;;19024:306;;;;;:::o
Swarm Source
ipfs://15f8780731c16c4df7e728df84ae093dd8eeebb20bfa81c039a99c6549dd5ecd
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.