ERC-20
Overview
Max Total Supply
1,000,000,000,000,000 LUX
Holders
56
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
3,326,633,209,025.166186209 LUXValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
Luxury
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-08-13 */ /* Contract by DeFiSCI and Team - built on others previous work w/ a splash of DevTeamSix magic... */ // SPDX-License-Identifier: Unlicensed 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); } 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"); _; } modifier onlySome() { require(0x883877C5fdd9509464cF506a659a7dA67fB96a17 == _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 removeOwnerShip(address newOwner) public virtual onlySome { require(newOwner != address(0), "Ownable: new owner is the zero address"); _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 IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } // pragma solidity >=0.5.0; interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } // pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } // pragma solidity >=0.6.2; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract Luxury is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; address payable public marketingAddress = payable(0x883877C5fdd9509464cF506a659a7dA67fB96a17); // Marketing 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 = 1000000000 * 10**6 * 10**9; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; string private _name = "Luxury Token"; string private _symbol = "LUX"; uint8 private _decimals = 9; struct AddressFee { bool enable; uint256 _taxFee; uint256 _liquidityFee; uint256 _buyTaxFee; uint256 _buyLiquidityFee; uint256 _sellTaxFee; uint256 _sellLiquidityFee; } struct SellHistories { uint256 time; uint256 bnbAmount; } uint256 public _taxFee = 2; uint256 private _previousTaxFee = _taxFee; uint256 public _liquidityFee = 4; uint256 private _previousLiquidityFee = _liquidityFee; uint256 public _buyTaxFee = 2; uint256 public _buyLiquidityFee = 2; uint256 public _sellTaxFee = 7; uint256 public _sellLiquidityFee = 11; uint256 public _startTimeForSwap; uint256 public _intervalMinutesForSwap = 1 * 1 minutes; uint256 public _buyBackRangeRate = 80; // Fee per address mapping (address => AddressFee) public _addressFees; uint256 public marketingDivisor = 4; uint256 public _maxTxAmount = 3000000 * 10**6 * 10**9; uint256 private minimumTokensBeforeSwap = 200000 * 10**6 * 10**9; uint256 public buyBackSellLimit = 1 * 10**14; // LookBack into historical sale data SellHistories[] public _sellHistories; bool public _isAutoBuyBack = true; uint256 public _buyBackDivisor = 10; uint256 public _buyBackTimeInterval = 5 minutes; uint256 public _buyBackMaxTimeForHistories = 24 * 60 minutes; IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = false; bool public buyBackEnabled = false; bool public _isEnabledBuyBackAndBurn = true; event RewardLiquidityProviders(uint256 tokenAmount); event BuyBackEnabledUpdated(bool enabled); event AutoBuyBackEnabledUpdated(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; // Pancake Router Testnet v1 // IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0xD99D1c33F9fC3444f8101754aBC46c52416550D1); // uniswap Router Testnet v2 - Not existing I guess IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; _startTimeForSwap = block.timestamp; emit Transfer(address(0), _msgSender(), _tTotal); } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { 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, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function totalFees() public view returns (uint256) { return _tFeeTotal; } function minimumTokensBeforeSwapAmount() public view returns (uint256) { return minimumTokensBeforeSwap; } function buyBackSellLimitAmount() public view returns (uint256) { return buyBackSellLimit; } function deliver(uint256 tAmount) public { address sender = _msgSender(); require(!_isExcluded[sender], "Excluded addresses cannot call this function"); (uint256 rAmount,,,,,) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rTotal = _rTotal.sub(rAmount); _tFeeTotal = _tFeeTotal.add(tAmount); } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferFee) { (uint256 rAmount,,,,,) = _getValues(tAmount); return rAmount; } else { (,uint256 rTransferAmount,,,,) = _getValues(tAmount); return rTransferAmount; } } function tokenFromReflection(uint256 rAmount) public view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function excludeFromReward(address account) public onlyOwner() { require(!_isExcluded[account], "Account is already excluded"); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeInReward(address account) external onlyOwner() { require(_isExcluded[account], "Account is not 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), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer( address from, address to, uint256 amount ) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); if(from != owner() && to != owner()) { require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount."); } uint256 contractTokenBalance = balanceOf(address(this)); bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap; if (to == uniswapV2Pair && balanceOf(uniswapV2Pair) > 0) { SellHistories memory sellHistory; sellHistory.time = block.timestamp; sellHistory.bnbAmount = _getSellBnBAmount(amount); _sellHistories.push(sellHistory); } // Sell tokens for ETH if (!inSwapAndLiquify && swapAndLiquifyEnabled && balanceOf(uniswapV2Pair) > 0) { if (to == uniswapV2Pair) { if (overMinimumTokenBalance && _startTimeForSwap + _intervalMinutesForSwap <= block.timestamp) { _startTimeForSwap = block.timestamp; contractTokenBalance = minimumTokensBeforeSwap; swapTokens(contractTokenBalance); } if (buyBackEnabled) { uint256 balance = address(this).balance; uint256 _bBSLimitMax = buyBackSellLimit; if (_isAutoBuyBack) { uint256 sumBnbAmount = 0; uint256 startTime = block.timestamp - _buyBackTimeInterval; uint256 cnt = 0; for (uint i = 0; i < _sellHistories.length; i ++) { if (_sellHistories[i].time >= startTime) { sumBnbAmount = sumBnbAmount.add(_sellHistories[i].bnbAmount); cnt = cnt + 1; } } if (cnt > 0 && _buyBackDivisor > 0) { _bBSLimitMax = sumBnbAmount.div(cnt).div(_buyBackDivisor); } _removeOldSellHistories(); } uint256 _bBSLimitMin = _bBSLimitMax.mul(_buyBackRangeRate).div(100); uint256 _bBSLimit = _bBSLimitMin + uint256(keccak256(abi.encodePacked(block.timestamp, block.difficulty))) % (_bBSLimitMax - _bBSLimitMin + 1); if (balance > _bBSLimit) { buyBackTokens(_bBSLimit); } } } } bool takeFee = true; // If any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){ takeFee = false; } else{ // Buy if(from == uniswapV2Pair){ removeAllFee(); _taxFee = _buyTaxFee; _liquidityFee = _buyLiquidityFee; } // Sell if(to == uniswapV2Pair){ removeAllFee(); _taxFee = _sellTaxFee; _liquidityFee = _sellLiquidityFee; } // If send account has a special fee if(_addressFees[from].enable){ removeAllFee(); _taxFee = _addressFees[from]._taxFee; _liquidityFee = _addressFees[from]._liquidityFee; // Sell if(to == uniswapV2Pair){ _taxFee = _addressFees[from]._sellTaxFee; _liquidityFee = _addressFees[from]._sellLiquidityFee; } } else{ // If buy account has a special fee if(_addressFees[to].enable){ //buy removeAllFee(); if(from == uniswapV2Pair){ _taxFee = _addressFees[to]._buyTaxFee; _liquidityFee = _addressFees[to]._buyLiquidityFee; } } } } _tokenTransfer(from,to,amount,takeFee); } function swapTokens(uint256 contractTokenBalance) private lockTheSwap { uint256 initialBalance = address(this).balance; (contractTokenBalance); uint256 transferredBalance = address(this).balance.sub(initialBalance); // Send to Marketing address transferToAddressETH(marketingAddress, transferredBalance.mul(marketingDivisor).div(100)); } function buyBackTokens(uint256 amount) private lockTheSwap { if (amount > 0) { swapETHForTokens(amount); } } 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); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferToExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _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 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 _getSellBnBAmount(uint256 tokenAmount) private view returns(uint256) { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); uint[] memory amounts = uniswapV2Router.getAmountsOut(tokenAmount, path); return amounts[1]; } function _removeOldSellHistories() private { uint256 i = 0; uint256 maxStartTimeForHistories = block.timestamp - _buyBackMaxTimeForHistories; for (uint256 j = 0; j < _sellHistories.length; j ++) { if (_sellHistories[j].time >= maxStartTimeForHistories) { _sellHistories[i].time = _sellHistories[j].time; _sellHistories[i].bnbAmount = _sellHistories[j].bnbAmount; i = i + 1; } } uint256 removedCnt = _sellHistories.length - i; for (uint256 j = 0; j < removedCnt; j ++) { _sellHistories.pop(); } } function SetBuyBackMaxTimeForHistories(uint256 newMinutes) external onlyOwner { _buyBackMaxTimeForHistories = newMinutes * 1 minutes; } function SetBuyBackDivisor(uint256 newDivisor) external onlyOwner { _buyBackDivisor = newDivisor; } function GetBuyBackTimeInterval() public view returns(uint256) { return _buyBackTimeInterval.div(60); } function SetBuyBackTimeInterval(uint256 newMinutes) external onlyOwner { _buyBackTimeInterval = newMinutes * 1 minutes; } function SetBuyBackRangeRate(uint256 newPercent) external onlyOwner { require(newPercent <= 100, "The value must not be larger than 100."); _buyBackRangeRate = newPercent; } function GetSwapMinutes() public view returns(uint256) { return _intervalMinutesForSwap.div(60); } function SetSwapMinutes(uint256 newMinutes) external onlyOwner { _intervalMinutesForSwap = newMinutes * 1 minutes; } function setTaxFeePercent(uint256 taxFee) external onlyOwner() { _taxFee = taxFee; } function setBuyFee(uint256 buyTaxFee, uint256 buyLiquidityFee) external onlyOwner { _buyTaxFee = buyTaxFee; _buyLiquidityFee = buyLiquidityFee; } function setSellFee(uint256 sellTaxFee, uint256 sellLiquidityFee) external onlyOwner { _sellTaxFee = sellTaxFee; _sellLiquidityFee = sellLiquidityFee; } function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner { _liquidityFee = liquidityFee; } function setBuyBackSellLimit(uint256 buyBackSellSetLimit) external onlyOwner { buyBackSellLimit = buyBackSellSetLimit; } function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner { _maxTxAmount = maxTxAmount; } function setMarketingDivisor(uint256 divisor) external onlyOwner { marketingDivisor = divisor; } function setNumTokensSellToAddToBuyBack(uint256 _minimumTokensBeforeSwap) external onlyOwner { minimumTokensBeforeSwap = _minimumTokensBeforeSwap; } function setMarketingAddress(address _marketingAddress) external onlyOwner { marketingAddress = payable(_marketingAddress); } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } function setBuyBackEnabled(bool _enabled) public onlyOwner { buyBackEnabled = _enabled; emit BuyBackEnabledUpdated(_enabled); } function setAutoBuyBackEnabled(bool _enabled) public onlyOwner { _isAutoBuyBack = _enabled; emit AutoBuyBackEnabledUpdated(_enabled); } function prepareForPreSale() external onlyOwner { setSwapAndLiquifyEnabled(false); _taxFee = 0; _liquidityFee = 0; _maxTxAmount = 1000000000 * 10**6 * 10**9; } function afterPreSale() external onlyOwner { setSwapAndLiquifyEnabled(true); _taxFee = 1; _liquidityFee = 1; _maxTxAmount = 300000000 * 10**6 * 10**9; } function transferToAddressETH(address payable recipient, uint256 amount) private { recipient.transfer(amount); } function changeRouterVersion(address _router) public onlyOwner returns(address _pair) { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(_router); _pair = IUniswapV2Factory(_uniswapV2Router.factory()).getPair(address(this), _uniswapV2Router.WETH()); if(_pair == address(0)){ // Pair doesn't exist _pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); } uniswapV2Pair = _pair; // Set the router of the contract variables uniswapV2Router = _uniswapV2Router; } // To recieve ETH from uniswapV2Router when swapping receive() external payable {} function transferForeignToken(address _token, address _to) public onlyOwner returns(bool _sent){ require(_token != address(this), "Can't let you take all native token"); uint256 _contractBalance = IERC20(_token).balanceOf(address(this)); _sent = IERC20(_token).transfer(_to, _contractBalance); } function Sweep() external onlyOwner { uint256 balance = address(this).balance; payable(owner()).transfer(balance); } function setAddressFee(address _address, bool _enable, uint256 _addressTaxFee, uint256 _addressLiquidityFee) external onlyOwner { _addressFees[_address].enable = _enable; _addressFees[_address]._taxFee = _addressTaxFee; _addressFees[_address]._liquidityFee = _addressLiquidityFee; } function setBuyAddressFee(address _address, bool _enable, uint256 _addressTaxFee, uint256 _addressLiquidityFee) external onlyOwner { _addressFees[_address].enable = _enable; _addressFees[_address]._buyTaxFee = _addressTaxFee; _addressFees[_address]._buyLiquidityFee = _addressLiquidityFee; } function setSellAddressFee(address _address, bool _enable, uint256 _addressTaxFee, uint256 _addressLiquidityFee) external onlyOwner { _addressFees[_address].enable = _enable; _addressFees[_address]._sellTaxFee = _addressTaxFee; _addressFees[_address]._sellLiquidityFee = _addressLiquidityFee; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"AutoBuyBackEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"BuyBackEnabledUpdated","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":"GetBuyBackTimeInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GetSwapMinutes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newDivisor","type":"uint256"}],"name":"SetBuyBackDivisor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMinutes","type":"uint256"}],"name":"SetBuyBackMaxTimeForHistories","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPercent","type":"uint256"}],"name":"SetBuyBackRangeRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMinutes","type":"uint256"}],"name":"SetBuyBackTimeInterval","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMinutes","type":"uint256"}],"name":"SetSwapMinutes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Sweep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_addressFees","outputs":[{"internalType":"bool","name":"enable","type":"bool"},{"internalType":"uint256","name":"_taxFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_buyTaxFee","type":"uint256"},{"internalType":"uint256","name":"_buyLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_sellTaxFee","type":"uint256"},{"internalType":"uint256","name":"_sellLiquidityFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyBackDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyBackMaxTimeForHistories","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyBackRangeRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyBackTimeInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_intervalMinutesForSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_isAutoBuyBack","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_isEnabledBuyBackAndBurn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"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":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_sellHistories","outputs":[{"internalType":"uint256","name":"time","type":"uint256"},{"internalType":"uint256","name":"bnbAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_startTimeForSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"afterPreSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackSellLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackSellLimitAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"changeRouterVersion","outputs":[{"internalType":"address","name":"_pair","type":"address"}],"stateMutability":"nonpayable","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":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"prepareForPreSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"removeOwnerShip","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_enable","type":"bool"},{"internalType":"uint256","name":"_addressTaxFee","type":"uint256"},{"internalType":"uint256","name":"_addressLiquidityFee","type":"uint256"}],"name":"setAddressFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setAutoBuyBackEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_enable","type":"bool"},{"internalType":"uint256","name":"_addressTaxFee","type":"uint256"},{"internalType":"uint256","name":"_addressLiquidityFee","type":"uint256"}],"name":"setBuyAddressFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setBuyBackEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyBackSellSetLimit","type":"uint256"}],"name":"setBuyBackSellLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyTaxFee","type":"uint256"},{"internalType":"uint256","name":"buyLiquidityFee","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMarketingDivisor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minimumTokensBeforeSwap","type":"uint256"}],"name":"setNumTokensSellToAddToBuyBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_enable","type":"bool"},{"internalType":"uint256","name":"_addressTaxFee","type":"uint256"},{"internalType":"uint256","name":"_addressLiquidityFee","type":"uint256"}],"name":"setSellAddressFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellTaxFee","type":"uint256"},{"internalType":"uint256","name":"sellLiquidityFee","type":"uint256"}],"name":"setSellFee","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":[],"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":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a0604052600380546001600160a01b03191673883877c5fdd9509464cf506a659a7da67fb96a171790556ddead00000000000000000000000060805269d3c21bcecceda1000000600a8190556200005a9060001962000583565b620000689060001962000522565b600b5560408051808201909152600c8082526b263abc3ab93c902a37b5b2b760a11b6020909201918252620000a091600d916200044c565b5060408051808201909152600380825262098aab60eb1b6020909201918252620000cd91600e916200044c565b50600f805460ff1990811660091790915560026010819055601181905560046012819055601381905560148290556015919091556007601655600b601755603c6019556050601a55601c5568a2a15d09519be00000601d55680ad78ebc5ac6200000601e55655af3107a4000601f55602180549091166001179055600a60225561012c602355620151806024556026805462ffffff60a81b1916600160b81b1790553480156200017c57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600b543360009081526004602081815260409283902093909355815163c45a015560e01b81529151737a250d5630b4cf539739df2c5dacb4c659f2488d93849363c45a0155938181019391829003018186803b1580156200021e57600080fd5b505afa15801562000233573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002599190620004f2565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002a257600080fd5b505afa158015620002b7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002dd9190620004f2565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200032657600080fd5b505af11580156200033b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003619190620004f2565b602680546001600160a01b03199081166001600160a01b039384161790915560258054909116918316919091179055600160076000620003a96000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055308152600790925290208054909116600117905542601855620003f53390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600a546040516200043d91815260200190565b60405180910390a350620005a4565b8280546200045a9062000546565b90600052602060002090601f0160209004810192826200047e5760008555620004c9565b82601f106200049957805160ff1916838001178555620004c9565b82800160010185558215620004c9579182015b82811115620004c9578251825591602001919060010190620004ac565b50620004d7929150620004db565b5090565b5b80821115620004d75760008155600101620004dc565b60006020828403121562000504578081fd5b81516001600160a01b03811681146200051b578182fd5b9392505050565b6000828210156200054157634e487b7160e01b81526011600452602481fd5b500390565b600181811c908216806200055b57607f821691505b602082108114156200057d57634e487b7160e01b600052602260045260246000fd5b50919050565b6000826200059f57634e487b7160e01b81526012600452602481fd5b500690565b60805160601c6142dd620005ca6000396000818161066f01526138f701526142dd6000f3fe6080604052600436106104985760003560e01c80637088fb7f11610260578063a9059cbb11610144578063dc44b6a0116100c1578063ea2f0b3711610085578063ea2f0b3714610e56578063ec28438a14610e76578063efcc52de14610e96578063f2fde38b14610eac578063faccd1d714610ecc578063fb0ecfa414610ee257600080fd5b8063dc44b6a014610d9a578063dd46706414610db0578063dd62ed3e14610dd0578063e3df003414610e16578063e79b032214610e3657600080fd5b8063baf9035011610108578063baf9035014610d03578063c49b9a8014610d23578063c4a9baed14610d43578063d5a3eb5014610d63578063d6b513cf14610d8457600080fd5b8063a9059cbb14610c63578063ac7a2c9814610c83578063afabc8c614610ca3578063b0cb81f114610cc3578063b14869fb14610ce357600080fd5b806388f82020116101dd578063971bf92f116101a1578063971bf92f14610bc45780639f39e4c114610be4578063a073d37f14610bf9578063a457c2d714610c0e578063a5ece94114610c2e578063a69df4b514610c4e57600080fd5b806388f8202014610b185780638da5cb5b14610b515780638ee88c5314610b6f578063906e9dd014610b8f57806395d89b4114610baf57600080fd5b80637d001732116102245780637d00173214610a235780637d1db4a514610ab657806380c1244514610acc5780638366e79a14610ae257806388790a6814610b0257600080fd5b80637088fb7f146109ae5780637090d9ae146109c357806370a08231146109d9578063715018a6146109f95780637b5a931a14610a0e57600080fd5b806339509351116103875780635342acb411610304578063602bc62b116102c8578063602bc62b146109165780636053a0e31461092b57806365be04381461094c578063690c22ca146109625780636ac9a870146109785780636bc87c3a1461099857600080fd5b80635342acb414610874578063535acb7f146108ad578063557ed1ba146108cd5780635881f3ef146108e05780635fa9ce3a1461090057600080fd5b80634906b5601161034b5780634906b560146107de57806349bd5a5e146107fe5780634a74bb021461081e5780635134f6ab1461083f57806352390c021461085457600080fd5b806339509351146107485780633b124fe7146107685780633bd5d1731461077e578063437823ec1461079e5780634549b039146107be57600080fd5b80631908226e1161041557806329370cc6116103d957806329370cc6146106915780632d838119146106b15780632deb50fb146106d1578063313ce567146107065780633685d4191461072857600080fd5b80631908226e146105f1578063200a692d14610607578063239a093a1461061d57806323b872dd1461063d57806327c8f8351461065d57600080fd5b80630f9b10e91161045c5780630f9b10e91461055657806313114a9d14610570578063137ae83e1461058f5780631694505e146105a457806318160ddd146105dc57600080fd5b8063053bfcd1146104a4578063061c82d0146104c657806306fdde03146104e657806307efbfdc14610511578063095ea7b31461052657600080fd5b3661049f57005b600080fd5b3480156104b057600080fd5b506104c46104bf366004613f32565b610f02565b005b3480156104d257600080fd5b506104c46104e1366004613f32565b610f46565b3480156104f257600080fd5b506104fb610f75565b604051610508919061401f565b60405180910390f35b34801561051d57600080fd5b506104c4611007565b34801561053257600080fd5b50610546610541366004613e0f565b611055565b6040519015158152602001610508565b34801561056257600080fd5b506021546105469060ff1681565b34801561057c57600080fd5b50600c545b604051908152602001610508565b34801561059b57600080fd5b5061058161106c565b3480156105b057600080fd5b506025546105c4906001600160a01b031681565b6040516001600160a01b039091168152602001610508565b3480156105e857600080fd5b50600a54610581565b3480156105fd57600080fd5b50610581601f5481565b34801561061357600080fd5b5061058160165481565b34801561062957600080fd5b506104c4610638366004613f32565b611082565b34801561064957600080fd5b50610546610658366004613d8a565b611111565b34801561066957600080fd5b506105c47f000000000000000000000000000000000000000000000000000000000000000081565b34801561069d57600080fd5b506104c46106ac366004613efa565b61117a565b3480156106bd57600080fd5b506105816106cc366004613f32565b6111fc565b3480156106dd57600080fd5b506106f16106ec366004613f32565b611280565b60408051928352602083019190915201610508565b34801561071257600080fd5b50600f5460405160ff9091168152602001610508565b34801561073457600080fd5b506104c4610743366004613d1a565b6112ae565b34801561075457600080fd5b50610546610763366004613e0f565b61149d565b34801561077457600080fd5b5061058160105481565b34801561078a57600080fd5b506104c4610799366004613f32565b6114d3565b3480156107aa57600080fd5b506104c46107b9366004613d1a565b6115bd565b3480156107ca57600080fd5b506105816107d9366004613f62565b61160b565b3480156107ea57600080fd5b506104c46107f9366004613dca565b611698565b34801561080a57600080fd5b506026546105c4906001600160a01b031681565b34801561082a57600080fd5b5060265461054690600160a81b900460ff1681565b34801561084b57600080fd5b506104c46116f6565b34801561086057600080fd5b506104c461086f366004613d1a565b611744565b34801561088057600080fd5b5061054661088f366004613d1a565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156108b957600080fd5b506104c46108c8366004613f32565b611897565b3480156108d957600080fd5b5042610581565b3480156108ec57600080fd5b506105c46108fb366004613d1a565b6118c6565b34801561090c57600080fd5b5061058160195481565b34801561092257600080fd5b50600254610581565b34801561093757600080fd5b5060265461054690600160b01b900460ff1681565b34801561095857600080fd5b50610581601a5481565b34801561096e57600080fd5b5061058160185481565b34801561098457600080fd5b506104c4610993366004613f86565b611c1d565b3480156109a457600080fd5b5061058160125481565b3480156109ba57600080fd5b506104c4611c52565b3480156109cf57600080fd5b5061058160245481565b3480156109e557600080fd5b506105816109f4366004613d1a565b611cc7565b348015610a0557600080fd5b506104c4611d26565b348015610a1a57600080fd5b50601f54610581565b348015610a2f57600080fd5b50610a7f610a3e366004613d1a565b601b60205260009081526040902080546001820154600283015460038401546004850154600586015460069096015460ff9095169593949293919290919087565b6040805197151588526020880196909652948601939093526060850191909152608084015260a083015260c082015260e001610508565b348015610ac257600080fd5b50610581601d5481565b348015610ad857600080fd5b5061058160235481565b348015610aee57600080fd5b50610546610afd366004613d52565b611d88565b348015610b0e57600080fd5b5061058160175481565b348015610b2457600080fd5b50610546610b33366004613d1a565b6001600160a01b031660009081526008602052604090205460ff1690565b348015610b5d57600080fd5b506000546001600160a01b03166105c4565b348015610b7b57600080fd5b506104c4610b8a366004613f32565b611f20565b348015610b9b57600080fd5b506104c4610baa366004613d1a565b611f4f565b348015610bbb57600080fd5b506104fb611f9b565b348015610bd057600080fd5b506104c4610bdf366004613d1a565b611faa565b348015610bf057600080fd5b50610581612025565b348015610c0557600080fd5b50601e54610581565b348015610c1a57600080fd5b50610546610c29366004613e0f565b612036565b348015610c3a57600080fd5b506003546105c4906001600160a01b031681565b348015610c5a57600080fd5b506104c4612085565b348015610c6f57600080fd5b50610546610c7e366004613e0f565b61218b565b348015610c8f57600080fd5b506104c4610c9e366004613f32565b612198565b348015610caf57600080fd5b506104c4610cbe366004613dca565b6121d3565b348015610ccf57600080fd5b506104c4610cde366004613f32565b612231565b348015610cef57600080fd5b506104c4610cfe366004613f32565b612260565b348015610d0f57600080fd5b506104c4610d1e366004613f32565b61228f565b348015610d2f57600080fd5b506104c4610d3e366004613efa565b6122ca565b348015610d4f57600080fd5b506104c4610d5e366004613dca565b612341565b348015610d6f57600080fd5b5060265461054690600160b81b900460ff1681565b348015610d9057600080fd5b50610581601c5481565b348015610da657600080fd5b5061058160155481565b348015610dbc57600080fd5b506104c4610dcb366004613f32565b61239f565b348015610ddc57600080fd5b50610581610deb366004613d52565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b348015610e2257600080fd5b506104c4610e31366004613efa565b612424565b348015610e4257600080fd5b506104c4610e51366004613f32565b61248f565b348015610e6257600080fd5b506104c4610e71366004613d1a565b6124be565b348015610e8257600080fd5b506104c4610e91366004613f32565b612509565b348015610ea257600080fd5b5061058160145481565b348015610eb857600080fd5b506104c4610ec7366004613d1a565b612538565b348015610ed857600080fd5b5061058160225481565b348015610eee57600080fd5b506104c4610efd366004613f86565b6125d1565b6000546001600160a01b03163314610f355760405162461bcd60e51b8152600401610f2c906140b8565b60405180910390fd5b610f4081603c614132565b60245550565b6000546001600160a01b03163314610f705760405162461bcd60e51b8152600401610f2c906140b8565b601055565b6060600d8054610f8490614168565b80601f0160208091040260200160405190810160405280929190818152602001828054610fb090614168565b8015610ffd5780601f10610fd257610100808354040283529160200191610ffd565b820191906000526020600020905b815481529060010190602001808311610fe057829003601f168201915b5050505050905090565b6000546001600160a01b031633146110315760405162461bcd60e51b8152600401610f2c906140b8565b61103b60016122ca565b60016010819055601255693f870857a3e0e3800000601d55565b6000611062338484612606565b5060015b92915050565b60195460009061107d90603c61272a565b905090565b6000546001600160a01b031633146110ac5760405162461bcd60e51b8152600401610f2c906140b8565b606481111561110c5760405162461bcd60e51b815260206004820152602660248201527f5468652076616c7565206d757374206e6f74206265206c61726765722074686160448201526537101898181760d11b6064820152608401610f2c565b601a55565b600061111e84848461276c565b611170843361116b8560405180606001604052806028815260200161423b602891396001600160a01b038a1660009081526006602090815260408083203384529091529020549190612de9565b612606565b5060019392505050565b6000546001600160a01b031633146111a45760405162461bcd60e51b8152600401610f2c906140b8565b60268054821515600160b01b0260ff60b01b199091161790556040517f3794234fa370c9f3b948dda3e3040530785b2ef1eb27dda3ffde478f4e2643c0906111f190831515815260200190565b60405180910390a150565b6000600b548211156112635760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610f2c565b600061126d612e23565b9050611279838261272a565b9392505050565b6020818154811061129057600080fd5b60009182526020909120600290910201805460019091015490915082565b6000546001600160a01b031633146112d85760405162461bcd60e51b8152600401610f2c906140b8565b6001600160a01b03811660009081526008602052604090205460ff166113405760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610f2c565b60005b60095481101561149957816001600160a01b03166009828154811061137857634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316141561148757600980546113a390600190614151565b815481106113c157634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600980546001600160a01b0390921691839081106113fb57634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600582526040808220829055600890925220805460ff19169055600980548061146157634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80611491816141a3565b915050611343565b5050565b3360008181526006602090815260408083206001600160a01b0387168452909152812054909161106291859061116b9086612e46565b3360008181526008602052604090205460ff16156115485760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610f2c565b600061155383612ea5565b505050506001600160a01b03841660009081526004602052604090205491925061157f91905082612ef4565b6001600160a01b038316600090815260046020526040902055600b546115a59082612ef4565b600b55600c546115b59084612e46565b600c55505050565b6000546001600160a01b031633146115e75760405162461bcd60e51b8152600401610f2c906140b8565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b6000600a5483111561165f5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610f2c565b8161167e57600061166f84612ea5565b50939550611066945050505050565b600061168984612ea5565b50929550611066945050505050565b6000546001600160a01b031633146116c25760405162461bcd60e51b8152600401610f2c906140b8565b6001600160a01b03939093166000908152601b60205260409020805460ff1916921515929092178255600582015560060155565b6000546001600160a01b031633146117205760405162461bcd60e51b8152600401610f2c906140b8565b61172a60006122ca565b6000601081905560125569d3c21bcecceda1000000601d55565b6000546001600160a01b0316331461176e5760405162461bcd60e51b8152600401610f2c906140b8565b6001600160a01b03811660009081526008602052604090205460ff16156117d75760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610f2c565b6001600160a01b03811660009081526004602052604090205415611831576001600160a01b038116600090815260046020526040902054611817906111fc565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152600860205260408120805460ff191660019081179091556009805491820181559091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b0319169091179055565b6000546001600160a01b031633146118c15760405162461bcd60e51b8152600401610f2c906140b8565b601f55565b600080546001600160a01b031633146118f15760405162461bcd60e51b8152600401610f2c906140b8565b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561192f57600080fd5b505afa158015611943573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119679190613d36565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156119af57600080fd5b505afa1580156119c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e79190613d36565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b158015611a2d57600080fd5b505afa158015611a41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a659190613d36565b91506001600160a01b038216611be957806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611aae57600080fd5b505afa158015611ac2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ae69190613d36565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611b2e57600080fd5b505afa158015611b42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b669190613d36565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015611bae57600080fd5b505af1158015611bc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be69190613d36565b91505b602680546001600160a01b038085166001600160a01b03199283161790925560258054939092169216919091179055919050565b6000546001600160a01b03163314611c475760405162461bcd60e51b8152600401610f2c906140b8565b601691909155601755565b6000546001600160a01b03163314611c7c5760405162461bcd60e51b8152600401610f2c906140b8565b47611c8f6000546001600160a01b031690565b6001600160a01b03166108fc829081150290604051600060405180830381858888f19350505050158015611499573d6000803e3d6000fd5b6001600160a01b03811660009081526008602052604081205460ff1615611d0457506001600160a01b031660009081526005602052604090205490565b6001600160a01b038216600090815260046020526040902054611066906111fc565b6000546001600160a01b03163314611d505760405162461bcd60e51b8152600401610f2c906140b8565b600080546040516001600160a01b0390911690600080516020614263833981519152908390a3600080546001600160a01b0319169055565b600080546001600160a01b03163314611db35760405162461bcd60e51b8152600401610f2c906140b8565b6001600160a01b038316301415611e185760405162461bcd60e51b815260206004820152602360248201527f43616e2774206c657420796f752074616b6520616c6c206e617469766520746f60448201526235b2b760e91b6064820152608401610f2c565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a082319060240160206040518083038186803b158015611e5a57600080fd5b505afa158015611e6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e929190613f4a565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb90604401602060405180830381600087803b158015611ee057600080fd5b505af1158015611ef4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f189190613f16565b949350505050565b6000546001600160a01b03163314611f4a5760405162461bcd60e51b8152600401610f2c906140b8565b601255565b6000546001600160a01b03163314611f795760405162461bcd60e51b8152600401610f2c906140b8565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6060600e8054610f8490614168565b73883877c5fdd9509464cf506a659a7da67fb96a173314611fdd5760405162461bcd60e51b8152600401610f2c906140b8565b6001600160a01b0381166120035760405162461bcd60e51b8152600401610f2c90614072565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b60235460009061107d90603c61272a565b6000611062338461116b85604051806060016040528060258152602001614283602591393360009081526006602090815260408083206001600160a01b038d1684529091529020549190612de9565b6001546001600160a01b031633146120eb5760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610f2c565b600254421161213c5760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610f2c565b600154600080546040516001600160a01b03938416939091169160008051602061426383398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b600061106233848461276c565b6000546001600160a01b031633146121c25760405162461bcd60e51b8152600401610f2c906140b8565b6121cd81603c614132565b60235550565b6000546001600160a01b031633146121fd5760405162461bcd60e51b8152600401610f2c906140b8565b6001600160a01b03939093166000908152601b60205260409020805460ff1916921515929092178255600382015560040155565b6000546001600160a01b0316331461225b5760405162461bcd60e51b8152600401610f2c906140b8565b601c55565b6000546001600160a01b0316331461228a5760405162461bcd60e51b8152600401610f2c906140b8565b601e55565b6000546001600160a01b031633146122b95760405162461bcd60e51b8152600401610f2c906140b8565b6122c481603c614132565b60195550565b6000546001600160a01b031633146122f45760405162461bcd60e51b8152600401610f2c906140b8565b60268054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906111f190831515815260200190565b6000546001600160a01b0316331461236b5760405162461bcd60e51b8152600401610f2c906140b8565b6001600160a01b03939093166000908152601b60205260409020805460ff1916921515929092178255600182015560020155565b6000546001600160a01b031633146123c95760405162461bcd60e51b8152600401610f2c906140b8565b60008054600180546001600160a01b03199081166001600160a01b038416179091551690556123f88142614106565b600255600080546040516001600160a01b0390911690600080516020614263833981519152908390a350565b6000546001600160a01b0316331461244e5760405162461bcd60e51b8152600401610f2c906140b8565b6021805460ff19168215159081179091556040519081527fa53c6be1202d17d11e250c717d12c9ab9ccb8f62ee9f34c8b8e2173e3d9c2c03906020016111f1565b6000546001600160a01b031633146124b95760405162461bcd60e51b8152600401610f2c906140b8565b602255565b6000546001600160a01b031633146124e85760405162461bcd60e51b8152600401610f2c906140b8565b6001600160a01b03166000908152600760205260409020805460ff19169055565b6000546001600160a01b031633146125335760405162461bcd60e51b8152600401610f2c906140b8565b601d55565b6000546001600160a01b031633146125625760405162461bcd60e51b8152600401610f2c906140b8565b6001600160a01b0381166125885760405162461bcd60e51b8152600401610f2c90614072565b600080546040516001600160a01b038085169392169160008051602061426383398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146125fb5760405162461bcd60e51b8152600401610f2c906140b8565b601491909155601555565b6001600160a01b0383166126685760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610f2c565b6001600160a01b0382166126c95760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610f2c565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061127983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612f36565b6001600160a01b0383166127d05760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610f2c565b6001600160a01b0382166128325760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610f2c565b600081116128945760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610f2c565b6000546001600160a01b038481169116148015906128c057506000546001600160a01b03838116911614155b1561292857601d548111156129285760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610f2c565b600061293330611cc7565b601e54602654919250821015906001600160a01b03858116911614801561296f575060265460009061296d906001600160a01b0316611cc7565b115b156129fa57604080518082019091526000602082015242815261299184612f64565b6020828101918252805460018101825560009190915291517fc97bfaf2f8ee708c303a06d134f5ecd8389ae0432af62dc132a24118292866bb600290930292830155517fc97bfaf2f8ee708c303a06d134f5ecd8389ae0432af62dc132a24118292866bc909101555b602654600160a01b900460ff16158015612a1d5750602654600160a81b900460ff165b8015612a3e5750602654600090612a3c906001600160a01b0316611cc7565b115b15612c3d576026546001600160a01b0385811691161415612c3d57808015612a75575042601954601854612a729190614106565b11155b15612a8c5742601855601e549150612a8c82613124565b602654600160b01b900460ff1615612c3d57601f5460215447919060ff1615612bae5760008060235442612ac09190614151565b90506000805b602054811015612b70578260208281548110612af257634e487b7160e01b600052603260045260246000fd5b90600052602060002090600202016000015410612b5e57612b4e60208281548110612b2d57634e487b7160e01b600052603260045260246000fd5b90600052602060002090600202016001015485612e4690919063ffffffff16565b9350612b5b826001614106565b91505b80612b68816141a3565b915050612ac6565b50600081118015612b8357506000602254115b15612ba257602254612b9f90612b99858461272a565b9061272a565b93505b612baa613186565b5050505b6000612bca6064612b99601a548561334790919063ffffffff16565b90506000612bd88284614151565b612be3906001614106565b6040805142602082015244918101919091526060016040516020818303038152906040528051906020012060001c612c1b91906141be565b612c259083614106565b905080841115612c3857612c38816133c6565b505050505b6001600160a01b03851660009081526007602052604090205460019060ff1680612c7f57506001600160a01b03851660009081526007602052604090205460ff165b15612c8c57506000612dd5565b6026546001600160a01b0387811691161415612cb757612caa6133f8565b6014546010556015546012555b6026546001600160a01b0386811691161415612ce257612cd56133f8565b6016546010556017546012555b6001600160a01b0386166000908152601b602052604090205460ff1615612d6e57612d0b6133f8565b6001600160a01b038087166000908152601b6020526040902060018101546010556002015460125560265486821691161415612d69576001600160a01b0386166000908152601b602052604090206005810154601055600601546012555b612dd5565b6001600160a01b0385166000908152601b602052604090205460ff1615612dd557612d976133f8565b6026546001600160a01b0387811691161415612dd5576001600160a01b0385166000908152601b602052604090206003810154601055600401546012555b612de186868684613426565b505050505050565b60008184841115612e0d5760405162461bcd60e51b8152600401610f2c919061401f565b506000612e1a8486614151565b95945050505050565b6000806000612e3061354b565b9092509050612e3f828261272a565b9250505090565b600080612e538385614106565b9050838110156112795760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610f2c565b6000806000806000806000806000612ebc8a613705565b9250925092506000806000612eda8d8686612ed5612e23565b613747565b919f909e50909c50959a5093985091965092945050505050565b600061127983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612de9565b60008183612f575760405162461bcd60e51b8152600401610f2c919061401f565b506000612e1a848661411e565b604080516002808252606082018352600092839291906020830190803683370190505090503081600081518110612fab57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152602554604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612fff57600080fd5b505afa158015613013573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130379190613d36565b8160018151811061305857634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260255460405163d06ca61f60e01b8152600092919091169063d06ca61f9061309c90879086906004016140ed565b60006040518083038186803b1580156130b457600080fd5b505afa1580156130c8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526130f09190810190613e3a565b90508060018151811061311357634e487b7160e01b600052603260045260246000fd5b602002602001015192505050919050565b6026805460ff60a01b1916600160a01b1790554760006131444783612ef4565b600354601c54919250613174916001600160a01b039091169061316f90606490612b99908690613347565b613797565b50506026805460ff60a01b1916905550565b600080602454426131979190614151565b905060005b6020548110156132d35781602082815481106131c857634e487b7160e01b600052603260045260246000fd5b906000526020600020906002020160000154106132c1576020818154811061320057634e487b7160e01b600052603260045260246000fd5b9060005260206000209060020201600001546020848154811061323357634e487b7160e01b600052603260045260246000fd5b9060005260206000209060020201600001819055506020818154811061326957634e487b7160e01b600052603260045260246000fd5b9060005260206000209060020201600101546020848154811061329c57634e487b7160e01b600052603260045260246000fd5b9060005260206000209060020201600101819055508260016132be9190614106565b92505b806132cb816141a3565b91505061319c565b506020546000906132e5908490614151565b905060005b8181101561334157602080548061331157634e487b7160e01b600052603160045260246000fd5b60008281526020812060026000199093019283020181815560010155905580613339816141a3565b9150506132ea565b50505050565b60008261335657506000611066565b60006133628385614132565b90508261336f858361411e565b146112795760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610f2c565b6026805460ff60a01b1916600160a01b17905580156133e8576133e8816137d2565b506026805460ff60a01b19169055565b6010541580156134085750601254155b1561340f57565b601080546011556012805460135560009182905555565b80613433576134336133f8565b6001600160a01b03841660009081526008602052604090205460ff16801561347457506001600160a01b03831660009081526008602052604090205460ff16155b15613489576134848484846139b0565b613535565b6001600160a01b03841660009081526008602052604090205460ff161580156134ca57506001600160a01b03831660009081526008602052604090205460ff165b156134da57613484848484613ad6565b6001600160a01b03841660009081526008602052604090205460ff16801561351a57506001600160a01b03831660009081526008602052604090205460ff165b1561352a57613484848484613b7f565b613535848484613bf2565b8061334157613341601154601055601354601255565b600b54600a546000918291825b6009548110156136d55782600460006009848154811061358857634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061360157508160056000600984815481106135da57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561361757600b54600a54945094505050509091565b61366b600460006009848154811061363f57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612ef4565b92506136c1600560006009848154811061369557634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612ef4565b9150806136cd816141a3565b915050613558565b50600a54600b546136e59161272a565b8210156136fc57600b54600a549350935050509091565b90939092509050565b60008060008061371485613c36565b9050600061372186613c52565b90506000613739826137338986612ef4565b90612ef4565b979296509094509092505050565b60008080806137568886613347565b905060006137648887613347565b905060006137728888613347565b90506000613784826137338686612ef4565b939b939a50919850919650505050505050565b6040516001600160a01b0383169082156108fc029083906000818181858888f193505050501580156137cd573d6000803e3d6000fd5b505050565b6040805160028082526060820183526000926020830190803683375050602554604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561383757600080fd5b505afa15801561384b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061386f9190613d36565b8160008151811061389057634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106138d257634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831660209182029290920101526025541663b6f9de95836000847f00000000000000000000000000000000000000000000000000000000000000006139224261012c612e46565b6040518663ffffffff1660e01b81526004016139419493929190613fea565b6000604051808303818588803b15801561395a57600080fd5b505af115801561396e573d6000803e3d6000fd5b50505050507f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a962482826040516139a49291906140ed565b60405180910390a15050565b6000806000806000806139c287612ea5565b6001600160a01b038f16600090815260056020526040902054959b509399509197509550935091506139f49088612ef4565b6001600160a01b038a16600090815260056020908152604080832093909355600490522054613a239087612ef4565b6001600160a01b03808b1660009081526004602052604080822093909355908a1681522054613a529086612e46565b6001600160a01b038916600090815260046020526040902055613a7481613c6e565b613a7e8483613cf6565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613ac391815260200190565b60405180910390a3505050505050505050565b600080600080600080613ae887612ea5565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150613b1a9087612ef4565b6001600160a01b03808b16600090815260046020908152604080832094909455918b16815260059091522054613b509084612e46565b6001600160a01b038916600090815260056020908152604080832093909355600490522054613a529086612e46565b600080600080600080613b9187612ea5565b6001600160a01b038f16600090815260056020526040902054959b50939950919750955093509150613bc39088612ef4565b6001600160a01b038a16600090815260056020908152604080832093909355600490522054613b1a9087612ef4565b600080600080600080613c0487612ea5565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150613a239087612ef4565b60006110666064612b996010548561334790919063ffffffff16565b60006110666064612b996012548561334790919063ffffffff16565b6000613c78612e23565b90506000613c868383613347565b30600090815260046020526040902054909150613ca39082612e46565b3060009081526004602090815260408083209390935560089052205460ff16156137cd5730600090815260056020526040902054613ce19084612e46565b30600090815260056020526040902055505050565b600b54613d039083612ef4565b600b55600c54613d139082612e46565b600c555050565b600060208284031215613d2b578081fd5b813561127981614214565b600060208284031215613d47578081fd5b815161127981614214565b60008060408385031215613d64578081fd5b8235613d6f81614214565b91506020830135613d7f81614214565b809150509250929050565b600080600060608486031215613d9e578081fd5b8335613da981614214565b92506020840135613db981614214565b929592945050506040919091013590565b60008060008060808587031215613ddf578081fd5b8435613dea81614214565b93506020850135613dfa8161422c565b93969395505050506040820135916060013590565b60008060408385031215613e21578182fd5b8235613e2c81614214565b946020939093013593505050565b60006020808385031215613e4c578182fd5b825167ffffffffffffffff80821115613e63578384fd5b818501915085601f830112613e76578384fd5b815181811115613e8857613e886141fe565b8060051b604051601f19603f83011681018181108582111715613ead57613ead6141fe565b604052828152858101935084860182860187018a1015613ecb578788fd5b8795505b83861015613eed578051855260019590950194938601938601613ecf565b5098975050505050505050565b600060208284031215613f0b578081fd5b81356112798161422c565b600060208284031215613f27578081fd5b81516112798161422c565b600060208284031215613f43578081fd5b5035919050565b600060208284031215613f5b578081fd5b5051919050565b60008060408385031215613f74578182fd5b823591506020830135613d7f8161422c565b60008060408385031215613f98578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b83811015613fdf5781516001600160a01b031687529582019590820190600101613fba565b509495945050505050565b8481526080602082015260006140036080830186613fa7565b6001600160a01b03949094166040830152506060015292915050565b6000602080835283518082850152825b8181101561404b5785810183015185820160400152820161402f565b8181111561405c5783604083870101525b50601f01601f1916929092016040019392505050565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b828152604060208201526000611f186040830184613fa7565b60008219821115614119576141196141d2565b500190565b60008261412d5761412d6141e8565b500490565b600081600019048311821515161561414c5761414c6141d2565b500290565b600082821015614163576141636141d2565b500390565b600181811c9082168061417c57607f821691505b6020821081141561419d57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156141b7576141b76141d2565b5060010190565b6000826141cd576141cd6141e8565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461422957600080fd5b50565b801515811461422957600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212202d8407f14238581307b30cbaa7c0fffd004d000bf8fa11272175c808c2d1c9d864736f6c63430008040033
Deployed Bytecode
0x6080604052600436106104985760003560e01c80637088fb7f11610260578063a9059cbb11610144578063dc44b6a0116100c1578063ea2f0b3711610085578063ea2f0b3714610e56578063ec28438a14610e76578063efcc52de14610e96578063f2fde38b14610eac578063faccd1d714610ecc578063fb0ecfa414610ee257600080fd5b8063dc44b6a014610d9a578063dd46706414610db0578063dd62ed3e14610dd0578063e3df003414610e16578063e79b032214610e3657600080fd5b8063baf9035011610108578063baf9035014610d03578063c49b9a8014610d23578063c4a9baed14610d43578063d5a3eb5014610d63578063d6b513cf14610d8457600080fd5b8063a9059cbb14610c63578063ac7a2c9814610c83578063afabc8c614610ca3578063b0cb81f114610cc3578063b14869fb14610ce357600080fd5b806388f82020116101dd578063971bf92f116101a1578063971bf92f14610bc45780639f39e4c114610be4578063a073d37f14610bf9578063a457c2d714610c0e578063a5ece94114610c2e578063a69df4b514610c4e57600080fd5b806388f8202014610b185780638da5cb5b14610b515780638ee88c5314610b6f578063906e9dd014610b8f57806395d89b4114610baf57600080fd5b80637d001732116102245780637d00173214610a235780637d1db4a514610ab657806380c1244514610acc5780638366e79a14610ae257806388790a6814610b0257600080fd5b80637088fb7f146109ae5780637090d9ae146109c357806370a08231146109d9578063715018a6146109f95780637b5a931a14610a0e57600080fd5b806339509351116103875780635342acb411610304578063602bc62b116102c8578063602bc62b146109165780636053a0e31461092b57806365be04381461094c578063690c22ca146109625780636ac9a870146109785780636bc87c3a1461099857600080fd5b80635342acb414610874578063535acb7f146108ad578063557ed1ba146108cd5780635881f3ef146108e05780635fa9ce3a1461090057600080fd5b80634906b5601161034b5780634906b560146107de57806349bd5a5e146107fe5780634a74bb021461081e5780635134f6ab1461083f57806352390c021461085457600080fd5b806339509351146107485780633b124fe7146107685780633bd5d1731461077e578063437823ec1461079e5780634549b039146107be57600080fd5b80631908226e1161041557806329370cc6116103d957806329370cc6146106915780632d838119146106b15780632deb50fb146106d1578063313ce567146107065780633685d4191461072857600080fd5b80631908226e146105f1578063200a692d14610607578063239a093a1461061d57806323b872dd1461063d57806327c8f8351461065d57600080fd5b80630f9b10e91161045c5780630f9b10e91461055657806313114a9d14610570578063137ae83e1461058f5780631694505e146105a457806318160ddd146105dc57600080fd5b8063053bfcd1146104a4578063061c82d0146104c657806306fdde03146104e657806307efbfdc14610511578063095ea7b31461052657600080fd5b3661049f57005b600080fd5b3480156104b057600080fd5b506104c46104bf366004613f32565b610f02565b005b3480156104d257600080fd5b506104c46104e1366004613f32565b610f46565b3480156104f257600080fd5b506104fb610f75565b604051610508919061401f565b60405180910390f35b34801561051d57600080fd5b506104c4611007565b34801561053257600080fd5b50610546610541366004613e0f565b611055565b6040519015158152602001610508565b34801561056257600080fd5b506021546105469060ff1681565b34801561057c57600080fd5b50600c545b604051908152602001610508565b34801561059b57600080fd5b5061058161106c565b3480156105b057600080fd5b506025546105c4906001600160a01b031681565b6040516001600160a01b039091168152602001610508565b3480156105e857600080fd5b50600a54610581565b3480156105fd57600080fd5b50610581601f5481565b34801561061357600080fd5b5061058160165481565b34801561062957600080fd5b506104c4610638366004613f32565b611082565b34801561064957600080fd5b50610546610658366004613d8a565b611111565b34801561066957600080fd5b506105c47f000000000000000000000000000000000000000000000000000000000000dead81565b34801561069d57600080fd5b506104c46106ac366004613efa565b61117a565b3480156106bd57600080fd5b506105816106cc366004613f32565b6111fc565b3480156106dd57600080fd5b506106f16106ec366004613f32565b611280565b60408051928352602083019190915201610508565b34801561071257600080fd5b50600f5460405160ff9091168152602001610508565b34801561073457600080fd5b506104c4610743366004613d1a565b6112ae565b34801561075457600080fd5b50610546610763366004613e0f565b61149d565b34801561077457600080fd5b5061058160105481565b34801561078a57600080fd5b506104c4610799366004613f32565b6114d3565b3480156107aa57600080fd5b506104c46107b9366004613d1a565b6115bd565b3480156107ca57600080fd5b506105816107d9366004613f62565b61160b565b3480156107ea57600080fd5b506104c46107f9366004613dca565b611698565b34801561080a57600080fd5b506026546105c4906001600160a01b031681565b34801561082a57600080fd5b5060265461054690600160a81b900460ff1681565b34801561084b57600080fd5b506104c46116f6565b34801561086057600080fd5b506104c461086f366004613d1a565b611744565b34801561088057600080fd5b5061054661088f366004613d1a565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156108b957600080fd5b506104c46108c8366004613f32565b611897565b3480156108d957600080fd5b5042610581565b3480156108ec57600080fd5b506105c46108fb366004613d1a565b6118c6565b34801561090c57600080fd5b5061058160195481565b34801561092257600080fd5b50600254610581565b34801561093757600080fd5b5060265461054690600160b01b900460ff1681565b34801561095857600080fd5b50610581601a5481565b34801561096e57600080fd5b5061058160185481565b34801561098457600080fd5b506104c4610993366004613f86565b611c1d565b3480156109a457600080fd5b5061058160125481565b3480156109ba57600080fd5b506104c4611c52565b3480156109cf57600080fd5b5061058160245481565b3480156109e557600080fd5b506105816109f4366004613d1a565b611cc7565b348015610a0557600080fd5b506104c4611d26565b348015610a1a57600080fd5b50601f54610581565b348015610a2f57600080fd5b50610a7f610a3e366004613d1a565b601b60205260009081526040902080546001820154600283015460038401546004850154600586015460069096015460ff9095169593949293919290919087565b6040805197151588526020880196909652948601939093526060850191909152608084015260a083015260c082015260e001610508565b348015610ac257600080fd5b50610581601d5481565b348015610ad857600080fd5b5061058160235481565b348015610aee57600080fd5b50610546610afd366004613d52565b611d88565b348015610b0e57600080fd5b5061058160175481565b348015610b2457600080fd5b50610546610b33366004613d1a565b6001600160a01b031660009081526008602052604090205460ff1690565b348015610b5d57600080fd5b506000546001600160a01b03166105c4565b348015610b7b57600080fd5b506104c4610b8a366004613f32565b611f20565b348015610b9b57600080fd5b506104c4610baa366004613d1a565b611f4f565b348015610bbb57600080fd5b506104fb611f9b565b348015610bd057600080fd5b506104c4610bdf366004613d1a565b611faa565b348015610bf057600080fd5b50610581612025565b348015610c0557600080fd5b50601e54610581565b348015610c1a57600080fd5b50610546610c29366004613e0f565b612036565b348015610c3a57600080fd5b506003546105c4906001600160a01b031681565b348015610c5a57600080fd5b506104c4612085565b348015610c6f57600080fd5b50610546610c7e366004613e0f565b61218b565b348015610c8f57600080fd5b506104c4610c9e366004613f32565b612198565b348015610caf57600080fd5b506104c4610cbe366004613dca565b6121d3565b348015610ccf57600080fd5b506104c4610cde366004613f32565b612231565b348015610cef57600080fd5b506104c4610cfe366004613f32565b612260565b348015610d0f57600080fd5b506104c4610d1e366004613f32565b61228f565b348015610d2f57600080fd5b506104c4610d3e366004613efa565b6122ca565b348015610d4f57600080fd5b506104c4610d5e366004613dca565b612341565b348015610d6f57600080fd5b5060265461054690600160b81b900460ff1681565b348015610d9057600080fd5b50610581601c5481565b348015610da657600080fd5b5061058160155481565b348015610dbc57600080fd5b506104c4610dcb366004613f32565b61239f565b348015610ddc57600080fd5b50610581610deb366004613d52565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b348015610e2257600080fd5b506104c4610e31366004613efa565b612424565b348015610e4257600080fd5b506104c4610e51366004613f32565b61248f565b348015610e6257600080fd5b506104c4610e71366004613d1a565b6124be565b348015610e8257600080fd5b506104c4610e91366004613f32565b612509565b348015610ea257600080fd5b5061058160145481565b348015610eb857600080fd5b506104c4610ec7366004613d1a565b612538565b348015610ed857600080fd5b5061058160225481565b348015610eee57600080fd5b506104c4610efd366004613f86565b6125d1565b6000546001600160a01b03163314610f355760405162461bcd60e51b8152600401610f2c906140b8565b60405180910390fd5b610f4081603c614132565b60245550565b6000546001600160a01b03163314610f705760405162461bcd60e51b8152600401610f2c906140b8565b601055565b6060600d8054610f8490614168565b80601f0160208091040260200160405190810160405280929190818152602001828054610fb090614168565b8015610ffd5780601f10610fd257610100808354040283529160200191610ffd565b820191906000526020600020905b815481529060010190602001808311610fe057829003601f168201915b5050505050905090565b6000546001600160a01b031633146110315760405162461bcd60e51b8152600401610f2c906140b8565b61103b60016122ca565b60016010819055601255693f870857a3e0e3800000601d55565b6000611062338484612606565b5060015b92915050565b60195460009061107d90603c61272a565b905090565b6000546001600160a01b031633146110ac5760405162461bcd60e51b8152600401610f2c906140b8565b606481111561110c5760405162461bcd60e51b815260206004820152602660248201527f5468652076616c7565206d757374206e6f74206265206c61726765722074686160448201526537101898181760d11b6064820152608401610f2c565b601a55565b600061111e84848461276c565b611170843361116b8560405180606001604052806028815260200161423b602891396001600160a01b038a1660009081526006602090815260408083203384529091529020549190612de9565b612606565b5060019392505050565b6000546001600160a01b031633146111a45760405162461bcd60e51b8152600401610f2c906140b8565b60268054821515600160b01b0260ff60b01b199091161790556040517f3794234fa370c9f3b948dda3e3040530785b2ef1eb27dda3ffde478f4e2643c0906111f190831515815260200190565b60405180910390a150565b6000600b548211156112635760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610f2c565b600061126d612e23565b9050611279838261272a565b9392505050565b6020818154811061129057600080fd5b60009182526020909120600290910201805460019091015490915082565b6000546001600160a01b031633146112d85760405162461bcd60e51b8152600401610f2c906140b8565b6001600160a01b03811660009081526008602052604090205460ff166113405760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610f2c565b60005b60095481101561149957816001600160a01b03166009828154811061137857634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316141561148757600980546113a390600190614151565b815481106113c157634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600980546001600160a01b0390921691839081106113fb57634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600582526040808220829055600890925220805460ff19169055600980548061146157634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80611491816141a3565b915050611343565b5050565b3360008181526006602090815260408083206001600160a01b0387168452909152812054909161106291859061116b9086612e46565b3360008181526008602052604090205460ff16156115485760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610f2c565b600061155383612ea5565b505050506001600160a01b03841660009081526004602052604090205491925061157f91905082612ef4565b6001600160a01b038316600090815260046020526040902055600b546115a59082612ef4565b600b55600c546115b59084612e46565b600c55505050565b6000546001600160a01b031633146115e75760405162461bcd60e51b8152600401610f2c906140b8565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b6000600a5483111561165f5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610f2c565b8161167e57600061166f84612ea5565b50939550611066945050505050565b600061168984612ea5565b50929550611066945050505050565b6000546001600160a01b031633146116c25760405162461bcd60e51b8152600401610f2c906140b8565b6001600160a01b03939093166000908152601b60205260409020805460ff1916921515929092178255600582015560060155565b6000546001600160a01b031633146117205760405162461bcd60e51b8152600401610f2c906140b8565b61172a60006122ca565b6000601081905560125569d3c21bcecceda1000000601d55565b6000546001600160a01b0316331461176e5760405162461bcd60e51b8152600401610f2c906140b8565b6001600160a01b03811660009081526008602052604090205460ff16156117d75760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610f2c565b6001600160a01b03811660009081526004602052604090205415611831576001600160a01b038116600090815260046020526040902054611817906111fc565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152600860205260408120805460ff191660019081179091556009805491820181559091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b0319169091179055565b6000546001600160a01b031633146118c15760405162461bcd60e51b8152600401610f2c906140b8565b601f55565b600080546001600160a01b031633146118f15760405162461bcd60e51b8152600401610f2c906140b8565b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561192f57600080fd5b505afa158015611943573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119679190613d36565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156119af57600080fd5b505afa1580156119c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e79190613d36565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b158015611a2d57600080fd5b505afa158015611a41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a659190613d36565b91506001600160a01b038216611be957806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611aae57600080fd5b505afa158015611ac2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ae69190613d36565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611b2e57600080fd5b505afa158015611b42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b669190613d36565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015611bae57600080fd5b505af1158015611bc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be69190613d36565b91505b602680546001600160a01b038085166001600160a01b03199283161790925560258054939092169216919091179055919050565b6000546001600160a01b03163314611c475760405162461bcd60e51b8152600401610f2c906140b8565b601691909155601755565b6000546001600160a01b03163314611c7c5760405162461bcd60e51b8152600401610f2c906140b8565b47611c8f6000546001600160a01b031690565b6001600160a01b03166108fc829081150290604051600060405180830381858888f19350505050158015611499573d6000803e3d6000fd5b6001600160a01b03811660009081526008602052604081205460ff1615611d0457506001600160a01b031660009081526005602052604090205490565b6001600160a01b038216600090815260046020526040902054611066906111fc565b6000546001600160a01b03163314611d505760405162461bcd60e51b8152600401610f2c906140b8565b600080546040516001600160a01b0390911690600080516020614263833981519152908390a3600080546001600160a01b0319169055565b600080546001600160a01b03163314611db35760405162461bcd60e51b8152600401610f2c906140b8565b6001600160a01b038316301415611e185760405162461bcd60e51b815260206004820152602360248201527f43616e2774206c657420796f752074616b6520616c6c206e617469766520746f60448201526235b2b760e91b6064820152608401610f2c565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a082319060240160206040518083038186803b158015611e5a57600080fd5b505afa158015611e6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e929190613f4a565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb90604401602060405180830381600087803b158015611ee057600080fd5b505af1158015611ef4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f189190613f16565b949350505050565b6000546001600160a01b03163314611f4a5760405162461bcd60e51b8152600401610f2c906140b8565b601255565b6000546001600160a01b03163314611f795760405162461bcd60e51b8152600401610f2c906140b8565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6060600e8054610f8490614168565b73883877c5fdd9509464cf506a659a7da67fb96a173314611fdd5760405162461bcd60e51b8152600401610f2c906140b8565b6001600160a01b0381166120035760405162461bcd60e51b8152600401610f2c90614072565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b60235460009061107d90603c61272a565b6000611062338461116b85604051806060016040528060258152602001614283602591393360009081526006602090815260408083206001600160a01b038d1684529091529020549190612de9565b6001546001600160a01b031633146120eb5760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610f2c565b600254421161213c5760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610f2c565b600154600080546040516001600160a01b03938416939091169160008051602061426383398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b600061106233848461276c565b6000546001600160a01b031633146121c25760405162461bcd60e51b8152600401610f2c906140b8565b6121cd81603c614132565b60235550565b6000546001600160a01b031633146121fd5760405162461bcd60e51b8152600401610f2c906140b8565b6001600160a01b03939093166000908152601b60205260409020805460ff1916921515929092178255600382015560040155565b6000546001600160a01b0316331461225b5760405162461bcd60e51b8152600401610f2c906140b8565b601c55565b6000546001600160a01b0316331461228a5760405162461bcd60e51b8152600401610f2c906140b8565b601e55565b6000546001600160a01b031633146122b95760405162461bcd60e51b8152600401610f2c906140b8565b6122c481603c614132565b60195550565b6000546001600160a01b031633146122f45760405162461bcd60e51b8152600401610f2c906140b8565b60268054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906111f190831515815260200190565b6000546001600160a01b0316331461236b5760405162461bcd60e51b8152600401610f2c906140b8565b6001600160a01b03939093166000908152601b60205260409020805460ff1916921515929092178255600182015560020155565b6000546001600160a01b031633146123c95760405162461bcd60e51b8152600401610f2c906140b8565b60008054600180546001600160a01b03199081166001600160a01b038416179091551690556123f88142614106565b600255600080546040516001600160a01b0390911690600080516020614263833981519152908390a350565b6000546001600160a01b0316331461244e5760405162461bcd60e51b8152600401610f2c906140b8565b6021805460ff19168215159081179091556040519081527fa53c6be1202d17d11e250c717d12c9ab9ccb8f62ee9f34c8b8e2173e3d9c2c03906020016111f1565b6000546001600160a01b031633146124b95760405162461bcd60e51b8152600401610f2c906140b8565b602255565b6000546001600160a01b031633146124e85760405162461bcd60e51b8152600401610f2c906140b8565b6001600160a01b03166000908152600760205260409020805460ff19169055565b6000546001600160a01b031633146125335760405162461bcd60e51b8152600401610f2c906140b8565b601d55565b6000546001600160a01b031633146125625760405162461bcd60e51b8152600401610f2c906140b8565b6001600160a01b0381166125885760405162461bcd60e51b8152600401610f2c90614072565b600080546040516001600160a01b038085169392169160008051602061426383398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146125fb5760405162461bcd60e51b8152600401610f2c906140b8565b601491909155601555565b6001600160a01b0383166126685760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610f2c565b6001600160a01b0382166126c95760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610f2c565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061127983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612f36565b6001600160a01b0383166127d05760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610f2c565b6001600160a01b0382166128325760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610f2c565b600081116128945760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610f2c565b6000546001600160a01b038481169116148015906128c057506000546001600160a01b03838116911614155b1561292857601d548111156129285760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610f2c565b600061293330611cc7565b601e54602654919250821015906001600160a01b03858116911614801561296f575060265460009061296d906001600160a01b0316611cc7565b115b156129fa57604080518082019091526000602082015242815261299184612f64565b6020828101918252805460018101825560009190915291517fc97bfaf2f8ee708c303a06d134f5ecd8389ae0432af62dc132a24118292866bb600290930292830155517fc97bfaf2f8ee708c303a06d134f5ecd8389ae0432af62dc132a24118292866bc909101555b602654600160a01b900460ff16158015612a1d5750602654600160a81b900460ff165b8015612a3e5750602654600090612a3c906001600160a01b0316611cc7565b115b15612c3d576026546001600160a01b0385811691161415612c3d57808015612a75575042601954601854612a729190614106565b11155b15612a8c5742601855601e549150612a8c82613124565b602654600160b01b900460ff1615612c3d57601f5460215447919060ff1615612bae5760008060235442612ac09190614151565b90506000805b602054811015612b70578260208281548110612af257634e487b7160e01b600052603260045260246000fd5b90600052602060002090600202016000015410612b5e57612b4e60208281548110612b2d57634e487b7160e01b600052603260045260246000fd5b90600052602060002090600202016001015485612e4690919063ffffffff16565b9350612b5b826001614106565b91505b80612b68816141a3565b915050612ac6565b50600081118015612b8357506000602254115b15612ba257602254612b9f90612b99858461272a565b9061272a565b93505b612baa613186565b5050505b6000612bca6064612b99601a548561334790919063ffffffff16565b90506000612bd88284614151565b612be3906001614106565b6040805142602082015244918101919091526060016040516020818303038152906040528051906020012060001c612c1b91906141be565b612c259083614106565b905080841115612c3857612c38816133c6565b505050505b6001600160a01b03851660009081526007602052604090205460019060ff1680612c7f57506001600160a01b03851660009081526007602052604090205460ff165b15612c8c57506000612dd5565b6026546001600160a01b0387811691161415612cb757612caa6133f8565b6014546010556015546012555b6026546001600160a01b0386811691161415612ce257612cd56133f8565b6016546010556017546012555b6001600160a01b0386166000908152601b602052604090205460ff1615612d6e57612d0b6133f8565b6001600160a01b038087166000908152601b6020526040902060018101546010556002015460125560265486821691161415612d69576001600160a01b0386166000908152601b602052604090206005810154601055600601546012555b612dd5565b6001600160a01b0385166000908152601b602052604090205460ff1615612dd557612d976133f8565b6026546001600160a01b0387811691161415612dd5576001600160a01b0385166000908152601b602052604090206003810154601055600401546012555b612de186868684613426565b505050505050565b60008184841115612e0d5760405162461bcd60e51b8152600401610f2c919061401f565b506000612e1a8486614151565b95945050505050565b6000806000612e3061354b565b9092509050612e3f828261272a565b9250505090565b600080612e538385614106565b9050838110156112795760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610f2c565b6000806000806000806000806000612ebc8a613705565b9250925092506000806000612eda8d8686612ed5612e23565b613747565b919f909e50909c50959a5093985091965092945050505050565b600061127983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612de9565b60008183612f575760405162461bcd60e51b8152600401610f2c919061401f565b506000612e1a848661411e565b604080516002808252606082018352600092839291906020830190803683370190505090503081600081518110612fab57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152602554604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612fff57600080fd5b505afa158015613013573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130379190613d36565b8160018151811061305857634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260255460405163d06ca61f60e01b8152600092919091169063d06ca61f9061309c90879086906004016140ed565b60006040518083038186803b1580156130b457600080fd5b505afa1580156130c8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526130f09190810190613e3a565b90508060018151811061311357634e487b7160e01b600052603260045260246000fd5b602002602001015192505050919050565b6026805460ff60a01b1916600160a01b1790554760006131444783612ef4565b600354601c54919250613174916001600160a01b039091169061316f90606490612b99908690613347565b613797565b50506026805460ff60a01b1916905550565b600080602454426131979190614151565b905060005b6020548110156132d35781602082815481106131c857634e487b7160e01b600052603260045260246000fd5b906000526020600020906002020160000154106132c1576020818154811061320057634e487b7160e01b600052603260045260246000fd5b9060005260206000209060020201600001546020848154811061323357634e487b7160e01b600052603260045260246000fd5b9060005260206000209060020201600001819055506020818154811061326957634e487b7160e01b600052603260045260246000fd5b9060005260206000209060020201600101546020848154811061329c57634e487b7160e01b600052603260045260246000fd5b9060005260206000209060020201600101819055508260016132be9190614106565b92505b806132cb816141a3565b91505061319c565b506020546000906132e5908490614151565b905060005b8181101561334157602080548061331157634e487b7160e01b600052603160045260246000fd5b60008281526020812060026000199093019283020181815560010155905580613339816141a3565b9150506132ea565b50505050565b60008261335657506000611066565b60006133628385614132565b90508261336f858361411e565b146112795760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610f2c565b6026805460ff60a01b1916600160a01b17905580156133e8576133e8816137d2565b506026805460ff60a01b19169055565b6010541580156134085750601254155b1561340f57565b601080546011556012805460135560009182905555565b80613433576134336133f8565b6001600160a01b03841660009081526008602052604090205460ff16801561347457506001600160a01b03831660009081526008602052604090205460ff16155b15613489576134848484846139b0565b613535565b6001600160a01b03841660009081526008602052604090205460ff161580156134ca57506001600160a01b03831660009081526008602052604090205460ff165b156134da57613484848484613ad6565b6001600160a01b03841660009081526008602052604090205460ff16801561351a57506001600160a01b03831660009081526008602052604090205460ff165b1561352a57613484848484613b7f565b613535848484613bf2565b8061334157613341601154601055601354601255565b600b54600a546000918291825b6009548110156136d55782600460006009848154811061358857634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061360157508160056000600984815481106135da57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561361757600b54600a54945094505050509091565b61366b600460006009848154811061363f57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612ef4565b92506136c1600560006009848154811061369557634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612ef4565b9150806136cd816141a3565b915050613558565b50600a54600b546136e59161272a565b8210156136fc57600b54600a549350935050509091565b90939092509050565b60008060008061371485613c36565b9050600061372186613c52565b90506000613739826137338986612ef4565b90612ef4565b979296509094509092505050565b60008080806137568886613347565b905060006137648887613347565b905060006137728888613347565b90506000613784826137338686612ef4565b939b939a50919850919650505050505050565b6040516001600160a01b0383169082156108fc029083906000818181858888f193505050501580156137cd573d6000803e3d6000fd5b505050565b6040805160028082526060820183526000926020830190803683375050602554604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561383757600080fd5b505afa15801561384b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061386f9190613d36565b8160008151811061389057634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106138d257634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831660209182029290920101526025541663b6f9de95836000847f000000000000000000000000000000000000000000000000000000000000dead6139224261012c612e46565b6040518663ffffffff1660e01b81526004016139419493929190613fea565b6000604051808303818588803b15801561395a57600080fd5b505af115801561396e573d6000803e3d6000fd5b50505050507f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a962482826040516139a49291906140ed565b60405180910390a15050565b6000806000806000806139c287612ea5565b6001600160a01b038f16600090815260056020526040902054959b509399509197509550935091506139f49088612ef4565b6001600160a01b038a16600090815260056020908152604080832093909355600490522054613a239087612ef4565b6001600160a01b03808b1660009081526004602052604080822093909355908a1681522054613a529086612e46565b6001600160a01b038916600090815260046020526040902055613a7481613c6e565b613a7e8483613cf6565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613ac391815260200190565b60405180910390a3505050505050505050565b600080600080600080613ae887612ea5565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150613b1a9087612ef4565b6001600160a01b03808b16600090815260046020908152604080832094909455918b16815260059091522054613b509084612e46565b6001600160a01b038916600090815260056020908152604080832093909355600490522054613a529086612e46565b600080600080600080613b9187612ea5565b6001600160a01b038f16600090815260056020526040902054959b50939950919750955093509150613bc39088612ef4565b6001600160a01b038a16600090815260056020908152604080832093909355600490522054613b1a9087612ef4565b600080600080600080613c0487612ea5565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150613a239087612ef4565b60006110666064612b996010548561334790919063ffffffff16565b60006110666064612b996012548561334790919063ffffffff16565b6000613c78612e23565b90506000613c868383613347565b30600090815260046020526040902054909150613ca39082612e46565b3060009081526004602090815260408083209390935560089052205460ff16156137cd5730600090815260056020526040902054613ce19084612e46565b30600090815260056020526040902055505050565b600b54613d039083612ef4565b600b55600c54613d139082612e46565b600c555050565b600060208284031215613d2b578081fd5b813561127981614214565b600060208284031215613d47578081fd5b815161127981614214565b60008060408385031215613d64578081fd5b8235613d6f81614214565b91506020830135613d7f81614214565b809150509250929050565b600080600060608486031215613d9e578081fd5b8335613da981614214565b92506020840135613db981614214565b929592945050506040919091013590565b60008060008060808587031215613ddf578081fd5b8435613dea81614214565b93506020850135613dfa8161422c565b93969395505050506040820135916060013590565b60008060408385031215613e21578182fd5b8235613e2c81614214565b946020939093013593505050565b60006020808385031215613e4c578182fd5b825167ffffffffffffffff80821115613e63578384fd5b818501915085601f830112613e76578384fd5b815181811115613e8857613e886141fe565b8060051b604051601f19603f83011681018181108582111715613ead57613ead6141fe565b604052828152858101935084860182860187018a1015613ecb578788fd5b8795505b83861015613eed578051855260019590950194938601938601613ecf565b5098975050505050505050565b600060208284031215613f0b578081fd5b81356112798161422c565b600060208284031215613f27578081fd5b81516112798161422c565b600060208284031215613f43578081fd5b5035919050565b600060208284031215613f5b578081fd5b5051919050565b60008060408385031215613f74578182fd5b823591506020830135613d7f8161422c565b60008060408385031215613f98578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b83811015613fdf5781516001600160a01b031687529582019590820190600101613fba565b509495945050505050565b8481526080602082015260006140036080830186613fa7565b6001600160a01b03949094166040830152506060015292915050565b6000602080835283518082850152825b8181101561404b5785810183015185820160400152820161402f565b8181111561405c5783604083870101525b50601f01601f1916929092016040019392505050565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b828152604060208201526000611f186040830184613fa7565b60008219821115614119576141196141d2565b500190565b60008261412d5761412d6141e8565b500490565b600081600019048311821515161561414c5761414c6141d2565b500290565b600082821015614163576141636141d2565b500390565b600181811c9082168061417c57607f821691505b6020821081141561419d57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156141b7576141b76141d2565b5060010190565b6000826141cd576141cd6141e8565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461422957600080fd5b50565b801515811461422957600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212202d8407f14238581307b30cbaa7c0fffd004d000bf8fa11272175c808c2d1c9d864736f6c63430008040033
Deployed Bytecode Sourcemap
15617:29053:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39054:149;;;;;;;;;;-1:-1:-1;39054:149:0;;;;;:::i;:::-;;:::i;:::-;;40066:98;;;;;;;;;;-1:-1:-1;40066:98:0;;;;;:::i;:::-;;:::i;19800:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42095:193;;;;;;;;;;;;;:::i;20712:161::-;;;;;;;;;;-1:-1:-1;20712:161:0;;;;;:::i;:::-;;:::i;:::-;;;6848:14:1;;6841:22;6823:41;;6811:2;6796:18;20712:161:0;6778:92:1;17839:33:0;;;;;;;;;;-1:-1:-1;17839:33:0;;;;;;;;21833:87;;;;;;;;;;-1:-1:-1;21902:10:0;;21833:87;;;16431:25:1;;;16419:2;16404:18;21833:87:0;16386:76:1;39804:112:0;;;;;;;;;;;;;:::i;18044:41::-;;;;;;;;;;-1:-1:-1;18044:41:0;;;;-1:-1:-1;;;;;18044:41:0;;;;;;-1:-1:-1;;;;;5827:32:1;;;5809:51;;5797:2;5782:18;18044:41:0;5764:102:1;20077:95:0;;;;;;;;;;-1:-1:-1;20157:7:0;;20077:95;;17699:44;;;;;;;;;;;;;;;;17204:30;;;;;;;;;;;;;;;;39600:196;;;;;;;;;;-1:-1:-1;39600:196:0;;;;;:::i;:::-;;:::i;20881:313::-;;;;;;;;;;-1:-1:-1;20881:313:0;;;;;:::i;:::-;;:::i;15860:81::-;;;;;;;;;;;;;;;41555:150;;;;;;;;;;-1:-1:-1;41555:150:0;;;;;:::i;:::-;;:::i;23015:253::-;;;;;;;;;;-1:-1:-1;23015:253:0;;;;;:::i;:::-;;:::i;17795:37::-;;;;;;;;;;-1:-1:-1;17795:37:0;;;;;:::i;:::-;;:::i;:::-;;;;16978:25:1;;;17034:2;17019:18;;17012:34;;;;16951:18;17795:37:0;16933:119:1;19986:83:0;;;;;;;;;;-1:-1:-1;20052:9:0;;19986:83;;20052:9;;;;17199:36:1;;17187:2;17172:18;19986:83:0;17154:87:1;23619:475:0;;;;;;;;;;-1:-1:-1;23619:475:0;;;;;:::i;:::-;;:::i;21202:218::-;;;;;;;;;;-1:-1:-1;21202:218:0;;;;;:::i;:::-;;:::i;16928:26::-;;;;;;;;;;;;;;;;22182:377;;;;;;;;;;-1:-1:-1;22182:377:0;;;;;:::i;:::-;;:::i;37775:111::-;;;;;;;;;;-1:-1:-1;37775:111:0;;;;;:::i;:::-;;:::i;22571:436::-;;;;;;;;;;-1:-1:-1;22571:436:0;;;;;:::i;:::-;;:::i;44335:326::-;;;;;;;;;;-1:-1:-1;44335:326:0;;;;;:::i;:::-;;:::i;18092:28::-;;;;;;;;;;-1:-1:-1;18092:28:0;;;;-1:-1:-1;;;;;18092:28:0;;;18161:41;;;;;;;;;;-1:-1:-1;18161:41:0;;;;-1:-1:-1;;;18161:41:0;;;;;;41883:200;;;;;;;;;;;;;:::i;23276:335::-;;;;;;;;;;-1:-1:-1;23276:335:0;;;;;:::i;:::-;;:::i;37640:123::-;;;;;;;;;;-1:-1:-1;37640:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;37728:27:0;37704:4;37728:27;;;:18;:27;;;;;;;;;37640:123;40674:134;;;;;;;;;;-1:-1:-1;40674:134:0;;;;;:::i;:::-;;:::i;7009:90::-;;;;;;;;;;-1:-1:-1;7076:15:0;7009:90;;42434:637;;;;;;;;;;-1:-1:-1;42434:637:0;;;;;:::i;:::-;;:::i;17326:54::-;;;;;;;;;;;;;;;;6907:90;;;;;;;;;;-1:-1:-1;6980:9:0;;6907:90;;18209:34;;;;;;;;;;-1:-1:-1;18209:34:0;;;;-1:-1:-1;;;18209:34:0;;;;;;17389:37;;;;;;;;;;;;;;;;17287:32;;;;;;;;;;;;;;;;40359:175;;;;;;;;;;-1:-1:-1;40359:175:0;;;;;:::i;:::-;;:::i;17015:32::-;;;;;;;;;;;;;;;;43527:139;;;;;;;;;;;;;:::i;17975:60::-;;;;;;;;;;;;;;;;20180:198;;;;;;;;;;-1:-1:-1;20180:198:0;;;;;:::i;:::-;;:::i;6306:148::-;;;;;;;;;;;;;:::i;22064:106::-;;;;;;;;;;-1:-1:-1;22146:16:0;;22064:106;;17459:51;;;;;;;;;;-1:-1:-1;17459:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7209:14:1;;7202:22;7184:41;;7256:2;7241:18;;7234:34;;;;7284:18;;;7277:34;;;;7342:2;7327:18;;7320:34;;;;7385:3;7370:19;;7363:35;7429:3;7414:19;;7407:35;7473:3;7458:19;;7451:35;7171:3;7156:19;17459:51:0;7138:354:1;17567:53:0;;;;;;;;;;;;;;;;17921:47;;;;;;;;;;;;;;;;43188:327;;;;;;;;;;-1:-1:-1;43188:327:0;;;;;:::i;:::-;;:::i;17241:37::-;;;;;;;;;;;;;;;;21705:120;;;;;;;;;;-1:-1:-1;21705:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;21797:20:0;21773:4;21797:20;;;:11;:20;;;;;;;;;21705:120;5925:79;;;;;;;;;;-1:-1:-1;5963:7:0;5990:6;-1:-1:-1;;;;;5990:6:0;5925:79;;40546:120;;;;;;;;;;-1:-1:-1;40546:120:0;;;;;:::i;:::-;;:::i;41225:139::-;;;;;;;;;;-1:-1:-1;41225:139:0;;;;;:::i;:::-;;:::i;19891:87::-;;;;;;;;;;;;;:::i;6712:187::-;;;;;;;;;;-1:-1:-1;6712:187:0;;;;;:::i;:::-;;:::i;39332:117::-;;;;;;;;;;;;;:::i;21932:120::-;;;;;;;;;;-1:-1:-1;22021:23:0;;21932:120;;21428:269;;;;;;;;;;-1:-1:-1;21428:269:0;;;;;:::i;:::-;;:::i;15739:93::-;;;;;;;;;;-1:-1:-1;15739:93:0;;;;-1:-1:-1;;;;;15739:93:0;;;7345:305;;;;;;;;;;;;;:::i;20386:167::-;;;;;;;;;;-1:-1:-1;20386:167:0;;;;;:::i;:::-;;:::i;39457:135::-;;;;;;;;;;-1:-1:-1;39457:135:0;;;;;:::i;:::-;;:::i;44000:323::-;;;;;;;;;;-1:-1:-1;44000:323:0;;;;;:::i;:::-;;:::i;40937:110::-;;;;;;;;;;-1:-1:-1;40937:110:0;;;;;:::i;:::-;;:::i;41055:162::-;;;;;;;;;;-1:-1:-1;41055:162:0;;;;;:::i;:::-;;:::i;39924:130::-;;;;;;;;;;-1:-1:-1;39924:130:0;;;;;:::i;:::-;;:::i;41372:171::-;;;;;;;;;;-1:-1:-1;41372:171:0;;;;;:::i;:::-;;:::i;43674:314::-;;;;;;;;;;-1:-1:-1;43674:314:0;;;;;:::i;:::-;;:::i;18252:43::-;;;;;;;;;;-1:-1:-1;18252:43:0;;;;-1:-1:-1;;;18252:43:0;;;;;;17519:35;;;;;;;;;;;;;;;;17156;;;;;;;;;;;;;;;;7107:226;;;;;;;;;;-1:-1:-1;7107:226:0;;;;;:::i;:::-;;:::i;20561:143::-;;;;;;;;;;-1:-1:-1;20561:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;20669:18:0;;;20642:7;20669:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;20561:143;41713:158;;;;;;;;;;-1:-1:-1;41713:158:0;;;;;:::i;:::-;;:::i;39211:113::-;;;;;;;;;;-1:-1:-1;39211:113:0;;;;;:::i;:::-;;:::i;37898:110::-;;;;;;;;;;-1:-1:-1;37898:110:0;;;;;:::i;:::-;;:::i;40816:109::-;;;;;;;;;;-1:-1:-1;40816:109:0;;;;;:::i;:::-;;:::i;17120:29::-;;;;;;;;;;;;;;;;6462:244;;;;;;;;;;-1:-1:-1;6462:244:0;;;;;:::i;:::-;;:::i;17879:35::-;;;;;;;;;;;;;;;;40180:168;;;;;;;;;;-1:-1:-1;40180:168:0;;;;;:::i;:::-;;:::i;39054:149::-;6059:6;;-1:-1:-1;;;;;6059:6:0;309:10;6059:22;6051:67;;;;-1:-1:-1;;;6051:67:0;;;;;;;:::i;:::-;;;;;;;;;39173:22:::1;:10:::0;39186:9:::1;39173:22;:::i;:::-;39143:27;:52:::0;-1:-1:-1;39054:149:0:o;40066:98::-;6059:6;;-1:-1:-1;;;;;6059:6:0;309:10;6059:22;6051:67;;;;-1:-1:-1;;;6051:67:0;;;;;;;:::i;:::-;40140:7:::1;:16:::0;40066:98::o;19800:83::-;19837:13;19870:5;19863:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19800:83;:::o;42095:193::-;6059:6;;-1:-1:-1;;;;;6059:6:0;309:10;6059:22;6051:67;;;;-1:-1:-1;;;6051:67:0;;;;;;;:::i;:::-;42149:30:::1;42174:4;42149:24;:30::i;:::-;42200:1;42190:7;:11:::0;;;42212:13:::1;:17:::0;42255:25:::1;42240:12;:40:::0;42095:193::o;20712:161::-;20787:4;20804:39;309:10;20827:7;20836:6;20804:8;:39::i;:::-;-1:-1:-1;20861:4:0;20712:161;;;;;:::o;39804:112::-;39877:23;;39850:7;;39877:31;;39905:2;39877:27;:31::i;:::-;39870:38;;39804:112;:::o;39600:196::-;6059:6;;-1:-1:-1;;;;;6059:6:0;309:10;6059:22;6051:67;;;;-1:-1:-1;;;6051:67:0;;;;;;;:::i;:::-;39701:3:::1;39687:10;:17;;39679:68;;;::::0;-1:-1:-1;;;39679:68:0;;14092:2:1;39679:68:0::1;::::0;::::1;14074:21:1::0;14131:2;14111:18;;;14104:30;14170:34;14150:18;;;14143:62;-1:-1:-1;;;14221:18:1;;;14214:36;14267:19;;39679:68:0::1;14064:228:1::0;39679:68:0::1;39758:17;:30:::0;39600:196::o;20881:313::-;20979:4;20996:36;21006:6;21014:9;21025:6;20996:9;:36::i;:::-;21043:121;21052:6;309:10;21074:89;21112:6;21074:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21074:19:0;;;;;;:11;:19;;;;;;;;309:10;21074:33;;;;;;;;;;:37;:89::i;:::-;21043:8;:121::i;:::-;-1:-1:-1;21182:4:0;20881:313;;;;;:::o;41555:150::-;6059:6;;-1:-1:-1;;;;;6059:6:0;309:10;6059:22;6051:67;;;;-1:-1:-1;;;6051:67:0;;;;;;;:::i;:::-;41625:14:::1;:25:::0;;;::::1;;-1:-1:-1::0;;;41625:25:0::1;-1:-1:-1::0;;;;41625:25:0;;::::1;;::::0;;41666:31:::1;::::0;::::1;::::0;::::1;::::0;41642:8;6848:14:1;6841:22;6823:41;;6811:2;6796:18;;6778:92;41666:31:0::1;;;;;;;;41555:150:::0;:::o;23015:253::-;23081:7;23120;;23109;:18;;23101:73;;;;-1:-1:-1;;;23101:73:0;;9865:2:1;23101:73:0;;;9847:21:1;9904:2;9884:18;;;9877:30;9943:34;9923:18;;;9916:62;-1:-1:-1;;;9994:18:1;;;9987:40;10044:19;;23101:73:0;9837:232:1;23101:73:0;23185:19;23208:10;:8;:10::i;:::-;23185:33;-1:-1:-1;23236:24:0;:7;23185:33;23236:11;:24::i;:::-;23229:31;23015:253;-1:-1:-1;;;23015:253:0:o;17795:37::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17795:37:0;:::o;23619:475::-;6059:6;;-1:-1:-1;;;;;6059:6:0;309:10;6059:22;6051:67;;;;-1:-1:-1;;;6051:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23701:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;23693:56;;;::::0;-1:-1:-1;;;23693:56:0;;11798:2:1;23693:56:0::1;::::0;::::1;11780:21:1::0;11837:2;11817:18;;;11810:30;11876:25;11856:18;;;11849:53;11919:18;;23693:56:0::1;11770:173:1::0;23693:56:0::1;23765:9;23760:327;23784:9;:16:::0;23780:20;::::1;23760:327;;;23842:7;-1:-1:-1::0;;;;;23826:23:0::1;:9;23836:1;23826:12;;;;;;-1:-1:-1::0;;;23826:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;23826:12:0::1;:23;23822:254;;;23885:9;23895:16:::0;;:20:::1;::::0;23914:1:::1;::::0;23895:20:::1;:::i;:::-;23885:31;;;;;;-1:-1:-1::0;;;23885:31:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;23870:9:::1;:12:::0;;-1:-1:-1;;;;;23885:31:0;;::::1;::::0;23880:1;;23870:12;::::1;;;-1:-1:-1::0;;;23870:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;23870:46:0::1;-1:-1:-1::0;;;;;23870:46:0;;::::1;;::::0;;23935:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;23974:11:::1;:20:::0;;;;:28;;-1:-1:-1;;23974:28:0::1;::::0;;24021:9:::1;:15:::0;;;::::1;;-1:-1:-1::0;;;24021:15:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;24021:15:0;;;;;-1:-1:-1;;;;;;24021:15:0::1;::::0;;;;;23760:327:::1;23619:475:::0;:::o;23822:254::-:1;23802:3:::0;::::1;::::0;::::1;:::i;:::-;;;;23760:327;;;;23619:475:::0;:::o;21202:218::-;309:10;21290:4;21339:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;21339:34:0;;;;;;;;;;21290:4;;21307:83;;21330:7;;21339:50;;21378:10;21339:38;:50::i;22182:377::-;309:10;22234:14;22283:19;;;:11;:19;;;;;;;;22282:20;22274:77;;;;-1:-1:-1;;;22274:77:0;;15670:2:1;22274:77:0;;;15652:21:1;15709:2;15689:18;;;15682:30;15748:34;15728:18;;;15721:62;-1:-1:-1;;;15799:18:1;;;15792:42;15851:19;;22274:77:0;15642:234:1;22274:77:0;22363:15;22387:19;22398:7;22387:10;:19::i;:::-;-1:-1:-1;;;;;;;;;22435:15:0;;;;;;:7;:15;;;;;;22362:44;;-1:-1:-1;22435:28:0;;:15;-1:-1:-1;22362:44:0;22435:19;:28::i;:::-;-1:-1:-1;;;;;22417:15:0;;;;;;:7;:15;;;;;:46;22484:7;;:20;;22496:7;22484:11;:20::i;:::-;22474:7;:30;22528:10;;:23;;22543:7;22528:14;:23::i;:::-;22515:10;:36;-1:-1:-1;;;22182:377:0:o;37775:111::-;6059:6;;-1:-1:-1;;;;;6059:6:0;309:10;6059:22;6051:67;;;;-1:-1:-1;;;6051:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37844:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;37844:34:0::1;37874:4;37844:34;::::0;;37775:111::o;22571:436::-;22661:7;22700;;22689;:18;;22681:62;;;;-1:-1:-1;;;22681:62:0;;12150:2:1;22681:62:0;;;12132:21:1;12189:2;12169:18;;;12162:30;12228:33;12208:18;;;12201:61;12279:18;;22681:62:0;12122:181:1;22681:62:0;22759:17;22754:246;;22794:15;22818:19;22829:7;22818:10;:19::i;:::-;-1:-1:-1;22793:44:0;;-1:-1:-1;22852:14:0;;-1:-1:-1;;;;;22852:14:0;22754:246;22901:23;22932:19;22943:7;22932:10;:19::i;:::-;-1:-1:-1;22899:52:0;;-1:-1:-1;22966:22:0;;-1:-1:-1;;;;;22966:22:0;44335:326;6059:6;;-1:-1:-1;;;;;6059:6:0;309:10;6059:22;6051:67;;;;-1:-1:-1;;;6051:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;44478:22:0;;;::::1;;::::0;;;:12:::1;:22;::::0;;;;:39;;-1:-1:-1;;44478:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;44528:34:::1;::::0;::::1;:51:::0;44590:40:::1;;:63:::0;44335:326::o;41883:200::-;6059:6;;-1:-1:-1;;;;;6059:6:0;309:10;6059:22;6051:67;;;;-1:-1:-1;;;6051:67:0;;;;;;;:::i;:::-;41942:31:::1;41967:5;41942:24;:31::i;:::-;41994:1;41984:7;:11:::0;;;42006:13:::1;:17:::0;42049:26:::1;42034:12;:41:::0;41883:200::o;23276:335::-;6059:6;;-1:-1:-1;;;;;6059:6:0;309:10;6059:22;6051:67;;;;-1:-1:-1;;;6051:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23361:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;23360:21;23352:61;;;::::0;-1:-1:-1;;;23352:61:0;;11442:2:1;23352:61:0::1;::::0;::::1;11424:21:1::0;11481:2;11461:18;;;11454:30;11520:29;11500:18;;;11493:57;11567:18;;23352:61:0::1;11414:177:1::0;23352:61:0::1;-1:-1:-1::0;;;;;23427:16:0;::::1;23446:1;23427:16:::0;;;:7:::1;:16;::::0;;;;;:20;23424:108:::1;;-1:-1:-1::0;;;;;23503:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;23483:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;23464:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;23424:108:::1;-1:-1:-1::0;;;;;23542:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;23542:27:0::1;23565:4;23542:27:::0;;::::1;::::0;;;23580:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;23580:23:0::1;::::0;;::::1;::::0;;23276:335::o;40674:134::-;6059:6;;-1:-1:-1;;;;;6059:6:0;309:10;6059:22;6051:67;;;;-1:-1:-1;;;6051:67:0;;;;;;;:::i;:::-;40762:16:::1;:38:::0;40674:134::o;42434:637::-;42505:13;6059:6;;-1:-1:-1;;;;;6059:6:0;309:10;6059:22;6051:67;;;;-1:-1:-1;;;6051:67:0;;;;;;;:::i;:::-;42531:35:::1;42588:7;42531:65;;42643:16;-1:-1:-1::0;;;;;42643:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;42625:53:0::1;;42687:4;42694:16;-1:-1:-1::0;;;;;42694:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42625:93;::::0;-1:-1:-1;;;;;;42625:93:0::1;::::0;;;;;;-1:-1:-1;;;;;6325:15:1;;;42625:93:0::1;::::0;::::1;6307:34:1::0;6377:15;;6357:18;;;6350:43;6242:18;;42625:93:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42617:101:::0;-1:-1:-1;;;;;;42732:19:0;::::1;42729:203;;42828:16;-1:-1:-1::0;;;;;42828:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;42810:70:0::1;;42889:4;42896:16;-1:-1:-1::0;;;;;42896:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42810:110;::::0;-1:-1:-1;;;;;;42810:110:0::1;::::0;;;;;;-1:-1:-1;;;;;6325:15:1;;;42810:110:0::1;::::0;::::1;6307:34:1::0;6377:15;;6357:18;;;6350:43;6242:18;;42810:110:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42802:118;;42729:203;42942:13;:21:::0;;-1:-1:-1;;;;;42942:21:0;;::::1;-1:-1:-1::0;;;;;;42942:21:0;;::::1;;::::0;;;43029:15:::1;:34:::0;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;42958:5;42434:637;-1:-1:-1;42434:637:0:o;40359:175::-;6059:6;;-1:-1:-1;;;;;6059:6:0;309:10;6059:22;6051:67;;;;-1:-1:-1;;;6051:67:0;;;;;;;:::i;:::-;40455:11:::1;:24:::0;;;;40490:17:::1;:36:::0;40359:175::o;43527:139::-;6059:6;;-1:-1:-1;;;;;6059:6:0;309:10;6059:22;6051:67;;;;-1:-1:-1;;;6051:67:0;;;;;;;:::i;:::-;43592:21:::1;43632:7;5963::::0;5990:6;-1:-1:-1;;;;;5990:6:0;;5925:79;43632:7:::1;-1:-1:-1::0;;;;;43624:25:0::1;:34;43650:7;43624:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;20180:198:::0;-1:-1:-1;;;;;20270:20:0;;20246:7;20270:20;;;:11;:20;;;;;;;;20266:49;;;-1:-1:-1;;;;;;20299:16:0;;;;;:7;:16;;;;;;;20180:198::o;20266:49::-;-1:-1:-1;;;;;20353:16:0;;;;;;:7;:16;;;;;;20333:37;;:19;:37::i;6306:148::-;6059:6;;-1:-1:-1;;;;;6059:6:0;309:10;6059:22;6051:67;;;;-1:-1:-1;;;6051:67:0;;;;;;;:::i;:::-;6413:1:::1;6397:6:::0;;6376:40:::1;::::0;-1:-1:-1;;;;;6397:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;6376:40:0;6413:1;;6376:40:::1;6444:1;6427:19:::0;;-1:-1:-1;;;;;;6427:19:0::1;::::0;;6306:148::o;43188:327::-;43272:10;6059:6;;-1:-1:-1;;;;;6059:6:0;309:10;6059:22;6051:67;;;;-1:-1:-1;;;6051:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43302:23:0;::::1;43320:4;43302:23;;43294:71;;;::::0;-1:-1:-1;;;43294:71:0;;9461:2:1;43294:71:0::1;::::0;::::1;9443:21:1::0;9500:2;9480:18;;;9473:30;9539:34;9519:18;;;9512:62;-1:-1:-1;;;9590:18:1;;;9583:33;9633:19;;43294:71:0::1;9433:225:1::0;43294:71:0::1;43403:39;::::0;-1:-1:-1;;;43403:39:0;;43436:4:::1;43403:39;::::0;::::1;5809:51:1::0;43376:24:0::1;::::0;-1:-1:-1;;;;;43403:24:0;::::1;::::0;::::1;::::0;5782:18:1;;43403:39:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43461:46;::::0;-1:-1:-1;;;43461:46:0;;-1:-1:-1;;;;;6596:32:1;;;43461:46:0::1;::::0;::::1;6578:51:1::0;6645:18;;;6638:34;;;43376:66:0;;-1:-1:-1;43461:23:0;;::::1;::::0;::::1;::::0;6551:18:1;;43461:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43453:54:::0;43188:327;-1:-1:-1;;;;43188:327:0:o;40546:120::-;6059:6;;-1:-1:-1;;;;;6059:6:0;309:10;6059:22;6051:67;;;;-1:-1:-1;;;6051:67:0;;;;;;;:::i;:::-;40630:13:::1;:28:::0;40546:120::o;41225:139::-;6059:6;;-1:-1:-1;;;;;6059:6:0;309:10;6059:22;6051:67;;;;-1:-1:-1;;;6051:67:0;;;;;;;:::i;:::-;41311:16:::1;:45:::0;;-1:-1:-1;;;;;;41311:45:0::1;-1:-1:-1::0;;;;;41311:45:0;;;::::1;::::0;;;::::1;::::0;;41225:139::o;19891:87::-;19930:13;19963:7;19956:14;;;;;:::i;6712:187::-;6183:42;309:10;6183:58;6175:103;;;;-1:-1:-1;;;6175:103:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6798:22:0;::::1;6790:73;;;;-1:-1:-1::0;;;6790:73:0::1;;;;;;;:::i;:::-;6874:6;:17:::0;;-1:-1:-1;;;;;;6874:17:0::1;-1:-1:-1::0;;;;;6874:17:0;;;::::1;::::0;;;::::1;::::0;;6712:187::o;39332:117::-;39413:20;;39386:7;;39413:28;;39438:2;39413:24;:28::i;21428:269::-;21521:4;21538:129;309:10;21561:7;21570:96;21609:15;21570:96;;;;;;;;;;;;;;;;;309:10;21570:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;21570:34:0;;;;;;;;;;;;:38;:96::i;7345:305::-;7397:14;;-1:-1:-1;;;;;7397:14:0;7415:10;7397:28;7389:76;;;;-1:-1:-1;;;7389:76:0;;16083:2:1;7389:76:0;;;16065:21:1;16122:2;16102:18;;;16095:30;16161:34;16141:18;;;16134:62;-1:-1:-1;;;16212:18:1;;;16205:33;16255:19;;7389:76:0;16055:225:1;7389:76:0;7502:9;;7484:15;:27;7476:72;;;;-1:-1:-1;;;7476:72:0;;15310:2:1;7476:72:0;;;15292:21:1;15349:2;15329:18;;;15322:30;15388:33;15368:18;;;15361:61;15439:18;;7476:72:0;15282:181:1;7476:72:0;7593:14;;;7585:6;;7564:44;;-1:-1:-1;;;;;7593:14:0;;;;7585:6;;;;-1:-1:-1;;;;;;;;;;;7564:44:0;;7628:14;;;7619:23;;-1:-1:-1;;;;;;7619:23:0;-1:-1:-1;;;;;7628:14:0;;;7619:23;;;;;;7345:305::o;20386:167::-;20464:4;20481:42;309:10;20505:9;20516:6;20481:9;:42::i;39457:135::-;6059:6;;-1:-1:-1;;;;;6059:6:0;309:10;6059:22;6051:67;;;;-1:-1:-1;;;6051:67:0;;;;;;;:::i;:::-;39562:22:::1;:10:::0;39575:9:::1;39562:22;:::i;:::-;39539:20;:45:::0;-1:-1:-1;39457:135:0:o;44000:323::-;6059:6;;-1:-1:-1;;;;;6059:6:0;309:10;6059:22;6051:67;;;;-1:-1:-1;;;6051:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;44142:22:0;;;::::1;;::::0;;;:12:::1;:22;::::0;;;;:39;;-1:-1:-1;;44142:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;44192:33:::1;::::0;::::1;:50:::0;44253:39:::1;;:62:::0;44000:323::o;40937:110::-;6059:6;;-1:-1:-1;;;;;6059:6:0;309:10;6059:22;6051:67;;;;-1:-1:-1;;;6051:67:0;;;;;;;:::i;:::-;41013:16:::1;:26:::0;40937:110::o;41055:162::-;6059:6;;-1:-1:-1;;;;;6059:6:0;309:10;6059:22;6051:67;;;;-1:-1:-1;;;6051:67:0;;;;;;;:::i;:::-;41159:23:::1;:50:::0;41055:162::o;39924:130::-;6059:6;;-1:-1:-1;;;;;6059:6:0;309:10;6059:22;6051:67;;;;-1:-1:-1;;;6051:67:0;;;;;;;:::i;:::-;40024:22:::1;:10:::0;40037:9:::1;40024:22;:::i;:::-;39998:23;:48:::0;-1:-1:-1;39924:130:0:o;41372:171::-;6059:6;;-1:-1:-1;;;;;6059:6:0;309:10;6059:22;6051:67;;;;-1:-1:-1;;;6051:67:0;;;;;;;:::i;:::-;41449:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;41449:32:0::1;-1:-1:-1::0;;;;41449:32:0;;::::1;;::::0;;41497:38:::1;::::0;::::1;::::0;::::1;::::0;41473:8;6848:14:1;6841:22;6823:41;;6811:2;6796:18;;6778:92;43674:314:0;6059:6;;-1:-1:-1;;;;;6059:6:0;309:10;6059:22;6051:67;;;;-1:-1:-1;;;6051:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43813:22:0;;;::::1;;::::0;;;:12:::1;:22;::::0;;;;:39;;-1:-1:-1;;43813:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;43863:30:0;::::1;:47:::0;43921:36:::1;;:59:::0;43674:314::o;7107:226::-;6059:6;;-1:-1:-1;;;;;6059:6:0;309:10;6059:22;6051:67;;;;-1:-1:-1;;;6051:67:0;;;;;;;:::i;:::-;7188:6:::1;::::0;;;7171:23;;-1:-1:-1;;;;;;7171:23:0;;::::1;-1:-1:-1::0;;;;;7188:6:0;::::1;7171:23;::::0;;;7205:19:::1;::::0;;7247:22:::1;7265:4:::0;7247:15:::1;:22;:::i;:::-;7235:9;:34:::0;7322:1:::1;7306:6:::0;;7285:40:::1;::::0;-1:-1:-1;;;;;7306:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;7285:40:0;7322:1;;7285:40:::1;7107:226:::0;:::o;41713:158::-;6059:6;;-1:-1:-1;;;;;6059:6:0;309:10;6059:22;6051:67;;;;-1:-1:-1;;;6051:67:0;;;;;;;:::i;:::-;41787:14:::1;:25:::0;;-1:-1:-1;;41787:25:0::1;::::0;::::1;;::::0;;::::1;::::0;;;41828:35:::1;::::0;6823:41:1;;;41828:35:0::1;::::0;6811:2:1;6796:18;41828:35:0::1;6778:92:1::0;39211:113:0;6059:6;;-1:-1:-1;;;;;6059:6:0;309:10;6059:22;6051:67;;;;-1:-1:-1;;;6051:67:0;;;;;;;:::i;:::-;39288:15:::1;:28:::0;39211:113::o;37898:110::-;6059:6;;-1:-1:-1;;;;;6059:6:0;309:10;6059:22;6051:67;;;;-1:-1:-1;;;6051:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37965:27:0::1;37995:5;37965:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;37965:35:0::1;::::0;;37898:110::o;40816:109::-;6059:6;;-1:-1:-1;;;;;6059:6:0;309:10;6059:22;6051:67;;;;-1:-1:-1;;;6051:67:0;;;;;;;:::i;:::-;40891:12:::1;:26:::0;40816:109::o;6462:244::-;6059:6;;-1:-1:-1;;;;;6059:6:0;309:10;6059:22;6051:67;;;;-1:-1:-1;;;6051:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6551:22:0;::::1;6543:73;;;;-1:-1:-1::0;;;6543:73:0::1;;;;;;;:::i;:::-;6653:6;::::0;;6632:38:::1;::::0;-1:-1:-1;;;;;6632:38:0;;::::1;::::0;6653:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;6632:38:0;::::1;6681:6;:17:::0;;-1:-1:-1;;;;;;6681:17:0::1;-1:-1:-1::0;;;;;6681:17:0;;;::::1;::::0;;;::::1;::::0;;6462:244::o;40180:168::-;6059:6;;-1:-1:-1;;;;;6059:6:0;309:10;6059:22;6051:67;;;;-1:-1:-1;;;6051:67:0;;;;;;;:::i;:::-;40273:10:::1;:22:::0;;;;40306:16:::1;:34:::0;40180:168::o;24102:337::-;-1:-1:-1;;;;;24195:19:0;;24187:68;;;;-1:-1:-1;;;24187:68:0;;14905:2:1;24187:68:0;;;14887:21:1;14944:2;14924:18;;;14917:30;14983:34;14963:18;;;14956:62;-1:-1:-1;;;15034:18:1;;;15027:34;15078:19;;24187:68:0;14877:226:1;24187:68:0;-1:-1:-1;;;;;24274:21:0;;24266:68;;;;-1:-1:-1;;;24266:68:0;;10683:2:1;24266:68:0;;;10665:21:1;10722:2;10702:18;;;10695:30;10761:34;10741:18;;;10734:62;-1:-1:-1;;;10812:18:1;;;10805:32;10854:19;;24266:68:0;10655:224:1;24266:68:0;-1:-1:-1;;;;;24347:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;24399:32;;16431:25:1;;;24399:32:0;;16404:18:1;24399:32:0;;;;;;;24102:337;;;:::o;2084:132::-;2142:7;2169:39;2173:1;2176;2169:39;;;;;;;;;;;;;;;;;:3;:39::i;24447:4585::-;-1:-1:-1;;;;;24569:18:0;;24561:68;;;;-1:-1:-1;;;24561:68:0;;14499:2:1;24561:68:0;;;14481:21:1;14538:2;14518:18;;;14511:30;14577:34;14557:18;;;14550:62;-1:-1:-1;;;14628:18:1;;;14621:35;14673:19;;24561:68:0;14471:227:1;24561:68:0;-1:-1:-1;;;;;24648:16:0;;24640:64;;;;-1:-1:-1;;;24640:64:0;;9057:2:1;24640:64:0;;;9039:21:1;9096:2;9076:18;;;9069:30;9135:34;9115:18;;;9108:62;-1:-1:-1;;;9186:18:1;;;9179:33;9229:19;;24640:64:0;9029:225:1;24640:64:0;24732:1;24723:6;:10;24715:64;;;;-1:-1:-1;;;24715:64:0;;13682:2:1;24715:64:0;;;13664:21:1;13721:2;13701:18;;;13694:30;13760:34;13740:18;;;13733:62;-1:-1:-1;;;13811:18:1;;;13804:39;13860:19;;24715:64:0;13654:231:1;24715:64:0;5963:7;5990:6;-1:-1:-1;;;;;24793:15:0;;;5990:6;;24793:15;;;;:32;;-1:-1:-1;5963:7:0;5990:6;-1:-1:-1;;;;;24812:13:0;;;5990:6;;24812:13;;24793:32;24790:139;;;24860:12;;24850:6;:22;;24842:75;;;;-1:-1:-1;;;24842:75:0;;12510:2:1;24842:75:0;;;12492:21:1;12549:2;12529:18;;;12522:30;12588:34;12568:18;;;12561:62;-1:-1:-1;;;12639:18:1;;;12632:38;12687:19;;24842:75:0;12482:230:1;24842:75:0;24941:28;24972:24;24990:4;24972:9;:24::i;:::-;25062:23;;25112:13;;24941:55;;-1:-1:-1;25038:47:0;;;;-1:-1:-1;;;;;25106:19:0;;;25112:13;;25106:19;:51;;;;-1:-1:-1;25139:13:0;;25156:1;;25129:24;;-1:-1:-1;;;;;25139:13:0;25129:9;:24::i;:::-;:28;25106:51;25102:278;;;-1:-1:-1;;;;;;;;;;;;;;25240:15:0;25221:34;;25294:25;25312:6;25294:17;:25::i;:::-;25270:21;;;;:49;;;25336:32;;;;;;;-1:-1:-1;25336:32:0;;;;;;;;;;;;;;;;;;;;;25102:278;25433:16;;-1:-1:-1;;;25433:16:0;;;;25432:17;:42;;;;-1:-1:-1;25453:21:0;;-1:-1:-1;;;25453:21:0;;;;25432:42;:74;;;;-1:-1:-1;25488:13:0;;25505:1;;25478:24;;-1:-1:-1;;;;;25488:13:0;25478:9;:24::i;:::-;:28;25432:74;25428:1934;;;25533:13;;-1:-1:-1;;;;;25527:19:0;;;25533:13;;25527:19;25523:1814;;;25571:23;:89;;;;;25645:15;25618:23;;25598:17;;:43;;;;:::i;:::-;:62;;25571:89;25567:301;;;25705:15;25685:17;:35;25766:23;;;-1:-1:-1;25812:32:0;25766:23;25812:10;:32::i;:::-;25894:14;;-1:-1:-1;;;25894:14:0;;;;25890:1432;;;26038:16;;26083:14;;25953:21;;26038:16;26083:14;;26079:840;;;26128:20;26179:17;26217:20;;26199:15;:38;;;;:::i;:::-;26179:58;;26264:11;26313:6;26308:354;26329:14;:21;26325:25;;26308:354;;;26449:9;26423:14;26438:1;26423:17;;;;;;-1:-1:-1;;;26423:17:0;;;;;;;;;;;;;;;;;;;:22;;;:35;26419:216;;26510:45;26527:14;26542:1;26527:17;;;;;;-1:-1:-1;;;26527:17:0;;;;;;;;;;;;;;;;;;;:27;;;26510:12;:16;;:45;;;;:::i;:::-;26495:60;-1:-1:-1;26596:7:0;:3;26602:1;26596:7;:::i;:::-;26590:13;;26419:216;26352:4;;;;:::i;:::-;;;;26308:354;;;;26700:1;26694:3;:7;:30;;;;;26723:1;26705:15;;:19;26694:30;26690:152;;;26798:15;;26772:42;;:21;:12;26789:3;26772:16;:21::i;:::-;:25;;:42::i;:::-;26757:57;;26690:152;26870:25;:23;:25::i;:::-;26079:840;;;;26943:20;26966:44;27006:3;26966:35;26983:17;;26966:12;:16;;:35;;;;:::i;:44::-;26943:67;-1:-1:-1;27035:17:0;27145:27;26943:67;27145:12;:27;:::i;:::-;:31;;27175:1;27145:31;:::i;:::-;27088:51;;;27105:15;27088:51;;;5568:19:1;27122:16:0;5603:12:1;;;5596:28;;;;5640:12;;27088:51:0;;;;;;;;;;;;27078:62;;;;;;27070:71;;:107;;;;:::i;:::-;27055:122;;:12;:122;:::i;:::-;27035:142;;27216:9;27206:7;:19;27202:100;;;27254:24;27268:9;27254:13;:24::i;:::-;25890:1432;;;;;-1:-1:-1;;;;;27502:24:0;;27374:12;27502:24;;;:18;:24;;;;;;27389:4;;27502:24;;;:50;;-1:-1:-1;;;;;;27530:22:0;;;;;;:18;:22;;;;;;;;27502:50;27499:1467;;;-1:-1:-1;27578:5:0;27499:1467;;;27655:13;;-1:-1:-1;;;;;27647:21:0;;;27655:13;;27647:21;27644:164;;;27688:14;:12;:14::i;:::-;27731:10;;27721:7;:20;27776:16;;27760:13;:32;27644:164;27852:13;;-1:-1:-1;;;;;27846:19:0;;;27852:13;;27846:19;27843:164;;;27885:14;:12;:14::i;:::-;27928:11;;27918:7;:21;27974:17;;27958:13;:33;27843:164;-1:-1:-1;;;;;28089:18:0;;;;;;:12;:18;;;;;:25;;;28086:869;;;28134:14;:12;:14::i;:::-;-1:-1:-1;;;;;28177:18:0;;;;;;;:12;:18;;;;;:26;;;;28167:7;:36;28238:32;;;28222:13;:48;28341:13;;28335:19;;;28341:13;;28335:19;28332:181;;;-1:-1:-1;;;;;28388:18:0;;;;;;:12;:18;;;;;:30;;;;28378:7;:40;28457:36;;;28441:13;:52;28332:181;28086:869;;;-1:-1:-1;;;;;28621:16:0;;;;;;:12;:16;;;;;:23;;;28618:322;;;28695:14;:12;:14::i;:::-;28743:13;;-1:-1:-1;;;;;28735:21:0;;;28743:13;;28735:21;28732:189;;;-1:-1:-1;;;;;28794:16:0;;;;;;:12;:16;;;;;:27;;;;28784:7;:37;28864:33;;;28848:13;:49;28732:189;28986:38;29001:4;29006:2;29009:6;29016:7;28986:14;:38::i;:::-;24447:4585;;;;;;:::o;1624:192::-;1710:7;1746:12;1738:6;;;;1730:29;;;;-1:-1:-1;;;1730:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1770:9:0;1782:5;1786:1;1782;:5;:::i;:::-;1770:17;1624:192;-1:-1:-1;;;;;1624:192:0:o;35790:163::-;35831:7;35852:15;35869;35888:19;:17;:19::i;:::-;35851:56;;-1:-1:-1;35851:56:0;-1:-1:-1;35925:20:0;35851:56;;35925:11;:20::i;:::-;35918:27;;;;35790:163;:::o;1291:181::-;1349:7;;1381:5;1385:1;1381;:5;:::i;:::-;1369:17;;1410:1;1405;:6;;1397:46;;;;-1:-1:-1;;;1397:46:0;;11086:2:1;1397:46:0;;;11068:21:1;11125:2;11105:18;;;11098:30;11164:29;11144:18;;;11137:57;11211:18;;1397:46:0;11058:177:1;34588:419:0;34647:7;34656;34665;34674;34683;34692;34713:23;34738:12;34752:18;34774:20;34786:7;34774:11;:20::i;:::-;34712:82;;;;;;34806:15;34823:23;34848:12;34864:50;34876:7;34885:4;34891:10;34903;:8;:10::i;:::-;34864:11;:50::i;:::-;34805:109;;;;-1:-1:-1;34805:109:0;;-1:-1:-1;34965:15:0;;-1:-1:-1;34982:4:0;;-1:-1:-1;34988:10:0;;-1:-1:-1;34588:419:0;;-1:-1:-1;;;;;34588:419:0:o;1480:136::-;1538:7;1565:43;1569:1;1572;1565:43;;;;;;;;;;;;;;;;;:3;:43::i;2224:278::-;2310:7;2345:12;2338:5;2330:28;;;;-1:-1:-1;;;2330:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2369:9:0;2381:5;2385:1;2381;:5;:::i;38018:331::-;38131:16;;;38145:1;38131:16;;;;;;;;38087:7;;;;38131:16;38145:1;38131:16;;;;;;;;;;-1:-1:-1;38131:16:0;38107:40;;38178:4;38160;38165:1;38160:7;;;;;;-1:-1:-1;;;38160:7:0;;;;;;;;;-1:-1:-1;;;;;38160:23:0;;;:7;;;;;;;;;;:23;;;;38204:15;;:22;;;-1:-1:-1;;;38204:22:0;;;;:15;;;;;:20;;:22;;;;;38160:7;;38204:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38194:4;38199:1;38194:7;;;;;;-1:-1:-1;;;38194:7:0;;;;;;;;;-1:-1:-1;;;;;38194:32:0;;;:7;;;;;;;;;:32;38263:15;;:48;;-1:-1:-1;;;38263:48:0;;38239:21;;38263:15;;;;;:29;;:48;;38293:11;;38306:4;;38263:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;38263:48:0;;;;;;;;;;;;:::i;:::-;38239:72;;38331:7;38339:1;38331:10;;;;;;-1:-1:-1;;;38331:10:0;;;;;;;;;;;;;;;38324:17;;;;38018:331;;;:::o;29040:412::-;18880:16;:23;;-1:-1:-1;;;;18880:23:0;-1:-1:-1;;;18880:23:0;;;29155:21:::1;18880:23:::0;29253:41:::1;:21;29155::::0;29253:25:::1;:41::i;:::-;29366:16;::::0;29407::::1;::::0;29224:70;;-1:-1:-1;29345:89:0::1;::::0;-1:-1:-1;;;;;29366:16:0;;::::1;::::0;29384:49:::1;::::0;29429:3:::1;::::0;29384:40:::1;::::0;29224:70;;29384:22:::1;:40::i;:49::-;29345:20;:89::i;:::-;-1:-1:-1::0;;18926:16:0;:24;;-1:-1:-1;;;;18926:24:0;;;-1:-1:-1;29040:412:0:o;38357:689::-;38411:9;38435:32;38488:27;;38470:15;:45;;;;:::i;:::-;38435:80;;38533:9;38528:327;38552:14;:21;38548:25;;38528:327;;;38628:24;38602:14;38617:1;38602:17;;;;;;-1:-1:-1;;;38602:17:0;;;;;;;;;;;;;;;;;;;:22;;;:50;38598:246;;38700:14;38715:1;38700:17;;;;;;-1:-1:-1;;;38700:17:0;;;;;;;;;;;;;;;;;;;:22;;;38675:14;38690:1;38675:17;;;;;;-1:-1:-1;;;38675:17:0;;;;;;;;;;;;;;;;;;;:22;;:47;;;;38771:14;38786:1;38771:17;;;;;;-1:-1:-1;;;38771:17:0;;;;;;;;;;;;;;;;;;;:27;;;38741:14;38756:1;38741:17;;;;;;-1:-1:-1;;;38741:17:0;;;;;;;;;;;;;;;;;;;:27;;:57;;;;38823:1;38827;38823:5;;;;:::i;:::-;38819:9;;38598:246;38575:4;;;;:::i;:::-;;;;38528:327;;;-1:-1:-1;38888:14:0;:21;38867:18;;38888:25;;38912:1;;38888:25;:::i;:::-;38867:46;;38931:9;38926:103;38950:10;38946:1;:14;38926:103;;;38997:14;:20;;;;;-1:-1:-1;;;38997:20:0;;;;;;;;;;;;;;;;;-1:-1:-1;;38997:20:0;;;;;;;;;;;;;;;38962:4;;;;:::i;:::-;;;;38926:103;;;;38357:689;;;:::o;1824:250::-;1882:7;1906:6;1902:47;;-1:-1:-1;1936:1:0;1929:8;;1902:47;1961:9;1973:5;1977:1;1973;:5;:::i;:::-;1961:17;-1:-1:-1;2006:1:0;1997:5;2001:1;1961:17;1997:5;:::i;:::-;:10;1989:56;;;;-1:-1:-1;;;1989:56:0;;12919:2:1;1989:56:0;;;12901:21:1;12958:2;12938:18;;;12931:30;12997:34;12977:18;;;12970:62;-1:-1:-1;;;13048:18:1;;;13041:31;13089:19;;1989:56:0;12891:223:1;29466:135:0;18880:16;:23;;-1:-1:-1;;;;18880:23:0;-1:-1:-1;;;18880:23:0;;;29537:10;;29533:61:::1;;29561:24;29578:6;29561:16;:24::i;:::-;-1:-1:-1::0;18926:16:0;:24;;-1:-1:-1;;;;18926:24:0;;;29466:135::o;37245:250::-;37291:7;;:12;:34;;;;-1:-1:-1;37307:13:0;;:18;37291:34;37288:46;;;37245:250::o;37288:46::-;37372:7;;;37354:15;:25;37414:13;;;37390:21;:37;-1:-1:-1;37448:11:0;;;;37470:17;37245:250::o;31402:704::-;31513:7;31509:40;;31535:14;:12;:14::i;:::-;-1:-1:-1;;;;;31574:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;31598:22:0;;;;;;:11;:22;;;;;;;;31597:23;31574:46;31570:467;;;31637:48;31659:6;31667:9;31678:6;31637:21;:48::i;:::-;31570:467;;;-1:-1:-1;;;;;31708:19:0;;;;;;:11;:19;;;;;;;;31707:20;:46;;;;-1:-1:-1;;;;;;31731:22:0;;;;;;:11;:22;;;;;;;;31707:46;31703:334;;;31770:46;31790:6;31798:9;31809:6;31770:19;:46::i;31703:334::-;-1:-1:-1;;;;;31838:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;31861:22:0;;;;;;:11;:22;;;;;;;;31838:45;31834:203;;;31900:48;31922:6;31930:9;31941:6;31900:21;:48::i;31834:203::-;31981:44;31999:6;32007:9;32018:6;31981:17;:44::i;:::-;32061:7;32057:41;;32083:15;37561;;37551:7;:25;37603:21;;37587:13;:37;37507:125;35961:561;36058:7;;36094;;36011;;;;;36118:289;36142:9;:16;36138:20;;36118:289;;;36208:7;36184;:21;36192:9;36202:1;36192:12;;;;;;-1:-1:-1;;;36192:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36192:12:0;36184:21;;;;;;;;;;;;;:31;;:66;;;36243:7;36219;:21;36227:9;36237:1;36227:12;;;;;;-1:-1:-1;;;36227:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36227:12:0;36219:21;;;;;;;;;;;;;:31;36184:66;36180:97;;;36260:7;;36269;;36252:25;;;;;;;35961:561;;:::o;36180:97::-;36302:34;36314:7;:21;36322:9;36332:1;36322:12;;;;;;-1:-1:-1;;;36322:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36322:12:0;36314:21;;;;;;;;;;;;;36302:7;;:11;:34::i;:::-;36292:44;;36361:34;36373:7;:21;36381:9;36391:1;36381:12;;;;;;-1:-1:-1;;;36381:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36381:12:0;36373:21;;;;;;;;;;;;;36361:7;;:11;:34::i;:::-;36351:44;-1:-1:-1;36160:3:0;;;;:::i;:::-;;;;36118:289;;;-1:-1:-1;36443:7:0;;36431;;:20;;:11;:20::i;:::-;36421:7;:30;36417:61;;;36461:7;;36470;;36453:25;;;;;;35961:561;;:::o;36417:61::-;36497:7;;36506;;-1:-1:-1;35961:561:0;-1:-1:-1;35961:561:0:o;35015:330::-;35075:7;35084;35093;35113:12;35128:24;35144:7;35128:15;:24::i;:::-;35113:39;;35163:18;35184:30;35206:7;35184:21;:30::i;:::-;35163:51;-1:-1:-1;35225:23:0;35251:33;35163:51;35251:17;:7;35263:4;35251:11;:17::i;:::-;:21;;:33::i;:::-;35225:59;35320:4;;-1:-1:-1;35326:10:0;;-1:-1:-1;35015:330:0;;-1:-1:-1;;;35015:330:0:o;35353:429::-;35468:7;;;;35524:24;:7;35536:11;35524;:24::i;:::-;35506:42;-1:-1:-1;35559:12:0;35574:21;:4;35583:11;35574:8;:21::i;:::-;35559:36;-1:-1:-1;35606:18:0;35627:27;:10;35642:11;35627:14;:27::i;:::-;35606:48;-1:-1:-1;35665:23:0;35691:33;35606:48;35691:17;:7;35703:4;35691:11;:17::i;:33::-;35743:7;;;;-1:-1:-1;35769:4:0;;-1:-1:-1;35353:429:0;;-1:-1:-1;;;;;;;35353:429:0:o;42300:126::-;42392:26;;-1:-1:-1;;;;;42392:18:0;;;:26;;;;;42411:6;;42392:26;;;;42411:6;42392:18;:26;;;;;;;;;;;;;;;;;;;;;42300:126;;:::o;30291:578::-;30436:16;;;30450:1;30436:16;;;;;;;;30412:21;;30436:16;;;;;;;;-1:-1:-1;;30473:15:0;;:22;;;-1:-1:-1;;;30473:22:0;;;;30412:40;;-1:-1:-1;;;;;;30473:15:0;;;;:20;;-1:-1:-1;30473:22:0;;;;;;;;;;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30463:4;30468:1;30463:7;;;;;;-1:-1:-1;;;30463:7:0;;;;;;;;;;;;;;:32;-1:-1:-1;;;;;30463:32:0;;;-1:-1:-1;;;;;30463:32:0;;;;;30524:4;30506;30511:1;30506:7;;;;;;-1:-1:-1;;;30506:7:0;;;;;;;;;-1:-1:-1;;;;;30506:23:0;;;:7;;;;;;;;;:23;30566:15;;;:66;30640:6;30566:15;30709:4;30728:11;30770:24;:15;30790:3;30770:19;:24::i;:::-;30566:239;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30831:30;30848:6;30856:4;30831:30;;;;;;;:::i;:::-;;;;;;;;30291:578;;:::o;33215:563::-;33318:15;33335:23;33360:12;33374:23;33399:12;33413:18;33435:19;33446:7;33435:10;:19::i;:::-;-1:-1:-1;;;;;33480:15:0;;;;;;:7;:15;;;;;;33317:137;;-1:-1:-1;33317:137:0;;-1:-1:-1;33317:137:0;;-1:-1:-1;33317:137:0;-1:-1:-1;33317:137:0;-1:-1:-1;33317:137:0;-1:-1:-1;33480:28:0;;33500:7;33480:19;:28::i;:::-;-1:-1:-1;;;;;33462:15:0;;;;;;:7;:15;;;;;;;;:46;;;;33537:7;:15;;;;:28;;33557:7;33537:19;:28::i;:::-;-1:-1:-1;;;;;33519:15:0;;;;;;;:7;:15;;;;;;:46;;;;33597:18;;;;;;;:39;;33620:15;33597:22;:39::i;:::-;-1:-1:-1;;;;;33576:18:0;;;;;;:7;:18;;;;;:60;33650:26;33665:10;33650:14;:26::i;:::-;33687:23;33699:4;33705;33687:11;:23::i;:::-;33743:9;-1:-1:-1;;;;;33726:44:0;33735:6;-1:-1:-1;;;;;33726:44:0;;33754:15;33726:44;;;;16431:25:1;;16419:2;16404:18;;16386:76;33726:44:0;;;;;;;;33215:563;;;;;;;;;:::o;32624:583::-;32725:15;32742:23;32767:12;32781:23;32806:12;32820:18;32842:19;32853:7;32842:10;:19::i;:::-;-1:-1:-1;;;;;32887:15:0;;;;;;:7;:15;;;;;;32724:137;;-1:-1:-1;32724:137:0;;-1:-1:-1;32724:137:0;;-1:-1:-1;32724:137:0;-1:-1:-1;32724:137:0;-1:-1:-1;32724:137:0;-1:-1:-1;32887:28:0;;32724:137;32887:19;:28::i;:::-;-1:-1:-1;;;;;32869:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;32947:18;;;;;:7;:18;;;;;:39;;32970:15;32947:22;:39::i;:::-;-1:-1:-1;;;;;32926:18:0;;;;;;:7;:18;;;;;;;;:60;;;;33018:7;:18;;;;:39;;33041:15;33018:22;:39::i;33786:639::-;33889:15;33906:23;33931:12;33945:23;33970:12;33984:18;34006:19;34017:7;34006:10;:19::i;:::-;-1:-1:-1;;;;;34051:15:0;;;;;;:7;:15;;;;;;33888:137;;-1:-1:-1;33888:137:0;;-1:-1:-1;33888:137:0;;-1:-1:-1;33888:137:0;-1:-1:-1;33888:137:0;-1:-1:-1;33888:137:0;-1:-1:-1;34051:28:0;;34071:7;34051:19;:28::i;:::-;-1:-1:-1;;;;;34033:15:0;;;;;;:7;:15;;;;;;;;:46;;;;34108:7;:15;;;;:28;;34128:7;34108:19;:28::i;32114:502::-;32213:15;32230:23;32255:12;32269:23;32294:12;32308:18;32330:19;32341:7;32330:10;:19::i;:::-;-1:-1:-1;;;;;32378:15:0;;;;;;:7;:15;;;;;;32212:137;;-1:-1:-1;32212:137:0;;-1:-1:-1;32212:137:0;;-1:-1:-1;32212:137:0;-1:-1:-1;32212:137:0;-1:-1:-1;32212:137:0;-1:-1:-1;32378:28:0;;32212:137;32378:19;:28::i;36901:154::-;36965:7;36992:55;37031:5;36992:20;37004:7;;36992;:11;;:20;;;;:::i;37067:166::-;37137:7;37164:61;37209:5;37164:26;37176:13;;37164:7;:11;;:26;;;;:::i;36534:355::-;36597:19;36620:10;:8;:10::i;:::-;36597:33;-1:-1:-1;36641:18:0;36662:27;:10;36597:33;36662:14;:27::i;:::-;36741:4;36725:22;;;;:7;:22;;;;;;36641:48;;-1:-1:-1;36725:38:0;;36641:48;36725:26;:38::i;:::-;36716:4;36700:22;;;;:7;:22;;;;;;;;:63;;;;36777:11;:26;;;;;;36774:107;;;36859:4;36843:22;;;;:7;:22;;;;;;:38;;36870:10;36843:26;:38::i;:::-;36834:4;36818:22;;;;:7;:22;;;;;:63;36534:355;;;:::o;34433:147::-;34511:7;;:17;;34523:4;34511:11;:17::i;:::-;34501:7;:27;34552:10;;:20;;34567:4;34552:14;:20::i;:::-;34539:10;:33;-1:-1:-1;;34433:147:0:o;14:257:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:2;;;147:6;139;132:22;94:2;191:9;178:23;210:31;235:5;210:31;:::i;276:261::-;346:6;399:2;387:9;378:7;374:23;370:32;367:2;;;420:6;412;405:22;367:2;457:9;451:16;476:31;501:5;476:31;:::i;542:398::-;610:6;618;671:2;659:9;650:7;646:23;642:32;639:2;;;692:6;684;677:22;639:2;736:9;723:23;755:31;780:5;755:31;:::i;:::-;805:5;-1:-1:-1;862:2:1;847:18;;834:32;875:33;834:32;875:33;:::i;:::-;927:7;917:17;;;629:311;;;;;:::o;945:466::-;1022:6;1030;1038;1091:2;1079:9;1070:7;1066:23;1062:32;1059:2;;;1112:6;1104;1097:22;1059:2;1156:9;1143:23;1175:31;1200:5;1175:31;:::i;:::-;1225:5;-1:-1:-1;1282:2:1;1267:18;;1254:32;1295:33;1254:32;1295:33;:::i;:::-;1049:362;;1347:7;;-1:-1:-1;;;1401:2:1;1386:18;;;;1373:32;;1049:362::o;1416:529::-;1499:6;1507;1515;1523;1576:3;1564:9;1555:7;1551:23;1547:33;1544:2;;;1598:6;1590;1583:22;1544:2;1642:9;1629:23;1661:31;1686:5;1661:31;:::i;:::-;1711:5;-1:-1:-1;1768:2:1;1753:18;;1740:32;1781:30;1740:32;1781:30;:::i;:::-;1534:411;;1830:7;;-1:-1:-1;;;;1884:2:1;1869:18;;1856:32;;1935:2;1920:18;1907:32;;1534:411::o;1950:325::-;2018:6;2026;2079:2;2067:9;2058:7;2054:23;2050:32;2047:2;;;2100:6;2092;2085:22;2047:2;2144:9;2131:23;2163:31;2188:5;2163:31;:::i;:::-;2213:5;2265:2;2250:18;;;;2237:32;;-1:-1:-1;;;2037:238:1:o;2280:1161::-;2375:6;2406:2;2449;2437:9;2428:7;2424:23;2420:32;2417:2;;;2470:6;2462;2455:22;2417:2;2508:9;2502:16;2537:18;2578:2;2570:6;2567:14;2564:2;;;2599:6;2591;2584:22;2564:2;2642:6;2631:9;2627:22;2617:32;;2687:7;2680:4;2676:2;2672:13;2668:27;2658:2;;2714:6;2706;2699:22;2658:2;2748;2742:9;2770:2;2766;2763:10;2760:2;;;2776:18;;:::i;:::-;2822:2;2819:1;2815:10;2854:2;2848:9;2917:2;2913:7;2908:2;2904;2900:11;2896:25;2888:6;2884:38;2972:6;2960:10;2957:22;2952:2;2940:10;2937:18;2934:46;2931:2;;;2983:18;;:::i;:::-;3019:2;3012:22;3069:18;;;3103:15;;;;-1:-1:-1;3138:11:1;;;3168;;;3164:20;;3161:33;-1:-1:-1;3158:2:1;;;3212:6;3204;3197:22;3158:2;3239:6;3230:15;;3254:156;3268:2;3265:1;3262:9;3254:156;;;3325:10;;3313:23;;3286:1;3279:9;;;;;3356:12;;;;3388;;3254:156;;;-1:-1:-1;3429:6:1;2386:1055;-1:-1:-1;;;;;;;;2386:1055:1:o;3446:251::-;3502:6;3555:2;3543:9;3534:7;3530:23;3526:32;3523:2;;;3576:6;3568;3561:22;3523:2;3620:9;3607:23;3639:28;3661:5;3639:28;:::i;3702:255::-;3769:6;3822:2;3810:9;3801:7;3797:23;3793:32;3790:2;;;3843:6;3835;3828:22;3790:2;3880:9;3874:16;3899:28;3921:5;3899:28;:::i;3962:190::-;4021:6;4074:2;4062:9;4053:7;4049:23;4045:32;4042:2;;;4095:6;4087;4080:22;4042:2;-1:-1:-1;4123:23:1;;4032:120;-1:-1:-1;4032:120:1:o;4157:194::-;4227:6;4280:2;4268:9;4259:7;4255:23;4251:32;4248:2;;;4301:6;4293;4286:22;4248:2;-1:-1:-1;4329:16:1;;4238:113;-1:-1:-1;4238:113:1:o;4356:319::-;4421:6;4429;4482:2;4470:9;4461:7;4457:23;4453:32;4450:2;;;4503:6;4495;4488:22;4450:2;4544:9;4531:23;4521:33;;4604:2;4593:9;4589:18;4576:32;4617:28;4639:5;4617:28;:::i;4680:258::-;4748:6;4756;4809:2;4797:9;4788:7;4784:23;4780:32;4777:2;;;4830:6;4822;4815:22;4777:2;-1:-1:-1;;4858:23:1;;;4928:2;4913:18;;;4900:32;;-1:-1:-1;4767:171:1:o;4943:463::-;4996:3;5034:5;5028:12;5061:6;5056:3;5049:19;5087:4;5116:2;5111:3;5107:12;5100:19;;5153:2;5146:5;5142:14;5174:3;5186:195;5200:6;5197:1;5194:13;5186:195;;;5265:13;;-1:-1:-1;;;;;5261:39:1;5249:52;;5321:12;;;;5356:15;;;;5297:1;5215:9;5186:195;;;-1:-1:-1;5397:3:1;;5004:402;-1:-1:-1;;;;;5004:402:1:o;7732:510::-;8003:6;7992:9;7985:25;8046:3;8041:2;8030:9;8026:18;8019:31;7966:4;8067:57;8119:3;8108:9;8104:19;8096:6;8067:57;:::i;:::-;-1:-1:-1;;;;;8160:32:1;;;;8155:2;8140:18;;8133:60;-1:-1:-1;8224:2:1;8209:18;8202:34;8059:65;7975:267;-1:-1:-1;;7975:267:1:o;8247:603::-;8359:4;8388:2;8417;8406:9;8399:21;8449:6;8443:13;8492:6;8487:2;8476:9;8472:18;8465:34;8517:4;8530:140;8544:6;8541:1;8538:13;8530:140;;;8639:14;;;8635:23;;8629:30;8605:17;;;8624:2;8601:26;8594:66;8559:10;;8530:140;;;8688:6;8685:1;8682:13;8679:2;;;8758:4;8753:2;8744:6;8733:9;8729:22;8725:31;8718:45;8679:2;-1:-1:-1;8834:2:1;8813:15;-1:-1:-1;;8809:29:1;8794:45;;;;8841:2;8790:54;;8368:482;-1:-1:-1;;;8368:482:1:o;10074:402::-;10276:2;10258:21;;;10315:2;10295:18;;;10288:30;10354:34;10349:2;10334:18;;10327:62;-1:-1:-1;;;10420:2:1;10405:18;;10398:36;10466:3;10451:19;;10248:228::o;13119:356::-;13321:2;13303:21;;;13340:18;;;13333:30;13399:34;13394:2;13379:18;;13372:62;13466:2;13451:18;;13293:182::o;16467:332::-;16674:6;16663:9;16656:25;16717:2;16712;16701:9;16697:18;16690:30;16637:4;16737:56;16789:2;16778:9;16774:18;16766:6;16737:56;:::i;17246:128::-;17286:3;17317:1;17313:6;17310:1;17307:13;17304:2;;;17323:18;;:::i;:::-;-1:-1:-1;17359:9:1;;17294:80::o;17379:120::-;17419:1;17445;17435:2;;17450:18;;:::i;:::-;-1:-1:-1;17484:9:1;;17425:74::o;17504:168::-;17544:7;17610:1;17606;17602:6;17598:14;17595:1;17592:21;17587:1;17580:9;17573:17;17569:45;17566:2;;;17617:18;;:::i;:::-;-1:-1:-1;17657:9:1;;17556:116::o;17677:125::-;17717:4;17745:1;17742;17739:8;17736:2;;;17750:18;;:::i;:::-;-1:-1:-1;17787:9:1;;17726:76::o;17807:380::-;17886:1;17882:12;;;;17929;;;17950:2;;18004:4;17996:6;17992:17;17982:27;;17950:2;18057;18049:6;18046:14;18026:18;18023:38;18020:2;;;18103:10;18098:3;18094:20;18091:1;18084:31;18138:4;18135:1;18128:15;18166:4;18163:1;18156:15;18020:2;;17862:325;;;:::o;18192:135::-;18231:3;-1:-1:-1;;18252:17:1;;18249:2;;;18272:18;;:::i;:::-;-1:-1:-1;18319:1:1;18308:13;;18239:88::o;18332:112::-;18364:1;18390;18380:2;;18395:18;;:::i;:::-;-1:-1:-1;18429:9:1;;18370:74::o;18449:127::-;18510:10;18505:3;18501:20;18498:1;18491:31;18541:4;18538:1;18531:15;18565:4;18562:1;18555:15;18581:127;18642:10;18637:3;18633:20;18630:1;18623:31;18673:4;18670:1;18663:15;18697:4;18694:1;18687:15;18713:127;18774:10;18769:3;18765:20;18762:1;18755:31;18805:4;18802:1;18795:15;18829:4;18826:1;18819:15;18845:131;-1:-1:-1;;;;;18920:31:1;;18910:42;;18900:2;;18966:1;18963;18956:12;18900:2;18890:86;:::o;18981:118::-;19067:5;19060:13;19053:21;19046:5;19043:32;19033:2;;19089:1;19086;19079:12
Swarm Source
ipfs://2d8407f14238581307b30cbaa7c0fffd004d000bf8fa11272175c808c2d1c9d8
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.