ERC-20
Overview
Max Total Supply
400,000,000 猿
Holders
30
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
SARU
Compiler Version
v0.8.1+commit.df193b15
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-09-28 */ /** * SARU- 猿 Guardian of the Merge 新しい時代は近い * */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.1; interface IERC20 { function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval( address indexed owner, address indexed spender, uint256 value ); } library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return payable(msg.sender); } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. */ function sendValue(address payable recipient, uint256 amount) internal { require( address(this).balance >= amount, "Address: insufficient balance" ); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{value: amount}(""); require( success, "Address: unable to send value, recipient may have reverted" ); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue( target, data, value, "Address: low-level call with value failed" ); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require( address(this).balance >= value, "Address: insufficient balance for call" ); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue( address target, bytes memory data, uint256 weiValue, string memory errorMessage ) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{value: weiValue}( data ); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @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. */ contract Ownable is Context { address private _owner; address private _previousOwner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } 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; } interface IUniswapV2Pair { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns ( uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast ); function price0CumulativeLast() external view returns (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } 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; } contract SARU is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; mapping(address => uint256) private _rOwned; mapping(address => mapping(address => uint256)) private _allowances; mapping(address => bool) private _isExcludedFromFee; mapping(address => bool) private _isExcludedFromLimit; uint256 private _tTotal = 400000000 * 10**18; address payable _marketingAddress = payable(address(0x94fb2322242AC4AEFD74386Cb2184b37d4b3C64E)); string private _name = "SARU"; string private _symbol = unicode"猿"; uint8 private _decimals = 18; struct BuyFee { uint8 liquidity; uint8 marketing; } struct SellFee { uint8 liquidity; uint8 marketing; } BuyFee public buyFee; SellFee public sellFee; uint8 private _liquidityFee; uint8 private _marketingFee; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool inSwapAndLiquify; bool swapAndLiquifyEnabled = true; uint256 public _maxTxAmount = _tTotal.div(1000).mul(1000); uint256 private numTokensSellToAddToLiquidity = _tTotal.div(1000).mul(3); uint256 public _maxWalletSize = _tTotal.div(1000).mul(20); event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); modifier lockTheSwap() { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } uint256 deadBlocks = 0; uint256 launchedAt = 0; bool tradingOpen = false; mapping (address => uint256) _lastTrade; constructor() { _rOwned[_msgSender()] = _tTotal; buyFee.liquidity = 1; buyFee.marketing = 2; sellFee.liquidity = 1; sellFee.marketing = 2; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(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; _isExcludedFromFee[_marketingAddress] = true; _isExcludedFromLimit[_marketingAddress] = true; _isExcludedFromLimit[owner()] = true; _isExcludedFromLimit[address(this)] = true; emit Transfer(address(0), _msgSender(), _tTotal); } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { return _rOwned[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][_msgSender()].sub( amount, "ERC20: transfer amount exceeds allowance" ) ); return true; } function setSellFee( uint8 liquidity, uint8 marketing ) external onlyOwner { sellFee.marketing = marketing; sellFee.liquidity = liquidity; } function setBuyFee( uint8 liquidity, uint8 marketing ) external onlyOwner { buyFee.marketing = marketing; buyFee.liquidity = liquidity; } function setBothFees( uint8 buy_liquidity, uint8 buy_marketing, uint8 sell_liquidity, uint8 sell_marketing ) external onlyOwner { buyFee.marketing = buy_marketing; buyFee.liquidity = buy_liquidity; sellFee.marketing = sell_marketing; sellFee.liquidity = sell_liquidity; } function setNumTokensSellToAddToLiquidity(uint256 numTokens) external onlyOwner { numTokensSellToAddToLiquidity = numTokens; } function _setMaxWalletSize(uint256 maxWalletSize) external onlyOwner { _maxWalletSize = _tTotal.mul(maxWalletSize).div(10**3); } //to recieve ETH from uniswapV2Router when swapping receive() external payable {} function _getTValues(uint256 tAmount) private view returns ( uint256, uint256, uint256 ) { uint256 tLiquidity = calculateLiquidityFee(tAmount); uint256 tWallet = calculateMarketingFee(tAmount); uint256 tTransferAmount = tAmount.sub(tLiquidity).sub(tWallet); return (tTransferAmount, tLiquidity, tWallet); } function _takeLiquidity(uint256 tLiquidity) private { _rOwned[address(this)] = _rOwned[address(this)].add(tLiquidity); } function _takeWalletFee(uint256 tWallet) private { _rOwned[address(this)] = _rOwned[address(this)].add(tWallet); } function calculateLiquidityFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_liquidityFee).div(10**2); } function calculateMarketingFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_marketingFee).div(10**2); } function removeAllFee() private { _liquidityFee = 0; _marketingFee = 0; } function setBuy() private { _liquidityFee = buyFee.liquidity; _marketingFee = buyFee.marketing; } function setSell() private { _liquidityFee = sellFee.liquidity; _marketingFee = sellFee.marketing; } function _approve( address owner, address spender, uint256 amount ) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer( address from, address to, uint256 amount ) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); if ( from != owner() && to != owner() ) require(tradingOpen, "Trading not yet enabled."); //transfers disabled before openTrading // is the token balance of this contract address over the min number of // tokens that we need to initiate a swap + liquidity lock? // also, don't get caught in a circular liquidity event. // also, don't swap & liquify if sender is uniswap pair. uint256 contractTokenBalance = balanceOf(address(this)); if (contractTokenBalance >= _maxTxAmount) { contractTokenBalance = _maxTxAmount; } bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity; if ( overMinTokenBalance && !inSwapAndLiquify && from != uniswapV2Pair && swapAndLiquifyEnabled ) { contractTokenBalance = numTokensSellToAddToLiquidity; //add liquidity swapAndLiquify(contractTokenBalance); } //indicates if fee should be deducted from transfer bool takeFee = true; //if any account belongs to _isExcludedFromFee account then remove the fee if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) { takeFee = false; } if (takeFee) { if (!_isExcludedFromLimit[from] && !_isExcludedFromLimit[to]) { require( amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount." ); if (to != uniswapV2Pair) { require( amount + balanceOf(to) <= _maxWalletSize, "Recipient exceeds max wallet size." ); } } } //transfer amount, it will take liquidity fee _tokenTransfer(from, to, amount, takeFee); } function swapAndLiquify(uint256 tokens) private lockTheSwap { // Split the contract balance into halves uint256 denominator = (buyFee.liquidity + sellFee.liquidity + buyFee.marketing + sellFee.marketing) * 2; uint256 tokensToAddLiquidityWith = (tokens * (buyFee.liquidity + sellFee.liquidity)) / denominator; uint256 toSwap = tokens - tokensToAddLiquidityWith; uint256 initialBalance = address(this).balance; swapTokensForEth(toSwap); uint256 deltaBalance = address(this).balance - initialBalance; uint256 unitBalance = deltaBalance / (denominator - (buyFee.liquidity + sellFee.liquidity)); uint256 ethToAddLiquidityWith = unitBalance * (buyFee.liquidity + sellFee.liquidity); if (ethToAddLiquidityWith > 0) { // Add liquidity to uniswap addLiquidity(tokensToAddLiquidityWith, ethToAddLiquidityWith); } // Send ETH to marketing uint256 marketingAmt = unitBalance * 2 * (buyFee.marketing + sellFee.marketing); if (marketingAmt > 0) { payable(_marketingAddress).transfer(marketingAmt); } } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable address(this), block.timestamp ); } //this method is responsible for taking all fee, if takeFee is true function _tokenTransfer( address sender, address recipient, uint256 amount, bool takeFee ) private { if (takeFee) { removeAllFee(); if (sender == uniswapV2Pair) { setBuy(); } if (recipient == uniswapV2Pair) { setSell(); } } _transferStandard(sender, recipient, amount); removeAllFee(); } function _transferStandard( address sender, address recipient, uint256 tAmount ) private { ( uint256 tTransferAmount, uint256 tLiquidity, uint256 tWallet ) = _getTValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(tAmount); _rOwned[recipient] = _rOwned[recipient].add(tTransferAmount); _takeLiquidity(tLiquidity); _takeWalletFee(tWallet); emit Transfer(sender, recipient, tTransferAmount); } function openTrading(bool _status,uint256 _deadBlocks) external onlyOwner() { tradingOpen = _status; if(tradingOpen && launchedAt == 0){ launchedAt = block.number; deadBlocks = _deadBlocks; } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWalletSize","type":"uint256"}],"name":"_setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","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":[],"name":"buyFee","outputs":[{"internalType":"uint8","name":"liquidity","type":"uint8"},{"internalType":"uint8","name":"marketing","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"},{"internalType":"uint256","name":"_deadBlocks","type":"uint256"}],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint8","name":"liquidity","type":"uint8"},{"internalType":"uint8","name":"marketing","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"buy_liquidity","type":"uint8"},{"internalType":"uint8","name":"buy_marketing","type":"uint8"},{"internalType":"uint8","name":"sell_liquidity","type":"uint8"},{"internalType":"uint8","name":"sell_marketing","type":"uint8"}],"name":"setBothFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"liquidity","type":"uint8"},{"internalType":"uint8","name":"marketing","type":"uint8"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numTokens","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"liquidity","type":"uint8"},{"internalType":"uint8","name":"marketing","type":"uint8"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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
6b014adf4b7320334b90000000600655600780546001600160a01b0319167394fb2322242ac4aefd74386cb2184b37d4b3c64e179055610100604052600460c0819052635341525560e01b60e09081526200005e9160089190620005c8565b5060408051808201909152600380825262e78cbf60e81b60209092019182526200008b91600991620005c8565b50600a805460ff19166012179055600d805463ff00000019166301000000179055600654620000e7906103e890620000d39082620009cd620004cf602090811b91909117901c565b6200052260201b62000a161790919060201c565b600e556200010e6003620000d36103e8600654620004cf60201b620009cd1790919060201c565b600f55620001356014620000d36103e8600654620004cf60201b620009cd1790919060201c565b601055600060118190556012556013805460ff191690553480156200015957600080fd5b5060006200016662000579565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060065460026000620001c162000579565b6001600160a01b03168152602080820192909252604090810160002092909255600b8054600160ff19918216811761ff0019908116610200908117909455600c8054909316909117169091179055815163c45a015560e01b81529151737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a015592600480840193829003018186803b1580156200025657600080fd5b505afa1580156200026b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029191906200066e565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002da57600080fd5b505afa158015620002ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200031591906200066e565b6040518363ffffffff1660e01b81526004016200033492919062000697565b602060405180830381600087803b1580156200034f57600080fd5b505af115801562000364573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200038a91906200066e565b6001600160601b0319606091821b811660a0529082901b16608052600160046000620003b56200057d565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081526004845282812080548616600190811790915560078054841683528483208054881683179055549092168152600593849052918220805490941681179093556200042f6200057d565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff1995861617905530815260059092529020805490911660011790556200047962000579565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600654604051620004c0919062000748565b60405180910390a350620007db565b60006200051983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200058c60201b60201c565b90505b92915050565b60008262000533575060006200051c565b600062000541838562000772565b90508262000550858362000751565b14620005195760405162461bcd60e51b8152600401620005709062000707565b60405180910390fd5b3390565b6000546001600160a01b031690565b60008183620005b05760405162461bcd60e51b8152600401620005709190620006b1565b506000620005bf848662000751565b95945050505050565b828054620005d6906200079e565b90600052602060002090601f016020900481019282620005fa576000855562000645565b82601f106200061557805160ff191683800117855562000645565b8280016001018555821562000645579182015b828111156200064557825182559160200191906001019062000628565b506200065392915062000657565b5090565b5b8082111562000653576000815560010162000658565b60006020828403121562000680578081fd5b81516001600160a01b038116811462000519578182fd5b6001600160a01b0392831681529116602082015260400190565b6000602080835283518082850152825b81811015620006df57858101830151858201604001528201620006c1565b81811115620006f15783604083870101525b50601f01601f1916929092016040019392505050565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b90815260200190565b6000826200076d57634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156200079957634e487b7160e01b81526011600452602481fd5b500290565b600281046001821680620007b357607f821691505b60208210811415620007d557634e487b7160e01b600052602260045260246000fd5b50919050565b60805160601c60a05160601c611d6262000846600039600081816106a801528181610c2901528181610d4201528181610ff201526110340152600081816104e3015281816110f2015281816111c8015281816112040152818161127601526112b20152611d626000f3fe60806040526004361061014f5760003560e01c806370a08231116100b65780639e6c75291161006f5780639e6c752914610371578063a9059cbb14610391578063dd62ed3e146103b1578063f0f165af146103d1578063f2fde38b146103f1578063f6831bf21461041157610156565b806370a08231146102e8578063715018a6146103085780637d1db4a51461031d5780638da5cb5b146103325780638f9a55c01461034757806395d89b411461035c57610156565b80632d4103d6116101085780632d4103d61461023a578063313ce5671461025c5780633a17304a1461027e578063470624021461029e57806349bd5a5e146102b35780636e477861146102c857610156565b806306fdde031461015b578063095ea7b3146101865780631694505e146101b357806318160ddd146101d557806323b872dd146101f75780632b14ca561461021757610156565b3661015657005b600080fd5b34801561016757600080fd5b50610170610431565b60405161017d91906117e6565b60405180910390f35b34801561019257600080fd5b506101a66101a1366004611676565b6104c3565b60405161017d91906117db565b3480156101bf57600080fd5b506101c86104e1565b60405161017d919061178c565b3480156101e157600080fd5b506101ea610505565b60405161017d9190611b44565b34801561020357600080fd5b506101a6610212366004611636565b61050b565b34801561022357600080fd5b5061022c610592565b60405161017d929190611bcb565b34801561024657600080fd5b5061025a6102553660046116a1565b6105a4565b005b34801561026857600080fd5b50610271610614565b60405161017d9190611bbd565b34801561028a57600080fd5b5061025a610299366004611739565b61061d565b3480156102aa57600080fd5b5061022c610694565b3480156102bf57600080fd5b506101c86106a6565b3480156102d457600080fd5b5061025a6102e3366004611707565b6106ca565b3480156102f457600080fd5b506101ea6103033660046115c6565b610722565b34801561031457600080fd5b5061025a610741565b34801561032957600080fd5b506101ea6107c0565b34801561033e57600080fd5b506101c86107c6565b34801561035357600080fd5b506101ea6107d5565b34801561036857600080fd5b506101706107db565b34801561037d57600080fd5b5061025a61038c3660046116c2565b6107ea565b34801561039d57600080fd5b506101a66103ac366004611676565b610846565b3480156103bd57600080fd5b506101ea6103cc3660046115fe565b61085a565b3480156103dd57600080fd5b5061025a6103ec3660046116c2565b610885565b3480156103fd57600080fd5b5061025a61040c3660046115c6565b6108bf565b34801561041d57600080fd5b5061025a61042c366004611707565b610975565b60606008805461044090611c9b565b80601f016020809104026020016040519081016040528092919081815260200182805461046c90611c9b565b80156104b95780601f1061048e576101008083540402835291602001916104b9565b820191906000526020600020905b81548152906001019060200180831161049c57829003601f168201915b5050505050905090565b60006104d76104d0610a5b565b8484610a5f565b5060015b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60065490565b6000610518848484610b13565b61058884610524610a5b565b61058385604051806060016040528060288152602001611d05602891396001600160a01b038a16600090815260036020526040812090610562610a5b565b6001600160a01b031681526020810191909152604001600020549190610dc1565b610a5f565b5060019392505050565b600c5460ff8082169161010090041682565b6105ac610a5b565b6000546001600160a01b039081169116146105e25760405162461bcd60e51b81526004016105d990611a06565b60405180910390fd5b6013805460ff1916831515179081905560ff1680156106015750601254155b15610610574360125560118190555b5050565b600a5460ff1690565b610625610a5b565b6000546001600160a01b039081169116146106525760405162461bcd60e51b81526004016105d990611a06565b600b805460ff95861660ff1995871661010090810261ff001993841617871691909117909255600c805494871693909616909102921691909117909116179055565b600b5460ff8082169161010090041682565b7f000000000000000000000000000000000000000000000000000000000000000081565b6106d2610a5b565b6000546001600160a01b039081169116146106ff5760405162461bcd60e51b81526004016105d990611a06565b600b805461ff00191661010060ff938416021760ff191692909116919091179055565b6001600160a01b0381166000908152600260205260409020545b919050565b610749610a5b565b6000546001600160a01b039081169116146107765760405162461bcd60e51b81526004016105d990611a06565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600e5481565b6000546001600160a01b031690565b60105481565b60606009805461044090611c9b565b6107f2610a5b565b6000546001600160a01b0390811691161461081f5760405162461bcd60e51b81526004016105d990611a06565b6108406103e861083a83600654610a1690919063ffffffff16565b906109cd565b60105550565b60006104d7610853610a5b565b8484610b13565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b61088d610a5b565b6000546001600160a01b039081169116146108ba5760405162461bcd60e51b81526004016105d990611a06565b600f55565b6108c7610a5b565b6000546001600160a01b039081169116146108f45760405162461bcd60e51b81526004016105d990611a06565b6001600160a01b03811661091a5760405162461bcd60e51b81526004016105d99061187c565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b61097d610a5b565b6000546001600160a01b039081169116146109aa5760405162461bcd60e51b81526004016105d990611a06565b600c805461ff00191661010060ff938416021760ff191692909116919091179055565b6000610a0f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610dfb565b9392505050565b600082610a25575060006104db565b6000610a318385611c3c565b905082610a3e8583611c1c565b14610a0f5760405162461bcd60e51b81526004016105d9906119c5565b3390565b6001600160a01b038316610a855760405162461bcd60e51b81526004016105d990611ac9565b6001600160a01b038216610aab5760405162461bcd60e51b81526004016105d9906118c2565b6001600160a01b0380841660008181526003602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610b06908590611b44565b60405180910390a3505050565b6001600160a01b038316610b395760405162461bcd60e51b81526004016105d990611a84565b6001600160a01b038216610b5f5760405162461bcd60e51b81526004016105d990611839565b60008111610b7f5760405162461bcd60e51b81526004016105d990611a3b565b610b876107c6565b6001600160a01b0316836001600160a01b031614158015610bc15750610bab6107c6565b6001600160a01b0316826001600160a01b031614155b15610be85760135460ff16610be85760405162461bcd60e51b81526004016105d990611b0d565b6000610bf330610722565b9050600e548110610c035750600e545b600f5481108015908190610c205750600d5462010000900460ff16155b8015610c5e57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b8015610c735750600d546301000000900460ff165b15610c8657600f549150610c8682610e29565b6001600160a01b03851660009081526004602052604090205460019060ff1680610cc857506001600160a01b03851660009081526004602052604090205460ff165b15610cd1575060005b8015610dad576001600160a01b03861660009081526005602052604090205460ff16158015610d1957506001600160a01b03851660009081526005602052604090205460ff16155b15610dad57600e54841115610d405760405162461bcd60e51b81526004016105d99061197d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614610dad57601054610d8586610722565b610d8f9086611bdf565b1115610dad5760405162461bcd60e51b81526004016105d99061193b565b610db986868684610fe2565b505050505050565b60008184841115610de55760405162461bcd60e51b81526004016105d991906117e6565b506000610df28486611c84565b95945050505050565b60008183610e1c5760405162461bcd60e51b81526004016105d991906117e6565b506000610df28486611c1c565b600d805462ff0000191662010000179055600c54600b5460009161010080820460ff90811693918204811692610e63929082169116611bf7565b610e6d9190611bf7565b610e779190611bf7565b610e82906002611c5b565b600c54600b5460ff92831693506000928492610ea2929082169116611bf7565b610eaf9060ff1685611c3c565b610eb99190611c1c565b90506000610ec78285611c84565b905047610ed38261108d565b6000610edf8247611c84565b600c54600b54919250600091610efb9160ff9081169116611bf7565b610f089060ff1687611c84565b610f129083611c1c565b600c54600b54919250600091610f2e9160ff9081169116611bf7565b610f3b9060ff1683611c3c565b90508015610f4d57610f4d8682611270565b600c54600b54600091610f6f9160ff6101009283900481169290910416611bf7565b60ff16610f7d846002611c3c565b610f879190611c3c565b90508015610fcb576007546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015610fc9573d6000803e3d6000fd5b505b5050600d805462ff00001916905550505050505050565b801561107457610ff061134d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b031614156110325761103261135a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316141561107457611074611387565b61107f8484846113b4565b61108761134d565b50505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106110d057634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561114957600080fd5b505afa15801561115d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061118191906115e2565b816001815181106111a257634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250506111ed307f000000000000000000000000000000000000000000000000000000000000000084610a5f565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790611242908590600090869030904290600401611b4d565b600060405180830381600087803b15801561125c57600080fd5b505af1158015610db9573d6000803e3d6000fd5b61129b307f000000000000000000000000000000000000000000000000000000000000000084610a5f565b60405163f305d71960e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063f305d7199083906112f490309087906000908190849042906004016117a0565b6060604051808303818588803b15801561130d57600080fd5b505af1158015611321573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061134691906116da565b5050505050565b600d805461ffff19169055565b600b54600d805461010080840460ff90811690910261ff001960ff19909316919094161716919091179055565b600c54600d805461010080840460ff90811690910261ff001960ff19909316919094161716919091179055565b60008060006113c28461149a565b6001600160a01b03891660009081526002602052604090205492955090935091506113ed90856114dc565b6001600160a01b03808816600090815260026020526040808220939093559087168152205461141c908461151e565b6001600160a01b03861660009081526002602052604090205561143e8261154d565b6114478161154d565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161148a9190611b44565b60405180910390a3505050505050565b6000806000806114a98561157a565b905060006114b686611595565b905060006114ce826114c889866114dc565b906114dc565b979296509094509092505050565b6000610a0f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610dc1565b60008061152b8385611bdf565b905083811015610a0f5760405162461bcd60e51b81526004016105d990611904565b30600090815260026020526040902054611567908261151e565b3060009081526002602052604090205550565b600d546000906104db9060649061083a90859060ff16610a16565b600d546000906104db9060649061083a908590610100900460ff16610a16565b803560ff8116811461073c57600080fd5b6000602082840312156115d7578081fd5b8135610a0f81611cec565b6000602082840312156115f3578081fd5b8151610a0f81611cec565b60008060408385031215611610578081fd5b823561161b81611cec565b9150602083013561162b81611cec565b809150509250929050565b60008060006060848603121561164a578081fd5b833561165581611cec565b9250602084013561166581611cec565b929592945050506040919091013590565b60008060408385031215611688578182fd5b823561169381611cec565b946020939093013593505050565b600080604083850312156116b3578182fd5b82358015158114611693578283fd5b6000602082840312156116d3578081fd5b5035919050565b6000806000606084860312156116ee578283fd5b8351925060208401519150604084015190509250925092565b60008060408385031215611719578182fd5b611722836115b5565b9150611730602084016115b5565b90509250929050565b6000806000806080858703121561174e578081fd5b611757856115b5565b9350611765602086016115b5565b9250611773604086016115b5565b9150611781606086016115b5565b905092959194509250565b6001600160a01b0391909116815260200190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b901515815260200190565b6000602080835283518082850152825b81811015611812578581018301518582016040015282016117f6565b818111156118235783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526022908201527f526563697069656e742065786365656473206d61782077616c6c65742073697a604082015261329760f11b606082015260800190565b60208082526028908201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546040820152673c20b6b7bab73a1760c11b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206040820152687468616e207a65726f60b81b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526018908201527f54726164696e67206e6f742079657420656e61626c65642e0000000000000000604082015260600190565b90815260200190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b81811015611b9c5784516001600160a01b031683529383019391830191600101611b77565b50506001600160a01b03969096166060850152505050608001529392505050565b60ff91909116815260200190565b60ff92831681529116602082015260400190565b60008219821115611bf257611bf2611cd6565b500190565b600060ff821660ff84168060ff03821115611c1457611c14611cd6565b019392505050565b600082611c3757634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615611c5657611c56611cd6565b500290565b600060ff821660ff84168160ff0481118215151615611c7c57611c7c611cd6565b029392505050565b600082821015611c9657611c96611cd6565b500390565b600281046001821680611caf57607f821691505b60208210811415611cd057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114611d0157600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212202ae2c9e574b0a474824c8f670a8e7d0e89db2d6f78228a8e0f36a81086e9b3d964736f6c63430008010033
Deployed Bytecode
0x60806040526004361061014f5760003560e01c806370a08231116100b65780639e6c75291161006f5780639e6c752914610371578063a9059cbb14610391578063dd62ed3e146103b1578063f0f165af146103d1578063f2fde38b146103f1578063f6831bf21461041157610156565b806370a08231146102e8578063715018a6146103085780637d1db4a51461031d5780638da5cb5b146103325780638f9a55c01461034757806395d89b411461035c57610156565b80632d4103d6116101085780632d4103d61461023a578063313ce5671461025c5780633a17304a1461027e578063470624021461029e57806349bd5a5e146102b35780636e477861146102c857610156565b806306fdde031461015b578063095ea7b3146101865780631694505e146101b357806318160ddd146101d557806323b872dd146101f75780632b14ca561461021757610156565b3661015657005b600080fd5b34801561016757600080fd5b50610170610431565b60405161017d91906117e6565b60405180910390f35b34801561019257600080fd5b506101a66101a1366004611676565b6104c3565b60405161017d91906117db565b3480156101bf57600080fd5b506101c86104e1565b60405161017d919061178c565b3480156101e157600080fd5b506101ea610505565b60405161017d9190611b44565b34801561020357600080fd5b506101a6610212366004611636565b61050b565b34801561022357600080fd5b5061022c610592565b60405161017d929190611bcb565b34801561024657600080fd5b5061025a6102553660046116a1565b6105a4565b005b34801561026857600080fd5b50610271610614565b60405161017d9190611bbd565b34801561028a57600080fd5b5061025a610299366004611739565b61061d565b3480156102aa57600080fd5b5061022c610694565b3480156102bf57600080fd5b506101c86106a6565b3480156102d457600080fd5b5061025a6102e3366004611707565b6106ca565b3480156102f457600080fd5b506101ea6103033660046115c6565b610722565b34801561031457600080fd5b5061025a610741565b34801561032957600080fd5b506101ea6107c0565b34801561033e57600080fd5b506101c86107c6565b34801561035357600080fd5b506101ea6107d5565b34801561036857600080fd5b506101706107db565b34801561037d57600080fd5b5061025a61038c3660046116c2565b6107ea565b34801561039d57600080fd5b506101a66103ac366004611676565b610846565b3480156103bd57600080fd5b506101ea6103cc3660046115fe565b61085a565b3480156103dd57600080fd5b5061025a6103ec3660046116c2565b610885565b3480156103fd57600080fd5b5061025a61040c3660046115c6565b6108bf565b34801561041d57600080fd5b5061025a61042c366004611707565b610975565b60606008805461044090611c9b565b80601f016020809104026020016040519081016040528092919081815260200182805461046c90611c9b565b80156104b95780601f1061048e576101008083540402835291602001916104b9565b820191906000526020600020905b81548152906001019060200180831161049c57829003601f168201915b5050505050905090565b60006104d76104d0610a5b565b8484610a5f565b5060015b92915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b60065490565b6000610518848484610b13565b61058884610524610a5b565b61058385604051806060016040528060288152602001611d05602891396001600160a01b038a16600090815260036020526040812090610562610a5b565b6001600160a01b031681526020810191909152604001600020549190610dc1565b610a5f565b5060019392505050565b600c5460ff8082169161010090041682565b6105ac610a5b565b6000546001600160a01b039081169116146105e25760405162461bcd60e51b81526004016105d990611a06565b60405180910390fd5b6013805460ff1916831515179081905560ff1680156106015750601254155b15610610574360125560118190555b5050565b600a5460ff1690565b610625610a5b565b6000546001600160a01b039081169116146106525760405162461bcd60e51b81526004016105d990611a06565b600b805460ff95861660ff1995871661010090810261ff001993841617871691909117909255600c805494871693909616909102921691909117909116179055565b600b5460ff8082169161010090041682565b7f00000000000000000000000008e787ae047db51c9648b940dca00cc31fc1bb8781565b6106d2610a5b565b6000546001600160a01b039081169116146106ff5760405162461bcd60e51b81526004016105d990611a06565b600b805461ff00191661010060ff938416021760ff191692909116919091179055565b6001600160a01b0381166000908152600260205260409020545b919050565b610749610a5b565b6000546001600160a01b039081169116146107765760405162461bcd60e51b81526004016105d990611a06565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600e5481565b6000546001600160a01b031690565b60105481565b60606009805461044090611c9b565b6107f2610a5b565b6000546001600160a01b0390811691161461081f5760405162461bcd60e51b81526004016105d990611a06565b6108406103e861083a83600654610a1690919063ffffffff16565b906109cd565b60105550565b60006104d7610853610a5b565b8484610b13565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b61088d610a5b565b6000546001600160a01b039081169116146108ba5760405162461bcd60e51b81526004016105d990611a06565b600f55565b6108c7610a5b565b6000546001600160a01b039081169116146108f45760405162461bcd60e51b81526004016105d990611a06565b6001600160a01b03811661091a5760405162461bcd60e51b81526004016105d99061187c565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b61097d610a5b565b6000546001600160a01b039081169116146109aa5760405162461bcd60e51b81526004016105d990611a06565b600c805461ff00191661010060ff938416021760ff191692909116919091179055565b6000610a0f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610dfb565b9392505050565b600082610a25575060006104db565b6000610a318385611c3c565b905082610a3e8583611c1c565b14610a0f5760405162461bcd60e51b81526004016105d9906119c5565b3390565b6001600160a01b038316610a855760405162461bcd60e51b81526004016105d990611ac9565b6001600160a01b038216610aab5760405162461bcd60e51b81526004016105d9906118c2565b6001600160a01b0380841660008181526003602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610b06908590611b44565b60405180910390a3505050565b6001600160a01b038316610b395760405162461bcd60e51b81526004016105d990611a84565b6001600160a01b038216610b5f5760405162461bcd60e51b81526004016105d990611839565b60008111610b7f5760405162461bcd60e51b81526004016105d990611a3b565b610b876107c6565b6001600160a01b0316836001600160a01b031614158015610bc15750610bab6107c6565b6001600160a01b0316826001600160a01b031614155b15610be85760135460ff16610be85760405162461bcd60e51b81526004016105d990611b0d565b6000610bf330610722565b9050600e548110610c035750600e545b600f5481108015908190610c205750600d5462010000900460ff16155b8015610c5e57507f00000000000000000000000008e787ae047db51c9648b940dca00cc31fc1bb876001600160a01b0316856001600160a01b031614155b8015610c735750600d546301000000900460ff165b15610c8657600f549150610c8682610e29565b6001600160a01b03851660009081526004602052604090205460019060ff1680610cc857506001600160a01b03851660009081526004602052604090205460ff165b15610cd1575060005b8015610dad576001600160a01b03861660009081526005602052604090205460ff16158015610d1957506001600160a01b03851660009081526005602052604090205460ff16155b15610dad57600e54841115610d405760405162461bcd60e51b81526004016105d99061197d565b7f00000000000000000000000008e787ae047db51c9648b940dca00cc31fc1bb876001600160a01b0316856001600160a01b031614610dad57601054610d8586610722565b610d8f9086611bdf565b1115610dad5760405162461bcd60e51b81526004016105d99061193b565b610db986868684610fe2565b505050505050565b60008184841115610de55760405162461bcd60e51b81526004016105d991906117e6565b506000610df28486611c84565b95945050505050565b60008183610e1c5760405162461bcd60e51b81526004016105d991906117e6565b506000610df28486611c1c565b600d805462ff0000191662010000179055600c54600b5460009161010080820460ff90811693918204811692610e63929082169116611bf7565b610e6d9190611bf7565b610e779190611bf7565b610e82906002611c5b565b600c54600b5460ff92831693506000928492610ea2929082169116611bf7565b610eaf9060ff1685611c3c565b610eb99190611c1c565b90506000610ec78285611c84565b905047610ed38261108d565b6000610edf8247611c84565b600c54600b54919250600091610efb9160ff9081169116611bf7565b610f089060ff1687611c84565b610f129083611c1c565b600c54600b54919250600091610f2e9160ff9081169116611bf7565b610f3b9060ff1683611c3c565b90508015610f4d57610f4d8682611270565b600c54600b54600091610f6f9160ff6101009283900481169290910416611bf7565b60ff16610f7d846002611c3c565b610f879190611c3c565b90508015610fcb576007546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015610fc9573d6000803e3d6000fd5b505b5050600d805462ff00001916905550505050505050565b801561107457610ff061134d565b7f00000000000000000000000008e787ae047db51c9648b940dca00cc31fc1bb876001600160a01b0316846001600160a01b031614156110325761103261135a565b7f00000000000000000000000008e787ae047db51c9648b940dca00cc31fc1bb876001600160a01b0316836001600160a01b0316141561107457611074611387565b61107f8484846113b4565b61108761134d565b50505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106110d057634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561114957600080fd5b505afa15801561115d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061118191906115e2565b816001815181106111a257634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250506111ed307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84610a5f565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790611242908590600090869030904290600401611b4d565b600060405180830381600087803b15801561125c57600080fd5b505af1158015610db9573d6000803e3d6000fd5b61129b307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84610a5f565b60405163f305d71960e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063f305d7199083906112f490309087906000908190849042906004016117a0565b6060604051808303818588803b15801561130d57600080fd5b505af1158015611321573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061134691906116da565b5050505050565b600d805461ffff19169055565b600b54600d805461010080840460ff90811690910261ff001960ff19909316919094161716919091179055565b600c54600d805461010080840460ff90811690910261ff001960ff19909316919094161716919091179055565b60008060006113c28461149a565b6001600160a01b03891660009081526002602052604090205492955090935091506113ed90856114dc565b6001600160a01b03808816600090815260026020526040808220939093559087168152205461141c908461151e565b6001600160a01b03861660009081526002602052604090205561143e8261154d565b6114478161154d565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161148a9190611b44565b60405180910390a3505050505050565b6000806000806114a98561157a565b905060006114b686611595565b905060006114ce826114c889866114dc565b906114dc565b979296509094509092505050565b6000610a0f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610dc1565b60008061152b8385611bdf565b905083811015610a0f5760405162461bcd60e51b81526004016105d990611904565b30600090815260026020526040902054611567908261151e565b3060009081526002602052604090205550565b600d546000906104db9060649061083a90859060ff16610a16565b600d546000906104db9060649061083a908590610100900460ff16610a16565b803560ff8116811461073c57600080fd5b6000602082840312156115d7578081fd5b8135610a0f81611cec565b6000602082840312156115f3578081fd5b8151610a0f81611cec565b60008060408385031215611610578081fd5b823561161b81611cec565b9150602083013561162b81611cec565b809150509250929050565b60008060006060848603121561164a578081fd5b833561165581611cec565b9250602084013561166581611cec565b929592945050506040919091013590565b60008060408385031215611688578182fd5b823561169381611cec565b946020939093013593505050565b600080604083850312156116b3578182fd5b82358015158114611693578283fd5b6000602082840312156116d3578081fd5b5035919050565b6000806000606084860312156116ee578283fd5b8351925060208401519150604084015190509250925092565b60008060408385031215611719578182fd5b611722836115b5565b9150611730602084016115b5565b90509250929050565b6000806000806080858703121561174e578081fd5b611757856115b5565b9350611765602086016115b5565b9250611773604086016115b5565b9150611781606086016115b5565b905092959194509250565b6001600160a01b0391909116815260200190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b901515815260200190565b6000602080835283518082850152825b81811015611812578581018301518582016040015282016117f6565b818111156118235783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526022908201527f526563697069656e742065786365656473206d61782077616c6c65742073697a604082015261329760f11b606082015260800190565b60208082526028908201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546040820152673c20b6b7bab73a1760c11b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206040820152687468616e207a65726f60b81b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526018908201527f54726164696e67206e6f742079657420656e61626c65642e0000000000000000604082015260600190565b90815260200190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b81811015611b9c5784516001600160a01b031683529383019391830191600101611b77565b50506001600160a01b03969096166060850152505050608001529392505050565b60ff91909116815260200190565b60ff92831681529116602082015260400190565b60008219821115611bf257611bf2611cd6565b500190565b600060ff821660ff84168060ff03821115611c1457611c14611cd6565b019392505050565b600082611c3757634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615611c5657611c56611cd6565b500290565b600060ff821660ff84168160ff0481118215151615611c7c57611c7c611cd6565b029392505050565b600082821015611c9657611c96611cd6565b500390565b600281046001821680611caf57607f821691505b60208210811415611cd057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114611d0157600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212202ae2c9e574b0a474824c8f670a8e7d0e89db2d6f78228a8e0f36a81086e9b3d964736f6c63430008010033
Deployed Bytecode Sourcemap
24620:13450:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27472:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28376:193;;;;;;;;;;-1:-1:-1;28376:193:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;25552:51::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;27749:95::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;28577:446::-;;;;;;;;;;-1:-1:-1;28577:446:0;;;;;:::i;:::-;;:::i;25451:22::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;37816:251::-;;;;;;;;;;-1:-1:-1;37816:251:0;;;;;:::i;:::-;;:::i;:::-;;27658:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;29418:357::-;;;;;;;;;;-1:-1:-1;29418:357:0;;;;;:::i;:::-;;:::i;25424:20::-;;;;;;;;;;;;;:::i;25610:38::-;;;;;;;;;;;;;:::i;29227:183::-;;;;;;;;;;-1:-1:-1;29227:183:0;;;;;:::i;:::-;;:::i;27852:117::-;;;;;;;;;;-1:-1:-1;27852:117:0;;;;;:::i;:::-;;:::i;14684:148::-;;;;;;;;;;;;;:::i;25727:57::-;;;;;;;;;;;;;:::i;14042:79::-;;;;;;;;;;;;;:::i;25872:57::-;;;;;;;;;;;;;:::i;27563:87::-;;;;;;;;;;;;;:::i;29933:165::-;;;;;;;;;;-1:-1:-1;29933:165:0;;;;;:::i;:::-;;:::i;27977:199::-;;;;;;;;;;-1:-1:-1;27977:199:0;;;;;:::i;:::-;;:::i;28184:184::-;;;;;;;;;;-1:-1:-1;28184:184:0;;;;;:::i;:::-;;:::i;29783:140::-;;;;;;;;;;-1:-1:-1;29783:140:0;;;;;:::i;:::-;;:::i;14987:281::-;;;;;;;;;;-1:-1:-1;14987:281:0;;;;;:::i;:::-;;:::i;29033:186::-;;;;;;;;;;-1:-1:-1;29033:186:0;;;;;:::i;:::-;;:::i;27472:83::-;27509:13;27542:5;27535:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27472:83;:::o;28376:193::-;28478:4;28500:39;28509:12;:10;:12::i;:::-;28523:7;28532:6;28500:8;:39::i;:::-;-1:-1:-1;28557:4:0;28376:193;;;;;:::o;25552:51::-;;;:::o;27749:95::-;27829:7;;27749:95;:::o;28577:446::-;28709:4;28726:36;28736:6;28744:9;28755:6;28726:9;:36::i;:::-;28773:220;28796:6;28817:12;:10;:12::i;:::-;28844:138;28900:6;28844:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28844:19:0;;;;;;:11;:19;;;;;;28864:12;:10;:12::i;:::-;-1:-1:-1;;;;;28844:33:0;;;;;;;;;;;;-1:-1:-1;28844:33:0;;;:138;:37;:138::i;:::-;28773:8;:220::i;:::-;-1:-1:-1;29011:4:0;28577:446;;;;;:::o;25451:22::-;;;;;;;;;;;;;:::o;37816:251::-;14264:12;:10;:12::i;:::-;14254:6;;-1:-1:-1;;;;;14254:6:0;;;:22;;;14246:67;;;;-1:-1:-1;;;14246:67:0;;;;;;;:::i;:::-;;;;;;;;;37903:11:::1;:21:::0;;-1:-1:-1;;37903:21:0::1;::::0;::::1;;;::::0;;;;::::1;37938:11;:30:::0;::::1;;;-1:-1:-1::0;37953:10:0::1;::::0;:15;37938:30:::1;37935:125;;;37997:12;37984:10;:25:::0;38024:10:::1;:24:::0;;;37935:125:::1;37816:251:::0;;:::o;27658:83::-;27724:9;;;;27658:83;:::o;29418:357::-;14264:12;:10;:12::i;:::-;14254:6;;-1:-1:-1;;;;;14254:6:0;;;:22;;;14246:67;;;;-1:-1:-1;;;14246:67:0;;;;;;;:::i;:::-;29600:6:::1;:32:::0;;::::1;29643::::0;;::::1;-1:-1:-1::0;;29600:32:0;;::::1;;::::0;;::::1;-1:-1:-1::0;;29600:32:0;;::::1;;29643::::0;::::1;::::0;;;::::1;::::0;;;29688:7:::1;:34:::0;;29733;;::::1;29688::::0;;;::::1;::::0;;::::1;::::0;::::1;::::0;;;::::1;29733::::0;;::::1;;::::0;;29418:357::o;25424:20::-;;;;;;;;;;;;;:::o;25610:38::-;;;:::o;29227:183::-;14264:12;:10;:12::i;:::-;14254:6;;-1:-1:-1;;;;;14254:6:0;;;:22;;;14246:67;;;;-1:-1:-1;;;14246:67:0;;;;;;;:::i;:::-;29335:6:::1;:28:::0;;-1:-1:-1;;29335:28:0::1;;;::::0;;::::1;;;-1:-1:-1::0;;29374:28:0::1;::::0;;;::::1;::::0;;;::::1;::::0;;29227:183::o;27852:117::-;-1:-1:-1;;;;;27945:16:0;;27918:7;27945:16;;;:7;:16;;;;;;27852:117;;;;:::o;14684:148::-;14264:12;:10;:12::i;:::-;14254:6;;-1:-1:-1;;;;;14254:6:0;;;:22;;;14246:67;;;;-1:-1:-1;;;14246:67:0;;;;;;;:::i;:::-;14791:1:::1;14775:6:::0;;14754:40:::1;::::0;-1:-1:-1;;;;;14775:6:0;;::::1;::::0;14754:40:::1;::::0;14791:1;;14754:40:::1;14822:1;14805:19:::0;;-1:-1:-1;;;;;;14805:19:0::1;::::0;;14684:148::o;25727:57::-;;;;:::o;14042:79::-;14080:7;14107:6;-1:-1:-1;;;;;14107:6:0;14042:79;:::o;25872:57::-;;;;:::o;27563:87::-;27602:13;27635:7;27628:14;;;;;:::i;29933:165::-;14264:12;:10;:12::i;:::-;14254:6;;-1:-1:-1;;;;;14254:6:0;;;:22;;;14246:67;;;;-1:-1:-1;;;14246:67:0;;;;;;;:::i;:::-;30053:37:::1;30084:5;30053:26;30065:13;30053:7;;:11;;:26;;;;:::i;:::-;:30:::0;::::1;:37::i;:::-;30036:14;:54:::0;-1:-1:-1;29933:165:0:o;27977:199::-;28082:4;28104:42;28114:12;:10;:12::i;:::-;28128:9;28139:6;28104:9;:42::i;28184:184::-;-1:-1:-1;;;;;28333:18:0;;;28301:7;28333:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;28184:184::o;29783:140::-;14264:12;:10;:12::i;:::-;14254:6;;-1:-1:-1;;;;;14254:6:0;;;:22;;;14246:67;;;;-1:-1:-1;;;14246:67:0;;;;;;;:::i;:::-;29874:29:::1;:41:::0;29783:140::o;14987:281::-;14264:12;:10;:12::i;:::-;14254:6;;-1:-1:-1;;;;;14254:6:0;;;:22;;;14246:67;;;;-1:-1:-1;;;14246:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15090:22:0;::::1;15068:110;;;;-1:-1:-1::0;;;15068:110:0::1;;;;;;;:::i;:::-;15215:6;::::0;;15194:38:::1;::::0;-1:-1:-1;;;;;15194:38:0;;::::1;::::0;15215:6;::::1;::::0;15194:38:::1;::::0;::::1;15243:6;:17:::0;;-1:-1:-1;;;;;;15243:17:0::1;-1:-1:-1::0;;;;;15243:17:0;;;::::1;::::0;;;::::1;::::0;;14987:281::o;29033:186::-;14264:12;:10;:12::i;:::-;14254:6;;-1:-1:-1;;;;;14254:6:0;;;:22;;;14246:67;;;;-1:-1:-1;;;14246:67:0;;;;;;;:::i;:::-;29142:7:::1;:29:::0;;-1:-1:-1;;29142:29:0::1;;;::::0;;::::1;;;-1:-1:-1::0;;29182:29:0::1;::::0;;;::::1;::::0;;;::::1;::::0;;29033:186::o;4530:132::-;4588:7;4615:39;4619:1;4622;4615:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;4608:46;4530:132;-1:-1:-1;;;4530:132:0:o;4035:252::-;4093:7;4119:6;4115:47;;-1:-1:-1;4149:1:0;4142:8;;4115:47;4174:9;4186:5;4190:1;4186;:5;:::i;:::-;4174:17;-1:-1:-1;4219:1:0;4210:5;4214:1;4174:17;4210:5;:::i;:::-;:10;4202:56;;;;-1:-1:-1;;;4202:56:0;;;;;;;:::i;6790:115::-;6886:10;6790:115;:::o;31674:371::-;-1:-1:-1;;;;;31801:19:0;;31793:68;;;;-1:-1:-1;;;31793:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31880:21:0;;31872:68;;;;-1:-1:-1;;;31872:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31953:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;;:36;;;32005:32;;;;;31983:6;;32005:32;:::i;:::-;;;;;;;;31674:371;;;:::o;32053:2331::-;-1:-1:-1;;;;;32175:18:0;;32167:68;;;;-1:-1:-1;;;32167:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32254:16:0;;32246:64;;;;-1:-1:-1;;;32246:64:0;;;;;;;:::i;:::-;32338:1;32329:6;:10;32321:64;;;;-1:-1:-1;;;32321:64:0;;;;;;;:::i;:::-;32419:7;:5;:7::i;:::-;-1:-1:-1;;;;;32411:15:0;:4;-1:-1:-1;;;;;32411:15:0;;;:32;;;;;32436:7;:5;:7::i;:::-;-1:-1:-1;;;;;32430:13:0;:2;-1:-1:-1;;;;;32430:13:0;;;32411:32;32406:88;;;32454:11;;;;32446:48;;;;-1:-1:-1;;;32446:48:0;;;;;;;:::i;:::-;32829:28;32860:24;32878:4;32860:9;:24::i;:::-;32829:55;;32925:12;;32901:20;:36;32897:104;;-1:-1:-1;32977:12:0;;32897:104;33077:29;;33040:66;;;;;;;33135:53;;-1:-1:-1;33172:16:0;;;;;;;33171:17;33135:53;:91;;;;;33213:13;-1:-1:-1;;;;;33205:21:0;:4;-1:-1:-1;;;;;33205:21:0;;;33135:91;:129;;;;-1:-1:-1;33243:21:0;;;;;;;33135:129;33117:318;;;33314:29;;33291:52;;33387:36;33402:20;33387:14;:36::i;:::-;-1:-1:-1;;;;;33628:24:0;;33508:12;33628:24;;;:18;:24;;;;;;33523:4;;33628:24;;;:50;;-1:-1:-1;;;;;;33656:22:0;;;;;;:18;:22;;;;;;;;33628:50;33624:98;;;-1:-1:-1;33705:5:0;33624:98;33736:7;33732:536;;;-1:-1:-1;;;;;33765:26:0;;;;;;:20;:26;;;;;;;;33764:27;:56;;;;-1:-1:-1;;;;;;33796:24:0;;;;;;:20;:24;;;;;;;;33795:25;33764:56;33760:497;;;33881:12;;33871:6;:22;;33841:136;;;;-1:-1:-1;;;33841:136:0;;;;;;;:::i;:::-;34006:13;-1:-1:-1;;;;;34000:19:0;:2;-1:-1:-1;;;;;34000:19:0;;33996:228;;34104:14;;34087:13;34097:2;34087:9;:13::i;:::-;34078:22;;:6;:22;:::i;:::-;:40;;34044:160;;;;-1:-1:-1;;;34044:160:0;;;;;;;:::i;:::-;34335:41;34350:4;34356:2;34360:6;34368:7;34335:14;:41::i;:::-;32053:2331;;;;;;:::o;3550:226::-;3670:7;3706:12;3698:6;;;;3690:29;;;;-1:-1:-1;;;3690:29:0;;;;;;;;:::i;:::-;-1:-1:-1;3730:9:0;3742:5;3746:1;3742;:5;:::i;:::-;3730:17;3550:226;-1:-1:-1;;;;;3550:226:0:o;5158:312::-;5278:7;5313:12;5306:5;5298:28;;;;-1:-1:-1;;;5298:28:0;;;;;;;;:::i;:::-;-1:-1:-1;5337:9:0;5349:5;5353:1;5349;:5;:::i;34392:1195::-;26231:16;:23;;-1:-1:-1;;26231:23:0;;;;;34595:7:::1;:17:::0;34576:6:::1;:16:::0;26231:23;;;34595:17;;::::1;26231:23:::0;34595:17;;::::1;::::0;34576:16;;::::1;::::0;::::1;::::0;34537:36:::1;::::0;34556:17;;::::1;::::0;34537:16:::1;:36;:::i;:::-;:55;;;;:::i;:::-;:75;;;;:::i;:::-;34536:81;::::0;34616:1:::1;34536:81;:::i;:::-;34693:7;:17:::0;34674:6:::1;:16:::0;34514:103:::1;::::0;;::::1;::::0;-1:-1:-1;34628:32:0::1;::::0;34514:103;;34674:36:::1;::::0;34693:17;;::::1;::::0;34674:16:::1;:36;:::i;:::-;34664:47;::::0;::::1;;:6:::0;:47:::1;:::i;:::-;34663:63;;;;:::i;:::-;34628:98:::0;-1:-1:-1;34737:14:0::1;34754:33;34628:98:::0;34754:6;:33:::1;:::i;:::-;34737:50:::0;-1:-1:-1;34825:21:0::1;34859:24;34737:50:::0;34859:16:::1;:24::i;:::-;34896:20;34919:38;34943:14:::0;34919:21:::1;:38;:::i;:::-;35040:7;:17:::0;35021:6:::1;:16:::0;34896:61;;-1:-1:-1;34968:19:0::1;::::0;35021:36:::1;::::0;35040:17:::1;::::0;;::::1;::::0;35021:16:::1;:36;:::i;:::-;35006:52;::::0;::::1;;:11:::0;:52:::1;:::i;:::-;34990:69;::::0;:12;:69:::1;:::i;:::-;35136:7;:17:::0;35117:6:::1;:16:::0;34968:91;;-1:-1:-1;35070:29:0::1;::::0;35117:36:::1;::::0;35136:17:::1;::::0;;::::1;::::0;35117:16:::1;:36;:::i;:::-;35102:52;::::0;::::1;;:11:::0;:52:::1;:::i;:::-;35070:84:::0;-1:-1:-1;35171:25:0;;35167:160:::1;;35254:61;35267:24;35293:21;35254:12;:61::i;:::-;35434:7;:17:::0;35415:6:::1;:16:::0;35373:20:::1;::::0;35415:36:::1;::::0;35434:17:::1;;::::0;;;::::1;::::0;::::1;::::0;35415:16;;::::1;;:36;:::i;:::-;35396:56;;:15;:11:::0;35410:1:::1;35396:15;:::i;:::-;:56;;;;:::i;:::-;35373:79:::0;-1:-1:-1;35478:16:0;;35474:98:::1;;35519:17;::::0;35511:49:::1;::::0;-1:-1:-1;;;;;35519:17:0;;::::1;::::0;35511:49;::::1;;;::::0;35547:12;;35519:17:::1;35511:49:::0;35519:17;35511:49;35547:12;35519:17;35511:49;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;35474:98;-1:-1:-1::0;;26277:16:0;:24;;-1:-1:-1;;26277:24:0;;;-1:-1:-1;;;;;;;34392:1195:0:o;36792:472::-;36947:7;36943:230;;;36971:14;:12;:14::i;:::-;37014:13;-1:-1:-1;;;;;37004:23:0;:6;-1:-1:-1;;;;;37004:23:0;;37000:72;;;37048:8;:6;:8::i;:::-;37103:13;-1:-1:-1;;;;;37090:26:0;:9;-1:-1:-1;;;;;37090:26:0;;37086:76;;;37137:9;:7;:9::i;:::-;37185:44;37203:6;37211:9;37222:6;37185:17;:44::i;:::-;37242:14;:12;:14::i;:::-;36792:472;;;;:::o;35595:589::-;35745:16;;;35759:1;35745:16;;;;;;;;35721:21;;35745:16;;;;;;;;;;-1:-1:-1;35745:16:0;35721:40;;35790:4;35772;35777:1;35772:7;;;;;;-1:-1:-1;;;35772:7:0;;;;;;;;;;;;;;:23;-1:-1:-1;;;;;35772:23:0;;;-1:-1:-1;;;;;35772:23:0;;;;;35816:15;-1:-1:-1;;;;;35816:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35806:4;35811:1;35806:7;;;;;;-1:-1:-1;;;35806:7:0;;;;;;;;;;;;;;:32;-1:-1:-1;;;;;35806:32:0;;;-1:-1:-1;;;;;35806:32:0;;;;;35851:62;35868:4;35883:15;35901:11;35851:8;:62::i;:::-;35952:224;;-1:-1:-1;;;35952:224:0;;-1:-1:-1;;;;;35952:15:0;:66;;;;:224;;36033:11;;36059:1;;36103:4;;36130;;36150:15;;35952:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36192:519;36340:62;36357:4;36372:15;36390:11;36340:8;:62::i;:::-;36445:258;;-1:-1:-1;;;36445:258:0;;-1:-1:-1;;;;;36445:15:0;:31;;;;36484:9;;36445:258;;36517:4;;36537:11;;36563:1;;;;36517:4;;36677:15;;36445:258;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;36192:519;;:::o;31286:103::-;31329:13;:17;;-1:-1:-1;;31357:17:0;;;31286:103::o;31397:128::-;31450:6;:16;31434:13;:32;;31450:16;31493;;;31450;31493;;;31477:32;;;-1:-1:-1;;;;31434:32:0;;;31450:16;;;;31434:32;31477;;;;;;;31397:128::o;31533:131::-;31587:7;:17;31571:13;:33;;31587:17;31631;;;31587;31631;;;31615:33;;;-1:-1:-1;;;;31571:33:0;;;31587:17;;;;31571:33;31615;;;;;;;31533:131::o;37272:536::-;37419:23;37457:18;37490:15;37519:20;37531:7;37519:11;:20::i;:::-;-1:-1:-1;;;;;37570:15:0;;;;;;:7;:15;;;;;;37404:135;;-1:-1:-1;37404:135:0;;-1:-1:-1;37404:135:0;-1:-1:-1;37570:28:0;;37590:7;37570:19;:28::i;:::-;-1:-1:-1;;;;;37552:15:0;;;;;;;:7;:15;;;;;;:46;;;;37630:18;;;;;;;:39;;37653:15;37630:22;:39::i;:::-;-1:-1:-1;;;;;37609:18:0;;;;;;:7;:18;;;;;:60;37680:26;37695:10;37680:14;:26::i;:::-;37717:23;37732:7;37717:14;:23::i;:::-;37773:9;-1:-1:-1;;;;;37756:44:0;37765:6;-1:-1:-1;;;;;37756:44:0;;37784:15;37756:44;;;;;;:::i;:::-;;;;;;;;37272:536;;;;;;:::o;30202:429::-;30303:7;30325;30347;30382:18;30403:30;30425:7;30403:21;:30::i;:::-;30382:51;;30444:15;30462:30;30484:7;30462:21;:30::i;:::-;30444:48;-1:-1:-1;30503:23:0;30529:36;30444:48;30529:23;:7;30541:10;30529:11;:23::i;:::-;:27;;:36::i;:::-;30503:62;30603:10;;-1:-1:-1;30615:7:0;;-1:-1:-1;30202:429:0;;-1:-1:-1;;;30202:429:0:o;3111:136::-;3169:7;3196:43;3200:1;3203;3196:43;;;;;;;;;;;;;;;;;:3;:43::i;2647:181::-;2705:7;;2737:5;2741:1;2737;:5;:::i;:::-;2725:17;;2766:1;2761;:6;;2753:46;;;;-1:-1:-1;;;2753:46:0;;;;;;;:::i;30639:134::-;30743:4;30727:22;;;;:7;:22;;;;;;:38;;30754:10;30727:26;:38::i;:::-;30718:4;30702:22;;;;:7;:22;;;;;:63;-1:-1:-1;30639:134:0:o;30917:174::-;31058:13;;31014:7;;31046:37;;31077:5;;31046:26;;:7;;31058:13;;31046:11;:26::i;31099:174::-;31240:13;;31196:7;;31228:37;;31259:5;;31228:26;;:7;;31240:13;;;;;31228:11;:26::i;14:158:1:-;82:20;;142:4;131:16;;121:27;;111:2;;162:1;159;152:12;177:259;;289:2;277:9;268:7;264:23;260:32;257:2;;;310:6;302;295:22;257:2;354:9;341:23;373:33;400:5;373:33;:::i;441:263::-;;564:2;552:9;543:7;539:23;535:32;532:2;;;585:6;577;570:22;532:2;622:9;616:16;641:33;668:5;641:33;:::i;709:402::-;;;838:2;826:9;817:7;813:23;809:32;806:2;;;859:6;851;844:22;806:2;903:9;890:23;922:33;949:5;922:33;:::i;:::-;974:5;-1:-1:-1;1031:2:1;1016:18;;1003:32;1044:35;1003:32;1044:35;:::i;:::-;1098:7;1088:17;;;796:315;;;;;:::o;1116:470::-;;;;1262:2;1250:9;1241:7;1237:23;1233:32;1230:2;;;1283:6;1275;1268:22;1230:2;1327:9;1314:23;1346:33;1373:5;1346:33;:::i;:::-;1398:5;-1:-1:-1;1455:2:1;1440:18;;1427:32;1468:35;1427:32;1468:35;:::i;:::-;1220:366;;1522:7;;-1:-1:-1;;;1576:2:1;1561:18;;;;1548:32;;1220:366::o;1591:327::-;;;1720:2;1708:9;1699:7;1695:23;1691:32;1688:2;;;1741:6;1733;1726:22;1688:2;1785:9;1772:23;1804:33;1831:5;1804:33;:::i;:::-;1856:5;1908:2;1893:18;;;;1880:32;;-1:-1:-1;;;1678:240:1:o;1923:361::-;;;2049:2;2037:9;2028:7;2024:23;2020:32;2017:2;;;2070:6;2062;2055:22;2017:2;2114:9;2101:23;2167:5;2160:13;2153:21;2146:5;2143:32;2133:2;;2194:6;2186;2179:22;2289:190;;2401:2;2389:9;2380:7;2376:23;2372:32;2369:2;;;2422:6;2414;2407:22;2369:2;-1:-1:-1;2450:23:1;;2359:120;-1:-1:-1;2359:120:1:o;2484:316::-;;;;2641:2;2629:9;2620:7;2616:23;2612:32;2609:2;;;2662:6;2654;2647:22;2609:2;2696:9;2690:16;2680:26;;2746:2;2735:9;2731:18;2725:25;2715:35;;2790:2;2779:9;2775:18;2769:25;2759:35;;2599:201;;;;;:::o;2805:266::-;;;2930:2;2918:9;2909:7;2905:23;2901:32;2898:2;;;2951:6;2943;2936:22;2898:2;2979:29;2998:9;2979:29;:::i;:::-;2969:39;;3027:38;3061:2;3050:9;3046:18;3027:38;:::i;:::-;3017:48;;2888:183;;;;;:::o;3076:411::-;;;;;3231:3;3219:9;3210:7;3206:23;3202:33;3199:2;;;3253:6;3245;3238:22;3199:2;3281:29;3300:9;3281:29;:::i;:::-;3271:39;;3329:38;3363:2;3352:9;3348:18;3329:38;:::i;:::-;3319:48;;3386:38;3420:2;3409:9;3405:18;3386:38;:::i;:::-;3376:48;;3443:38;3477:2;3466:9;3462:18;3443:38;:::i;:::-;3433:48;;3189:298;;;;;;;:::o;3492:203::-;-1:-1:-1;;;;;3656:32:1;;;;3638:51;;3626:2;3611:18;;3593:102::o;3700:607::-;-1:-1:-1;;;;;4059:15:1;;;4041:34;;4106:2;4091:18;;4084:34;;;;4149:2;4134:18;;4127:34;;;;4192:2;4177:18;;4170:34;;;;4241:15;;;4235:3;4220:19;;4213:44;4021:3;4273:19;;4266:35;;;;3990:3;3975:19;;3957:350::o;4312:187::-;4477:14;;4470:22;4452:41;;4440:2;4425:18;;4407:92::o;4739:603::-;;4880:2;4909;4898:9;4891:21;4941:6;4935:13;4984:6;4979:2;4968:9;4964:18;4957:34;5009:4;5022:140;5036:6;5033:1;5030:13;5022:140;;;5131:14;;;5127:23;;5121:30;5097:17;;;5116:2;5093:26;5086:66;5051:10;;5022:140;;;5180:6;5177:1;5174:13;5171:2;;;5250:4;5245:2;5236:6;5225:9;5221:22;5217:31;5210:45;5171:2;-1:-1:-1;5326:2:1;5305:15;-1:-1:-1;;5301:29:1;5286:45;;;;5333:2;5282:54;;4860:482;-1:-1:-1;;;4860:482:1:o;5347:399::-;5549:2;5531:21;;;5588:2;5568:18;;;5561:30;5627:34;5622:2;5607:18;;5600:62;-1:-1:-1;;;5693:2:1;5678:18;;5671:33;5736:3;5721:19;;5521:225::o;5751:402::-;5953:2;5935:21;;;5992:2;5972:18;;;5965:30;6031:34;6026:2;6011:18;;6004:62;-1:-1:-1;;;6097:2:1;6082:18;;6075:36;6143:3;6128:19;;5925:228::o;6158:398::-;6360:2;6342:21;;;6399:2;6379:18;;;6372:30;6438:34;6433:2;6418:18;;6411:62;-1:-1:-1;;;6504:2:1;6489:18;;6482:32;6546:3;6531:19;;6332:224::o;6561:351::-;6763:2;6745:21;;;6802:2;6782:18;;;6775:30;6841:29;6836:2;6821:18;;6814:57;6903:2;6888:18;;6735:177::o;6917:398::-;7119:2;7101:21;;;7158:2;7138:18;;;7131:30;7197:34;7192:2;7177:18;;7170:62;-1:-1:-1;;;7263:2:1;7248:18;;7241:32;7305:3;7290:19;;7091:224::o;7320:404::-;7522:2;7504:21;;;7561:2;7541:18;;;7534:30;7600:34;7595:2;7580:18;;7573:62;-1:-1:-1;;;7666:2:1;7651:18;;7644:38;7714:3;7699:19;;7494:230::o;7729:397::-;7931:2;7913:21;;;7970:2;7950:18;;;7943:30;8009:34;8004:2;7989:18;;7982:62;-1:-1:-1;;;8075:2:1;8060:18;;8053:31;8116:3;8101:19;;7903:223::o;8131:356::-;8333:2;8315:21;;;8352:18;;;8345:30;8411:34;8406:2;8391:18;;8384:62;8478:2;8463:18;;8305:182::o;8492:405::-;8694:2;8676:21;;;8733:2;8713:18;;;8706:30;8772:34;8767:2;8752:18;;8745:62;-1:-1:-1;;;8838:2:1;8823:18;;8816:39;8887:3;8872:19;;8666:231::o;8902:401::-;9104:2;9086:21;;;9143:2;9123:18;;;9116:30;9182:34;9177:2;9162:18;;9155:62;-1:-1:-1;;;9248:2:1;9233:18;;9226:35;9293:3;9278:19;;9076:227::o;9308:400::-;9510:2;9492:21;;;9549:2;9529:18;;;9522:30;9588:34;9583:2;9568:18;;9561:62;-1:-1:-1;;;9654:2:1;9639:18;;9632:34;9698:3;9683:19;;9482:226::o;9713:348::-;9915:2;9897:21;;;9954:2;9934:18;;;9927:30;9993:26;9988:2;9973:18;;9966:54;10052:2;10037:18;;9887:174::o;10066:177::-;10212:25;;;10200:2;10185:18;;10167:76::o;10248:983::-;;10558:3;10547:9;10543:19;10589:6;10578:9;10571:25;10615:2;10653:6;10648:2;10637:9;10633:18;10626:34;10696:3;10691:2;10680:9;10676:18;10669:31;10720:6;10755;10749:13;10786:6;10778;10771:22;10824:3;10813:9;10809:19;10802:26;;10863:2;10855:6;10851:15;10837:29;;10884:4;10897:195;10911:6;10908:1;10905:13;10897:195;;;10976:13;;-1:-1:-1;;;;;10972:39:1;10960:52;;11067:15;;;;11032:12;;;;11008:1;10926:9;10897:195;;;-1:-1:-1;;;;;;;11148:32:1;;;;11143:2;11128:18;;11121:60;-1:-1:-1;;;11212:3:1;11197:19;11190:35;11109:3;10519:712;-1:-1:-1;;;10519:712:1:o;11236:184::-;11408:4;11396:17;;;;11378:36;;11366:2;11351:18;;11333:87::o;11425:262::-;11621:4;11609:17;;;11591:36;;11663:17;;11658:2;11643:18;;11636:45;11579:2;11564:18;;11546:141::o;11692:128::-;;11763:1;11759:6;11756:1;11753:13;11750:2;;;11769:18;;:::i;:::-;-1:-1:-1;11805:9:1;;11740:80::o;11825:204::-;;11899:4;11896:1;11892:12;11931:4;11928:1;11924:12;11966:3;11960:4;11956:14;11951:3;11948:23;11945:2;;;11974:18;;:::i;:::-;12010:13;;11871:158;-1:-1:-1;;;11871:158:1:o;12034:217::-;;12100:1;12090:2;;-1:-1:-1;;;12125:31:1;;12179:4;12176:1;12169:15;12207:4;12132:1;12197:15;12090:2;-1:-1:-1;12236:9:1;;12080:171::o;12256:168::-;;12362:1;12358;12354:6;12350:14;12347:1;12344:21;12339:1;12332:9;12325:17;12321:45;12318:2;;;12369:18;;:::i;:::-;-1:-1:-1;12409:9:1;;12308:116::o;12429:238::-;;12507:4;12504:1;12500:12;12539:4;12536:1;12532:12;12599:3;12593:4;12589:14;12584:3;12581:23;12574:3;12567:11;12560:19;12556:49;12553:2;;;12608:18;;:::i;:::-;12648:13;;12479:188;-1:-1:-1;;;12479:188:1:o;12672:125::-;;12740:1;12737;12734:8;12731:2;;;12745:18;;:::i;:::-;-1:-1:-1;12782:9:1;;12721:76::o;12802:380::-;12887:1;12877:12;;12934:1;12924:12;;;12945:2;;12999:4;12991:6;12987:17;12977:27;;12945:2;13052;13044:6;13041:14;13021:18;13018:38;13015:2;;;13098:10;13093:3;13089:20;13086:1;13079:31;13133:4;13130:1;13123:15;13161:4;13158:1;13151:15;13015:2;;12857:325;;;:::o;13187:127::-;13248:10;13243:3;13239:20;13236:1;13229:31;13279:4;13276:1;13269:15;13303:4;13300:1;13293:15;13319:133;-1:-1:-1;;;;;13396:31:1;;13386:42;;13376:2;;13442:1;13439;13432:12;13376:2;13366:86;:::o
Swarm Source
ipfs://2ae2c9e574b0a474824c8f670a8e7d0e89db2d6f78228a8e0f36a81086e9b3d9
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.