ERC-20
Overview
Max Total Supply
100,000,000 TREAT
Holders
4
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
13,059,921.766754559 TREATValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
GoodDoge
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-09-29 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.4; abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return payable(msg.sender); } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval( address indexed owner, address indexed spender, uint256 value ); function decimals() external view returns (uint8); } library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } library Address { function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } function sendValue(address payable recipient, uint256 amount) internal { require( address(this).balance >= amount, "Address: insufficient balance" ); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{value: amount}(""); require( success, "Address: unable to send value, recipient may have reverted" ); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue( target, data, value, "Address: low-level call with value failed" ); } function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require( address(this).balance >= value, "Address: insufficient balance for call" ); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue( address target, bytes memory data, uint256 weiValue, string memory errorMessage ) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: weiValue}( data ); if (success) { return returndata; } else { if (returndata.length > 0) { assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } contract Ownable is Context { address private _owner; address private _previousOwner; uint256 private _lockTime; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); constructor() { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: 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), "Ownable: new owner is the zero address" ); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } // function getUnlockTime() public view returns (uint256) { // return _lockTime; // } // function getTime() public view returns (uint256) { // return block.timestamp; // } function lock(uint256 time) public virtual onlyOwner { _previousOwner = _owner; _owner = address(0); _lockTime = block.timestamp + time; emit OwnershipTransferred(_owner, address(0)); } function unlock() public virtual { require( _previousOwner == msg.sender, "You don't have permission to unlock" ); require(block.timestamp > _lockTime, "Contract is locked until 7 days"); emit OwnershipTransferred(_owner, _previousOwner); _owner = _previousOwner; } } pragma solidity >=0.5.0; interface IUniswapV2FactoryV5 { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function globalPause() external view returns (bool); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function createPair( address tokenA, address tokenB, uint256 fee ) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; function toggleGlobalPause() external; } pragma solidity >=0.5.0; interface IUniswapV2PairV5 { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns ( uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast ); function price0CumulativeLast() external view returns (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } pragma solidity ^0.8.0; interface IFraxswapPair is IUniswapV2PairV5 { // TWAMM event LongTermSwap0To1( address indexed addr, uint256 orderId, uint256 amount0In, uint256 numberOfTimeIntervals ); event LongTermSwap1To0( address indexed addr, uint256 orderId, uint256 amount1In, uint256 numberOfTimeIntervals ); event CancelLongTermOrder( address indexed addr, uint256 orderId, address sellToken, uint256 unsoldAmount, address buyToken, uint256 purchasedAmount ); event WithdrawProceedsFromLongTermOrder( address indexed addr, uint256 orderId, address indexed proceedToken, uint256 proceeds, bool orderExpired ); function fee() external view returns (uint256); function longTermSwapFrom0To1( uint256 amount0In, uint256 numberOfTimeIntervals ) external returns (uint256 orderId); function longTermSwapFrom1To0( uint256 amount1In, uint256 numberOfTimeIntervals ) external returns (uint256 orderId); function cancelLongTermSwap(uint256 orderId) external; function withdrawProceedsFromLongTermSwap(uint256 orderId) external returns ( bool is_expired, address rewardTkn, uint256 totalReward ); function executeVirtualOrders(uint256 blockTimestamp) external; function getAmountOut(uint256 amountIn, address tokenIn) external view returns (uint256); function getAmountIn(uint256 amountOut, address tokenOut) external view returns (uint256); function orderTimeInterval() external returns (uint256); function getTWAPHistoryLength() external view returns (uint256); function getTwammReserves() external view returns ( uint112 _reserve0, uint112 _reserve1, uint32 _blockTimestampLast, uint112 _twammReserve0, uint112 _twammReserve1, uint256 _fee ); function getReserveAfterTwamm(uint256 blockTimestamp) external view returns ( uint112 _reserve0, uint112 _reserve1, uint256 lastVirtualOrderTimestamp, uint112 _twammReserve0, uint112 _twammReserve1 ); function getNextOrderID() external view returns (uint256); function getOrderIDsForUser(address user) external view returns (uint256[] memory); function getOrderIDsForUserLength(address user) external view returns (uint256); // function getDetailedOrdersForUser(address user, uint256 offset, uint256 limit) external view returns (LongTermOrdersLib.Order[] memory detailed_orders); function twammUpToDate() external view returns (bool); function getTwammState() external view returns ( uint256 token0Rate, uint256 token1Rate, uint256 lastVirtualOrderTimestamp, uint256 orderTimeInterval_rtn, uint256 rewardFactorPool0, uint256 rewardFactorPool1 ); function getTwammSalesRateEnding(uint256 _blockTimestamp) external view returns ( uint256 orderPool0SalesRateEnding, uint256 orderPool1SalesRateEnding ); function getTwammRewardFactor(uint256 _blockTimestamp) external view returns ( uint256 rewardFactorPool0AtTimestamp, uint256 rewardFactorPool1AtTimestamp ); function getTwammOrder(uint256 orderId) external view returns ( uint256 id, uint256 creationTimestamp, uint256 expirationTimestamp, uint256 saleRate, address owner, address sellTokenAddr, address buyTokenAddr ); function getTwammOrderProceedsView(uint256 orderId, uint256 blockTimestamp) external view returns (bool orderExpired, uint256 totalReward); function getTwammOrderProceeds(uint256 orderId) external returns (bool orderExpired, uint256 totalReward); function togglePauseNewSwaps() external; } pragma solidity >=0.6.2; interface IUniswapV2Router01V5 { function factory() external view returns (address); function WETH() external view returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } pragma solidity >=0.6.2; interface IUniswapV2Router02V5 is IUniswapV2Router01V5 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } contract GoodDoge is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; address payable public charityAddress = payable(0x2931560Bb81E0eDce55969c1502EA7190a60E67A); // Charity address address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD; mapping(address => uint256) private _rOwned; mapping(address => uint256) private _tOwned; mapping(address => mapping(address => uint256)) private _allowances; mapping(address => bool) private _isExcludedFromFee; mapping(address => bool) private _isExcluded; address[] private _excluded; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 100 * 10**6 * 10**9; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; string private _name = "Good Doge"; string private _symbol = "TREAT"; uint8 private _decimals = 9; uint256 public _taxFee = 6; uint256 private _previousTaxFee = _taxFee; uint256 public _liquidityFee = 2; uint256 private _previousLiquidityFee = _liquidityFee; uint256 public _maxTxAmount = 2 * 10**5 * 10**9; uint256 public _maxWalletToken = 2 * 10**6 * (10**9); uint256 private minimumTokensBeforeSwap = 1 * 10**9; // uint256 private buyBackUpperLimit = 1 * 10**18; IUniswapV2Router02V5 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; // bool public buyBackEnabled = false; bool private swapping; // Anyswap bridge address public immutable underlying; bool public constant underlyingIsMinted = false; // set of minters, can be this bridge or other bridges mapping(address => bool) public isMinter; event RewardLiquidityProviders(uint256 tokenAmount); // event BuyBackEnabledUpdated(bool enabled); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); event SwapETHForTokens(uint256 amountIn, address[] path); event SwapTokensForETH(uint256 amountIn, address[] path); modifier lockTheSwap() { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor() { _rOwned[_msgSender()] = _rTotal; IUniswapV2Router02V5 _uniswapV2Router = IUniswapV2Router02V5( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); uniswapV2Pair = IUniswapV2FactoryV5(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; _isExcludedFromFee[charityAddress] = true; underlying = address(0); emit Transfer(address(0), _msgSender(), _tTotal); } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view override returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) 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, "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, "Decreased allowance below zero" ) ); return true; } function isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function totalFees() public view returns (uint256) { return _tFeeTotal; } function minimumTokensBeforeSwapAmount() public view returns (uint256) { return minimumTokensBeforeSwap; } function tokenFromReflection(uint256 rAmount) public view returns (uint256) { require( rAmount <= _rTotal, "Amount must be less than total reflections" ); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function excludeFromReward(address account) public onlyOwner { require(!_isExcluded[account], "Account's already excluded"); if (_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeInReward(address account) external onlyOwner { require(_isExcluded[account], "Account's already excluded"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } function _approve( address owner, address spender, uint256 amount ) private { require(owner != address(0), "Approve from addres(0)"); require(spender != address(0), "Approve to addres(0)"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer( address from, address to, uint256 amount ) private { require(from != address(0), "Transfer from address(0)"); require(to != address(0), "Transfer to address(0)"); require(amount > 0, "Transfer amount < zero"); if ( from != owner() && to != owner() && to != address(0xdead) && to != uniswapV2Pair ) { require( amount <= _maxTxAmount, "Transfer amount exceeds maxTxAmount." ); uint256 contractBalanceRecepient = balanceOf(to); require( contractBalanceRecepient + amount <= _maxWalletToken, "Exceeds maximum wallet token amount." ); } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= minimumTokensBeforeSwap; if ( !swapping && !inSwapAndLiquify && swapAndLiquifyEnabled && to == uniswapV2Pair && from != charityAddress && to != charityAddress && canSwap ) { swapping = true; uint256 liquidTokens = contractTokenBalance.mul(_liquidityFee).div( 10**2 ); swapAndLiquify(liquidTokens); uint256 marketingSell = balanceOf(address(this)); swapTokens(marketingSell); swapping = false; // uint256 balance = address(this).balance; // if (buyBackEnabled && balance > uint256(1 * 10**18)) { // if (balance > buyBackUpperLimit) balance = buyBackUpperLimit; // buyBackTokens(balance.div(100)); // } } bool takeFee = true; //if any account belongs to _isExcludedFromFee account then remove the fee if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) { takeFee = false; } _tokenTransfer(from, to, amount, takeFee); } function swapAndLiquify(uint256 tokens) private lockTheSwap { // split the contract balance into halves uint256 half = tokens.div(2); uint256 otherHalf = tokens.sub(half); // capture the contract's current ETH balance. // this is so that we can capture exactly the amount of ETH that the // swap creates, and not make the liquidity event include any ETH that // has been manually sent to the contract uint256 initialBalance = address(this).balance; // swap tokens for ETH swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered // how much ETH did we just swap into? uint256 newBalance = address(this).balance.sub(initialBalance); // add liquidity to uniswap addLiquidity(otherHalf, newBalance); emit SwapAndLiquify(half, newBalance, otherHalf); } function swapTokens(uint256 contractTokenBalance) private lockTheSwap { uint256 initialBalance = address(this).balance; swapTokensForEth(contractTokenBalance); uint256 transferredBalance = address(this).balance.sub(initialBalance); //Send to Charity address transferToAddressETH(charityAddress, transferredBalance); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), // The contract block.timestamp ); emit SwapTokensForETH(tokenAmount, path); } function swapETHForTokens(uint256 amount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = uniswapV2Router.WETH(); path[1] = address(this); // make the swap uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{ value: amount }( 0, // accept any amount of Tokens path, deadAddress, // Burn address block.timestamp.add(300) ); emit SwapETHForTokens(amount, path); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable owner(), block.timestamp ); } function _tokenTransfer( address sender, address recipient, uint256 amount, bool takeFee ) private { if (!takeFee) removeAllFee(); if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, amount); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } 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); _takeTaxFee(tFee); _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); _takeTaxFee(tFee); _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); _takeTaxFee(tFee); _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); _takeTaxFee(tFee); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } 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 { 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 _takeTaxFee(uint256 tFee) private { uint256 currentRate = _getRate(); uint256 rFee = tFee.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rFee); if (_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(rFee); } function calculateTaxFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_taxFee).div(10**2); } function calculateLiquidityFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_liquidityFee).div(10**2); } function removeAllFee() private { if (_taxFee == 0 && _liquidityFee == 0) return; _previousTaxFee = _taxFee; _previousLiquidityFee = _liquidityFee; _taxFee = 0; _liquidityFee = 0; } function restoreAllFee() private { _taxFee = _previousTaxFee; _liquidityFee = _previousLiquidityFee; } function isExcludedFromFee(address account) public view returns (bool) { return _isExcludedFromFee[account]; } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } function setTaxFeePercent(uint256 taxFee) external onlyOwner { _taxFee = taxFee; } function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner { _liquidityFee = liquidityFee; } function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner { _maxTxAmount = maxTxAmount; } function setNumTokensToAddToLiquidity(uint256 _minimumTokensBeforeSwap) external onlyOwner { minimumTokensBeforeSwap = _minimumTokensBeforeSwap; } function setcharityAddress(address _charityAddress) external onlyOwner { charityAddress = payable(_charityAddress); } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } function transferToAddressETH(address payable recipient, uint256 amount) private { recipient.transfer(amount); } // Anyswap modifier onlyAuth() { require(isMinter[msg.sender], "AW: FORBIDDEN"); _; } function setMinter(address _auth) public onlyOwner { require(_auth != address(0), "AW: address(0)"); isMinter[_auth] = true; } // // No time delay revoke minter emergency function // function revokeMinter(address _auth) public onlyOwner { // isMinter[_auth] = false; // } function mint(address to, uint256 amount) external onlyAuth returns (bool) { require(to != address(0), "Mint to address(0)"); _tokenTransfer(address(this), to, amount, false); return true; } function burn(address from, uint256 amount) external onlyAuth returns (bool) { require(from != address(0), "Burn address(0)"); uint256 balance = balanceOf(from); require(balance >= amount, "Exceeds balance"); _tokenTransfer(from, address(this), amount, false); return true; } //to recieve ETH from uniswapV2Router when swaping receive() external payable {} }
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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"RewardLiquidityProviders","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":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"charityAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_auth","type":"address"}],"name":"setMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minimumTokensBeforeSwap","type":"uint256"}],"name":"setNumTokensToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_charityAddress","type":"address"}],"name":"setcharityAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"underlying","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"underlyingIsMinted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02V5","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
610100604052600380546001600160a01b031916732931560bb81e0edce55969c1502ea7190a60e67a1790556ddead00000000000000000000000060805267016345785d8a0000600a819055620000599060001962000535565b6200006790600019620004d2565b600b5560408051808201909152600980825268476f6f6420446f676560b81b60209092019182526200009c91600d91620003fa565b5060408051808201909152600580825264151491505560da1b6020909201918252620000cb91600e91620003fa565b50600f805460ff19166009179055600660108190556011556002601281905560135565b5e620f4800060145566071afd498d0000601555633b9aca006016556017805461ff0019166101001790553480156200012657600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600b543360009081526004602081815260409283902093909355815163c45a015560e01b81529151737a250d5630b4cf539739df2c5dacb4c659f2488d93849363c45a0155938181019391829003018186803b158015620001c857600080fd5b505afa158015620001dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002039190620004a0565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200024c57600080fd5b505afa15801562000261573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002879190620004a0565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620002d057600080fd5b505af1158015620002e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030b9190620004a0565b6001600160601b0319606091821b811660c0529082901b1660a0526001600760006200033f6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081526007909352818320805485166001908117909155600354909116835290822080549093161790915560e052620003a33390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600a54604051620003eb91815260200190565b60405180910390a35062000558565b8280546200040890620004f8565b90600052602060002090601f0160209004810192826200042c576000855562000477565b82601f106200044757805160ff191683800117855562000477565b8280016001018555821562000477579182015b82811115620004775782518255916020019190600101906200045a565b506200048592915062000489565b5090565b5b808211156200048557600081556001016200048a565b600060208284031215620004b357600080fd5b81516001600160a01b0381168114620004cb57600080fd5b9392505050565b600082821015620004f357634e487b7160e01b600052601160045260246000fd5b500390565b600181811c908216806200050d57607f821691505b602082108114156200052f57634e487b7160e01b600052602260045260246000fd5b50919050565b6000826200055357634e487b7160e01b600052601260045260246000fd5b500690565b60805160601c60a05160601c60c05160601c60e05160601c612c56620005cf60003960006105aa0152600081816104e8015281816117ef015261194b01526000818161035b01528181612312015281816123da01528181612416015281816124c901526124f0015260006103dc0152612c566000f3fe6080604052600436106102815760003560e01c8063715018a61161014f578063a9059cbb116100c1578063dd62ed3e1161007a578063dd62ed3e146107e8578063e640e3211461082e578063ea2f0b371461084e578063ec28438a1461086e578063f2fde38b1461088e578063fca3b5aa146108ae57600080fd5b8063a9059cbb14610723578063aa271e1a14610743578063afcf2fc414610773578063c49b9a8014610793578063d6c79751146107b3578063dd467064146107c857600080fd5b80638ee88c53116101135780638ee88c531461068457806395d89b41146106a45780639dc29fac146106b9578063a073d37f146106d9578063a457c2d7146106ee578063a69df4b51461070e57600080fd5b8063715018a6146105ec57806378109e54146106015780637d1db4a51461061757806388f820201461062d5780638da5cb5b1461066657600080fd5b80633685d419116101f35780634a74bb02116101ac5780634a74bb021461050a57806352390c02146105295780635342acb4146105495780636bc87c3a146105825780636f307dc31461059857806370a08231146105cc57600080fd5b80633685d4191461044057806339509351146104605780633b124fe71461048057806340c10f1914610496578063437823ec146104b657806349bd5a5e146104d657600080fd5b80631694505e116102455780631694505e1461034957806318160ddd1461039557806323b872dd146103aa57806327c8f835146103ca5780632d838119146103fe578063313ce5671461041e57600080fd5b8063061c82d01461028d57806306fdde03146102af578063081fdcc7146102da578063095ea7b3146102fa57806313114a9d1461032a57600080fd5b3661028857005b600080fd5b34801561029957600080fd5b506102ad6102a836600461294d565b6108ce565b005b3480156102bb57600080fd5b506102c4610906565b6040516102d191906129d8565b60405180910390f35b3480156102e657600080fd5b506102ad6102f536600461284b565b610998565b34801561030657600080fd5b5061031a6103153660046128ff565b6109e4565b60405190151581526020016102d1565b34801561033657600080fd5b50600c545b6040519081526020016102d1565b34801561035557600080fd5b5061037d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102d1565b3480156103a157600080fd5b50600a5461033b565b3480156103b657600080fd5b5061031a6103c53660046128be565b6109fb565b3480156103d657600080fd5b5061037d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561040a57600080fd5b5061033b61041936600461294d565b610a64565b34801561042a57600080fd5b50600f5460405160ff90911681526020016102d1565b34801561044c57600080fd5b506102ad61045b36600461284b565b610ae8565b34801561046c57600080fd5b5061031a61047b3660046128ff565b610c9f565b34801561048c57600080fd5b5061033b60105481565b3480156104a257600080fd5b5061031a6104b13660046128ff565b610cd5565b3480156104c257600080fd5b506102ad6104d136600461284b565b610d7c565b3480156104e257600080fd5b5061037d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561051657600080fd5b5060175461031a90610100900460ff1681565b34801561053557600080fd5b506102ad61054436600461284b565b610dca565b34801561055557600080fd5b5061031a61056436600461284b565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561058e57600080fd5b5061033b60125481565b3480156105a457600080fd5b5061037d7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105d857600080fd5b5061033b6105e736600461284b565b610f1d565b3480156105f857600080fd5b506102ad610f7c565b34801561060d57600080fd5b5061033b60155481565b34801561062357600080fd5b5061033b60145481565b34801561063957600080fd5b5061031a61064836600461284b565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561067257600080fd5b506000546001600160a01b031661037d565b34801561069057600080fd5b506102ad61069f36600461294d565b610fde565b3480156106b057600080fd5b506102c461100d565b3480156106c557600080fd5b5061031a6106d43660046128ff565b61101c565b3480156106e557600080fd5b5060165461033b565b3480156106fa57600080fd5b5061031a6107093660046128ff565b61110f565b34801561071a57600080fd5b506102ad61118c565b34801561072f57600080fd5b5061031a61073e3660046128ff565b611292565b34801561074f57600080fd5b5061031a61075e36600461284b565b60186020526000908152604090205460ff1681565b34801561077f57600080fd5b5060035461037d906001600160a01b031681565b34801561079f57600080fd5b506102ad6107ae36600461292b565b61129f565b3480156107bf57600080fd5b5061031a600081565b3480156107d457600080fd5b506102ad6107e336600461294d565b61131d565b3480156107f457600080fd5b5061033b610803366004612885565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b34801561083a57600080fd5b506102ad61084936600461294d565b6113a2565b34801561085a57600080fd5b506102ad61086936600461284b565b6113d1565b34801561087a57600080fd5b506102ad61088936600461294d565b61141c565b34801561089a57600080fd5b506102ad6108a936600461284b565b61144b565b3480156108ba57600080fd5b506102ad6108c936600461284b565b611523565b6000546001600160a01b031633146109015760405162461bcd60e51b81526004016108f890612a2d565b60405180910390fd5b601055565b6060600d805461091590612b2f565b80601f016020809104026020016040519081016040528092919081815260200182805461094190612b2f565b801561098e5780601f106109635761010080835404028352916020019161098e565b820191906000526020600020905b81548152906001019060200180831161097157829003601f168201915b5050505050905090565b6000546001600160a01b031633146109c25760405162461bcd60e51b81526004016108f890612a2d565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b60006109f13384846115b8565b5060015b92915050565b6000610a088484846116b5565b610a5a8433610a5585604051806060016040528060218152602001612be0602191396001600160a01b038a1660009081526006602090815260408083203384529091529020549190611a7f565b6115b8565b5060019392505050565b6000600b54821115610acb5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016108f8565b6000610ad5611ab9565b9050610ae18382611adc565b9392505050565b6000546001600160a01b03163314610b125760405162461bcd60e51b81526004016108f890612a2d565b6001600160a01b03811660009081526008602052604090205460ff16610b7a5760405162461bcd60e51b815260206004820152601a60248201527f4163636f756e74277320616c7265616479206578636c7564656400000000000060448201526064016108f8565b60005b600954811015610c9b57816001600160a01b031660098281548110610ba457610ba4612bb1565b6000918252602090912001546001600160a01b03161415610c895760098054610bcf90600190612b18565b81548110610bdf57610bdf612bb1565b600091825260209091200154600980546001600160a01b039092169183908110610c0b57610c0b612bb1565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600582526040808220829055600890925220805460ff191690556009805480610c6357610c63612b9b565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610c9381612b6a565b915050610b7d565b5050565b3360008181526006602090815260408083206001600160a01b038716845290915281205490916109f1918590610a559086611b1e565b3360009081526018602052604081205460ff16610d245760405162461bcd60e51b815260206004820152600d60248201526c20ab9d102327a92124a22222a760991b60448201526064016108f8565b6001600160a01b038316610d6f5760405162461bcd60e51b81526020600482015260126024820152714d696e7420746f206164647265737328302960701b60448201526064016108f8565b6109f13084846000611b7d565b6000546001600160a01b03163314610da65760405162461bcd60e51b81526004016108f890612a2d565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b6000546001600160a01b03163314610df45760405162461bcd60e51b81526004016108f890612a2d565b6001600160a01b03811660009081526008602052604090205460ff1615610e5d5760405162461bcd60e51b815260206004820152601a60248201527f4163636f756e74277320616c7265616479206578636c7564656400000000000060448201526064016108f8565b6001600160a01b03811660009081526004602052604090205415610eb7576001600160a01b038116600090815260046020526040902054610e9d90610a64565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152600860205260408120805460ff191660019081179091556009805491820181559091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b0319169091179055565b6001600160a01b03811660009081526008602052604081205460ff1615610f5a57506001600160a01b031660009081526005602052604090205490565b6001600160a01b0382166000908152600460205260409020546109f590610a64565b6000546001600160a01b03163314610fa65760405162461bcd60e51b81526004016108f890612a2d565b600080546040516001600160a01b0390911690600080516020612c01833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146110085760405162461bcd60e51b81526004016108f890612a2d565b601255565b6060600e805461091590612b2f565b3360009081526018602052604081205460ff1661106b5760405162461bcd60e51b815260206004820152600d60248201526c20ab9d102327a92124a22222a760991b60448201526064016108f8565b6001600160a01b0383166110b35760405162461bcd60e51b815260206004820152600f60248201526e4275726e206164647265737328302960881b60448201526064016108f8565b60006110be84610f1d565b9050828110156111025760405162461bcd60e51b815260206004820152600f60248201526e457863656564732062616c616e636560881b60448201526064016108f8565b610a5a8430856000611b7d565b60006109f13384610a55856040518060400160405280601e81526020017f44656372656173656420616c6c6f77616e63652062656c6f77207a65726f00008152506006600061115b3390565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190611a7f565b6001546001600160a01b031633146111f25760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b60648201526084016108f8565b60025442116112435760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c203720646179730060448201526064016108f8565b600154600080546040516001600160a01b039384169390911691600080516020612c0183398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b60006109f13384846116b5565b6000546001600160a01b031633146112c95760405162461bcd60e51b81526004016108f890612a2d565b601780548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061131290831515815260200190565b60405180910390a150565b6000546001600160a01b031633146113475760405162461bcd60e51b81526004016108f890612a2d565b60008054600180546001600160a01b03199081166001600160a01b038416179091551690556113768142612abf565b600255600080546040516001600160a01b0390911690600080516020612c01833981519152908390a350565b6000546001600160a01b031633146113cc5760405162461bcd60e51b81526004016108f890612a2d565b601655565b6000546001600160a01b031633146113fb5760405162461bcd60e51b81526004016108f890612a2d565b6001600160a01b03166000908152600760205260409020805460ff19169055565b6000546001600160a01b031633146114465760405162461bcd60e51b81526004016108f890612a2d565b601455565b6000546001600160a01b031633146114755760405162461bcd60e51b81526004016108f890612a2d565b6001600160a01b0381166114da5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108f8565b600080546040516001600160a01b0380851693921691600080516020612c0183398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461154d5760405162461bcd60e51b81526004016108f890612a2d565b6001600160a01b0381166115945760405162461bcd60e51b815260206004820152600e60248201526d41573a206164647265737328302960901b60448201526064016108f8565b6001600160a01b03166000908152601860205260409020805460ff19166001179055565b6001600160a01b0383166116075760405162461bcd60e51b8152602060048201526016602482015275417070726f76652066726f6d2061646472657328302960501b60448201526064016108f8565b6001600160a01b0382166116545760405162461bcd60e51b8152602060048201526014602482015273417070726f766520746f2061646472657328302960601b60448201526064016108f8565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661170b5760405162461bcd60e51b815260206004820152601860248201527f5472616e736665722066726f6d2061646472657373283029000000000000000060448201526064016108f8565b6001600160a01b03821661175a5760405162461bcd60e51b81526020600482015260166024820152755472616e7366657220746f206164647265737328302960501b60448201526064016108f8565b600081116117a35760405162461bcd60e51b81526020600482015260166024820152755472616e7366657220616d6f756e74203c207a65726f60501b60448201526064016108f8565b6000546001600160a01b038481169116148015906117cf57506000546001600160a01b03838116911614155b80156117e657506001600160a01b03821661dead14155b801561182457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b156118fe576014548111156118875760405162461bcd60e51b8152602060048201526024808201527f5472616e7366657220616d6f756e742065786365656473206d61785478416d6f6044820152633ab73a1760e11b60648201526084016108f8565b600061189283610f1d565b6015549091506118a28383612abf565b11156118fc5760405162461bcd60e51b8152602060048201526024808201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6044820152633ab73a1760e11b60648201526084016108f8565b505b600061190930610f1d565b6016546017549192508210159062010000900460ff1615801561192f575060175460ff16155b80156119425750601754610100900460ff165b801561197f57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316145b801561199957506003546001600160a01b03868116911614155b80156119b357506003546001600160a01b03858116911614155b80156119bc5750805b15611a20576017805462ff00001916620100001790556012546000906119f0906064906119ea908690611ca8565b90611adc565b90506119fb81611d27565b6000611a0630610f1d565b9050611a1181611dc5565b50506017805462ff0000191690555b6001600160a01b03851660009081526007602052604090205460019060ff1680611a6257506001600160a01b03851660009081526007602052604090205460ff165b15611a6b575060005b611a7786868684611b7d565b505050505050565b60008184841115611aa35760405162461bcd60e51b81526004016108f891906129d8565b506000611ab08486612b18565b95945050505050565b6000806000611ac6611e10565b9092509050611ad58282611adc565b9250505090565b6000610ae183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611f92565b600080611b2b8385612abf565b905083811015610ae15760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016108f8565b80611b8a57611b8a611fc0565b6001600160a01b03841660009081526008602052604090205460ff168015611bcb57506001600160a01b03831660009081526008602052604090205460ff16155b15611be057611bdb848484611fee565b611c8c565b6001600160a01b03841660009081526008602052604090205460ff16158015611c2157506001600160a01b03831660009081526008602052604090205460ff165b15611c3157611bdb84848461211d565b6001600160a01b03841660009081526008602052604090205460ff168015611c7157506001600160a01b03831660009081526008602052604090205460ff165b15611c8157611bdb8484846121c6565b611c8c848484612239565b80611ca257611ca2601154601055601354601255565b50505050565b600082611cb7575060006109f5565b6000611cc38385612af9565b905082611cd08583612ad7565b14610ae15760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016108f8565b6017805460ff191660011790556000611d41826002611adc565b90506000611d4f8383612279565b905047611d5b836122bb565b6000611d674783612279565b9050611d7383826124c3565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506017805460ff19169055505050565b6017805460ff1916600117905547611ddc826122bb565b6000611de84783612279565b600354909150611e01906001600160a01b0316826125d8565b50506017805460ff1916905550565b600b54600a546000918291825b600954811015611f6257826004600060098481548110611e3f57611e3f612bb1565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611eaa5750816005600060098481548110611e8357611e83612bb1565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611ec057600b54600a54945094505050509091565b611f066004600060098481548110611eda57611eda612bb1565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612279565b9250611f4e6005600060098481548110611f2257611f22612bb1565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612279565b915080611f5a81612b6a565b915050611e1d565b50600a54600b54611f7291611adc565b821015611f8957600b54600a549350935050509091565b90939092509050565b60008183611fb35760405162461bcd60e51b81526004016108f891906129d8565b506000611ab08486612ad7565b601054158015611fd05750601254155b15611fd757565b601080546011556012805460135560009182905555565b60008060008060008061200087612613565b6001600160a01b038f16600090815260056020526040902054959b509399509197509550935091506120329088612279565b6001600160a01b038a166000908152600560209081526040808320939093556004905220546120619087612279565b6001600160a01b03808b1660009081526004602052604080822093909355908a16815220546120909086611b1e565b6001600160a01b0389166000908152600460205260409020556120b281612662565b6120bb826126ea565b6120c5848361275d565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161210a91815260200190565b60405180910390a3505050505050505050565b60008060008060008061212f87612613565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506121619087612279565b6001600160a01b03808b16600090815260046020908152604080832094909455918b168152600590915220546121979084611b1e565b6001600160a01b0389166000908152600560209081526040808320939093556004905220546120909086611b1e565b6000806000806000806121d887612613565b6001600160a01b038f16600090815260056020526040902054959b5093995091975095509350915061220a9088612279565b6001600160a01b038a166000908152600560209081526040808320939093556004905220546121619087612279565b60008060008060008061224b87612613565b6001600160a01b038f16600090815260046020526040902054959b5093995091975095509350915061206190875b6000610ae183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611a7f565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106122f0576122f0612bb1565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561236957600080fd5b505afa15801561237d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a19190612868565b816001815181106123b4576123b4612bb1565b60200260200101906001600160a01b031690816001600160a01b0316815250506123ff307f0000000000000000000000000000000000000000000000000000000000000000846115b8565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790612454908590600090869030904290600401612a83565b600060405180830381600087803b15801561246e57600080fd5b505af1158015612482573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516124b7929190612a62565b60405180910390a15050565b6124ee307f0000000000000000000000000000000000000000000000000000000000000000846115b8565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f305d7198230856000806125356000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b15801561259857600080fd5b505af11580156125ac573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906125d19190612966565b5050505050565b6040516001600160a01b0383169082156108fc029083906000818181858888f1935050505015801561260e573d6000803e3d6000fd5b505050565b600080600080600080600080600061262a8a612781565b92509250925060008060006126488d8686612643611ab9565b6127c3565b919f909e50909c50959a5093985091965092945050505050565b600061266c611ab9565b9050600061267a8383611ca8565b306000908152600460205260409020549091506126979082611b1e565b3060009081526004602090815260408083209390935560089052205460ff161561260e57306000908152600560205260409020546126d59084611b1e565b30600090815260056020526040902055505050565b60006126f4611ab9565b905060006127028383611ca8565b3060009081526004602052604090205490915061271f9082611b1e565b3060009081526004602090815260408083209390935560089052205460ff161561260e57306000908152600560205260409020546126d59082611b1e565b600b5461276a9083612279565b600b55600c5461277a9082611b1e565b600c555050565b60008060008061279085612813565b9050600061279d8661282f565b905060006127b5826127af8986612279565b90612279565b979296509094509092505050565b60008080806127d28886611ca8565b905060006127e08887611ca8565b905060006127ee8888611ca8565b90506000612800826127af8686612279565b939b939a50919850919650505050505050565b60006109f560646119ea60105485611ca890919063ffffffff16565b60006109f560646119ea60125485611ca890919063ffffffff16565b60006020828403121561285d57600080fd5b8135610ae181612bc7565b60006020828403121561287a57600080fd5b8151610ae181612bc7565b6000806040838503121561289857600080fd5b82356128a381612bc7565b915060208301356128b381612bc7565b809150509250929050565b6000806000606084860312156128d357600080fd5b83356128de81612bc7565b925060208401356128ee81612bc7565b929592945050506040919091013590565b6000806040838503121561291257600080fd5b823561291d81612bc7565b946020939093013593505050565b60006020828403121561293d57600080fd5b81358015158114610ae157600080fd5b60006020828403121561295f57600080fd5b5035919050565b60008060006060848603121561297b57600080fd5b8351925060208401519150604084015190509250925092565b600081518084526020808501945080840160005b838110156129cd5781516001600160a01b0316875295820195908201906001016129a8565b509495945050505050565b600060208083528351808285015260005b81811015612a05578581018301518582016040015282016129e9565b81811115612a17576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b828152604060208201526000612a7b6040830184612994565b949350505050565b85815284602082015260a060408201526000612aa260a0830186612994565b6001600160a01b0394909416606083015250608001529392505050565b60008219821115612ad257612ad2612b85565b500190565b600082612af457634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612b1357612b13612b85565b500290565b600082821015612b2a57612b2a612b85565b500390565b600181811c90821680612b4357607f821691505b60208210811415612b6457634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612b7e57612b7e612b85565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114612bdc57600080fd5b5056fe7472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0a264697066735822122029a9862b55b7f8f9904248f6458136569757ba80bfa2e9dea54da46028ce149264736f6c63430008070033
Deployed Bytecode
0x6080604052600436106102815760003560e01c8063715018a61161014f578063a9059cbb116100c1578063dd62ed3e1161007a578063dd62ed3e146107e8578063e640e3211461082e578063ea2f0b371461084e578063ec28438a1461086e578063f2fde38b1461088e578063fca3b5aa146108ae57600080fd5b8063a9059cbb14610723578063aa271e1a14610743578063afcf2fc414610773578063c49b9a8014610793578063d6c79751146107b3578063dd467064146107c857600080fd5b80638ee88c53116101135780638ee88c531461068457806395d89b41146106a45780639dc29fac146106b9578063a073d37f146106d9578063a457c2d7146106ee578063a69df4b51461070e57600080fd5b8063715018a6146105ec57806378109e54146106015780637d1db4a51461061757806388f820201461062d5780638da5cb5b1461066657600080fd5b80633685d419116101f35780634a74bb02116101ac5780634a74bb021461050a57806352390c02146105295780635342acb4146105495780636bc87c3a146105825780636f307dc31461059857806370a08231146105cc57600080fd5b80633685d4191461044057806339509351146104605780633b124fe71461048057806340c10f1914610496578063437823ec146104b657806349bd5a5e146104d657600080fd5b80631694505e116102455780631694505e1461034957806318160ddd1461039557806323b872dd146103aa57806327c8f835146103ca5780632d838119146103fe578063313ce5671461041e57600080fd5b8063061c82d01461028d57806306fdde03146102af578063081fdcc7146102da578063095ea7b3146102fa57806313114a9d1461032a57600080fd5b3661028857005b600080fd5b34801561029957600080fd5b506102ad6102a836600461294d565b6108ce565b005b3480156102bb57600080fd5b506102c4610906565b6040516102d191906129d8565b60405180910390f35b3480156102e657600080fd5b506102ad6102f536600461284b565b610998565b34801561030657600080fd5b5061031a6103153660046128ff565b6109e4565b60405190151581526020016102d1565b34801561033657600080fd5b50600c545b6040519081526020016102d1565b34801561035557600080fd5b5061037d7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016102d1565b3480156103a157600080fd5b50600a5461033b565b3480156103b657600080fd5b5061031a6103c53660046128be565b6109fb565b3480156103d657600080fd5b5061037d7f000000000000000000000000000000000000000000000000000000000000dead81565b34801561040a57600080fd5b5061033b61041936600461294d565b610a64565b34801561042a57600080fd5b50600f5460405160ff90911681526020016102d1565b34801561044c57600080fd5b506102ad61045b36600461284b565b610ae8565b34801561046c57600080fd5b5061031a61047b3660046128ff565b610c9f565b34801561048c57600080fd5b5061033b60105481565b3480156104a257600080fd5b5061031a6104b13660046128ff565b610cd5565b3480156104c257600080fd5b506102ad6104d136600461284b565b610d7c565b3480156104e257600080fd5b5061037d7f0000000000000000000000000c49ef3fbc2f322a5d95077c0dc224ed3293a08681565b34801561051657600080fd5b5060175461031a90610100900460ff1681565b34801561053557600080fd5b506102ad61054436600461284b565b610dca565b34801561055557600080fd5b5061031a61056436600461284b565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561058e57600080fd5b5061033b60125481565b3480156105a457600080fd5b5061037d7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105d857600080fd5b5061033b6105e736600461284b565b610f1d565b3480156105f857600080fd5b506102ad610f7c565b34801561060d57600080fd5b5061033b60155481565b34801561062357600080fd5b5061033b60145481565b34801561063957600080fd5b5061031a61064836600461284b565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561067257600080fd5b506000546001600160a01b031661037d565b34801561069057600080fd5b506102ad61069f36600461294d565b610fde565b3480156106b057600080fd5b506102c461100d565b3480156106c557600080fd5b5061031a6106d43660046128ff565b61101c565b3480156106e557600080fd5b5060165461033b565b3480156106fa57600080fd5b5061031a6107093660046128ff565b61110f565b34801561071a57600080fd5b506102ad61118c565b34801561072f57600080fd5b5061031a61073e3660046128ff565b611292565b34801561074f57600080fd5b5061031a61075e36600461284b565b60186020526000908152604090205460ff1681565b34801561077f57600080fd5b5060035461037d906001600160a01b031681565b34801561079f57600080fd5b506102ad6107ae36600461292b565b61129f565b3480156107bf57600080fd5b5061031a600081565b3480156107d457600080fd5b506102ad6107e336600461294d565b61131d565b3480156107f457600080fd5b5061033b610803366004612885565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b34801561083a57600080fd5b506102ad61084936600461294d565b6113a2565b34801561085a57600080fd5b506102ad61086936600461284b565b6113d1565b34801561087a57600080fd5b506102ad61088936600461294d565b61141c565b34801561089a57600080fd5b506102ad6108a936600461284b565b61144b565b3480156108ba57600080fd5b506102ad6108c936600461284b565b611523565b6000546001600160a01b031633146109015760405162461bcd60e51b81526004016108f890612a2d565b60405180910390fd5b601055565b6060600d805461091590612b2f565b80601f016020809104026020016040519081016040528092919081815260200182805461094190612b2f565b801561098e5780601f106109635761010080835404028352916020019161098e565b820191906000526020600020905b81548152906001019060200180831161097157829003601f168201915b5050505050905090565b6000546001600160a01b031633146109c25760405162461bcd60e51b81526004016108f890612a2d565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b60006109f13384846115b8565b5060015b92915050565b6000610a088484846116b5565b610a5a8433610a5585604051806060016040528060218152602001612be0602191396001600160a01b038a1660009081526006602090815260408083203384529091529020549190611a7f565b6115b8565b5060019392505050565b6000600b54821115610acb5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016108f8565b6000610ad5611ab9565b9050610ae18382611adc565b9392505050565b6000546001600160a01b03163314610b125760405162461bcd60e51b81526004016108f890612a2d565b6001600160a01b03811660009081526008602052604090205460ff16610b7a5760405162461bcd60e51b815260206004820152601a60248201527f4163636f756e74277320616c7265616479206578636c7564656400000000000060448201526064016108f8565b60005b600954811015610c9b57816001600160a01b031660098281548110610ba457610ba4612bb1565b6000918252602090912001546001600160a01b03161415610c895760098054610bcf90600190612b18565b81548110610bdf57610bdf612bb1565b600091825260209091200154600980546001600160a01b039092169183908110610c0b57610c0b612bb1565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600582526040808220829055600890925220805460ff191690556009805480610c6357610c63612b9b565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610c9381612b6a565b915050610b7d565b5050565b3360008181526006602090815260408083206001600160a01b038716845290915281205490916109f1918590610a559086611b1e565b3360009081526018602052604081205460ff16610d245760405162461bcd60e51b815260206004820152600d60248201526c20ab9d102327a92124a22222a760991b60448201526064016108f8565b6001600160a01b038316610d6f5760405162461bcd60e51b81526020600482015260126024820152714d696e7420746f206164647265737328302960701b60448201526064016108f8565b6109f13084846000611b7d565b6000546001600160a01b03163314610da65760405162461bcd60e51b81526004016108f890612a2d565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b6000546001600160a01b03163314610df45760405162461bcd60e51b81526004016108f890612a2d565b6001600160a01b03811660009081526008602052604090205460ff1615610e5d5760405162461bcd60e51b815260206004820152601a60248201527f4163636f756e74277320616c7265616479206578636c7564656400000000000060448201526064016108f8565b6001600160a01b03811660009081526004602052604090205415610eb7576001600160a01b038116600090815260046020526040902054610e9d90610a64565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152600860205260408120805460ff191660019081179091556009805491820181559091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b0319169091179055565b6001600160a01b03811660009081526008602052604081205460ff1615610f5a57506001600160a01b031660009081526005602052604090205490565b6001600160a01b0382166000908152600460205260409020546109f590610a64565b6000546001600160a01b03163314610fa65760405162461bcd60e51b81526004016108f890612a2d565b600080546040516001600160a01b0390911690600080516020612c01833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146110085760405162461bcd60e51b81526004016108f890612a2d565b601255565b6060600e805461091590612b2f565b3360009081526018602052604081205460ff1661106b5760405162461bcd60e51b815260206004820152600d60248201526c20ab9d102327a92124a22222a760991b60448201526064016108f8565b6001600160a01b0383166110b35760405162461bcd60e51b815260206004820152600f60248201526e4275726e206164647265737328302960881b60448201526064016108f8565b60006110be84610f1d565b9050828110156111025760405162461bcd60e51b815260206004820152600f60248201526e457863656564732062616c616e636560881b60448201526064016108f8565b610a5a8430856000611b7d565b60006109f13384610a55856040518060400160405280601e81526020017f44656372656173656420616c6c6f77616e63652062656c6f77207a65726f00008152506006600061115b3390565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190611a7f565b6001546001600160a01b031633146111f25760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b60648201526084016108f8565b60025442116112435760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c203720646179730060448201526064016108f8565b600154600080546040516001600160a01b039384169390911691600080516020612c0183398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b60006109f13384846116b5565b6000546001600160a01b031633146112c95760405162461bcd60e51b81526004016108f890612a2d565b601780548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061131290831515815260200190565b60405180910390a150565b6000546001600160a01b031633146113475760405162461bcd60e51b81526004016108f890612a2d565b60008054600180546001600160a01b03199081166001600160a01b038416179091551690556113768142612abf565b600255600080546040516001600160a01b0390911690600080516020612c01833981519152908390a350565b6000546001600160a01b031633146113cc5760405162461bcd60e51b81526004016108f890612a2d565b601655565b6000546001600160a01b031633146113fb5760405162461bcd60e51b81526004016108f890612a2d565b6001600160a01b03166000908152600760205260409020805460ff19169055565b6000546001600160a01b031633146114465760405162461bcd60e51b81526004016108f890612a2d565b601455565b6000546001600160a01b031633146114755760405162461bcd60e51b81526004016108f890612a2d565b6001600160a01b0381166114da5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108f8565b600080546040516001600160a01b0380851693921691600080516020612c0183398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461154d5760405162461bcd60e51b81526004016108f890612a2d565b6001600160a01b0381166115945760405162461bcd60e51b815260206004820152600e60248201526d41573a206164647265737328302960901b60448201526064016108f8565b6001600160a01b03166000908152601860205260409020805460ff19166001179055565b6001600160a01b0383166116075760405162461bcd60e51b8152602060048201526016602482015275417070726f76652066726f6d2061646472657328302960501b60448201526064016108f8565b6001600160a01b0382166116545760405162461bcd60e51b8152602060048201526014602482015273417070726f766520746f2061646472657328302960601b60448201526064016108f8565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661170b5760405162461bcd60e51b815260206004820152601860248201527f5472616e736665722066726f6d2061646472657373283029000000000000000060448201526064016108f8565b6001600160a01b03821661175a5760405162461bcd60e51b81526020600482015260166024820152755472616e7366657220746f206164647265737328302960501b60448201526064016108f8565b600081116117a35760405162461bcd60e51b81526020600482015260166024820152755472616e7366657220616d6f756e74203c207a65726f60501b60448201526064016108f8565b6000546001600160a01b038481169116148015906117cf57506000546001600160a01b03838116911614155b80156117e657506001600160a01b03821661dead14155b801561182457507f0000000000000000000000000c49ef3fbc2f322a5d95077c0dc224ed3293a0866001600160a01b0316826001600160a01b031614155b156118fe576014548111156118875760405162461bcd60e51b8152602060048201526024808201527f5472616e7366657220616d6f756e742065786365656473206d61785478416d6f6044820152633ab73a1760e11b60648201526084016108f8565b600061189283610f1d565b6015549091506118a28383612abf565b11156118fc5760405162461bcd60e51b8152602060048201526024808201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6044820152633ab73a1760e11b60648201526084016108f8565b505b600061190930610f1d565b6016546017549192508210159062010000900460ff1615801561192f575060175460ff16155b80156119425750601754610100900460ff165b801561197f57507f0000000000000000000000000c49ef3fbc2f322a5d95077c0dc224ed3293a0866001600160a01b0316846001600160a01b0316145b801561199957506003546001600160a01b03868116911614155b80156119b357506003546001600160a01b03858116911614155b80156119bc5750805b15611a20576017805462ff00001916620100001790556012546000906119f0906064906119ea908690611ca8565b90611adc565b90506119fb81611d27565b6000611a0630610f1d565b9050611a1181611dc5565b50506017805462ff0000191690555b6001600160a01b03851660009081526007602052604090205460019060ff1680611a6257506001600160a01b03851660009081526007602052604090205460ff165b15611a6b575060005b611a7786868684611b7d565b505050505050565b60008184841115611aa35760405162461bcd60e51b81526004016108f891906129d8565b506000611ab08486612b18565b95945050505050565b6000806000611ac6611e10565b9092509050611ad58282611adc565b9250505090565b6000610ae183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611f92565b600080611b2b8385612abf565b905083811015610ae15760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016108f8565b80611b8a57611b8a611fc0565b6001600160a01b03841660009081526008602052604090205460ff168015611bcb57506001600160a01b03831660009081526008602052604090205460ff16155b15611be057611bdb848484611fee565b611c8c565b6001600160a01b03841660009081526008602052604090205460ff16158015611c2157506001600160a01b03831660009081526008602052604090205460ff165b15611c3157611bdb84848461211d565b6001600160a01b03841660009081526008602052604090205460ff168015611c7157506001600160a01b03831660009081526008602052604090205460ff165b15611c8157611bdb8484846121c6565b611c8c848484612239565b80611ca257611ca2601154601055601354601255565b50505050565b600082611cb7575060006109f5565b6000611cc38385612af9565b905082611cd08583612ad7565b14610ae15760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016108f8565b6017805460ff191660011790556000611d41826002611adc565b90506000611d4f8383612279565b905047611d5b836122bb565b6000611d674783612279565b9050611d7383826124c3565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506017805460ff19169055505050565b6017805460ff1916600117905547611ddc826122bb565b6000611de84783612279565b600354909150611e01906001600160a01b0316826125d8565b50506017805460ff1916905550565b600b54600a546000918291825b600954811015611f6257826004600060098481548110611e3f57611e3f612bb1565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611eaa5750816005600060098481548110611e8357611e83612bb1565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611ec057600b54600a54945094505050509091565b611f066004600060098481548110611eda57611eda612bb1565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612279565b9250611f4e6005600060098481548110611f2257611f22612bb1565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612279565b915080611f5a81612b6a565b915050611e1d565b50600a54600b54611f7291611adc565b821015611f8957600b54600a549350935050509091565b90939092509050565b60008183611fb35760405162461bcd60e51b81526004016108f891906129d8565b506000611ab08486612ad7565b601054158015611fd05750601254155b15611fd757565b601080546011556012805460135560009182905555565b60008060008060008061200087612613565b6001600160a01b038f16600090815260056020526040902054959b509399509197509550935091506120329088612279565b6001600160a01b038a166000908152600560209081526040808320939093556004905220546120619087612279565b6001600160a01b03808b1660009081526004602052604080822093909355908a16815220546120909086611b1e565b6001600160a01b0389166000908152600460205260409020556120b281612662565b6120bb826126ea565b6120c5848361275d565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161210a91815260200190565b60405180910390a3505050505050505050565b60008060008060008061212f87612613565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506121619087612279565b6001600160a01b03808b16600090815260046020908152604080832094909455918b168152600590915220546121979084611b1e565b6001600160a01b0389166000908152600560209081526040808320939093556004905220546120909086611b1e565b6000806000806000806121d887612613565b6001600160a01b038f16600090815260056020526040902054959b5093995091975095509350915061220a9088612279565b6001600160a01b038a166000908152600560209081526040808320939093556004905220546121619087612279565b60008060008060008061224b87612613565b6001600160a01b038f16600090815260046020526040902054959b5093995091975095509350915061206190875b6000610ae183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611a7f565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106122f0576122f0612bb1565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561236957600080fd5b505afa15801561237d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a19190612868565b816001815181106123b4576123b4612bb1565b60200260200101906001600160a01b031690816001600160a01b0316815250506123ff307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846115b8565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790612454908590600090869030904290600401612a83565b600060405180830381600087803b15801561246e57600080fd5b505af1158015612482573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516124b7929190612a62565b60405180910390a15050565b6124ee307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846115b8565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663f305d7198230856000806125356000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b15801561259857600080fd5b505af11580156125ac573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906125d19190612966565b5050505050565b6040516001600160a01b0383169082156108fc029083906000818181858888f1935050505015801561260e573d6000803e3d6000fd5b505050565b600080600080600080600080600061262a8a612781565b92509250925060008060006126488d8686612643611ab9565b6127c3565b919f909e50909c50959a5093985091965092945050505050565b600061266c611ab9565b9050600061267a8383611ca8565b306000908152600460205260409020549091506126979082611b1e565b3060009081526004602090815260408083209390935560089052205460ff161561260e57306000908152600560205260409020546126d59084611b1e565b30600090815260056020526040902055505050565b60006126f4611ab9565b905060006127028383611ca8565b3060009081526004602052604090205490915061271f9082611b1e565b3060009081526004602090815260408083209390935560089052205460ff161561260e57306000908152600560205260409020546126d59082611b1e565b600b5461276a9083612279565b600b55600c5461277a9082611b1e565b600c555050565b60008060008061279085612813565b9050600061279d8661282f565b905060006127b5826127af8986612279565b90612279565b979296509094509092505050565b60008080806127d28886611ca8565b905060006127e08887611ca8565b905060006127ee8888611ca8565b90506000612800826127af8686612279565b939b939a50919850919650505050505050565b60006109f560646119ea60105485611ca890919063ffffffff16565b60006109f560646119ea60125485611ca890919063ffffffff16565b60006020828403121561285d57600080fd5b8135610ae181612bc7565b60006020828403121561287a57600080fd5b8151610ae181612bc7565b6000806040838503121561289857600080fd5b82356128a381612bc7565b915060208301356128b381612bc7565b809150509250929050565b6000806000606084860312156128d357600080fd5b83356128de81612bc7565b925060208401356128ee81612bc7565b929592945050506040919091013590565b6000806040838503121561291257600080fd5b823561291d81612bc7565b946020939093013593505050565b60006020828403121561293d57600080fd5b81358015158114610ae157600080fd5b60006020828403121561295f57600080fd5b5035919050565b60008060006060848603121561297b57600080fd5b8351925060208401519150604084015190509250925092565b600081518084526020808501945080840160005b838110156129cd5781516001600160a01b0316875295820195908201906001016129a8565b509495945050505050565b600060208083528351808285015260005b81811015612a05578581018301518582016040015282016129e9565b81811115612a17576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b828152604060208201526000612a7b6040830184612994565b949350505050565b85815284602082015260a060408201526000612aa260a0830186612994565b6001600160a01b0394909416606083015250608001529392505050565b60008219821115612ad257612ad2612b85565b500190565b600082612af457634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612b1357612b13612b85565b500290565b600082821015612b2a57612b2a612b85565b500390565b600181811c90821680612b4357607f821691505b60208210811415612b6457634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612b7e57612b7e612b85565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114612bdc57600080fd5b5056fe7472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0a264697066735822122029a9862b55b7f8f9904248f6458136569757ba80bfa2e9dea54da46028ce149264736f6c63430008070033
Deployed Bytecode Sourcemap
22207:22708:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42796:96;;;;;;;;;;-1:-1:-1;42796:96:0;;;;;:::i;:::-;;:::i;:::-;;25273:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43336:131;;;;;;;;;;-1:-1:-1;43336:131:0;;;;;:::i;:::-;;:::i;26268:193::-;;;;;;;;;;-1:-1:-1;26268:193:0;;;;;:::i;:::-;;:::i;:::-;;;4145:14:1;;4138:22;4120:41;;4108:2;4093:18;26268:193:0;3980:187:1;27753:87:0;;;;;;;;;;-1:-1:-1;27822:10:0;;27753:87;;;12498:25:1;;;12486:2;12471:18;27753:87:0;12352:177:1;23594:53:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3100:32:1;;;3082:51;;3070:2;3055:18;23594:53:0;2936:203:1;25560:95:0;;;;;;;;;;-1:-1:-1;25640:7:0;;25560:95;;26469:439;;;;;;;;;;-1:-1:-1;26469:439:0;;;;;:::i;:::-;;:::i;22455:90::-;;;;;;;;;;;;;;;27976:322;;;;;;;;;;-1:-1:-1;27976:322:0;;;;;:::i;:::-;;:::i;25460:92::-;;;;;;;;;;-1:-1:-1;25535:9:0;;25460:92;;25535:9;;;;13924:36:1;;13912:2;13897:18;25460:92:0;13782:184:1;28645:476:0;;;;;;;;;;-1:-1:-1;28645:476:0;;;;;:::i;:::-;;:::i;26916:300::-;;;;;;;;;;-1:-1:-1;26916:300:0;;;;;:::i;:::-;;:::i;23181:26::-;;;;;;;;;;;;;;;;44251:223;;;;;;;;;;-1:-1:-1;44251:223:0;;;;;:::i;:::-;;:::i;42559:111::-;;;;;;;;;;-1:-1:-1;42559:111:0;;;;;:::i;:::-;;:::i;23654:38::-;;;;;;;;;;;;;;;23729:40;;;;;;;;;;-1:-1:-1;23729:40:0;;;;;;;;;;;28306:331;;;;;;;;;;-1:-1:-1;28306:331:0;;;;;:::i;:::-;;:::i;42427:124::-;;;;;;;;;;-1:-1:-1;42427:124:0;;;;;:::i;:::-;-1:-1:-1;;;;;42516:27:0;42492:4;42516:27;;;:18;:27;;;;;;;;;42427:124;23264:32;;;;;;;;;;;;;;;;23873:35;;;;;;;;;;;;;;;25663:198;;;;;;;;;;-1:-1:-1;25663:198:0;;;;;:::i;:::-;;:::i;6722:148::-;;;;;;;;;;;;;:::i;23419:52::-;;;;;;;;;;;;;;;;23365:47;;;;;;;;;;;;;;;;27625:120;;;;;;;;;;-1:-1:-1;27625:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;27717:20:0;27693:4;27717:20;;;:11;:20;;;;;;;;;27625:120;6508:79;;;;;;;;;;-1:-1:-1;6546:7:0;6573:6;-1:-1:-1;;;;;6573:6:0;6508:79;;42900:120;;;;;;;;;;-1:-1:-1;42900:120:0;;;;;:::i;:::-;;:::i;25364:87::-;;;;;;;;;;;;;:::i;44482:337::-;;;;;;;;;;-1:-1:-1;44482:337:0;;;;;:::i;:::-;;:::i;27848:120::-;;;;;;;;;;-1:-1:-1;27937:23:0;;27848:120;;27224:393;;;;;;;;;;-1:-1:-1;27224:393:0;;;;;:::i;:::-;;:::i;7615:341::-;;;;;;;;;;;;;:::i;25869:199::-;;;;;;;;;;-1:-1:-1;25869:199:0;;;;;:::i;:::-;;:::i;24031:40::-;;;;;;;;;;-1:-1:-1;24031:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;22327:100;;;;;;;;;;-1:-1:-1;22327:100:0;;;;-1:-1:-1;;;;;22327:100:0;;;43475:171;;;;;;;;;;-1:-1:-1;43475:171:0;;;;;:::i;:::-;;:::i;23915:47::-;;;;;;;;;;;;23957:5;23915:47;;7381:226;;;;;;;;;;-1:-1:-1;7381:226:0;;;;;:::i;:::-;;:::i;26076:184::-;;;;;;;;;;-1:-1:-1;26076:184:0;;;;;:::i;:::-;-1:-1:-1;;;;;26225:18:0;;;26193:7;26225:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;26076:184;43145:183;;;;;;;;;;-1:-1:-1;43145:183:0;;;;;:::i;:::-;;:::i;42678:110::-;;;;;;;;;;-1:-1:-1;42678:110:0;;;;;:::i;:::-;;:::i;43028:109::-;;;;;;;;;;-1:-1:-1;43028:109:0;;;;;:::i;:::-;;:::i;6878:281::-;;;;;;;;;;-1:-1:-1;6878:281:0;;;;;:::i;:::-;;:::i;43923:149::-;;;;;;;;;;-1:-1:-1;43923:149:0;;;;;:::i;:::-;;:::i;42796:96::-;6635:6;;-1:-1:-1;;;;;6635:6:0;191:10;6635:22;6627:67;;;;-1:-1:-1;;;6627:67:0;;;;;;;:::i;:::-;;;;;;;;;42868:7:::1;:16:::0;42796:96::o;25273:83::-;25310:13;25343:5;25336:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25273:83;:::o;43336:131::-;6635:6;;-1:-1:-1;;;;;6635:6:0;191:10;6635:22;6627:67;;;;-1:-1:-1;;;6627:67:0;;;;;;;:::i;:::-;43418:14:::1;:41:::0;;-1:-1:-1;;;;;;43418:41:0::1;-1:-1:-1::0;;;;;43418:41:0;;;::::1;::::0;;;::::1;::::0;;43336:131::o;26268:193::-;26370:4;26392:39;191:10;26415:7;26424:6;26392:8;:39::i;:::-;-1:-1:-1;26449:4:0;26268:193;;;;;:::o;26469:439::-;26601:4;26618:36;26628:6;26636:9;26647:6;26618:9;:36::i;:::-;26665:213;26688:6;191:10;26736:131;26792:6;26736:131;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26736:19:0;;;;;;:11;:19;;;;;;;;191:10;26736:33;;;;;;;;;;:37;:131::i;:::-;26665:8;:213::i;:::-;-1:-1:-1;26896:4:0;26469:439;;;;;:::o;27976:322::-;28070:7;28128;;28117;:18;;28095:110;;;;-1:-1:-1;;;28095:110:0;;5564:2:1;28095:110:0;;;5546:21:1;5603:2;5583:18;;;5576:30;5642:34;5622:18;;;5615:62;-1:-1:-1;;;5693:18:1;;;5686:40;5743:19;;28095:110:0;5362:406:1;28095:110:0;28216:19;28238:10;:8;:10::i;:::-;28216:32;-1:-1:-1;28266:24:0;:7;28216:32;28266:11;:24::i;:::-;28259:31;27976:322;-1:-1:-1;;;27976:322:0:o;28645:476::-;6635:6;;-1:-1:-1;;;;;6635:6:0;191:10;6635:22;6627:67;;;;-1:-1:-1;;;6627:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28725:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;28717:59;;;::::0;-1:-1:-1;;;28717:59:0;;11099:2:1;28717:59:0::1;::::0;::::1;11081:21:1::0;11138:2;11118:18;;;11111:30;11177:28;11157:18;;;11150:56;11223:18;;28717:59:0::1;10897:350:1::0;28717:59:0::1;28792:9;28787:327;28811:9;:16:::0;28807:20;::::1;28787:327;;;28869:7;-1:-1:-1::0;;;;;28853:23:0::1;:9;28863:1;28853:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;28853:12:0::1;:23;28849:254;;;28912:9;28922:16:::0;;:20:::1;::::0;28941:1:::1;::::0;28922:20:::1;:::i;:::-;28912:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;28897:9:::1;:12:::0;;-1:-1:-1;;;;;28912:31:0;;::::1;::::0;28907:1;;28897:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;28897:46:0::1;-1:-1:-1::0;;;;;28897:46:0;;::::1;;::::0;;28962:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;29001:11:::1;:20:::0;;;;:28;;-1:-1:-1;;29001:28:0::1;::::0;;29048:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;29048:15:0;;;;;-1:-1:-1;;;;;;29048:15:0::1;::::0;;;;;28787:327:::1;28645:476:::0;:::o;28849:254::-:1;28829:3:::0;::::1;::::0;::::1;:::i;:::-;;;;28787:327;;;;28645:476:::0;:::o;26916:300::-;191:10;27031:4;27125:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;27125:34:0;;;;;;;;;;27031:4;;27053:133;;27103:7;;27125:50;;27164:10;27125:38;:50::i;44251:223::-;43866:10;44320:4;43857:20;;;:8;:20;;;;;;;;43849:46;;;;-1:-1:-1;;;43849:46:0;;9685:2:1;43849:46:0;;;9667:21:1;9724:2;9704:18;;;9697:30;-1:-1:-1;;;9743:18:1;;;9736:43;9796:18;;43849:46:0;9483:337:1;43849:46:0;-1:-1:-1;;;;;44344:16:0;::::1;44336:47;;;::::0;-1:-1:-1;;;44336:47:0;;11454:2:1;44336:47:0::1;::::0;::::1;11436:21:1::0;11493:2;11473:18;;;11466:30;-1:-1:-1;;;11512:18:1;;;11505:48;11570:18;;44336:47:0::1;11252:342:1::0;44336:47:0::1;44396:48;44419:4;44426:2;44430:6;44438:5;44396:14;:48::i;42559:111::-:0;6635:6;;-1:-1:-1;;;;;6635:6:0;191:10;6635:22;6627:67;;;;-1:-1:-1;;;6627:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42628:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;42628:34:0::1;42658:4;42628:34;::::0;;42559:111::o;28306:331::-;6635:6;;-1:-1:-1;;;;;6635:6:0;191:10;6635:22;6627:67;;;;-1:-1:-1;;;6627:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28387:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;28386:21;28378:60;;;::::0;-1:-1:-1;;;28378:60:0;;11099:2:1;28378:60:0::1;::::0;::::1;11081:21:1::0;11138:2;11118:18;;;11111:30;11177:28;11157:18;;;11150:56;11223:18;;28378:60:0::1;10897:350:1::0;28378:60:0::1;-1:-1:-1::0;;;;;28453:16:0;::::1;28472:1;28453:16:::0;;;:7:::1;:16;::::0;;;;;:20;28449:109:::1;;-1:-1:-1::0;;;;;28529:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;28509:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;28490:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;28449:109:::1;-1:-1:-1::0;;;;;28568:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;28568:27:0::1;28591:4;28568:27:::0;;::::1;::::0;;;28606:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;28606:23:0::1;::::0;;::::1;::::0;;28306:331::o;25663:198::-;-1:-1:-1;;;;;25753:20:0;;25729:7;25753:20;;;:11;:20;;;;;;;;25749:49;;;-1:-1:-1;;;;;;25782:16:0;;;;;:7;:16;;;;;;;25663:198::o;25749:49::-;-1:-1:-1;;;;;25836:16:0;;;;;;:7;:16;;;;;;25816:37;;:19;:37::i;6722:148::-;6635:6;;-1:-1:-1;;;;;6635:6:0;191:10;6635:22;6627:67;;;;-1:-1:-1;;;6627:67:0;;;;;;;:::i;:::-;6829:1:::1;6813:6:::0;;6792:40:::1;::::0;-1:-1:-1;;;;;6813:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;6792:40:0;6829:1;;6792:40:::1;6860:1;6843:19:::0;;-1:-1:-1;;;;;;6843:19:0::1;::::0;;6722:148::o;42900:120::-;6635:6;;-1:-1:-1;;;;;6635:6:0;191:10;6635:22;6627:67;;;;-1:-1:-1;;;6627:67:0;;;;;;;:::i;:::-;42984:13:::1;:28:::0;42900:120::o;25364:87::-;25403:13;25436:7;25429:14;;;;;:::i;44482:337::-;43866:10;44553:4;43857:20;;;:8;:20;;;;;;;;43849:46;;;;-1:-1:-1;;;43849:46:0;;9685:2:1;43849:46:0;;;9667:21:1;9724:2;9704:18;;;9697:30;-1:-1:-1;;;9743:18:1;;;9736:43;9796:18;;43849:46:0;9483:337:1;43849:46:0;-1:-1:-1;;;;;44578:18:0;::::1;44570:46;;;::::0;-1:-1:-1;;;44570:46:0;;8939:2:1;44570:46:0::1;::::0;::::1;8921:21:1::0;8978:2;8958:18;;;8951:30;-1:-1:-1;;;8997:18:1;;;8990:45;9052:18;;44570:46:0::1;8737:339:1::0;44570:46:0::1;44629:15;44647;44657:4;44647:9;:15::i;:::-;44629:33;;44692:6;44681:7;:17;;44673:45;;;::::0;-1:-1:-1;;;44673:45:0;;7434:2:1;44673:45:0::1;::::0;::::1;7416:21:1::0;7473:2;7453:18;;;7446:30;-1:-1:-1;;;7492:18:1;;;7485:45;7547:18;;44673:45:0::1;7232:339:1::0;44673:45:0::1;44739:50;44754:4;44768;44775:6;44783:5;44739:14;:50::i;27224:393::-:0;27344:4;27366:221;191:10;27416:7;27438:138;27495:15;27438:138;;;;;;;;;;;;;;;;;:11;:25;27450:12;191:10;;95:115;27450:12;-1:-1:-1;;;;;27438:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;27438:25:0;;;:34;;;;;;;;;;;:138;:38;:138::i;7615:341::-;7681:14;;-1:-1:-1;;;;;7681:14:0;7699:10;7681:28;7659:113;;;;-1:-1:-1;;;7659:113:0;;11801:2:1;7659:113:0;;;11783:21:1;11840:2;11820:18;;;11813:30;11879:34;11859:18;;;11852:62;-1:-1:-1;;;11930:18:1;;;11923:33;11973:19;;7659:113:0;11599:399:1;7659:113:0;7809:9;;7791:15;:27;7783:71;;;;-1:-1:-1;;;7783:71:0;;10739:2:1;7783:71:0;;;10721:21:1;10778:2;10758:18;;;10751:30;10817:33;10797:18;;;10790:61;10868:18;;7783:71:0;10537:355:1;7783:71:0;7899:14;;;7891:6;;7870:44;;-1:-1:-1;;;;;7899:14:0;;;;7891:6;;;;-1:-1:-1;;;;;;;;;;;7870:44:0;;7934:14;;;7925:23;;-1:-1:-1;;;;;;7925:23:0;-1:-1:-1;;;;;7934:14:0;;;7925:23;;;;;;7615:341::o;25869:199::-;25974:4;25996:42;191:10;26020:9;26031:6;25996:9;:42::i;43475:171::-;6635:6;;-1:-1:-1;;;;;6635:6:0;191:10;6635:22;6627:67;;;;-1:-1:-1;;;6627:67:0;;;;;;;:::i;:::-;43552:21:::1;:32:::0;;;::::1;;;;-1:-1:-1::0;;43552:32:0;;::::1;;::::0;;43600:38:::1;::::0;::::1;::::0;::::1;::::0;43576:8;4145:14:1;4138:22;4120:41;;4108:2;4093:18;;3980:187;43600:38:0::1;;;;;;;;43475:171:::0;:::o;7381:226::-;6635:6;;-1:-1:-1;;;;;6635:6:0;191:10;6635:22;6627:67;;;;-1:-1:-1;;;6627:67:0;;;;;;;:::i;:::-;7462:6:::1;::::0;;;7445:23;;-1:-1:-1;;;;;;7445:23:0;;::::1;-1:-1:-1::0;;;;;7462:6:0;::::1;7445:23;::::0;;;7479:19:::1;::::0;;7521:22:::1;7539:4:::0;7521:15:::1;:22;:::i;:::-;7509:9;:34:::0;7596:1:::1;7580:6:::0;;7559:40:::1;::::0;-1:-1:-1;;;;;7580:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;7559:40:0;7596:1;;7559:40:::1;7381:226:::0;:::o;43145:183::-;6635:6;;-1:-1:-1;;;;;6635:6:0;191:10;6635:22;6627:67;;;;-1:-1:-1;;;6627:67:0;;;;;;;:::i;:::-;43270:23:::1;:50:::0;43145:183::o;42678:110::-;6635:6;;-1:-1:-1;;;;;6635:6:0;191:10;6635:22;6627:67;;;;-1:-1:-1;;;6627:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42745:27:0::1;42775:5;42745:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;42745:35:0::1;::::0;;42678:110::o;43028:109::-;6635:6;;-1:-1:-1;;;;;6635:6:0;191:10;6635:22;6627:67;;;;-1:-1:-1;;;6627:67:0;;;;;;;:::i;:::-;43103:12:::1;:26:::0;43028:109::o;6878:281::-;6635:6;;-1:-1:-1;;;;;6635:6:0;191:10;6635:22;6627:67;;;;-1:-1:-1;;;6627:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6981:22:0;::::1;6959:110;;;::::0;-1:-1:-1;;;6959:110:0;;5975:2:1;6959:110:0::1;::::0;::::1;5957:21:1::0;6014:2;5994:18;;;5987:30;6053:34;6033:18;;;6026:62;-1:-1:-1;;;6104:18:1;;;6097:36;6150:19;;6959:110:0::1;5773:402:1::0;6959:110:0::1;7106:6;::::0;;7085:38:::1;::::0;-1:-1:-1;;;;;7085:38:0;;::::1;::::0;7106:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;7085:38:0;::::1;7134:6;:17:::0;;-1:-1:-1;;;;;;7134:17:0::1;-1:-1:-1::0;;;;;7134:17:0;;;::::1;::::0;;;::::1;::::0;;6878:281::o;43923:149::-;6635:6;;-1:-1:-1;;;;;6635:6:0;191:10;6635:22;6627:67;;;;-1:-1:-1;;;6627:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43993:19:0;::::1;43985:46;;;::::0;-1:-1:-1;;;43985:46:0;;6735:2:1;43985:46:0::1;::::0;::::1;6717:21:1::0;6774:2;6754:18;;;6747:30;-1:-1:-1;;;6793:18:1;;;6786:44;6847:18;;43985:46:0::1;6533:338:1::0;43985:46:0::1;-1:-1:-1::0;;;;;44042:15:0::1;;::::0;;;:8:::1;:15;::::0;;;;:22;;-1:-1:-1;;44042:22:0::1;44060:4;44042:22;::::0;;43923:149::o;29129:343::-;-1:-1:-1;;;;;29256:19:0;;29248:54;;;;-1:-1:-1;;;29248:54:0;;10388:2:1;29248:54:0;;;10370:21:1;10427:2;10407:18;;;10400:30;-1:-1:-1;;;10446:18:1;;;10439:52;10508:18;;29248:54:0;10186:346:1;29248:54:0;-1:-1:-1;;;;;29321:21:0;;29313:54;;;;-1:-1:-1;;;29313:54:0;;12205:2:1;29313:54:0;;;12187:21:1;12244:2;12224:18;;;12217:30;-1:-1:-1;;;12263:18:1;;;12256:50;12323:18;;29313:54:0;12003:344:1;29313:54:0;-1:-1:-1;;;;;29380:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;29432:32;;12498:25:1;;;29432:32:0;;12471:18:1;29432:32:0;;;;;;;29129:343;;;:::o;29480:2141::-;-1:-1:-1;;;;;29602:18:0;;29594:55;;;;-1:-1:-1;;;29594:55:0;;6382:2:1;29594:55:0;;;6364:21:1;6421:2;6401:18;;;6394:30;6460:26;6440:18;;;6433:54;6504:18;;29594:55:0;6180:348:1;29594:55:0;-1:-1:-1;;;;;29668:16:0;;29660:51;;;;-1:-1:-1;;;29660:51:0;;5213:2:1;29660:51:0;;;5195:21:1;5252:2;5232:18;;;5225:30;-1:-1:-1;;;5271:18:1;;;5264:52;5333:18;;29660:51:0;5011:346:1;29660:51:0;29739:1;29730:6;:10;29722:45;;;;-1:-1:-1;;;29722:45:0;;7778:2:1;29722:45:0;;;7760:21:1;7817:2;7797:18;;;7790:30;-1:-1:-1;;;7836:18:1;;;7829:52;7898:18;;29722:45:0;7576:346:1;29722:45:0;6546:7;6573:6;-1:-1:-1;;;;;29796:15:0;;;6573:6;;29796:15;;;;:45;;-1:-1:-1;6546:7:0;6573:6;-1:-1:-1;;;;;29828:13:0;;;6573:6;;29828:13;;29796:45;:83;;;;-1:-1:-1;;;;;;29858:21:0;;29872:6;29858:21;;29796:83;:119;;;;;29902:13;-1:-1:-1;;;;;29896:19:0;:2;-1:-1:-1;;;;;29896:19:0;;;29796:119;29778:526;;;29978:12;;29968:6;:22;;29942:120;;;;-1:-1:-1;;;29942:120:0;;8129:2:1;29942:120:0;;;8111:21:1;8168:2;8148:18;;;8141:30;8207:34;8187:18;;;8180:62;-1:-1:-1;;;8258:18:1;;;8251:34;8302:19;;29942:120:0;7927:400:1;29942:120:0;30079:32;30114:13;30124:2;30114:9;:13::i;:::-;30205:15;;30079:48;;-1:-1:-1;30168:33:0;30195:6;30079:48;30168:33;:::i;:::-;:52;;30142:150;;;;-1:-1:-1;;;30142:150:0;;8534:2:1;30142:150:0;;;8516:21:1;8573:2;8553:18;;;8546:30;8612:34;8592:18;;;8585:62;-1:-1:-1;;;8663:18:1;;;8656:34;8707:19;;30142:150:0;8332:400:1;30142:150:0;29927:377;29778:526;30316:28;30347:24;30365:4;30347:9;:24::i;:::-;30421:23;;30476:8;;30316:55;;-1:-1:-1;30397:47:0;;;;30476:8;;;;;30475:9;:43;;;;-1:-1:-1;30502:16:0;;;;30501:17;30475:43;:81;;;;-1:-1:-1;30535:21:0;;;;;;;30475:81;:117;;;;;30579:13;-1:-1:-1;;;;;30573:19:0;:2;-1:-1:-1;;;;;30573:19:0;;30475:117;:156;;;;-1:-1:-1;30617:14:0;;-1:-1:-1;;;;;30609:22:0;;;30617:14;;30609:22;;30475:156;:193;;;;-1:-1:-1;30654:14:0;;-1:-1:-1;;;;;30648:20:0;;;30654:14;;30648:20;;30475:193;:217;;;;;30685:7;30475:217;30457:877;;;30719:8;:15;;-1:-1:-1;;30719:15:0;;;;;30799:13;;30719:15;;30774:82;;30836:5;;30774:39;;:20;;:24;:39::i;:::-;:43;;:82::i;:::-;30751:105;;30871:28;30886:12;30871:14;:28::i;:::-;30916:21;30940:24;30958:4;30940:9;:24::i;:::-;30916:48;;30979:25;30990:13;30979:10;:25::i;:::-;-1:-1:-1;;31021:8:0;:16;;-1:-1:-1;;31021:16:0;;;30457:877;-1:-1:-1;;;;;31466:24:0;;31346:12;31466:24;;;:18;:24;;;;;;31361:4;;31466:24;;;:50;;-1:-1:-1;;;;;;31494:22:0;;;;;;:18;:22;;;;;;;;31466:50;31462:98;;;-1:-1:-1;31543:5:0;31462:98;31572:41;31587:4;31593:2;31597:6;31605:7;31572:14;:41::i;:::-;29583:2038;;;29480:2141;;;:::o;1673:226::-;1793:7;1829:12;1821:6;;;;1813:29;;;;-1:-1:-1;;;1813:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1853:9:0;1865:5;1869:1;1865;:5;:::i;:::-;1853:17;1673:226;-1:-1:-1;;;;;1673:226:0:o;40253:164::-;40295:7;40316:15;40333;40352:19;:17;:19::i;:::-;40315:56;;-1:-1:-1;40315:56:0;-1:-1:-1;40389:20:0;40315:56;;40389:11;:20::i;:::-;40382:27;;;;40253:164;:::o;2165:132::-;2223:7;2250:39;2254:1;2257;2250:39;;;;;;;;;;;;;;;;;:3;:39::i;1340:181::-;1398:7;;1430:5;1434:1;1430;:5;:::i;:::-;1418:17;;1459:1;1454;:6;;1446:46;;;;-1:-1:-1;;;1446:46:0;;7078:2:1;1446:46:0;;;7060:21:1;7117:2;7097:18;;;7090:30;7156:29;7136:18;;;7129:57;7203:18;;1446:46:0;6876:351:1;34740:708:0;34896:7;34891:28;;34905:14;:12;:14::i;:::-;-1:-1:-1;;;;;34936:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;34960:22:0;;;;;;:11;:22;;;;;;;;34959:23;34936:46;34932:467;;;34999:48;35021:6;35029:9;35040:6;34999:21;:48::i;:::-;34932:467;;;-1:-1:-1;;;;;35070:19:0;;;;;;:11;:19;;;;;;;;35069:20;:46;;;;-1:-1:-1;;;;;;35093:22:0;;;;;;:11;:22;;;;;;;;35069:46;35065:334;;;35132:46;35152:6;35160:9;35171:6;35132:19;:46::i;35065:334::-;-1:-1:-1;;;;;35200:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;35223:22:0;;;;;;:11;:22;;;;;;;;35200:45;35196:203;;;35262:48;35284:6;35292:9;35303:6;35262:21;:48::i;35196:203::-;35343:44;35361:6;35369:9;35380:6;35343:17;:44::i;:::-;35416:7;35411:29;;35425:15;42348;;42338:7;:25;42390:21;;42374:13;:37;42294:125;35425:15;34740:708;;;;:::o;1907:250::-;1965:7;1989:6;1985:47;;-1:-1:-1;2019:1:0;2012:8;;1985:47;2044:9;2056:5;2060:1;2056;:5;:::i;:::-;2044:17;-1:-1:-1;2089:1:0;2080:5;2084:1;2044:17;2080:5;:::i;:::-;:10;2072:56;;;;-1:-1:-1;;;2072:56:0;;9283:2:1;2072:56:0;;;9265:21:1;9322:2;9302:18;;;9295:30;9361:34;9341:18;;;9334:62;-1:-1:-1;;;9412:18:1;;;9405:31;9453:19;;2072:56:0;9081:397:1;31629:935:0;24541:16;:23;;-1:-1:-1;;24541:23:0;24560:4;24541:23;;;:16;31766:13:::1;:6:::0;31777:1:::1;31766:10;:13::i;:::-;31751:28:::0;-1:-1:-1;31790:17:0::1;31810:16;:6:::0;31751:28;31810:10:::1;:16::i;:::-;31790:36:::0;-1:-1:-1;32129:21:0::1;32195:22;32212:4:::0;32195:16:::1;:22::i;:::-;32348:18;32369:41;:21;32395:14:::0;32369:25:::1;:41::i;:::-;32348:62;;32460:35;32473:9;32484:10;32460:12;:35::i;:::-;32513:43;::::0;;13660:25:1;;;13716:2;13701:18;;13694:34;;;13744:18;;;13737:34;;;32513:43:0::1;::::0;13648:2:1;13633:18;32513:43:0::1;;;;;;;-1:-1:-1::0;;24587:16:0;:24;;-1:-1:-1;;24587:24:0;;;-1:-1:-1;;;31629:935:0:o;32572:369::-;24541:16;:23;;-1:-1:-1;;24541:23:0;24560:4;24541:23;;;32678:21:::1;32710:38;32727:20:::0;32710:16:::1;:38::i;:::-;32759:26;32788:41;:21;32814:14:::0;32788:25:::1;:41::i;:::-;32898:14;::::0;32759:70;;-1:-1:-1;32877:56:0::1;::::0;-1:-1:-1;;;;;32898:14:0::1;32759:70:::0;32877:20:::1;:56::i;:::-;-1:-1:-1::0;;24587:16:0;:24;;-1:-1:-1;;24587:24:0;;;-1:-1:-1;32572:369:0:o;40425:605::-;40523:7;;40559;;40476;;;;;40577:338;40601:9;:16;40597:20;;40577:338;;;40685:7;40661;:21;40669:9;40679:1;40669:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;40669:12:0;40661:21;;;;;;;;;;;;;:31;;:83;;;40737:7;40713;:21;40721:9;40731:1;40721:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;40721:12:0;40713:21;;;;;;;;;;;;;:31;40661:83;40639:146;;;40768:7;;40777;;40760:25;;;;;;;40425:605;;:::o;40639:146::-;40810:34;40822:7;:21;40830:9;40840:1;40830:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;40830:12:0;40822:21;;;;;;;;;;;;;40810:7;;:11;:34::i;:::-;40800:44;;40869:34;40881:7;:21;40889:9;40899:1;40889:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;40889:12:0;40881:21;;;;;;;;;;;;;40869:7;;:11;:34::i;:::-;40859:44;-1:-1:-1;40619:3:0;;;;:::i;:::-;;;;40577:338;;;-1:-1:-1;40951:7:0;;40939;;:20;;:11;:20::i;:::-;40929:7;:30;40925:61;;;40969:7;;40978;;40961:25;;;;;;40425:605;;:::o;40925:61::-;41005:7;;41014;;-1:-1:-1;40425:605:0;-1:-1:-1;40425:605:0:o;2305:312::-;2425:7;2460:12;2453:5;2445:28;;;;-1:-1:-1;;;2445:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2484:9:0;2496:5;2500:1;2496;:5;:::i;42051:235::-;42098:7;;:12;:34;;;;-1:-1:-1;42114:13:0;;:18;42098:34;42094:47;;;42051:235::o;42094:47::-;42171:7;;;42153:15;:25;42213:13;;;42189:21;:37;-1:-1:-1;42239:11:0;;;;42261:17;42051:235::o;36851:714::-;37002:15;37032:23;37070:12;37097:23;37135:12;37162:18;37194:19;37205:7;37194:10;:19::i;:::-;-1:-1:-1;;;;;37242:15:0;;;;;;:7;:15;;;;;;36987:226;;-1:-1:-1;36987:226:0;;-1:-1:-1;36987:226:0;;-1:-1:-1;36987:226:0;-1:-1:-1;36987:226:0;-1:-1:-1;36987:226:0;-1:-1:-1;37242:28:0;;37262:7;37242:19;:28::i;:::-;-1:-1:-1;;;;;37224:15:0;;;;;;:7;:15;;;;;;;;:46;;;;37299:7;:15;;;;:28;;37319:7;37299:19;:28::i;:::-;-1:-1:-1;;;;;37281:15:0;;;;;;;:7;:15;;;;;;:46;;;;37359:18;;;;;;;:39;;37382:15;37359:22;:39::i;:::-;-1:-1:-1;;;;;37338:18:0;;;;;;:7;:18;;;;;:60;37409:26;37424:10;37409:14;:26::i;:::-;37446:17;37458:4;37446:11;:17::i;:::-;37474:23;37486:4;37492;37474:11;:23::i;:::-;37530:9;-1:-1:-1;;;;;37513:44:0;37522:6;-1:-1:-1;;;;;37513:44:0;;37541:15;37513:44;;;;12498:25:1;;12486:2;12471:18;;12352:177;37513:44:0;;;;;;;;36976:589;;;;;;36851:714;;;:::o;36117:726::-;36266:15;36296:23;36334:12;36361:23;36399:12;36426:18;36458:19;36469:7;36458:10;:19::i;:::-;-1:-1:-1;;;;;36506:15:0;;;;;;:7;:15;;;;;;36251:226;;-1:-1:-1;36251:226:0;;-1:-1:-1;36251:226:0;;-1:-1:-1;36251:226:0;-1:-1:-1;36251:226:0;-1:-1:-1;36251:226:0;-1:-1:-1;36506:28:0;;36251:226;36506:19;:28::i;:::-;-1:-1:-1;;;;;36488:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;36566:18;;;;;:7;:18;;;;;:39;;36589:15;36566:22;:39::i;:::-;-1:-1:-1;;;;;36545:18:0;;;;;;:7;:18;;;;;;;;:60;;;;36637:7;:18;;;;:39;;36660:15;36637:22;:39::i;37573:785::-;37724:15;37754:23;37792:12;37819:23;37857:12;37884:18;37916:19;37927:7;37916:10;:19::i;:::-;-1:-1:-1;;;;;37964:15:0;;;;;;:7;:15;;;;;;37709:226;;-1:-1:-1;37709:226:0;;-1:-1:-1;37709:226:0;;-1:-1:-1;37709:226:0;-1:-1:-1;37709:226:0;-1:-1:-1;37709:226:0;-1:-1:-1;37964:28:0;;37984:7;37964:19;:28::i;:::-;-1:-1:-1;;;;;37946:15:0;;;;;;:7;:15;;;;;;;;:46;;;;38021:7;:15;;;;:28;;38041:7;38021:19;:28::i;35456:653::-;35603:15;35633:23;35671:12;35698:23;35736:12;35763:18;35795:19;35806:7;35795:10;:19::i;:::-;-1:-1:-1;;;;;35843:15:0;;;;;;:7;:15;;;;;;35588:226;;-1:-1:-1;35588:226:0;;-1:-1:-1;35588:226:0;;-1:-1:-1;35588:226:0;-1:-1:-1;35588:226:0;-1:-1:-1;35588:226:0;-1:-1:-1;35843:28:0;;35588:226;1529:136;1587:7;1614:43;1618:1;1621;1614:43;;;;;;;;;;;;;;;;;:3;:43::i;32949:658::-;33099:16;;;33113:1;33099:16;;;;;;;;33075:21;;33099:16;;;;;;;;;;-1:-1:-1;33099:16:0;33075:40;;33144:4;33126;33131:1;33126:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;33126:23:0;;;-1:-1:-1;;;;;33126:23:0;;;;;33170:15;-1:-1:-1;;;;;33170:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33160:4;33165:1;33160:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;33160:32:0;;;-1:-1:-1;;;;;33160:32:0;;;;;33205:62;33222:4;33237:15;33255:11;33205:8;:62::i;:::-;33306:240;;-1:-1:-1;;;33306:240:0;;-1:-1:-1;;;;;33306:15:0;:66;;;;:240;;33387:11;;33413:1;;33457:4;;33484;;33520:15;;33306:240;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33564:35;33581:11;33594:4;33564:35;;;;;;;:::i;:::-;;;;;;;;33004:603;32949:658;:::o;34219:513::-;34367:62;34384:4;34399:15;34417:11;34367:8;:62::i;:::-;34472:15;-1:-1:-1;;;;;34472:31:0;;34511:9;34544:4;34564:11;34590:1;34633;34676:7;6546;6573:6;-1:-1:-1;;;;;6573:6:0;;6508:79;34676:7;34472:252;;;;;;-1:-1:-1;;;;;;34472:252:0;;;-1:-1:-1;;;;;3727:15:1;;;34472:252:0;;;3709:34:1;3759:18;;;3752:34;;;;3802:18;;;3795:34;;;;3845:18;;;3838:34;3909:15;;;3888:19;;;3881:44;34698:15:0;3941:19:1;;;3934:35;3643:19;;34472:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;34219:513;;:::o;43654:140::-;43760:26;;-1:-1:-1;;;;;43760:18:0;;;:26;;;;;43779:6;;43760:26;;;;43779:6;43760:18;:26;;;;;;;;;;;;;;;;;;;;;43654:140;;:::o;38521:742::-;38621:7;38643;38665;38687;38709;38731;38781:23;38819:12;38846:18;38878:20;38890:7;38878:11;:20::i;:::-;38766:132;;;;;;38910:15;38927:23;38952:12;38968:113;38994:7;39016:4;39035:10;39060;:8;:10::i;:::-;38968:11;:113::i;:::-;38909:172;;;;-1:-1:-1;38909:172:0;;-1:-1:-1;39185:15:0;;-1:-1:-1;39215:4:0;;-1:-1:-1;39234:10:0;;-1:-1:-1;38521:742:0;;-1:-1:-1;;;;;38521:742:0:o;41038:355::-;41101:19;41123:10;:8;:10::i;:::-;41101:32;-1:-1:-1;41144:18:0;41165:27;:10;41101:32;41165:14;:27::i;:::-;41244:4;41228:22;;;;:7;:22;;;;;;41144:48;;-1:-1:-1;41228:38:0;;41144:48;41228:26;:38::i;:::-;41219:4;41203:22;;;;:7;:22;;;;;;;;:63;;;;41281:11;:26;;;;;;41277:108;;;41363:4;41347:22;;;;:7;:22;;;;;;:38;;41374:10;41347:26;:38::i;:::-;41338:4;41322:22;;;;:7;:22;;;;;:63;41090:303;;41038:355;:::o;41401:322::-;41455:19;41477:10;:8;:10::i;:::-;41455:32;-1:-1:-1;41498:12:0;41513:21;:4;41455:32;41513:8;:21::i;:::-;41586:4;41570:22;;;;:7;:22;;;;;;41498:36;;-1:-1:-1;41570:32:0;;41498:36;41570:26;:32::i;:::-;41561:4;41545:22;;;;:7;:22;;;;;;;;:57;;;;41617:11;:26;;;;;;41613:102;;;41699:4;41683:22;;;;:7;:22;;;;;;:32;;41710:4;41683:26;:32::i;38366:147::-;38444:7;;:17;;38456:4;38444:11;:17::i;:::-;38434:7;:27;38485:10;;:20;;38500:4;38485:14;:20::i;:::-;38472:10;:33;-1:-1:-1;;38366:147:0:o;39271:412::-;39372:7;39394;39416;39451:12;39466:24;39482:7;39466:15;:24::i;:::-;39451:39;;39501:18;39522:30;39544:7;39522:21;:30::i;:::-;39501:51;-1:-1:-1;39563:23:0;39589:33;39501:51;39589:17;:7;39601:4;39589:11;:17::i;:::-;:21;;:33::i;:::-;39563:59;39658:4;;-1:-1:-1;39664:10:0;;-1:-1:-1;39271:412:0;;-1:-1:-1;;;39271:412:0:o;39691:554::-;39890:7;;;;39987:24;:7;39999:11;39987;:24::i;:::-;39969:42;-1:-1:-1;40022:12:0;40037:21;:4;40046:11;40037:8;:21::i;:::-;40022:36;-1:-1:-1;40069:18:0;40090:27;:10;40105:11;40090:14;:27::i;:::-;40069:48;-1:-1:-1;40128:23:0;40154:33;40069:48;40154:17;:7;40166:4;40154:11;:17::i;:33::-;40206:7;;;;-1:-1:-1;40232:4:0;;-1:-1:-1;39691:554:0;;-1:-1:-1;;;;;;;39691:554:0:o;41731:130::-;41795:7;41822:31;41847:5;41822:20;41834:7;;41822;:11;;:20;;;;:::i;41869:174::-;41966:7;41998:37;42029:5;41998:26;42010:13;;41998:7;:11;;:26;;;;:::i;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:273::-;1752:6;1805:2;1793:9;1784:7;1780:23;1776:32;1773:52;;;1821:1;1818;1811:12;1773:52;1860:9;1847:23;1913:5;1906:13;1899:21;1892:5;1889:32;1879:60;;1935:1;1932;1925:12;1974:180;2033:6;2086:2;2074:9;2065:7;2061:23;2057:32;2054:52;;;2102:1;2099;2092:12;2054:52;-1:-1:-1;2125:23:1;;1974:180;-1:-1:-1;1974:180:1:o;2159:306::-;2247:6;2255;2263;2316:2;2304:9;2295:7;2291:23;2287:32;2284:52;;;2332:1;2329;2322:12;2284:52;2361:9;2355:16;2345:26;;2411:2;2400:9;2396:18;2390:25;2380:35;;2455:2;2444:9;2440:18;2434:25;2424:35;;2159:306;;;;;:::o;2470:461::-;2523:3;2561:5;2555:12;2588:6;2583:3;2576:19;2614:4;2643:2;2638:3;2634:12;2627:19;;2680:2;2673:5;2669:14;2701:1;2711:195;2725:6;2722:1;2719:13;2711:195;;;2790:13;;-1:-1:-1;;;;;2786:39:1;2774:52;;2846:12;;;;2881:15;;;;2822:1;2740:9;2711:195;;;-1:-1:-1;2922:3:1;;2470:461;-1:-1:-1;;;;;2470:461:1:o;4409:597::-;4521:4;4550:2;4579;4568:9;4561:21;4611:6;4605:13;4654:6;4649:2;4638:9;4634:18;4627:34;4679:1;4689:140;4703:6;4700:1;4697:13;4689:140;;;4798:14;;;4794:23;;4788:30;4764:17;;;4783:2;4760:26;4753:66;4718:10;;4689:140;;;4847:6;4844:1;4841:13;4838:91;;;4917:1;4912:2;4903:6;4892:9;4888:22;4884:31;4877:42;4838:91;-1:-1:-1;4990:2:1;4969:15;-1:-1:-1;;4965:29:1;4950:45;;;;4997:2;4946:54;;4409:597;-1:-1:-1;;;4409:597:1:o;9825:356::-;10027:2;10009:21;;;10046:18;;;10039:30;10105:34;10100:2;10085:18;;10078:62;10172:2;10157:18;;9825:356::o;12534:332::-;12741:6;12730:9;12723:25;12784:2;12779;12768:9;12764:18;12757:30;12704:4;12804:56;12856:2;12845:9;12841:18;12833:6;12804:56;:::i;:::-;12796:64;12534:332;-1:-1:-1;;;;12534:332:1:o;12871:582::-;13170:6;13159:9;13152:25;13213:6;13208:2;13197:9;13193:18;13186:34;13256:3;13251:2;13240:9;13236:18;13229:31;13133:4;13277:57;13329:3;13318:9;13314:19;13306:6;13277:57;:::i;:::-;-1:-1:-1;;;;;13370:32:1;;;;13365:2;13350:18;;13343:60;-1:-1:-1;13434:3:1;13419:19;13412:35;13269:65;12871:582;-1:-1:-1;;;12871:582:1:o;13971:128::-;14011:3;14042:1;14038:6;14035:1;14032:13;14029:39;;;14048:18;;:::i;:::-;-1:-1:-1;14084:9:1;;13971:128::o;14104:217::-;14144:1;14170;14160:132;;14214:10;14209:3;14205:20;14202:1;14195:31;14249:4;14246:1;14239:15;14277:4;14274:1;14267:15;14160:132;-1:-1:-1;14306:9:1;;14104:217::o;14326:168::-;14366:7;14432:1;14428;14424:6;14420:14;14417:1;14414:21;14409:1;14402:9;14395:17;14391:45;14388:71;;;14439:18;;:::i;:::-;-1:-1:-1;14479:9:1;;14326:168::o;14499:125::-;14539:4;14567:1;14564;14561:8;14558:34;;;14572:18;;:::i;:::-;-1:-1:-1;14609:9:1;;14499:125::o;14629:380::-;14708:1;14704:12;;;;14751;;;14772:61;;14826:4;14818:6;14814:17;14804:27;;14772:61;14879:2;14871:6;14868:14;14848:18;14845:38;14842:161;;;14925:10;14920:3;14916:20;14913:1;14906:31;14960:4;14957:1;14950:15;14988:4;14985:1;14978:15;14842:161;;14629:380;;;:::o;15014:135::-;15053:3;-1:-1:-1;;15074:17:1;;15071:43;;;15094:18;;:::i;:::-;-1:-1:-1;15141:1:1;15130:13;;15014:135::o;15154:127::-;15215:10;15210:3;15206:20;15203:1;15196:31;15246:4;15243:1;15236:15;15270:4;15267:1;15260:15;15286:127;15347:10;15342:3;15338:20;15335:1;15328:31;15378:4;15375:1;15368:15;15402:4;15399:1;15392:15;15418:127;15479:10;15474:3;15470:20;15467:1;15460:31;15510:4;15507:1;15500:15;15534:4;15531:1;15524:15;15682:131;-1:-1:-1;;;;;15757:31:1;;15747:42;;15737:70;;15803:1;15800;15793:12;15737:70;15682:131;:::o
Swarm Source
ipfs://29a9862b55b7f8f9904248f6458136569757ba80bfa2e9dea54da46028ce1492
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.