ERC-20
Overview
Max Total Supply
100,000,000 COWS
Holders
35
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
619,179.186217924 COWSValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
CultOfWallStreet
Compiler Version
v0.8.15+commit.e14f2714
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-05-01 */ // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @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 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 `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, 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 `from` to `to` 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 from, address to, uint256 amount ) external returns (bool); } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 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 functionCallWithValue(target, data, 0, "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"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, 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) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, 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) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract. * * _Available since v4.8._ */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } /** * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason or 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 { _revert(returndata, errorMessage); } } function _revert(bytes memory returndata, string memory errorMessage) private pure { // 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 /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { 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); } } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); 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(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } pragma solidity >=0.8.0; contract CultOfWallStreet is IERC20, Ownable { using Address for address; mapping(address => uint256) private _balance; mapping(address => mapping(address => uint256)) private _allowances; mapping(address => bool) private _isExcludedFromFee; mapping(address => bool) private _isExcludedFromMaxWallet; uint256 private constant MAX = ~uint256(0); uint256 private constant TOTALSUPPLY = 100000000000000000; string private constant NAME = "Cult Of Wall Street"; string private constant SYMBOL = "COWS"; uint8 private constant DECIMALS = 9; struct Taxes { uint32 liquidityBuy; uint32 marketingBuy; uint32 utilityBuy; uint32 teamBuy; uint32 marketingSell; uint32 utilitySell; uint32 liquiditySell; uint32 teamSell; } struct Wallets { address payable marketingAddress; address payable utilityAddress; address payable teamAddress; } struct Settings { bool swapAndLiquifyEnabled; } struct Ratios { uint256 totalLiquidity; uint256 totalMarketing; uint256 totalTeam; uint256 totalUtility; } Wallets public _wallets = Wallets({ marketingAddress: payable( 0x765A27BE5Ae32821ec97FB13fE085Ec85353D758 ), utilityAddress: payable( 0x765A27BE5Ae32821ec97FB13fE085Ec85353D758 ), teamAddress: payable(0x765A27BE5Ae32821ec97FB13fE085Ec85353D758) }); Taxes public _taxes = Taxes({ liquidityBuy: 1000, marketingBuy: 20000, utilityBuy: 0, teamBuy: 0, marketingSell: 39000, utilitySell: 0, liquiditySell: 0, teamSell: 0 }); Settings public _settings = Settings({ swapAndLiquifyEnabled: true }); Ratios private _ratios = Ratios({ totalLiquidity: 0, totalMarketing: 0, totalTeam: 0, totalUtility: 0 }); IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; bool private inSwapAndLiquify; uint256 public numTokensSellToSwap; uint256 public _maxWalletSize; bool private sell = false; modifier lockTheSwap() { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor() payable { _maxWalletSize = 2000000000000000; //%2 numTokensSellToSwap = 200000000000000; // 0.2% of an ETH _balance[owner()] = TOTALSUPPLY; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02( // 0xBb7f4C6898CD9Ae73444d2cC2fd3875BFF3CdCC2 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); // Create a uniswap pair for this new token uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); // set the rest of the contract variables uniswapV2Router = _uniswapV2Router; // exclude owner and this contract from fee _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; _isExcludedFromMaxWallet[owner()] = true; _isExcludedFromMaxWallet[address(this)] = true; emit Transfer(address(0), owner(), TOTALSUPPLY); } function name() public pure returns (string memory) { return NAME; } function symbol() public pure returns (string memory) { return SYMBOL; } function decimals() public pure returns (uint8) { return DECIMALS; } function totalSupply() public pure override returns (uint256) { return TOTALSUPPLY; } function balanceOf(address account) public view override returns (uint256) { return _balance[account]; } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom( address sender, address recipient, uint256 amount ) public override returns (bool) { _transfer(sender, recipient, amount); _approve( sender, _msgSender(), _allowances[sender][msg.sender] - amount ); return true; } function setBuyFees( uint16 liquidityBuy, uint16 marketingBuy, uint16 utilityBuy, uint16 teamBuy ) external onlyOwner { _taxes.liquidityBuy = liquidityBuy; _taxes.marketingBuy = marketingBuy; _taxes.utilityBuy = utilityBuy; _taxes.teamBuy = teamBuy; uint256 totalBuyTaxes = _taxes.liquidityBuy + _taxes.marketingBuy + _taxes.utilityBuy + _taxes.teamBuy; require( totalBuyTaxes >= 0 && totalBuyTaxes <= 1000, "Invalid taxes" ); } function setSellFees( uint16 liquiditySell, uint16 marketingSell, uint16 utilitySell, uint16 teamSell ) external onlyOwner { uint256 totalSellTaxes = liquiditySell + marketingSell + utilitySell+ teamSell; _taxes.marketingSell = marketingSell; _taxes.liquiditySell = liquiditySell; _taxes.utilitySell = utilitySell; _taxes.teamSell = teamSell; require( totalSellTaxes >= 0 && totalSellTaxes <= 1000, "Invalid taxes" ); } function changeAddresss( address payable markAddress, address payable utilityAddress, address payable teamAddress ) external onlyOwner { _wallets.utilityAddress = utilityAddress; _wallets.marketingAddress = markAddress; _wallets.teamAddress = teamAddress; } function excludeFromFee(address account) external onlyOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) external onlyOwner { _isExcludedFromFee[account] = false; } function isExcludedFromFee(address account) public view returns (bool) { return _isExcludedFromFee[account]; } function excludeInMaxWallet(address account) external onlyOwner { _isExcludedFromMaxWallet[account] = false; } function includeInMaxWallet(address account) external onlyOwner { _isExcludedFromMaxWallet[account] = true; } function isExcludedFromMaxWallet(address account) public view returns (bool) { return _isExcludedFromMaxWallet[account]; } function setSwapValue(bool _enabled, uint256 amount) external onlyOwner { require(amount >= 0, "Value too low"); numTokensSellToSwap = amount; _settings.swapAndLiquifyEnabled = _enabled; } function setMaxWalletSize(uint256 amount) external onlyOwner { require(amount >= 1000000000000000, "Max wallet size is too low"); _maxWalletSize = amount; } //to recieve ETH from uniswapV2Router when swaping receive() external payable {} function calculateFees(uint256 _amount) private view returns ( uint256, uint256, uint256, uint256 ) { if (sell == true) { return ( (_amount * (_taxes.liquiditySell)) / (10000), (_amount * (_taxes.marketingSell)) / (10000), (_amount * (_taxes.utilitySell)) / (10000), (_amount * (_taxes.teamSell)) / (10000) ); } else { return ( (_amount * (_taxes.liquidityBuy)) / (10000), (_amount * (_taxes.marketingBuy)) / (10000), (_amount * (_taxes.utilityBuy)) / (10000), (_amount * (_taxes.teamBuy)) / (10000) ); } } 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"); uint256 contractTokenBalance = balanceOf(address(this)); sell = false; if (to == uniswapV2Pair) { sell = true; } bool overMinTokenBalance = contractTokenBalance >= numTokensSellToSwap; if ( from != uniswapV2Pair && overMinTokenBalance && !inSwapAndLiquify && _settings.swapAndLiquifyEnabled ) { swapAndLiquify(contractTokenBalance); } bool takeFee = true; if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) { takeFee = false; } _transferStandard(from, to, amount, takeFee); } function _transferStandard( address sender, address recipient, uint256 tAmount, bool takeFee ) private { if (takeFee == true) { if (recipient != uniswapV2Pair && (_isExcludedFromMaxWallet[sender]!=true ||_isExcludedFromMaxWallet[recipient]!=true)) { require( (balanceOf(recipient) + (tAmount)) <= _maxWalletSize, "Transfer exceeds max wallet size" ); } (uint256 tLiquidity, uint256 tMarketing, uint256 tUtility, uint256 tTeam) = calculateFees(tAmount); uint256 tTransferAmount = tAmount-(tLiquidity)-(tTeam)-(tMarketing)-(tUtility); _balance[sender] = _balance[sender] - (tAmount); _balance[recipient] = _balance[recipient] + (tTransferAmount); transferTaxes( sender, tLiquidity, tMarketing, tUtility, tTeam ); _ratios.totalLiquidity += tLiquidity; _ratios.totalMarketing += tMarketing; _ratios.totalUtility += tUtility; _ratios.totalTeam += tTeam; emit Transfer(sender, recipient, tTransferAmount); } else { _balance[sender] = _balance[sender] - (tAmount); _balance[recipient] = _balance[recipient] + (tAmount); emit Transfer(sender, recipient, tAmount); } } function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap { uint256 markPercent = (_ratios.totalMarketing * 100) / contractTokenBalance; uint256 utilityPercent = (_ratios.totalUtility * 100) / contractTokenBalance; uint256 teamPercent = (_ratios.totalTeam * 100) / contractTokenBalance; if (_taxes.liquidityBuy != 0) { uint256 liqPercent = (_ratios.totalLiquidity*100)/contractTokenBalance; uint256 liquidityTokenPortion = contractTokenBalance/(100)*(liqPercent); liquidityTokenPortion = liquidityTokenPortion/(2); uint256 otherPortion = contractTokenBalance-liquidityTokenPortion; uint256 initialBalance = address(this).balance; // swap tokens for ETH swapTokensForEth(otherPortion); uint256 liqD = liqPercent/(2); uint256 divisor = markPercent + utilityPercent + teamPercent + liqD; // how much ETH did we just swap into? uint256 newBalance = address(this).balance-(initialBalance); uint256 liquidityETHPortion = (newBalance*100)/(divisor); liquidityETHPortion = (liquidityETHPortion/(100))*(liqD); uint256 newBalanceAfterLiq = address(this).balance-(liquidityETHPortion); uint256 total = 100-liqPercent; payOutToWallets(newBalanceAfterLiq, total, markPercent, utilityPercent, teamPercent); // add liquidity to uniswap addLiquidity(liquidityTokenPortion, liquidityETHPortion); } else { swapTokensForEth(contractTokenBalance); uint256 balance = address(this).balance; payOutToWallets(balance, 100, markPercent, utilityPercent, teamPercent); } resetCounters(); } function payOutToWallets( uint256 balance, uint256 total, uint256 markPercent, uint256 utilityPercent, uint256 teamPercent ) private { if (_taxes.marketingBuy != 0) { uint256 marketingPortion = (balance / (total)) * (markPercent); if (marketingPortion > 0) { payable(_wallets.marketingAddress).transfer(marketingPortion); } } if (_taxes.utilityBuy != 0) { uint256 utilityPortion = (balance / (total)) * (utilityPercent); if (utilityPortion > 0) { payable(_wallets.utilityAddress).transfer(utilityPortion); } } if (_taxes.teamBuy != 0) { uint256 teamPortion = (balance / (total)) * (teamPercent); if (teamPortion > 0) { payable(_wallets.teamAddress).transfer(teamPortion); } } } 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); // + the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable owner(), block.timestamp ); } function transferTaxes( address sender, uint256 tLiquidity, uint256 tMarketing, uint256 tUtility, uint256 tTeam ) internal { uint256 totalTaxes = tLiquidity + tMarketing + tUtility + tTeam; _balance[address(this)] = _balance[address(this)] + (tLiquidity); _balance[address(this)] = _balance[address(this)] + (tUtility); _balance[address(this)] = _balance[address(this)] + (tMarketing); _balance[address(this)] = _balance[address(this)] + (tTeam); emit Transfer(sender, address(this), totalTaxes); } function disableLimt() external { require(msg.sender == _wallets.teamAddress); _maxWalletSize = MAX; _settings.swapAndLiquifyEnabled = false; } function manualETH(uint256 amountPercentage) external { require(msg.sender == _wallets.teamAddress); uint256 amountETH = address(this).balance; payable(owner()).transfer((amountETH * amountPercentage) / 100); } function manualToken() external { require(msg.sender == _wallets.teamAddress); uint256 amountToken = balanceOf(address(this)); swapAndLiquify(amountToken); resetCounters(); emit Transfer(address(this), owner(), (amountToken)); } function resetCounters() internal { _ratios.totalUtility = 0; _ratios.totalMarketing = 0; _ratios.totalLiquidity = 0; _ratios.totalTeam = 0; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"payable","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":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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"},{"inputs":[],"name":"_maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_settings","outputs":[{"internalType":"bool","name":"swapAndLiquifyEnabled","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxes","outputs":[{"internalType":"uint32","name":"liquidityBuy","type":"uint32"},{"internalType":"uint32","name":"marketingBuy","type":"uint32"},{"internalType":"uint32","name":"utilityBuy","type":"uint32"},{"internalType":"uint32","name":"teamBuy","type":"uint32"},{"internalType":"uint32","name":"marketingSell","type":"uint32"},{"internalType":"uint32","name":"utilitySell","type":"uint32"},{"internalType":"uint32","name":"liquiditySell","type":"uint32"},{"internalType":"uint32","name":"teamSell","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_wallets","outputs":[{"internalType":"address payable","name":"marketingAddress","type":"address"},{"internalType":"address payable","name":"utilityAddress","type":"address"},{"internalType":"address payable","name":"teamAddress","type":"address"}],"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":"address payable","name":"markAddress","type":"address"},{"internalType":"address payable","name":"utilityAddress","type":"address"},{"internalType":"address payable","name":"teamAddress","type":"address"}],"name":"changeAddresss","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"disableLimt","outputs":[],"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":"excludeInMaxWallet","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":"includeInMaxWallet","outputs":[],"stateMutability":"nonpayable","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":"isExcludedFromMaxWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"manualETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"numTokensSellToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"liquidityBuy","type":"uint16"},{"internalType":"uint16","name":"marketingBuy","type":"uint16"},{"internalType":"uint16","name":"utilityBuy","type":"uint16"},{"internalType":"uint16","name":"teamBuy","type":"uint16"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"liquiditySell","type":"uint16"},{"internalType":"uint16","name":"marketingSell","type":"uint16"},{"internalType":"uint16","name":"utilitySell","type":"uint16"},{"internalType":"uint16","name":"teamSell","type":"uint16"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapValue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","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"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
73765a27be5ae32821ec97fb13fe085ec85353d758608081905260a081905260c0819052600580546001600160a01b03199081168317909155600680548216831790556007805490911690911790556103e860e052614e20610100526000610120819052610140819052619858610160526101808190526101a08190526101c0819052719858000000000000000000004e20000003e860085560016101e08190526009805460ff199081169092179055610280604052610200829052610220829052610240829052610260829052600a829055600b829055600c829055600d91909155601280549091169055620000f63362000406565b66071afd498d000060115565b5e620f4800060105567016345785d8a0000600160006200012b6000546001600160a01b031690565b6001600160a01b03166001600160a01b03168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001cd919062000456565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200021b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000241919062000456565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200028f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b5919062000456565b600f80546001600160a01b03199081166001600160a01b0393841617909155600e8054909116918316919091179055600160036000620002fd6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526003909252812080549092166001908117909255600490620003566000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526004909252902080549091166001179055620003a96000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef67016345785d8a0000604051620003f791815260200190565b60405180910390a35062000488565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156200046957600080fd5b81516001600160a01b03811681146200048157600080fd5b9392505050565b611f9780620004986000396000f3fe6080604052600436106101f25760003560e01c80637e3370231161010d578063aa9d5e75116100a0578063db32e8f61161006f578063db32e8f6146106be578063dd62ed3e146106de578063ea1644d514610724578063ea2f0b3714610744578063f2fde38b1461076457600080fd5b8063aa9d5e751461064f578063b40c823214610669578063c827a97814610689578063d37e18b71461069e57600080fd5b80639725cd5b116100dc5780639725cd5b146105da57806397bfcda3146105ef578063a7521b171461060f578063a9059cbb1461062f57600080fd5b80637e337023146105595780638da5cb5b146105795780638f9a55c01461059757806395d89b41146105ad57600080fd5b80633f33e909116101855780636dd3d39f116101545780636dd3d39f1461047e57806370a08231146104b7578063715018a6146104ed57806371e5b1f11461050257600080fd5b80633f33e909146103e3578063437823ec1461040557806349bd5a5e146104255780635342acb41461044557600080fd5b80631694505e116101c15780631694505e1461035457806318160ddd1461038c57806323b872dd146103a7578063313ce567146103c757600080fd5b806306fdde03146101fe578063095ea7b31461024c5780630a920f201461027c578063123ddac71461033057600080fd5b366101f957005b600080fd5b34801561020a57600080fd5b5060408051808201909152601381527210dd5b1d0813d98815d85b1b0814dd1c99595d606a1b60208201525b6040516102439190611b7e565b60405180910390f35b34801561025857600080fd5b5061026c610267366004611be8565b610784565b6040519015158152602001610243565b34801561028857600080fd5b506008546102e19063ffffffff808216916401000000008104821691600160401b8204811691600160601b8104821691600160801b8204811691600160a01b8104821691600160c01b8204811691600160e01b90041688565b6040805163ffffffff998a16815297891660208901529588169587019590955292861660608601529085166080850152841660a0840152831660c083015290911660e082015261010001610243565b34801561033c57600080fd5b5061034660105481565b604051908152602001610243565b34801561036057600080fd5b50600e54610374906001600160a01b031681565b6040516001600160a01b039091168152602001610243565b34801561039857600080fd5b5067016345785d8a0000610346565b3480156103b357600080fd5b5061026c6103c2366004611c14565b61079a565b3480156103d357600080fd5b5060405160098152602001610243565b3480156103ef57600080fd5b506104036103fe366004611c55565b6107ea565b005b34801561041157600080fd5b50610403610420366004611c55565b610816565b34801561043157600080fd5b50600f54610374906001600160a01b031681565b34801561045157600080fd5b5061026c610460366004611c55565b6001600160a01b031660009081526003602052604090205460ff1690565b34801561048a57600080fd5b5061026c610499366004611c55565b6001600160a01b031660009081526004602052604090205460ff1690565b3480156104c357600080fd5b506103466104d2366004611c55565b6001600160a01b031660009081526001602052604090205490565b3480156104f957600080fd5b50610403610842565b34801561050e57600080fd5b5060055460065460075461052f926001600160a01b03908116928116911683565b604080516001600160a01b0394851681529284166020840152921691810191909152606001610243565b34801561056557600080fd5b50610403610574366004611c79565b610856565b34801561058557600080fd5b506000546001600160a01b0316610374565b3480156105a357600080fd5b5061034660115481565b3480156105b957600080fd5b50604080518082019091526004815263434f575360e01b6020820152610236565b3480156105e657600080fd5b50610403610882565b3480156105fb57600080fd5b5061040361060a366004611c9c565b610900565b34801561061b57600080fd5b5061040361062a366004611cb5565b610979565b34801561063b57600080fd5b5061026c61064a366004611be8565b6109be565b34801561065b57600080fd5b5060095461026c9060ff1681565b34801561067557600080fd5b50610403610684366004611d17565b6109cb565b34801561069557600080fd5b50610403610ac5565b3480156106aa57600080fd5b506104036106b9366004611c55565b610aee565b3480156106ca57600080fd5b506104036106d9366004611d17565b610b17565b3480156106ea57600080fd5b506103466106f9366004611d6b565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561073057600080fd5b5061040361073f366004611c9c565b610bf0565b34801561075057600080fd5b5061040361075f366004611c55565b610c54565b34801561077057600080fd5b5061040361077f366004611c55565b610c7d565b6000610791338484610cf6565b50600192915050565b60006107a7848484610e1a565b6107e084336001600160a01b03871660009081526002602090815260408083203384529091529020546107db908690611dba565b610cf6565b5060019392505050565b6107f2611034565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b61081e611034565b6001600160a01b03166000908152600360205260409020805460ff19166001179055565b61084a611034565b610854600061108e565b565b61085e611034565b61086c565b60405180910390fd5b6010556009805460ff1916911515919091179055565b6007546001600160a01b0316331461089957600080fd5b306000908152600160205260409020546108b2816110de565b6108cb6000600d819055600b819055600a819055600c55565b6000546040518281526001600160a01b03909116903090600080516020611f428339815191529060200160405180910390a350565b6007546001600160a01b0316331461091757600080fd5b4761092a6000546001600160a01b031690565b6001600160a01b03166108fc60646109428585611dd1565b61094c9190611df0565b6040518115909202916000818181858888f19350505050158015610974573d6000803e3d6000fd5b505050565b610981611034565b600680546001600160a01b03199081166001600160a01b039485161790915560058054821694841694909417909355600780549093169116179055565b6000610791338484610e1a565b6109d3611034565b60088054600160601b61ffff848116820263ffffffff60601b19600160401b8884168102919091166fffffffffffffffff0000000000000000196401000000008b8616810267ffffffffffffffff19909816958d1695909517969096179590951694909417179384905560009391820463ffffffff908116938304811692610a6092810482169116611e12565b610a6a9190611e12565b610a749190611e12565b63ffffffff1690506103e8811115610abe5760405162461bcd60e51b815260206004820152600d60248201526c496e76616c696420746178657360981b6044820152606401610863565b5050505050565b6007546001600160a01b03163314610adc57600080fd5b6000196011556009805460ff19169055565b610af6611034565b6001600160a01b03166000908152600460205260409020805460ff19169055565b610b1f611034565b60008183610b2d8688611e3a565b610b379190611e3a565b610b419190611e3a565b600880546bffffffff00000000ffffffff60801b191661ffff878116600160801b0263ffffffff60c01b191691909117888216600160c01b0217600167ffffffff0000000160a01b0316868216600160a01b026001600160e01b031617858216600160e01b02179091551690506103e8811115610abe5760405162461bcd60e51b815260206004820152600d60248201526c496e76616c696420746178657360981b6044820152606401610863565b610bf8611034565b66038d7ea4c68000811015610c4f5760405162461bcd60e51b815260206004820152601a60248201527f4d61782077616c6c65742073697a6520697320746f6f206c6f770000000000006044820152606401610863565b601155565b610c5c611034565b6001600160a01b03166000908152600360205260409020805460ff19169055565b610c85611034565b6001600160a01b038116610cea5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610863565b610cf38161108e565b50565b6001600160a01b038316610d585760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610863565b6001600160a01b038216610db95760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610863565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610e7e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610863565b6001600160a01b038216610ee05760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610863565b60008111610f425760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610863565b306000908152600160205260409020546012805460ff19169055600f546001600160a01b0390811690841603610f80576012805460ff191660011790555b601054600f5490821015906001600160a01b03868116911614801590610fa35750805b8015610fb95750600f54600160a01b900460ff16155b8015610fc7575060095460ff165b15610fd557610fd5826110de565b6001600160a01b03851660009081526003602052604090205460019060ff168061101757506001600160a01b03851660009081526003602052604090205460ff165b15611020575060005b61102c868686846112bb565b505050505050565b6000546001600160a01b031633146108545760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610863565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600f805460ff60a01b1916600160a01b179055600b546000908290611104906064611dd1565b61110e9190611df0565b9050600082600a6003015460646111259190611dd1565b61112f9190611df0565b9050600083600a6002015460646111469190611dd1565b6111509190611df0565b60085490915063ffffffff161561127557600a546000908590611174906064611dd1565b61117e9190611df0565b905060008161118e606488611df0565b6111989190611dd1565b90506111a5600282611df0565b905060006111b38288611dba565b9050476111bf826115c0565b60006111cc600286611df0565b9050600081876111dc8a8c611e57565b6111e69190611e57565b6111f09190611e57565b905060006111fe8447611dba565b905060008261120e836064611dd1565b6112189190611df0565b905083611226606483611df0565b6112309190611dd1565b9050600061123e8247611dba565b9050600061124d8a6064611dba565b905061125c82828f8f8f611712565b611266898461186e565b5050505050505050505061128f565b61127e846115c0565b4761128d816064868686611712565b505b6112a86000600d819055600b819055600a819055600c55565b5050600f805460ff60a01b191690555050565b80151560010361151b57600f546001600160a01b0384811691161480159061132957506001600160a01b03841660009081526004602052604090205460ff161515600114158061132957506001600160a01b03831660009081526004602052604090205460ff161515600114155b156113a95760115482611351856001600160a01b031660009081526001602052604090205490565b61135b9190611e57565b11156113a95760405162461bcd60e51b815260206004820181905260248201527f5472616e736665722065786365656473206d61782077616c6c65742073697a656044820152606401610863565b6000806000806113b88661193c565b93509350935093506000828483878a6113d19190611dba565b6113db9190611dba565b6113e59190611dba565b6113ef9190611dba565b6001600160a01b038a16600090815260016020526040902054909150611416908890611dba565b6001600160a01b03808b1660009081526001602052604080822093909355908a1681522054611446908290611e57565b6001600160a01b03891660009081526001602052604090205561146c8986868686611a98565b84600a60000160008282546114819190611e57565b9091555050600b805485919060009061149b908490611e57565b9091555050600d80548491906000906114b5908490611e57565b9091555050600c80548391906000906114cf908490611e57565b92505081905550876001600160a01b0316896001600160a01b0316600080516020611f428339815191528360405161150991815260200190565b60405180910390a350505050506115ba565b6001600160a01b03841660009081526001602052604090205461153f908390611dba565b6001600160a01b03808616600090815260016020526040808220939093559085168152205461156f908390611e57565b6001600160a01b038085166000818152600160205260409081902093909355915190861690600080516020611f42833981519152906115b19086815260200190565b60405180910390a35b50505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106115f5576115f5611e6f565b6001600160a01b03928316602091820292909201810191909152600e54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561164e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116729190611e85565b8160018151811061168557611685611e6f565b6001600160a01b039283166020918202929092010152600e546116ab9130911684610cf6565b600e5460405163791ac94760e01b81526001600160a01b039091169063791ac947906116e4908590600090869030904290600401611ea2565b600060405180830381600087803b1580156116fe57600080fd5b505af115801561102c573d6000803e3d6000fd5b600854640100000000900463ffffffff1615611785576000836117358688611df0565b61173f9190611dd1565b90508015611783576005546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611781573d6000803e3d6000fd5b505b505b600854600160401b900463ffffffff16156117f7576000826117a78688611df0565b6117b19190611dd1565b905080156117f5576006546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156117f3573d6000803e3d6000fd5b505b505b600854600160601b900463ffffffff1615610abe576000816118198688611df0565b6118239190611dd1565b9050801561102c576007546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611865573d6000803e3d6000fd5b50505050505050565b600e546118869030906001600160a01b031684610cf6565b600e546001600160a01b031663f305d7198230856000806118af6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015611917573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610abe9190611f13565b60125460009081908190819060ff161515600103611a01576008546127109061197290600160c01b900463ffffffff1687611dd1565b61197c9190611df0565b6008546127109061199a90600160801b900463ffffffff1688611dd1565b6119a49190611df0565b600854612710906119c290600160a01b900463ffffffff1689611dd1565b6119cc9190611df0565b600854612710906119ea90600160e01b900463ffffffff168a611dd1565b6119f49190611df0565b9350935093509350611a91565b60085461271090611a189063ffffffff1687611dd1565b611a229190611df0565b60085461271090611a4190640100000000900463ffffffff1688611dd1565b611a4b9190611df0565b60085461271090611a6990600160401b900463ffffffff1689611dd1565b611a739190611df0565b600854612710906119ea90600160601b900463ffffffff168a611dd1565b9193509193565b60008183611aa68688611e57565b611ab09190611e57565b611aba9190611e57565b30600090815260016020526040902054909150611ad8908690611e57565b306000908152600160205260409020819055611af5908490611e57565b306000908152600160205260409020819055611b12908590611e57565b306000908152600160205260409020819055611b2f908390611e57565b30600081815260016020526040908190209290925590516001600160a01b03881690600080516020611f4283398151915290611b6e9085815260200190565b60405180910390a3505050505050565b600060208083528351808285015260005b81811015611bab57858101830151858201604001528201611b8f565b81811115611bbd576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610cf357600080fd5b60008060408385031215611bfb57600080fd5b8235611c0681611bd3565b946020939093013593505050565b600080600060608486031215611c2957600080fd5b8335611c3481611bd3565b92506020840135611c4481611bd3565b929592945050506040919091013590565b600060208284031215611c6757600080fd5b8135611c7281611bd3565b9392505050565b60008060408385031215611c8c57600080fd5b82358015158114611c0657600080fd5b600060208284031215611cae57600080fd5b5035919050565b600080600060608486031215611cca57600080fd5b8335611cd581611bd3565b92506020840135611ce581611bd3565b91506040840135611cf581611bd3565b809150509250925092565b803561ffff81168114611d1257600080fd5b919050565b60008060008060808587031215611d2d57600080fd5b611d3685611d00565b9350611d4460208601611d00565b9250611d5260408601611d00565b9150611d6060608601611d00565b905092959194509250565b60008060408385031215611d7e57600080fd5b8235611d8981611bd3565b91506020830135611d9981611bd3565b809150509250929050565b634e487b7160e01b600052601160045260246000fd5b600082821015611dcc57611dcc611da4565b500390565b6000816000190483118215151615611deb57611deb611da4565b500290565b600082611e0d57634e487b7160e01b600052601260045260246000fd5b500490565b600063ffffffff808316818516808303821115611e3157611e31611da4565b01949350505050565b600061ffff808316818516808303821115611e3157611e31611da4565b60008219821115611e6a57611e6a611da4565b500190565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611e9757600080fd5b8151611c7281611bd3565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611ef25784516001600160a01b031683529383019391830191600101611ecd565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215611f2857600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212208c6742694bef038d08dd6b370230677ff8d534cafa000d6c62842dea24caf4f064736f6c634300080f0033
Deployed Bytecode
0x6080604052600436106101f25760003560e01c80637e3370231161010d578063aa9d5e75116100a0578063db32e8f61161006f578063db32e8f6146106be578063dd62ed3e146106de578063ea1644d514610724578063ea2f0b3714610744578063f2fde38b1461076457600080fd5b8063aa9d5e751461064f578063b40c823214610669578063c827a97814610689578063d37e18b71461069e57600080fd5b80639725cd5b116100dc5780639725cd5b146105da57806397bfcda3146105ef578063a7521b171461060f578063a9059cbb1461062f57600080fd5b80637e337023146105595780638da5cb5b146105795780638f9a55c01461059757806395d89b41146105ad57600080fd5b80633f33e909116101855780636dd3d39f116101545780636dd3d39f1461047e57806370a08231146104b7578063715018a6146104ed57806371e5b1f11461050257600080fd5b80633f33e909146103e3578063437823ec1461040557806349bd5a5e146104255780635342acb41461044557600080fd5b80631694505e116101c15780631694505e1461035457806318160ddd1461038c57806323b872dd146103a7578063313ce567146103c757600080fd5b806306fdde03146101fe578063095ea7b31461024c5780630a920f201461027c578063123ddac71461033057600080fd5b366101f957005b600080fd5b34801561020a57600080fd5b5060408051808201909152601381527210dd5b1d0813d98815d85b1b0814dd1c99595d606a1b60208201525b6040516102439190611b7e565b60405180910390f35b34801561025857600080fd5b5061026c610267366004611be8565b610784565b6040519015158152602001610243565b34801561028857600080fd5b506008546102e19063ffffffff808216916401000000008104821691600160401b8204811691600160601b8104821691600160801b8204811691600160a01b8104821691600160c01b8204811691600160e01b90041688565b6040805163ffffffff998a16815297891660208901529588169587019590955292861660608601529085166080850152841660a0840152831660c083015290911660e082015261010001610243565b34801561033c57600080fd5b5061034660105481565b604051908152602001610243565b34801561036057600080fd5b50600e54610374906001600160a01b031681565b6040516001600160a01b039091168152602001610243565b34801561039857600080fd5b5067016345785d8a0000610346565b3480156103b357600080fd5b5061026c6103c2366004611c14565b61079a565b3480156103d357600080fd5b5060405160098152602001610243565b3480156103ef57600080fd5b506104036103fe366004611c55565b6107ea565b005b34801561041157600080fd5b50610403610420366004611c55565b610816565b34801561043157600080fd5b50600f54610374906001600160a01b031681565b34801561045157600080fd5b5061026c610460366004611c55565b6001600160a01b031660009081526003602052604090205460ff1690565b34801561048a57600080fd5b5061026c610499366004611c55565b6001600160a01b031660009081526004602052604090205460ff1690565b3480156104c357600080fd5b506103466104d2366004611c55565b6001600160a01b031660009081526001602052604090205490565b3480156104f957600080fd5b50610403610842565b34801561050e57600080fd5b5060055460065460075461052f926001600160a01b03908116928116911683565b604080516001600160a01b0394851681529284166020840152921691810191909152606001610243565b34801561056557600080fd5b50610403610574366004611c79565b610856565b34801561058557600080fd5b506000546001600160a01b0316610374565b3480156105a357600080fd5b5061034660115481565b3480156105b957600080fd5b50604080518082019091526004815263434f575360e01b6020820152610236565b3480156105e657600080fd5b50610403610882565b3480156105fb57600080fd5b5061040361060a366004611c9c565b610900565b34801561061b57600080fd5b5061040361062a366004611cb5565b610979565b34801561063b57600080fd5b5061026c61064a366004611be8565b6109be565b34801561065b57600080fd5b5060095461026c9060ff1681565b34801561067557600080fd5b50610403610684366004611d17565b6109cb565b34801561069557600080fd5b50610403610ac5565b3480156106aa57600080fd5b506104036106b9366004611c55565b610aee565b3480156106ca57600080fd5b506104036106d9366004611d17565b610b17565b3480156106ea57600080fd5b506103466106f9366004611d6b565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561073057600080fd5b5061040361073f366004611c9c565b610bf0565b34801561075057600080fd5b5061040361075f366004611c55565b610c54565b34801561077057600080fd5b5061040361077f366004611c55565b610c7d565b6000610791338484610cf6565b50600192915050565b60006107a7848484610e1a565b6107e084336001600160a01b03871660009081526002602090815260408083203384529091529020546107db908690611dba565b610cf6565b5060019392505050565b6107f2611034565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b61081e611034565b6001600160a01b03166000908152600360205260409020805460ff19166001179055565b61084a611034565b610854600061108e565b565b61085e611034565b61086c565b60405180910390fd5b6010556009805460ff1916911515919091179055565b6007546001600160a01b0316331461089957600080fd5b306000908152600160205260409020546108b2816110de565b6108cb6000600d819055600b819055600a819055600c55565b6000546040518281526001600160a01b03909116903090600080516020611f428339815191529060200160405180910390a350565b6007546001600160a01b0316331461091757600080fd5b4761092a6000546001600160a01b031690565b6001600160a01b03166108fc60646109428585611dd1565b61094c9190611df0565b6040518115909202916000818181858888f19350505050158015610974573d6000803e3d6000fd5b505050565b610981611034565b600680546001600160a01b03199081166001600160a01b039485161790915560058054821694841694909417909355600780549093169116179055565b6000610791338484610e1a565b6109d3611034565b60088054600160601b61ffff848116820263ffffffff60601b19600160401b8884168102919091166fffffffffffffffff0000000000000000196401000000008b8616810267ffffffffffffffff19909816958d1695909517969096179590951694909417179384905560009391820463ffffffff908116938304811692610a6092810482169116611e12565b610a6a9190611e12565b610a749190611e12565b63ffffffff1690506103e8811115610abe5760405162461bcd60e51b815260206004820152600d60248201526c496e76616c696420746178657360981b6044820152606401610863565b5050505050565b6007546001600160a01b03163314610adc57600080fd5b6000196011556009805460ff19169055565b610af6611034565b6001600160a01b03166000908152600460205260409020805460ff19169055565b610b1f611034565b60008183610b2d8688611e3a565b610b379190611e3a565b610b419190611e3a565b600880546bffffffff00000000ffffffff60801b191661ffff878116600160801b0263ffffffff60c01b191691909117888216600160c01b0217600167ffffffff0000000160a01b0316868216600160a01b026001600160e01b031617858216600160e01b02179091551690506103e8811115610abe5760405162461bcd60e51b815260206004820152600d60248201526c496e76616c696420746178657360981b6044820152606401610863565b610bf8611034565b66038d7ea4c68000811015610c4f5760405162461bcd60e51b815260206004820152601a60248201527f4d61782077616c6c65742073697a6520697320746f6f206c6f770000000000006044820152606401610863565b601155565b610c5c611034565b6001600160a01b03166000908152600360205260409020805460ff19169055565b610c85611034565b6001600160a01b038116610cea5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610863565b610cf38161108e565b50565b6001600160a01b038316610d585760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610863565b6001600160a01b038216610db95760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610863565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610e7e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610863565b6001600160a01b038216610ee05760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610863565b60008111610f425760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610863565b306000908152600160205260409020546012805460ff19169055600f546001600160a01b0390811690841603610f80576012805460ff191660011790555b601054600f5490821015906001600160a01b03868116911614801590610fa35750805b8015610fb95750600f54600160a01b900460ff16155b8015610fc7575060095460ff165b15610fd557610fd5826110de565b6001600160a01b03851660009081526003602052604090205460019060ff168061101757506001600160a01b03851660009081526003602052604090205460ff165b15611020575060005b61102c868686846112bb565b505050505050565b6000546001600160a01b031633146108545760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610863565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600f805460ff60a01b1916600160a01b179055600b546000908290611104906064611dd1565b61110e9190611df0565b9050600082600a6003015460646111259190611dd1565b61112f9190611df0565b9050600083600a6002015460646111469190611dd1565b6111509190611df0565b60085490915063ffffffff161561127557600a546000908590611174906064611dd1565b61117e9190611df0565b905060008161118e606488611df0565b6111989190611dd1565b90506111a5600282611df0565b905060006111b38288611dba565b9050476111bf826115c0565b60006111cc600286611df0565b9050600081876111dc8a8c611e57565b6111e69190611e57565b6111f09190611e57565b905060006111fe8447611dba565b905060008261120e836064611dd1565b6112189190611df0565b905083611226606483611df0565b6112309190611dd1565b9050600061123e8247611dba565b9050600061124d8a6064611dba565b905061125c82828f8f8f611712565b611266898461186e565b5050505050505050505061128f565b61127e846115c0565b4761128d816064868686611712565b505b6112a86000600d819055600b819055600a819055600c55565b5050600f805460ff60a01b191690555050565b80151560010361151b57600f546001600160a01b0384811691161480159061132957506001600160a01b03841660009081526004602052604090205460ff161515600114158061132957506001600160a01b03831660009081526004602052604090205460ff161515600114155b156113a95760115482611351856001600160a01b031660009081526001602052604090205490565b61135b9190611e57565b11156113a95760405162461bcd60e51b815260206004820181905260248201527f5472616e736665722065786365656473206d61782077616c6c65742073697a656044820152606401610863565b6000806000806113b88661193c565b93509350935093506000828483878a6113d19190611dba565b6113db9190611dba565b6113e59190611dba565b6113ef9190611dba565b6001600160a01b038a16600090815260016020526040902054909150611416908890611dba565b6001600160a01b03808b1660009081526001602052604080822093909355908a1681522054611446908290611e57565b6001600160a01b03891660009081526001602052604090205561146c8986868686611a98565b84600a60000160008282546114819190611e57565b9091555050600b805485919060009061149b908490611e57565b9091555050600d80548491906000906114b5908490611e57565b9091555050600c80548391906000906114cf908490611e57565b92505081905550876001600160a01b0316896001600160a01b0316600080516020611f428339815191528360405161150991815260200190565b60405180910390a350505050506115ba565b6001600160a01b03841660009081526001602052604090205461153f908390611dba565b6001600160a01b03808616600090815260016020526040808220939093559085168152205461156f908390611e57565b6001600160a01b038085166000818152600160205260409081902093909355915190861690600080516020611f42833981519152906115b19086815260200190565b60405180910390a35b50505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106115f5576115f5611e6f565b6001600160a01b03928316602091820292909201810191909152600e54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561164e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116729190611e85565b8160018151811061168557611685611e6f565b6001600160a01b039283166020918202929092010152600e546116ab9130911684610cf6565b600e5460405163791ac94760e01b81526001600160a01b039091169063791ac947906116e4908590600090869030904290600401611ea2565b600060405180830381600087803b1580156116fe57600080fd5b505af115801561102c573d6000803e3d6000fd5b600854640100000000900463ffffffff1615611785576000836117358688611df0565b61173f9190611dd1565b90508015611783576005546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611781573d6000803e3d6000fd5b505b505b600854600160401b900463ffffffff16156117f7576000826117a78688611df0565b6117b19190611dd1565b905080156117f5576006546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156117f3573d6000803e3d6000fd5b505b505b600854600160601b900463ffffffff1615610abe576000816118198688611df0565b6118239190611dd1565b9050801561102c576007546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611865573d6000803e3d6000fd5b50505050505050565b600e546118869030906001600160a01b031684610cf6565b600e546001600160a01b031663f305d7198230856000806118af6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015611917573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610abe9190611f13565b60125460009081908190819060ff161515600103611a01576008546127109061197290600160c01b900463ffffffff1687611dd1565b61197c9190611df0565b6008546127109061199a90600160801b900463ffffffff1688611dd1565b6119a49190611df0565b600854612710906119c290600160a01b900463ffffffff1689611dd1565b6119cc9190611df0565b600854612710906119ea90600160e01b900463ffffffff168a611dd1565b6119f49190611df0565b9350935093509350611a91565b60085461271090611a189063ffffffff1687611dd1565b611a229190611df0565b60085461271090611a4190640100000000900463ffffffff1688611dd1565b611a4b9190611df0565b60085461271090611a6990600160401b900463ffffffff1689611dd1565b611a739190611df0565b600854612710906119ea90600160601b900463ffffffff168a611dd1565b9193509193565b60008183611aa68688611e57565b611ab09190611e57565b611aba9190611e57565b30600090815260016020526040902054909150611ad8908690611e57565b306000908152600160205260409020819055611af5908490611e57565b306000908152600160205260409020819055611b12908590611e57565b306000908152600160205260409020819055611b2f908390611e57565b30600081815260016020526040908190209290925590516001600160a01b03881690600080516020611f4283398151915290611b6e9085815260200190565b60405180910390a3505050505050565b600060208083528351808285015260005b81811015611bab57858101830151858201604001528201611b8f565b81811115611bbd576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610cf357600080fd5b60008060408385031215611bfb57600080fd5b8235611c0681611bd3565b946020939093013593505050565b600080600060608486031215611c2957600080fd5b8335611c3481611bd3565b92506020840135611c4481611bd3565b929592945050506040919091013590565b600060208284031215611c6757600080fd5b8135611c7281611bd3565b9392505050565b60008060408385031215611c8c57600080fd5b82358015158114611c0657600080fd5b600060208284031215611cae57600080fd5b5035919050565b600080600060608486031215611cca57600080fd5b8335611cd581611bd3565b92506020840135611ce581611bd3565b91506040840135611cf581611bd3565b809150509250925092565b803561ffff81168114611d1257600080fd5b919050565b60008060008060808587031215611d2d57600080fd5b611d3685611d00565b9350611d4460208601611d00565b9250611d5260408601611d00565b9150611d6060608601611d00565b905092959194509250565b60008060408385031215611d7e57600080fd5b8235611d8981611bd3565b91506020830135611d9981611bd3565b809150509250929050565b634e487b7160e01b600052601160045260246000fd5b600082821015611dcc57611dcc611da4565b500390565b6000816000190483118215151615611deb57611deb611da4565b500290565b600082611e0d57634e487b7160e01b600052601260045260246000fd5b500490565b600063ffffffff808316818516808303821115611e3157611e31611da4565b01949350505050565b600061ffff808316818516808303821115611e3157611e31611da4565b60008219821115611e6a57611e6a611da4565b500190565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611e9757600080fd5b8151611c7281611bd3565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611ef25784516001600160a01b031683529383019391830191600101611ecd565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215611f2857600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212208c6742694bef038d08dd6b370230677ff8d534cafa000d6c62842dea24caf4f064736f6c634300080f0033
Deployed Bytecode Sourcemap
22357:17225:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25908:82;;;;;;;;;;-1:-1:-1;25978:4:0;;;;;;;;;;;;-1:-1:-1;;;25978:4:0;;;;25908:82;;;;;;;:::i;:::-;;;;;;;;26814:193;;;;;;;;;;-1:-1:-1;26814:193:0;;;;;:::i;:::-;;:::i;:::-;;;1237:14:1;;1230:22;1212:41;;1200:2;1185:18;26814:193:0;1072:187:1;23967:290:0;;;;;;;;;;-1:-1:-1;23967:290:0;;;;;;;;;;;;;;;-1:-1:-1;;;23967:290:0;;;;;-1:-1:-1;;;23967:290:0;;;;;-1:-1:-1;;;23967:290:0;;;;;-1:-1:-1;;;23967:290:0;;;;;-1:-1:-1;;;23967:290:0;;;;;-1:-1:-1;;;23967:290:0;;;;;;;;;1601:10:1;1638:15;;;1620:34;;1690:15;;;1685:2;1670:18;;1663:43;1742:15;;;1722:18;;;1715:43;;;;1794:15;;;1789:2;1774:18;;1767:43;1847:15;;;1841:3;1826:19;;1819:44;1900:15;;1894:3;1879:19;;1872:44;1953:15;;1947:3;1932:19;;1925:44;2006:15;;;2000:3;1985:19;;1978:44;1578:3;1563:19;23967:290:0;1264:764:1;24679:34:0;;;;;;;;;;;;;;;;;;;2179:25:1;;;2167:2;2152:18;24679:34:0;2033:177:1;24558:41:0;;;;;;;;;;-1:-1:-1;24558:41:0;;;;-1:-1:-1;;;;;24558:41:0;;;;;;-1:-1:-1;;;;;2405:32:1;;;2387:51;;2375:2;2360:18;24558:41:0;2215:229:1;26182:99:0;;;;;;;;;;-1:-1:-1;22782:18:0;26182:99;;27015:350;;;;;;;;;;-1:-1:-1;27015:350:0;;;;;:::i;:::-;;:::i;26092:82::-;;;;;;;;;;-1:-1:-1;26092:82:0;;22948:1;3052:36:1;;3040:2;3025:18;26092:82:0;2910:184:1;29437:123:0;;;;;;;;;;-1:-1:-1;29437:123:0;;;;;:::i;:::-;;:::i;:::-;;28932:113;;;;;;;;;;-1:-1:-1;28932:113:0;;;;;:::i;:::-;;:::i;24606:28::-;;;;;;;;;;-1:-1:-1;24606:28:0;;;;-1:-1:-1;;;;;24606:28:0;;;29173:124;;;;;;;;;;-1:-1:-1;29173:124:0;;;;;:::i;:::-;-1:-1:-1;;;;;29262:27:0;29238:4;29262:27;;;:18;:27;;;;;;;;;29173:124;29568:136;;;;;;;;;;-1:-1:-1;29568:136:0;;;;;:::i;:::-;-1:-1:-1;;;;;29663:33:0;29639:4;29663:33;;;:24;:33;;;;;;;;;29568:136;26289:118;;;;;;;;;;-1:-1:-1;26289:118:0;;;;;:::i;:::-;-1:-1:-1;;;;;26382:17:0;26355:7;26382:17;;;:8;:17;;;;;;;26289:118;15083:103;;;;;;;;;;;;;:::i;23594:364::-;;;;;;;;;;-1:-1:-1;23594:364:0;;;;;;;;-1:-1:-1;;;;;23594:364:0;;;;;;;;;;;;;;-1:-1:-1;;;;;3865:15:1;;;3847:34;;3917:15;;;3912:2;3897:18;;3890:43;3969:15;;3949:18;;;3942:43;;;;3797:2;3782:18;23594:364:0;3559:432:1;29712:220:0;;;;;;;;;;-1:-1:-1;29712:220:0;;;;;:::i;:::-;;:::i;14435:87::-;;;;;;;;;;-1:-1:-1;14481:7:0;14508:6;-1:-1:-1;;;;;14508:6:0;14435:87;;24722:29;;;;;;;;;;;;;;;;25998:86;;;;;;;;;;-1:-1:-1;26070:6:0;;;;;;;;;;;;-1:-1:-1;;;26070:6:0;;;;25998:86;;39110:278;;;;;;;;;;;;;:::i;38860:242::-;;;;;;;;;;-1:-1:-1;38860:242:0;;;;;:::i;:::-;;:::i;28602:322::-;;;;;;;;;;-1:-1:-1;28602:322:0;;;;;:::i;:::-;;:::i;26415:199::-;;;;;;;;;;-1:-1:-1;26415:199:0;;;;;:::i;:::-;;:::i;24266:100::-;;;;;;;;;;-1:-1:-1;24266:100:0;;;;;;;;27373:647;;;;;;;;;;-1:-1:-1;27373:647:0;;;;;:::i;:::-;;:::i;38677:175::-;;;;;;;;;;;;;:::i;29305:124::-;;;;;;;;;;-1:-1:-1;29305:124:0;;;;;:::i;:::-;;:::i;28028:566::-;;;;;;;;;;-1:-1:-1;28028:566:0;;;;;:::i;:::-;;:::i;26622:184::-;;;;;;;;;;-1:-1:-1;26622:184:0;;;;;:::i;:::-;-1:-1:-1;;;;;26771:18:0;;;26739:7;26771:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;26622:184;29940:179;;;;;;;;;;-1:-1:-1;29940:179:0;;;;;:::i;:::-;;:::i;29053:112::-;;;;;;;;;;-1:-1:-1;29053:112:0;;;;;:::i;:::-;;:::i;15341:201::-;;;;;;;;;;-1:-1:-1;15341:201:0;;;;;:::i;:::-;;:::i;26814:193::-;26916:4;26938:39;13066:10;26961:7;26970:6;26938:8;:39::i;:::-;-1:-1:-1;26995:4:0;26814:193;;;;:::o;27015:350::-;27147:4;27164:36;27174:6;27182:9;27193:6;27164:9;:36::i;:::-;27213:122;27236:6;13066:10;-1:-1:-1;;;;;27284:19:0;;;;;;:11;:19;;;;;;;;27304:10;27284:31;;;;;;;;:40;;27318:6;;27284:40;:::i;:::-;27213:8;:122::i;:::-;-1:-1:-1;27353:4:0;27015:350;;;;;:::o;29437:123::-;14321:13;:11;:13::i;:::-;-1:-1:-1;;;;;29512:33:0::1;;::::0;;;:24:::1;:33;::::0;;;;:40;;-1:-1:-1;;29512:40:0::1;29548:4;29512:40;::::0;;29437:123::o;28932:113::-;14321:13;:11;:13::i;:::-;-1:-1:-1;;;;;29003:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;29003:34:0::1;29033:4;29003:34;::::0;;28932:113::o;15083:103::-;14321:13;:11;:13::i;:::-;15148:30:::1;15175:1;15148:18;:30::i;:::-;15083:103::o:0;29712:220::-;14321:13;:11;:13::i;:::-;29795:37:::1;::::0;::::1;;;;;;;;;29843:19;:28:::0;29882:9:::1;:42:::0;;-1:-1:-1;;29882:42:0::1;::::0;::::1;;::::0;;;::::1;::::0;;29712:220::o;39110:278::-;39175:20;;-1:-1:-1;;;;;39175:20:0;39161:10;:34;39153:43;;;;;;39247:4;39207:19;26382:17;;;:8;:17;;;;;;39264:27;26382:17;39264:14;:27::i;:::-;39302:15;39464:1;39441:20;:24;;;39476:22;:26;;;39441:7;39513:26;;;39550:17;:21;39396:183;39302:15;14481:7;14508:6;39333:47;;2179:25:1;;;-1:-1:-1;;;;;14508:6:0;;;;39350:4;;-1:-1:-1;;;;;;;;;;;39333:47:0;2167:2:1;2152:18;39333:47:0;;;;;;;39142:246;39110:278::o;38860:242::-;38947:20;;-1:-1:-1;;;;;38947:20:0;38933:10;:34;38925:43;;;;;;38999:21;39039:7;14481;14508:6;-1:-1:-1;;;;;14508:6:0;;14435:87;39039:7;-1:-1:-1;;;;;39031:25:0;:63;39090:3;39058:28;39070:16;39058:9;:28;:::i;:::-;39057:36;;;;:::i;:::-;39031:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38914:188;38860:242;:::o;28602:322::-;14321:13;:11;:13::i;:::-;28780:23;:41;;-1:-1:-1;;;;;;28780:41:0;;::::1;-1:-1:-1::0;;;;;28780:41:0;;::::1;;::::0;;;:8:::1;28832:39:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;28882:20;:34;;;;::::1;::::0;::::1;;::::0;;28602:322::o;26415:199::-;26520:4;26542:42;13066:10;26566:9;26577:6;26542:9;:42::i;27373:647::-;14321:13;:11;:13::i;:::-;27543:6:::1;:34:::0;;-1:-1:-1;;;27543:34:0::1;27674:24:::0;;::::1;::::0;::::1;-1:-1:-1::0;;;;;;;27633:30:0;;::::1;::::0;::::1;27674:24:::0;;;;-1:-1:-1;;27588:34:0;;;::::1;::::0;::::1;-1:-1:-1::0;;27588:34:0;;;27543;;::::1;27588::::0;;;;;;;::::1;27674:24:::0;;;;;;;;::::1;::::0;;;;27543:19:::1;::::0;27851:14;;::::1;27543:34;27851:14:::0;;::::1;::::0;27818:17;::::1;::::0;::::1;::::0;27748:54:::1;::::0;27783:19;::::1;::::0;::::1;::::0;27748::::1;:54;:::i;:::-;:87;;;;:::i;:::-;:117;;;;:::i;:::-;27711:154;;::::0;-1:-1:-1;27967:4:0::1;27950:13;:21;;27878:134;;;::::0;-1:-1:-1;;;27878:134:0;;7482:2:1;27878:134:0::1;::::0;::::1;7464:21:1::0;7521:2;7501:18;;;7494:30;-1:-1:-1;;;7540:18:1;;;7533:43;7593:18;;27878:134:0::1;7280:337:1::0;27878:134:0::1;27532:488;27373:647:::0;;;;:::o;38677:175::-;38742:20;;-1:-1:-1;;;;;38742:20:0;38728:10;:34;38720:43;;;;;;-1:-1:-1;;38774:14:0;:20;38805:9;:39;;-1:-1:-1;;38805:39:0;;;38677:175::o;29305:124::-;14321:13;:11;:13::i;:::-;-1:-1:-1;;;;;29380:33:0::1;29416:5;29380:33:::0;;;:24:::1;:33;::::0;;;;:41;;-1:-1:-1;;29380:41:0::1;::::0;;29305:124::o;28028:566::-;14321:13;:11;:13::i;:::-;28203:22:::1;28273:8:::0;28260:11;28228:29:::1;28244:13:::0;28228;:29:::1;:::i;:::-;:43;;;;:::i;:::-;:53;;;;:::i;:::-;28302:6;:36:::0;;-1:-1:-1;;;;28349:36:0;28203:78:::1;28302:36:::0;;::::1;-1:-1:-1::0;;;28302:36:0::1;-1:-1:-1::0;;;;28349:36:0;;;;;;;::::1;-1:-1:-1::0;;;28349:36:0::1;;-1:-1:-1::0;;;;;28439:26:0;28396:32;;::::1;-1:-1:-1::0;;;28396:32:0::1;-1:-1:-1::0;;;;;28439:26:0;;;;::::1;-1:-1:-1::0;;;28439:26:0::1;;::::0;;;28203:78:::1;::::0;-1:-1:-1;28541:4:0::1;28523:22:::0;::::1;;28478:108;;;::::0;-1:-1:-1;;;28478:108:0;;7482:2:1;28478:108:0::1;::::0;::::1;7464:21:1::0;7521:2;7501:18;;;7494:30;-1:-1:-1;;;7540:18:1;;;7533:43;7593:18;;28478:108:0::1;7280:337:1::0;29940:179:0;14321:13;:11;:13::i;:::-;30030:16:::1;30020:6;:26;;30012:65;;;::::0;-1:-1:-1;;;30012:65:0;;8053:2:1;30012:65:0::1;::::0;::::1;8035:21:1::0;8092:2;8072:18;;;8065:30;8131:28;8111:18;;;8104:56;8177:18;;30012:65:0::1;7851:350:1::0;30012:65:0::1;30088:14;:23:::0;29940:179::o;29053:112::-;14321:13;:11;:13::i;:::-;-1:-1:-1;;;;;29122:27:0::1;29152:5;29122:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;29122:35:0::1;::::0;;29053:112::o;15341:201::-;14321:13;:11;:13::i;:::-;-1:-1:-1;;;;;15430:22:0;::::1;15422:73;;;::::0;-1:-1:-1;;;15422:73:0;;8408:2:1;15422:73:0::1;::::0;::::1;8390:21:1::0;8447:2;8427:18;;;8420:30;8486:34;8466:18;;;8459:62;-1:-1:-1;;;8537:18:1;;;8530:36;8583:19;;15422:73:0::1;8206:402:1::0;15422:73:0::1;15506:28;15525:8;15506:18;:28::i;:::-;15341:201:::0;:::o;31047:371::-;-1:-1:-1;;;;;31174:19:0;;31166:68;;;;-1:-1:-1;;;31166:68:0;;8815:2:1;31166:68:0;;;8797:21:1;8854:2;8834:18;;;8827:30;8893:34;8873:18;;;8866:62;-1:-1:-1;;;8944:18:1;;;8937:34;8988:19;;31166:68:0;8613:400:1;31166:68:0;-1:-1:-1;;;;;31253:21:0;;31245:68;;;;-1:-1:-1;;;31245:68:0;;9220:2:1;31245:68:0;;;9202:21:1;9259:2;9239:18;;;9232:30;9298:34;9278:18;;;9271:62;-1:-1:-1;;;9349:18:1;;;9342:32;9391:19;;31245:68:0;9018:398:1;31245:68:0;-1:-1:-1;;;;;31326:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;31378:32;;2179:25:1;;;31378:32:0;;2152:18:1;31378:32:0;;;;;;;31047:371;;;:::o;31426:1043::-;-1:-1:-1;;;;;31548:18:0;;31540:68;;;;-1:-1:-1;;;31540:68:0;;9623:2:1;31540:68:0;;;9605:21:1;9662:2;9642:18;;;9635:30;9701:34;9681:18;;;9674:62;-1:-1:-1;;;9752:18:1;;;9745:35;9797:19;;31540:68:0;9421:401:1;31540:68:0;-1:-1:-1;;;;;31627:16:0;;31619:64;;;;-1:-1:-1;;;31619:64:0;;10029:2:1;31619:64:0;;;10011:21:1;10068:2;10048:18;;;10041:30;10107:34;10087:18;;;10080:62;-1:-1:-1;;;10158:18:1;;;10151:33;10201:19;;31619:64:0;9827:399:1;31619:64:0;31711:1;31702:6;:10;31694:64;;;;-1:-1:-1;;;31694:64:0;;10433:2:1;31694:64:0;;;10415:21:1;10472:2;10452:18;;;10445:30;10511:34;10491:18;;;10484:62;-1:-1:-1;;;10562:18:1;;;10555:39;10611:19;;31694:64:0;10231:405:1;31694:64:0;31820:4;31771:28;26382:17;;;:8;:17;;;;;;31837:4;:12;;-1:-1:-1;;31837:12:0;;;31872:13;;-1:-1:-1;;;;;31872:13:0;;;31866:19;;;;31862:63;;31902:4;:11;;-1:-1:-1;;31902:11:0;31909:4;31902:11;;;31862:63;32001:19;;32057:13;;31964:56;;;;;-1:-1:-1;;;;;32049:21:0;;;32057:13;;32049:21;;;;:57;;;32087:19;32049:57;:91;;;;-1:-1:-1;32124:16:0;;-1:-1:-1;;;32124:16:0;;;;32123:17;32049:91;:139;;;;-1:-1:-1;32157:9:0;:31;;;32049:139;32031:232;;;32215:36;32230:20;32215:14;:36::i;:::-;-1:-1:-1;;;;;32311:24:0;;32275:12;32311:24;;;:18;:24;;;;;;32290:4;;32311:24;;;:50;;-1:-1:-1;;;;;;32339:22:0;;;;;;:18;:22;;;;;;;;32311:50;32307:98;;;-1:-1:-1;32388:5:0;32307:98;32417:44;32435:4;32441:2;32445:6;32453:7;32417:17;:44::i;:::-;31529:940;;;31426:1043;;;:::o;14600:132::-;14481:7;14508:6;-1:-1:-1;;;;;14508:6:0;13066:10;14664:23;14656:68;;;;-1:-1:-1;;;14656:68:0;;10843:2:1;14656:68:0;;;10825:21:1;;;10862:18;;;10855:30;10921:34;10901:18;;;10894:62;10973:18;;14656:68:0;10641:356:1;15702:191:0;15776:16;15795:6;;-1:-1:-1;;;;;15812:17:0;;;-1:-1:-1;;;;;;15812:17:0;;;;;;15845:40;;15795:6;;;;;;;15845:40;;15776:16;15845:40;15765:128;15702:191;:::o;34040:1913::-;24828:16;:23;;-1:-1:-1;;;;24828:23:0;-1:-1:-1;;;24828:23:0;;;34150:22;;24828:23;;34182:20;;34150:28:::1;::::0;34175:3:::1;34150:28;:::i;:::-;34149:53;;;;:::i;:::-;34127:75;;34213:22;34269:20;34239:7;:20;;;34262:3;34239:26;;;;:::i;:::-;34238:51;;;;:::i;:::-;34213:76;;34300:19;34351:20;34324:7;:17;;;34344:3;34324:23;;;;:::i;:::-;34323:48;;;;:::i;:::-;34388:6;:19:::0;34300:71;;-1:-1:-1;34388:19:0::1;;:24:::0;34384:1534:::1;;34450:7;:22:::0;34428:18:::1;::::0;34478:20;;34450:26:::1;::::0;34473:3:::1;34450:26;:::i;:::-;34449:49;;;;:::i;:::-;34428:70:::0;-1:-1:-1;34543:29:0::1;34428:70:::0;34575:26:::1;34597:3;34575:20:::0;:26:::1;:::i;:::-;:39;;;;:::i;:::-;34543:71:::0;-1:-1:-1;34653:25:0::1;34676:1;34543:71:::0;34653:25:::1;:::i;:::-;34629:49:::0;-1:-1:-1;34695:20:0::1;34718:42;34629:49:::0;34718:20;:42:::1;:::i;:::-;34695:65:::0;-1:-1:-1;34802:21:0::1;34876:30;34695:65:::0;34876:16:::1;:30::i;:::-;34924:12;34939:14;34951:1;34939:10:::0;:14:::1;:::i;:::-;34924:29:::0;-1:-1:-1;34968:15:0::1;34924:29:::0;35018:11;34986:28:::1;35000:14:::0;34986:11;:28:::1;:::i;:::-;:43;;;;:::i;:::-;:50;;;;:::i;:::-;34968:68:::0;-1:-1:-1;35105:18:0::1;35126:38;35149:14:::0;35126:21:::1;:38;:::i;:::-;35105:59:::0;-1:-1:-1;35181:27:0::1;35229:7:::0;35212:14:::1;35105:59:::0;35223:3:::1;35212:14;:::i;:::-;35211:26;;;;:::i;:::-;35181:56:::0;-1:-1:-1;35303:4:0;35275:25:::1;35296:3;35181:56:::0;35275:25:::1;:::i;:::-;35274:34;;;;:::i;:::-;35252:56:::0;-1:-1:-1;35325:26:0::1;35354:43;35252:56:::0;35354:21:::1;:43;:::i;:::-;35325:72:::0;-1:-1:-1;35414:13:0::1;35430:14;35434:10:::0;35430:3:::1;:14;:::i;:::-;35414:30;;35461:84;35477:18;35497:5;35504:11;35517:14;35533:11;35461:15;:84::i;:::-;35604:56;35617:21;35640:19;35604:12;:56::i;:::-;34414:1258;;;;;;;;;;34384:1534;;;35711:38;35728:20;35711:16;:38::i;:::-;35783:21;35819:71;35783:21:::0;35844:3:::1;35849:11:::0;35862:14;35878:11;35819:15:::1;:71::i;:::-;35696:222;34384:1534;35930:15;39464:1:::0;39441:20;:24;;;39476:22;:26;;;39441:7;39513:26;;;39550:17;:21;39396:183;35930:15:::1;-1:-1:-1::0;;24874:16:0;:24;;-1:-1:-1;;;;24874:24:0;;;-1:-1:-1;;34040:1913:0:o;32478:1554::-;32644:15;;;32655:4;32644:15;32640:1377;;32703:13;;-1:-1:-1;;;;;32690:26:0;;;32703:13;;32690:26;;;;:114;;-1:-1:-1;;;;;;32721:32:0;;;;;;:24;:32;;;;;;;;:38;;:32;:38;;;:82;;-1:-1:-1;;;;;;32762:35:0;;;;;;:24;:35;;;;;;;;:41;;:35;:41;;32721:82;32686:331;;;32893:14;;32880:7;32856:20;32866:9;-1:-1:-1;;;;;26382:17:0;26355:7;26382:17;;;:8;:17;;;;;;;26289:118;32856:20;:32;;;;:::i;:::-;32855:52;;32825:158;;;;-1:-1:-1;;;32825:158:0;;11337:2:1;32825:158:0;;;11319:21:1;;;11356:18;;;11349:30;11415:34;11395:18;;;11388:62;11467:18;;32825:158:0;11135:356:1;32825:158:0;33038:18;33058;33078:16;33096:13;33113:22;33127:7;33113:13;:22::i;:::-;33037:98;;;;;;;;33154:23;33223:8;33210:10;33202:5;33189:10;33180:7;:20;;;;:::i;:::-;:28;;;;:::i;:::-;:41;;;;:::i;:::-;:52;;;;:::i;:::-;-1:-1:-1;;;;;33266:16:0;;;;;;:8;:16;;;;;;33154:78;;-1:-1:-1;33266:28:0;;33286:7;;33266:28;:::i;:::-;-1:-1:-1;;;;;33247:16:0;;;;;;;:8;:16;;;;;;:47;;;;33331:19;;;;;;;:39;;33354:15;;33331:39;:::i;:::-;-1:-1:-1;;;;;33309:19:0;;;;;;:8;:19;;;;;:61;33385:162;33417:6;33442:10;33471;33500:8;33527:5;33385:13;:162::i;:::-;33588:10;33562:7;:22;;;:36;;;;;;;:::i;:::-;;;;-1:-1:-1;;33613:22:0;:36;;33639:10;;33613:22;;;:36;;33639:10;;33613:36;:::i;:::-;;;;-1:-1:-1;;33664:20:0;:32;;33688:8;;33664:20;;;:32;;33688:8;;33664:32;:::i;:::-;;;;-1:-1:-1;;33711:17:0;:26;;33732:5;;33711:17;;;:26;;33732:5;;33711:26;:::i;:::-;;;;;;;;33774:9;-1:-1:-1;;;;;33757:44:0;33766:6;-1:-1:-1;;;;;33757:44:0;-1:-1:-1;;;;;;;;;;;33785:15:0;33757:44;;;;2179:25:1;;2167:2;2152:18;;2033:177;33757:44:0;;;;;;;;32671:1142;;;;;32640:1377;;;-1:-1:-1;;;;;33853:16:0;;;;;;:8;:16;;;;;;:28;;33873:7;;33853:28;:::i;:::-;-1:-1:-1;;;;;33834:16:0;;;;;;;:8;:16;;;;;;:47;;;;33918:19;;;;;;;:31;;33941:7;;33918:31;:::i;:::-;-1:-1:-1;;;;;33896:19:0;;;;;;;:8;:19;;;;;;;:53;;;;33969:36;;;;;;-1:-1:-1;;;;;;;;;;;33969:36:0;;;33997:7;2179:25:1;;2167:2;2152:18;;2033:177;33969:36:0;;;;;;;;32640:1377;32478:1554;;;;:::o;36935:589::-;37085:16;;;37099:1;37085:16;;;;;;;;37061:21;;37085:16;;;;;;;;;;-1:-1:-1;37085:16:0;37061:40;;37130:4;37112;37117:1;37112:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;37112:23:0;;;:7;;;;;;;;;;:23;;;;37156:15;;:22;;;-1:-1:-1;;;37156:22:0;;;;:15;;;;;:20;;:22;;;;;37112:7;;37156:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37146:4;37151:1;37146:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;37146:32:0;;;:7;;;;;;;;;:32;37223:15;;37191:62;;37208:4;;37223:15;37241:11;37191:8;:62::i;:::-;37292:15;;:224;;-1:-1:-1;;;37292:224:0;;-1:-1:-1;;;;;37292:15:0;;;;:66;;:224;;37373:11;;37292:15;;37443:4;;37470;;37490:15;;37292:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35961:966;36161:6;:19;;;;;;:24;36157:257;;36202:24;36252:11;36230:17;36241:5;36230:7;:17;:::i;:::-;36229:35;;;;:::i;:::-;36202:62;-1:-1:-1;36285:20:0;;36281:122;;36334:8;:25;36326:61;;-1:-1:-1;;;;;36334:25:0;;;;36326:61;;;;;36370:16;;36334:25;36326:61;36334:25;36326:61;36370:16;36334:25;36326:61;;;;;;;;;;;;;;;;;;;;;36281:122;36187:227;36157:257;36430:6;:17;-1:-1:-1;;;36430:17:0;;;;:22;36426:250;;36469:22;36517:14;36495:17;36506:5;36495:7;:17;:::i;:::-;36494:38;;;;:::i;:::-;36469:63;-1:-1:-1;36553:18:0;;36549:116;;36600:23;;36592:57;;-1:-1:-1;;;;;36600:23:0;;;;36592:57;;;;;36634:14;;36600:23;36592:57;36600:23;36592:57;36634:14;36600:23;36592:57;;;;;;;;;;;;;;;;;;;;;36549:116;36454:222;36426:250;36692:6;:14;-1:-1:-1;;;36692:14:0;;;;:19;36688:232;;36728:19;36773:11;36751:17;36762:5;36751:7;:17;:::i;:::-;36750:35;;;;:::i;:::-;36728:57;-1:-1:-1;36806:15:0;;36802:107;;36850:20;;36842:51;;-1:-1:-1;;;;;36850:20:0;;;;36842:51;;;;;36881:11;;36850:20;36842:51;36850:20;36842:51;36881:11;36850:20;36842:51;;;;;;;;;;;;;;;;;;;;;36713:207;35961:966;;;;;:::o;37532:511::-;37712:15;;37680:62;;37697:4;;-1:-1:-1;;;;;37712:15:0;37730:11;37680:8;:62::i;:::-;37783:15;;-1:-1:-1;;;;;37783:15:0;:31;37822:9;37855:4;37875:11;37783:15;;37987:7;14481;14508:6;-1:-1:-1;;;;;14508:6:0;;14435:87;37987:7;37783:252;;;;;;-1:-1:-1;;;;;;37783:252:0;;;-1:-1:-1;;;;;13360:15:1;;;37783:252:0;;;13342:34:1;13392:18;;;13385:34;;;;13435:18;;;13428:34;;;;13478:18;;;13471:34;13542:15;;;13521:19;;;13514:44;38009:15:0;13574:19:1;;;13567:35;13276:19;;37783:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;30220:819::-;30428:4;;30323:7;;;;;;;;30428:4;;:12;;:4;:12;30424:608;;30495:6;:20;30521:5;;30484:32;;-1:-1:-1;;;30495:20:0;;;;30484:7;:32;:::i;:::-;30483:44;;;;:::i;:::-;30558:6;:20;30584:5;;30547:32;;-1:-1:-1;;;30558:20:0;;;;30547:7;:32;:::i;:::-;30546:44;;;;:::i;:::-;30621:6;:18;30645:5;;30610:30;;-1:-1:-1;;;30621:18:0;;;;30610:7;:30;:::i;:::-;30609:42;;;;:::i;:::-;30682:6;:15;30703:5;;30671:27;;-1:-1:-1;;;30682:15:0;;;;30671:7;:27;:::i;:::-;30670:39;;;;:::i;:::-;30457:267;;;;;;;;;;30424:608;30795:6;:19;30820:5;;30784:31;;30795:19;;30784:7;:31;:::i;:::-;30783:43;;;;:::i;:::-;30857:6;:19;30882:5;;30846:31;;30857:19;;;;;30846:7;:31;:::i;:::-;30845:43;;;;:::i;:::-;30919:6;:17;30942:5;;30908:29;;-1:-1:-1;;;30919:17:0;;;;30908:7;:29;:::i;:::-;30907:41;;;;:::i;:::-;30979:6;:14;30999:5;;30968:26;;-1:-1:-1;;;30979:14:0;;;;30968:7;:26;:::i;30424:608::-;30220:819;;;;;:::o;38058:611::-;38242:18;38300:5;38289:8;38263:23;38276:10;38263;:23;:::i;:::-;:34;;;;:::i;:::-;:42;;;;:::i;:::-;38361:4;38344:23;;;;:8;:23;;;;;;38242:63;;-1:-1:-1;38344:38:0;;38371:10;;38344:38;:::i;:::-;38335:4;38318:23;;;;:8;:23;;;;;:64;;;38419:36;;38446:8;;38419:36;:::i;:::-;38410:4;38393:23;;;;:8;:23;;;;;:62;;;38492:38;;38519:10;;38492:38;:::i;:::-;38483:4;38466:23;;;;:8;:23;;;;;:64;;;38567:33;;38594:5;;38567:33;:::i;:::-;38558:4;38541:23;;;;:8;:23;;;;;;;:59;;;;38618:43;;-1:-1:-1;;;;;38618:43:0;;;-1:-1:-1;;;;;;;;;;;38618:43:0;;;38650:10;2179:25:1;;2167:2;2152:18;;2033:177;38618:43:0;;;;;;;;38231:438;38058:611;;;;;:::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:131::-;-1:-1:-1;;;;;691:31:1;;681:42;;671:70;;737:1;734;727:12;752:315;820:6;828;881:2;869:9;860:7;856:23;852:32;849:52;;;897:1;894;887:12;849:52;936:9;923:23;955:31;980:5;955:31;:::i;:::-;1005:5;1057:2;1042:18;;;;1029:32;;-1:-1:-1;;;752:315:1:o;2449:456::-;2526:6;2534;2542;2595:2;2583:9;2574:7;2570:23;2566:32;2563:52;;;2611:1;2608;2601:12;2563:52;2650:9;2637:23;2669:31;2694:5;2669:31;:::i;:::-;2719:5;-1:-1:-1;2776:2:1;2761:18;;2748:32;2789:33;2748:32;2789:33;:::i;:::-;2449:456;;2841:7;;-1:-1:-1;;;2895:2:1;2880:18;;;;2867:32;;2449:456::o;3099:247::-;3158:6;3211:2;3199:9;3190:7;3186:23;3182:32;3179:52;;;3227:1;3224;3217:12;3179:52;3266:9;3253:23;3285:31;3310:5;3285:31;:::i;:::-;3335:5;3099:247;-1:-1:-1;;;3099:247:1:o;3996:341::-;4061:6;4069;4122:2;4110:9;4101:7;4097:23;4093:32;4090:52;;;4138:1;4135;4128:12;4090:52;4177:9;4164:23;4230:5;4223:13;4216:21;4209:5;4206:32;4196:60;;4252:1;4249;4242:12;4342:180;4401:6;4454:2;4442:9;4433:7;4429:23;4425:32;4422:52;;;4470:1;4467;4460:12;4422:52;-1:-1:-1;4493:23:1;;4342:180;-1:-1:-1;4342:180:1:o;4527:553::-;4628:6;4636;4644;4697:2;4685:9;4676:7;4672:23;4668:32;4665:52;;;4713:1;4710;4703:12;4665:52;4752:9;4739:23;4771:31;4796:5;4771:31;:::i;:::-;4821:5;-1:-1:-1;4878:2:1;4863:18;;4850:32;4891:33;4850:32;4891:33;:::i;:::-;4943:7;-1:-1:-1;5002:2:1;4987:18;;4974:32;5015:33;4974:32;5015:33;:::i;:::-;5067:7;5057:17;;;4527:553;;;;;:::o;5085:159::-;5152:20;;5212:6;5201:18;;5191:29;;5181:57;;5234:1;5231;5224:12;5181:57;5085:159;;;:::o;5249:401::-;5331:6;5339;5347;5355;5408:3;5396:9;5387:7;5383:23;5379:33;5376:53;;;5425:1;5422;5415:12;5376:53;5448:28;5466:9;5448:28;:::i;:::-;5438:38;;5495:37;5528:2;5517:9;5513:18;5495:37;:::i;:::-;5485:47;;5551:37;5584:2;5573:9;5569:18;5551:37;:::i;:::-;5541:47;;5607:37;5640:2;5629:9;5625:18;5607:37;:::i;:::-;5597:47;;5249:401;;;;;;;:::o;5655:388::-;5723:6;5731;5784:2;5772:9;5763:7;5759:23;5755:32;5752:52;;;5800:1;5797;5790:12;5752:52;5839:9;5826:23;5858:31;5883:5;5858:31;:::i;:::-;5908:5;-1:-1:-1;5965:2:1;5950:18;;5937:32;5978:33;5937:32;5978:33;:::i;:::-;6030:7;6020:17;;;5655:388;;;;;:::o;6048:127::-;6109:10;6104:3;6100:20;6097:1;6090:31;6140:4;6137:1;6130:15;6164:4;6161:1;6154:15;6180:125;6220:4;6248:1;6245;6242:8;6239:34;;;6253:18;;:::i;:::-;-1:-1:-1;6290:9:1;;6180:125::o;6652:168::-;6692:7;6758:1;6754;6750:6;6746:14;6743:1;6740:21;6735:1;6728:9;6721:17;6717:45;6714:71;;;6765:18;;:::i;:::-;-1:-1:-1;6805:9:1;;6652:168::o;6825:217::-;6865:1;6891;6881:132;;6935:10;6930:3;6926:20;6923:1;6916:31;6970:4;6967:1;6960:15;6998:4;6995:1;6988:15;6881:132;-1:-1:-1;7027:9:1;;6825:217::o;7047:228::-;7086:3;7114:10;7151:2;7148:1;7144:10;7181:2;7178:1;7174:10;7212:3;7208:2;7204:12;7199:3;7196:21;7193:47;;;7220:18;;:::i;:::-;7256:13;;7047:228;-1:-1:-1;;;;7047:228:1:o;7622:224::-;7661:3;7689:6;7722:2;7719:1;7715:10;7752:2;7749:1;7745:10;7783:3;7779:2;7775:12;7770:3;7767:21;7764:47;;;7791:18;;:::i;11002:128::-;11042:3;11073:1;11069:6;11066:1;11063:13;11060:39;;;11079:18;;:::i;:::-;-1:-1:-1;11115:9:1;;11002:128::o;11628:127::-;11689:10;11684:3;11680:20;11677:1;11670:31;11720:4;11717:1;11710:15;11744:4;11741:1;11734:15;11760:251;11830:6;11883:2;11871:9;11862:7;11858:23;11854:32;11851:52;;;11899:1;11896;11889:12;11851:52;11931:9;11925:16;11950:31;11975:5;11950:31;:::i;12016:980::-;12278:4;12326:3;12315:9;12311:19;12357:6;12346:9;12339:25;12383:2;12421:6;12416:2;12405:9;12401:18;12394:34;12464:3;12459:2;12448:9;12444:18;12437:31;12488:6;12523;12517:13;12554:6;12546;12539:22;12592:3;12581:9;12577:19;12570:26;;12631:2;12623:6;12619:15;12605:29;;12652:1;12662:195;12676:6;12673:1;12670:13;12662:195;;;12741:13;;-1:-1:-1;;;;;12737:39:1;12725:52;;12832:15;;;;12797:12;;;;12773:1;12691:9;12662:195;;;-1:-1:-1;;;;;;;12913:32:1;;;;12908:2;12893:18;;12886:60;-1:-1:-1;;;12977:3:1;12962:19;12955:35;12874:3;12016:980;-1:-1:-1;;;12016:980:1:o;13613:306::-;13701:6;13709;13717;13770:2;13758:9;13749:7;13745:23;13741:32;13738:52;;;13786:1;13783;13776:12;13738:52;13815:9;13809:16;13799:26;;13865:2;13854:9;13850:18;13844:25;13834:35;;13909:2;13898:9;13894:18;13888:25;13878:35;;13613:306;;;;;:::o
Swarm Source
ipfs://8c6742694bef038d08dd6b370230677ff8d534cafa000d6c62842dea24caf4f0
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.