Token migration announcement. Mama Saitama Inu token contract has migrated to a new address.
ERC-20
Overview
Max Total Supply
100,000,000,000,000,000 MAMASAITAMA
Holders
103 (0.00%)
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
15,638,313,722,971.017032794 MAMASAITAMAValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
MamaSaitamaInu
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-01-27 */ //MAMASAITAMA.COM // SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.7; contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } } contract ERC20Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view virtual returns (address) { return _owner; } modifier onlyOwner() { require(owner() == _msgSender(), "ERC20Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "ERC20Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. library SafeMath { function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } interface IERC20 { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 { function factory() external pure returns (address); function WETH() external pure returns (address); function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } contract MamaSaitamaInu is Context, IERC20, ERC20Ownable { using SafeMath for uint256; string private constant _nomenclature = "Mama Saitama Inu"; string private constant _symbol = "MAMASAITAMA"; uint8 private constant _decimal = 9; mapping(address => uint256) private _rOwned; mapping(address => uint256) private _tOwned; mapping(address => mapping(address => uint256)) private _allowances; mapping(address => bool) private _isExcludedFromFee; mapping(address => bool) private _isExcluded; mapping(address => bool) private _isMaxWalletExclude; mapping (address => bool) private _isBot; mapping(address => bool) public boughtEarly; address dead = 0x000000000000000000000000000000000000dEaD; address[] private _excluded; address payable public marketingAddress; address payable public devAddress; IUniswapV2Router02 private uniV2Router; address private uniV2Pair; bool inSwapAndLiquify; bool private swapAndLiquifyEnabled = true; bool private _initateLiqTrans = true; bool private _buyLimits = false; bool private _maxWalletOn = false; uint256 public tradingActiveBlock = 0; uint256 public earlyBuyPenaltyEnd; uint256 private constant MAX = ~uint256(0); uint256 private constant _tTotal = 1e17 * 10**9; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; uint256 private _maxWalletSize = 1500000000000001 * 10**9; uint256 private minTokensBeforeSwap; uint256 private tokensForLiquidityToSwap; uint256 private tokensForMarketingToSwap; uint256 private tokensForDevToSwap; uint8 private _marTax = 1; // tax for marketing uint8 private _previousMarTax = _marTax; uint8 private _devTax = 1; // tax for development uint8 private _previousDevTax = _devTax; uint8 private _liqTax = 1; // tax for liquidity uint8 private _previousLiqTax = _liqTax; uint8 private _refTax = 2; //tax for reflections uint8 private _previousRefTax = _refTax; uint8 private _liqDiv = _marTax + _devTax + _liqTax; event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity); event UpdatedMarketingAddress(address marketing); event UpdatedDevAddress(address Dev); event BoughtEarly(address indexed sniper); event RemovedSniper(address indexed notsnipersupposedly); modifier lockTheSwap() { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor() { _rOwned[_msgSender()] = _rTotal; devAddress = payable(0x284B1CCa8fD92a150cD7c9Ec7108C0B105CF0042); marketingAddress = payable(0xA21D07338d817d424121aa933a9996E49BBEd64F); minTokensBeforeSwap = _tTotal.mul(5).div(10000); _isExcludedFromFee[_msgSender()] = true; _isExcludedFromFee[address(this)] = true; _isMaxWalletExclude[address(this)] = true; _isMaxWalletExclude[_msgSender()] = true; _isMaxWalletExclude[address(dead)] = true; emit Transfer(address(0), _msgSender(), _tTotal); } receive() external payable {} function name() public pure override returns (string memory) { return _nomenclature; } function symbol() public pure override returns (string memory) { return _symbol; } function decimals() public pure override returns (uint8) { return _decimal; } function totalSupply() public pure override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function taxTokensBeforeSwap() external view returns (uint256) { return minTokensBeforeSwap; } function taxTokensForLiquidity() external view returns (uint256) { return tokensForLiquidityToSwap; } function taxTokensForDev() external view returns (uint256) { return tokensForDevToSwap; } function taxTokensForMarketing() external view returns (uint256) { return tokensForMarketingToSwap; } 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 increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero") ); return true; } function isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns (uint256) { require(tAmount <= _tTotal, "Amt must be less than supply"); if (!deductTransferFee) { (uint256 rAmount, , , , , ) = _getValues(tAmount); return rAmount; } else { (, uint256 rTransferAmount, , , , ) = _getValues(tAmount); return rTransferAmount; } } function tokenFromReflection(uint256 rAmount) public view returns (uint256) { require(rAmount <= _rTotal, "Amt must be less than tot refl"); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } function _getValues(uint256 tAmount) private view returns (uint256,uint256,uint256,uint256,uint256,uint256) { (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate()); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity); } function _getTValues(uint256 tAmount)private view returns (uint256,uint256,uint256) { uint256 tFee = calculateTaxFee(tAmount); uint256 tLiquidity = calculateLiquidityFee(tAmount); uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity); return (tTransferAmount, tFee, tLiquidity); } function _getRValues(uint256 tAmount,uint256 tFee,uint256 tLiquidity,uint256 currentRate) private pure returns (uint256,uint256,uint256) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rLiquidity = tLiquidity.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity); return (rAmount, rTransferAmount, rFee); } function _getRate() private view returns (uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(tSupply); } function _getCurrentSupply() private view returns (uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _excluded.length; i++) { if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal); rSupply = rSupply.sub(_rOwned[_excluded[i]]); tSupply = tSupply.sub(_tOwned[_excluded[i]]); } if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _takeLiquidity(uint256 tLiquidity) private { tokensForMarketingToSwap += tLiquidity * _marTax / _liqDiv; tokensForLiquidityToSwap += tLiquidity * _liqTax / _liqDiv; tokensForDevToSwap += tLiquidity * _devTax / _liqDiv; uint256 currentRate = _getRate(); uint256 rLiquidity = tLiquidity.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity); if (_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity); } function calculateTaxFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_refTax).div(10**2); } function calculateLiquidityFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_marTax + _devTax + _liqTax).div(10**2); } function removeAllFee() private { if (_refTax == 0 && _liqTax == 0 && _marTax == 0 && _devTax == 0) return; _previousRefTax = _refTax; _previousLiqTax = _liqTax; _previousMarTax = _marTax; _previousDevTax = _devTax; _refTax = 0; _liqTax = 0; _marTax = 0; _devTax = 0; } function restoreAllFee() private { _refTax = _previousRefTax; _liqTax = _previousLiqTax; _marTax = _previousMarTax; _devTax = _previousDevTax; } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function isExcludedFromFee(address account) public view returns (bool) { return _isExcludedFromFee[account]; } function _approve(address owner,address spender,uint256 amount) private { require(owner != address(0), "ERC20: approve from zero address"); require(spender != address(0), "ERC20: approve to 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 zero address"); require(to != address(0), "ERC20: transfer to zero address"); require(amount > 0, "Transfer amount must be greater than zero"); require(!_isBot[from]); require(!boughtEarly[from] || earlyBuyPenaltyEnd <= block.timestamp, "Snipers can't transfer tokens to sell cheaper DM a Mod."); if (_maxWalletOn == true && ! _isMaxWalletExclude[to]) { require(balanceOf(to) + amount <= _maxWalletSize, "Max amount of tokens for wallet reached"); } if (_buyLimits == true && from == uniV2Pair) { require(amount <= 400000000000002 * 10**9, "Limits are in place, please lower buying amount"); } if(_initateLiqTrans == true) { IUniswapV2Router02 _uniV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); uniV2Router = _uniV2Router; uniV2Pair = IUniswapV2Factory(_uniV2Router.factory()).getPair(address(this), _uniV2Router.WETH()); tradingActiveBlock = block.number; earlyBuyPenaltyEnd = block.timestamp + 72 hours; _isMaxWalletExclude[address(uniV2Pair)] = true; _isMaxWalletExclude[address(uniV2Router)] = true; _buyLimits = true; _maxWalletOn = true; _initateLiqTrans = false; } if(from != owner() && to != uniV2Pair && block.number == tradingActiveBlock){ boughtEarly[to] = true; emit BoughtEarly(to); } uint256 contractTokenBalance = balanceOf(address(this)); if (!inSwapAndLiquify && to == uniV2Pair && swapAndLiquifyEnabled) { if (contractTokenBalance >= minTokensBeforeSwap) { swapTokens(); } } bool takeFee = true; if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) { takeFee = false; } if(boughtEarly[from] && earlyBuyPenaltyEnd > block.timestamp){ _liqTax = _liqTax * 5; _marTax = _marTax * 5; _devTax = _devTax * 5; } _tokenTransfer(from, to, amount, takeFee); } function swapETHForTokens(uint256 amount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = uniV2Router.WETH(); path[1] = address(this); // make the swap uniV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}( 0, // accept any amount of Tokens path, dead, // Burn address block.timestamp.add(300) ); } function addBot(address _user) public onlyOwner { require(_user != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); require(!_isBot[_user], "user already add as bot"); _isBot[_user] = true; } function removeBot(address _user) public onlyOwner { require(_isBot[_user], "user already removed"); _isBot[_user] = false; } function removeBoughtEarly(address account) external onlyOwner { boughtEarly[account] = false; emit RemovedSniper(account); } function swapTokens() private lockTheSwap { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForLiquidityToSwap + tokensForMarketingToSwap + tokensForDevToSwap; uint256 tokensForLiquidity = tokensForLiquidityToSwap.div(2); //Halve the amount of liquidity tokens uint256 amountToSwapForETH = contractBalance.sub(tokensForLiquidity); uint256 initialETHBalance = address(this).balance; swapTokensForETH(amountToSwapForETH); uint256 ethBalance = address(this).balance.sub(initialETHBalance); uint256 ethForMarketing = ethBalance.mul(tokensForMarketingToSwap).div(totalTokensToSwap); uint256 ethForDev = ethBalance.mul(tokensForDevToSwap).div(totalTokensToSwap); uint256 ethForLiquidity = ethBalance.sub(ethForMarketing).sub(ethForDev); tokensForLiquidityToSwap = 0; tokensForMarketingToSwap = 0; tokensForDevToSwap = 0; (bool success,) = address(marketingAddress).call{value: ethForMarketing}(""); (success,) = address(devAddress).call{value: ethForDev}(""); addLiquidity(tokensForLiquidity, ethForLiquidity); emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity); //If any eth left over transfer out of contract as to not get stuck if(address(this).balance > 0 * 10**9){ (success,) = address(marketingAddress).call{value: address(this).balance}(""); } } function swapTokensForETH(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniV2Router.WETH(); _approve(address(this), address(uniV2Router), tokenAmount); uniV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp.add(300) ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { _approve(address(this), address(uniV2Router), tokenAmount); uniV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable dead, block.timestamp.add(300) ); } function setMarketingAddress(address _marketingAddress) external onlyOwner { require(_marketingAddress != address(0), "_marketingAddress address cannot be 0"); _isExcludedFromFee[marketingAddress] = false; marketingAddress = payable(_marketingAddress); _isExcludedFromFee[marketingAddress] = true; emit UpdatedMarketingAddress(_marketingAddress); } function setDevAddress(address _devAddress) public onlyOwner { require(_devAddress != address(0), "_liquidityAddress address cannot be 0"); devAddress = payable(_devAddress); emit UpdatedDevAddress(_devAddress); } function InitiateLiqAdd() external onlyOwner { _initateLiqTrans = true; //already delcared true above. Only call if declared false and are ready to add liquidity } function TaxSwapEnable() external onlyOwner { swapAndLiquifyEnabled = true; } function TaxSwapDisable() external onlyOwner { swapAndLiquifyEnabled = false; } function ResumeLimits() external onlyOwner { _buyLimits = true; } function RemoveLimits() external onlyOwner { _buyLimits = false; } function turnMaxWalletOn() external onlyOwner { _maxWalletOn = true; } function turnMaxWalletOff() external onlyOwner { _maxWalletOn = false; } function _tokenTransfer(address sender,address recipient,uint256 amount,bool takeFee) private { if (!takeFee) removeAllFee(); if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && !_isExcluded[recipient]) { _transferStandard(sender, recipient, amount); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } if (!takeFee) restoreAllFee(); } function _transferStandard(address sender,address recipient,uint256 tAmount) private { ( uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity ) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferToExcluded(address sender,address recipient,uint256 tAmount) private { ( uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity ) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded(address sender,address recipient,uint256 tAmount) private { ( uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity ) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferBothExcluded(address sender,address recipient,uint256 tAmount) private { ( uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity ) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _tokenTransferNoFee(address sender,address recipient,uint256 amount) private { _rOwned[sender] = _rOwned[sender].sub(amount); _rOwned[recipient] = _rOwned[recipient].add(amount); if (_isExcluded[sender]) { _tOwned[sender] = _tOwned[sender].sub(amount); } if (_isExcluded[recipient]) { _tOwned[recipient] = _tOwned[recipient].add(amount); } emit Transfer(sender, recipient, amount); } function recoverERC20(address tokenAddress, uint256 tokenAmount) public virtual { require(tokenAddress != address(this), "Cannot withdraw this token"); IERC20(tokenAddress).transfer(owner(), tokenAmount); } function claimTokens () public { // make sure we capture all ETH that may or may not be sent to this contract payable(marketingAddress).transfer(address(this).balance); } }
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":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","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":"notsnipersupposedly","type":"address"}],"name":"RemovedSniper","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"Dev","type":"address"}],"name":"UpdatedDevAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"marketing","type":"address"}],"name":"UpdatedMarketingAddress","type":"event"},{"inputs":[],"name":"InitiateLiqAdd","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"RemoveLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ResumeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"TaxSwapDisable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"TaxSwapEnable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"addBot","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":[{"internalType":"address","name":"","type":"address"}],"name":"boughtEarly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlyBuyPenaltyEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"recoverERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"removeBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeBoughtEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devAddress","type":"address"}],"name":"setDevAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"taxTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxTokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxTokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxTokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tradingActiveBlock","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":"turnMaxWalletOff","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"turnMaxWalletOn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052600980546001600160a01b03191661dead179055600e805463ffffffff60a81b191661010160a81b1790556000600f556200004d6a52b7d2dcc80cd2e400000060001962000380565b6200005b9060001962000366565b6011556a013da329b63364ad1aca006013556018805461ffff60301b1961ffff60201b1963ffffffff19831660ff6201000062ffffff199095166201010190811786900482166301000000029290921790911791821664010000000060ff60201b1993909316831783900482166501000000000002178217928316660100000000000060ff60301b199490941666020000000000009081179490940482166701000000000000000217909217938490558304811692620001219281048216911662000305565b6200012d919062000305565b601860086101000a81548160ff021916908360ff1602179055503480156200015457600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060115433600090815260016020908152604090912091909155600c80546001600160a01b031990811673284b1cca8fd92a150cd7c9ec7108c0b105cf004217909155600b805490911673a21d07338d817d424121aa933a9996e49bbed64f17905562000238906127109062000224906a52b7d2dcc80cd2e400000090600590620012d2620002e2821b17901c565b620002f760201b620012de1790919060201c565b6014553360008181526004602090815260408083208054600160ff199182168117909255308552828520805482168317905560068452828520805482168317905585855282852080548216831790556009546001600160a01b0316855282852080549091169091179055516a52b7d2dcc80cd2e400000081527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3620003c3565b6000620002f0828462000344565b9392505050565b6000620002f082846200032d565b600060ff821660ff84168060ff0382111562000325576200032562000397565b019392505050565b6000826200033f576200033f620003ad565b500490565b600081600019048311821515161562000361576200036162000397565b500290565b6000828210156200037b576200037b62000397565b500390565b600082620003925762000392620003ad565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b612e4780620003d36000396000f3fe6080604052600436106102555760003560e01c80635fecd9261161013957806395d89b41116100b6578063dd62ed3e1161007a578063dd62ed3e1461070b578063ea372aa714610751578063ee40166e14610766578063f2fde38b1461077c578063f5eb223d1461079c578063ffecf516146107b157600080fd5b806395d89b4114610657578063a457c2d71461068b578063a5ece941146106ab578063a9059cbb146106cb578063d0d41fe1146106eb57600080fd5b806385ecfd28116100fd57806385ecfd281461059057806388f82020146105c05780638980f11f146105f95780638da5cb5b14610619578063906e9dd01461063757600080fd5b80635fecd92614610511578063620b4bfc146105315780636e86ea8b1461054657806370a082311461055b578063715018a61461057b57600080fd5b8063384fd8ba116101d25780634549b039116101965780634549b0391461045957806348c54b9d146104795780635342acb41461048e57806356cd40e7146104c75780635bb988c9146104dc5780635c0fdd4c146104fc57600080fd5b8063384fd8ba146103b757806339509351146103cc5780633ad10ef6146103ec5780634130f6dc14610424578063437823ec1461043957600080fd5b806323b872dd1161021957806323b872dd1461032f5780632cf0d13d1461034f5780632d83811914610366578063313ce5671461038657806335d98bd3146103a257600080fd5b806306fdde0314610261578063095ea7b3146102ac5780631054ccab146102dc57806318160ddd146102fb5780631fc851bd1461031957600080fd5b3661025c57005b600080fd5b34801561026d57600080fd5b5060408051808201909152601081526f4d616d612053616974616d6120496e7560801b60208201525b6040516102a39190612b91565b60405180910390f35b3480156102b857600080fd5b506102cc6102c7366004612adc565b6107d1565b60405190151581526020016102a3565b3480156102e857600080fd5b506016545b6040519081526020016102a3565b34801561030757600080fd5b506a52b7d2dcc80cd2e40000006102ed565b34801561032557600080fd5b506102ed60105481565b34801561033b57600080fd5b506102cc61034a366004612a9b565b6107e8565b34801561035b57600080fd5b50610364610851565b005b34801561037257600080fd5b506102ed610381366004612b25565b610899565b34801561039257600080fd5b50604051600981526020016102a3565b3480156103ae57600080fd5b5061036461090a565b3480156103c357600080fd5b506017546102ed565b3480156103d857600080fd5b506102cc6103e7366004612adc565b610949565b3480156103f857600080fd5b50600c5461040c906001600160a01b031681565b6040516001600160a01b0390911681526020016102a3565b34801561043057600080fd5b506015546102ed565b34801561044557600080fd5b50610364610454366004612a28565b61097f565b34801561046557600080fd5b506102ed610474366004612b3e565b6109cd565b34801561048557600080fd5b50610364610a63565b34801561049a57600080fd5b506102cc6104a9366004612a28565b6001600160a01b031660009081526004602052604090205460ff1690565b3480156104d357600080fd5b50610364610a9f565b3480156104e857600080fd5b506103646104f7366004612a28565b610ad8565b34801561050857600080fd5b50610364610b4b565b34801561051d57600080fd5b5061036461052c366004612a28565b610b84565b34801561053d57600080fd5b50610364610c2e565b34801561055257600080fd5b50610364610c67565b34801561056757600080fd5b506102ed610576366004612a28565b610ca6565b34801561058757600080fd5b50610364610d05565b34801561059c57600080fd5b506102cc6105ab366004612a28565b60086020526000908152604090205460ff1681565b3480156105cc57600080fd5b506102cc6105db366004612a28565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561060557600080fd5b50610364610614366004612adc565b610d79565b34801561062557600080fd5b506000546001600160a01b031661040c565b34801561064357600080fd5b50610364610652366004612a28565b610e78565b34801561066357600080fd5b5060408051808201909152600b81526a4d414d4153414954414d4160a81b6020820152610296565b34801561069757600080fd5b506102cc6106a6366004612adc565b610f8b565b3480156106b757600080fd5b50600b5461040c906001600160a01b031681565b3480156106d757600080fd5b506102cc6106e6366004612adc565b610fda565b3480156106f757600080fd5b50610364610706366004612a28565b610fe7565b34801561071757600080fd5b506102ed610726366004612a62565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561075d57600080fd5b506014546102ed565b34801561077257600080fd5b506102ed600f5481565b34801561078857600080fd5b50610364610797366004612a28565b6110c3565b3480156107a857600080fd5b506103646111b2565b3480156107bd57600080fd5b506103646107cc366004612a28565b6111f1565b60006107de3384846112ea565b5060015b92915050565b60006107f58484846113f7565b610847843361084285604051806060016040528060288152602001612dc5602891396001600160a01b038a1660009081526003602090815260408083203384529091529020549190611b55565b6112ea565b5060019392505050565b6000546001600160a01b031633146108845760405162461bcd60e51b815260040161087b90612be6565b60405180910390fd5b600e805460ff60b81b1916600160b81b179055565b60006011548211156108ed5760405162461bcd60e51b815260206004820152601e60248201527f416d74206d757374206265206c657373207468616e20746f74207265666c0000604482015260640161087b565b60006108f7611b81565b905061090383826112de565b9392505050565b6000546001600160a01b031633146109345760405162461bcd60e51b815260040161087b90612be6565b600e805460ff60b01b1916600160b01b179055565b3360008181526003602090815260408083206001600160a01b038716845290915281205490916107de9185906108429086611ba4565b6000546001600160a01b031633146109a95760405162461bcd60e51b815260040161087b90612be6565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b60006a52b7d2dcc80cd2e4000000831115610a2a5760405162461bcd60e51b815260206004820152601c60248201527f416d74206d757374206265206c657373207468616e20737570706c7900000000604482015260640161087b565b81610a49576000610a3a84611bb0565b509395506107e2945050505050565b6000610a5484611bb0565b509295506107e2945050505050565b600b546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610a9c573d6000803e3d6000fd5b50565b6000546001600160a01b03163314610ac95760405162461bcd60e51b815260040161087b90612be6565b600e805460ff60b81b19169055565b6000546001600160a01b03163314610b025760405162461bcd60e51b815260040161087b90612be6565b6001600160a01b038116600081815260086020526040808220805460ff19169055517fccaa6e1cfd4cf9506fa856fdc8e0a00894b2621ece1d60ab36209873305944989190a250565b6000546001600160a01b03163314610b755760405162461bcd60e51b815260040161087b90612be6565b600e805460ff60c01b19169055565b6000546001600160a01b03163314610bae5760405162461bcd60e51b815260040161087b90612be6565b6001600160a01b03811660009081526007602052604090205460ff16610c0d5760405162461bcd60e51b81526020600482015260146024820152731d5cd95c88185b1c9958591e481c995b5bdd995960621b604482015260640161087b565b6001600160a01b03166000908152600760205260409020805460ff19169055565b6000546001600160a01b03163314610c585760405162461bcd60e51b815260040161087b90612be6565b600e805460ff60a81b19169055565b6000546001600160a01b03163314610c915760405162461bcd60e51b815260040161087b90612be6565b600e805460ff60a81b1916600160a81b179055565b6001600160a01b03811660009081526005602052604081205460ff1615610ce357506001600160a01b031660009081526002602052604090205490565b6001600160a01b0382166000908152600160205260409020546107e290610899565b6000546001600160a01b03163314610d2f5760405162461bcd60e51b815260040161087b90612be6565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6001600160a01b038216301415610dd25760405162461bcd60e51b815260206004820152601a60248201527f43616e6e6f74207769746864726177207468697320746f6b656e000000000000604482015260640161087b565b816001600160a01b031663a9059cbb610df36000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101849052604401602060405180830381600087803b158015610e3b57600080fd5b505af1158015610e4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e739190612b08565b505050565b6000546001600160a01b03163314610ea25760405162461bcd60e51b815260040161087b90612be6565b6001600160a01b038116610f065760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b606482015260840161087b565b600b80546001600160a01b039081166000908152600460209081526040808320805460ff1990811690915585546001600160a01b031916948716948517909555838352918290208054909416600117909355519081527fd1e7d6a3390dd5008bd1c57798817b9f806e4c417264e7d3d67e42e784dc24a991015b60405180910390a150565b60006107de338461084285604051806060016040528060258152602001612ded602591393360009081526003602090815260408083206001600160a01b038d1684529091529020549190611b55565b60006107de3384846113f7565b6000546001600160a01b031633146110115760405162461bcd60e51b815260040161087b90612be6565b6001600160a01b0381166110755760405162461bcd60e51b815260206004820152602560248201527f5f6c69717569646974794164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b606482015260840161087b565b600c80546001600160a01b0319166001600160a01b0383169081179091556040519081527f804ec39c1aea0b9f2615a34c3fa437b6ddda2c72e6848abf0f23955589a7ad5490602001610f80565b6000546001600160a01b031633146110ed5760405162461bcd60e51b815260040161087b90612be6565b6001600160a01b0381166111575760405162461bcd60e51b815260206004820152602b60248201527f45524332304f776e61626c653a206e6577206f776e657220697320746865207a60448201526a65726f206164647265737360a81b606482015260840161087b565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146111dc5760405162461bcd60e51b815260040161087b90612be6565b600e805460ff60c01b1916600160c01b179055565b6000546001600160a01b0316331461121b5760405162461bcd60e51b815260040161087b90612be6565b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b038216141561124557600080fd5b6001600160a01b03811660009081526007602052604090205460ff16156112ae5760405162461bcd60e51b815260206004820152601760248201527f7573657220616c72656164792061646420617320626f74000000000000000000604482015260640161087b565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b60006109038284612cfb565b60006109038284612cd9565b6001600160a01b0383166113405760405162461bcd60e51b815260206004820181905260248201527f45524332303a20617070726f76652066726f6d207a65726f2061646472657373604482015260640161087b565b6001600160a01b0382166113965760405162461bcd60e51b815260206004820152601e60248201527f45524332303a20617070726f766520746f207a65726f20616464726573730000604482015260640161087b565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166114575760405162461bcd60e51b815260206004820152602160248201527f45524332303a207472616e736665722066726f6d207a65726f206164647265736044820152607360f81b606482015260840161087b565b6001600160a01b0382166114ad5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a207472616e7366657220746f207a65726f206164647265737300604482015260640161087b565b6000811161150f5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161087b565b6001600160a01b03831660009081526007602052604090205460ff161561153557600080fd5b6001600160a01b03831660009081526008602052604090205460ff16158061155f57504260105411155b6115d15760405162461bcd60e51b815260206004820152603760248201527f536e69706572732063616e2774207472616e7366657220746f6b656e7320746f60448201527f2073656c6c206368656170657220444d2061204d6f642e000000000000000000606482015260840161087b565b600e54600160c01b900460ff161515600114801561160857506001600160a01b03821660009081526006602052604090205460ff16155b15611682576013548161161a84610ca6565b6116249190612c9c565b11156116825760405162461bcd60e51b815260206004820152602760248201527f4d617820616d6f756e74206f6620746f6b656e7320666f722077616c6c6574206044820152661c995858da195960ca1b606482015260840161087b565b600e54600160b81b900460ff16151560011480156116ad5750600e546001600160a01b038481169116145b15611724576954b40b1f852c513594008111156117245760405162461bcd60e51b815260206004820152602f60248201527f4c696d6974732061726520696e20706c6163652c20706c65617365206c6f776560448201526e1c88189d5e5a5b99c8185b5bdd5b9d608a1b606482015260840161087b565b600e54600160b01b900460ff1615156001141561195b57600d80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051829163c45a0155916004808301926020929190829003018186803b15801561179b57600080fd5b505afa1580156117af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d39190612a45565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561181b57600080fd5b505afa15801561182f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118539190612a45565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b15801561189957600080fd5b505afa1580156118ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d19190612a45565b600e80546001600160a01b0319166001600160a01b039290921691909117905543600f55611902426203f480612c9c565b60105550600e80546001600160a01b03908116600090815260066020526040808220805460ff199081166001908117909255600d54909416835291208054909216179055805462ffffff60b01b191661010160b81b1790555b6000546001600160a01b038481169116148015906119875750600e546001600160a01b03838116911614155b80156119945750600f5443145b156119e3576001600160a01b038216600081815260086020526040808220805460ff19166001179055517fb90badc1cf1c52268f4fa9afb5276aebf640bcca3300cdfc9cf37db17daa13e29190a25b60006119ee30610ca6565b600e54909150600160a01b900460ff16158015611a185750600e546001600160a01b038481169116145b8015611a2d5750600e54600160a81b900460ff165b15611a43576014548110611a4357611a43611bff565b6001600160a01b03841660009081526004602052604090205460019060ff1680611a8557506001600160a01b03841660009081526004602052604090205460ff165b15611a8e575060005b6001600160a01b03851660009081526008602052604090205460ff168015611ab7575042601054115b15611b4257601854611ad490600160201b900460ff166005612d1a565b6018805460ff928316600160201b0264ff000000001982168117909255611b02929182169116176005612d1a565b6018805460ff191660ff9283161790819055611b279162010000909104166005612d1a565b601860026101000a81548160ff021916908360ff1602179055505b611b4e85858584611e5a565b5050505050565b60008184841115611b795760405162461bcd60e51b815260040161087b9190612b91565b505050900390565b6000806000611b8e61204d565b9092509050611b9d82826112de565b9250505090565b60006109038284612c9c565b6000806000806000806000806000611bc78a6121f1565b9250925092506000806000611be58d8686611be0611b81565b61222d565b919f909e50909c50959a5093985091965092945050505050565b600e805460ff60a01b1916600160a01b1790556000611c1d30610ca6565b90506000601754601654601554611c349190612c9c565b611c3e9190612c9c565b90506000611c5860026015546112de90919063ffffffff16565b90506000611c66848361227d565b905047611c7282612289565b6000611c7e478361227d565b90506000611ca186611c9b601654856112d290919063ffffffff16565b906112de565b90506000611cbe87611c9b601754866112d290919063ffffffff16565b90506000611cd682611cd0868661227d565b9061227d565b6000601581905560168190556017819055600b5460405192935090916001600160a01b039091169085908381818185875af1925050503d8060008114611d38576040519150601f19603f3d011682016040523d82523d6000602084013e611d3d565b606091505b5050600c546040519192506001600160a01b0316908490600081818185875af1925050503d8060008114611d8d576040519150601f19603f3d011682016040523d82523d6000602084013e611d92565b606091505b505080915050611da288836123fb565b60408051888152602081018490529081018990527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a14715611e4157600b546040516001600160a01b03909116904790600081818185875af1925050503d8060008114611e36576040519150601f19603f3d011682016040523d82523d6000602084013e611e3b565b606091505b50909150505b5050600e805460ff60a01b191690555050505050505050565b80611e6757611e676124e4565b6001600160a01b03841660009081526005602052604090205460ff168015611ea857506001600160a01b03831660009081526005602052604090205460ff16155b15611ebd57611eb88484846125d2565b611fbb565b6001600160a01b03841660009081526005602052604090205460ff16158015611efe57506001600160a01b03831660009081526005602052604090205460ff165b15611f0e57611eb88484846126f8565b6001600160a01b03841660009081526005602052604090205460ff16158015611f5057506001600160a01b03831660009081526005602052604090205460ff16155b15611f6057611eb88484846127a1565b6001600160a01b03841660009081526005602052604090205460ff168015611fa057506001600160a01b03831660009081526005602052604090205460ff165b15611fb057611eb88484846127e5565b611fbb8484846127a1565b80612047576018805462ff00ff1966ff00ff0000000019821664ff0000000019600160381b840460ff908116600160301b02918216929092176501000000000066ff00000000000019909516909117939093048116600160201b029290921790811661010082048316908117630100000060ff1993909316919091179190910490911662010000021790555b50505050565b60115460009081906a52b7d2dcc80cd2e4000000825b600a548110156121b0578260016000600a848154811061208557612085612d8b565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806120f057508160026000600a84815481106120c9576120c9612d8b565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561210e575050601154936a52b7d2dcc80cd2e40000009350915050565b61215460016000600a848154811061212857612128612d8b565b60009182526020808320909101546001600160a01b03168352820192909252604001902054849061227d565b925061219c60026000600a848154811061217057612170612d8b565b60009182526020808320909101546001600160a01b03168352820192909252604001902054839061227d565b9150806121a881612d5a565b915050612063565b506011546121c9906a52b7d2dcc80cd2e40000006112de565b8210156121e8575050601154926a52b7d2dcc80cd2e400000092509050565b90939092509050565b60008060008061220085612858565b9050600061220d8661287a565b9050600061221f82611cd0898661227d565b979296509094509092505050565b600080808061223c88866112d2565b9050600061224a88876112d2565b9050600061225888886112d2565b9050600061226a82611cd0868661227d565b939b939a50919850919650505050505050565b60006109038284612d43565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106122be576122be612d8b565b6001600160a01b03928316602091820292909201810191909152600d54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561231257600080fd5b505afa158015612326573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061234a9190612a45565b8160018151811061235d5761235d612d8b565b6001600160a01b039283166020918202929092010152600d5461238391309116846112ea565b600d546001600160a01b031663791ac94783600084306123a54261012c611ba4565b6040518663ffffffff1660e01b81526004016123c5959493929190612c2b565b600060405180830381600087803b1580156123df57600080fd5b505af11580156123f3573d6000803e3d6000fd5b505050505050565b600d546124139030906001600160a01b0316846112ea565b600d546009546001600160a01b039182169163f305d719918491309187916000918291166124434261012c611ba4565b60405160e089901b6001600160e01b03191681526001600160a01b039687166004820152602481019590955260448501939093526064840191909152909216608482015260a481019190915260c4016060604051808303818588803b1580156124ab57600080fd5b505af11580156124bf573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611b4e9190612b63565b601854600160301b900460ff161580156125085750601854600160201b900460ff16155b8015612517575060185460ff16155b801561252c575060185462010000900460ff16155b1561253357565b6018805463ff00ff001967ff00ff000000000019821665ff000000000019600160301b840460ff908116600160381b0291821692909217600160201b67ff000000000000001990951690911793909304811665010000000000029290921790811663ff0000001961010083851602908116919091176201000061ff0019909316909117919091049091166301000000021766ff00ff00ff00ff19169055565b6000806000806000806125e487611bb0565b6001600160a01b038f16600090815260026020526040902054959b50939950919750955093509150612616908861227d565b6001600160a01b038a16600090815260026020908152604080832093909355600190522054612645908761227d565b6001600160a01b03808b1660009081526001602052604080822093909355908a16815220546126749086611ba4565b6001600160a01b038916600090815260016020526040902055612696816128be565b6126a08483612a04565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516126e591815260200190565b60405180910390a3505050505050505050565b60008060008060008061270a87611bb0565b6001600160a01b038f16600090815260016020526040902054959b5093995091975095509350915061273c908761227d565b6001600160a01b03808b16600090815260016020908152604080832094909455918b168152600290915220546127729084611ba4565b6001600160a01b0389166000908152600260209081526040808320939093556001905220546126749086611ba4565b6000806000806000806127b387611bb0565b6001600160a01b038f16600090815260016020526040902054959b50939950919750955093509150612645908761227d565b6000806000806000806127f787611bb0565b6001600160a01b038f16600090815260026020526040902054959b50939950919750955093509150612829908861227d565b6001600160a01b038a1660009081526002602090815260408083209390935560019052205461273c908761227d565b6018546000906107e290606490611c9b908590600160301b900460ff166112d2565b6018546000906107e290606490611c9b9060ff600160201b82048116916128aa9162010000820481169116612cb4565b6128b49190612cb4565b859060ff166112d2565b60185460ff600160401b82048116916128d8911683612cfb565b6128e29190612cd9565b601660008282546128f39190612c9c565b909155505060185460ff600160401b820481169161291a91600160201b9091041683612cfb565b6129249190612cd9565b601560008282546129359190612c9c565b909155505060185460ff600160401b820481169161295b91620100009091041683612cfb565b6129659190612cd9565b601760008282546129769190612c9c565b9091555060009050612986611b81565b9050600061299483836112d2565b306000908152600160205260409020549091506129b19082611ba4565b3060009081526001602090815260408083209390935560059052205460ff1615610e7357306000908152600260205260409020546129ef9084611ba4565b30600090815260026020526040902055505050565b601154612a11908361227d565b601155601254612a219082611ba4565b6012555050565b600060208284031215612a3a57600080fd5b813561090381612da1565b600060208284031215612a5757600080fd5b815161090381612da1565b60008060408385031215612a7557600080fd5b8235612a8081612da1565b91506020830135612a9081612da1565b809150509250929050565b600080600060608486031215612ab057600080fd5b8335612abb81612da1565b92506020840135612acb81612da1565b929592945050506040919091013590565b60008060408385031215612aef57600080fd5b8235612afa81612da1565b946020939093013593505050565b600060208284031215612b1a57600080fd5b815161090381612db6565b600060208284031215612b3757600080fd5b5035919050565b60008060408385031215612b5157600080fd5b823591506020830135612a9081612db6565b600080600060608486031215612b7857600080fd5b8351925060208401519150604084015190509250925092565b600060208083528351808285015260005b81811015612bbe57858101830151858201604001528201612ba2565b81811115612bd0576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526025908201527f45524332304f776e61626c653a2063616c6c6572206973206e6f74207468652060408201526437bbb732b960d91b606082015260800190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612c7b5784516001600160a01b031683529383019391830191600101612c56565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115612caf57612caf612d75565b500190565b600060ff821660ff84168060ff03821115612cd157612cd1612d75565b019392505050565b600082612cf657634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612d1557612d15612d75565b500290565b600060ff821660ff84168160ff0481118215151615612d3b57612d3b612d75565b029392505050565b600082821015612d5557612d55612d75565b500390565b6000600019821415612d6e57612d6e612d75565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114610a9c57600080fd5b8015158114610a9c57600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220267e48ceabf7b5cd587801980b1c253d79606193cecbe619d155695eade35f9c64736f6c63430008070033
Deployed Bytecode
0x6080604052600436106102555760003560e01c80635fecd9261161013957806395d89b41116100b6578063dd62ed3e1161007a578063dd62ed3e1461070b578063ea372aa714610751578063ee40166e14610766578063f2fde38b1461077c578063f5eb223d1461079c578063ffecf516146107b157600080fd5b806395d89b4114610657578063a457c2d71461068b578063a5ece941146106ab578063a9059cbb146106cb578063d0d41fe1146106eb57600080fd5b806385ecfd28116100fd57806385ecfd281461059057806388f82020146105c05780638980f11f146105f95780638da5cb5b14610619578063906e9dd01461063757600080fd5b80635fecd92614610511578063620b4bfc146105315780636e86ea8b1461054657806370a082311461055b578063715018a61461057b57600080fd5b8063384fd8ba116101d25780634549b039116101965780634549b0391461045957806348c54b9d146104795780635342acb41461048e57806356cd40e7146104c75780635bb988c9146104dc5780635c0fdd4c146104fc57600080fd5b8063384fd8ba146103b757806339509351146103cc5780633ad10ef6146103ec5780634130f6dc14610424578063437823ec1461043957600080fd5b806323b872dd1161021957806323b872dd1461032f5780632cf0d13d1461034f5780632d83811914610366578063313ce5671461038657806335d98bd3146103a257600080fd5b806306fdde0314610261578063095ea7b3146102ac5780631054ccab146102dc57806318160ddd146102fb5780631fc851bd1461031957600080fd5b3661025c57005b600080fd5b34801561026d57600080fd5b5060408051808201909152601081526f4d616d612053616974616d6120496e7560801b60208201525b6040516102a39190612b91565b60405180910390f35b3480156102b857600080fd5b506102cc6102c7366004612adc565b6107d1565b60405190151581526020016102a3565b3480156102e857600080fd5b506016545b6040519081526020016102a3565b34801561030757600080fd5b506a52b7d2dcc80cd2e40000006102ed565b34801561032557600080fd5b506102ed60105481565b34801561033b57600080fd5b506102cc61034a366004612a9b565b6107e8565b34801561035b57600080fd5b50610364610851565b005b34801561037257600080fd5b506102ed610381366004612b25565b610899565b34801561039257600080fd5b50604051600981526020016102a3565b3480156103ae57600080fd5b5061036461090a565b3480156103c357600080fd5b506017546102ed565b3480156103d857600080fd5b506102cc6103e7366004612adc565b610949565b3480156103f857600080fd5b50600c5461040c906001600160a01b031681565b6040516001600160a01b0390911681526020016102a3565b34801561043057600080fd5b506015546102ed565b34801561044557600080fd5b50610364610454366004612a28565b61097f565b34801561046557600080fd5b506102ed610474366004612b3e565b6109cd565b34801561048557600080fd5b50610364610a63565b34801561049a57600080fd5b506102cc6104a9366004612a28565b6001600160a01b031660009081526004602052604090205460ff1690565b3480156104d357600080fd5b50610364610a9f565b3480156104e857600080fd5b506103646104f7366004612a28565b610ad8565b34801561050857600080fd5b50610364610b4b565b34801561051d57600080fd5b5061036461052c366004612a28565b610b84565b34801561053d57600080fd5b50610364610c2e565b34801561055257600080fd5b50610364610c67565b34801561056757600080fd5b506102ed610576366004612a28565b610ca6565b34801561058757600080fd5b50610364610d05565b34801561059c57600080fd5b506102cc6105ab366004612a28565b60086020526000908152604090205460ff1681565b3480156105cc57600080fd5b506102cc6105db366004612a28565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561060557600080fd5b50610364610614366004612adc565b610d79565b34801561062557600080fd5b506000546001600160a01b031661040c565b34801561064357600080fd5b50610364610652366004612a28565b610e78565b34801561066357600080fd5b5060408051808201909152600b81526a4d414d4153414954414d4160a81b6020820152610296565b34801561069757600080fd5b506102cc6106a6366004612adc565b610f8b565b3480156106b757600080fd5b50600b5461040c906001600160a01b031681565b3480156106d757600080fd5b506102cc6106e6366004612adc565b610fda565b3480156106f757600080fd5b50610364610706366004612a28565b610fe7565b34801561071757600080fd5b506102ed610726366004612a62565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561075d57600080fd5b506014546102ed565b34801561077257600080fd5b506102ed600f5481565b34801561078857600080fd5b50610364610797366004612a28565b6110c3565b3480156107a857600080fd5b506103646111b2565b3480156107bd57600080fd5b506103646107cc366004612a28565b6111f1565b60006107de3384846112ea565b5060015b92915050565b60006107f58484846113f7565b610847843361084285604051806060016040528060288152602001612dc5602891396001600160a01b038a1660009081526003602090815260408083203384529091529020549190611b55565b6112ea565b5060019392505050565b6000546001600160a01b031633146108845760405162461bcd60e51b815260040161087b90612be6565b60405180910390fd5b600e805460ff60b81b1916600160b81b179055565b60006011548211156108ed5760405162461bcd60e51b815260206004820152601e60248201527f416d74206d757374206265206c657373207468616e20746f74207265666c0000604482015260640161087b565b60006108f7611b81565b905061090383826112de565b9392505050565b6000546001600160a01b031633146109345760405162461bcd60e51b815260040161087b90612be6565b600e805460ff60b01b1916600160b01b179055565b3360008181526003602090815260408083206001600160a01b038716845290915281205490916107de9185906108429086611ba4565b6000546001600160a01b031633146109a95760405162461bcd60e51b815260040161087b90612be6565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b60006a52b7d2dcc80cd2e4000000831115610a2a5760405162461bcd60e51b815260206004820152601c60248201527f416d74206d757374206265206c657373207468616e20737570706c7900000000604482015260640161087b565b81610a49576000610a3a84611bb0565b509395506107e2945050505050565b6000610a5484611bb0565b509295506107e2945050505050565b600b546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610a9c573d6000803e3d6000fd5b50565b6000546001600160a01b03163314610ac95760405162461bcd60e51b815260040161087b90612be6565b600e805460ff60b81b19169055565b6000546001600160a01b03163314610b025760405162461bcd60e51b815260040161087b90612be6565b6001600160a01b038116600081815260086020526040808220805460ff19169055517fccaa6e1cfd4cf9506fa856fdc8e0a00894b2621ece1d60ab36209873305944989190a250565b6000546001600160a01b03163314610b755760405162461bcd60e51b815260040161087b90612be6565b600e805460ff60c01b19169055565b6000546001600160a01b03163314610bae5760405162461bcd60e51b815260040161087b90612be6565b6001600160a01b03811660009081526007602052604090205460ff16610c0d5760405162461bcd60e51b81526020600482015260146024820152731d5cd95c88185b1c9958591e481c995b5bdd995960621b604482015260640161087b565b6001600160a01b03166000908152600760205260409020805460ff19169055565b6000546001600160a01b03163314610c585760405162461bcd60e51b815260040161087b90612be6565b600e805460ff60a81b19169055565b6000546001600160a01b03163314610c915760405162461bcd60e51b815260040161087b90612be6565b600e805460ff60a81b1916600160a81b179055565b6001600160a01b03811660009081526005602052604081205460ff1615610ce357506001600160a01b031660009081526002602052604090205490565b6001600160a01b0382166000908152600160205260409020546107e290610899565b6000546001600160a01b03163314610d2f5760405162461bcd60e51b815260040161087b90612be6565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6001600160a01b038216301415610dd25760405162461bcd60e51b815260206004820152601a60248201527f43616e6e6f74207769746864726177207468697320746f6b656e000000000000604482015260640161087b565b816001600160a01b031663a9059cbb610df36000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101849052604401602060405180830381600087803b158015610e3b57600080fd5b505af1158015610e4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e739190612b08565b505050565b6000546001600160a01b03163314610ea25760405162461bcd60e51b815260040161087b90612be6565b6001600160a01b038116610f065760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b606482015260840161087b565b600b80546001600160a01b039081166000908152600460209081526040808320805460ff1990811690915585546001600160a01b031916948716948517909555838352918290208054909416600117909355519081527fd1e7d6a3390dd5008bd1c57798817b9f806e4c417264e7d3d67e42e784dc24a991015b60405180910390a150565b60006107de338461084285604051806060016040528060258152602001612ded602591393360009081526003602090815260408083206001600160a01b038d1684529091529020549190611b55565b60006107de3384846113f7565b6000546001600160a01b031633146110115760405162461bcd60e51b815260040161087b90612be6565b6001600160a01b0381166110755760405162461bcd60e51b815260206004820152602560248201527f5f6c69717569646974794164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b606482015260840161087b565b600c80546001600160a01b0319166001600160a01b0383169081179091556040519081527f804ec39c1aea0b9f2615a34c3fa437b6ddda2c72e6848abf0f23955589a7ad5490602001610f80565b6000546001600160a01b031633146110ed5760405162461bcd60e51b815260040161087b90612be6565b6001600160a01b0381166111575760405162461bcd60e51b815260206004820152602b60248201527f45524332304f776e61626c653a206e6577206f776e657220697320746865207a60448201526a65726f206164647265737360a81b606482015260840161087b565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146111dc5760405162461bcd60e51b815260040161087b90612be6565b600e805460ff60c01b1916600160c01b179055565b6000546001600160a01b0316331461121b5760405162461bcd60e51b815260040161087b90612be6565b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b038216141561124557600080fd5b6001600160a01b03811660009081526007602052604090205460ff16156112ae5760405162461bcd60e51b815260206004820152601760248201527f7573657220616c72656164792061646420617320626f74000000000000000000604482015260640161087b565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b60006109038284612cfb565b60006109038284612cd9565b6001600160a01b0383166113405760405162461bcd60e51b815260206004820181905260248201527f45524332303a20617070726f76652066726f6d207a65726f2061646472657373604482015260640161087b565b6001600160a01b0382166113965760405162461bcd60e51b815260206004820152601e60248201527f45524332303a20617070726f766520746f207a65726f20616464726573730000604482015260640161087b565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166114575760405162461bcd60e51b815260206004820152602160248201527f45524332303a207472616e736665722066726f6d207a65726f206164647265736044820152607360f81b606482015260840161087b565b6001600160a01b0382166114ad5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a207472616e7366657220746f207a65726f206164647265737300604482015260640161087b565b6000811161150f5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161087b565b6001600160a01b03831660009081526007602052604090205460ff161561153557600080fd5b6001600160a01b03831660009081526008602052604090205460ff16158061155f57504260105411155b6115d15760405162461bcd60e51b815260206004820152603760248201527f536e69706572732063616e2774207472616e7366657220746f6b656e7320746f60448201527f2073656c6c206368656170657220444d2061204d6f642e000000000000000000606482015260840161087b565b600e54600160c01b900460ff161515600114801561160857506001600160a01b03821660009081526006602052604090205460ff16155b15611682576013548161161a84610ca6565b6116249190612c9c565b11156116825760405162461bcd60e51b815260206004820152602760248201527f4d617820616d6f756e74206f6620746f6b656e7320666f722077616c6c6574206044820152661c995858da195960ca1b606482015260840161087b565b600e54600160b81b900460ff16151560011480156116ad5750600e546001600160a01b038481169116145b15611724576954b40b1f852c513594008111156117245760405162461bcd60e51b815260206004820152602f60248201527f4c696d6974732061726520696e20706c6163652c20706c65617365206c6f776560448201526e1c88189d5e5a5b99c8185b5bdd5b9d608a1b606482015260840161087b565b600e54600160b01b900460ff1615156001141561195b57600d80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051829163c45a0155916004808301926020929190829003018186803b15801561179b57600080fd5b505afa1580156117af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d39190612a45565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561181b57600080fd5b505afa15801561182f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118539190612a45565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b15801561189957600080fd5b505afa1580156118ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d19190612a45565b600e80546001600160a01b0319166001600160a01b039290921691909117905543600f55611902426203f480612c9c565b60105550600e80546001600160a01b03908116600090815260066020526040808220805460ff199081166001908117909255600d54909416835291208054909216179055805462ffffff60b01b191661010160b81b1790555b6000546001600160a01b038481169116148015906119875750600e546001600160a01b03838116911614155b80156119945750600f5443145b156119e3576001600160a01b038216600081815260086020526040808220805460ff19166001179055517fb90badc1cf1c52268f4fa9afb5276aebf640bcca3300cdfc9cf37db17daa13e29190a25b60006119ee30610ca6565b600e54909150600160a01b900460ff16158015611a185750600e546001600160a01b038481169116145b8015611a2d5750600e54600160a81b900460ff165b15611a43576014548110611a4357611a43611bff565b6001600160a01b03841660009081526004602052604090205460019060ff1680611a8557506001600160a01b03841660009081526004602052604090205460ff165b15611a8e575060005b6001600160a01b03851660009081526008602052604090205460ff168015611ab7575042601054115b15611b4257601854611ad490600160201b900460ff166005612d1a565b6018805460ff928316600160201b0264ff000000001982168117909255611b02929182169116176005612d1a565b6018805460ff191660ff9283161790819055611b279162010000909104166005612d1a565b601860026101000a81548160ff021916908360ff1602179055505b611b4e85858584611e5a565b5050505050565b60008184841115611b795760405162461bcd60e51b815260040161087b9190612b91565b505050900390565b6000806000611b8e61204d565b9092509050611b9d82826112de565b9250505090565b60006109038284612c9c565b6000806000806000806000806000611bc78a6121f1565b9250925092506000806000611be58d8686611be0611b81565b61222d565b919f909e50909c50959a5093985091965092945050505050565b600e805460ff60a01b1916600160a01b1790556000611c1d30610ca6565b90506000601754601654601554611c349190612c9c565b611c3e9190612c9c565b90506000611c5860026015546112de90919063ffffffff16565b90506000611c66848361227d565b905047611c7282612289565b6000611c7e478361227d565b90506000611ca186611c9b601654856112d290919063ffffffff16565b906112de565b90506000611cbe87611c9b601754866112d290919063ffffffff16565b90506000611cd682611cd0868661227d565b9061227d565b6000601581905560168190556017819055600b5460405192935090916001600160a01b039091169085908381818185875af1925050503d8060008114611d38576040519150601f19603f3d011682016040523d82523d6000602084013e611d3d565b606091505b5050600c546040519192506001600160a01b0316908490600081818185875af1925050503d8060008114611d8d576040519150601f19603f3d011682016040523d82523d6000602084013e611d92565b606091505b505080915050611da288836123fb565b60408051888152602081018490529081018990527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a14715611e4157600b546040516001600160a01b03909116904790600081818185875af1925050503d8060008114611e36576040519150601f19603f3d011682016040523d82523d6000602084013e611e3b565b606091505b50909150505b5050600e805460ff60a01b191690555050505050505050565b80611e6757611e676124e4565b6001600160a01b03841660009081526005602052604090205460ff168015611ea857506001600160a01b03831660009081526005602052604090205460ff16155b15611ebd57611eb88484846125d2565b611fbb565b6001600160a01b03841660009081526005602052604090205460ff16158015611efe57506001600160a01b03831660009081526005602052604090205460ff165b15611f0e57611eb88484846126f8565b6001600160a01b03841660009081526005602052604090205460ff16158015611f5057506001600160a01b03831660009081526005602052604090205460ff16155b15611f6057611eb88484846127a1565b6001600160a01b03841660009081526005602052604090205460ff168015611fa057506001600160a01b03831660009081526005602052604090205460ff165b15611fb057611eb88484846127e5565b611fbb8484846127a1565b80612047576018805462ff00ff1966ff00ff0000000019821664ff0000000019600160381b840460ff908116600160301b02918216929092176501000000000066ff00000000000019909516909117939093048116600160201b029290921790811661010082048316908117630100000060ff1993909316919091179190910490911662010000021790555b50505050565b60115460009081906a52b7d2dcc80cd2e4000000825b600a548110156121b0578260016000600a848154811061208557612085612d8b565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806120f057508160026000600a84815481106120c9576120c9612d8b565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561210e575050601154936a52b7d2dcc80cd2e40000009350915050565b61215460016000600a848154811061212857612128612d8b565b60009182526020808320909101546001600160a01b03168352820192909252604001902054849061227d565b925061219c60026000600a848154811061217057612170612d8b565b60009182526020808320909101546001600160a01b03168352820192909252604001902054839061227d565b9150806121a881612d5a565b915050612063565b506011546121c9906a52b7d2dcc80cd2e40000006112de565b8210156121e8575050601154926a52b7d2dcc80cd2e400000092509050565b90939092509050565b60008060008061220085612858565b9050600061220d8661287a565b9050600061221f82611cd0898661227d565b979296509094509092505050565b600080808061223c88866112d2565b9050600061224a88876112d2565b9050600061225888886112d2565b9050600061226a82611cd0868661227d565b939b939a50919850919650505050505050565b60006109038284612d43565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106122be576122be612d8b565b6001600160a01b03928316602091820292909201810191909152600d54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561231257600080fd5b505afa158015612326573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061234a9190612a45565b8160018151811061235d5761235d612d8b565b6001600160a01b039283166020918202929092010152600d5461238391309116846112ea565b600d546001600160a01b031663791ac94783600084306123a54261012c611ba4565b6040518663ffffffff1660e01b81526004016123c5959493929190612c2b565b600060405180830381600087803b1580156123df57600080fd5b505af11580156123f3573d6000803e3d6000fd5b505050505050565b600d546124139030906001600160a01b0316846112ea565b600d546009546001600160a01b039182169163f305d719918491309187916000918291166124434261012c611ba4565b60405160e089901b6001600160e01b03191681526001600160a01b039687166004820152602481019590955260448501939093526064840191909152909216608482015260a481019190915260c4016060604051808303818588803b1580156124ab57600080fd5b505af11580156124bf573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611b4e9190612b63565b601854600160301b900460ff161580156125085750601854600160201b900460ff16155b8015612517575060185460ff16155b801561252c575060185462010000900460ff16155b1561253357565b6018805463ff00ff001967ff00ff000000000019821665ff000000000019600160301b840460ff908116600160381b0291821692909217600160201b67ff000000000000001990951690911793909304811665010000000000029290921790811663ff0000001961010083851602908116919091176201000061ff0019909316909117919091049091166301000000021766ff00ff00ff00ff19169055565b6000806000806000806125e487611bb0565b6001600160a01b038f16600090815260026020526040902054959b50939950919750955093509150612616908861227d565b6001600160a01b038a16600090815260026020908152604080832093909355600190522054612645908761227d565b6001600160a01b03808b1660009081526001602052604080822093909355908a16815220546126749086611ba4565b6001600160a01b038916600090815260016020526040902055612696816128be565b6126a08483612a04565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516126e591815260200190565b60405180910390a3505050505050505050565b60008060008060008061270a87611bb0565b6001600160a01b038f16600090815260016020526040902054959b5093995091975095509350915061273c908761227d565b6001600160a01b03808b16600090815260016020908152604080832094909455918b168152600290915220546127729084611ba4565b6001600160a01b0389166000908152600260209081526040808320939093556001905220546126749086611ba4565b6000806000806000806127b387611bb0565b6001600160a01b038f16600090815260016020526040902054959b50939950919750955093509150612645908761227d565b6000806000806000806127f787611bb0565b6001600160a01b038f16600090815260026020526040902054959b50939950919750955093509150612829908861227d565b6001600160a01b038a1660009081526002602090815260408083209390935560019052205461273c908761227d565b6018546000906107e290606490611c9b908590600160301b900460ff166112d2565b6018546000906107e290606490611c9b9060ff600160201b82048116916128aa9162010000820481169116612cb4565b6128b49190612cb4565b859060ff166112d2565b60185460ff600160401b82048116916128d8911683612cfb565b6128e29190612cd9565b601660008282546128f39190612c9c565b909155505060185460ff600160401b820481169161291a91600160201b9091041683612cfb565b6129249190612cd9565b601560008282546129359190612c9c565b909155505060185460ff600160401b820481169161295b91620100009091041683612cfb565b6129659190612cd9565b601760008282546129769190612c9c565b9091555060009050612986611b81565b9050600061299483836112d2565b306000908152600160205260409020549091506129b19082611ba4565b3060009081526001602090815260408083209390935560059052205460ff1615610e7357306000908152600260205260409020546129ef9084611ba4565b30600090815260026020526040902055505050565b601154612a11908361227d565b601155601254612a219082611ba4565b6012555050565b600060208284031215612a3a57600080fd5b813561090381612da1565b600060208284031215612a5757600080fd5b815161090381612da1565b60008060408385031215612a7557600080fd5b8235612a8081612da1565b91506020830135612a9081612da1565b809150509250929050565b600080600060608486031215612ab057600080fd5b8335612abb81612da1565b92506020840135612acb81612da1565b929592945050506040919091013590565b60008060408385031215612aef57600080fd5b8235612afa81612da1565b946020939093013593505050565b600060208284031215612b1a57600080fd5b815161090381612db6565b600060208284031215612b3757600080fd5b5035919050565b60008060408385031215612b5157600080fd5b823591506020830135612a9081612db6565b600080600060608486031215612b7857600080fd5b8351925060208401519150604084015190509250925092565b600060208083528351808285015260005b81811015612bbe57858101830151858201604001528201612ba2565b81811115612bd0576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526025908201527f45524332304f776e61626c653a2063616c6c6572206973206e6f74207468652060408201526437bbb732b960d91b606082015260800190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612c7b5784516001600160a01b031683529383019391830191600101612c56565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115612caf57612caf612d75565b500190565b600060ff821660ff84168060ff03821115612cd157612cd1612d75565b019392505050565b600082612cf657634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612d1557612d15612d75565b500290565b600060ff821660ff84168160ff0481118215151615612d3b57612d3b612d75565b029392505050565b600082821015612d5557612d55612d75565b500390565b6000600019821415612d6e57612d6e612d75565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114610a9c57600080fd5b8015158114610a9c57600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220267e48ceabf7b5cd587801980b1c253d79606193cecbe619d155695eade35f9c64736f6c63430008070033
Deployed Bytecode Sourcemap
12912:22064:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16171:100;;;;;;;;;;-1:-1:-1;16250:13:0;;;;;;;;;;;;-1:-1:-1;;;16250:13:0;;;;16171:100;;;;;;;:::i;:::-;;;;;;;;17568:161;;;;;;;;;;-1:-1:-1;17568:161:0;;;;;:::i;:::-;;:::i;:::-;;;4763:14:1;;4756:22;4738:41;;4726:2;4711:18;17568:161:0;4598:187:1;17125:115:0;;;;;;;;;;-1:-1:-1;17208:24:0;;17125:115;;;12080:25:1;;;12068:2;12053:18;17125:115:0;11934:177:1;16476:95:0;;;;;;;;;;-1:-1:-1;14242:12:0;16476:95;;14118:33;;;;;;;;;;;;;;;;17735:329;;;;;;;;;;-1:-1:-1;17735:329:0;;;;;:::i;:::-;;:::i;30254:79::-;;;;;;;;;;;;;:::i;:::-;;19195:241;;;;;;;;;;-1:-1:-1;19195:241:0;;;;;:::i;:::-;;:::i;16379:91::-;;;;;;;;;;-1:-1:-1;16379:91:0;;13164:1;13567:36:1;;13555:2;13540:18;16379:91:0;13425:184:1;29875:177:0;;;;;;;;;;;;;:::i;17016:103::-;;;;;;;;;;-1:-1:-1;17093:18:0;;17016:103;;18070:218;;;;;;;;;;-1:-1:-1;18070:218:0;;;;;:::i;:::-;;:::i;13756:33::-;;;;;;;;;;-1:-1:-1;13756:33:0;;;;-1:-1:-1;;;;;13756:33:0;;;;;;-1:-1:-1;;;;;3130:32:1;;;3112:51;;3100:2;3085:18;13756:33:0;2966:203:1;16895:115:0;;;;;;;;;;-1:-1:-1;16978:24:0;;16895:115;;22907:111;;;;;;;;;;-1:-1:-1;22907:111:0;;;;;:::i;:::-;;:::i;18745:444::-;;;;;;;;;;-1:-1:-1;18745:444:0;;;;;:::i;:::-;;:::i;34778:193::-;;;;;;;;;;;;;:::i;23024:124::-;;;;;;;;;;-1:-1:-1;23024:124:0;;;;;:::i;:::-;-1:-1:-1;;;;;23113:27:0;23089:4;23113:27;;;:18;:27;;;;;;;;;23024:124;30339:80;;;;;;;;;;;;;:::i;26632:148::-;;;;;;;;;;-1:-1:-1;26632:148:0;;;;;:::i;:::-;;:::i;30515:86::-;;;;;;;;;;;;;:::i;26481:148::-;;;;;;;;;;-1:-1:-1;26481:148:0;;;;;:::i;:::-;;:::i;30155:93::-;;;;;;;;;;;;;:::i;30058:91::-;;;;;;;;;;;;;:::i;16577:198::-;;;;;;;;;;-1:-1:-1;16577:198:0;;;;;:::i;:::-;;:::i;765:148::-;;;;;;;;;;;;;:::i;13560:43::-;;;;;;;;;;-1:-1:-1;13560:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;18619:120;;;;;;;;;;-1:-1:-1;18619:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;18711:20:0;18687:4;18711:20;;;:11;:20;;;;;;;;;18619:120;34542:229;;;;;;;;;;-1:-1:-1;34542:229:0;;;;;:::i;:::-;;:::i;537:87::-;;;;;;;;;;-1:-1:-1;583:7:0;610:6;-1:-1:-1;;;;;610:6:0;537:87;;29220:398;;;;;;;;;;-1:-1:-1;29220:398:0;;;;;:::i;:::-;;:::i;16277:96::-;;;;;;;;;;-1:-1:-1;16358:7:0;;;;;;;;;;;;-1:-1:-1;;;16358:7:0;;;;16277:96;;18294:319;;;;;;;;;;-1:-1:-1;18294:319:0;;;;;:::i;:::-;;:::i;13710:39::-;;;;;;;;;;-1:-1:-1;13710:39:0;;;;-1:-1:-1;;;;;13710:39:0;;;17246:167;;;;;;;;;;-1:-1:-1;17246:167:0;;;;;:::i;:::-;;:::i;29624:245::-;;;;;;;;;;-1:-1:-1;29624:245:0;;;;;:::i;:::-;;:::i;17419:143::-;;;;;;;;;;-1:-1:-1;17419:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;17527:18:0;;;17500:7;17527:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;17419:143;16781:108;;;;;;;;;;-1:-1:-1;16862:19:0;;16781:108;;14074:37;;;;;;;;;;;;;;;;921:249;;;;;;;;;;-1:-1:-1;921:249:0;;;;;:::i;:::-;;:::i;30425:84::-;;;;;;;;;;;;;:::i;26259:219::-;;;;;;;;;;-1:-1:-1;26259:219:0;;;;;:::i;:::-;;:::i;17568:161::-;17643:4;17660:39;190:10;17683:7;17692:6;17660:8;:39::i;:::-;-1:-1:-1;17717:4:0;17568:161;;;;;:::o;17735:329::-;17831:4;17848:36;17858:6;17866:9;17877:6;17848:9;:36::i;:::-;17895:139;17904:6;190:10;17934:89;17972:6;17934:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17934:19:0;;;;;;:11;:19;;;;;;;;190:10;17934:33;;;;;;;;;;:37;:89::i;:::-;17895:8;:139::i;:::-;-1:-1:-1;18052:4:0;17735:329;;;;;:::o;30254:79::-;583:7;610:6;-1:-1:-1;;;;;610:6:0;190:10;672:23;664:73;;;;-1:-1:-1;;;664:73:0;;;;;;;:::i;:::-;;;;;;;;;30308:10:::1;:17:::0;;-1:-1:-1;;;;30308:17:0::1;-1:-1:-1::0;;;30308:17:0::1;::::0;;30254:79::o;19195:241::-;19262:7;19301;;19290;:18;;19282:61;;;;-1:-1:-1;;;19282:61:0;;9003:2:1;19282:61:0;;;8985:21:1;9042:2;9022:18;;;9015:30;9081:32;9061:18;;;9054:60;9131:18;;19282:61:0;8801:354:1;19282:61:0;19354:19;19376:10;:8;:10::i;:::-;19354:32;-1:-1:-1;19404:24:0;:7;19354:32;19404:11;:24::i;:::-;19397:31;19195:241;-1:-1:-1;;;19195:241:0:o;29875:177::-;583:7;610:6;-1:-1:-1;;;;;610:6:0;190:10;672:23;664:73;;;;-1:-1:-1;;;664:73:0;;;;;;;:::i;:::-;29931:16:::1;:23:::0;;-1:-1:-1;;;;29931:23:0::1;-1:-1:-1::0;;;29931:23:0::1;::::0;;29875:177::o;18070:218::-;190:10;18158:4;18207:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;18207:34:0;;;;;;;;;;18158:4;;18175:83;;18198:7;;18207:50;;18246:10;18207:38;:50::i;22907:111::-;583:7;610:6;-1:-1:-1;;;;;610:6:0;190:10;672:23;664:73;;;;-1:-1:-1;;;664:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22976:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;22976:34:0::1;23006:4;22976:34;::::0;;22907:111::o;18745:444::-;18836:7;14242:12;18864:7;:18;;18856:59;;;;-1:-1:-1;;;18856:59:0;;5953:2:1;18856:59:0;;;5935:21:1;5992:2;5972:18;;;5965:30;6031;6011:18;;;6004:58;6079:18;;18856:59:0;5751:352:1;18856:59:0;18931:17;18926:256;;18966:15;18995:19;19006:7;18995:10;:19::i;:::-;-1:-1:-1;18965:49:0;;-1:-1:-1;19029:14:0;;-1:-1:-1;;;;;19029:14:0;18926:256;19079:23;19114:19;19125:7;19114:10;:19::i;:::-;-1:-1:-1;19076:57:0;;-1:-1:-1;19148:22:0;;-1:-1:-1;;;;;19148:22:0;34778:193;34914:16;;34906:57;;-1:-1:-1;;;;;34914:16:0;;;;34941:21;34906:57;;;;;34914:16;34906:57;34914:16;34906:57;34941:21;34914:16;34906:57;;;;;;;;;;;;;;;;;;;;;34778:193::o;30339:80::-;583:7;610:6;-1:-1:-1;;;;;610:6:0;190:10;672:23;664:73;;;;-1:-1:-1;;;664:73:0;;;;;;;:::i;:::-;30393:10:::1;:18:::0;;-1:-1:-1;;;;30393:18:0::1;::::0;;30339:80::o;26632:148::-;583:7;610:6;-1:-1:-1;;;;;610:6:0;190:10;672:23;664:73;;;;-1:-1:-1;;;664:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26706:20:0;::::1;26729:5;26706:20:::0;;;:11:::1;:20;::::0;;;;;:28;;-1:-1:-1;;26706:28:0::1;::::0;;26750:22;::::1;::::0;26729:5;26750:22:::1;26632:148:::0;:::o;30515:86::-;583:7;610:6;-1:-1:-1;;;;;610:6:0;190:10;672:23;664:73;;;;-1:-1:-1;;;664:73:0;;;;;;;:::i;:::-;30573:12:::1;:20:::0;;-1:-1:-1;;;;30573:20:0::1;::::0;;30515:86::o;26481:148::-;583:7;610:6;-1:-1:-1;;;;;610:6:0;190:10;672:23;664:73;;;;-1:-1:-1;;;664:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26551:13:0;::::1;;::::0;;;:6:::1;:13;::::0;;;;;::::1;;26543:46;;;::::0;-1:-1:-1;;;26543:46:0;;7480:2:1;26543:46:0::1;::::0;::::1;7462:21:1::0;7519:2;7499:18;;;7492:30;-1:-1:-1;;;7538:18:1;;;7531:50;7598:18;;26543:46:0::1;7278:344:1::0;26543:46:0::1;-1:-1:-1::0;;;;;26600:13:0::1;26616:5;26600:13:::0;;;:6:::1;:13;::::0;;;;:21;;-1:-1:-1;;26600:21:0::1;::::0;;26481:148::o;30155:93::-;583:7;610:6;-1:-1:-1;;;;;610:6:0;190:10;672:23;664:73;;;;-1:-1:-1;;;664:73:0;;;;;;;:::i;:::-;30211:21:::1;:29:::0;;-1:-1:-1;;;;30211:29:0::1;::::0;;30155:93::o;30058:91::-;583:7;610:6;-1:-1:-1;;;;;610:6:0;190:10;672:23;664:73;;;;-1:-1:-1;;;664:73:0;;;;;;;:::i;:::-;30113:21:::1;:28:::0;;-1:-1:-1;;;;30113:28:0::1;-1:-1:-1::0;;;30113:28:0::1;::::0;;30058:91::o;16577:198::-;-1:-1:-1;;;;;16667:20:0;;16643:7;16667:20;;;:11;:20;;;;;;;;16663:49;;;-1:-1:-1;;;;;;16696:16:0;;;;;:7;:16;;;;;;;16577:198::o;16663:49::-;-1:-1:-1;;;;;16750:16:0;;;;;;:7;:16;;;;;;16730:37;;:19;:37::i;765:148::-;583:7;610:6;-1:-1:-1;;;;;610:6:0;190:10;672:23;664:73;;;;-1:-1:-1;;;664:73:0;;;;;;;:::i;:::-;872:1:::1;856:6:::0;;835:40:::1;::::0;-1:-1:-1;;;;;856:6:0;;::::1;::::0;835:40:::1;::::0;872:1;;835:40:::1;903:1;886:19:::0;;-1:-1:-1;;;;;;886:19:0::1;::::0;;765:148::o;34542:229::-;-1:-1:-1;;;;;34641:29:0;;34665:4;34641:29;;34633:68;;;;-1:-1:-1;;;34633:68:0;;11010:2:1;34633:68:0;;;10992:21:1;11049:2;11029:18;;;11022:30;11088:28;11068:18;;;11061:56;11134:18;;34633:68:0;10808:350:1;34633:68:0;34719:12;-1:-1:-1;;;;;34712:29:0;;34742:7;583;610:6;-1:-1:-1;;;;;610:6:0;;537:87;34742:7;34712:51;;-1:-1:-1;;;;;;34712:51:0;;;;;;;-1:-1:-1;;;;;3899:32:1;;;34712:51:0;;;3881::1;3948:18;;;3941:34;;;3854:18;;34712:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34542:229;;:::o;29220:398::-;583:7;610:6;-1:-1:-1;;;;;610:6:0;190:10;672:23;664:73;;;;-1:-1:-1;;;664:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29314:31:0;::::1;29306:81;;;::::0;-1:-1:-1;;;29306:81:0;;9362:2:1;29306:81:0::1;::::0;::::1;9344:21:1::0;9401:2;9381:18;;;9374:30;9440:34;9420:18;;;9413:62;-1:-1:-1;;;9491:18:1;;;9484:35;9536:19;;29306:81:0::1;9160:401:1::0;29306:81:0::1;29417:16;::::0;;-1:-1:-1;;;;;29417:16:0;;::::1;29437:5;29398:36:::0;;;:18:::1;:36;::::0;;;;;;;:44;;-1:-1:-1;;29398:44:0;;::::1;::::0;;;29453:45;;-1:-1:-1;;;;;;29453:45:0::1;::::0;;::::1;::::0;;::::1;::::0;;;29509:36;;;;;;;:43;;;;::::1;-1:-1:-1::0;29509:43:0::1;::::0;;;29568:42;3112:51:1;;;29568:42:0::1;::::0;3085:18:1;29568:42:0::1;;;;;;;;29220:398:::0;:::o;18294:319::-;18387:4;18404:179;190:10;18454:7;18476:96;18515:15;18476:96;;;;;;;;;;;;;;;;;190:10;18476:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;18476:34:0;;;;;;;;;;;;:38;:96::i;17246:167::-;17324:4;17341:42;190:10;17365:9;17376:6;17341:9;:42::i;29624:245::-;583:7;610:6;-1:-1:-1;;;;;610:6:0;190:10;672:23;664:73;;;;-1:-1:-1;;;664:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29704:25:0;::::1;29696:75;;;::::0;-1:-1:-1;;;29696:75:0;;8597:2:1;29696:75:0::1;::::0;::::1;8579:21:1::0;8636:2;8616:18;;;8609:30;8675:34;8655:18;;;8648:62;-1:-1:-1;;;8726:18:1;;;8719:35;8771:19;;29696:75:0::1;8395:401:1::0;29696:75:0::1;29782:10;:33:::0;;-1:-1:-1;;;;;;29782:33:0::1;-1:-1:-1::0;;;;;29782:33:0;::::1;::::0;;::::1;::::0;;;29831:30:::1;::::0;3112:51:1;;;29831:30:0::1;::::0;3100:2:1;3085:18;29831:30:0::1;2966:203:1::0;921:249:0;583:7;610:6;-1:-1:-1;;;;;610:6:0;190:10;672:23;664:73;;;;-1:-1:-1;;;664:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1010:22:0;::::1;1002:78;;;::::0;-1:-1:-1;;;1002:78:0;;9768:2:1;1002:78:0::1;::::0;::::1;9750:21:1::0;9807:2;9787:18;;;9780:30;9846:34;9826:18;;;9819:62;-1:-1:-1;;;9897:18:1;;;9890:41;9948:19;;1002:78:0::1;9566:407:1::0;1002:78:0::1;1117:6;::::0;;1096:38:::1;::::0;-1:-1:-1;;;;;1096:38:0;;::::1;::::0;1117:6;::::1;::::0;1096:38:::1;::::0;::::1;1145:6;:17:::0;;-1:-1:-1;;;;;;1145:17:0::1;-1:-1:-1::0;;;;;1145:17:0;;;::::1;::::0;;;::::1;::::0;;921:249::o;30425:84::-;583:7;610:6;-1:-1:-1;;;;;610:6:0;190:10;672:23;664:73;;;;-1:-1:-1;;;664:73:0;;;;;;;:::i;:::-;30482:12:::1;:19:::0;;-1:-1:-1;;;;30482:19:0::1;-1:-1:-1::0;;;30482:19:0::1;::::0;;30425:84::o;26259:219::-;583:7;610:6;-1:-1:-1;;;;;610:6:0;190:10;672:23;664:73;;;;-1:-1:-1;;;664:73:0;;;;;;;:::i;:::-;26335:42:::1;-1:-1:-1::0;;;;;26326:51:0;::::1;;;26318:60;;;::::0;::::1;;-1:-1:-1::0;;;;;26398:13:0;::::1;;::::0;;;:6:::1;:13;::::0;;;;;::::1;;26397:14;26389:50;;;::::0;-1:-1:-1;;;26389:50:0;;7128:2:1;26389:50:0::1;::::0;::::1;7110:21:1::0;7167:2;7147:18;;;7140:30;7206:25;7186:18;;;7179:53;7249:18;;26389:50:0::1;6926:347:1::0;26389:50:0::1;-1:-1:-1::0;;;;;26450:13:0::1;;::::0;;;:6:::1;:13;::::0;;;;:20;;-1:-1:-1;;26450:20:0::1;26466:4;26450:20;::::0;;26259:219::o;2901:98::-;2959:7;2986:5;2990:1;2986;:5;:::i;3005:98::-;3063:7;3090:5;3094:1;3090;:5;:::i;23154:325::-;-1:-1:-1;;;;;23245:19:0;;23237:64;;;;-1:-1:-1;;;23237:64:0;;11775:2:1;23237:64:0;;;11757:21:1;;;11794:18;;;11787:30;11853:34;11833:18;;;11826:62;11905:18;;23237:64:0;11573:356:1;23237:64:0;-1:-1:-1;;;;;23320:21:0;;23312:64;;;;-1:-1:-1;;;23312:64:0;;5594:2:1;23312:64:0;;;5576:21:1;5633:2;5613:18;;;5606:30;5672:32;5652:18;;;5645:60;5722:18;;23312:64:0;5392:354:1;23312:64:0;-1:-1:-1;;;;;23387:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;23439:32;;12080:25:1;;;23439:32:0;;12053:18:1;23439:32:0;;;;;;;23154:325;;;:::o;23485:2256::-;-1:-1:-1;;;;;23571:18:0;;23563:64;;;;-1:-1:-1;;;23563:64:0;;6726:2:1;23563:64:0;;;6708:21:1;6765:2;6745:18;;;6738:30;6804:34;6784:18;;;6777:62;-1:-1:-1;;;6855:18:1;;;6848:31;6896:19;;23563:64:0;6524:397:1;23563:64:0;-1:-1:-1;;;;;23646:16:0;;23638:60;;;;-1:-1:-1;;;23638:60:0;;7829:2:1;23638:60:0;;;7811:21:1;7868:2;7848:18;;;7841:30;7907:33;7887:18;;;7880:61;7958:18;;23638:60:0;7627:355:1;23638:60:0;23726:1;23717:6;:10;23709:64;;;;-1:-1:-1;;;23709:64:0;;11365:2:1;23709:64:0;;;11347:21:1;11404:2;11384:18;;;11377:30;11443:34;11423:18;;;11416:62;-1:-1:-1;;;11494:18:1;;;11487:39;11543:19;;23709:64:0;11163:405:1;23709:64:0;-1:-1:-1;;;;;23787:12:0;;;;;;:6;:12;;;;;;;;23786:13;23778:22;;;;;;-1:-1:-1;;;;;23814:17:0;;;;;;:11;:17;;;;;;;;23813:18;;:59;;;23857:15;23835:18;;:37;;23813:59;23805:127;;;;-1:-1:-1;;;23805:127:0;;10586:2:1;23805:127:0;;;10568:21:1;10625:2;10605:18;;;10598:30;10664:34;10644:18;;;10637:62;10735:25;10715:18;;;10708:53;10778:19;;23805:127:0;10384:419:1;23805:127:0;23941:12;;-1:-1:-1;;;23941:12:0;;;;:20;;23957:4;23941:20;:49;;;;-1:-1:-1;;;;;;23967:23:0;;;;;;:19;:23;;;;;;;;23965:25;23941:49;23937:174;;;24041:14;;24031:6;24015:13;24025:2;24015:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;24007:92;;;;-1:-1:-1;;;24007:92:0;;8189:2:1;24007:92:0;;;8171:21:1;8228:2;8208:18;;;8201:30;8267:34;8247:18;;;8240:62;-1:-1:-1;;;8318:18:1;;;8311:37;8365:19;;24007:92:0;7987:403:1;24007:92:0;24125:10;;-1:-1:-1;;;24125:10:0;;;;:18;;24139:4;24125:18;:39;;;;-1:-1:-1;24155:9:0;;-1:-1:-1;;;;;24147:17:0;;;24155:9;;24147:17;24125:39;24121:150;;;24190:23;24180:6;:33;;24172:93;;;;-1:-1:-1;;;24172:93:0;;6310:2:1;24172:93:0;;;6292:21:1;6349:2;6329:18;;;6322:30;6388:34;6368:18;;;6361:62;-1:-1:-1;;;6439:18:1;;;6432:45;6494:19;;24172:93:0;6108:411:1;24172:93:0;24284:16;;-1:-1:-1;;;24284:16:0;;;;:24;;24304:4;24284:24;24281:644;;;24436:11;:26;;-1:-1:-1;;;;;;24436:26:0;24378:42;24436:26;;;;;;24507:22;;;-1:-1:-1;;;24507:22:0;;;;24378:42;;24507:20;;:22;;;;;;;;;;;;;;24378:42;24507:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24489:49:0;;24547:4;24554:12;-1:-1:-1;;;;;24554:17:0;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24489:85;;-1:-1:-1;;;;;;24489:85:0;;;;;;;-1:-1:-1;;;;;3628:15:1;;;24489:85:0;;;3610:34:1;3680:15;;3660:18;;;3653:43;3545:18;;24489:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24477:9;:97;;-1:-1:-1;;;;;;24477:97:0;-1:-1:-1;;;;;24477:97:0;;;;;;;;;;24610:12;24589:18;:33;24658:26;:15;24676:8;24658:26;:::i;:::-;24637:18;:47;-1:-1:-1;24727:9:0;;;-1:-1:-1;;;;;24727:9:0;;;24699:39;;;;:19;:39;;;;;;:46;;-1:-1:-1;;24699:46:0;;;24741:4;24699:46;;;;;;24788:11;;;;;24760:41;;;;:48;;;;;;;;24823:17;;-1:-1:-1;;;;24889:24:0;-1:-1:-1;;;24889:24:0;;;24281:644;583:7;610:6;-1:-1:-1;;;;;24932:15:0;;;610:6;;24932:15;;;;:34;;-1:-1:-1;24957:9:0;;-1:-1:-1;;;;;24951:15:0;;;24957:9;;24951:15;;24932:34;:72;;;;;24986:18;;24970:12;:34;24932:72;24929:145;;;-1:-1:-1;;;;;25011:15:0;;;;;;:11;:15;;;;;;:22;;-1:-1:-1;;25011:22:0;25029:4;25011:22;;;25053:15;;;25011;25053;24929:145;25084:28;25115:24;25133:4;25115:9;:24::i;:::-;25155:16;;25084:55;;-1:-1:-1;;;;25155:16:0;;;;25154:17;:36;;;;-1:-1:-1;25181:9:0;;-1:-1:-1;;;;;25175:15:0;;;25181:9;;25175:15;25154:36;:61;;;;-1:-1:-1;25194:21:0;;-1:-1:-1;;;25194:21:0;;;;25154:61;25150:177;;;25260:19;;25236:20;:43;25232:84;;25288:12;:10;:12::i;:::-;-1:-1:-1;;;;;25371:24:0;;25337:12;25371:24;;;:18;:24;;;;;;25352:4;;25371:24;;;:50;;-1:-1:-1;;;;;;25399:22:0;;;;;;:18;:22;;;;;;;;25371:50;25367:98;;;-1:-1:-1;25448:5:0;25367:98;-1:-1:-1;;;;;25472:17:0;;;;;;:11;:17;;;;;;;;:57;;;;;25514:15;25493:18;;:36;25472:57;25469:213;;;25563:7;;:11;;-1:-1:-1;;;25563:7:0;;;;25573:1;25563:11;:::i;:::-;25553:7;:21;;;;;;-1:-1:-1;;;25553:21:0;-1:-1:-1;;25553:21:0;;;;;;;25607:11;;:7;;;;;;25617:1;25607:11;:::i;:::-;25597:7;:21;;-1:-1:-1;;25597:21:0;;;;;;;;;;25651:11;;:7;;;;;25661:1;25651:11;:::i;:::-;25641:7;;:21;;;;;;;;;;;;;;;;;;25469:213;25692:41;25707:4;25713:2;25717:6;25725:7;25692:14;:41::i;:::-;23552:2189;;23485:2256;;;:::o;3213:206::-;3299:7;3360:12;3352:6;;;;3344:29;;;;-1:-1:-1;;;3344:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;3395:5:0;;;3213:206::o;20778:164::-;20820:7;20841:15;20858;20877:19;:17;:19::i;:::-;20840:56;;-1:-1:-1;20840:56:0;-1:-1:-1;20914:20:0;20840:56;;20914:11;:20::i;:::-;20907:27;;;;20778:164;:::o;2693:98::-;2751:7;2778:5;2782:1;2778;:5;:::i;19595:414::-;19654:7;19662;19670;19678;19686;19694;19715:23;19740:12;19754:18;19776:20;19788:7;19776:11;:20::i;:::-;19714:82;;;;;;19808:15;19825:23;19850:12;19866:50;19878:7;19887:4;19893:10;19905;:8;:10::i;:::-;19866:11;:50::i;:::-;19807:109;;;;-1:-1:-1;19807:109:0;;-1:-1:-1;19967:15:0;;-1:-1:-1;19984:4:0;;-1:-1:-1;19990:10:0;;-1:-1:-1;19595:414:0;;-1:-1:-1;;;;;19595:414:0:o;26783:1509::-;15449:16;:23;;-1:-1:-1;;;;15449:23:0;-1:-1:-1;;;15449:23:0;;;;26862:24:::1;26880:4;26862:9;:24::i;:::-;26836:50;;26897:25;26979:18;;26952:24;;26925;;:51;;;;:::i;:::-;:72;;;;:::i;:::-;26897:100;;27008:26;27037:31;27066:1;27037:24;;:28;;:31;;;;:::i;:::-;27008:60:::0;-1:-1:-1;27118:26:0::1;27147:39;:15:::0;27008:60;27147:19:::1;:39::i;:::-;27118:68:::0;-1:-1:-1;27225:21:0::1;27257:36;27118:68:::0;27257:16:::1;:36::i;:::-;27305:18;27326:44;:21;27352:17:::0;27326:25:::1;:44::i;:::-;27305:65;;27381:23;27407:63;27452:17;27407:40;27422:24;;27407:10;:14;;:40;;;;:::i;:::-;:44:::0;::::1;:63::i;:::-;27381:89;;27481:17;27501:57;27540:17;27501:34;27516:18;;27501:10;:14;;:34;;;;:::i;:57::-;27481:77:::0;-1:-1:-1;27569:23:0::1;27595:46;27481:77:::0;27595:31:::1;:10:::0;27610:15;27595:14:::1;:31::i;:::-;:35:::0;::::1;:46::i;:::-;27679:1;27652:24;:28:::0;;;27691:24:::1;:28:::0;;;27730:18:::1;:22:::0;;;27789:16:::1;::::0;27781:58:::1;::::0;27569:72;;-1:-1:-1;27679:1:0;;-1:-1:-1;;;;;27789:16:0;;::::1;::::0;27819:15;;27679:1;27781:58;27679:1;27781:58;27819:15;27789:16;27781:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;27871:10:0::1;::::0;27863:46:::1;::::0;27763:76;;-1:-1:-1;;;;;;27871:10:0::1;::::0;27895:9;;27863:46:::1;::::0;;;27895:9;27871:10;27863:46:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27850:59;;;;;27920:49;27933:18;27953:15;27920:12;:49::i;:::-;27985:71;::::0;;13303:25:1;;;13359:2;13344:18;;13337:34;;;13387:18;;;13380:34;;;27985:71:0::1;::::0;13291:2:1;13276:18;27985:71:0::1;;;;;;;28147:21;:33:::0;28144:141:::1;;28217:16;::::0;28209:64:::1;::::0;-1:-1:-1;;;;;28217:16:0;;::::1;::::0;28247:21:::1;::::0;28209:64:::1;::::0;;;28247:21;28217:16;28209:64:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;28196:77:0;;-1:-1:-1;;28144:141:0::1;-1:-1:-1::0;;15495:16:0;:24;;-1:-1:-1;;;;15495:24:0;;;-1:-1:-1;;;;;;;;26783:1509:0:o;30607:788::-;30717:7;30712:28;;30726:14;:12;:14::i;:::-;-1:-1:-1;;;;;30755:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;30779:22:0;;;;;;:11;:22;;;;;;;;30778:23;30755:46;30751:597;;;30818:48;30840:6;30848:9;30859:6;30818:21;:48::i;:::-;30751:597;;;-1:-1:-1;;;;;30889:19:0;;;;;;:11;:19;;;;;;;;30888:20;:46;;;;-1:-1:-1;;;;;;30912:22:0;;;;;;:11;:22;;;;;;;;30888:46;30884:464;;;30951:46;30971:6;30979:9;30990:6;30951:19;:46::i;30884:464::-;-1:-1:-1;;;;;31020:19:0;;;;;;:11;:19;;;;;;;;31019:20;:47;;;;-1:-1:-1;;;;;;31044:22:0;;;;;;:11;:22;;;;;;;;31043:23;31019:47;31015:333;;;31083:44;31101:6;31109:9;31120:6;31083:17;:44::i;31015:333::-;-1:-1:-1;;;;;31149:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;31172:22:0;;;;;;:11;:22;;;;;;;;31149:45;31145:203;;;31211:48;31233:6;31241:9;31252:6;31211:21;:48::i;31145:203::-;31292:44;31310:6;31318:9;31329:6;31292:17;:44::i;:::-;31363:7;31358:29;;22770:15;;;-1:-1:-1;;;;22796:25:0;;-1:-1:-1;;;;;22770:15:0;;;;;;-1:-1:-1;;;22760:25:0;22796;;;;;;;22806:15;-1:-1:-1;;22760:25:0;;;;;;22806:15;;;;;;-1:-1:-1;;;22796:25:0;;;;;22868;;;22770:15;22842;;;;22868:25;;;22878:15;-1:-1:-1;;22832:25:0;;;;;;;;22878:15;;;;;;;22868:25;;;;;31372:15;30607:788;;;;:::o;20948:556::-;21046:7;;20999;;;;14242:12;20999:7;21100:289;21124:9;:16;21120:20;;21100:289;;;21190:7;21166;:21;21174:9;21184:1;21174:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;21174:12:0;21166:21;;;;;;;;;;;;;:31;;:66;;;21225:7;21201;:21;21209:9;21219:1;21209:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;21209:12:0;21201:21;;;;;;;;;;;;;:31;21166:66;21162:97;;;-1:-1:-1;;21242:7:0;;;14242:12;;-1:-1:-1;20948:556:0;-1:-1:-1;;20948:556:0:o;21162:97::-;21284:34;21296:7;:21;21304:9;21314:1;21304:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;21304:12:0;21296:21;;;;;;;;;;;;;21284:7;;:11;:34::i;:::-;21274:44;;21343:34;21355:7;:21;21363:9;21373:1;21363:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;21363:12:0;21355:21;;;;;;;;;;;;;21343:7;;:11;:34::i;:::-;21333:44;-1:-1:-1;21142:3:0;;;;:::i;:::-;;;;21100:289;;;-1:-1:-1;21413:7:0;;:20;;14242:12;21413:11;:20::i;:::-;21403:7;:30;21399:61;;;-1:-1:-1;;21443:7:0;;;14242:12;;-1:-1:-1;20948:556:0;-1:-1:-1;20948:556:0:o;21399:61::-;21479:7;;21488;;-1:-1:-1;20948:556:0;-1:-1:-1;20948:556:0:o;20015:327::-;20074:7;20082;20090;20110:12;20125:24;20141:7;20125:15;:24::i;:::-;20110:39;;20160:18;20181:30;20203:7;20181:21;:30::i;:::-;20160:51;-1:-1:-1;20222:23:0;20248:33;20160:51;20248:17;:7;20260:4;20248:11;:17::i;:33::-;20222:59;20317:4;;-1:-1:-1;20323:10:0;;-1:-1:-1;20015:327:0;;-1:-1:-1;;;20015:327:0:o;20348:424::-;20460:7;;;;20514:24;:7;20526:11;20514;:24::i;:::-;20496:42;-1:-1:-1;20549:12:0;20564:21;:4;20573:11;20564:8;:21::i;:::-;20549:36;-1:-1:-1;20596:18:0;20617:27;:10;20632:11;20617:14;:27::i;:::-;20596:48;-1:-1:-1;20655:23:0;20681:33;20596:48;20681:17;:7;20693:4;20681:11;:17::i;:33::-;20733:7;;;;-1:-1:-1;20759:4:0;;-1:-1:-1;20348:424:0;;-1:-1:-1;;;;;;;20348:424:0:o;2797:98::-;2855:7;2882:5;2886:1;2882;:5;:::i;28300:496::-;28390:16;;;28404:1;28390:16;;;;;;;;28366:21;;28390:16;;;;;;;;;;-1:-1:-1;28390:16:0;28366:40;;28435:4;28417;28422:1;28417:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28417:23:0;;;:7;;;;;;;;;;:23;;;;28461:11;;:18;;;-1:-1:-1;;;28461:18:0;;;;:11;;;;;:16;;:18;;;;;28417:7;;28461:18;;;;;:11;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28451:4;28456:1;28451:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28451:28:0;;;:7;;;;;;;;;:28;28522:11;;28490:58;;28507:4;;28522:11;28536;28490:8;:58::i;:::-;28559:11;;-1:-1:-1;;;;;28559:11:0;:62;28636:11;28559;28706:4;28733;28753:24;:15;28773:3;28753:19;:24::i;:::-;28559:229;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28355:441;28300:496;:::o;28802:412::-;28915:11;;28883:58;;28900:4;;-1:-1:-1;;;;;28915:11:0;28929;28883:8;:58::i;:::-;28952:11;;29152:4;;-1:-1:-1;;;;;28952:11:0;;;;:27;;28987:9;;29020:4;;29040:11;;28952;;;;29152:4;29171:24;:15;29191:3;29171:19;:24::i;:::-;28952:254;;;;;;-1:-1:-1;;;;;;28952:254:0;;;-1:-1:-1;;;;;4345:15:1;;;28952:254:0;;;4327:34:1;4377:18;;;4370:34;;;;4420:18;;;4413:34;;;;4463:18;;;4456:34;;;;4527:15;;;4506:19;;;4499:44;4559:19;;;4552:35;;;;4261:19;;28952:254:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;22351:359::-;22398:7;;-1:-1:-1;;;22398:7:0;;;;:12;:28;;;;-1:-1:-1;22414:7:0;;-1:-1:-1;;;22414:7:0;;;;:12;22398:28;:44;;;;-1:-1:-1;22430:7:0;;;;:12;22398:44;:60;;;;-1:-1:-1;22446:7:0;;;;;;;:12;22398:60;22394:73;;;22351:359::o;22394:73::-;22497:7;;;-1:-1:-1;;;;22515:25:0;;-1:-1:-1;;;;;22497:7:0;;;;;;-1:-1:-1;;;22479:25:0;22515;;;;;;;-1:-1:-1;;;;;22479:25:0;;;;;;22533:7;;;;;;22515:25;;;;;;22587;;;-1:-1:-1;;22497:7:0;22569;;;22551:25;22587;;;;;;;22605:7;-1:-1:-1;;22551:25:0;;;;;;22605:7;;;;;;;22587:25;;;-1:-1:-1;;22691:11:0;;;22351:359::o;32664:650::-;32779:15;32809:23;32847:12;32874:23;32912:12;32939:18;32971:19;32982:7;32971:10;:19::i;:::-;-1:-1:-1;;;;;33019:15:0;;;;;;:7;:15;;;;;;32764:226;;-1:-1:-1;32764:226:0;;-1:-1:-1;32764:226:0;;-1:-1:-1;32764:226:0;-1:-1:-1;32764:226:0;-1:-1:-1;32764:226:0;-1:-1:-1;33019:28:0;;33039:7;33019:19;:28::i;:::-;-1:-1:-1;;;;;33001:15:0;;;;;;:7;:15;;;;;;;;:46;;;;33076:7;:15;;;;:28;;33096:7;33076:19;:28::i;:::-;-1:-1:-1;;;;;33058:15:0;;;;;;;:7;:15;;;;;;:46;;;;33136:18;;;;;;;:39;;33159:15;33136:22;:39::i;:::-;-1:-1:-1;;;;;33115:18:0;;;;;;:7;:18;;;;;:60;33186:26;33201:10;33186:14;:26::i;:::-;33223:23;33235:4;33241;33223:11;:23::i;:::-;33279:9;-1:-1:-1;;;;;33262:44:0;33271:6;-1:-1:-1;;;;;33262:44:0;;33290:15;33262:44;;;;12080:25:1;;12068:2;12053:18;;11934:177;33262:44:0;;;;;;;;32753:561;;;;;;32664:650;;;:::o;31996:662::-;32109:15;32139:23;32177:12;32204:23;32242:12;32269:18;32301:19;32312:7;32301:10;:19::i;:::-;-1:-1:-1;;;;;32349:15:0;;;;;;:7;:15;;;;;;32094:226;;-1:-1:-1;32094:226:0;;-1:-1:-1;32094:226:0;;-1:-1:-1;32094:226:0;-1:-1:-1;32094:226:0;-1:-1:-1;32094:226:0;-1:-1:-1;32349:28:0;;32094:226;32349:19;:28::i;:::-;-1:-1:-1;;;;;32331:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;32409:18;;;;;:7;:18;;;;;:39;;32432:15;32409:22;:39::i;:::-;-1:-1:-1;;;;;32388:18:0;;;;;;:7;:18;;;;;;;;:60;;;;32480:7;:18;;;;:39;;32503:15;32480:22;:39::i;31401:589::-;31512:15;31542:23;31580:12;31607:23;31645:12;31672:18;31704:19;31715:7;31704:10;:19::i;:::-;-1:-1:-1;;;;;31752:15:0;;;;;;:7;:15;;;;;;31497:226;;-1:-1:-1;31497:226:0;;-1:-1:-1;31497:226:0;;-1:-1:-1;31497:226:0;-1:-1:-1;31497:226:0;-1:-1:-1;31497:226:0;-1:-1:-1;31752:28:0;;31497:226;31752:19;:28::i;33320:721::-;33435:15;33465:23;33503:12;33530:23;33568:12;33595:18;33627:19;33638:7;33627:10;:19::i;:::-;-1:-1:-1;;;;;33675:15:0;;;;;;:7;:15;;;;;;33420:226;;-1:-1:-1;33420:226:0;;-1:-1:-1;33420:226:0;;-1:-1:-1;33420:226:0;-1:-1:-1;33420:226:0;-1:-1:-1;33420:226:0;-1:-1:-1;33675:28:0;;33695:7;33675:19;:28::i;:::-;-1:-1:-1;;;;;33657:15:0;;;;;;:7;:15;;;;;;;;:46;;;;33732:7;:15;;;;:28;;33752:7;33732:19;:28::i;22053:130::-;22156:7;;22117;;22144:31;;22169:5;;22144:20;;:7;;-1:-1:-1;;;22156:7:0;;;;22144:11;:20::i;22189:156::-;22318:7;;22259;;22286:51;;22331:5;;22286:40;;22318:7;-1:-1:-1;;;22318:7:0;;;;;22298:17;;22308:7;;;;;;22298;:17;:::i;:::-;:27;;;;:::i;:::-;22286:7;;:40;;:11;:40::i;21510:537::-;21624:7;;;-1:-1:-1;;;21624:7:0;;;;;21601:20;;21614:7;21601:10;:20;:::i;:::-;:30;;;;:::i;:::-;21573:24;;:58;;;;;;;:::i;:::-;;;;-1:-1:-1;;21687:7:0;;;-1:-1:-1;;;21687:7:0;;;;;21664:20;;-1:-1:-1;;;21677:7:0;;;;21664:10;:20;:::i;:::-;:30;;;;:::i;:::-;21636:24;;:58;;;;;;;:::i;:::-;;;;-1:-1:-1;;21750:7:0;;;-1:-1:-1;;;21750:7:0;;;;;21727:20;;21740:7;;;;;21727:10;:20;:::i;:::-;:30;;;;:::i;:::-;21705:18;;:52;;;;;;;:::i;:::-;;;;-1:-1:-1;21768:19:0;;-1:-1:-1;21790:10:0;:8;:10::i;:::-;21768:32;-1:-1:-1;21811:18:0;21832:27;:10;21768:32;21832:14;:27::i;:::-;21911:4;21895:22;;;;:7;:22;;;;;;21811:48;;-1:-1:-1;21895:38:0;;21811:48;21895:26;:38::i;:::-;21886:4;21870:22;;;;:7;:22;;;;;;;;:63;;;;21948:11;:26;;;;;;21944:95;;;22017:4;22001:22;;;;:7;:22;;;;;;:38;;22028:10;22001:26;:38::i;:::-;21992:4;21976:22;;;;:7;:22;;;;;:63;21562:485;;21510:537;:::o;19442:147::-;19520:7;;:17;;19532:4;19520:11;:17::i;:::-;19510:7;:27;19561:10;;:20;;19576:4;19561:14;:20::i;:::-;19548:10;:33;-1:-1:-1;;19442:147:0:o;14:247:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;181:9;168:23;200:31;225:5;200:31;:::i;266:251::-;336:6;389:2;377:9;368:7;364:23;360:32;357:52;;;405:1;402;395:12;357:52;437:9;431:16;456:31;481:5;456:31;:::i;522:388::-;590:6;598;651:2;639:9;630:7;626:23;622:32;619:52;;;667:1;664;657:12;619:52;706:9;693:23;725:31;750:5;725:31;:::i;:::-;775:5;-1:-1:-1;832:2:1;817:18;;804:32;845:33;804:32;845:33;:::i;:::-;897:7;887:17;;;522:388;;;;;:::o;915:456::-;992:6;1000;1008;1061:2;1049:9;1040:7;1036:23;1032:32;1029:52;;;1077:1;1074;1067:12;1029:52;1116:9;1103:23;1135:31;1160:5;1135:31;:::i;:::-;1185:5;-1:-1:-1;1242:2:1;1227:18;;1214:32;1255:33;1214:32;1255:33;:::i;:::-;915:456;;1307:7;;-1:-1:-1;;;1361:2:1;1346:18;;;;1333:32;;915:456::o;1376:315::-;1444:6;1452;1505:2;1493:9;1484:7;1480:23;1476:32;1473:52;;;1521:1;1518;1511:12;1473:52;1560:9;1547:23;1579:31;1604:5;1579:31;:::i;:::-;1629:5;1681:2;1666:18;;;;1653:32;;-1:-1:-1;;;1376:315:1:o;1696:245::-;1763:6;1816:2;1804:9;1795:7;1791:23;1787:32;1784:52;;;1832:1;1829;1822:12;1784:52;1864:9;1858:16;1883:28;1905:5;1883:28;:::i;1946:180::-;2005:6;2058:2;2046:9;2037:7;2033:23;2029:32;2026:52;;;2074:1;2071;2064:12;2026:52;-1:-1:-1;2097:23:1;;1946:180;-1:-1:-1;1946:180:1:o;2131:309::-;2196:6;2204;2257:2;2245:9;2236:7;2232:23;2228:32;2225:52;;;2273:1;2270;2263:12;2225:52;2309:9;2296:23;2286:33;;2369:2;2358:9;2354:18;2341:32;2382:28;2404:5;2382:28;:::i;2445:306::-;2533:6;2541;2549;2602:2;2590:9;2581:7;2577:23;2573:32;2570:52;;;2618:1;2615;2608:12;2570:52;2647:9;2641:16;2631:26;;2697:2;2686:9;2682:18;2676:25;2666:35;;2741:2;2730:9;2726:18;2720:25;2710:35;;2445:306;;;;;:::o;4790:597::-;4902:4;4931:2;4960;4949:9;4942:21;4992:6;4986:13;5035:6;5030:2;5019:9;5015:18;5008:34;5060:1;5070:140;5084:6;5081:1;5078:13;5070:140;;;5179:14;;;5175:23;;5169:30;5145:17;;;5164:2;5141:26;5134:66;5099:10;;5070:140;;;5228:6;5225:1;5222:13;5219:91;;;5298:1;5293:2;5284:6;5273:9;5269:22;5265:31;5258:42;5219:91;-1:-1:-1;5371:2:1;5350:15;-1:-1:-1;;5346:29:1;5331:45;;;;5378:2;5327:54;;4790:597;-1:-1:-1;;;4790:597:1:o;9978:401::-;10180:2;10162:21;;;10219:2;10199:18;;;10192:30;10258:34;10253:2;10238:18;;10231:62;-1:-1:-1;;;10324:2:1;10309:18;;10302:35;10369:3;10354:19;;9978:401::o;12116:980::-;12378:4;12426:3;12415:9;12411:19;12457:6;12446:9;12439:25;12483:2;12521:6;12516:2;12505:9;12501:18;12494:34;12564:3;12559:2;12548:9;12544:18;12537:31;12588:6;12623;12617:13;12654:6;12646;12639:22;12692:3;12681:9;12677:19;12670:26;;12731:2;12723:6;12719:15;12705:29;;12752:1;12762:195;12776:6;12773:1;12770:13;12762:195;;;12841:13;;-1:-1:-1;;;;;12837:39:1;12825:52;;12932:15;;;;12897:12;;;;12873:1;12791:9;12762:195;;;-1:-1:-1;;;;;;;13013:32:1;;;;13008:2;12993:18;;12986:60;-1:-1:-1;;;13077:3:1;13062:19;13055:35;12974:3;12116:980;-1:-1:-1;;;12116:980:1:o;13614:128::-;13654:3;13685:1;13681:6;13678:1;13675:13;13672:39;;;13691:18;;:::i;:::-;-1:-1:-1;13727:9:1;;13614:128::o;13747:204::-;13785:3;13821:4;13818:1;13814:12;13853:4;13850:1;13846:12;13888:3;13882:4;13878:14;13873:3;13870:23;13867:49;;;13896:18;;:::i;:::-;13932:13;;13747:204;-1:-1:-1;;;13747:204:1:o;13956:217::-;13996:1;14022;14012:132;;14066:10;14061:3;14057:20;14054:1;14047:31;14101:4;14098:1;14091:15;14129:4;14126:1;14119:15;14012:132;-1:-1:-1;14158:9:1;;13956:217::o;14178:168::-;14218:7;14284:1;14280;14276:6;14272:14;14269:1;14266:21;14261:1;14254:9;14247:17;14243:45;14240:71;;;14291:18;;:::i;:::-;-1:-1:-1;14331:9:1;;14178:168::o;14351:238::-;14389:7;14429:4;14426:1;14422:12;14461:4;14458:1;14454:12;14521:3;14515:4;14511:14;14506:3;14503:23;14496:3;14489:11;14482:19;14478:49;14475:75;;;14530:18;;:::i;:::-;14570:13;;14351:238;-1:-1:-1;;;14351:238:1:o;14594:125::-;14634:4;14662:1;14659;14656:8;14653:34;;;14667:18;;:::i;:::-;-1:-1:-1;14704:9:1;;14594:125::o;14724:135::-;14763:3;-1:-1:-1;;14784:17:1;;14781:43;;;14804:18;;:::i;:::-;-1:-1:-1;14851:1:1;14840:13;;14724:135::o;14864:127::-;14925:10;14920:3;14916:20;14913:1;14906:31;14956:4;14953:1;14946:15;14980:4;14977:1;14970:15;14996:127;15057:10;15052:3;15048:20;15045:1;15038:31;15088:4;15085:1;15078:15;15112:4;15109:1;15102:15;15260:131;-1:-1:-1;;;;;15335:31:1;;15325:42;;15315:70;;15381:1;15378;15371:12;15396:118;15482:5;15475:13;15468:21;15461:5;15458:32;15448:60;;15504:1;15501;15494:12
Swarm Source
ipfs://267e48ceabf7b5cd587801980b1c253d79606193cecbe619d155695eade35f9c
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.