ERC-20
Real Estate
Overview
Max Total Supply
1,000,000,000 BOXA
Holders
341 (0.00%)
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
194,526.661514708 BOXAValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
BOXA
Compiler Version
v0.8.15+commit.e14f2714
Contract Source Code (Solidity)Audit Report
/** *Submitted for verification at Etherscan.io on 2022-07-21 */ // SPDX-License-Identifier: MIT pragma solidity 0.8.15; 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 ); } interface IFactory { function createPair(address tokenA, address tokenB) external returns (address pair); function getPair(address tokenA, address tokenB) external view returns (address pair); } interface IRouter { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } 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) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 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) { uint256 size; assembly { size := extcodesize(account) } return size > 0; } function sendValue(address payable recipient, uint256 amount) internal { require( address(this).balance >= amount, "Address: insufficient balance" ); (bool success, ) = recipient.call{value: amount}(""); require( success, "Address: unable to send value, recipient may have reverted" ); } 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" ); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}( data ); return _verifyCallResult(success, returndata, errorMessage); } function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall( target, data, "Address: low-level static call failed" ); } function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall( target, data, "Address: low-level delegate call failed" ); } function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private pure returns (bytes memory) { if (success) { return returndata; } else { if (returndata.length > 0) { assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } contract BOXA is IERC20, Ownable { using Address for address; using SafeMath for uint256; IRouter public uniswapV2Router; address public immutable uniswapV2Pair; string private constant _name = "BOXA"; string private constant _symbol = "BOXA"; uint8 private constant _decimals = 9; mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; uint256 private constant MAX = ~uint256(0); uint256 private constant _tTotal = 1000000000 * 10**9; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; bool public isTradingEnabled; // max wallet is 1.0% of _tTotal uint256 public maxWalletAmount = _tTotal * 100 / 10000; // max buy and sell tx is 1.0% of _tTotal uint256 public maxTxAmount = _tTotal * 100 / 10000; bool private _swapping; uint256 public minimumTokensBeforeSwap = 25000000 * (10**9); address public liquidityWallet; address public marketingWallet; address public buyBackWallet; struct CustomTaxPeriod { bytes23 periodName; uint8 blocksInPeriod; uint256 timeInPeriod; uint8 liquidityFeeOnBuy; uint8 liquidityFeeOnSell; uint8 marketingFeeOnBuy; uint8 marketingFeeOnSell; uint8 buyBackFeeOnBuy; uint8 buyBackFeeOnSell; uint8 holdersFeeOnBuy; uint8 holdersFeeOnSell; } // Base taxes CustomTaxPeriod private _base = CustomTaxPeriod('base',0,0,3,3,4,4,3,3,1,1); uint256 private _launchStartTimestamp; uint256 private _launchBlockNumber; mapping (address => bool) private _isExcludedFromFee; mapping (address => bool) private _isExcludedFromMaxTransactionLimit; mapping (address => bool) private _isExcludedFromMaxWalletLimit; mapping (address => bool) private _isAllowedToTradeWhenDisabled; mapping (address => bool) private _isExcludedFromDividends; mapping (address => bool) private _feeOnSelectedWalletTransfers; address[] private _excludedFromDividends; mapping (address => bool) public automatedMarketMakerPairs; uint8 private _liquidityFee; uint8 private _marketingFee; uint8 private _buyBackFee; uint8 private _holdersFee; uint8 private _totalFee; event AutomatedMarketMakerPairChange(address indexed pair, bool indexed value); event UniswapV2RouterChange(address indexed newAddress, address indexed oldAddress); event WalletChange(string indexed walletIdentifier, address indexed newWallet, address indexed oldWallet); event FeeChange(string indexed identifier, uint8 liquidityFee, uint8 marketingFee, uint8 buyBackFee, uint8 holdersFee); event CustomTaxPeriodChange(uint8 indexed newValue, uint8 indexed oldValue, string indexed taxType, bytes23 period); event MaxTransactionAmountChange(uint256 indexed newValue, uint256 indexed oldValue); event MaxWalletAmountChange(uint256 indexed newValue, uint256 indexed oldValue); event MinTokenAmountBeforeSwapChange(uint256 indexed newValue, uint256 indexed oldValue); event ExcludeFromFeesChange(address indexed account, bool isExcluded); event ExcludeFromMaxTransferChange(address indexed account, bool isExcluded); event ExcludeFromMaxWalletChange(address indexed account, bool isExcluded); event ExcludeFromDividendsChange(address indexed account, bool isExcluded); event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived,uint256 tokensIntoLiqudity); event FeeOnSelectedWalletTransfersChange(address indexed account, bool newValue); event ClaimETHOverflow(uint256 amount); event TradingStatusChange(bool indexed newValue, bool indexed oldValue); constructor() { liquidityWallet = owner(); marketingWallet = owner(); buyBackWallet = owner(); IRouter _uniswapV2Router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); address _uniswapV2Pair = IFactory(_uniswapV2Router.factory()).createPair( address(this), _uniswapV2Router.WETH() ); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = _uniswapV2Pair; _setAutomatedMarketMakerPair(_uniswapV2Pair, true); _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; excludeFromDividends(address(0), true); excludeFromDividends(address(_uniswapV2Router), true); excludeFromDividends(address(_uniswapV2Pair), true); _isAllowedToTradeWhenDisabled[owner()] = true; _isExcludedFromMaxTransactionLimit[address(this)] = true; _isExcludedFromMaxTransactionLimit[owner()] = true; _isExcludedFromMaxWalletLimit[_uniswapV2Pair] = true; _isExcludedFromMaxWalletLimit[address(uniswapV2Router)] = true; _isExcludedFromMaxWalletLimit[address(this)] = true; _isExcludedFromMaxWalletLimit[owner()] = true; _rOwned[owner()] = _rTotal; emit Transfer(address(0), owner(), _tTotal); } receive() external payable {} // Setters function transfer(address recipient, uint256 amount) external override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom( address sender,address recipient,uint256 amount) external 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) external virtual returns (bool){ _approve(_msgSender(),spender,_allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) external virtual returns (bool) { _approve(_msgSender(),spender,_allowances[_msgSender()][spender].sub(subtractedValue,"ERC20: decreased allowance below zero")); return true; } 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 activateTrading() external onlyOwner { isTradingEnabled = true; if (_launchStartTimestamp == 0) { _launchStartTimestamp = block.timestamp; _launchBlockNumber = block.number; } emit TradingStatusChange(true, false); } function deactivateTrading() external onlyOwner { isTradingEnabled = false; emit TradingStatusChange(false, true); } function setFeeOnSelectedWalletTransfers(address account, bool value) external onlyOwner { require(_feeOnSelectedWalletTransfers[account] != value, "Boxa: The selected wallet is already set to the value "); _feeOnSelectedWalletTransfers[account] = value; emit FeeOnSelectedWalletTransfersChange(account, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { require(automatedMarketMakerPairs[pair] != value, "Boxa: Automated market maker pair is already set to that value"); automatedMarketMakerPairs[pair] = value; emit AutomatedMarketMakerPairChange(pair, value); } function excludeFromFees(address account, bool excluded) external onlyOwner { require(_isExcludedFromFee[account] != excluded, "Boxa: Account is already the value of 'excluded'"); _isExcludedFromFee[account] = excluded; emit ExcludeFromFeesChange(account, excluded); } function excludeFromMaxTransactionLimit(address account, bool excluded) external onlyOwner { require(_isExcludedFromMaxTransactionLimit[account] != excluded, "Boxa: Account is already the value of 'excluded'"); _isExcludedFromMaxTransactionLimit[account] = excluded; emit ExcludeFromMaxTransferChange(account, excluded); } function excludeFromMaxWalletLimit(address account, bool excluded) external onlyOwner { require(_isExcludedFromMaxWalletLimit[account] != excluded, "Boxa: Account is already the value of 'excluded'"); _isExcludedFromMaxWalletLimit[account] = excluded; emit ExcludeFromMaxWalletChange(account, excluded); } function excludeFromDividends(address account, bool excluded) public onlyOwner { require(_isExcludedFromDividends[account] != excluded, "Boxa: Account is already the value of 'excluded'"); if(excluded) { if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcludedFromDividends[account] = excluded; _excludedFromDividends.push(account); } else { for (uint256 i = 0; i < _excludedFromDividends.length; i++) { if (_excludedFromDividends[i] == account) { _excludedFromDividends[i] = _excludedFromDividends[_excludedFromDividends.length - 1]; _tOwned[account] = 0; _isExcludedFromDividends[account] = false; _excludedFromDividends.pop(); break; } } } emit ExcludeFromDividendsChange(account, excluded); } function setWallets(address newLiquidityWallet, address newMarketingWallet, address newBuyBackWallet) external onlyOwner { if(liquidityWallet != newLiquidityWallet) { require(newLiquidityWallet != address(0), "Boxa: The liquidityWallet cannot be 0"); emit WalletChange('liquidityWallet', newLiquidityWallet, liquidityWallet); liquidityWallet = newLiquidityWallet; } if(marketingWallet != newMarketingWallet) { require(newMarketingWallet != address(0), "Boxa: The marketingWallet cannot be 0"); emit WalletChange('marketingWallet', newMarketingWallet, marketingWallet); marketingWallet = newMarketingWallet; } if(buyBackWallet != newBuyBackWallet) { require(newBuyBackWallet != address(0), "Boxa: The buyBackWallet cannot be 0"); emit WalletChange('buyBackWallet', newBuyBackWallet, buyBackWallet); buyBackWallet = newBuyBackWallet; } } function setBaseFeesOnBuy(uint8 _liquidityFeeOnBuy, uint8 _marketingFeeOnBuy, uint8 _buyBackFeeOnBuy, uint8 _holdersFeeOnBuy) external onlyOwner { _setCustomBuyTaxPeriod(_base, _liquidityFeeOnBuy, _marketingFeeOnBuy, _buyBackFeeOnBuy, _holdersFeeOnBuy); emit FeeChange('baseFees-Buy', _liquidityFeeOnBuy, _marketingFeeOnBuy, _buyBackFeeOnBuy, _holdersFeeOnBuy); } function setBaseFeesOnSell(uint8 _liquidityFeeOnSell,uint8 _marketingFeeOnSell, uint8 _buyBackFeeOnSell, uint8 _holdersFeeOnSell) external onlyOwner { _setCustomSellTaxPeriod(_base, _liquidityFeeOnSell, _marketingFeeOnSell, _buyBackFeeOnSell, _holdersFeeOnSell); emit FeeChange('baseFees-Sell', _liquidityFeeOnSell, _marketingFeeOnSell, _buyBackFeeOnSell, _holdersFeeOnSell); } function setUniswapRouter(address newAddress) external onlyOwner { require(newAddress != address(uniswapV2Router), "Boxa: The router already has that address"); emit UniswapV2RouterChange(newAddress, address(uniswapV2Router)); uniswapV2Router = IRouter(newAddress); } function setMaxTransactionAmount(uint256 newValue) external onlyOwner { require(newValue != maxTxAmount, "Boxa: Cannot update maxTxAmount to same value"); emit MaxTransactionAmountChange(newValue, maxTxAmount); maxTxAmount = newValue; } function setMaxWalletAmount(uint256 newValue) external onlyOwner { require(newValue != maxWalletAmount, "Boxa: Cannot update maxWalletAmount to same value"); emit MaxWalletAmountChange(newValue, maxWalletAmount); maxWalletAmount = newValue; } function setMinimumTokensBeforeSwap(uint256 newValue) external onlyOwner { require(newValue != minimumTokensBeforeSwap, "Boxa: Cannot update minimumTokensBeforeSwap to same value"); emit MinTokenAmountBeforeSwapChange(newValue, minimumTokensBeforeSwap); minimumTokensBeforeSwap = newValue; } function claimETHOverflow(uint256 amount) external onlyOwner { require(amount < address(this).balance, "Boxa: Cannot send more than contract balance"); (bool success,) = address(owner()).call{value : amount}(""); if (success){ emit ClaimETHOverflow(amount); } } // Getters function name() external view returns (string memory) { return _name; } function symbol() external view returns (string memory) { return _symbol; } function decimals() external view virtual returns (uint8) { return _decimals; } function totalSupply() external view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { if (_isExcludedFromDividends[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function totalFees() external view returns (uint256) { return _tFeeTotal; } function allowance(address owner, address spender) external view override returns (uint256) { return _allowances[owner][spender]; } function getBaseBuyFees() external view returns (uint8, uint8, uint8, uint8){ return (_base.liquidityFeeOnBuy, _base.marketingFeeOnBuy, _base.buyBackFeeOnBuy, _base.holdersFeeOnBuy); } function getBaseSellFees() external view returns (uint8, uint8, uint8, uint8){ return (_base.liquidityFeeOnSell, _base.marketingFeeOnSell, _base.buyBackFeeOnSell, _base.holdersFeeOnSell); } function tokenFromReflection(uint256 rAmount) public view returns(uint256) { require(rAmount <= _rTotal, "Boxa: Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount / currentRate; } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) external view returns (uint256) { require(tAmount <= _tTotal, "Boxa: Amount must be less than supply"); uint256 currentRate = _getRate(); uint256 rAmount = tAmount * currentRate; if (!deductTransferFee) { return rAmount; } else { uint256 rTotalFee = tAmount * _totalFee / 100 * currentRate; uint256 rTransferAmount = rAmount - rTotalFee; return rTransferAmount; } } // Main function _transfer( address from, address to, uint256 amount ) internal { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Boxa: Transfer amount must be greater than zero"); require(amount <= balanceOf(from), "Boxa: Cannot transfer more than balance"); if(!_isAllowedToTradeWhenDisabled[from] && !_isAllowedToTradeWhenDisabled[to]) { require(isTradingEnabled, "Boxa: Trading is currently disabled."); if (!_isExcludedFromMaxTransactionLimit[to] && !_isExcludedFromMaxTransactionLimit[from]) { require(amount <= maxTxAmount, "Boxa: Buy amount exceeds the maxTxBuyAmount."); } if (!_isExcludedFromMaxWalletLimit[to]) { require((balanceOf(to) + amount) <= maxWalletAmount, "Boxa: Expected wallet amount exceeds the maxWalletAmount."); } } _adjustTaxes(automatedMarketMakerPairs[from], automatedMarketMakerPairs[to], to, from); bool canSwap = balanceOf(address(this)) >= minimumTokensBeforeSwap; if ( isTradingEnabled && canSwap && !_swapping && _totalFee > 0 && automatedMarketMakerPairs[to] ) { _swapping = true; _swapAndLiquify(); _swapping = false; } bool takeFee = !_swapping && isTradingEnabled; if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){ takeFee = false; } _tokenTransfer(from, to, amount, takeFee); } function _tokenTransfer(address sender,address recipient, uint256 tAmount, bool takeFee) private { (uint256 tTransferAmount,uint256 tFee, uint256 tOther) = _getTValues(tAmount, takeFee); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 rOther) = _getRValues(tAmount, tFee, tOther, _getRate()); if (_isExcludedFromDividends[sender]) { _tOwned[sender] = _tOwned[sender] - tAmount; } if (_isExcludedFromDividends[recipient]) { _tOwned[recipient] = _tOwned[recipient] + tTransferAmount; } _rOwned[sender] = _rOwned[sender] - rAmount; _rOwned[recipient] = _rOwned[recipient] + rTransferAmount; _reflectFee(rFee, tFee, rOther, tOther); emit Transfer(sender, recipient, tTransferAmount); } function _reflectFee(uint256 rFee, uint256 tFee, uint256 rOther, uint256 tOther) private { _rTotal -= rFee; _tFeeTotal += tFee; if (_isExcludedFromDividends[address(this)]) { _tOwned[address(this)] += tOther; } _rOwned[address(this)] += rOther; } function _getTValues(uint256 tAmount, bool takeFee) private view returns (uint256,uint256,uint256){ if (!takeFee) { return (tAmount, 0, 0); } else { uint256 tFee = tAmount * _holdersFee / 100; uint256 tOther = tAmount * (_liquidityFee + _marketingFee + _buyBackFee) / 100; uint256 tTransferAmount = tAmount - (tFee + tOther); return (tTransferAmount, tFee, tOther); } } function _getRValues( uint256 tAmount, uint256 tFee, uint256 tOther, uint256 currentRate ) private pure returns ( uint256, uint256, uint256, uint256) { uint256 rAmount = tAmount * currentRate; uint256 rFee = tFee * currentRate; uint256 rOther = tOther * currentRate; uint256 rTransferAmount = rAmount - (rFee + rOther); return (rAmount, rTransferAmount, rFee, rOther); } 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 < _excludedFromDividends.length; i++) { if ( _rOwned[_excludedFromDividends[i]] > rSupply || _tOwned[_excludedFromDividends[i]] > tSupply ) return (_rTotal, _tTotal); rSupply = rSupply - _rOwned[_excludedFromDividends[i]]; tSupply = tSupply - _tOwned[_excludedFromDividends[i]]; } if (rSupply < _rTotal / _tTotal) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _adjustTaxes(bool isBuyFromLp, bool isSelltoLp, address to, address from) private { _liquidityFee = 0; _marketingFee = 0; _buyBackFee = 0; _holdersFee = 0; if (isBuyFromLp) { if (block.number - _launchBlockNumber <= 5) { _liquidityFee = 100; } else { _liquidityFee = _base.liquidityFeeOnBuy; _marketingFee = _base.marketingFeeOnBuy; _buyBackFee = _base.buyBackFeeOnBuy; _holdersFee = _base.holdersFeeOnBuy; } } if (isSelltoLp) { _liquidityFee = _base.liquidityFeeOnSell; _marketingFee = _base.marketingFeeOnSell; _buyBackFee = _base.buyBackFeeOnSell; _holdersFee = _base.holdersFeeOnSell; } if (!isSelltoLp && !isBuyFromLp && (_feeOnSelectedWalletTransfers[from] || _feeOnSelectedWalletTransfers[to])) { _liquidityFee = _base.liquidityFeeOnSell; _marketingFee = _base.marketingFeeOnSell; _buyBackFee = _base.buyBackFeeOnSell; _holdersFee = _base.holdersFeeOnSell; } _totalFee = _liquidityFee + _marketingFee + _buyBackFee + _holdersFee; } function _setCustomSellTaxPeriod(CustomTaxPeriod storage map, uint8 _liquidityFeeOnSell, uint8 _marketingFeeOnSell, uint8 _buyBackFeeOnSell, uint8 _holdersFeeOnSell ) private { if (map.liquidityFeeOnSell != _liquidityFeeOnSell) { emit CustomTaxPeriodChange(_liquidityFeeOnSell, map.liquidityFeeOnSell, 'liquidityFeeOnSell', map.periodName); map.liquidityFeeOnSell = _liquidityFeeOnSell; } if (map.marketingFeeOnSell != _marketingFeeOnSell) { emit CustomTaxPeriodChange(_marketingFeeOnSell, map.marketingFeeOnSell, 'marketingFeeOnSell', map.periodName); map.marketingFeeOnSell = _marketingFeeOnSell; } if (map.buyBackFeeOnSell != _buyBackFeeOnSell) { emit CustomTaxPeriodChange(_buyBackFeeOnSell, map.buyBackFeeOnSell, 'buyBackFeeOnSell', map.periodName); map.buyBackFeeOnSell = _buyBackFeeOnSell; } if (map.holdersFeeOnSell != _holdersFeeOnSell) { emit CustomTaxPeriodChange(_holdersFeeOnSell, map.holdersFeeOnSell, 'holdersFeeOnSell', map.periodName); map.holdersFeeOnSell = _holdersFeeOnSell; } } function _setCustomBuyTaxPeriod(CustomTaxPeriod storage map, uint8 _liquidityFeeOnBuy, uint8 _marketingFeeOnBuy, uint8 _buyBackFeeOnBuy, uint8 _holdersFeeOnBuy ) private { if (map.liquidityFeeOnBuy != _liquidityFeeOnBuy) { emit CustomTaxPeriodChange(_liquidityFeeOnBuy, map.liquidityFeeOnBuy, 'liquidityFeeOnBuy', map.periodName); map.liquidityFeeOnBuy = _liquidityFeeOnBuy; } if (map.marketingFeeOnBuy != _marketingFeeOnBuy) { emit CustomTaxPeriodChange(_marketingFeeOnBuy, map.marketingFeeOnBuy, 'marketingFeeOnBuy', map.periodName); map.marketingFeeOnBuy = _marketingFeeOnBuy; } if (map.buyBackFeeOnBuy != _buyBackFeeOnBuy) { emit CustomTaxPeriodChange(_buyBackFeeOnBuy, map.buyBackFeeOnBuy, 'buyBackFeeOnBuy', map.periodName); map.buyBackFeeOnBuy = _buyBackFeeOnBuy; } if (map.holdersFeeOnBuy != _holdersFeeOnBuy) { emit CustomTaxPeriodChange(_holdersFeeOnBuy, map.holdersFeeOnBuy, 'holdersFeeOnBuy', map.periodName); map.holdersFeeOnBuy = _holdersFeeOnBuy; } } function _swapAndLiquify() private { uint256 contractBalance = balanceOf(address(this)); uint256 initialEthBalance = address(this).balance; uint8 totalFeePrior = _totalFee; uint8 liquidityFeePrior = _liquidityFee; uint8 marketingFeePrior = _marketingFee; uint8 buyBackFeePrior = _buyBackFee; uint8 holdersFeePrior = _holdersFee; uint256 amountToLiquify = contractBalance * _liquidityFee / _totalFee / 2; uint256 amountToSwap = contractBalance - amountToLiquify; _swapTokensForEth(amountToSwap); uint256 ethBalanceAfterSwap = address(this).balance - initialEthBalance; uint256 totalEthFee = totalFeePrior - (liquidityFeePrior / 2) - (holdersFeePrior); uint256 amountEthLiquidity = ethBalanceAfterSwap * liquidityFeePrior / totalEthFee / 2; uint256 amountEthMarketing = ethBalanceAfterSwap * marketingFeePrior / totalEthFee; uint256 amountEthBuyBack = ethBalanceAfterSwap - (amountEthLiquidity + amountEthMarketing); payable(marketingWallet).transfer(amountEthMarketing); payable(buyBackWallet).transfer(amountEthBuyBack); if (amountToLiquify > 0) { _addLiquidity(amountToLiquify, amountEthLiquidity); emit SwapAndLiquify(amountToSwap, amountEthLiquidity, amountToLiquify); } _totalFee = totalFeePrior; _liquidityFee = liquidityFeePrior; _marketingFee = marketingFeePrior; _buyBackFee = buyBackFeePrior; _holdersFee = holdersFeePrior; } function _swapTokensForEth(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable liquidityWallet, block.timestamp ); } }
Contract Security Audit
- Solidity Finance - Jan 17th, 2023 - Security Audit Report
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"AutomatedMarketMakerPairChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ClaimETHOverflow","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint8","name":"newValue","type":"uint8"},{"indexed":true,"internalType":"uint8","name":"oldValue","type":"uint8"},{"indexed":true,"internalType":"string","name":"taxType","type":"string"},{"indexed":false,"internalType":"bytes23","name":"period","type":"bytes23"}],"name":"CustomTaxPeriodChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromDividendsChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFeesChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxTransferChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxWalletChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"identifier","type":"string"},{"indexed":false,"internalType":"uint8","name":"liquidityFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"marketingFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"buyBackFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"holdersFee","type":"uint8"}],"name":"FeeChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"newValue","type":"bool"}],"name":"FeeOnSelectedWalletTransfersChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MaxTransactionAmountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MaxWalletAmountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MinTokenAmountBeforeSwapChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"newValue","type":"bool"},{"indexed":true,"internalType":"bool","name":"oldValue","type":"bool"}],"name":"TradingStatusChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UniswapV2RouterChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"walletIdentifier","type":"string"},{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"WalletChange","type":"event"},{"inputs":[],"name":"activateTrading","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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimETHOverflow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deactivateTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBaseBuyFees","outputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBaseSellFees","outputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","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":[],"name":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwap","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":[{"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":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_liquidityFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_marketingFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_buyBackFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_holdersFeeOnBuy","type":"uint8"}],"name":"setBaseFeesOnBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_liquidityFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_marketingFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_buyBackFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_holdersFeeOnSell","type":"uint8"}],"name":"setBaseFeesOnSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setFeeOnSelectedWalletTransfers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMinimumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setUniswapRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLiquidityWallet","type":"address"},{"internalType":"address","name":"newMarketingWallet","type":"address"},{"internalType":"address","name":"newBuyBackWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a06040526200001a670de0b6b3a764000060001962000caf565b620000289060001962000cdc565b60055561271062000043670de0b6b3a7640000606462000cf6565b6200004f919062000d18565b6008556127106200006a670de0b6b3a7640000606462000cf6565b62000076919062000d18565b6009556658d15e17628000600b556040805161016081018252636261736560e01b815260006020820181905291810182905260036060820181905260808201819052600460a0830181905260c083015260e082018190526101008201526001610120820181905261014090910152600f80546001600160c01b031916636261736560981b179055601055601180546701010303040403036001600160401b03199091161790553480156200012957600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060008054600c80546001600160a01b039092166001600160a01b03199283168117909155600d8054831682179055600e80549092161790556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d9291839163c45a0155916004808201926020929091908290030181865afa158015620001f8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021e919062000d2f565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000292919062000d2f565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000306919062000d2f565b600180546001600160a01b0319166001600160a01b0385811691909117825582166080529091506200033a90829062000579565b600160146000620003536000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526014909252812080549092166001908117909255620003a19162000669565b620003ae82600162000669565b620003bb81600162000669565b600160176000620003d46000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055308152601592839052908120805490931660019081179093556200042c6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055858216815260169384905282812080548616600190811790915580549092168152828120805486168317905530815291822080549094168117909355620004a96000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805460ff19169215159290921790915560055490600290620004ee6000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020556200051b6000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef670de0b6b3a76400006040516200056991815260200190565b60405180910390a3505062000dfa565b6001600160a01b0382166000908152601b602052604090205481151560ff909116151503620006155760405162461bcd60e51b815260206004820152603e60248201527f426f78613a204175746f6d61746564206d61726b6574206d616b65722070616960448201527f7220697320616c72656164792073657420746f20746861742076616c7565000060648201526084015b60405180910390fd5b6001600160a01b0382166000818152601b6020526040808220805460ff191685151590811790915590519092917fa666b9b2dc2c8f2d86fda7ba3a115be30d3a958fd84d359cbc6bc919df97990a91a35050565b6000546001600160a01b03163314620006c55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200060c565b6001600160a01b03821660009081526018602052604090205481151560ff909116151503620007505760405162461bcd60e51b815260206004820152603060248201527f426f78613a204163636f756e7420697320616c7265616479207468652076616c60448201526f7565206f6620276578636c756465642760801b60648201526084016200060c565b80156200081d576001600160a01b03821660009081526002602052604090205415620007b4576001600160a01b0382166000908152600260205260409020546200079a906200099e565b6001600160a01b0383166000908152600360205260409020555b6001600160a01b0382166000818152601860205260408120805460ff1916841515179055601a805460018101825591527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e0180546001600160a01b031916909117905562000954565b60005b601a548110156200095257826001600160a01b0316601a82815481106200084b576200084b62000d5a565b6000918252602090912001546001600160a01b0316036200093d57601a8054620008789060019062000cdc565b815481106200088b576200088b62000d5a565b600091825260209091200154601a80546001600160a01b039092169183908110620008ba57620008ba62000d5a565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600382526040808220829055601890925220805460ff19169055601a80548062000915576200091562000d70565b600082815260209020810160001990810180546001600160a01b031916905501905562000952565b80620009498162000d86565b91505062000820565b505b816001600160a01b03167fcb9d59a6e9da25dee1a9ddef81481537dfd94e20b1593b58b08193bea9e9baa98260405162000992911515815260200190565b60405180910390a25050565b600060055482111562000a0d5760405162461bcd60e51b815260206004820152603060248201527f426f78613a20416d6f756e74206d757374206265206c657373207468616e207460448201526f6f74616c207265666c656374696f6e7360801b60648201526084016200060c565b600062000a1962000a2e565b905062000a27818462000d18565b9392505050565b6000808062000a3c62000a61565b9150915062000a5a818362000c1360201b62001bfb1790919060201c565b9250505090565b6005546000908190670de0b6b3a7640000825b601a5481101562000bd4578260026000601a848154811062000a9a5762000a9a62000d5a565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118062000b0957508160036000601a848154811062000ae25762000ae262000d5a565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1562000b2557505060055493670de0b6b3a76400009350915050565b60026000601a838154811062000b3f5762000b3f62000d5a565b60009182526020808320909101546001600160a01b0316835282019290925260400190205462000b70908462000cdc565b925060036000601a838154811062000b8c5762000b8c62000d5a565b60009182526020808320909101546001600160a01b0316835282019290925260400190205462000bbd908362000cdc565b91508062000bcb8162000d86565b91505062000a74565b50670de0b6b3a764000060055462000bed919062000d18565b82101562000c0a57505060055492670de0b6b3a764000092509050565b90939092509050565b600062000a2783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525062000c5d60201b60201c565b6000818362000c815760405162461bcd60e51b81526004016200060c919062000da2565b50600062000c90848662000d18565b95945050505050565b634e487b7160e01b600052601260045260246000fd5b60008262000cc15762000cc162000c99565b500690565b634e487b7160e01b600052601160045260246000fd5b60008282101562000cf15762000cf162000cc6565b500390565b600081600019048311821515161562000d135762000d1362000cc6565b500290565b60008262000d2a5762000d2a62000c99565b500490565b60006020828403121562000d4257600080fd5b81516001600160a01b038116811462000a2757600080fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60006001820162000d9b5762000d9b62000cc6565b5060010190565b600060208083528351808285015260005b8181101562000dd15785810183015185820160400152820162000db3565b8181111562000de4576000604083870101525b50601f01601f1916929092016040019392505050565b6080516138cc62000e16600039600061050501526138cc6000f3fe60806040526004361061026b5760003560e01c8063715018a611610144578063aa4bde28116100b6578063cd43e2281161007a578063cd43e22814610736578063d2d7ad8314610795578063d4698016146107ab578063dd62ed3e146107cb578063f2fde38b14610811578063fe0175351461083157600080fd5b8063aa4bde2814610690578063aee50b1e146106a6578063b62496f5146106c6578063bea9849e146106f6578063c02466681461071657600080fd5b80638c0b5e22116101085780638c0b5e22146105fc5780638da5cb5b1461061257806395d89b41146102c85780639d952ce914610630578063a457c2d714610650578063a9059cbb1461067057600080fd5b8063715018a61461056757806375cb1bd11461057c57806375f0a8741461059c578063781edb3c146105bc578063880bcbc1146105dc57600080fd5b806323b872dd116101dd57806339509351116101a157806339509351146104935780634549b039146104b357806345a42329146104d357806349bd5a5e146104f3578063667812911461052757806370a082311461054757600080fd5b806323b872dd1461040257806327a14fc2146104225780632d83811914610442578063313ce5671461046257806334cf1fea1461047e57600080fd5b80630bd05b691161022f5780630bd05b691461033b57806313114a9d146103505780631694505e1461036f57806318160ddd146103a75780631cd348c0146103c25780631e293c10146103e257600080fd5b80630483f7a014610277578063064a59d01461029957806306fdde03146102c8578063095ea7b3146102fb578063098df5851461031b57600080fd5b3661027257005b600080fd5b34801561028357600080fd5b5061029761029236600461335b565b61086c565b005b3480156102a557600080fd5b506007546102b39060ff1681565b60405190151581526020015b60405180910390f35b3480156102d457600080fd5b506040805180820182526004815263424f584160e01b602082015290516102bf9190613390565b34801561030757600080fd5b506102b36103163660046133e5565b610b13565b34801561032757600080fd5b50610297610336366004613411565b610b2a565b34801561034757600080fd5b50610297610c4c565b34801561035c57600080fd5b506006545b6040519081526020016102bf565b34801561037b57600080fd5b5060015461038f906001600160a01b031681565b6040516001600160a01b0390911681526020016102bf565b3480156103b357600080fd5b50670de0b6b3a7640000610361565b3480156103ce57600080fd5b50600e5461038f906001600160a01b031681565b3480156103ee57600080fd5b506102976103fd366004613411565b610cc6565b34801561040e57600080fd5b506102b361041d36600461342a565b610d8a565b34801561042e57600080fd5b5061029761043d366004613411565b610df3565b34801561044e57600080fd5b5061036161045d366004613411565b610ebb565b34801561046e57600080fd5b50604051600981526020016102bf565b34801561048a57600080fd5b50610297610f45565b34801561049f57600080fd5b506102b36104ae3660046133e5565b610fa9565b3480156104bf57600080fd5b506103616104ce36600461346b565b610fdf565b3480156104df57600080fd5b506102976104ee36600461335b565b6110bc565b3480156104ff57600080fd5b5061038f7f000000000000000000000000000000000000000000000000000000000000000081565b34801561053357600080fd5b5061029761054236600461349f565b6111cd565b34801561055357600080fd5b506103616105623660046134f3565b61127b565b34801561057357600080fd5b506102976112da565b34801561058857600080fd5b50610297610597366004613510565b61134e565b3480156105a857600080fd5b50600d5461038f906001600160a01b031681565b3480156105c857600080fd5b506102976105d736600461335b565b61164f565b3480156105e857600080fd5b506102976105f736600461335b565b611711565b34801561060857600080fd5b5061036160095481565b34801561061e57600080fd5b506000546001600160a01b031661038f565b34801561063c57600080fd5b5061029761064b36600461349f565b6117d3565b34801561065c57600080fd5b506102b361066b3660046133e5565b611828565b34801561067c57600080fd5b506102b361068b3660046133e5565b611877565b34801561069c57600080fd5b5061036160085481565b3480156106b257600080fd5b506102976106c1366004613411565b611884565b3480156106d257600080fd5b506102b36106e13660046134f3565b601b6020526000908152604090205460ff1681565b34801561070257600080fd5b506102976107113660046134f3565b611958565b34801561072257600080fd5b5061029761073136600461335b565b611a4f565b34801561074257600080fd5b5060115460ff80821691620100008104821691600160201b8204811691600160301b9004165b6040805160ff958616815293851660208501529184169183019190915290911660608201526080016102bf565b3480156107a157600080fd5b50610361600b5481565b3480156107b757600080fd5b50600c5461038f906001600160a01b031681565b3480156107d757600080fd5b506103616107e636600461355b565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801561081d57600080fd5b5061029761082c3660046134f3565b611b11565b34801561083d57600080fd5b5060115460ff610100820481169163010000008104821691600160281b8204811691600160381b900416610768565b6000546001600160a01b0316331461089f5760405162461bcd60e51b815260040161089690613594565b60405180910390fd5b6001600160a01b03821660009081526018602052604090205481151560ff9091161515036108df5760405162461bcd60e51b8152600401610896906135c9565b80156109a7576001600160a01b0382166000908152600260205260409020541561093f576001600160a01b03821660009081526002602052604090205461092590610ebb565b6001600160a01b0383166000908152600360205260409020555b6001600160a01b0382166000818152601860205260408120805460ff1916841515179055601a805460018101825591527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e0180546001600160a01b0319169091179055610aca565b60005b601a54811015610ac857826001600160a01b0316601a82815481106109d1576109d1613619565b6000918252602090912001546001600160a01b031603610ab657601a80546109fb90600190613645565b81548110610a0b57610a0b613619565b600091825260209091200154601a80546001600160a01b039092169183908110610a3757610a37613619565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600382526040808220829055601890925220805460ff19169055601a805480610a8f57610a8f61365c565b600082815260209020810160001990810180546001600160a01b0319169055019055610ac8565b80610ac081613672565b9150506109aa565b505b816001600160a01b03167fcb9d59a6e9da25dee1a9ddef81481537dfd94e20b1593b58b08193bea9e9baa982604051610b07911515815260200190565b60405180910390a25050565b6000610b20338484611c3d565b5060015b92915050565b6000546001600160a01b03163314610b545760405162461bcd60e51b815260040161089690613594565b478110610bb85760405162461bcd60e51b815260206004820152602c60248201527f426f78613a2043616e6e6f742073656e64206d6f7265207468616e20636f6e7460448201526b726163742062616c616e636560a01b6064820152608401610896565b600080546040516001600160a01b039091169083908381818185875af1925050503d8060008114610c05576040519150601f19603f3d011682016040523d82523d6000602084013e610c0a565b606091505b505090508015610c48576040518281527f362ae087cf4ccfc970d45b9e8ce6520f03b4eda3f9d76a70b655dc22badcca489060200160405180910390a15b5050565b6000546001600160a01b03163314610c765760405162461bcd60e51b815260040161089690613594565b6007805460ff19166001179055601254600003610c965742601255436013555b6040516000906001907fa0f694e30e34d9f05d12691b612650129ed8888d1f93b25fa0cd92e4416a8338908390a3565b6000546001600160a01b03163314610cf05760405162461bcd60e51b815260040161089690613594565b6009548103610d575760405162461bcd60e51b815260206004820152602d60248201527f426f78613a2043616e6e6f7420757064617465206d61785478416d6f756e742060448201526c746f2073616d652076616c756560981b6064820152608401610896565b60095460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600955565b6000610d97848484611d61565b610de98433610de48560405180606001604052806028815260200161382a602891396001600160a01b038a1660009081526004602090815260408083203384529091529020549190612231565b611c3d565b5060019392505050565b6000546001600160a01b03163314610e1d5760405162461bcd60e51b815260040161089690613594565b6008548103610e885760405162461bcd60e51b815260206004820152603160248201527f426f78613a2043616e6e6f7420757064617465206d617857616c6c6574416d6f604482015270756e7420746f2073616d652076616c756560781b6064820152608401610896565b60085460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600855565b6000600554821115610f285760405162461bcd60e51b815260206004820152603060248201527f426f78613a20416d6f756e74206d757374206265206c657373207468616e207460448201526f6f74616c207265666c656374696f6e7360801b6064820152608401610896565b6000610f3261226b565b9050610f3e81846136a1565b9392505050565b6000546001600160a01b03163314610f6f5760405162461bcd60e51b815260040161089690613594565b6007805460ff191690556040516001906000907fa0f694e30e34d9f05d12691b612650129ed8888d1f93b25fa0cd92e4416a8338908290a3565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610b20918590610de4908661228e565b6000670de0b6b3a76400008311156110475760405162461bcd60e51b815260206004820152602560248201527f426f78613a20416d6f756e74206d757374206265206c657373207468616e20736044820152647570706c7960d81b6064820152608401610896565b600061105161226b565b9050600061105f82866136b5565b90508361106f579150610b249050565b601c54600090839060649061108e90600160201b900460ff16896136b5565b61109891906136a1565b6110a291906136b5565b905060006110b08284613645565b9450610b249350505050565b6000546001600160a01b031633146110e65760405162461bcd60e51b815260040161089690613594565b6001600160a01b03821660009081526019602052604090205481151560ff9091161515036111755760405162461bcd60e51b815260206004820152603660248201527f426f78613a205468652073656c65637465642077616c6c657420697320616c72604482015275032b0b23c9039b2ba103a37903a3432903b30b63ab2960551b6064820152608401610896565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527fe70512a569cf898db2e20aa3b4cc3f0dd13377b82a493840d326ab5a196668779101610b07565b6000546001600160a01b031633146111f75760405162461bcd60e51b815260040161089690613594565b611205600f858585856122ed565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d015b6040805191829003822060ff878116845286811660208501528581168484015284166060840152905190917f69848adfba904cea9fd12f8e800c6bae1d85101b0becc5910e509a93d81449e9919081900360800190a250505050565b6001600160a01b03811660009081526018602052604081205460ff16156112b857506001600160a01b031660009081526003602052604090205490565b6001600160a01b038216600090815260026020526040902054610b2490610ebb565b6000546001600160a01b031633146113045760405162461bcd60e51b815260040161089690613594565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146113785760405162461bcd60e51b815260040161089690613594565b600c546001600160a01b0384811691161461146a576001600160a01b0383166113f15760405162461bcd60e51b815260206004820152602560248201527f426f78613a20546865206c697175696469747957616c6c65742063616e6e6f74604482015264020626520360dc1b6064820152608401610896565b600c546040516e1b1a5c5d5a591a5d1e55d85b1b195d608a1b81526001600160a01b0391821691851690600f01604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600c80546001600160a01b0319166001600160a01b0385161790555b600d546001600160a01b0383811691161461155c576001600160a01b0382166114e35760405162461bcd60e51b815260206004820152602560248201527f426f78613a20546865206d61726b6574696e6757616c6c65742063616e6e6f74604482015264020626520360dc1b6064820152608401610896565b600d546040516e1b585c9ad95d1a5b99d5d85b1b195d608a1b81526001600160a01b0391821691841690600f01604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600d80546001600160a01b0319166001600160a01b0384161790555b600e546001600160a01b0382811691161461164a576001600160a01b0381166115d35760405162461bcd60e51b815260206004820152602360248201527f426f78613a20546865206275794261636b57616c6c65742063616e6e6f74206260448201526206520360ec1b6064820152608401610896565b600e546040516c189d5e509858dad5d85b1b195d609a1b81526001600160a01b0391821691831690600d01604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600e80546001600160a01b0319166001600160a01b0383161790555b505050565b6000546001600160a01b031633146116795760405162461bcd60e51b815260040161089690613594565b6001600160a01b03821660009081526016602052604090205481151560ff9091161515036116b95760405162461bcd60e51b8152600401610896906135c9565b6001600160a01b038216600081815260166020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e9101610b07565b6000546001600160a01b0316331461173b5760405162461bcd60e51b815260040161089690613594565b6001600160a01b03821660009081526015602052604090205481151560ff90911615150361177b5760405162461bcd60e51b8152600401610896906135c9565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a409101610b07565b6000546001600160a01b031633146117fd5760405162461bcd60e51b815260040161089690613594565b61180b600f85858585612553565b6040516b62617365466565732d42757960a01b8152600c0161121f565b6000610b203384610de485604051806060016040528060258152602001613872602591393360009081526004602090815260408083206001600160a01b038d1684529091529020549190612231565b6000610b20338484611d61565b6000546001600160a01b031633146118ae5760405162461bcd60e51b815260040161089690613594565b600b5481036119255760405162461bcd60e51b815260206004820152603960248201527f426f78613a2043616e6e6f7420757064617465206d696e696d756d546f6b656e60448201527f734265666f72655377617020746f2073616d652076616c7565000000000000006064820152608401610896565b600b5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600b55565b6000546001600160a01b031633146119825760405162461bcd60e51b815260040161089690613594565b6001546001600160a01b03908116908216036119f25760405162461bcd60e51b815260206004820152602960248201527f426f78613a2054686520726f7574657220616c7265616479206861732074686160448201526874206164647265737360b81b6064820152608401610896565b6001546040516001600160a01b03918216918316907f2afbff3ed601a8723765c7072d8ea8445e08f6f1874afd34a2b747a272c3ebad90600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611a795760405162461bcd60e51b815260040161089690613594565b6001600160a01b03821660009081526014602052604090205481151560ff909116151503611ab95760405162461bcd60e51b8152600401610896906135c9565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101610b07565b6000546001600160a01b03163314611b3b5760405162461bcd60e51b815260040161089690613594565b6001600160a01b038116611ba05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610896565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610f3e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506127a0565b6001600160a01b038316611c9f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610896565b6001600160a01b038216611d005760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610896565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611dc55760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610896565b6001600160a01b038216611e275760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610896565b60008111611e8f5760405162461bcd60e51b815260206004820152602f60248201527f426f78613a205472616e7366657220616d6f756e74206d75737420626520677260448201526e6561746572207468616e207a65726f60881b6064820152608401610896565b611e988361127b565b811115611ef75760405162461bcd60e51b815260206004820152602760248201527f426f78613a2043616e6e6f74207472616e73666572206d6f7265207468616e2060448201526662616c616e636560c81b6064820152608401610896565b6001600160a01b03831660009081526017602052604090205460ff16158015611f3957506001600160a01b03821660009081526017602052604090205460ff16155b156120f55760075460ff16611f9c5760405162461bcd60e51b8152602060048201526024808201527f426f78613a2054726164696e672069732063757272656e746c792064697361626044820152633632b21760e11b6064820152608401610896565b6001600160a01b03821660009081526015602052604090205460ff16158015611fde57506001600160a01b03831660009081526015602052604090205460ff16155b1561204a5760095481111561204a5760405162461bcd60e51b815260206004820152602c60248201527f426f78613a2042757920616d6f756e74206578636565647320746865206d617860448201526b2a3c213abca0b6b7bab73a1760a11b6064820152608401610896565b6001600160a01b03821660009081526016602052604090205460ff166120f557600854816120778461127b565b61208191906136d4565b11156120f55760405162461bcd60e51b815260206004820152603960248201527f426f78613a2045787065637465642077616c6c657420616d6f756e742065786360448201527f6565647320746865206d617857616c6c6574416d6f756e742e000000000000006064820152608401610896565b6001600160a01b038084166000908152601b602052604080822054928516825290205461212a9160ff908116911684866127ce565b6000600b546121383061127b565b600754911115915060ff16801561214c5750805b801561215b5750600a5460ff16155b80156121725750601c54600160201b900460ff1615155b801561219657506001600160a01b0383166000908152601b602052604090205460ff165b156121bb57600a805460ff191660011790556121b06129da565b600a805460ff191690555b600a5460009060ff161580156121d3575060075460ff165b6001600160a01b03861660009081526014602052604090205490915060ff168061221557506001600160a01b03841660009081526014602052604090205460ff165b1561221e575060005b61222a85858584612c20565b5050505050565b600081848411156122555760405162461bcd60e51b81526004016108969190613390565b5060006122628486613645565b95945050505050565b6000806000612278612de9565b90925090506122878282611bfb565b9250505090565b60008061229b83856136d4565b905083811015610f3e5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610896565b600285015460ff858116610100909204161461237e57604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028701548754919260ff610100909204821692918816916000805160206138528339815191529161235f9160481b906136ec565b60405180910390a460028501805461ff00191661010060ff8716021790555b600285015460ff8481166301000000909204161461241757604051711b585c9ad95d1a5b99d1995953db94d95b1b60721b815260120160405190819003812060028701548754919260ff630100000090920482169291871691600080516020613852833981519152916123f49160481b906136ec565b60405180910390a460028501805463ff0000001916630100000060ff8616021790555b600285015460ff838116600160281b90920416146124b0576040516f189d5e509858dad1995953db94d95b1b60821b815260100160405190819003812060028701548754919260ff600160281b909204821692918616916000805160206138528339815191529161248b9160481b906136ec565b60405180910390a460028501805465ff00000000001916600160281b60ff8516021790555b600285015460ff828116600160381b909204161461222a576040516f1a1bdb19195c9cd1995953db94d95b1b60821b815260100160405190819003812060028701548754919260ff600160381b90920482169291851691600080516020613852833981519152916125249160481b906136ec565b60405180910390a460028501805460ff8316600160381b0267ff00000000000000199091161790555050505050565b600285015460ff8581169116146125d457604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028701548754919260ff9182169291881691600080516020613852833981519152916125ba9160481b906136ec565b60405180910390a460028501805460ff191660ff86161790555b600285015460ff84811662010000909204161461266857604051706d61726b6574696e674665654f6e42757960781b815260110160405190819003812060028701548754919260ff6201000090920482169291871691600080516020613852833981519152916126479160481b906136ec565b60405180910390a460028501805462ff000019166201000060ff8616021790555b600285015460ff838116600160201b90920416146126ff576040516e6275794261636b4665654f6e42757960881b8152600f0160405190819003812060028701548754919260ff600160201b90920482169291861691600080516020613852833981519152916126db9160481b906136ec565b60405180910390a460028501805464ff000000001916600160201b60ff8516021790555b600285015460ff828116600160301b909204161461222a576040516e686f6c646572734665654f6e42757960881b8152600f0160405190819003812060028701548754919260ff600160301b90920482169291851691600080516020613852833981519152916127729160481b906136ec565b60405180910390a460028501805460ff8316600160301b0266ff000000000000199091161790555050505050565b600081836127c15760405162461bcd60e51b81526004016108969190613390565b50600061226284866136a1565b601c805463ffffffff191690558315612865576005601354436127f19190613645565b1161280857601c805460ff19166064179055612865565b601154601c805460ff80841661ffff1990921691909117610100620100008086048416919091029190911763ffff00001916600160201b850483169190910263ff000000191617600160301b909304166301000000029190911790555b82156128c857601154601c805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b821580156128d4575083155b801561291a57506001600160a01b03811660009081526019602052604090205460ff168061291a57506001600160a01b03821660009081526019602052604090205460ff165b1561297c57601154601c805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b601c5460ff630100000082048116916201000081048216916129a691610100810482169116613703565b6129b09190613703565b6129ba9190613703565b601c60046101000a81548160ff021916908360ff16021790555050505050565b60006129e53061127b565b601c54909150479060ff600160201b82048116918181169161010082048116916201000081048216916301000000909104166000600286612a26878b6136b5565b612a3091906136a1565b612a3a91906136a1565b90506000612a48828a613645565b9050612a5381612f82565b6000612a5f8947613645565b9050600084612a6f60028a613728565b612a79908b61374a565b612a83919061374a565b60ff16905060006002828a60ff1685612a9c91906136b5565b612aa691906136a1565b612ab091906136a1565b9050600082612ac260ff8b16866136b5565b612acc91906136a1565b90506000612ada82846136d4565b612ae49086613645565b600d546040519192506001600160a01b03169083156108fc029084906000818181858888f19350505050158015612b1f573d6000803e3d6000fd5b50600e546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612b5a573d6000803e3d6000fd5b508615612bad57612b6b87846130dc565b60408051878152602081018590529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b5050601c805460ff97881663010000000263ff0000001999891662010000029990991663ffff0000199a89166101000261ffff199d8a16600160201b029d909d1664ff0000ffff19909216919091179a909716999099179990991796909616939093179390931790945550505050505050565b6000806000612c2f8585613189565b925092509250600080600080612c4e898787612c4961226b565b61323f565b6001600160a01b038f166000908152601860205260409020549397509195509350915060ff1615612cb7576001600160a01b038b16600090815260036020526040902054612c9d908a90613645565b6001600160a01b038c166000908152600360205260409020555b6001600160a01b038a1660009081526018602052604090205460ff1615612d16576001600160a01b038a16600090815260036020526040902054612cfc9088906136d4565b6001600160a01b038b166000908152600360205260409020555b6001600160a01b038b16600090815260026020526040902054612d3a908590613645565b6001600160a01b03808d1660009081526002602052604080822093909355908c1681522054612d6a9084906136d4565b6001600160a01b038b16600090815260026020526040902055612d8f82878388613297565b896001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef89604051612dd491815260200190565b60405180910390a35050505050505050505050565b6005546000908190670de0b6b3a7640000825b601a54811015612f46578260026000601a8481548110612e1e57612e1e613619565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612e8957508160036000601a8481548110612e6257612e62613619565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612ea457505060055493670de0b6b3a76400009350915050565b60026000601a8381548110612ebb57612ebb613619565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612eea9084613645565b925060036000601a8381548110612f0357612f03613619565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612f329083613645565b915080612f3e81613672565b915050612dfc565b50670de0b6b3a7640000600554612f5d91906136a1565b821015612f7957505060055492670de0b6b3a764000092509050565b90939092509050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612fb757612fb7613619565b6001600160a01b03928316602091820292909201810191909152600154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613010573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613034919061376d565b8160018151811061304757613047613619565b6001600160a01b03928316602091820292909201015260015461306d9130911684611c3d565b60015460405163791ac94760e01b81526001600160a01b039091169063791ac947906130a690859060009086903090429060040161378a565b600060405180830381600087803b1580156130c057600080fd5b505af11580156130d4573d6000803e3d6000fd5b505050505050565b6001546130f49030906001600160a01b031684611c3d565b600154600c5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015613164573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061222a91906137fb565b6000806000836131a157508391506000905080613238565b601c546000906064906131be906301000000900460ff16886136b5565b6131c891906136a1565b601c5490915060009060649060ff6201000082048116916131f191610100820481169116613703565b6131fb9190613703565b6132089060ff16896136b5565b61321291906136a1565b9050600061322082846136d4565b61322a9089613645565b955091935091506132389050565b9250925092565b60008080808061324f868a6136b5565b9050600061325d878a6136b5565b9050600061326b888a6136b5565b9050600061327982846136d4565b6132839085613645565b939c939b5091995097509095505050505050565b83600560008282546132a99190613645565b9250508190555082600660008282546132c291906136d4565b90915550503060009081526018602052604090205460ff16156133045730600090815260036020526040812080548392906132fe9084906136d4565b90915550505b30600090815260026020526040812080548492906133239084906136d4565b909155505050505050565b6001600160a01b038116811461334357600080fd5b50565b8035801515811461335657600080fd5b919050565b6000806040838503121561336e57600080fd5b82356133798161332e565b915061338760208401613346565b90509250929050565b600060208083528351808285015260005b818110156133bd578581018301518582016040015282016133a1565b818111156133cf576000604083870101525b50601f01601f1916929092016040019392505050565b600080604083850312156133f857600080fd5b82356134038161332e565b946020939093013593505050565b60006020828403121561342357600080fd5b5035919050565b60008060006060848603121561343f57600080fd5b833561344a8161332e565b9250602084013561345a8161332e565b929592945050506040919091013590565b6000806040838503121561347e57600080fd5b8235915061338760208401613346565b803560ff8116811461335657600080fd5b600080600080608085870312156134b557600080fd5b6134be8561348e565b93506134cc6020860161348e565b92506134da6040860161348e565b91506134e86060860161348e565b905092959194509250565b60006020828403121561350557600080fd5b8135610f3e8161332e565b60008060006060848603121561352557600080fd5b83356135308161332e565b925060208401356135408161332e565b915060408401356135508161332e565b809150509250925092565b6000806040838503121561356e57600080fd5b82356135798161332e565b915060208301356135898161332e565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526030908201527f426f78613a204163636f756e7420697320616c7265616479207468652076616c60408201526f7565206f6620276578636c756465642760801b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000828210156136575761365761362f565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600182016136845761368461362f565b5060010190565b634e487b7160e01b600052601260045260246000fd5b6000826136b0576136b061368b565b500490565b60008160001904831182151516156136cf576136cf61362f565b500290565b600082198211156136e7576136e761362f565b500190565b68ffffffffffffffffff1991909116815260200190565b600060ff821660ff84168060ff038211156137205761372061362f565b019392505050565b600060ff83168061373b5761373b61368b565b8060ff84160491505092915050565b600060ff821660ff8416808210156137645761376461362f565b90039392505050565b60006020828403121561377f57600080fd5b8151610f3e8161332e565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156137da5784516001600160a01b0316835293830193918301916001016137b5565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561381057600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365e4c649bdef80a9884d04138447ed68ee6c8a76c0f3f220dfa855dec4ffadc63845524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122037f026409d5fdfca28ed3ce64ff99c2f6bcb94e056ad04107697f81218c2648064736f6c634300080f0033
Deployed Bytecode
0x60806040526004361061026b5760003560e01c8063715018a611610144578063aa4bde28116100b6578063cd43e2281161007a578063cd43e22814610736578063d2d7ad8314610795578063d4698016146107ab578063dd62ed3e146107cb578063f2fde38b14610811578063fe0175351461083157600080fd5b8063aa4bde2814610690578063aee50b1e146106a6578063b62496f5146106c6578063bea9849e146106f6578063c02466681461071657600080fd5b80638c0b5e22116101085780638c0b5e22146105fc5780638da5cb5b1461061257806395d89b41146102c85780639d952ce914610630578063a457c2d714610650578063a9059cbb1461067057600080fd5b8063715018a61461056757806375cb1bd11461057c57806375f0a8741461059c578063781edb3c146105bc578063880bcbc1146105dc57600080fd5b806323b872dd116101dd57806339509351116101a157806339509351146104935780634549b039146104b357806345a42329146104d357806349bd5a5e146104f3578063667812911461052757806370a082311461054757600080fd5b806323b872dd1461040257806327a14fc2146104225780632d83811914610442578063313ce5671461046257806334cf1fea1461047e57600080fd5b80630bd05b691161022f5780630bd05b691461033b57806313114a9d146103505780631694505e1461036f57806318160ddd146103a75780631cd348c0146103c25780631e293c10146103e257600080fd5b80630483f7a014610277578063064a59d01461029957806306fdde03146102c8578063095ea7b3146102fb578063098df5851461031b57600080fd5b3661027257005b600080fd5b34801561028357600080fd5b5061029761029236600461335b565b61086c565b005b3480156102a557600080fd5b506007546102b39060ff1681565b60405190151581526020015b60405180910390f35b3480156102d457600080fd5b506040805180820182526004815263424f584160e01b602082015290516102bf9190613390565b34801561030757600080fd5b506102b36103163660046133e5565b610b13565b34801561032757600080fd5b50610297610336366004613411565b610b2a565b34801561034757600080fd5b50610297610c4c565b34801561035c57600080fd5b506006545b6040519081526020016102bf565b34801561037b57600080fd5b5060015461038f906001600160a01b031681565b6040516001600160a01b0390911681526020016102bf565b3480156103b357600080fd5b50670de0b6b3a7640000610361565b3480156103ce57600080fd5b50600e5461038f906001600160a01b031681565b3480156103ee57600080fd5b506102976103fd366004613411565b610cc6565b34801561040e57600080fd5b506102b361041d36600461342a565b610d8a565b34801561042e57600080fd5b5061029761043d366004613411565b610df3565b34801561044e57600080fd5b5061036161045d366004613411565b610ebb565b34801561046e57600080fd5b50604051600981526020016102bf565b34801561048a57600080fd5b50610297610f45565b34801561049f57600080fd5b506102b36104ae3660046133e5565b610fa9565b3480156104bf57600080fd5b506103616104ce36600461346b565b610fdf565b3480156104df57600080fd5b506102976104ee36600461335b565b6110bc565b3480156104ff57600080fd5b5061038f7f00000000000000000000000002bea4499aac742578b9b4ccfdfe4036b4e02ed081565b34801561053357600080fd5b5061029761054236600461349f565b6111cd565b34801561055357600080fd5b506103616105623660046134f3565b61127b565b34801561057357600080fd5b506102976112da565b34801561058857600080fd5b50610297610597366004613510565b61134e565b3480156105a857600080fd5b50600d5461038f906001600160a01b031681565b3480156105c857600080fd5b506102976105d736600461335b565b61164f565b3480156105e857600080fd5b506102976105f736600461335b565b611711565b34801561060857600080fd5b5061036160095481565b34801561061e57600080fd5b506000546001600160a01b031661038f565b34801561063c57600080fd5b5061029761064b36600461349f565b6117d3565b34801561065c57600080fd5b506102b361066b3660046133e5565b611828565b34801561067c57600080fd5b506102b361068b3660046133e5565b611877565b34801561069c57600080fd5b5061036160085481565b3480156106b257600080fd5b506102976106c1366004613411565b611884565b3480156106d257600080fd5b506102b36106e13660046134f3565b601b6020526000908152604090205460ff1681565b34801561070257600080fd5b506102976107113660046134f3565b611958565b34801561072257600080fd5b5061029761073136600461335b565b611a4f565b34801561074257600080fd5b5060115460ff80821691620100008104821691600160201b8204811691600160301b9004165b6040805160ff958616815293851660208501529184169183019190915290911660608201526080016102bf565b3480156107a157600080fd5b50610361600b5481565b3480156107b757600080fd5b50600c5461038f906001600160a01b031681565b3480156107d757600080fd5b506103616107e636600461355b565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801561081d57600080fd5b5061029761082c3660046134f3565b611b11565b34801561083d57600080fd5b5060115460ff610100820481169163010000008104821691600160281b8204811691600160381b900416610768565b6000546001600160a01b0316331461089f5760405162461bcd60e51b815260040161089690613594565b60405180910390fd5b6001600160a01b03821660009081526018602052604090205481151560ff9091161515036108df5760405162461bcd60e51b8152600401610896906135c9565b80156109a7576001600160a01b0382166000908152600260205260409020541561093f576001600160a01b03821660009081526002602052604090205461092590610ebb565b6001600160a01b0383166000908152600360205260409020555b6001600160a01b0382166000818152601860205260408120805460ff1916841515179055601a805460018101825591527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e0180546001600160a01b0319169091179055610aca565b60005b601a54811015610ac857826001600160a01b0316601a82815481106109d1576109d1613619565b6000918252602090912001546001600160a01b031603610ab657601a80546109fb90600190613645565b81548110610a0b57610a0b613619565b600091825260209091200154601a80546001600160a01b039092169183908110610a3757610a37613619565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600382526040808220829055601890925220805460ff19169055601a805480610a8f57610a8f61365c565b600082815260209020810160001990810180546001600160a01b0319169055019055610ac8565b80610ac081613672565b9150506109aa565b505b816001600160a01b03167fcb9d59a6e9da25dee1a9ddef81481537dfd94e20b1593b58b08193bea9e9baa982604051610b07911515815260200190565b60405180910390a25050565b6000610b20338484611c3d565b5060015b92915050565b6000546001600160a01b03163314610b545760405162461bcd60e51b815260040161089690613594565b478110610bb85760405162461bcd60e51b815260206004820152602c60248201527f426f78613a2043616e6e6f742073656e64206d6f7265207468616e20636f6e7460448201526b726163742062616c616e636560a01b6064820152608401610896565b600080546040516001600160a01b039091169083908381818185875af1925050503d8060008114610c05576040519150601f19603f3d011682016040523d82523d6000602084013e610c0a565b606091505b505090508015610c48576040518281527f362ae087cf4ccfc970d45b9e8ce6520f03b4eda3f9d76a70b655dc22badcca489060200160405180910390a15b5050565b6000546001600160a01b03163314610c765760405162461bcd60e51b815260040161089690613594565b6007805460ff19166001179055601254600003610c965742601255436013555b6040516000906001907fa0f694e30e34d9f05d12691b612650129ed8888d1f93b25fa0cd92e4416a8338908390a3565b6000546001600160a01b03163314610cf05760405162461bcd60e51b815260040161089690613594565b6009548103610d575760405162461bcd60e51b815260206004820152602d60248201527f426f78613a2043616e6e6f7420757064617465206d61785478416d6f756e742060448201526c746f2073616d652076616c756560981b6064820152608401610896565b60095460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600955565b6000610d97848484611d61565b610de98433610de48560405180606001604052806028815260200161382a602891396001600160a01b038a1660009081526004602090815260408083203384529091529020549190612231565b611c3d565b5060019392505050565b6000546001600160a01b03163314610e1d5760405162461bcd60e51b815260040161089690613594565b6008548103610e885760405162461bcd60e51b815260206004820152603160248201527f426f78613a2043616e6e6f7420757064617465206d617857616c6c6574416d6f604482015270756e7420746f2073616d652076616c756560781b6064820152608401610896565b60085460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600855565b6000600554821115610f285760405162461bcd60e51b815260206004820152603060248201527f426f78613a20416d6f756e74206d757374206265206c657373207468616e207460448201526f6f74616c207265666c656374696f6e7360801b6064820152608401610896565b6000610f3261226b565b9050610f3e81846136a1565b9392505050565b6000546001600160a01b03163314610f6f5760405162461bcd60e51b815260040161089690613594565b6007805460ff191690556040516001906000907fa0f694e30e34d9f05d12691b612650129ed8888d1f93b25fa0cd92e4416a8338908290a3565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610b20918590610de4908661228e565b6000670de0b6b3a76400008311156110475760405162461bcd60e51b815260206004820152602560248201527f426f78613a20416d6f756e74206d757374206265206c657373207468616e20736044820152647570706c7960d81b6064820152608401610896565b600061105161226b565b9050600061105f82866136b5565b90508361106f579150610b249050565b601c54600090839060649061108e90600160201b900460ff16896136b5565b61109891906136a1565b6110a291906136b5565b905060006110b08284613645565b9450610b249350505050565b6000546001600160a01b031633146110e65760405162461bcd60e51b815260040161089690613594565b6001600160a01b03821660009081526019602052604090205481151560ff9091161515036111755760405162461bcd60e51b815260206004820152603660248201527f426f78613a205468652073656c65637465642077616c6c657420697320616c72604482015275032b0b23c9039b2ba103a37903a3432903b30b63ab2960551b6064820152608401610896565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527fe70512a569cf898db2e20aa3b4cc3f0dd13377b82a493840d326ab5a196668779101610b07565b6000546001600160a01b031633146111f75760405162461bcd60e51b815260040161089690613594565b611205600f858585856122ed565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d015b6040805191829003822060ff878116845286811660208501528581168484015284166060840152905190917f69848adfba904cea9fd12f8e800c6bae1d85101b0becc5910e509a93d81449e9919081900360800190a250505050565b6001600160a01b03811660009081526018602052604081205460ff16156112b857506001600160a01b031660009081526003602052604090205490565b6001600160a01b038216600090815260026020526040902054610b2490610ebb565b6000546001600160a01b031633146113045760405162461bcd60e51b815260040161089690613594565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146113785760405162461bcd60e51b815260040161089690613594565b600c546001600160a01b0384811691161461146a576001600160a01b0383166113f15760405162461bcd60e51b815260206004820152602560248201527f426f78613a20546865206c697175696469747957616c6c65742063616e6e6f74604482015264020626520360dc1b6064820152608401610896565b600c546040516e1b1a5c5d5a591a5d1e55d85b1b195d608a1b81526001600160a01b0391821691851690600f01604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600c80546001600160a01b0319166001600160a01b0385161790555b600d546001600160a01b0383811691161461155c576001600160a01b0382166114e35760405162461bcd60e51b815260206004820152602560248201527f426f78613a20546865206d61726b6574696e6757616c6c65742063616e6e6f74604482015264020626520360dc1b6064820152608401610896565b600d546040516e1b585c9ad95d1a5b99d5d85b1b195d608a1b81526001600160a01b0391821691841690600f01604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600d80546001600160a01b0319166001600160a01b0384161790555b600e546001600160a01b0382811691161461164a576001600160a01b0381166115d35760405162461bcd60e51b815260206004820152602360248201527f426f78613a20546865206275794261636b57616c6c65742063616e6e6f74206260448201526206520360ec1b6064820152608401610896565b600e546040516c189d5e509858dad5d85b1b195d609a1b81526001600160a01b0391821691831690600d01604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600e80546001600160a01b0319166001600160a01b0383161790555b505050565b6000546001600160a01b031633146116795760405162461bcd60e51b815260040161089690613594565b6001600160a01b03821660009081526016602052604090205481151560ff9091161515036116b95760405162461bcd60e51b8152600401610896906135c9565b6001600160a01b038216600081815260166020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e9101610b07565b6000546001600160a01b0316331461173b5760405162461bcd60e51b815260040161089690613594565b6001600160a01b03821660009081526015602052604090205481151560ff90911615150361177b5760405162461bcd60e51b8152600401610896906135c9565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a409101610b07565b6000546001600160a01b031633146117fd5760405162461bcd60e51b815260040161089690613594565b61180b600f85858585612553565b6040516b62617365466565732d42757960a01b8152600c0161121f565b6000610b203384610de485604051806060016040528060258152602001613872602591393360009081526004602090815260408083206001600160a01b038d1684529091529020549190612231565b6000610b20338484611d61565b6000546001600160a01b031633146118ae5760405162461bcd60e51b815260040161089690613594565b600b5481036119255760405162461bcd60e51b815260206004820152603960248201527f426f78613a2043616e6e6f7420757064617465206d696e696d756d546f6b656e60448201527f734265666f72655377617020746f2073616d652076616c7565000000000000006064820152608401610896565b600b5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600b55565b6000546001600160a01b031633146119825760405162461bcd60e51b815260040161089690613594565b6001546001600160a01b03908116908216036119f25760405162461bcd60e51b815260206004820152602960248201527f426f78613a2054686520726f7574657220616c7265616479206861732074686160448201526874206164647265737360b81b6064820152608401610896565b6001546040516001600160a01b03918216918316907f2afbff3ed601a8723765c7072d8ea8445e08f6f1874afd34a2b747a272c3ebad90600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611a795760405162461bcd60e51b815260040161089690613594565b6001600160a01b03821660009081526014602052604090205481151560ff909116151503611ab95760405162461bcd60e51b8152600401610896906135c9565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101610b07565b6000546001600160a01b03163314611b3b5760405162461bcd60e51b815260040161089690613594565b6001600160a01b038116611ba05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610896565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610f3e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506127a0565b6001600160a01b038316611c9f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610896565b6001600160a01b038216611d005760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610896565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611dc55760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610896565b6001600160a01b038216611e275760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610896565b60008111611e8f5760405162461bcd60e51b815260206004820152602f60248201527f426f78613a205472616e7366657220616d6f756e74206d75737420626520677260448201526e6561746572207468616e207a65726f60881b6064820152608401610896565b611e988361127b565b811115611ef75760405162461bcd60e51b815260206004820152602760248201527f426f78613a2043616e6e6f74207472616e73666572206d6f7265207468616e2060448201526662616c616e636560c81b6064820152608401610896565b6001600160a01b03831660009081526017602052604090205460ff16158015611f3957506001600160a01b03821660009081526017602052604090205460ff16155b156120f55760075460ff16611f9c5760405162461bcd60e51b8152602060048201526024808201527f426f78613a2054726164696e672069732063757272656e746c792064697361626044820152633632b21760e11b6064820152608401610896565b6001600160a01b03821660009081526015602052604090205460ff16158015611fde57506001600160a01b03831660009081526015602052604090205460ff16155b1561204a5760095481111561204a5760405162461bcd60e51b815260206004820152602c60248201527f426f78613a2042757920616d6f756e74206578636565647320746865206d617860448201526b2a3c213abca0b6b7bab73a1760a11b6064820152608401610896565b6001600160a01b03821660009081526016602052604090205460ff166120f557600854816120778461127b565b61208191906136d4565b11156120f55760405162461bcd60e51b815260206004820152603960248201527f426f78613a2045787065637465642077616c6c657420616d6f756e742065786360448201527f6565647320746865206d617857616c6c6574416d6f756e742e000000000000006064820152608401610896565b6001600160a01b038084166000908152601b602052604080822054928516825290205461212a9160ff908116911684866127ce565b6000600b546121383061127b565b600754911115915060ff16801561214c5750805b801561215b5750600a5460ff16155b80156121725750601c54600160201b900460ff1615155b801561219657506001600160a01b0383166000908152601b602052604090205460ff165b156121bb57600a805460ff191660011790556121b06129da565b600a805460ff191690555b600a5460009060ff161580156121d3575060075460ff165b6001600160a01b03861660009081526014602052604090205490915060ff168061221557506001600160a01b03841660009081526014602052604090205460ff165b1561221e575060005b61222a85858584612c20565b5050505050565b600081848411156122555760405162461bcd60e51b81526004016108969190613390565b5060006122628486613645565b95945050505050565b6000806000612278612de9565b90925090506122878282611bfb565b9250505090565b60008061229b83856136d4565b905083811015610f3e5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610896565b600285015460ff858116610100909204161461237e57604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028701548754919260ff610100909204821692918816916000805160206138528339815191529161235f9160481b906136ec565b60405180910390a460028501805461ff00191661010060ff8716021790555b600285015460ff8481166301000000909204161461241757604051711b585c9ad95d1a5b99d1995953db94d95b1b60721b815260120160405190819003812060028701548754919260ff630100000090920482169291871691600080516020613852833981519152916123f49160481b906136ec565b60405180910390a460028501805463ff0000001916630100000060ff8616021790555b600285015460ff838116600160281b90920416146124b0576040516f189d5e509858dad1995953db94d95b1b60821b815260100160405190819003812060028701548754919260ff600160281b909204821692918616916000805160206138528339815191529161248b9160481b906136ec565b60405180910390a460028501805465ff00000000001916600160281b60ff8516021790555b600285015460ff828116600160381b909204161461222a576040516f1a1bdb19195c9cd1995953db94d95b1b60821b815260100160405190819003812060028701548754919260ff600160381b90920482169291851691600080516020613852833981519152916125249160481b906136ec565b60405180910390a460028501805460ff8316600160381b0267ff00000000000000199091161790555050505050565b600285015460ff8581169116146125d457604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028701548754919260ff9182169291881691600080516020613852833981519152916125ba9160481b906136ec565b60405180910390a460028501805460ff191660ff86161790555b600285015460ff84811662010000909204161461266857604051706d61726b6574696e674665654f6e42757960781b815260110160405190819003812060028701548754919260ff6201000090920482169291871691600080516020613852833981519152916126479160481b906136ec565b60405180910390a460028501805462ff000019166201000060ff8616021790555b600285015460ff838116600160201b90920416146126ff576040516e6275794261636b4665654f6e42757960881b8152600f0160405190819003812060028701548754919260ff600160201b90920482169291861691600080516020613852833981519152916126db9160481b906136ec565b60405180910390a460028501805464ff000000001916600160201b60ff8516021790555b600285015460ff828116600160301b909204161461222a576040516e686f6c646572734665654f6e42757960881b8152600f0160405190819003812060028701548754919260ff600160301b90920482169291851691600080516020613852833981519152916127729160481b906136ec565b60405180910390a460028501805460ff8316600160301b0266ff000000000000199091161790555050505050565b600081836127c15760405162461bcd60e51b81526004016108969190613390565b50600061226284866136a1565b601c805463ffffffff191690558315612865576005601354436127f19190613645565b1161280857601c805460ff19166064179055612865565b601154601c805460ff80841661ffff1990921691909117610100620100008086048416919091029190911763ffff00001916600160201b850483169190910263ff000000191617600160301b909304166301000000029190911790555b82156128c857601154601c805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b821580156128d4575083155b801561291a57506001600160a01b03811660009081526019602052604090205460ff168061291a57506001600160a01b03821660009081526019602052604090205460ff165b1561297c57601154601c805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b601c5460ff630100000082048116916201000081048216916129a691610100810482169116613703565b6129b09190613703565b6129ba9190613703565b601c60046101000a81548160ff021916908360ff16021790555050505050565b60006129e53061127b565b601c54909150479060ff600160201b82048116918181169161010082048116916201000081048216916301000000909104166000600286612a26878b6136b5565b612a3091906136a1565b612a3a91906136a1565b90506000612a48828a613645565b9050612a5381612f82565b6000612a5f8947613645565b9050600084612a6f60028a613728565b612a79908b61374a565b612a83919061374a565b60ff16905060006002828a60ff1685612a9c91906136b5565b612aa691906136a1565b612ab091906136a1565b9050600082612ac260ff8b16866136b5565b612acc91906136a1565b90506000612ada82846136d4565b612ae49086613645565b600d546040519192506001600160a01b03169083156108fc029084906000818181858888f19350505050158015612b1f573d6000803e3d6000fd5b50600e546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612b5a573d6000803e3d6000fd5b508615612bad57612b6b87846130dc565b60408051878152602081018590529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b5050601c805460ff97881663010000000263ff0000001999891662010000029990991663ffff0000199a89166101000261ffff199d8a16600160201b029d909d1664ff0000ffff19909216919091179a909716999099179990991796909616939093179390931790945550505050505050565b6000806000612c2f8585613189565b925092509250600080600080612c4e898787612c4961226b565b61323f565b6001600160a01b038f166000908152601860205260409020549397509195509350915060ff1615612cb7576001600160a01b038b16600090815260036020526040902054612c9d908a90613645565b6001600160a01b038c166000908152600360205260409020555b6001600160a01b038a1660009081526018602052604090205460ff1615612d16576001600160a01b038a16600090815260036020526040902054612cfc9088906136d4565b6001600160a01b038b166000908152600360205260409020555b6001600160a01b038b16600090815260026020526040902054612d3a908590613645565b6001600160a01b03808d1660009081526002602052604080822093909355908c1681522054612d6a9084906136d4565b6001600160a01b038b16600090815260026020526040902055612d8f82878388613297565b896001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef89604051612dd491815260200190565b60405180910390a35050505050505050505050565b6005546000908190670de0b6b3a7640000825b601a54811015612f46578260026000601a8481548110612e1e57612e1e613619565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612e8957508160036000601a8481548110612e6257612e62613619565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612ea457505060055493670de0b6b3a76400009350915050565b60026000601a8381548110612ebb57612ebb613619565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612eea9084613645565b925060036000601a8381548110612f0357612f03613619565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612f329083613645565b915080612f3e81613672565b915050612dfc565b50670de0b6b3a7640000600554612f5d91906136a1565b821015612f7957505060055492670de0b6b3a764000092509050565b90939092509050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612fb757612fb7613619565b6001600160a01b03928316602091820292909201810191909152600154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613010573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613034919061376d565b8160018151811061304757613047613619565b6001600160a01b03928316602091820292909201015260015461306d9130911684611c3d565b60015460405163791ac94760e01b81526001600160a01b039091169063791ac947906130a690859060009086903090429060040161378a565b600060405180830381600087803b1580156130c057600080fd5b505af11580156130d4573d6000803e3d6000fd5b505050505050565b6001546130f49030906001600160a01b031684611c3d565b600154600c5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015613164573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061222a91906137fb565b6000806000836131a157508391506000905080613238565b601c546000906064906131be906301000000900460ff16886136b5565b6131c891906136a1565b601c5490915060009060649060ff6201000082048116916131f191610100820481169116613703565b6131fb9190613703565b6132089060ff16896136b5565b61321291906136a1565b9050600061322082846136d4565b61322a9089613645565b955091935091506132389050565b9250925092565b60008080808061324f868a6136b5565b9050600061325d878a6136b5565b9050600061326b888a6136b5565b9050600061327982846136d4565b6132839085613645565b939c939b5091995097509095505050505050565b83600560008282546132a99190613645565b9250508190555082600660008282546132c291906136d4565b90915550503060009081526018602052604090205460ff16156133045730600090815260036020526040812080548392906132fe9084906136d4565b90915550505b30600090815260026020526040812080548492906133239084906136d4565b909155505050505050565b6001600160a01b038116811461334357600080fd5b50565b8035801515811461335657600080fd5b919050565b6000806040838503121561336e57600080fd5b82356133798161332e565b915061338760208401613346565b90509250929050565b600060208083528351808285015260005b818110156133bd578581018301518582016040015282016133a1565b818111156133cf576000604083870101525b50601f01601f1916929092016040019392505050565b600080604083850312156133f857600080fd5b82356134038161332e565b946020939093013593505050565b60006020828403121561342357600080fd5b5035919050565b60008060006060848603121561343f57600080fd5b833561344a8161332e565b9250602084013561345a8161332e565b929592945050506040919091013590565b6000806040838503121561347e57600080fd5b8235915061338760208401613346565b803560ff8116811461335657600080fd5b600080600080608085870312156134b557600080fd5b6134be8561348e565b93506134cc6020860161348e565b92506134da6040860161348e565b91506134e86060860161348e565b905092959194509250565b60006020828403121561350557600080fd5b8135610f3e8161332e565b60008060006060848603121561352557600080fd5b83356135308161332e565b925060208401356135408161332e565b915060408401356135508161332e565b809150509250925092565b6000806040838503121561356e57600080fd5b82356135798161332e565b915060208301356135898161332e565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526030908201527f426f78613a204163636f756e7420697320616c7265616479207468652076616c60408201526f7565206f6620276578636c756465642760801b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000828210156136575761365761362f565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600182016136845761368461362f565b5060010190565b634e487b7160e01b600052601260045260246000fd5b6000826136b0576136b061368b565b500490565b60008160001904831182151516156136cf576136cf61362f565b500290565b600082198211156136e7576136e761362f565b500190565b68ffffffffffffffffff1991909116815260200190565b600060ff821660ff84168060ff038211156137205761372061362f565b019392505050565b600060ff83168061373b5761373b61368b565b8060ff84160491505092915050565b600060ff821660ff8416808210156137645761376461362f565b90039392505050565b60006020828403121561377f57600080fd5b8151610f3e8161332e565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156137da5784516001600160a01b0316835293830193918301916001016137b5565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561381057600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365e4c649bdef80a9884d04138447ed68ee6c8a76c0f3f220dfa855dec4ffadc63845524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122037f026409d5fdfca28ed3ce64ff99c2f6bcb94e056ad04107697f81218c2648064736f6c634300080f0033
Deployed Bytecode Sourcemap
7734:23475:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15956:824;;;;;;;;;;-1:-1:-1;15956:824:0;;;;;:::i;:::-;;:::i;:::-;;8398:28;;;;;;;;;;-1:-1:-1;8398:28:0;;;;;;;;;;;800:14:1;;793:22;775:41;;763:2;748:18;8398:28:0;;;;;;;;19828:76;;;;;;;;;;-1:-1:-1;19894:5:0;;;;;;;;;;;-1:-1:-1;;;19894:5:0;;;;19828:76;;;;19894:5;19828:76;:::i;12771:146::-;;;;;;;;;;-1:-1:-1;12771:146:0;;;;;:::i;:::-;;:::i;19531:279::-;;;;;;;;;;-1:-1:-1;19531:279:0;;;;;:::i;:::-;;:::i;13985:277::-;;;;;;;;;;;;;:::i;20367:80::-;;;;;;;;;;-1:-1:-1;20432:10:0;;20367:80;;;2080:25:1;;;2068:2;2053:18;20367:80:0;1934:177:1;7832:30:0;;;;;;;;;;-1:-1:-1;7832:30:0;;;;-1:-1:-1;;;;;7832:30:0;;;;;;-1:-1:-1;;;;;2295:32:1;;;2277:51;;2265:2;2250:18;7832:30:0;2116:218:1;20077:88:0;;;;;;;;;;-1:-1:-1;8291:18:0;20077:88;;8792:28;;;;;;;;;;-1:-1:-1;8792:28:0;;;;-1:-1:-1;;;;;8792:28:0;;;18720:247;;;;;;;;;;-1:-1:-1;18720:247:0;;;;;:::i;:::-;;:::i;12920:292::-;;;;;;;;;;-1:-1:-1;12920:292:0;;;;;:::i;:::-;;:::i;18970:253::-;;;;;;;;;;-1:-1:-1;18970:253:0;;;;;:::i;:::-;;:::i;20978:235::-;;;;;;;;;;-1:-1:-1;20978:235:0;;;;;:::i;:::-;;:::i;19990:84::-;;;;;;;;;;-1:-1:-1;19990:84:0;;8032:1;3150:36:1;;3138:2;3123:18;19990:84:0;3008:184:1;14265:124:0;;;;;;;;;;;;;:::i;13215:202::-;;;;;;;;;;-1:-1:-1;13215:202:0;;;;;:::i;:::-;;:::i;21216:476::-;;;;;;;;;;-1:-1:-1;21216:476:0;;;;;:::i;:::-;;:::i;14395:324::-;;;;;;;;;;-1:-1:-1;14395:324:0;;;;;:::i;:::-;;:::i;7866:38::-;;;;;;;;;;;;;;;18051:385;;;;;;;;;;-1:-1:-1;18051:385:0;;;;;:::i;:::-;;:::i;20168:196::-;;;;;;;;;;-1:-1:-1;20168:196:0;;;;;:::i;:::-;;:::i;7366:133::-;;;;;;;;;;;;;:::i;16783:891::-;;;;;;;;;;-1:-1:-1;16783:891:0;;;;;:::i;:::-;;:::i;8758:30::-;;;;;;;;;;-1:-1:-1;8758:30:0;;;;-1:-1:-1;;;;;8758:30:0;;;15637:316;;;;;;;;;;-1:-1:-1;15637:316:0;;;;;:::i;:::-;;:::i;15301:333::-;;;;;;;;;;-1:-1:-1;15301:333:0;;;;;:::i;:::-;;:::i;8574:50::-;;;;;;;;;;;;;;;;7182:70;;;;;;;;;;-1:-1:-1;7220:7:0;7241:6;-1:-1:-1;;;;;7241:6:0;7182:70;;17677:371;;;;;;;;;;-1:-1:-1;17677:371:0;;;;;:::i;:::-;;:::i;13420:253::-;;;;;;;;;;-1:-1:-1;13420:253:0;;;;;:::i;:::-;;:::i;12614:154::-;;;;;;;;;;-1:-1:-1;12614:154:0;;;;;:::i;:::-;;:::i;8467:54::-;;;;;;;;;;;;;;;;19226:302;;;;;;;;;;-1:-1:-1;19226:302:0;;;;;:::i;:::-;;:::i;9769:58::-;;;;;;;;;;-1:-1:-1;9769:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;18439:278;;;;;;;;;;-1:-1:-1;18439:278:0;;;;;:::i;:::-;;:::i;15019:279::-;;;;;;;;;;-1:-1:-1;15019:279:0;;;;;:::i;:::-;;:::i;20589:189::-;;;;;;;;;;-1:-1:-1;20678:23:0;;;;;;;20703;;;;;;-1:-1:-1;;;20728:21:0;;;;;-1:-1:-1;;;20751:21:0;;;20589:189;;;;5040:4:1;5028:17;;;5010:36;;5082:17;;;5077:2;5062:18;;5055:45;5136:17;;;5116:18;;;5109:45;;;;5190:17;;;5185:2;5170:18;;5163:45;4997:3;4982:19;20589:189:0;4795:419:1;8656:59:0;;;;;;;;;;;;;;;;8724:30;;;;;;;;;;-1:-1:-1;8724:30:0;;;;-1:-1:-1;;;;;8724:30:0;;;20450:136;;;;;;;;;;-1:-1:-1;20450:136:0;;;;;:::i;:::-;-1:-1:-1;;;;;20554:18:0;;;20533:7;20554:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;20450:136;7504:223;;;;;;;;;;-1:-1:-1;7504:223:0;;;;;:::i;:::-;;:::i;20781:194::-;;;;;;;;;;-1:-1:-1;20871:24:0;;;;;;;;;20897;;;;;;-1:-1:-1;;;20923:22:0;;;;;-1:-1:-1;;;20947:22:0;;;20781:194;;15956:824;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;16048:33:0;::::1;;::::0;;;:24:::1;:33;::::0;;;;;:45;::::1;;:33;::::0;;::::1;:45;;::::0;16040:106:::1;;;;-1:-1:-1::0;;;16040:106:0::1;;;;;;;:::i;:::-;16154:8;16151:570;;;-1:-1:-1::0;;;;;16173:16:0;::::1;16192:1;16173:16:::0;;;:7:::1;:16;::::0;;;;;:20;16170:95:::1;;-1:-1:-1::0;;;;;16241:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;16221:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;16202:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;16170:95:::1;-1:-1:-1::0;;;;;16270:33:0;::::1;;::::0;;;:24:::1;:33;::::0;;;;:44;;-1:-1:-1;;16270:44:0::1;::::0;::::1;;;::::0;;16320:22:::1;:36:::0;;-1:-1:-1;16320:36:0;::::1;::::0;;;;;::::1;::::0;;-1:-1:-1;;;;;;16320:36:0::1;::::0;;::::1;::::0;;16151:570:::1;;;16379:9;16374:342;16398:22;:29:::0;16394:33;::::1;16374:342;;;16474:7;-1:-1:-1::0;;;;;16445:36:0::1;:22;16468:1;16445:25;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;16445:25:0::1;:36:::0;16441:269:::1;;16519:22;16542:29:::0;;:33:::1;::::0;16574:1:::1;::::0;16542:33:::1;:::i;:::-;16519:57;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;16491:22:::1;:25:::0;;-1:-1:-1;;;;;16519:57:0;;::::1;::::0;16514:1;;16491:25;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:85:::0;;-1:-1:-1;;;;;;16491:85:0::1;-1:-1:-1::0;;;;;16491:85:0;;::::1;;::::0;;16584:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;16612:24:::1;:33:::0;;;;:41;;-1:-1:-1;;16612:41:0::1;::::0;;16661:22:::1;:28:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;16661:28:0;;;;;-1:-1:-1;;;;;;16661:28:0::1;::::0;;;;;16697:5:::1;;16441:269;16429:3:::0;::::1;::::0;::::1;:::i;:::-;;;;16374:342;;;;16151:570;16757:7;-1:-1:-1::0;;;;;16730:45:0::1;;16766:8;16730:45;;;;800:14:1::0;793:22;775:41;;763:2;748:18;;635:187;16730:45:0::1;;;;;;;;15956:824:::0;;:::o;12771:146::-;12846:4;12857:39;6648:10;12880:7;12889:6;12857:8;:39::i;:::-;-1:-1:-1;12908:4:0;12771:146;;;;;:::o;19531:279::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;19614:21:::1;19605:6;:30;19597:87;;;::::0;-1:-1:-1;;;19597:87:0;;7258:2:1;19597:87:0::1;::::0;::::1;7240:21:1::0;7297:2;7277:18;;;7270:30;7336:34;7316:18;;;7309:62;-1:-1:-1;;;7387:18:1;;;7380:42;7439:19;;19597:87:0::1;7056:408:1::0;19597:87:0::1;19690:12;7241:6:::0;;19707:41:::1;::::0;-1:-1:-1;;;;;7241:6:0;;;;19737;;19690:12;19707:41;19690:12;19707:41;19737:6;7241;19707:41:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19689:59;;;19757:7;19753:53;;;19776:24;::::0;2080:25:1;;;19776:24:0::1;::::0;2068:2:1;2053:18;19776:24:0::1;;;;;;;19753:53;19592:218;19531:279:::0;:::o;13985:277::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;14036:16:::1;:23:::0;;-1:-1:-1;;14036:23:0::1;14055:4;14036:23;::::0;;14074:21:::1;::::0;14036:16:::1;14074:26:::0;14070:146:::1;;14141:15;14117:21;:39:::0;14192:12:::1;14171:18;:33:::0;14070:146:::1;14225:32;::::0;14251:5:::1;::::0;14225:32;;::::1;::::0;14251:5;;14225:32:::1;13985:277::o:0;18720:247::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;18815:11:::1;;18803:8;:23:::0;18795:81:::1;;;::::0;-1:-1:-1;;;18795:81:0;;7881:2:1;18795:81:0::1;::::0;::::1;7863:21:1::0;7920:2;7900:18;;;7893:30;7959:34;7939:18;;;7932:62;-1:-1:-1;;;8010:18:1;;;8003:43;8063:19;;18795:81:0::1;7679:409:1::0;18795:81:0::1;18923:11;::::0;18886:49:::1;::::0;18913:8;;18886:49:::1;::::0;;;::::1;18940:11;:22:::0;18720:247::o;12920:292::-;13019:4;13030:36;13040:6;13048:9;13059:6;13030:9;:36::i;:::-;13071:120;13080:6;6648:10;13102:88;13140:6;13102:88;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13102:19:0;;;;;;:11;:19;;;;;;;;6648:10;13102:33;;;;;;;;;;:37;:88::i;:::-;13071:8;:120::i;:::-;-1:-1:-1;13203:4:0;12920:292;;;;;:::o;18970:253::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;19060:15:::1;;19048:8;:27:::0;19040:89:::1;;;::::0;-1:-1:-1;;;19040:89:0;;8295:2:1;19040:89:0::1;::::0;::::1;8277:21:1::0;8334:2;8314:18;;;8307:30;8373:34;8353:18;;;8346:62;-1:-1:-1;;;8424:18:1;;;8417:47;8481:19;;19040:89:0::1;8093:413:1::0;19040:89:0::1;19171:15;::::0;19139:48:::1;::::0;19161:8;;19139:48:::1;::::0;;;::::1;19192:15;:26:::0;18970:253::o;20978:235::-;21044:7;21077;;21066;:18;;21058:79;;;;-1:-1:-1;;;21058:79:0;;8713:2:1;21058:79:0;;;8695:21:1;8752:2;8732:18;;;8725:30;8791:34;8771:18;;;8764:62;-1:-1:-1;;;8842:18:1;;;8835:46;8898:19;;21058:79:0;8511:412:1;21058:79:0;21142:19;21165:10;:8;:10::i;:::-;21142:33;-1:-1:-1;21187:21:0;21142:33;21187:7;:21;:::i;:::-;21180:28;20978:235;-1:-1:-1;;;20978:235:0:o;14265:124::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;14318:16:::1;:24:::0;;-1:-1:-1;;14318:24:0::1;::::0;;14352:32:::1;::::0;14318:24;;14337:5:::1;::::0;14352:32:::1;::::0;14337:5;;14352:32:::1;14265:124::o:0;13215:202::-;6648:10;13305:4;13345:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;13345:34:0;;;;;;;;;;13305:4;;13315:81;;13337:7;;13345:50;;13384:10;13345:38;:50::i;21216:476::-;21309:7;8291:18;21331:7;:18;;21323:68;;;;-1:-1:-1;;;21323:68:0;;9387:2:1;21323:68:0;;;9369:21:1;9426:2;9406:18;;;9399:30;9465:34;9445:18;;;9438:62;-1:-1:-1;;;9516:18:1;;;9509:35;9561:19;;21323:68:0;9185:401:1;21323:68:0;21396:19;21418:10;:8;:10::i;:::-;21396:32;-1:-1:-1;21433:15:0;21452:21;21396:32;21452:7;:21;:::i;:::-;21433:40;;21483:17;21478:210;;21515:7;-1:-1:-1;21508:14:0;;-1:-1:-1;21508:14:0;21478:210;21574:9;;21543:17;;21592:11;;21586:3;;21564:19;;-1:-1:-1;;;21574:9:0;;;;21564:7;:19;:::i;:::-;:25;;;;:::i;:::-;:39;;;;:::i;:::-;21543:60;-1:-1:-1;21609:23:0;21635:19;21543:60;21635:7;:19;:::i;:::-;21609:45;-1:-1:-1;21660:22:0;;-1:-1:-1;;;;21660:22:0;14395:324;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14497:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:47;::::1;;:38;::::0;;::::1;:47;;::::0;14489:114:::1;;;::::0;-1:-1:-1;;;14489:114:0;;9966:2:1;14489:114:0::1;::::0;::::1;9948:21:1::0;10005:2;9985:18;;;9978:30;10044:34;10024:18;;;10017:62;-1:-1:-1;;;10095:18:1;;;10088:52;10157:19;;14489:114:0::1;9764:418:1::0;14489:114:0::1;-1:-1:-1::0;;;;;14608:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:46;;-1:-1:-1;;14608:46:0::1;::::0;::::1;;::::0;;::::1;::::0;;;14664:50;;775:41:1;;;14664:50:0::1;::::0;748:18:1;14664:50:0::1;635:187:1::0;18051:385:0;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;18205:110:::1;18229:5;18236:19;18257;18278:17;18297;18205:23;:110::i;:::-;18325:106;::::0;-1:-1:-1;;;10389:28:1;;10442:2;10433:12;18325:106:0::1;;::::0;;;;;::::1;::::0;;5040:4:1;5028:17;;;5010:36;;5082:17;;;5077:2;5062:18;;5055:45;5136:17;;;5116:18;;;5109:45;5190:17;;5185:2;5170:18;;5163:45;18325:106:0;;;;::::1;::::0;;;;;4997:3:1;18325:106:0;;::::1;18051:385:::0;;;;:::o;20168:196::-;-1:-1:-1;;;;;20252:33:0;;20234:7;20252:33;;;:24;:33;;;;;;;;20248:62;;;-1:-1:-1;;;;;;20294:16:0;;;;;:7;:16;;;;;;;20168:196::o;20248:62::-;-1:-1:-1;;;;;20342:16:0;;;;;;:7;:16;;;;;;20322:37;;:19;:37::i;7366:133::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;7467:1:::1;7451:6:::0;;7430:40:::1;::::0;-1:-1:-1;;;;;7451:6:0;;::::1;::::0;7430:40:::1;::::0;7467:1;;7430:40:::1;7492:1;7475:19:::0;;-1:-1:-1;;;;;;7475:19:0::1;::::0;;7366:133::o;16783:891::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;16912:15:::1;::::0;-1:-1:-1;;;;;16912:37:0;;::::1;:15:::0;::::1;:37;16909:257;;-1:-1:-1::0;;;;;16965:32:0;::::1;16957:82;;;::::0;-1:-1:-1;;;16957:82:0;;10658:2:1;16957:82:0::1;::::0;::::1;10640:21:1::0;10697:2;10677:18;;;10670:30;10736:34;10716:18;;;10709:62;-1:-1:-1;;;10787:18:1;;;10780:35;10832:19;;16957:82:0::1;10456:401:1::0;16957:82:0::1;17102:15;::::0;17050:68:::1;::::0;-1:-1:-1;;;11064:30:1;;-1:-1:-1;;;;;17102:15:0;;::::1;::::0;17050:68;::::1;::::0;11119:2:1;11110:12;17050:68:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;17124:15;:36:::0;;-1:-1:-1;;;;;;17124:36:0::1;-1:-1:-1::0;;;;;17124:36:0;::::1;;::::0;;16909:257:::1;17173:15;::::0;-1:-1:-1;;;;;17173:37:0;;::::1;:15:::0;::::1;:37;17170:257;;-1:-1:-1::0;;;;;17226:32:0;::::1;17218:82;;;::::0;-1:-1:-1;;;17218:82:0;;11335:2:1;17218:82:0::1;::::0;::::1;11317:21:1::0;11374:2;11354:18;;;11347:30;11413:34;11393:18;;;11386:62;-1:-1:-1;;;11464:18:1;;;11457:35;11509:19;;17218:82:0::1;11133:401:1::0;17218:82:0::1;17363:15;::::0;17311:68:::1;::::0;-1:-1:-1;;;11741:30:1;;-1:-1:-1;;;;;17363:15:0;;::::1;::::0;17311:68;::::1;::::0;11796:2:1;11787:12;17311:68:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;17385:15;:36:::0;;-1:-1:-1;;;;;;17385:36:0::1;-1:-1:-1::0;;;;;17385:36:0;::::1;;::::0;;17170:257:::1;17434:13;::::0;-1:-1:-1;;;;;17434:33:0;;::::1;:13:::0;::::1;:33;17431:239;;-1:-1:-1::0;;;;;17483:30:0;::::1;17475:78;;;::::0;-1:-1:-1;;;17475:78:0;;12012:2:1;17475:78:0::1;::::0;::::1;11994:21:1::0;12051:2;12031:18;;;12024:30;12090:34;12070:18;;;12063:62;-1:-1:-1;;;12141:18:1;;;12134:33;12184:19;;17475:78:0::1;11810:399:1::0;17475:78:0::1;17612:13;::::0;17564:62:::1;::::0;-1:-1:-1;;;12416:28:1;;-1:-1:-1;;;;;17612:13:0;;::::1;::::0;17564:62;::::1;::::0;12469:2:1;12460:12;17564:62:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;17632:13;:32:::0;;-1:-1:-1;;;;;;17632:32:0::1;-1:-1:-1::0;;;;;17632:32:0;::::1;;::::0;;17431:239:::1;16783:891:::0;;;:::o;15637:316::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15736:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:50;::::1;;:38;::::0;;::::1;:50;;::::0;15728:111:::1;;;;-1:-1:-1::0;;;15728:111:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;15844:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:49;;-1:-1:-1;;15844:49:0::1;::::0;::::1;;::::0;;::::1;::::0;;;15903:45;;775:41:1;;;15903:45:0::1;::::0;748:18:1;15903:45:0::1;635:187:1::0;15301:333:0;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15405:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;:55;::::1;;:43;::::0;;::::1;:55;;::::0;15397:116:::1;;;;-1:-1:-1::0;;;15397:116:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;15518:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;;;;:54;;-1:-1:-1;;15518:54:0::1;::::0;::::1;;::::0;;::::1;::::0;;;15582:47;;775:41:1;;;15582:47:0::1;::::0;748:18:1;15582:47:0::1;635:187:1::0;17677:371:0;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;17827:105:::1;17850:5;17857:18;17877;17897:16;17915;17827:22;:105::i;:::-;17942:101;::::0;-1:-1:-1;;;12685:27:1;;12737:2;12728:12;17942:101:0::1;12483:263:1::0;13420:253:0;13515:4;13526:126;6648:10;13548:7;13556:95;13595:15;13556:95;;;;;;;;;;;;;;;;;6648:10;13556:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;13556:34:0;;;;;;;;;;;;:38;:95::i;12614:154::-;12694:4;12705:42;6648:10;12729:9;12740:6;12705:9;:42::i;19226:302::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;19324:23:::1;;19312:8;:35:::0;19304:105:::1;;;::::0;-1:-1:-1;;;19304:105:0;;12953:2:1;19304:105:0::1;::::0;::::1;12935:21:1::0;12992:2;12972:18;;;12965:30;13031:34;13011:18;;;13004:62;13102:27;13082:18;;;13075:55;13147:19;;19304:105:0::1;12751:421:1::0;19304:105:0::1;19460:23;::::0;19419:65:::1;::::0;19450:8;;19419:65:::1;::::0;;;::::1;19489:23;:34:::0;19226:302::o;18439:278::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;18539:15:::1;::::0;-1:-1:-1;;;;;18539:15:0;;::::1;18517:38:::0;;::::1;::::0;18509:92:::1;;;::::0;-1:-1:-1;;;18509:92:0;;13379:2:1;18509:92:0::1;::::0;::::1;13361:21:1::0;13418:2;13398:18;;;13391:30;13457:34;13437:18;;;13430:62;-1:-1:-1;;;13508:18:1;;;13501:39;13557:19;;18509:92:0::1;13177:405:1::0;18509:92:0::1;18653:15;::::0;18611:59:::1;::::0;-1:-1:-1;;;;;18653:15:0;;::::1;::::0;18611:59;::::1;::::0;::::1;::::0;18653:15:::1;::::0;18611:59:::1;18675:15;:37:::0;;-1:-1:-1;;;;;;18675:37:0::1;-1:-1:-1::0;;;;;18675:37:0;;;::::1;::::0;;;::::1;::::0;;18439:278::o;15019:279::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15108:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;:39;::::1;;:27;::::0;;::::1;:39;;::::0;15100:100:::1;;;;-1:-1:-1::0;;;15100:100:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;15205:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:38;;-1:-1:-1;;15205:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;15253:40;;775:41:1;;;15253:40:0::1;::::0;748:18:1;15253:40:0::1;635:187:1::0;7504:223:0;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7587:22:0;::::1;7579:73;;;::::0;-1:-1:-1;;;7579:73:0;;13789:2:1;7579:73:0::1;::::0;::::1;13771:21:1::0;13828:2;13808:18;;;13801:30;13867:34;13847:18;;;13840:62;-1:-1:-1;;;13918:18:1;;;13911:36;13964:19;;7579:73:0::1;13587:402:1::0;7579:73:0::1;7683:6;::::0;;7662:38:::1;::::0;-1:-1:-1;;;;;7662:38:0;;::::1;::::0;7683:6;::::1;::::0;7662:38:::1;::::0;::::1;7705:6;:17:::0;;-1:-1:-1;;;;;;7705:17:0::1;-1:-1:-1::0;;;;;7705:17:0;;;::::1;::::0;;;::::1;::::0;;7504:223::o;2663:123::-;2721:7;2742:39;2746:1;2749;2742:39;;;;;;;;;;;;;;;;;:3;:39::i;13676:306::-;-1:-1:-1;;;;;13761:19:0;;13753:68;;;;-1:-1:-1;;;13753:68:0;;14196:2:1;13753:68:0;;;14178:21:1;14235:2;14215:18;;;14208:30;14274:34;14254:18;;;14247:62;-1:-1:-1;;;14325:18:1;;;14318:34;14369:19;;13753:68:0;13994:400:1;13753:68:0;-1:-1:-1;;;;;13834:21:0;;13826:68;;;;-1:-1:-1;;;13826:68:0;;14601:2:1;13826:68:0;;;14583:21:1;14640:2;14620:18;;;14613:30;14679:34;14659:18;;;14652:62;-1:-1:-1;;;14730:18:1;;;14723:32;14772:19;;13826:68:0;14399:398:1;13826:68:0;-1:-1:-1;;;;;13899:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;13945:32;;2080:25:1;;;13945:32:0;;2053:18:1;13945:32:0;;;;;;;13676:306;;;:::o;21707:1460::-;-1:-1:-1;;;;;21800:18:0;;21792:68;;;;-1:-1:-1;;;21792:68:0;;15004:2:1;21792:68:0;;;14986:21:1;15043:2;15023:18;;;15016:30;15082:34;15062:18;;;15055:62;-1:-1:-1;;;15133:18:1;;;15126:35;15178:19;;21792:68:0;14802:401:1;21792:68:0;-1:-1:-1;;;;;21873:16:0;;21865:64;;;;-1:-1:-1;;;21865:64:0;;15410:2:1;21865:64:0;;;15392:21:1;15449:2;15429:18;;;15422:30;15488:34;15468:18;;;15461:62;-1:-1:-1;;;15539:18:1;;;15532:33;15582:19;;21865:64:0;15208:399:1;21865:64:0;21951:1;21942:6;:10;21934:70;;;;-1:-1:-1;;;21934:70:0;;15814:2:1;21934:70:0;;;15796:21:1;15853:2;15833:18;;;15826:30;15892:34;15872:18;;;15865:62;-1:-1:-1;;;15943:18:1;;;15936:45;15998:19;;21934:70:0;15612:411:1;21934:70:0;22027:15;22037:4;22027:9;:15::i;:::-;22017:6;:25;;22009:77;;;;-1:-1:-1;;;22009:77:0;;16230:2:1;22009:77:0;;;16212:21:1;16269:2;16249:18;;;16242:30;16308:34;16288:18;;;16281:62;-1:-1:-1;;;16359:18:1;;;16352:37;16406:19;;22009:77:0;16028:403:1;22009:77:0;-1:-1:-1;;;;;22097:35:0;;;;;;:29;:35;;;;;;;;22096:36;:74;;;;-1:-1:-1;;;;;;22137:33:0;;;;;;:29;:33;;;;;;;;22136:34;22096:74;22093:515;;;22186:16;;;;22178:65;;;;-1:-1:-1;;;22178:65:0;;16638:2:1;22178:65:0;;;16620:21:1;16677:2;16657:18;;;16650:30;16716:34;16696:18;;;16689:62;-1:-1:-1;;;16767:18:1;;;16760:34;16811:19;;22178:65:0;16436:400:1;22178:65:0;-1:-1:-1;;;;;22254:38:0;;;;;;:34;:38;;;;;;;;22253:39;:84;;;;-1:-1:-1;;;;;;22297:40:0;;;;;;:34;:40;;;;;;;;22296:41;22253:84;22249:182;;;22364:11;;22354:6;:21;;22346:78;;;;-1:-1:-1;;;22346:78:0;;17043:2:1;22346:78:0;;;17025:21:1;17082:2;17062:18;;;17055:30;17121:34;17101:18;;;17094:62;-1:-1:-1;;;17172:18:1;;;17165:42;17224:19;;22346:78:0;16841:408:1;22346:78:0;-1:-1:-1;;;;;22441:33:0;;;;;;:29;:33;;;;;;;;22436:167;;22519:15;;22508:6;22492:13;22502:2;22492:9;:13::i;:::-;:22;;;;:::i;:::-;22491:43;;22483:113;;;;-1:-1:-1;;;22483:113:0;;17589:2:1;22483:113:0;;;17571:21:1;17628:2;17608:18;;;17601:30;17667:34;17647:18;;;17640:62;17738:27;17718:18;;;17711:55;17783:19;;22483:113:0;17387:421:1;22483:113:0;-1:-1:-1;;;;;22627:31:0;;;;;;;:25;:31;;;;;;;22660:29;;;;;;;;22614:86;;22627:31;;;;;22660:29;22686:2;22653:4;22614:12;:86::i;:::-;22705:12;22748:23;;22720:24;22738:4;22720:9;:24::i;:::-;22787:16;;22720:51;-1:-1:-1;22720:51:0;;-1:-1:-1;22787:16:0;;:31;;;;;22811:7;22787:31;:49;;;;-1:-1:-1;22827:9:0;;;;22826:10;22787:49;:70;;;;-1:-1:-1;22844:9:0;;-1:-1:-1;;;22844:9:0;;;;:13;;22787:70;:107;;;;-1:-1:-1;;;;;;22865:29:0;;;;;;:25;:29;;;;;;;;22787:107;22778:196;;;22906:9;:16;;-1:-1:-1;;22906:16:0;22918:4;22906:16;;;22928:17;:15;:17::i;:::-;22951:9;:17;;-1:-1:-1;;22951:17:0;;;22778:196;22996:9;;22980:12;;22996:9;;22995:10;:30;;;;-1:-1:-1;23009:16:0;;;;22995:30;-1:-1:-1;;;;;23035:24:0;;;;;;:18;:24;;;;;;22980:45;;-1:-1:-1;23035:24:0;;;:50;;-1:-1:-1;;;;;;23063:22:0;;;;;;:18;:22;;;;;;;;23035:50;23032:81;;;-1:-1:-1;23102:5:0;23032:81;23119:41;23134:4;23140:2;23144:6;23152:7;23119:14;:41::i;:::-;21787:1380;;21707:1460;;;:::o;2071:171::-;2157:7;2187:12;2179:6;;;;2171:29;;;;-1:-1:-1;;;2171:29:0;;;;;;;;:::i;:::-;-1:-1:-1;2205:9:0;2217:5;2221:1;2217;:5;:::i;:::-;2205:17;2071:171;-1:-1:-1;;;;;2071:171:0:o;25002:149::-;25044:7;25059:15;25076;25095:19;:17;:19::i;:::-;25058:56;;-1:-1:-1;25058:56:0;-1:-1:-1;25126:20:0;25058:56;;25126:11;:20::i;:::-;25119:27;;;;25002:149;:::o;1774:160::-;1832:7;;1858:5;1862:1;1858;:5;:::i;:::-;1846:17;;1881:1;1876;:6;;1868:46;;;;-1:-1:-1;;;1868:46:0;;18015:2:1;1868:46:0;;;17997:21:1;18054:2;18034:18;;;18027:30;18093:29;18073:18;;;18066:57;18140:18;;1868:46:0;17813:351:1;26890:1071:0;27089:22;;;;:45;;;;:22;;;;;:45;27085:222;;27147:104;;-1:-1:-1;;;18371:33:1;;18429:2;18420:12;27147:104:0;;;;;;;;27190:22;;;;27236:14;;27147:104;;27190:22;;;;;;;;27147:104;;;;-1:-1:-1;;;;;;;;;;;27147:104:0;;;27236:14;;;27147:104;:::i;:::-;;;;;;;;27257:22;;;:44;;-1:-1:-1;;27257:44:0;;;;;;;;;27085:222;27315:22;;;;:45;;;;:22;;;;;:45;27311:222;;27373:104;;-1:-1:-1;;;18859:33:1;;18917:2;18908:12;27373:104:0;;;;;;;;27416:22;;;;27462:14;;27373:104;;27416:22;;;;;;;;27373:104;;;;-1:-1:-1;;;;;;;;;;;27373:104:0;;;27462:14;;;27373:104;:::i;:::-;;;;;;;;27483:22;;;:44;;-1:-1:-1;;27483:44:0;;;;;;;;;27311:222;27541:20;;;;:41;;;;-1:-1:-1;;;27541:20:0;;;;:41;27537:208;;27595:98;;-1:-1:-1;;;19133:31:1;;19189:2;19180:12;27595:98:0;;;;;;;;27636:20;;;;27678:14;;27595:98;;27636:20;-1:-1:-1;;;27636:20:0;;;;;;27595:98;;;;-1:-1:-1;;;;;;;;;;;27595:98:0;;;27678:14;;;27595:98;:::i;:::-;;;;;;;;27699:20;;;:40;;-1:-1:-1;;27699:40:0;-1:-1:-1;;;27699:40:0;;;;;;;27537:208;27753:20;;;;:41;;;;-1:-1:-1;;;27753:20:0;;;;:41;27749:208;;27807:98;;-1:-1:-1;;;19405:31:1;;19461:2;19452:12;27807:98:0;;;;;;;;27848:20;;;;27890:14;;27807:98;;27848:20;-1:-1:-1;;;27848:20:0;;;;;;27807:98;;;;-1:-1:-1;;;;;;;;;;;27807:98:0;;;27890:14;;;27807:98;:::i;:::-;;;;;;;;27911:20;;;:40;;;;;-1:-1:-1;;;27911:40:0;-1:-1:-1;;27911:40:0;;;;;;26890:1071;;;;;:::o;27964:1038::-;28158:21;;;;:43;;;;:21;;:43;28154:215;;28214:101;;-1:-1:-1;;;19677:32:1;;19734:2;19725:12;28214:101:0;;;;;;;;28256:21;;;;28300:14;;28214:101;;28256:21;;;;;28214:101;;;;-1:-1:-1;;;;;;;;;;;28214:101:0;;;28300:14;;;28214:101;:::i;:::-;;;;;;;;28321:21;;;:42;;-1:-1:-1;;28321:42:0;;;;;;;28154:215;28377:21;;;;:43;;;;:21;;;;;:43;28373:215;;28433:101;;-1:-1:-1;;;19950:32:1;;20007:2;19998:12;28433:101:0;;;;;;;;28475:21;;;;28519:14;;28433:101;;28475:21;;;;;;;;28433:101;;;;-1:-1:-1;;;;;;;;;;;28433:101:0;;;28519:14;;;28433:101;:::i;:::-;;;;;;;;28540:21;;;:42;;-1:-1:-1;;28540:42:0;;;;;;;;;28373:215;28596:19;;;;:39;;;;-1:-1:-1;;;28596:19:0;;;;:39;28592:201;;28648:95;;-1:-1:-1;;;20223:30:1;;20278:2;20269:12;28648:95:0;;;;;;;;28688:19;;;;28728:14;;28648:95;;28688:19;-1:-1:-1;;;28688:19:0;;;;;;28648:95;;;;-1:-1:-1;;;;;;;;;;;28648:95:0;;;28728:14;;;28648:95;:::i;:::-;;;;;;;;28749:19;;;:38;;-1:-1:-1;;28749:38:0;-1:-1:-1;;;28749:38:0;;;;;;;28592:201;28801:19;;;;:39;;;;-1:-1:-1;;;28801:19:0;;;;:39;28797:201;;28853:95;;-1:-1:-1;;;20494:30:1;;20549:2;20540:12;28853:95:0;;;;;;;;28893:19;;;;28933:14;;28853:95;;28893:19;-1:-1:-1;;;28893:19:0;;;;;;28853:95;;;;-1:-1:-1;;;;;;;;;;;28853:95:0;;;28933:14;;;28853:95;:::i;:::-;;;;;;;;28954:19;;;:38;;;;;-1:-1:-1;;;28954:38:0;-1:-1:-1;;28954:38:0;;;;;;27964:1038;;;;;:::o;2791:251::-;2877:7;2906:12;2899:5;2891:28;;;;-1:-1:-1;;;2891:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2924:9:0;2936:5;2940:1;2936;:5;:::i;25719:1168::-;25815:13;:17;;-1:-1:-1;;25897:15:0;;;25925:385;;;;25998:1;25976:18;;25961:12;:33;;;;:::i;:::-;:38;25957:348;;26020:13;:19;;-1:-1:-1;;26020:19:0;26036:3;26020:19;;;25957:348;;;26100:23;;26084:13;:39;;26100:23;;;;-1:-1:-1;;26142:39:0;;;;;;;26100:23;26158;;;;;;26142:39;;;;;;;;-1:-1:-1;;26254:35:0;-1:-1:-1;;;26214:21:0;;;;26200:35;;;;-1:-1:-1;;26254:35:0;;-1:-1:-1;;;26268:21:0;;;;26254:35;;;;;;;;25957:348;26318:10;26314:198;;;26352:24;;26336:13;:40;;26352:24;;;;;;;;-1:-1:-1;;26382:40:0;;;;;;;26398:24;;;;;;26382:40;;;;;-1:-1:-1;;26470:36:0;-1:-1:-1;;;26442:22:0;;;;26428:36;;-1:-1:-1;;26470:36:0;;-1:-1:-1;;;26484:22:0;;;;;;;26470:36;;;;;;;26314:198;26521:10;26520:11;:27;;;;;26536:11;26535:12;26520:27;:105;;;;-1:-1:-1;;;;;;26552:35:0;;;;;;:29;:35;;;;;;;;;:72;;-1:-1:-1;;;;;;26591:33:0;;;;;;:29;:33;;;;;;;;26552:72;26516:293;;;26649:24;;26633:13;:40;;26649:24;;;;;;;;-1:-1:-1;;26679:40:0;;;;;;;26695:24;;;;;;26679:40;;;;;-1:-1:-1;;26767:36:0;-1:-1:-1;;;26739:22:0;;;;26725:36;;-1:-1:-1;;26767:36:0;;-1:-1:-1;;;26781:22:0;;;;;;;26767:36;;;;;;;26516:293;26871:11;;;;;;;;;26857;;;;;;26825:29;;26871:11;26841:13;;;;;26825;:29;:::i;:::-;:43;;;;:::i;:::-;:57;;;;:::i;:::-;26813:9;;:69;;;;;;;;;;;;;;;;;;25719:1168;;;;:::o;29005:1431::-;29045:23;29071:24;29089:4;29071:9;:24::i;:::-;29178:9;;29045:50;;-1:-1:-1;29128:21:0;;29178:9;-1:-1:-1;;;29178:9:0;;;;;29218:13;;;;29178:9;29262:13;;;;;29305:11;;;;;;29345;;;;;29100:25;29305:11;29178:9;29389:31;29218:13;29045:50;29389:31;:::i;:::-;:43;;;;:::i;:::-;:47;;;;:::i;:::-;29363:73;-1:-1:-1;29441:20:0;29464:33;29363:73;29464:15;:33;:::i;:::-;29441:56;;29504:31;29522:12;29504:17;:31::i;:::-;29542:27;29572:41;29596:17;29572:21;:41;:::i;:::-;29542:71;-1:-1:-1;29618:19:0;29683:15;29657:21;29677:1;29657:17;:21;:::i;:::-;29640:39;;:13;:39;:::i;:::-;:59;;;;:::i;:::-;29618:81;;;;29704:26;29789:1;29775:11;29755:17;29733:39;;:19;:39;;;;:::i;:::-;:53;;;;:::i;:::-;:57;;;;:::i;:::-;29704:86;-1:-1:-1;29795:26:0;29866:11;29824:39;;;;:19;:39;:::i;:::-;:53;;;;:::i;:::-;29795:82;-1:-1:-1;29882:24:0;29932:39;29795:82;29932:18;:39;:::i;:::-;29909:63;;:19;:63;:::i;:::-;29987:15;;29979:53;;29882:90;;-1:-1:-1;;;;;;29987:15:0;;29979:53;;;;;30013:18;;29987:15;29979:53;29987:15;29979:53;30013:18;29987:15;29979:53;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30045:13:0;;30037:49;;-1:-1:-1;;;;;30045:13:0;;;;30037:49;;;;;30069:16;;30045:13;30037:49;30045:13;30037:49;30069:16;30045:13;30037:49;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30097:19:0;;30093:163;;30124:50;30138:15;30155:18;30124:13;:50::i;:::-;30185:65;;;21344:25:1;;;21400:2;21385:18;;21378:34;;;21428:18;;;21421:34;;;30185:65:0;;21332:2:1;21317:18;30185:65:0;;;;;;;30093:163;-1:-1:-1;;30262:9:0;:25;;;30402:29;;;;;-1:-1:-1;;30368:29:0;;;;;30402;;;;-1:-1:-1;;30330:33:0;;;30262:25;30330:33;-1:-1:-1;;30262:25:0;;;-1:-1:-1;;;30262:25:0;30330:33;;;;-1:-1:-1;;30330:33:0;;;;;;;30292;;;;30330;;;;;;;;30402:29;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;29005:1431:0:o;23170:740::-;23273:23;23297:12;23311:14;23329:29;23341:7;23350;23329:11;:29::i;:::-;23272:86;;;;;;23364:15;23381:23;23406:12;23420:14;23438:46;23450:7;23459:4;23465:6;23473:10;:8;:10::i;:::-;23438:11;:46::i;:::-;-1:-1:-1;;;;;23495:32:0;;;;;;:24;:32;;;;;;23363:121;;-1:-1:-1;23363:121:0;;-1:-1:-1;23363:121:0;-1:-1:-1;23363:121:0;-1:-1:-1;23495:32:0;;23491:93;;;-1:-1:-1;;;;;23553:15:0;;;;;;:7;:15;;;;;;:25;;23571:7;;23553:25;:::i;:::-;-1:-1:-1;;;;;23535:15:0;;;;;;:7;:15;;;;;:43;23491:93;-1:-1:-1;;;;;23592:35:0;;;;;;:24;:35;;;;;;;;23588:110;;;-1:-1:-1;;;;;23656:18:0;;;;;;:7;:18;;;;;;:36;;23677:15;;23656:36;:::i;:::-;-1:-1:-1;;;;;23635:18:0;;;;;;:7;:18;;;;;:57;23588:110;-1:-1:-1;;;;;23720:15:0;;;;;;:7;:15;;;;;;:25;;23738:7;;23720:25;:::i;:::-;-1:-1:-1;;;;;23702:15:0;;;;;;;:7;:15;;;;;;:43;;;;23771:18;;;;;;;:36;;23792:15;;23771:36;:::i;:::-;-1:-1:-1;;;;;23750:18:0;;;;;;:7;:18;;;;;:57;23812:39;23824:4;23830;23836:6;23844;23812:11;:39::i;:::-;23878:9;-1:-1:-1;;;;;23861:44:0;23870:6;-1:-1:-1;;;;;23861:44:0;;23889:15;23861:44;;;;2080:25:1;;2068:2;2053:18;;1934:177;23861:44:0;;;;;;;;23267:643;;;;;;;23170:740;;;;:::o;25154:562::-;25246:7;;25205;;;;8291:18;25205:7;25288:331;25312:22;:29;25308:33;;25288:331;;;25401:7;25364;:34;25372:22;25395:1;25372:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;25372:25:0;25364:34;;;;;;;;;;;;;:44;;:97;;;25454:7;25417;:34;25425:22;25448:1;25425:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;25425:25:0;25417:34;;;;;;;;;;;;;:44;25364:97;25354:139;;;-1:-1:-1;;25476:7:0;;;8291:18;;-1:-1:-1;25154:562:0;-1:-1:-1;;25154:562:0:o;25354:139::-;25519:7;:34;25527:22;25550:1;25527:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;25527:25:0;25519:34;;;;;;;;;;;;;25509:44;;:7;:44;:::i;:::-;25499:54;;25579:7;:34;25587:22;25610:1;25587:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;25587:25:0;25579:34;;;;;;;;;;;;;25569:44;;:7;:44;:::i;:::-;25559:54;-1:-1:-1;25343:3:0;;;;:::i;:::-;;;;25288:331;;;;8291:18;25637:7;;:17;;;;:::i;:::-;25627:7;:27;25623:58;;;-1:-1:-1;;25664:7:0;;;8291:18;;-1:-1:-1;25154:562:0;-1:-1:-1;25154:562:0:o;25623:58::-;25694:7;;25703;;-1:-1:-1;25154:562:0;-1:-1:-1;25154:562:0:o;30439:416::-;30524:16;;;30538:1;30524:16;;;;;;;;30500:21;;30524:16;;;;;;;;;;-1:-1:-1;30524:16:0;30500:40;;30563:4;30545;30550:1;30545:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30545:23:0;;;:7;;;;;;;;;;:23;;;;30583:15;;:22;;;-1:-1:-1;;;30583:22:0;;;;:15;;;;;:20;;:22;;;;;30545:7;;30583:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30573:4;30578:1;30573:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30573:32:0;;;:7;;;;;;;;;:32;30642:15;;30610:62;;30627:4;;30642:15;30660:11;30610:8;:62::i;:::-;30677:15;;:173;;-1:-1:-1;;;30677:173:0;;-1:-1:-1;;;;;30677:15:0;;;;:66;;:173;;30749:11;;30677:15;;30801:4;;30819;;30830:15;;30677:173;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30495:360;30439:416;:::o;30858:348::-;30966:15;;30934:62;;30951:4;;-1:-1:-1;;;;;30966:15:0;30984:11;30934:8;:62::i;:::-;31001:15;;31160;;31001:200;;-1:-1:-1;;;31001:200:0;;31064:4;31001:200;;;23180:34:1;23230:18;;;23223:34;;;31001:15:0;23273:18:1;;;23266:34;;;23316:18;;;23309:34;-1:-1:-1;;;;;31160:15:0;;;23359:19:1;;;23352:44;31181:15:0;23412:19:1;;;23405:35;31001:15:0;;;:31;;31040:9;;23114:19:1;;31001:200:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;24191:403::-;24265:7;24273;24281;24299;24294:296;;-1:-1:-1;24322:7:0;;-1:-1:-1;24331:1:0;;-1:-1:-1;24331:1:0;24314:22;;24294:296;24382:11;;24357:12;;24396:3;;24372:21;;24382:11;;;;;24372:7;:21;:::i;:::-;:27;;;;:::i;:::-;24465:11;;24357:42;;-1:-1:-1;24405:14:0;;24480:3;;24465:11;;;;;;;24433:29;;24465:11;24449:13;;;;;24433;:29;:::i;:::-;:43;;;;:::i;:::-;24422:55;;;;:7;:55;:::i;:::-;:61;;;;:::i;:::-;24405:78;-1:-1:-1;24489:23:0;24526:13;24405:78;24526:4;:13;:::i;:::-;24515:25;;:7;:25;:::i;:::-;24489:51;-1:-1:-1;24571:4:0;;-1:-1:-1;24577:6:0;-1:-1:-1;24546:38:0;;-1:-1:-1;24546:38:0;24294:296;24191:403;;;;;:::o;24597:402::-;24726:7;;;;;24785:21;24795:11;24785:7;:21;:::i;:::-;24767:39;-1:-1:-1;24811:12:0;24826:18;24833:11;24826:4;:18;:::i;:::-;24811:33;-1:-1:-1;24849:14:0;24866:20;24875:11;24866:6;:20;:::i;:::-;24849:37;-1:-1:-1;24891:23:0;24928:13;24849:37;24928:4;:13;:::i;:::-;24917:25;;:7;:25;:::i;:::-;24955:7;;;;-1:-1:-1;24981:4:0;;-1:-1:-1;24981:4:0;-1:-1:-1;24597:402:0;;-1:-1:-1;;;;;;24597:402:0:o;23913:275::-;24018:4;24007:7;;:15;;;;;;;:::i;:::-;;;;;;;;24041:4;24027:10;;:18;;;;;;;:::i;:::-;;;;-1:-1:-1;;24095:4:0;24062:39;;;;:24;:39;;;;;;;;24058:89;;;24125:4;24109:22;;;;:7;:22;;;;;:32;;24135:6;;24109:22;:32;;24135:6;;24109:32;:::i;:::-;;;;-1:-1:-1;;24058:89:0;24167:4;24151:22;;;;:7;:22;;;;;:32;;24177:6;;24151:22;:32;;24177:6;;24151:32;:::i;:::-;;;;-1:-1:-1;;;;;;23913:275:0:o;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;69:70;14:131;:::o;150:160::-;215:20;;271:13;;264:21;254:32;;244:60;;300:1;297;290:12;244:60;150:160;;;:::o;315:315::-;380:6;388;441:2;429:9;420:7;416:23;412:32;409:52;;;457:1;454;447:12;409:52;496:9;483:23;515:31;540:5;515:31;:::i;:::-;565:5;-1:-1:-1;589:35:1;620:2;605:18;;589:35;:::i;:::-;579:45;;315:315;;;;;:::o;827:597::-;939:4;968:2;997;986:9;979:21;1029:6;1023:13;1072:6;1067:2;1056:9;1052:18;1045:34;1097:1;1107:140;1121:6;1118:1;1115:13;1107:140;;;1216:14;;;1212:23;;1206:30;1182:17;;;1201:2;1178:26;1171:66;1136:10;;1107:140;;;1265:6;1262:1;1259:13;1256:91;;;1335:1;1330:2;1321:6;1310:9;1306:22;1302:31;1295:42;1256:91;-1:-1:-1;1408:2:1;1387:15;-1:-1:-1;;1383:29:1;1368:45;;;;1415:2;1364:54;;827:597;-1:-1:-1;;;827:597:1:o;1429:315::-;1497:6;1505;1558:2;1546:9;1537:7;1533:23;1529:32;1526:52;;;1574:1;1571;1564:12;1526:52;1613:9;1600:23;1632:31;1657:5;1632:31;:::i;:::-;1682:5;1734:2;1719:18;;;;1706:32;;-1:-1:-1;;;1429:315:1:o;1749:180::-;1808:6;1861:2;1849:9;1840:7;1836:23;1832:32;1829:52;;;1877:1;1874;1867:12;1829:52;-1:-1:-1;1900:23:1;;1749:180;-1:-1:-1;1749:180:1:o;2547:456::-;2624:6;2632;2640;2693:2;2681:9;2672:7;2668:23;2664:32;2661:52;;;2709:1;2706;2699:12;2661:52;2748:9;2735:23;2767:31;2792:5;2767:31;:::i;:::-;2817:5;-1:-1:-1;2874:2:1;2859:18;;2846:32;2887:33;2846:32;2887:33;:::i;:::-;2547:456;;2939:7;;-1:-1:-1;;;2993:2:1;2978:18;;;;2965:32;;2547:456::o;3197:248::-;3262:6;3270;3323:2;3311:9;3302:7;3298:23;3294:32;3291:52;;;3339:1;3336;3329:12;3291:52;3375:9;3362:23;3352:33;;3404:35;3435:2;3424:9;3420:18;3404:35;:::i;3450:156::-;3516:20;;3576:4;3565:16;;3555:27;;3545:55;;3596:1;3593;3586:12;3611:393;3689:6;3697;3705;3713;3766:3;3754:9;3745:7;3741:23;3737:33;3734:53;;;3783:1;3780;3773:12;3734:53;3806:27;3823:9;3806:27;:::i;:::-;3796:37;;3852:36;3884:2;3873:9;3869:18;3852:36;:::i;:::-;3842:46;;3907:36;3939:2;3928:9;3924:18;3907:36;:::i;:::-;3897:46;;3962:36;3994:2;3983:9;3979:18;3962:36;:::i;:::-;3952:46;;3611:393;;;;;;;:::o;4009:247::-;4068:6;4121:2;4109:9;4100:7;4096:23;4092:32;4089:52;;;4137:1;4134;4127:12;4089:52;4176:9;4163:23;4195:31;4220:5;4195:31;:::i;4261:529::-;4338:6;4346;4354;4407:2;4395:9;4386:7;4382:23;4378:32;4375:52;;;4423:1;4420;4413:12;4375:52;4462:9;4449:23;4481:31;4506:5;4481:31;:::i;:::-;4531:5;-1:-1:-1;4588:2:1;4573:18;;4560:32;4601:33;4560:32;4601:33;:::i;:::-;4653:7;-1:-1:-1;4712:2:1;4697:18;;4684:32;4725:33;4684:32;4725:33;:::i;:::-;4777:7;4767:17;;;4261:529;;;;;:::o;5219:388::-;5287:6;5295;5348:2;5336:9;5327:7;5323:23;5319:32;5316:52;;;5364:1;5361;5354:12;5316:52;5403:9;5390:23;5422:31;5447:5;5422:31;:::i;:::-;5472:5;-1:-1:-1;5529:2:1;5514:18;;5501:32;5542:33;5501:32;5542:33;:::i;:::-;5594:7;5584:17;;;5219:388;;;;;:::o;5612:356::-;5814:2;5796:21;;;5833:18;;;5826:30;5892:34;5887:2;5872:18;;5865:62;5959:2;5944:18;;5612:356::o;5973:412::-;6175:2;6157:21;;;6214:2;6194:18;;;6187:30;6253:34;6248:2;6233:18;;6226:62;-1:-1:-1;;;6319:2:1;6304:18;;6297:46;6375:3;6360:19;;5973:412::o;6390:127::-;6451:10;6446:3;6442:20;6439:1;6432:31;6482:4;6479:1;6472:15;6506:4;6503:1;6496:15;6522:127;6583:10;6578:3;6574:20;6571:1;6564:31;6614:4;6611:1;6604:15;6638:4;6635:1;6628:15;6654:125;6694:4;6722:1;6719;6716:8;6713:34;;;6727:18;;:::i;:::-;-1:-1:-1;6764:9:1;;6654:125::o;6784:127::-;6845:10;6840:3;6836:20;6833:1;6826:31;6876:4;6873:1;6866:15;6900:4;6897:1;6890:15;6916:135;6955:3;6976:17;;;6973:43;;6996:18;;:::i;:::-;-1:-1:-1;7043:1:1;7032:13;;6916:135::o;8928:127::-;8989:10;8984:3;8980:20;8977:1;8970:31;9020:4;9017:1;9010:15;9044:4;9041:1;9034:15;9060:120;9100:1;9126;9116:35;;9131:18;;:::i;:::-;-1:-1:-1;9165:9:1;;9060:120::o;9591:168::-;9631:7;9697:1;9693;9689:6;9685:14;9682:1;9679:21;9674:1;9667:9;9660:17;9656:45;9653:71;;;9704:18;;:::i;:::-;-1:-1:-1;9744:9:1;;9591:168::o;17254:128::-;17294:3;17325:1;17321:6;17318:1;17315:13;17312:39;;;17331:18;;:::i;:::-;-1:-1:-1;17367:9:1;;17254:128::o;18443:209::-;-1:-1:-1;;18607:38:1;;;;18589:57;;18577:2;18562:18;;18443:209::o;20563:204::-;20601:3;20637:4;20634:1;20630:12;20669:4;20666:1;20662:12;20704:3;20698:4;20694:14;20689:3;20686:23;20683:49;;;20712:18;;:::i;:::-;20748:13;;20563:204;-1:-1:-1;;;20563:204:1:o;20772:165::-;20810:1;20844:4;20841:1;20837:12;20868:3;20858:37;;20875:18;;:::i;:::-;20927:3;20920:4;20917:1;20913:12;20909:22;20904:27;;;20772:165;;;;:::o;20942:195::-;20980:4;21017;21014:1;21010:12;21049:4;21046:1;21042:12;21074:3;21069;21066:12;21063:38;;;21081:18;;:::i;:::-;21118:13;;;20942:195;-1:-1:-1;;;20942:195:1:o;21598:251::-;21668:6;21721:2;21709:9;21700:7;21696:23;21692:32;21689:52;;;21737:1;21734;21727:12;21689:52;21769:9;21763:16;21788:31;21813:5;21788:31;:::i;21854:980::-;22116:4;22164:3;22153:9;22149:19;22195:6;22184:9;22177:25;22221:2;22259:6;22254:2;22243:9;22239:18;22232:34;22302:3;22297:2;22286:9;22282:18;22275:31;22326:6;22361;22355:13;22392:6;22384;22377:22;22430:3;22419:9;22415:19;22408:26;;22469:2;22461:6;22457:15;22443:29;;22490:1;22500:195;22514:6;22511:1;22508:13;22500:195;;;22579:13;;-1:-1:-1;;;;;22575:39:1;22563:52;;22670:15;;;;22635:12;;;;22611:1;22529:9;22500:195;;;-1:-1:-1;;;;;;;22751:32:1;;;;22746:2;22731:18;;22724:60;-1:-1:-1;;;22815:3:1;22800:19;22793:35;22712:3;21854:980;-1:-1:-1;;;21854:980:1:o;23451:306::-;23539:6;23547;23555;23608:2;23596:9;23587:7;23583:23;23579:32;23576:52;;;23624:1;23621;23614:12;23576:52;23653:9;23647:16;23637:26;;23703:2;23692:9;23688:18;23682:25;23672:35;;23747:2;23736:9;23732:18;23726:25;23716:35;;23451:306;;;;;:::o
Swarm Source
ipfs://37f026409d5fdfca28ed3ce64ff99c2f6bcb94e056ad04107697f81218c26480
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.