ERC-20
Overview
Max Total Supply
1,000,000,000 MMTKN
Holders
362
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
818,611.384377507766885403 MMTKNValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
MetaMerceToken
Compiler Version
v0.8.16+commit.07a7930e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-09-02 */ // SPDX-License-Identifier: MIT pragma solidity 0.8.16; 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 MetaMerceToken is IERC20, Ownable { using Address for address; using SafeMath for uint256; IRouter public uniswapV2Router; address public immutable uniswapV2Pair; string private constant _name = "MetaMerce Token"; string private constant _symbol = "MMTKN"; uint8 private constant _decimals = 18; 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**18; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; bool public isTradingEnabled; // max wallet is 2.0% of _tTotal uint256 public maxWalletAmount = _tTotal * 200 / 10000; // max buy and sell tx is 1.0% of _tTotal uint256 public maxTxAmount = _tTotal * 100 / 10000; bool private _swapping; uint256 public minimumTokensBeforeSwap = _tTotal * 50 / 100000; 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,2,2,4,4,2,2,2,2); uint256 public launchTokens; uint256 private _launchStartTimestamp; uint256 private _launchBlockNumber; bool public _launchTokensClaimed; mapping (address => bool) private _isBlocked; 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 BlockedAccountChange(address indexed holder, bool indexed status); 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 ClaimOverflow(address token, uint256 amount); event TradingStatusChange(bool indexed newValue, bool indexed oldValue); event AllowedWhenTradingDisabledChange(address indexed account, bool isExcluded); constructor() { liquidityWallet = owner(); marketingWallet = owner(); buyBackWallet = owner(); IRouter _uniswapV2Router = IRouter(0x1fdD76e18dD21046b7e7D54C8254Bf08B239e4D9); 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 allowTradingWhenDisabled(address account, bool allowed) external onlyOwner { _isAllowedToTradeWhenDisabled[account] = allowed; emit AllowedWhenTradingDisabledChange(account, allowed); } function setFeeOnSelectedWalletTransfers(address account, bool value) external onlyOwner { require(_feeOnSelectedWalletTransfers[account] != value, "MetaMerce: 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, "MetaMerce: Automated market maker pair is already set to that value"); automatedMarketMakerPairs[pair] = value; emit AutomatedMarketMakerPairChange(pair, value); } function blockAccount(address account) external onlyOwner { require(!_isBlocked[account], "MetaMerce: Account is already blocked"); if (_launchStartTimestamp > 0) { require((block.timestamp - _launchStartTimestamp) < 172800, "MetaMerce: Time to block accounts has expired"); } _isBlocked[account] = true; emit BlockedAccountChange(account, true); } function unblockAccount(address account) external onlyOwner { require(_isBlocked[account], "MetaMerce: Account is not blcoked"); _isBlocked[account] = false; emit BlockedAccountChange(account, false); } function excludeFromFees(address account, bool excluded) external onlyOwner { require(_isExcludedFromFee[account] != excluded, "MetaMerce: 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, "MetaMerce: 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, "MetaMerce: 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, "MetaMerce: 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), "MetaMerce: The liquidityWallet cannot be 0"); emit WalletChange('liquidityWallet', newLiquidityWallet, liquidityWallet); liquidityWallet = newLiquidityWallet; } if(marketingWallet != newMarketingWallet) { require(newMarketingWallet != address(0), "MetaMerce: The marketingWallet cannot be 0"); emit WalletChange('marketingWallet', newMarketingWallet, marketingWallet); marketingWallet = newMarketingWallet; } if(buyBackWallet != newBuyBackWallet) { require(newBuyBackWallet != address(0), "MetaMerce: 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), "MetaMerce: The router already has that address"); emit UniswapV2RouterChange(newAddress, address(uniswapV2Router)); uniswapV2Router = IRouter(newAddress); } function setMaxTransactionAmount(uint256 newValue) external onlyOwner { require(newValue != maxTxAmount, "MetaMerce: Cannot update maxTxAmount to same value"); emit MaxTransactionAmountChange(newValue, maxTxAmount); maxTxAmount = newValue; } function setMaxWalletAmount(uint256 newValue) external onlyOwner { require(newValue != maxWalletAmount, "MetaMerce: Cannot update maxWalletAmount to same value"); emit MaxWalletAmountChange(newValue, maxWalletAmount); maxWalletAmount = newValue; } function setMinimumTokensBeforeSwap(uint256 newValue) external onlyOwner { require(newValue != minimumTokensBeforeSwap, "MetaMerce: Cannot update minimumTokensBeforeSwap to same value"); emit MinTokenAmountBeforeSwapChange(newValue, minimumTokensBeforeSwap); minimumTokensBeforeSwap = newValue; } function claimLaunchTokens() external onlyOwner { require(_launchStartTimestamp > 0, "MetaMerce: Launch must have occurred"); require(!_launchTokensClaimed, "MetaMerce: Launch tokens have already been claimed"); require(block.number - _launchBlockNumber > 5, "MetaMerce: Only claim launch tokens after launch"); uint256 tokenBalance = balanceOf(address(this)); _launchTokensClaimed = true; require(launchTokens <= tokenBalance, "MetaMerce: A swap and liquify has already occurred"); uint256 amount = launchTokens; launchTokens = 0; (bool success) = IERC20(address(this)).transfer(owner(), amount); if (success){ emit ClaimOverflow(address(this), amount); } } function claimETHOverflow(uint256 amount) external onlyOwner { require(amount < address(this).balance, "MetaMerce: Cannot send more than contract balance"); (bool success,) = address(owner()).call{value : amount}(""); if (success){ emit ClaimOverflow(uniswapV2Router.WETH(), amount); } } // Getters function name() external pure returns (string memory) { return _name; } function symbol() external pure returns (string memory) { return _symbol; } function decimals() external view virtual returns (uint8) { return _decimals; } function totalSupply() external pure 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, "MetaMerce: 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, "MetaMerce: 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, "MetaMerce: Transfer amount must be greater than zero"); require(amount <= balanceOf(from), "MetaMerce: Cannot transfer more than balance"); if(!_isAllowedToTradeWhenDisabled[from] && !_isAllowedToTradeWhenDisabled[to]) { require(isTradingEnabled, "MetaMerce: Trading is currently disabled."); require(!_isBlocked[to], "MetaMerce: Account is blocked"); require(!_isBlocked[from], "MetaMerce: Account is blocked"); if (!_isExcludedFromMaxTransactionLimit[to] && !_isExcludedFromMaxTransactionLimit[from]) { require(amount <= maxTxAmount, "MetaMerce: Buy amount exceeds the maxTxBuyAmount."); } if (!_isExcludedFromMaxWalletLimit[to]) { require((balanceOf(to) + amount) <= maxWalletAmount, "MetaMerce: 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 (_launchStartTimestamp > 0 && (block.number - _launchBlockNumber <= 5)) { launchTokens += tOther; } 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 (_launchStartTimestamp > 0 && (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
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"AllowedWhenTradingDisabledChange","type":"event"},{"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":true,"internalType":"address","name":"holder","type":"address"},{"indexed":true,"internalType":"bool","name":"status","type":"bool"}],"name":"BlockedAccountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ClaimOverflow","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":"_launchTokensClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"activateTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"allowTradingWhenDisabled","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":[{"internalType":"address","name":"account","type":"address"}],"name":"blockAccount","outputs":[],"stateMutability":"nonpayable","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":"claimLaunchTokens","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":"launchTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"pure","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":"pure","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":"pure","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":[{"internalType":"address","name":"account","type":"address"}],"name":"unblockAccount","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
60a06040526200001e6b033b2e3c9fd0803ce800000060001962000d1f565b6200002c9060001962000d4c565b6005556127106200004b6b033b2e3c9fd0803ce800000060c862000d62565b62000057919062000d84565b600855612710620000766b033b2e3c9fd0803ce8000000606462000d62565b62000082919062000d84565b600955620186a0620000a26b033b2e3c9fd0803ce8000000603262000d62565b620000ae919062000d84565b600b556040805161016081018252636261736560e01b815260006020820181905291810182905260026060820181905260808201819052600460a0830181905260c083015260e082018190526101008201819052610120820181905261014090910152600f80546001600160c01b031916636261736560981b179055601055601180546702020202040402026001600160401b03199091161790553480156200015657600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060008054600c80546001600160a01b039092166001600160a01b03199283168117909155600d8054831682179055600e80549092161790556040805163c45a015560e01b81529051731fdd76e18dd21046b7e7d54c8254bf08b239e4d99291839163c45a0155916004808201926020929091908290030181865afa15801562000225573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200024b919062000d9b565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000299573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002bf919062000d9b565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200030d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000333919062000d9b565b600180546001600160a01b0319166001600160a01b03858116919091178255821660805290915062000367908290620005aa565b600160176000620003806000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526017909252812080549092166001908117909255620003ce91620006a6565b620003db826001620006a6565b620003e8816001620006a6565b6001601a6000620004016000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff1995861617905530815260189283905290812080549093166001908117909355620004596000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055858216815260199384905282812080548616600190811790915580549092168152828120805486168317905530815291822080549094168117909355620004d66000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805460ff191692151592909217909155600554906002906200051b6000546001600160a01b031690565b6001600160a01b03168152602081019190915260400160002055620005486000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6b033b2e3c9fd0803ce80000006040516200059a91815260200190565b60405180910390a3505062000e5e565b6001600160a01b0382166000908152601e602052604090205481151560ff909116151503620006525760405162461bcd60e51b815260206004820152604360248201527f4d6574614d657263653a204175746f6d61746564206d61726b6574206d616b6560448201527f72207061697220697320616c72656164792073657420746f20746861742076616064820152626c756560e81b608482015260a4015b60405180910390fd5b6001600160a01b0382166000818152601e6020526040808220805460ff191685151590811790915590519092917fa666b9b2dc2c8f2d86fda7ba3a115be30d3a958fd84d359cbc6bc919df97990a91a35050565b6000546001600160a01b03163314620007025760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000649565b6001600160a01b0382166000908152601b602052604090205481151560ff9091161515036200079a5760405162461bcd60e51b815260206004820152603560248201527f4d6574614d657263653a204163636f756e7420697320616c726561647920746860448201527f652076616c7565206f6620276578636c75646564270000000000000000000000606482015260840162000649565b801562000867576001600160a01b03821660009081526002602052604090205415620007fe576001600160a01b038216600090815260026020526040902054620007e490620009e8565b6001600160a01b0383166000908152600360205260409020555b6001600160a01b0382166000818152601b60205260408120805460ff1916841515179055601d805460018101825591527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f0180546001600160a01b03191690911790556200099e565b60005b601d548110156200099c57826001600160a01b0316601d828154811062000895576200089562000dc6565b6000918252602090912001546001600160a01b0316036200098757601d8054620008c29060019062000d4c565b81548110620008d557620008d562000dc6565b600091825260209091200154601d80546001600160a01b03909216918390811062000904576200090462000dc6565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600382526040808220829055601b90925220805460ff19169055601d8054806200095f576200095f62000ddc565b600082815260209020810160001990810180546001600160a01b03191690550190556200099c565b80620009938162000df2565b9150506200086a565b505b816001600160a01b03167fcb9d59a6e9da25dee1a9ddef81481537dfd94e20b1593b58b08193bea9e9baa982604051620009dc911515815260200190565b60405180910390a25050565b600060055482111562000a645760405162461bcd60e51b815260206004820152603560248201527f4d6574614d657263653a20416d6f756e74206d757374206265206c657373207460448201527f68616e20746f74616c207265666c656374696f6e730000000000000000000000606482015260840162000649565b600062000a7062000a85565b905062000a7e818462000d84565b9392505050565b6000808062000a9362000ab8565b9150915062000ab1818362000c7a60201b620023a01790919060201c565b9250505090565b60055460009081906b033b2e3c9fd0803ce8000000825b601d5481101562000c33578260026000601d848154811062000af55762000af562000dc6565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118062000b6457508160036000601d848154811062000b3d5762000b3d62000dc6565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1562000b84575050600554936b033b2e3c9fd0803ce80000009350915050565b60026000601d838154811062000b9e5762000b9e62000dc6565b60009182526020808320909101546001600160a01b0316835282019290925260400190205462000bcf908462000d4c565b925060036000601d838154811062000beb5762000beb62000dc6565b60009182526020808320909101546001600160a01b0316835282019290925260400190205462000c1c908362000d4c565b91508062000c2a8162000df2565b91505062000acf565b506b033b2e3c9fd0803ce800000060055462000c50919062000d84565b82101562000c71575050600554926b033b2e3c9fd0803ce800000092509050565b90939092509050565b600062000cc483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525062000ccd60201b60201c565b90505b92915050565b6000818362000cf15760405162461bcd60e51b815260040162000649919062000e0e565b50600062000d00848662000d84565b95945050505050565b634e487b7160e01b600052601260045260246000fd5b60008262000d315762000d3162000d09565b500690565b634e487b7160e01b600052601160045260246000fd5b8181038181111562000cc75762000cc762000d36565b600081600019048311821515161562000d7f5762000d7f62000d36565b500290565b60008262000d965762000d9662000d09565b500490565b60006020828403121562000dae57600080fd5b81516001600160a01b038116811462000a7e57600080fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60006001820162000e075762000e0762000d36565b5060010190565b600060208083528351808285015260005b8181101562000e3d5785810183015185820160400152820162000e1f565b506000604082860101526040601f19601f8301168501019250505092915050565b6080516141a962000e7a60003960006105be01526141a96000f3fe6080604052600436106102cd5760003560e01c806370a0823111610175578063a9059cbb116100dc578063cd43e22811610095578063d46980161161006f578063d4698016146108f2578063dd62ed3e14610912578063f2fde38b14610958578063fe0175351461097857600080fd5b8063cd43e2281461085d578063d2d7ad83146108bc578063d3221576146108d257600080fd5b8063a9059cbb14610797578063aa4bde28146107b7578063aee50b1e146107cd578063b62496f5146107ed578063bea9849e1461081d578063c02466681461083d57600080fd5b8063880bcbc11161012e578063880bcbc1146106d55780638c0b5e22146106f55780638da5cb5b1461070b57806395d89b41146107295780639d952ce914610757578063a457c2d71461077757600080fd5b806370a0823114610620578063715018a61461064057806375cb1bd11461065557806375f0a87414610675578063781edb3c146106955780637c0a893d146106b557600080fd5b80631fcfefcd1161023457806334cf1fea116101ed57806345a42329116101c757806345a423291461058c57806349bd5a5e146105ac5780634d78fdc6146105e0578063667812911461060057600080fd5b806334cf1fea14610537578063395093511461054c5780634549b0391461056c57600080fd5b80631fcfefcd1461049057806323b872dd146104a657806327a14fc2146104c65780632cc25d14146104e65780632d838119146104fb578063313ce5671461051b57600080fd5b806313114a9d1161028657806313114a9d146103c057806314fbc5f3146103df5780631694505e146103f957806318160ddd146104315780631cd348c0146104505780631e293c101461047057600080fd5b80630483f7a0146102d9578063064a59d0146102fb57806306fdde031461032a578063095ea7b31461036b578063098df5851461038b5780630bd05b69146103ab57600080fd5b366102d457005b600080fd5b3480156102e557600080fd5b506102f96102f4366004613c3c565b6109b3565b005b34801561030757600080fd5b506007546103159060ff1681565b60405190151581526020015b60405180910390f35b34801561033657600080fd5b5060408051808201909152600f81526e26b2ba30a6b2b931b2902a37b5b2b760891b60208201525b6040516103219190613c75565b34801561037757600080fd5b50610315610386366004613cc3565b610c5a565b34801561039757600080fd5b506102f96103a6366004613cef565b610c71565b3480156103b757600080fd5b506102f9610e13565b3480156103cc57600080fd5b506006545b604051908152602001610321565b3480156103eb57600080fd5b506015546103159060ff1681565b34801561040557600080fd5b50600154610419906001600160a01b031681565b6040516001600160a01b039091168152602001610321565b34801561043d57600080fd5b506b033b2e3c9fd0803ce80000006103d1565b34801561045c57600080fd5b50600e54610419906001600160a01b031681565b34801561047c57600080fd5b506102f961048b366004613cef565b610e8d565b34801561049c57600080fd5b506103d160125481565b3480156104b257600080fd5b506103156104c1366004613d08565b610f56565b3480156104d257600080fd5b506102f96104e1366004613cef565b610fbf565b3480156104f257600080fd5b506102f961108c565b34801561050757600080fd5b506103d1610516366004613cef565b61135b565b34801561052757600080fd5b5060405160128152602001610321565b34801561054357600080fd5b506102f96113ea565b34801561055857600080fd5b50610315610567366004613cc3565b61144e565b34801561057857600080fd5b506103d1610587366004613d49565b611484565b34801561059857600080fd5b506102f96105a7366004613c3c565b61156a565b3480156105b857600080fd5b506104197f000000000000000000000000000000000000000000000000000000000000000081565b3480156105ec57600080fd5b506102f96105fb366004613d6e565b611682565b34801561060c57600080fd5b506102f961061b366004613da1565b61176b565b34801561062c57600080fd5b506103d161063b366004613d6e565b611819565b34801561064c57600080fd5b506102f9611878565b34801561066157600080fd5b506102f9610670366004613df5565b6118ec565b34801561068157600080fd5b50600d54610419906001600160a01b031681565b3480156106a157600080fd5b506102f96106b0366004613c3c565b611bfd565b3480156106c157600080fd5b506102f96106d0366004613d6e565b611cbf565b3480156106e157600080fd5b506102f96106f0366004613c3c565b611e2f565b34801561070157600080fd5b506103d160095481565b34801561071757600080fd5b506000546001600160a01b0316610419565b34801561073557600080fd5b5060408051808201909152600581526426a6aa25a760d91b602082015261035e565b34801561076357600080fd5b506102f9610772366004613da1565b611ef1565b34801561078357600080fd5b50610315610792366004613cc3565b611f46565b3480156107a357600080fd5b506103156107b2366004613cc3565b611f95565b3480156107c357600080fd5b506103d160085481565b3480156107d957600080fd5b506102f96107e8366004613cef565b611fa2565b3480156107f957600080fd5b50610315610808366004613d6e565b601e6020526000908152604090205460ff1681565b34801561082957600080fd5b506102f9610838366004613d6e565b612076565b34801561084957600080fd5b506102f9610858366004613c3c565b612172565b34801561086957600080fd5b5060115460ff80821691620100008104821691600160201b8204811691600160301b9004165b6040805160ff95861681529385166020850152918416918301919091529091166060820152608001610321565b3480156108c857600080fd5b506103d1600b5481565b3480156108de57600080fd5b506102f96108ed366004613c3c565b612234565b3480156108fe57600080fd5b50600c54610419906001600160a01b031681565b34801561091e57600080fd5b506103d161092d366004613e40565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801561096457600080fd5b506102f9610973366004613d6e565b6122b6565b34801561098457600080fd5b5060115460ff610100820481169163010000008104821691600160281b8204811691600160381b90041661088f565b6000546001600160a01b031633146109e65760405162461bcd60e51b81526004016109dd90613e6e565b60405180910390fd5b6001600160a01b0382166000908152601b602052604090205481151560ff909116151503610a265760405162461bcd60e51b81526004016109dd90613ea3565b8015610aee576001600160a01b03821660009081526002602052604090205415610a86576001600160a01b038216600090815260026020526040902054610a6c9061135b565b6001600160a01b0383166000908152600360205260409020555b6001600160a01b0382166000818152601b60205260408120805460ff1916841515179055601d805460018101825591527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f0180546001600160a01b0319169091179055610c11565b60005b601d54811015610c0f57826001600160a01b0316601d8281548110610b1857610b18613ef8565b6000918252602090912001546001600160a01b031603610bfd57601d8054610b4290600190613f24565b81548110610b5257610b52613ef8565b600091825260209091200154601d80546001600160a01b039092169183908110610b7e57610b7e613ef8565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600382526040808220829055601b90925220805460ff19169055601d805480610bd657610bd6613f37565b600082815260209020810160001990810180546001600160a01b0319169055019055610c0f565b80610c0781613f4d565b915050610af1565b505b816001600160a01b03167fcb9d59a6e9da25dee1a9ddef81481537dfd94e20b1593b58b08193bea9e9baa982604051610c4e911515815260200190565b60405180910390a25050565b6000610c673384846123e2565b5060015b92915050565b6000546001600160a01b03163314610c9b5760405162461bcd60e51b81526004016109dd90613e6e565b478110610d045760405162461bcd60e51b815260206004820152603160248201527f4d6574614d657263653a2043616e6e6f742073656e64206d6f7265207468616e60448201527020636f6e74726163742062616c616e636560781b60648201526084016109dd565b600080546040516001600160a01b039091169083908381818185875af1925050503d8060008114610d51576040519150601f19603f3d011682016040523d82523d6000602084013e610d56565b606091505b505090508015610e0f57600154604080516315ab88c960e31b815290517fb16273d5dd95f4997020a9e2e429331d472940f09fe08af28db9672639cc251d926001600160a01b03169163ad5c46489160048083019260209291908290030181865afa158015610dc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ded9190613f66565b604080516001600160a01b039092168252602082018590520160405180910390a15b5050565b6000546001600160a01b03163314610e3d5760405162461bcd60e51b81526004016109dd90613e6e565b6007805460ff19166001179055601354600003610e5d5742601355436014555b6040516000906001907fa0f694e30e34d9f05d12691b612650129ed8888d1f93b25fa0cd92e4416a8338908390a3565b6000546001600160a01b03163314610eb75760405162461bcd60e51b81526004016109dd90613e6e565b6009548103610f235760405162461bcd60e51b815260206004820152603260248201527f4d6574614d657263653a2043616e6e6f7420757064617465206d61785478416d6044820152716f756e7420746f2073616d652076616c756560701b60648201526084016109dd565b60095460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600955565b6000610f63848484612506565b610fb58433610fb085604051806060016040528060288152602001614107602891396001600160a01b038a1660009081526004602090815260408083203384529091529020549190612abd565b6123e2565b5060019392505050565b6000546001600160a01b03163314610fe95760405162461bcd60e51b81526004016109dd90613e6e565b60085481036110595760405162461bcd60e51b815260206004820152603660248201527f4d6574614d657263653a2043616e6e6f7420757064617465206d617857616c6c6044820152756574416d6f756e7420746f2073616d652076616c756560501b60648201526084016109dd565b60085460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600855565b6000546001600160a01b031633146110b65760405162461bcd60e51b81526004016109dd90613e6e565b6000601354116111145760405162461bcd60e51b8152602060048201526024808201527f4d6574614d657263653a204c61756e6368206d7573742068617665206f6363756044820152631c9c995960e21b60648201526084016109dd565b60155460ff16156111825760405162461bcd60e51b815260206004820152603260248201527f4d6574614d657263653a204c61756e636820746f6b656e73206861766520616c6044820152711c9958591e481899595b8818db185a5b595960721b60648201526084016109dd565b6005601454436111929190613f24565b116111f85760405162461bcd60e51b815260206004820152603060248201527f4d6574614d657263653a204f6e6c7920636c61696d206c61756e636820746f6b60448201526f0cadce640c2cce8cae440d8c2eadcc6d60831b60648201526084016109dd565b600061120330611819565b6015805460ff191660011790556012549091508110156112805760405162461bcd60e51b815260206004820152603260248201527f4d6574614d657263653a2041207377617020616e64206c6971756966792068616044820152711cc8185b1c9958591e481bd8d8dd5c9c995960721b60648201526084016109dd565b60128054600091829055903063a9059cbb6112a36000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018590526044016020604051808303816000875af11580156112f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113149190613f83565b905080156113565760408051308152602081018490527fb16273d5dd95f4997020a9e2e429331d472940f09fe08af28db9672639cc251d910160405180910390a15b505050565b60006005548211156113cd5760405162461bcd60e51b815260206004820152603560248201527f4d6574614d657263653a20416d6f756e74206d757374206265206c657373207460448201527468616e20746f74616c207265666c656374696f6e7360581b60648201526084016109dd565b60006113d7612af7565b90506113e38184613fb6565b9392505050565b6000546001600160a01b031633146114145760405162461bcd60e51b81526004016109dd90613e6e565b6007805460ff191690556040516001906000907fa0f694e30e34d9f05d12691b612650129ed8888d1f93b25fa0cd92e4416a8338908290a3565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610c67918590610fb09086612b1a565b60006b033b2e3c9fd0803ce80000008311156114f55760405162461bcd60e51b815260206004820152602a60248201527f4d6574614d657263653a20416d6f756e74206d757374206265206c657373207460448201526968616e20737570706c7960b01b60648201526084016109dd565b60006114ff612af7565b9050600061150d8286613fca565b90508361151d579150610c6b9050565b601f54600090839060649061153c90600160201b900460ff1689613fca565b6115469190613fb6565b6115509190613fca565b9050600061155e8284613f24565b9450610c6b9350505050565b6000546001600160a01b031633146115945760405162461bcd60e51b81526004016109dd90613e6e565b6001600160a01b0382166000908152601c602052604090205481151560ff90911615150361162a5760405162461bcd60e51b815260206004820152603a60248201527f4d6574614d657263653a205468652073656c65637465642077616c6c6574206960448201527f7320616c72656164792073657420746f207468652076616c756500000000000060648201526084016109dd565b6001600160a01b0382166000818152601c6020908152604091829020805460ff191685151590811790915591519182527fe70512a569cf898db2e20aa3b4cc3f0dd13377b82a493840d326ab5a196668779101610c4e565b6000546001600160a01b031633146116ac5760405162461bcd60e51b81526004016109dd90613e6e565b6001600160a01b03811660009081526016602052604090205460ff1661171e5760405162461bcd60e51b815260206004820152602160248201527f4d6574614d657263653a204163636f756e74206973206e6f7420626c636f6b656044820152601960fa1b60648201526084016109dd565b6001600160a01b038116600081815260166020526040808220805460ff19169055519091907f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba908390a350565b6000546001600160a01b031633146117955760405162461bcd60e51b81526004016109dd90613e6e565b6117a3600f85858585612b79565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d015b6040805191829003822060ff878116845286811660208501528581168484015284166060840152905190917f69848adfba904cea9fd12f8e800c6bae1d85101b0becc5910e509a93d81449e9919081900360800190a250505050565b6001600160a01b0381166000908152601b602052604081205460ff161561185657506001600160a01b031660009081526003602052604090205490565b6001600160a01b038216600090815260026020526040902054610c6b9061135b565b6000546001600160a01b031633146118a25760405162461bcd60e51b81526004016109dd90613e6e565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146119165760405162461bcd60e51b81526004016109dd90613e6e565b600c546001600160a01b03848116911614611a0d576001600160a01b0383166119945760405162461bcd60e51b815260206004820152602a60248201527f4d6574614d657263653a20546865206c697175696469747957616c6c657420636044820152690616e6e6f7420626520360b41b60648201526084016109dd565b600c546040516e1b1a5c5d5a591a5d1e55d85b1b195d608a1b81526001600160a01b0391821691851690600f01604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600c80546001600160a01b0319166001600160a01b0385161790555b600d546001600160a01b03838116911614611b04576001600160a01b038216611a8b5760405162461bcd60e51b815260206004820152602a60248201527f4d6574614d657263653a20546865206d61726b6574696e6757616c6c657420636044820152690616e6e6f7420626520360b41b60648201526084016109dd565b600d546040516e1b585c9ad95d1a5b99d5d85b1b195d608a1b81526001600160a01b0391821691841690600f01604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600d80546001600160a01b0319166001600160a01b0384161790555b600e546001600160a01b03828116911614611356576001600160a01b038116611b805760405162461bcd60e51b815260206004820152602860248201527f4d6574614d657263653a20546865206275794261636b57616c6c65742063616e60448201526706e6f7420626520360c41b60648201526084016109dd565b600e546040516c189d5e509858dad5d85b1b195d609a1b81526001600160a01b0391821691831690600d01604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600e80546001600160a01b0383166001600160a01b0319909116179055505050565b6000546001600160a01b03163314611c275760405162461bcd60e51b81526004016109dd90613e6e565b6001600160a01b03821660009081526019602052604090205481151560ff909116151503611c675760405162461bcd60e51b81526004016109dd90613ea3565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e9101610c4e565b6000546001600160a01b03163314611ce95760405162461bcd60e51b81526004016109dd90613e6e565b6001600160a01b03811660009081526016602052604090205460ff1615611d605760405162461bcd60e51b815260206004820152602560248201527f4d6574614d657263653a204163636f756e7420697320616c726561647920626c6044820152641bd8dad95960da1b60648201526084016109dd565b60135415611ddd576202a30060135442611d7a9190613f24565b10611ddd5760405162461bcd60e51b815260206004820152602d60248201527f4d6574614d657263653a2054696d6520746f20626c6f636b206163636f756e7460448201526c1cc81a185cc8195e1c1a5c9959609a1b60648201526084016109dd565b6001600160a01b038116600081815260166020526040808220805460ff1916600190811790915590519092917f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba91a350565b6000546001600160a01b03163314611e595760405162461bcd60e51b81526004016109dd90613e6e565b6001600160a01b03821660009081526018602052604090205481151560ff909116151503611e995760405162461bcd60e51b81526004016109dd90613ea3565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a409101610c4e565b6000546001600160a01b03163314611f1b5760405162461bcd60e51b81526004016109dd90613e6e565b611f29600f85858585612ddf565b6040516b62617365466565732d42757960a01b8152600c016117bd565b6000610c673384610fb08560405180606001604052806025815260200161414f602591393360009081526004602090815260408083206001600160a01b038d1684529091529020549190612abd565b6000610c67338484612506565b6000546001600160a01b03163314611fcc5760405162461bcd60e51b81526004016109dd90613e6e565b600b5481036120435760405162461bcd60e51b815260206004820152603e60248201527f4d6574614d657263653a2043616e6e6f7420757064617465206d696e696d756d60448201527f546f6b656e734265666f72655377617020746f2073616d652076616c7565000060648201526084016109dd565b600b5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600b55565b6000546001600160a01b031633146120a05760405162461bcd60e51b81526004016109dd90613e6e565b6001546001600160a01b03908116908216036121155760405162461bcd60e51b815260206004820152602e60248201527f4d6574614d657263653a2054686520726f7574657220616c726561647920686160448201526d732074686174206164647265737360901b60648201526084016109dd565b6001546040516001600160a01b03918216918316907f2afbff3ed601a8723765c7072d8ea8445e08f6f1874afd34a2b747a272c3ebad90600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461219c5760405162461bcd60e51b81526004016109dd90613e6e565b6001600160a01b03821660009081526017602052604090205481151560ff9091161515036121dc5760405162461bcd60e51b81526004016109dd90613ea3565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101610c4e565b6000546001600160a01b0316331461225e5760405162461bcd60e51b81526004016109dd90613e6e565b6001600160a01b0382166000818152601a6020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d3509101610c4e565b6000546001600160a01b031633146122e05760405162461bcd60e51b81526004016109dd90613e6e565b6001600160a01b0381166123455760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109dd565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60006113e383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061302c565b6001600160a01b0383166124445760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109dd565b6001600160a01b0382166124a55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109dd565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661256a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016109dd565b6001600160a01b0382166125cc5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016109dd565b600081116126395760405162461bcd60e51b815260206004820152603460248201527f4d6574614d657263653a205472616e7366657220616d6f756e74206d7573742060448201527362652067726561746572207468616e207a65726f60601b60648201526084016109dd565b61264283611819565b8111156126a65760405162461bcd60e51b815260206004820152602c60248201527f4d6574614d657263653a2043616e6e6f74207472616e73666572206d6f72652060448201526b7468616e2062616c616e636560a01b60648201526084016109dd565b6001600160a01b0383166000908152601a602052604090205460ff161580156126e857506001600160a01b0382166000908152601a602052604090205460ff16155b156129815760075460ff166127515760405162461bcd60e51b815260206004820152602960248201527f4d6574614d657263653a2054726164696e672069732063757272656e746c79206044820152683234b9b0b13632b21760b91b60648201526084016109dd565b6001600160a01b03821660009081526016602052604090205460ff16156127ba5760405162461bcd60e51b815260206004820152601d60248201527f4d6574614d657263653a204163636f756e7420697320626c6f636b656400000060448201526064016109dd565b6001600160a01b03831660009081526016602052604090205460ff16156128235760405162461bcd60e51b815260206004820152601d60248201527f4d6574614d657263653a204163636f756e7420697320626c6f636b656400000060448201526064016109dd565b6001600160a01b03821660009081526018602052604090205460ff1615801561286557506001600160a01b03831660009081526018602052604090205460ff16155b156128d6576009548111156128d65760405162461bcd60e51b815260206004820152603160248201527f4d6574614d657263653a2042757920616d6f756e742065786365656473207468604482015270329036b0bc2a3c213abca0b6b7bab73a1760791b60648201526084016109dd565b6001600160a01b03821660009081526019602052604090205460ff16612981576008548161290384611819565b61290d9190613fe9565b11156129815760405162461bcd60e51b815260206004820152603e60248201527f4d6574614d657263653a2045787065637465642077616c6c657420616d6f756e60448201527f74206578636565647320746865206d617857616c6c6574416d6f756e742e000060648201526084016109dd565b6001600160a01b038084166000908152601e60205260408082205492851682529020546129b69160ff9081169116848661305a565b6000600b546129c430611819565b600754911115915060ff1680156129d85750805b80156129e75750600a5460ff16155b80156129fe5750601f54600160201b900460ff1615155b8015612a2257506001600160a01b0383166000908152601e602052604090205460ff165b15612a4757600a805460ff19166001179055612a3c613276565b600a805460ff191690555b600a5460009060ff16158015612a5f575060075460ff165b6001600160a01b03861660009081526017602052604090205490915060ff1680612aa157506001600160a01b03841660009081526017602052604090205460ff165b15612aaa575060005b612ab6858585846134bc565b5050505050565b60008184841115612ae15760405162461bcd60e51b81526004016109dd9190613c75565b506000612aee8486613f24565b95945050505050565b6000806000612b04613685565b9092509050612b1382826123a0565b9250505090565b600080612b278385613fe9565b9050838110156113e35760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016109dd565b600285015460ff8581166101009092041614612c0a57604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028701548754919260ff6101009092048216929188169160008051602061412f83398151915291612beb9160481b90613ffc565b60405180910390a460028501805461ff00191661010060ff8716021790555b600285015460ff84811663010000009092041614612ca357604051711b585c9ad95d1a5b99d1995953db94d95b1b60721b815260120160405190819003812060028701548754919260ff63010000009092048216929187169160008051602061412f83398151915291612c809160481b90613ffc565b60405180910390a460028501805463ff0000001916630100000060ff8616021790555b600285015460ff838116600160281b9092041614612d3c576040516f189d5e509858dad1995953db94d95b1b60821b815260100160405190819003812060028701548754919260ff600160281b9092048216929186169160008051602061412f83398151915291612d179160481b90613ffc565b60405180910390a460028501805465ff00000000001916600160281b60ff8516021790555b600285015460ff828116600160381b9092041614612ab6576040516f1a1bdb19195c9cd1995953db94d95b1b60821b815260100160405190819003812060028701548754919260ff600160381b9092048216929185169160008051602061412f83398151915291612db09160481b90613ffc565b60405180910390a460028501805460ff8316600160381b0267ff00000000000000199091161790555050505050565b600285015460ff858116911614612e6057604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028701548754919260ff918216929188169160008051602061412f83398151915291612e469160481b90613ffc565b60405180910390a460028501805460ff191660ff86161790555b600285015460ff848116620100009092041614612ef457604051706d61726b6574696e674665654f6e42757960781b815260110160405190819003812060028701548754919260ff620100009092048216929187169160008051602061412f83398151915291612ed39160481b90613ffc565b60405180910390a460028501805462ff000019166201000060ff8616021790555b600285015460ff838116600160201b9092041614612f8b576040516e6275794261636b4665654f6e42757960881b8152600f0160405190819003812060028701548754919260ff600160201b9092048216929186169160008051602061412f83398151915291612f679160481b90613ffc565b60405180910390a460028501805464ff000000001916600160201b60ff8516021790555b600285015460ff828116600160301b9092041614612ab6576040516e686f6c646572734665654f6e42757960881b8152600f0160405190819003812060028701548754919260ff600160301b9092048216929185169160008051602061412f83398151915291612ffe9160481b90613ffc565b60405180910390a460028501805460ff8316600160301b0266ff000000000000199091161790555050505050565b6000818361304d5760405162461bcd60e51b81526004016109dd9190613c75565b506000612aee8486613fb6565b601f805463ffffffff19169055831561310157600060135411801561308d575060056014544361308a9190613f24565b11155b156130a457601f805460ff19166064179055613101565b601154601f805460ff80841661ffff1990921691909117610100620100008086048416919091029190911763ffff00001916600160201b850483169190910263ff000000191617600160301b909304166301000000029190911790555b821561316457601154601f805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b82158015613170575083155b80156131b657506001600160a01b0381166000908152601c602052604090205460ff16806131b657506001600160a01b0382166000908152601c602052604090205460ff165b1561321857601154601f805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b601f5460ff6301000000820481169162010000810482169161324291610100810482169116614013565b61324c9190614013565b6132569190614013565b601f60046101000a81548160ff021916908360ff16021790555050505050565b600061328130611819565b601f54909150479060ff600160201b820481169181811691610100820481169162010000810482169163010000009091041660006002866132c2878b613fca565b6132cc9190613fb6565b6132d69190613fb6565b905060006132e4828a613f24565b90506132ef8161382e565b60006132fb8947613f24565b905060008461330b60028a61402c565b613315908b61404e565b61331f919061404e565b60ff16905060006002828a60ff16856133389190613fca565b6133429190613fb6565b61334c9190613fb6565b905060008261335e60ff8b1686613fca565b6133689190613fb6565b905060006133768284613fe9565b6133809086613f24565b600d546040519192506001600160a01b03169083156108fc029084906000818181858888f193505050501580156133bb573d6000803e3d6000fd5b50600e546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156133f6573d6000803e3d6000fd5b508615613449576134078784613988565b60408051878152602081018590529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b5050601f805460ff97881663010000000263ff0000001999891662010000029990991663ffff0000199a89166101000261ffff199d8a16600160201b029d909d1664ff0000ffff19909216919091179a909716999099179990991796909616939093179390931790945550505050505050565b60008060006134cb8585613a35565b9250925092506000806000806134ea8987876134e5612af7565b613aeb565b6001600160a01b038f166000908152601b60205260409020549397509195509350915060ff1615613553576001600160a01b038b16600090815260036020526040902054613539908a90613f24565b6001600160a01b038c166000908152600360205260409020555b6001600160a01b038a166000908152601b602052604090205460ff16156135b2576001600160a01b038a16600090815260036020526040902054613598908890613fe9565b6001600160a01b038b166000908152600360205260409020555b6001600160a01b038b166000908152600260205260409020546135d6908590613f24565b6001600160a01b03808d1660009081526002602052604080822093909355908c1681522054613606908490613fe9565b6001600160a01b038b1660009081526002602052604090205561362b82878388613b43565b896001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8960405161367091815260200190565b60405180910390a35050505050505050505050565b60055460009081906b033b2e3c9fd0803ce8000000825b601d548110156137ea578260026000601d84815481106136be576136be613ef8565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061372957508160036000601d848154811061370257613702613ef8565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15613748575050600554936b033b2e3c9fd0803ce80000009350915050565b60026000601d838154811061375f5761375f613ef8565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461378e9084613f24565b925060036000601d83815481106137a7576137a7613ef8565b60009182526020808320909101546001600160a01b031683528201929092526040019020546137d69083613f24565b9150806137e281613f4d565b91505061369c565b506b033b2e3c9fd0803ce80000006005546138059190613fb6565b821015613825575050600554926b033b2e3c9fd0803ce800000092509050565b90939092509050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061386357613863613ef8565b6001600160a01b03928316602091820292909201810191909152600154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156138bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138e09190613f66565b816001815181106138f3576138f3613ef8565b6001600160a01b03928316602091820292909201015260015461391991309116846123e2565b60015460405163791ac94760e01b81526001600160a01b039091169063791ac94790613952908590600090869030904290600401614067565b600060405180830381600087803b15801561396c57600080fd5b505af1158015613980573d6000803e3d6000fd5b505050505050565b6001546139a09030906001600160a01b0316846123e2565b600154600c5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015613a10573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612ab691906140d8565b600080600083613a4d57508391506000905080613ae4565b601f54600090606490613a6a906301000000900460ff1688613fca565b613a749190613fb6565b601f5490915060009060649060ff620100008204811691613a9d91610100820481169116614013565b613aa79190614013565b613ab49060ff1689613fca565b613abe9190613fb6565b90506000613acc8284613fe9565b613ad69089613f24565b95509193509150613ae49050565b9250925092565b600080808080613afb868a613fca565b90506000613b09878a613fca565b90506000613b17888a613fca565b90506000613b258284613fe9565b613b2f9085613f24565b939c939b5091995097509095505050505050565b8360056000828254613b559190613f24565b925050819055508260066000828254613b6e9190613fe9565b909155505060135415801590613b925750600560145443613b8f9190613f24565b11155b15613baf578060126000828254613ba99190613fe9565b90915550505b306000908152601b602052604090205460ff1615613bec573060009081526003602052604081208054839290613be6908490613fe9565b90915550505b3060009081526002602052604081208054849290613c0b908490613fe9565b909155505050505050565b6001600160a01b0381168114613c2b57600080fd5b50565b8015158114613c2b57600080fd5b60008060408385031215613c4f57600080fd5b8235613c5a81613c16565b91506020830135613c6a81613c2e565b809150509250929050565b600060208083528351808285015260005b81811015613ca257858101830151858201604001528201613c86565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060408385031215613cd657600080fd5b8235613ce181613c16565b946020939093013593505050565b600060208284031215613d0157600080fd5b5035919050565b600080600060608486031215613d1d57600080fd5b8335613d2881613c16565b92506020840135613d3881613c16565b929592945050506040919091013590565b60008060408385031215613d5c57600080fd5b823591506020830135613c6a81613c2e565b600060208284031215613d8057600080fd5b81356113e381613c16565b803560ff81168114613d9c57600080fd5b919050565b60008060008060808587031215613db757600080fd5b613dc085613d8b565b9350613dce60208601613d8b565b9250613ddc60408601613d8b565b9150613dea60608601613d8b565b905092959194509250565b600080600060608486031215613e0a57600080fd5b8335613e1581613c16565b92506020840135613e2581613c16565b91506040840135613e3581613c16565b809150509250925092565b60008060408385031215613e5357600080fd5b8235613e5e81613c16565b91506020830135613c6a81613c16565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526035908201527f4d6574614d657263653a204163636f756e7420697320616c7265616479207468604082015274652076616c7565206f6620276578636c756465642760581b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b81810381811115610c6b57610c6b613f0e565b634e487b7160e01b600052603160045260246000fd5b600060018201613f5f57613f5f613f0e565b5060010190565b600060208284031215613f7857600080fd5b81516113e381613c16565b600060208284031215613f9557600080fd5b81516113e381613c2e565b634e487b7160e01b600052601260045260246000fd5b600082613fc557613fc5613fa0565b500490565b6000816000190483118215151615613fe457613fe4613f0e565b500290565b80820180821115610c6b57610c6b613f0e565b68ffffffffffffffffff1991909116815260200190565b60ff8181168382160190811115610c6b57610c6b613f0e565b600060ff83168061403f5761403f613fa0565b8060ff84160491505092915050565b60ff8281168282160390811115610c6b57610c6b613f0e565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156140b75784516001600160a01b031683529383019391830191600101614092565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156140ed57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365e4c649bdef80a9884d04138447ed68ee6c8a76c0f3f220dfa855dec4ffadc63845524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212208d7237bb1f0afded66d67fa852453d71e4b33918b389ed1b15f43fe6033e8cec64736f6c63430008100033
Deployed Bytecode
0x6080604052600436106102cd5760003560e01c806370a0823111610175578063a9059cbb116100dc578063cd43e22811610095578063d46980161161006f578063d4698016146108f2578063dd62ed3e14610912578063f2fde38b14610958578063fe0175351461097857600080fd5b8063cd43e2281461085d578063d2d7ad83146108bc578063d3221576146108d257600080fd5b8063a9059cbb14610797578063aa4bde28146107b7578063aee50b1e146107cd578063b62496f5146107ed578063bea9849e1461081d578063c02466681461083d57600080fd5b8063880bcbc11161012e578063880bcbc1146106d55780638c0b5e22146106f55780638da5cb5b1461070b57806395d89b41146107295780639d952ce914610757578063a457c2d71461077757600080fd5b806370a0823114610620578063715018a61461064057806375cb1bd11461065557806375f0a87414610675578063781edb3c146106955780637c0a893d146106b557600080fd5b80631fcfefcd1161023457806334cf1fea116101ed57806345a42329116101c757806345a423291461058c57806349bd5a5e146105ac5780634d78fdc6146105e0578063667812911461060057600080fd5b806334cf1fea14610537578063395093511461054c5780634549b0391461056c57600080fd5b80631fcfefcd1461049057806323b872dd146104a657806327a14fc2146104c65780632cc25d14146104e65780632d838119146104fb578063313ce5671461051b57600080fd5b806313114a9d1161028657806313114a9d146103c057806314fbc5f3146103df5780631694505e146103f957806318160ddd146104315780631cd348c0146104505780631e293c101461047057600080fd5b80630483f7a0146102d9578063064a59d0146102fb57806306fdde031461032a578063095ea7b31461036b578063098df5851461038b5780630bd05b69146103ab57600080fd5b366102d457005b600080fd5b3480156102e557600080fd5b506102f96102f4366004613c3c565b6109b3565b005b34801561030757600080fd5b506007546103159060ff1681565b60405190151581526020015b60405180910390f35b34801561033657600080fd5b5060408051808201909152600f81526e26b2ba30a6b2b931b2902a37b5b2b760891b60208201525b6040516103219190613c75565b34801561037757600080fd5b50610315610386366004613cc3565b610c5a565b34801561039757600080fd5b506102f96103a6366004613cef565b610c71565b3480156103b757600080fd5b506102f9610e13565b3480156103cc57600080fd5b506006545b604051908152602001610321565b3480156103eb57600080fd5b506015546103159060ff1681565b34801561040557600080fd5b50600154610419906001600160a01b031681565b6040516001600160a01b039091168152602001610321565b34801561043d57600080fd5b506b033b2e3c9fd0803ce80000006103d1565b34801561045c57600080fd5b50600e54610419906001600160a01b031681565b34801561047c57600080fd5b506102f961048b366004613cef565b610e8d565b34801561049c57600080fd5b506103d160125481565b3480156104b257600080fd5b506103156104c1366004613d08565b610f56565b3480156104d257600080fd5b506102f96104e1366004613cef565b610fbf565b3480156104f257600080fd5b506102f961108c565b34801561050757600080fd5b506103d1610516366004613cef565b61135b565b34801561052757600080fd5b5060405160128152602001610321565b34801561054357600080fd5b506102f96113ea565b34801561055857600080fd5b50610315610567366004613cc3565b61144e565b34801561057857600080fd5b506103d1610587366004613d49565b611484565b34801561059857600080fd5b506102f96105a7366004613c3c565b61156a565b3480156105b857600080fd5b506104197f000000000000000000000000cf3f1359013a002fd97735275101543d34e89d7c81565b3480156105ec57600080fd5b506102f96105fb366004613d6e565b611682565b34801561060c57600080fd5b506102f961061b366004613da1565b61176b565b34801561062c57600080fd5b506103d161063b366004613d6e565b611819565b34801561064c57600080fd5b506102f9611878565b34801561066157600080fd5b506102f9610670366004613df5565b6118ec565b34801561068157600080fd5b50600d54610419906001600160a01b031681565b3480156106a157600080fd5b506102f96106b0366004613c3c565b611bfd565b3480156106c157600080fd5b506102f96106d0366004613d6e565b611cbf565b3480156106e157600080fd5b506102f96106f0366004613c3c565b611e2f565b34801561070157600080fd5b506103d160095481565b34801561071757600080fd5b506000546001600160a01b0316610419565b34801561073557600080fd5b5060408051808201909152600581526426a6aa25a760d91b602082015261035e565b34801561076357600080fd5b506102f9610772366004613da1565b611ef1565b34801561078357600080fd5b50610315610792366004613cc3565b611f46565b3480156107a357600080fd5b506103156107b2366004613cc3565b611f95565b3480156107c357600080fd5b506103d160085481565b3480156107d957600080fd5b506102f96107e8366004613cef565b611fa2565b3480156107f957600080fd5b50610315610808366004613d6e565b601e6020526000908152604090205460ff1681565b34801561082957600080fd5b506102f9610838366004613d6e565b612076565b34801561084957600080fd5b506102f9610858366004613c3c565b612172565b34801561086957600080fd5b5060115460ff80821691620100008104821691600160201b8204811691600160301b9004165b6040805160ff95861681529385166020850152918416918301919091529091166060820152608001610321565b3480156108c857600080fd5b506103d1600b5481565b3480156108de57600080fd5b506102f96108ed366004613c3c565b612234565b3480156108fe57600080fd5b50600c54610419906001600160a01b031681565b34801561091e57600080fd5b506103d161092d366004613e40565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801561096457600080fd5b506102f9610973366004613d6e565b6122b6565b34801561098457600080fd5b5060115460ff610100820481169163010000008104821691600160281b8204811691600160381b90041661088f565b6000546001600160a01b031633146109e65760405162461bcd60e51b81526004016109dd90613e6e565b60405180910390fd5b6001600160a01b0382166000908152601b602052604090205481151560ff909116151503610a265760405162461bcd60e51b81526004016109dd90613ea3565b8015610aee576001600160a01b03821660009081526002602052604090205415610a86576001600160a01b038216600090815260026020526040902054610a6c9061135b565b6001600160a01b0383166000908152600360205260409020555b6001600160a01b0382166000818152601b60205260408120805460ff1916841515179055601d805460018101825591527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f0180546001600160a01b0319169091179055610c11565b60005b601d54811015610c0f57826001600160a01b0316601d8281548110610b1857610b18613ef8565b6000918252602090912001546001600160a01b031603610bfd57601d8054610b4290600190613f24565b81548110610b5257610b52613ef8565b600091825260209091200154601d80546001600160a01b039092169183908110610b7e57610b7e613ef8565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600382526040808220829055601b90925220805460ff19169055601d805480610bd657610bd6613f37565b600082815260209020810160001990810180546001600160a01b0319169055019055610c0f565b80610c0781613f4d565b915050610af1565b505b816001600160a01b03167fcb9d59a6e9da25dee1a9ddef81481537dfd94e20b1593b58b08193bea9e9baa982604051610c4e911515815260200190565b60405180910390a25050565b6000610c673384846123e2565b5060015b92915050565b6000546001600160a01b03163314610c9b5760405162461bcd60e51b81526004016109dd90613e6e565b478110610d045760405162461bcd60e51b815260206004820152603160248201527f4d6574614d657263653a2043616e6e6f742073656e64206d6f7265207468616e60448201527020636f6e74726163742062616c616e636560781b60648201526084016109dd565b600080546040516001600160a01b039091169083908381818185875af1925050503d8060008114610d51576040519150601f19603f3d011682016040523d82523d6000602084013e610d56565b606091505b505090508015610e0f57600154604080516315ab88c960e31b815290517fb16273d5dd95f4997020a9e2e429331d472940f09fe08af28db9672639cc251d926001600160a01b03169163ad5c46489160048083019260209291908290030181865afa158015610dc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ded9190613f66565b604080516001600160a01b039092168252602082018590520160405180910390a15b5050565b6000546001600160a01b03163314610e3d5760405162461bcd60e51b81526004016109dd90613e6e565b6007805460ff19166001179055601354600003610e5d5742601355436014555b6040516000906001907fa0f694e30e34d9f05d12691b612650129ed8888d1f93b25fa0cd92e4416a8338908390a3565b6000546001600160a01b03163314610eb75760405162461bcd60e51b81526004016109dd90613e6e565b6009548103610f235760405162461bcd60e51b815260206004820152603260248201527f4d6574614d657263653a2043616e6e6f7420757064617465206d61785478416d6044820152716f756e7420746f2073616d652076616c756560701b60648201526084016109dd565b60095460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600955565b6000610f63848484612506565b610fb58433610fb085604051806060016040528060288152602001614107602891396001600160a01b038a1660009081526004602090815260408083203384529091529020549190612abd565b6123e2565b5060019392505050565b6000546001600160a01b03163314610fe95760405162461bcd60e51b81526004016109dd90613e6e565b60085481036110595760405162461bcd60e51b815260206004820152603660248201527f4d6574614d657263653a2043616e6e6f7420757064617465206d617857616c6c6044820152756574416d6f756e7420746f2073616d652076616c756560501b60648201526084016109dd565b60085460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600855565b6000546001600160a01b031633146110b65760405162461bcd60e51b81526004016109dd90613e6e565b6000601354116111145760405162461bcd60e51b8152602060048201526024808201527f4d6574614d657263653a204c61756e6368206d7573742068617665206f6363756044820152631c9c995960e21b60648201526084016109dd565b60155460ff16156111825760405162461bcd60e51b815260206004820152603260248201527f4d6574614d657263653a204c61756e636820746f6b656e73206861766520616c6044820152711c9958591e481899595b8818db185a5b595960721b60648201526084016109dd565b6005601454436111929190613f24565b116111f85760405162461bcd60e51b815260206004820152603060248201527f4d6574614d657263653a204f6e6c7920636c61696d206c61756e636820746f6b60448201526f0cadce640c2cce8cae440d8c2eadcc6d60831b60648201526084016109dd565b600061120330611819565b6015805460ff191660011790556012549091508110156112805760405162461bcd60e51b815260206004820152603260248201527f4d6574614d657263653a2041207377617020616e64206c6971756966792068616044820152711cc8185b1c9958591e481bd8d8dd5c9c995960721b60648201526084016109dd565b60128054600091829055903063a9059cbb6112a36000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018590526044016020604051808303816000875af11580156112f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113149190613f83565b905080156113565760408051308152602081018490527fb16273d5dd95f4997020a9e2e429331d472940f09fe08af28db9672639cc251d910160405180910390a15b505050565b60006005548211156113cd5760405162461bcd60e51b815260206004820152603560248201527f4d6574614d657263653a20416d6f756e74206d757374206265206c657373207460448201527468616e20746f74616c207265666c656374696f6e7360581b60648201526084016109dd565b60006113d7612af7565b90506113e38184613fb6565b9392505050565b6000546001600160a01b031633146114145760405162461bcd60e51b81526004016109dd90613e6e565b6007805460ff191690556040516001906000907fa0f694e30e34d9f05d12691b612650129ed8888d1f93b25fa0cd92e4416a8338908290a3565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610c67918590610fb09086612b1a565b60006b033b2e3c9fd0803ce80000008311156114f55760405162461bcd60e51b815260206004820152602a60248201527f4d6574614d657263653a20416d6f756e74206d757374206265206c657373207460448201526968616e20737570706c7960b01b60648201526084016109dd565b60006114ff612af7565b9050600061150d8286613fca565b90508361151d579150610c6b9050565b601f54600090839060649061153c90600160201b900460ff1689613fca565b6115469190613fb6565b6115509190613fca565b9050600061155e8284613f24565b9450610c6b9350505050565b6000546001600160a01b031633146115945760405162461bcd60e51b81526004016109dd90613e6e565b6001600160a01b0382166000908152601c602052604090205481151560ff90911615150361162a5760405162461bcd60e51b815260206004820152603a60248201527f4d6574614d657263653a205468652073656c65637465642077616c6c6574206960448201527f7320616c72656164792073657420746f207468652076616c756500000000000060648201526084016109dd565b6001600160a01b0382166000818152601c6020908152604091829020805460ff191685151590811790915591519182527fe70512a569cf898db2e20aa3b4cc3f0dd13377b82a493840d326ab5a196668779101610c4e565b6000546001600160a01b031633146116ac5760405162461bcd60e51b81526004016109dd90613e6e565b6001600160a01b03811660009081526016602052604090205460ff1661171e5760405162461bcd60e51b815260206004820152602160248201527f4d6574614d657263653a204163636f756e74206973206e6f7420626c636f6b656044820152601960fa1b60648201526084016109dd565b6001600160a01b038116600081815260166020526040808220805460ff19169055519091907f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba908390a350565b6000546001600160a01b031633146117955760405162461bcd60e51b81526004016109dd90613e6e565b6117a3600f85858585612b79565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d015b6040805191829003822060ff878116845286811660208501528581168484015284166060840152905190917f69848adfba904cea9fd12f8e800c6bae1d85101b0becc5910e509a93d81449e9919081900360800190a250505050565b6001600160a01b0381166000908152601b602052604081205460ff161561185657506001600160a01b031660009081526003602052604090205490565b6001600160a01b038216600090815260026020526040902054610c6b9061135b565b6000546001600160a01b031633146118a25760405162461bcd60e51b81526004016109dd90613e6e565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146119165760405162461bcd60e51b81526004016109dd90613e6e565b600c546001600160a01b03848116911614611a0d576001600160a01b0383166119945760405162461bcd60e51b815260206004820152602a60248201527f4d6574614d657263653a20546865206c697175696469747957616c6c657420636044820152690616e6e6f7420626520360b41b60648201526084016109dd565b600c546040516e1b1a5c5d5a591a5d1e55d85b1b195d608a1b81526001600160a01b0391821691851690600f01604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600c80546001600160a01b0319166001600160a01b0385161790555b600d546001600160a01b03838116911614611b04576001600160a01b038216611a8b5760405162461bcd60e51b815260206004820152602a60248201527f4d6574614d657263653a20546865206d61726b6574696e6757616c6c657420636044820152690616e6e6f7420626520360b41b60648201526084016109dd565b600d546040516e1b585c9ad95d1a5b99d5d85b1b195d608a1b81526001600160a01b0391821691841690600f01604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600d80546001600160a01b0319166001600160a01b0384161790555b600e546001600160a01b03828116911614611356576001600160a01b038116611b805760405162461bcd60e51b815260206004820152602860248201527f4d6574614d657263653a20546865206275794261636b57616c6c65742063616e60448201526706e6f7420626520360c41b60648201526084016109dd565b600e546040516c189d5e509858dad5d85b1b195d609a1b81526001600160a01b0391821691831690600d01604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600e80546001600160a01b0383166001600160a01b0319909116179055505050565b6000546001600160a01b03163314611c275760405162461bcd60e51b81526004016109dd90613e6e565b6001600160a01b03821660009081526019602052604090205481151560ff909116151503611c675760405162461bcd60e51b81526004016109dd90613ea3565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e9101610c4e565b6000546001600160a01b03163314611ce95760405162461bcd60e51b81526004016109dd90613e6e565b6001600160a01b03811660009081526016602052604090205460ff1615611d605760405162461bcd60e51b815260206004820152602560248201527f4d6574614d657263653a204163636f756e7420697320616c726561647920626c6044820152641bd8dad95960da1b60648201526084016109dd565b60135415611ddd576202a30060135442611d7a9190613f24565b10611ddd5760405162461bcd60e51b815260206004820152602d60248201527f4d6574614d657263653a2054696d6520746f20626c6f636b206163636f756e7460448201526c1cc81a185cc8195e1c1a5c9959609a1b60648201526084016109dd565b6001600160a01b038116600081815260166020526040808220805460ff1916600190811790915590519092917f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba91a350565b6000546001600160a01b03163314611e595760405162461bcd60e51b81526004016109dd90613e6e565b6001600160a01b03821660009081526018602052604090205481151560ff909116151503611e995760405162461bcd60e51b81526004016109dd90613ea3565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a409101610c4e565b6000546001600160a01b03163314611f1b5760405162461bcd60e51b81526004016109dd90613e6e565b611f29600f85858585612ddf565b6040516b62617365466565732d42757960a01b8152600c016117bd565b6000610c673384610fb08560405180606001604052806025815260200161414f602591393360009081526004602090815260408083206001600160a01b038d1684529091529020549190612abd565b6000610c67338484612506565b6000546001600160a01b03163314611fcc5760405162461bcd60e51b81526004016109dd90613e6e565b600b5481036120435760405162461bcd60e51b815260206004820152603e60248201527f4d6574614d657263653a2043616e6e6f7420757064617465206d696e696d756d60448201527f546f6b656e734265666f72655377617020746f2073616d652076616c7565000060648201526084016109dd565b600b5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600b55565b6000546001600160a01b031633146120a05760405162461bcd60e51b81526004016109dd90613e6e565b6001546001600160a01b03908116908216036121155760405162461bcd60e51b815260206004820152602e60248201527f4d6574614d657263653a2054686520726f7574657220616c726561647920686160448201526d732074686174206164647265737360901b60648201526084016109dd565b6001546040516001600160a01b03918216918316907f2afbff3ed601a8723765c7072d8ea8445e08f6f1874afd34a2b747a272c3ebad90600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461219c5760405162461bcd60e51b81526004016109dd90613e6e565b6001600160a01b03821660009081526017602052604090205481151560ff9091161515036121dc5760405162461bcd60e51b81526004016109dd90613ea3565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101610c4e565b6000546001600160a01b0316331461225e5760405162461bcd60e51b81526004016109dd90613e6e565b6001600160a01b0382166000818152601a6020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d3509101610c4e565b6000546001600160a01b031633146122e05760405162461bcd60e51b81526004016109dd90613e6e565b6001600160a01b0381166123455760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109dd565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60006113e383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061302c565b6001600160a01b0383166124445760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109dd565b6001600160a01b0382166124a55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109dd565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661256a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016109dd565b6001600160a01b0382166125cc5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016109dd565b600081116126395760405162461bcd60e51b815260206004820152603460248201527f4d6574614d657263653a205472616e7366657220616d6f756e74206d7573742060448201527362652067726561746572207468616e207a65726f60601b60648201526084016109dd565b61264283611819565b8111156126a65760405162461bcd60e51b815260206004820152602c60248201527f4d6574614d657263653a2043616e6e6f74207472616e73666572206d6f72652060448201526b7468616e2062616c616e636560a01b60648201526084016109dd565b6001600160a01b0383166000908152601a602052604090205460ff161580156126e857506001600160a01b0382166000908152601a602052604090205460ff16155b156129815760075460ff166127515760405162461bcd60e51b815260206004820152602960248201527f4d6574614d657263653a2054726164696e672069732063757272656e746c79206044820152683234b9b0b13632b21760b91b60648201526084016109dd565b6001600160a01b03821660009081526016602052604090205460ff16156127ba5760405162461bcd60e51b815260206004820152601d60248201527f4d6574614d657263653a204163636f756e7420697320626c6f636b656400000060448201526064016109dd565b6001600160a01b03831660009081526016602052604090205460ff16156128235760405162461bcd60e51b815260206004820152601d60248201527f4d6574614d657263653a204163636f756e7420697320626c6f636b656400000060448201526064016109dd565b6001600160a01b03821660009081526018602052604090205460ff1615801561286557506001600160a01b03831660009081526018602052604090205460ff16155b156128d6576009548111156128d65760405162461bcd60e51b815260206004820152603160248201527f4d6574614d657263653a2042757920616d6f756e742065786365656473207468604482015270329036b0bc2a3c213abca0b6b7bab73a1760791b60648201526084016109dd565b6001600160a01b03821660009081526019602052604090205460ff16612981576008548161290384611819565b61290d9190613fe9565b11156129815760405162461bcd60e51b815260206004820152603e60248201527f4d6574614d657263653a2045787065637465642077616c6c657420616d6f756e60448201527f74206578636565647320746865206d617857616c6c6574416d6f756e742e000060648201526084016109dd565b6001600160a01b038084166000908152601e60205260408082205492851682529020546129b69160ff9081169116848661305a565b6000600b546129c430611819565b600754911115915060ff1680156129d85750805b80156129e75750600a5460ff16155b80156129fe5750601f54600160201b900460ff1615155b8015612a2257506001600160a01b0383166000908152601e602052604090205460ff165b15612a4757600a805460ff19166001179055612a3c613276565b600a805460ff191690555b600a5460009060ff16158015612a5f575060075460ff165b6001600160a01b03861660009081526017602052604090205490915060ff1680612aa157506001600160a01b03841660009081526017602052604090205460ff165b15612aaa575060005b612ab6858585846134bc565b5050505050565b60008184841115612ae15760405162461bcd60e51b81526004016109dd9190613c75565b506000612aee8486613f24565b95945050505050565b6000806000612b04613685565b9092509050612b1382826123a0565b9250505090565b600080612b278385613fe9565b9050838110156113e35760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016109dd565b600285015460ff8581166101009092041614612c0a57604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028701548754919260ff6101009092048216929188169160008051602061412f83398151915291612beb9160481b90613ffc565b60405180910390a460028501805461ff00191661010060ff8716021790555b600285015460ff84811663010000009092041614612ca357604051711b585c9ad95d1a5b99d1995953db94d95b1b60721b815260120160405190819003812060028701548754919260ff63010000009092048216929187169160008051602061412f83398151915291612c809160481b90613ffc565b60405180910390a460028501805463ff0000001916630100000060ff8616021790555b600285015460ff838116600160281b9092041614612d3c576040516f189d5e509858dad1995953db94d95b1b60821b815260100160405190819003812060028701548754919260ff600160281b9092048216929186169160008051602061412f83398151915291612d179160481b90613ffc565b60405180910390a460028501805465ff00000000001916600160281b60ff8516021790555b600285015460ff828116600160381b9092041614612ab6576040516f1a1bdb19195c9cd1995953db94d95b1b60821b815260100160405190819003812060028701548754919260ff600160381b9092048216929185169160008051602061412f83398151915291612db09160481b90613ffc565b60405180910390a460028501805460ff8316600160381b0267ff00000000000000199091161790555050505050565b600285015460ff858116911614612e6057604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028701548754919260ff918216929188169160008051602061412f83398151915291612e469160481b90613ffc565b60405180910390a460028501805460ff191660ff86161790555b600285015460ff848116620100009092041614612ef457604051706d61726b6574696e674665654f6e42757960781b815260110160405190819003812060028701548754919260ff620100009092048216929187169160008051602061412f83398151915291612ed39160481b90613ffc565b60405180910390a460028501805462ff000019166201000060ff8616021790555b600285015460ff838116600160201b9092041614612f8b576040516e6275794261636b4665654f6e42757960881b8152600f0160405190819003812060028701548754919260ff600160201b9092048216929186169160008051602061412f83398151915291612f679160481b90613ffc565b60405180910390a460028501805464ff000000001916600160201b60ff8516021790555b600285015460ff828116600160301b9092041614612ab6576040516e686f6c646572734665654f6e42757960881b8152600f0160405190819003812060028701548754919260ff600160301b9092048216929185169160008051602061412f83398151915291612ffe9160481b90613ffc565b60405180910390a460028501805460ff8316600160301b0266ff000000000000199091161790555050505050565b6000818361304d5760405162461bcd60e51b81526004016109dd9190613c75565b506000612aee8486613fb6565b601f805463ffffffff19169055831561310157600060135411801561308d575060056014544361308a9190613f24565b11155b156130a457601f805460ff19166064179055613101565b601154601f805460ff80841661ffff1990921691909117610100620100008086048416919091029190911763ffff00001916600160201b850483169190910263ff000000191617600160301b909304166301000000029190911790555b821561316457601154601f805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b82158015613170575083155b80156131b657506001600160a01b0381166000908152601c602052604090205460ff16806131b657506001600160a01b0382166000908152601c602052604090205460ff165b1561321857601154601f805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b601f5460ff6301000000820481169162010000810482169161324291610100810482169116614013565b61324c9190614013565b6132569190614013565b601f60046101000a81548160ff021916908360ff16021790555050505050565b600061328130611819565b601f54909150479060ff600160201b820481169181811691610100820481169162010000810482169163010000009091041660006002866132c2878b613fca565b6132cc9190613fb6565b6132d69190613fb6565b905060006132e4828a613f24565b90506132ef8161382e565b60006132fb8947613f24565b905060008461330b60028a61402c565b613315908b61404e565b61331f919061404e565b60ff16905060006002828a60ff16856133389190613fca565b6133429190613fb6565b61334c9190613fb6565b905060008261335e60ff8b1686613fca565b6133689190613fb6565b905060006133768284613fe9565b6133809086613f24565b600d546040519192506001600160a01b03169083156108fc029084906000818181858888f193505050501580156133bb573d6000803e3d6000fd5b50600e546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156133f6573d6000803e3d6000fd5b508615613449576134078784613988565b60408051878152602081018590529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b5050601f805460ff97881663010000000263ff0000001999891662010000029990991663ffff0000199a89166101000261ffff199d8a16600160201b029d909d1664ff0000ffff19909216919091179a909716999099179990991796909616939093179390931790945550505050505050565b60008060006134cb8585613a35565b9250925092506000806000806134ea8987876134e5612af7565b613aeb565b6001600160a01b038f166000908152601b60205260409020549397509195509350915060ff1615613553576001600160a01b038b16600090815260036020526040902054613539908a90613f24565b6001600160a01b038c166000908152600360205260409020555b6001600160a01b038a166000908152601b602052604090205460ff16156135b2576001600160a01b038a16600090815260036020526040902054613598908890613fe9565b6001600160a01b038b166000908152600360205260409020555b6001600160a01b038b166000908152600260205260409020546135d6908590613f24565b6001600160a01b03808d1660009081526002602052604080822093909355908c1681522054613606908490613fe9565b6001600160a01b038b1660009081526002602052604090205561362b82878388613b43565b896001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8960405161367091815260200190565b60405180910390a35050505050505050505050565b60055460009081906b033b2e3c9fd0803ce8000000825b601d548110156137ea578260026000601d84815481106136be576136be613ef8565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061372957508160036000601d848154811061370257613702613ef8565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15613748575050600554936b033b2e3c9fd0803ce80000009350915050565b60026000601d838154811061375f5761375f613ef8565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461378e9084613f24565b925060036000601d83815481106137a7576137a7613ef8565b60009182526020808320909101546001600160a01b031683528201929092526040019020546137d69083613f24565b9150806137e281613f4d565b91505061369c565b506b033b2e3c9fd0803ce80000006005546138059190613fb6565b821015613825575050600554926b033b2e3c9fd0803ce800000092509050565b90939092509050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061386357613863613ef8565b6001600160a01b03928316602091820292909201810191909152600154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156138bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138e09190613f66565b816001815181106138f3576138f3613ef8565b6001600160a01b03928316602091820292909201015260015461391991309116846123e2565b60015460405163791ac94760e01b81526001600160a01b039091169063791ac94790613952908590600090869030904290600401614067565b600060405180830381600087803b15801561396c57600080fd5b505af1158015613980573d6000803e3d6000fd5b505050505050565b6001546139a09030906001600160a01b0316846123e2565b600154600c5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015613a10573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612ab691906140d8565b600080600083613a4d57508391506000905080613ae4565b601f54600090606490613a6a906301000000900460ff1688613fca565b613a749190613fb6565b601f5490915060009060649060ff620100008204811691613a9d91610100820481169116614013565b613aa79190614013565b613ab49060ff1689613fca565b613abe9190613fb6565b90506000613acc8284613fe9565b613ad69089613f24565b95509193509150613ae49050565b9250925092565b600080808080613afb868a613fca565b90506000613b09878a613fca565b90506000613b17888a613fca565b90506000613b258284613fe9565b613b2f9085613f24565b939c939b5091995097509095505050505050565b8360056000828254613b559190613f24565b925050819055508260066000828254613b6e9190613fe9565b909155505060135415801590613b925750600560145443613b8f9190613f24565b11155b15613baf578060126000828254613ba99190613fe9565b90915550505b306000908152601b602052604090205460ff1615613bec573060009081526003602052604081208054839290613be6908490613fe9565b90915550505b3060009081526002602052604081208054849290613c0b908490613fe9565b909155505050505050565b6001600160a01b0381168114613c2b57600080fd5b50565b8015158114613c2b57600080fd5b60008060408385031215613c4f57600080fd5b8235613c5a81613c16565b91506020830135613c6a81613c2e565b809150509250929050565b600060208083528351808285015260005b81811015613ca257858101830151858201604001528201613c86565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060408385031215613cd657600080fd5b8235613ce181613c16565b946020939093013593505050565b600060208284031215613d0157600080fd5b5035919050565b600080600060608486031215613d1d57600080fd5b8335613d2881613c16565b92506020840135613d3881613c16565b929592945050506040919091013590565b60008060408385031215613d5c57600080fd5b823591506020830135613c6a81613c2e565b600060208284031215613d8057600080fd5b81356113e381613c16565b803560ff81168114613d9c57600080fd5b919050565b60008060008060808587031215613db757600080fd5b613dc085613d8b565b9350613dce60208601613d8b565b9250613ddc60408601613d8b565b9150613dea60608601613d8b565b905092959194509250565b600080600060608486031215613e0a57600080fd5b8335613e1581613c16565b92506020840135613e2581613c16565b91506040840135613e3581613c16565b809150509250925092565b60008060408385031215613e5357600080fd5b8235613e5e81613c16565b91506020830135613c6a81613c16565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526035908201527f4d6574614d657263653a204163636f756e7420697320616c7265616479207468604082015274652076616c7565206f6620276578636c756465642760581b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b81810381811115610c6b57610c6b613f0e565b634e487b7160e01b600052603160045260246000fd5b600060018201613f5f57613f5f613f0e565b5060010190565b600060208284031215613f7857600080fd5b81516113e381613c16565b600060208284031215613f9557600080fd5b81516113e381613c2e565b634e487b7160e01b600052601260045260246000fd5b600082613fc557613fc5613fa0565b500490565b6000816000190483118215151615613fe457613fe4613f0e565b500290565b80820180821115610c6b57610c6b613f0e565b68ffffffffffffffffff1991909116815260200190565b60ff8181168382160190811115610c6b57610c6b613f0e565b600060ff83168061403f5761403f613fa0565b8060ff84160491505092915050565b60ff8281168282160390811115610c6b57610c6b613f0e565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156140b75784516001600160a01b031683529383019391830191600101614092565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156140ed57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365e4c649bdef80a9884d04138447ed68ee6c8a76c0f3f220dfa855dec4ffadc63845524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212208d7237bb1f0afded66d67fa852453d71e4b33918b389ed1b15f43fe6033e8cec64736f6c63430008100033
Deployed Bytecode Sourcemap
7734:25710:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17086:829;;;;;;;;;;-1:-1:-1;17086:829:0;;;;;:::i;:::-;;:::i;:::-;;8422:28;;;;;;;;;;-1:-1:-1;8422:28:0;;;;;;;;;;;825:14:1;;818:22;800:41;;788:2;773:18;8422:28:0;;;;;;;;21754:76;;;;;;;;;;-1:-1:-1;21820:5:0;;;;;;;;;;;;-1:-1:-1;;;21820:5:0;;;;21754:76;;;;;;;:::i;13084:146::-;;;;;;;;;;-1:-1:-1;13084:146:0;;;;;:::i;:::-;;:::i;21431:305::-;;;;;;;;;;-1:-1:-1;21431:305:0;;;;;:::i;:::-;;:::i;14298:277::-;;;;;;;;;;;;;:::i;22293:80::-;;;;;;;;;;-1:-1:-1;22358:10:0;;22293:80;;;2056:25:1;;;2044:2;2029:18;22293:80:0;1910:177:1;9389:32:0;;;;;;;;;;-1:-1:-1;9389:32:0;;;;;;;;7842:30;;;;;;;;;;-1:-1:-1;7842:30:0;;;;-1:-1:-1;;;;;7842:30:0;;;;;;-1:-1:-1;;;;;2271:32:1;;;2253:51;;2241:2;2226:18;7842:30:0;2092:218:1;22003:88:0;;;;;;;;;;-1:-1:-1;8314:19:0;22003:88;;8819:28;;;;;;;;;;-1:-1:-1;8819:28:0;;;;-1:-1:-1;;;;;8819:28:0;;;19875:252;;;;;;;;;;-1:-1:-1;19875:252:0;;;;;:::i;:::-;;:::i;9276:27::-;;;;;;;;;;;;;;;;13233:292;;;;;;;;;;-1:-1:-1;13233:292:0;;;;;:::i;:::-;;:::i;20130:258::-;;;;;;;;;;-1:-1:-1;20130:258:0;;;;;:::i;:::-;;:::i;20701:727::-;;;;;;;;;;;;;:::i;22904:240::-;;;;;;;;;;-1:-1:-1;22904:240:0;;;;;:::i;:::-;;:::i;21916:84::-;;;;;;;;;;-1:-1:-1;21916:84:0;;8054:2;3126:36:1;;3114:2;3099:18;21916:84:0;2984:184:1;14578:124:0;;;;;;;;;;;;;:::i;13528:202::-;;;;;;;;;;-1:-1:-1;13528:202:0;;;;;:::i;:::-;;:::i;23147:481::-;;;;;;;;;;-1:-1:-1;23147:481:0;;;;;:::i;:::-;;:::i;14913:328::-;;;;;;;;;;-1:-1:-1;14913:328:0;;;;;:::i;:::-;;:::i;7876:38::-;;;;;;;;;;;;;;;15918:213;;;;;;;;;;-1:-1:-1;15918:213:0;;;;;:::i;:::-;;:::i;19201:385::-;;;;;;;;;;-1:-1:-1;19201:385:0;;;;;:::i;:::-;;:::i;22094:196::-;;;;;;;;;;-1:-1:-1;22094:196:0;;;;;:::i;:::-;;:::i;7366:133::-;;;;;;;;;;;;;:::i;17918:906::-;;;;;;;;;;-1:-1:-1;17918:906:0;;;;;:::i;:::-;;:::i;8785:30::-;;;;;;;;;;-1:-1:-1;8785:30:0;;;;-1:-1:-1;;;;;8785:30:0;;;16762:321;;;;;;;;;;-1:-1:-1;16762:321:0;;;;;:::i;:::-;;:::i;15546:369::-;;;;;;;;;;-1:-1:-1;15546:369:0;;;;;:::i;:::-;;:::i;16421:338::-;;;;;;;;;;-1:-1:-1;16421:338:0;;;;;:::i;:::-;;:::i;8598:50::-;;;;;;;;;;;;;;;;7182:70;;;;;;;;;;-1:-1:-1;7220:7:0;7241:6;-1:-1:-1;;;;;7241:6:0;7182:70;;21833:80;;;;;;;;;;-1:-1:-1;21901:7:0;;;;;;;;;;;;-1:-1:-1;;;21901:7:0;;;;21833:80;;18827:371;;;;;;;;;;-1:-1:-1;18827:371:0;;;;;:::i;:::-;;:::i;13733:253::-;;;;;;;;;;-1:-1:-1;13733:253:0;;;;;:::i;:::-;;:::i;12927:154::-;;;;;;;;;;-1:-1:-1;12927:154:0;;;;;:::i;:::-;;:::i;8491:54::-;;;;;;;;;;;;;;;;20391:307;;;;;;;;;;-1:-1:-1;20391:307:0;;;;;:::i;:::-;;:::i;9911:58::-;;;;;;;;;;-1:-1:-1;9911:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;19589:283;;;;;;;;;;-1:-1:-1;19589:283:0;;;;;:::i;:::-;;:::i;16134:284::-;;;;;;;;;;-1:-1:-1;16134:284:0;;;;;:::i;:::-;;:::i;22515:189::-;;;;;;;;;;-1:-1:-1;22604:23:0;;;;;;;22629;;;;;;-1:-1:-1;;;22654:21:0;;;;;-1:-1:-1;;;22677:21:0;;;22515:189;;;;5077:4:1;5065:17;;;5047:36;;5119:17;;;5114:2;5099:18;;5092:45;5173:17;;;5153:18;;;5146:45;;;;5227:17;;;5222:2;5207:18;;5200:45;5034:3;5019:19;22515:189:0;4832:419:1;8680:62:0;;;;;;;;;;;;;;;;14705:202;;;;;;;;;;-1:-1:-1;14705:202:0;;;;;:::i;:::-;;:::i;8751:30::-;;;;;;;;;;-1:-1:-1;8751:30:0;;;;-1:-1:-1;;;;;8751:30:0;;;22376:136;;;;;;;;;;-1:-1:-1;22376:136:0;;;;;:::i;:::-;-1:-1:-1;;;;;22480:18:0;;;22459:7;22480:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;22376:136;7504:223;;;;;;;;;;-1:-1:-1;7504:223:0;;;;;:::i;:::-;;:::i;22707:194::-;;;;;;;;;;-1:-1:-1;22797:24:0;;;;;;;;;22823;;;;;;-1:-1:-1;;;22849:22:0;;;;;-1:-1:-1;;;22873:22:0;;;22707:194;;17086:829;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;17178:33:0;::::1;;::::0;;;:24:::1;:33;::::0;;;;;:45;::::1;;:33;::::0;;::::1;:45;;::::0;17170:111:::1;;;;-1:-1:-1::0;;;17170:111:0::1;;;;;;;:::i;:::-;17289:8;17286:570;;;-1:-1:-1::0;;;;;17308:16:0;::::1;17327:1;17308:16:::0;;;:7:::1;:16;::::0;;;;;:20;17305:95:::1;;-1:-1:-1::0;;;;;17376:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;17356:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;17337:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;17305:95:::1;-1:-1:-1::0;;;;;17405:33:0;::::1;;::::0;;;:24:::1;:33;::::0;;;;:44;;-1:-1:-1;;17405:44:0::1;::::0;::::1;;;::::0;;17455:22:::1;:36:::0;;-1:-1:-1;17455:36:0;::::1;::::0;;;;;::::1;::::0;;-1:-1:-1;;;;;;17455:36:0::1;::::0;;::::1;::::0;;17286:570:::1;;;17514:9;17509:342;17533:22;:29:::0;17529:33;::::1;17509:342;;;17609:7;-1:-1:-1::0;;;;;17580:36:0::1;:22;17603:1;17580:25;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;17580:25:0::1;:36:::0;17576:269:::1;;17654:22;17677:29:::0;;:33:::1;::::0;17709:1:::1;::::0;17677:33:::1;:::i;:::-;17654:57;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;17626:22:::1;:25:::0;;-1:-1:-1;;;;;17654:57:0;;::::1;::::0;17649:1;;17626:25;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:85:::0;;-1:-1:-1;;;;;;17626:85:0::1;-1:-1:-1::0;;;;;17626:85:0;;::::1;;::::0;;17719:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;17747:24:::1;:33:::0;;;;:41;;-1:-1:-1;;17747:41:0::1;::::0;;17796:22:::1;:28:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;17796:28:0;;;;;-1:-1:-1;;;;;;17796:28:0::1;::::0;;;;;17832:5:::1;;17576:269;17564:3:::0;::::1;::::0;::::1;:::i;:::-;;;;17509:342;;;;17286:570;17892:7;-1:-1:-1::0;;;;;17865:45:0::1;;17901:8;17865:45;;;;825:14:1::0;818:22;800:41;;788:2;773:18;;660:187;17865:45:0::1;;;;;;;;17086:829:::0;;:::o;13084:146::-;13159:4;13170:39;6648:10;13193:7;13202:6;13170:8;:39::i;:::-;-1:-1:-1;13221:4:0;13084:146;;;;;:::o;21431:305::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;21514:21:::1;21505:6;:30;21497:92;;;::::0;-1:-1:-1;;;21497:92:0;;7303:2:1;21497:92:0::1;::::0;::::1;7285:21:1::0;7342:2;7322:18;;;7315:30;7381:34;7361:18;;;7354:62;-1:-1:-1;;;7432:18:1;;;7425:47;7489:19;;21497:92:0::1;7101:413:1::0;21497:92:0::1;21595:12;7241:6:::0;;21612:41:::1;::::0;-1:-1:-1;;;;;7241:6:0;;;;21642;;21595:12;21612:41;21595:12;21612:41;21642:6;7241;21612:41:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21594:59;;;21662:7;21658:74;;;21695:15;::::0;:22:::1;::::0;;-1:-1:-1;;;21695:22:0;;;;21681:45:::1;::::0;-1:-1:-1;;;;;21695:15:0::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:15;:22:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21681:45;::::0;;-1:-1:-1;;;;;8177:32:1;;;8159:51;;8241:2;8226:18;;8219:34;;;8132:18;21681:45:0::1;;;;;;;21658:74;21492:244;21431:305:::0;:::o;14298:277::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;14349:16:::1;:23:::0;;-1:-1:-1;;14349:23:0::1;14368:4;14349:23;::::0;;14387:21:::1;::::0;14349:16:::1;14387:26:::0;14383:146:::1;;14454:15;14430:21;:39:::0;14505:12:::1;14484:18;:33:::0;14383:146:::1;14538:32;::::0;14564:5:::1;::::0;14538:32;;::::1;::::0;14564:5;;14538:32:::1;14298:277::o:0;19875:252::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;19970:11:::1;;19958:8;:23:::0;19950:86:::1;;;::::0;-1:-1:-1;;;19950:86:0;;8466:2:1;19950:86:0::1;::::0;::::1;8448:21:1::0;8505:2;8485:18;;;8478:30;8544:34;8524:18;;;8517:62;-1:-1:-1;;;8595:18:1;;;8588:48;8653:19;;19950:86:0::1;8264:414:1::0;19950:86:0::1;20083:11;::::0;20046:49:::1;::::0;20073:8;;20046:49:::1;::::0;;;::::1;20100:11;:22:::0;19875:252::o;13233:292::-;13332:4;13343:36;13353:6;13361:9;13372:6;13343:9;:36::i;:::-;13384:120;13393:6;6648:10;13415:88;13453:6;13415:88;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13415:19:0;;;;;;:11;:19;;;;;;;;6648:10;13415:33;;;;;;;;;;:37;:88::i;:::-;13384:8;:120::i;:::-;-1:-1:-1;13516:4:0;13233:292;;;;;:::o;20130:258::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;20220:15:::1;;20208:8;:27:::0;20200:94:::1;;;::::0;-1:-1:-1;;;20200:94:0;;8885:2:1;20200:94:0::1;::::0;::::1;8867:21:1::0;8924:2;8904:18;;;8897:30;8963:34;8943:18;;;8936:62;-1:-1:-1;;;9014:18:1;;;9007:52;9076:19;;20200:94:0::1;8683:418:1::0;20200:94:0::1;20336:15;::::0;20304:48:::1;::::0;20326:8;;20304:48:::1;::::0;;;::::1;20357:15;:26:::0;20130:258::o;20701:727::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;20786:1:::1;20762:21;;:25;20754:74;;;::::0;-1:-1:-1;;;20754:74:0;;9308:2:1;20754:74:0::1;::::0;::::1;9290:21:1::0;9347:2;9327:18;;;9320:30;9386:34;9366:18;;;9359:62;-1:-1:-1;;;9437:18:1;;;9430:34;9481:19;;20754:74:0::1;9106:400:1::0;20754:74:0::1;20842:20;::::0;::::1;;20841:21;20833:84;;;::::0;-1:-1:-1;;;20833:84:0;;9713:2:1;20833:84:0::1;::::0;::::1;9695:21:1::0;9752:2;9732:18;;;9725:30;9791:34;9771:18;;;9764:62;-1:-1:-1;;;9842:18:1;;;9835:48;9900:19;;20833:84:0::1;9511:414:1::0;20833:84:0::1;20966:1;20945:18;;20930:12;:33;;;;:::i;:::-;:37;20922:98;;;::::0;-1:-1:-1;;;20922:98:0;;10132:2:1;20922:98:0::1;::::0;::::1;10114:21:1::0;10171:2;10151:18;;;10144:30;10210:34;10190:18;;;10183:62;-1:-1:-1;;;10261:18:1;;;10254:46;10317:19;;20922:98:0::1;9930:412:1::0;20922:98:0::1;21025:20;21048:24;21066:4;21048:9;:24::i;:::-;21077:20;:27:::0;;-1:-1:-1;;21077:27:0::1;21100:4;21077:27;::::0;;21117:12:::1;::::0;21025:47;;-1:-1:-1;21117:28:0;-1:-1:-1;21117:28:0::1;21109:91;;;::::0;-1:-1:-1;;;21109:91:0;;10549:2:1;21109:91:0::1;::::0;::::1;10531:21:1::0;10588:2;10568:18;;;10561:30;10627:34;10607:18;;;10600:62;-1:-1:-1;;;10678:18:1;;;10671:48;10736:19;;21109:91:0::1;10347:414:1::0;21109:91:0::1;21222:12;::::0;;21205:14:::1;21239:16:::0;;;;21222:12;21298:4:::1;21283:30;21314:7;7220::::0;7241:6;-1:-1:-1;;;;;7241:6:0;;7182:70;21314:7:::1;21283:47;::::0;-1:-1:-1;;;;;;21283:47:0::1;::::0;;;;;;-1:-1:-1;;;;;8177:32:1;;;21283:47:0::1;::::0;::::1;8159:51:1::0;8226:18;;;8219:34;;;8132:18;;21283:47:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21266:64;;21345:7;21341:80;;;21373:36;::::0;;21395:4:::1;8159:51:1::0;;8241:2;8226:18;;8219:34;;;21373:36:0::1;::::0;8132:18:1;21373:36:0::1;;;;;;;21341:80;20749:679;;;20701:727::o:0;22904:240::-;22970:7;23003;;22992;:18;;22984:84;;;;-1:-1:-1;;;22984:84:0;;11218:2:1;22984:84:0;;;11200:21:1;11257:2;11237:18;;;11230:30;11296:34;11276:18;;;11269:62;-1:-1:-1;;;11347:18:1;;;11340:51;11408:19;;22984:84:0;11016:417:1;22984:84:0;23073:19;23096:10;:8;:10::i;:::-;23073:33;-1:-1:-1;23118:21:0;23073:33;23118:7;:21;:::i;:::-;23111:28;22904:240;-1:-1:-1;;;22904:240:0:o;14578:124::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;14631:16:::1;:24:::0;;-1:-1:-1;;14631:24:0::1;::::0;;14665:32:::1;::::0;14631:24;;14650:5:::1;::::0;14665:32:::1;::::0;14650:5;;14665:32:::1;14578:124::o:0;13528:202::-;6648:10;13618:4;13658:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;13658:34:0;;;;;;;;;;13618:4;;13628:81;;13650:7;;13658:50;;13697:10;13658:38;:50::i;23147:481::-;23240:7;8314:19;23262:7;:18;;23254:73;;;;-1:-1:-1;;;23254:73:0;;11897:2:1;23254:73:0;;;11879:21:1;11936:2;11916:18;;;11909:30;11975:34;11955:18;;;11948:62;-1:-1:-1;;;12026:18:1;;;12019:40;12076:19;;23254:73:0;11695:406:1;23254:73:0;23332:19;23354:10;:8;:10::i;:::-;23332:32;-1:-1:-1;23369:15:0;23388:21;23332:32;23388:7;:21;:::i;:::-;23369:40;;23419:17;23414:210;;23451:7;-1:-1:-1;23444:14:0;;-1:-1:-1;23444:14:0;23414:210;23510:9;;23479:17;;23528:11;;23522:3;;23500:19;;-1:-1:-1;;;23510:9:0;;;;23500:7;:19;:::i;:::-;:25;;;;:::i;:::-;:39;;;;:::i;:::-;23479:60;-1:-1:-1;23545:23:0;23571:19;23479:60;23571:7;:19;:::i;:::-;23545:45;-1:-1:-1;23596:22:0;;-1:-1:-1;;;;23596:22:0;14913:328;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15015:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:47;::::1;;:38;::::0;;::::1;:47;;::::0;15007:118:::1;;;::::0;-1:-1:-1;;;15007:118:0;;12481:2:1;15007:118:0::1;::::0;::::1;12463:21:1::0;12520:2;12500:18;;;12493:30;12559:34;12539:18;;;12532:62;12630:28;12610:18;;;12603:56;12676:19;;15007:118:0::1;12279:422:1::0;15007:118:0::1;-1:-1:-1::0;;;;;15130:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:46;;-1:-1:-1;;15130:46:0::1;::::0;::::1;;::::0;;::::1;::::0;;;15186:50;;800:41:1;;;15186:50:0::1;::::0;773:18:1;15186:50:0::1;660:187:1::0;15918:213: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;;;;;15991:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;::::1;;15983:65;;;::::0;-1:-1:-1;;;15983:65:0;;12908:2:1;15983:65:0::1;::::0;::::1;12890:21:1::0;12947:2;12927:18;;;12920:30;12986:34;12966:18;;;12959:62;-1:-1:-1;;;13037:18:1;;;13030:31;13078:19;;15983:65:0::1;12706:397:1::0;15983:65:0::1;-1:-1:-1::0;;;;;16053:19:0;::::1;16075:5;16053:19:::0;;;:10:::1;:19;::::0;;;;;:27;;-1:-1:-1;;16053:27:0::1;::::0;;16090:36;16075:5;;16053:19;16090:36:::1;::::0;16075:5;;16090:36:::1;15918:213:::0;:::o;19201:385::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;19355:110:::1;19379:5;19386:19;19407;19428:17;19447;19355:23;:110::i;:::-;19475:106;::::0;-1:-1:-1;;;13310:28:1;;13363:2;13354:12;19475:106:0::1;;::::0;;;;;::::1;::::0;;5077:4:1;5065:17;;;5047:36;;5119:17;;;5114:2;5099:18;;5092:45;5173:17;;;5153:18;;;5146:45;5227:17;;5222:2;5207:18;;5200:45;19475:106:0;;;;::::1;::::0;;;;;5034:3:1;19475:106:0;;::::1;19201:385:::0;;;;:::o;22094:196::-;-1:-1:-1;;;;;22178:33:0;;22160:7;22178:33;;;:24;:33;;;;;;;;22174:62;;;-1:-1:-1;;;;;;22220:16:0;;;;;:7;:16;;;;;;;22094:196::o;22174:62::-;-1:-1:-1;;;;;22268:16:0;;;;;;:7;:16;;;;;;22248: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;17918:906::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;18047:15:::1;::::0;-1:-1:-1;;;;;18047:37:0;;::::1;:15:::0;::::1;:37;18044:262;;-1:-1:-1::0;;;;;18100:32:0;::::1;18092:87;;;::::0;-1:-1:-1;;;18092:87:0;;13579:2:1;18092:87:0::1;::::0;::::1;13561:21:1::0;13618:2;13598:18;;;13591:30;13657:34;13637:18;;;13630:62;-1:-1:-1;;;13708:18:1;;;13701:40;13758:19;;18092:87:0::1;13377:406:1::0;18092:87:0::1;18242:15;::::0;18190:68:::1;::::0;-1:-1:-1;;;13990:30:1;;-1:-1:-1;;;;;18242:15:0;;::::1;::::0;18190:68;::::1;::::0;14045:2:1;14036:12;18190:68:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;18264:15;:36:::0;;-1:-1:-1;;;;;;18264:36:0::1;-1:-1:-1::0;;;;;18264:36:0;::::1;;::::0;;18044:262:::1;18313:15;::::0;-1:-1:-1;;;;;18313:37:0;;::::1;:15:::0;::::1;:37;18310:262;;-1:-1:-1::0;;;;;18366:32:0;::::1;18358:87;;;::::0;-1:-1:-1;;;18358:87:0;;14261:2:1;18358:87:0::1;::::0;::::1;14243:21:1::0;14300:2;14280:18;;;14273:30;14339:34;14319:18;;;14312:62;-1:-1:-1;;;14390:18:1;;;14383:40;14440:19;;18358:87:0::1;14059:406:1::0;18358:87:0::1;18508:15;::::0;18456:68:::1;::::0;-1:-1:-1;;;14672:30:1;;-1:-1:-1;;;;;18508:15:0;;::::1;::::0;18456:68;::::1;::::0;14727:2:1;14718:12;18456:68:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;18530:15;:36:::0;;-1:-1:-1;;;;;;18530:36:0::1;-1:-1:-1::0;;;;;18530:36:0;::::1;;::::0;;18310:262:::1;18579:13;::::0;-1:-1:-1;;;;;18579:33:0;;::::1;:13:::0;::::1;:33;18576:244;;-1:-1:-1::0;;;;;18628:30:0;::::1;18620:83;;;::::0;-1:-1:-1;;;18620:83:0;;14943:2:1;18620:83:0::1;::::0;::::1;14925:21:1::0;14982:2;14962:18;;;14955:30;15021:34;15001:18;;;14994:62;-1:-1:-1;;;15072:18:1;;;15065:38;15120:19;;18620:83:0::1;14741:404:1::0;18620:83:0::1;18762:13;::::0;18714:62:::1;::::0;-1:-1:-1;;;15352:28:1;;-1:-1:-1;;;;;18762:13:0;;::::1;::::0;18714:62;::::1;::::0;15405:2:1;15396:12;18714:62:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;18782:13;:32:::0;;-1:-1:-1;;;;;18782:32:0;::::1;-1:-1:-1::0;;;;;;18782:32:0;;::::1;;::::0;;17918:906;;;:::o;16762:321::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16861:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:50;::::1;;:38;::::0;;::::1;:50;;::::0;16853:116:::1;;;;-1:-1:-1::0;;;16853:116:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16974:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:49;;-1:-1:-1;;16974:49:0::1;::::0;::::1;;::::0;;::::1;::::0;;;17033:45;;800:41:1;;;17033:45:0::1;::::0;773:18:1;17033:45:0::1;660:187:1::0;15546:369: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;;;;;15618:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;::::1;;15617:20;15609:70;;;::::0;-1:-1:-1;;;15609:70:0;;15621:2:1;15609:70:0::1;::::0;::::1;15603:21:1::0;15660:2;15640:18;;;15633:30;15699:34;15679:18;;;15672:62;-1:-1:-1;;;15750:18:1;;;15743:35;15795:19;;15609:70:0::1;15419:401:1::0;15609:70:0::1;15688:21;::::0;:25;15684:151:::1;;15773:6;15748:21;;15730:15;:39;;;;:::i;:::-;15729:50;15721:108;;;::::0;-1:-1:-1;;;15721:108:0;;16027:2:1;15721:108:0::1;::::0;::::1;16009:21:1::0;16066:2;16046:18;;;16039:30;16105:34;16085:18;;;16078:62;-1:-1:-1;;;16156:18:1;;;16149:43;16209:19;;15721:108:0::1;15825:409:1::0;15721:108:0::1;-1:-1:-1::0;;;;;15839:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;:26;;-1:-1:-1;;15839:26:0::1;15861:4;15839:26:::0;;::::1;::::0;;;15875:35;;15861:4;;15839:19;15875:35:::1;::::0;::::1;15546:369:::0;:::o;16421:338::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16525:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;:55;::::1;;:43;::::0;;::::1;:55;;::::0;16517:121:::1;;;;-1:-1:-1::0;;;16517:121:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16643:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;;;;:54;;-1:-1:-1;;16643:54:0::1;::::0;::::1;;::::0;;::::1;::::0;;;16707:47;;800:41:1;;;16707:47:0::1;::::0;773:18:1;16707:47:0::1;660:187:1::0;18827:371:0;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;18977:105:::1;19000:5;19007:18;19027;19047:16;19065;18977:22;:105::i;:::-;19092:101;::::0;-1:-1:-1;;;16441:27:1;;16493:2;16484:12;19092:101:0::1;16239:263:1::0;13733:253:0;13828:4;13839:126;6648:10;13861:7;13869:95;13908:15;13869:95;;;;;;;;;;;;;;;;;6648:10;13869:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;13869:34:0;;;;;;;;;;;;:38;:95::i;12927:154::-;13007:4;13018:42;6648:10;13042:9;13053:6;13018:9;:42::i;20391:307::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;20489:23:::1;;20477:8;:35:::0;20469:110:::1;;;::::0;-1:-1:-1;;;20469:110:0;;16709:2:1;20469:110:0::1;::::0;::::1;16691:21:1::0;16748:2;16728:18;;;16721:30;16787:34;16767:18;;;16760:62;16858:32;16838:18;;;16831:60;16908:19;;20469:110:0::1;16507:426:1::0;20469:110:0::1;20630:23;::::0;20589:65:::1;::::0;20620:8;;20589:65:::1;::::0;;;::::1;20659:23;:34:::0;20391:307::o;19589:283::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;19689:15:::1;::::0;-1:-1:-1;;;;;19689:15:0;;::::1;19667:38:::0;;::::1;::::0;19659:97:::1;;;::::0;-1:-1:-1;;;19659:97:0;;17140:2:1;19659:97:0::1;::::0;::::1;17122:21:1::0;17179:2;17159:18;;;17152:30;17218:34;17198:18;;;17191:62;-1:-1:-1;;;17269:18:1;;;17262:44;17323:19;;19659:97:0::1;16938:410:1::0;19659:97:0::1;19808:15;::::0;19766:59:::1;::::0;-1:-1:-1;;;;;19808:15:0;;::::1;::::0;19766:59;::::1;::::0;::::1;::::0;19808:15:::1;::::0;19766:59:::1;19830:15;:37:::0;;-1:-1:-1;;;;;;19830:37:0::1;-1:-1:-1::0;;;;;19830:37:0;;;::::1;::::0;;;::::1;::::0;;19589:283::o;16134:284::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16223:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;:39;::::1;;:27;::::0;;::::1;:39;;::::0;16215:105:::1;;;;-1:-1:-1::0;;;16215:105:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16325:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:38;;-1:-1:-1;;16325:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;16373:40;;800:41:1;;;16373:40:0::1;::::0;773:18:1;16373:40:0::1;660:187:1::0;14705:202: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;;;;;14794:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:48;;-1:-1:-1;;14794:48:0::1;::::0;::::1;;::::0;;::::1;::::0;;;14852:50;;800:41:1;;;14852:50:0::1;::::0;773:18:1;14852:50:0::1;660: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;;17555:2:1;7579:73:0::1;::::0;::::1;17537:21:1::0;17594:2;17574:18;;;17567:30;17633:34;17613:18;;;17606:62;-1:-1:-1;;;17684:18:1;;;17677:36;17730:19;;7579:73:0::1;17353: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;13989:306::-;-1:-1:-1;;;;;14074:19:0;;14066:68;;;;-1:-1:-1;;;14066:68:0;;17962:2:1;14066:68:0;;;17944:21:1;18001:2;17981:18;;;17974:30;18040:34;18020:18;;;18013:62;-1:-1:-1;;;18091:18:1;;;18084:34;18135:19;;14066:68:0;17760:400:1;14066:68:0;-1:-1:-1;;;;;14147:21:0;;14139:68;;;;-1:-1:-1;;;14139:68:0;;18367:2:1;14139:68:0;;;18349:21:1;18406:2;18386:18;;;18379:30;18445:34;18425:18;;;18418:62;-1:-1:-1;;;18496:18:1;;;18489:32;18538:19;;14139:68:0;18165:398:1;14139:68:0;-1:-1:-1;;;;;14212:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;14258:32;;2056:25:1;;;14258:32:0;;2029:18:1;14258:32:0;;;;;;;13989:306;;;:::o;23643:1613::-;-1:-1:-1;;;;;23736:18:0;;23728:68;;;;-1:-1:-1;;;23728:68:0;;18770:2:1;23728:68:0;;;18752:21:1;18809:2;18789:18;;;18782:30;18848:34;18828:18;;;18821:62;-1:-1:-1;;;18899:18:1;;;18892:35;18944:19;;23728:68:0;18568:401:1;23728:68:0;-1:-1:-1;;;;;23809:16:0;;23801:64;;;;-1:-1:-1;;;23801:64:0;;19176:2:1;23801:64:0;;;19158:21:1;19215:2;19195:18;;;19188:30;19254:34;19234:18;;;19227:62;-1:-1:-1;;;19305:18:1;;;19298:33;19348:19;;23801:64:0;18974:399:1;23801:64:0;23887:1;23878:6;:10;23870:75;;;;-1:-1:-1;;;23870:75:0;;19580:2:1;23870:75:0;;;19562:21:1;19619:2;19599:18;;;19592:30;19658:34;19638:18;;;19631:62;-1:-1:-1;;;19709:18:1;;;19702:50;19769:19;;23870:75:0;19378:416:1;23870:75:0;23968:15;23978:4;23968:9;:15::i;:::-;23958:6;:25;;23950:82;;;;-1:-1:-1;;;23950:82:0;;20001:2:1;23950:82:0;;;19983:21:1;20040:2;20020:18;;;20013:30;20079:34;20059:18;;;20052:62;-1:-1:-1;;;20130:18:1;;;20123:42;20182:19;;23950:82:0;19799:408:1;23950:82:0;-1:-1:-1;;;;;24043:35:0;;;;;;:29;:35;;;;;;;;24042:36;:74;;;;-1:-1:-1;;;;;;24083:33:0;;;;;;:29;:33;;;;;;;;24082:34;24042:74;24039:658;;;24132:16;;;;24124:70;;;;-1:-1:-1;;;24124:70:0;;20414:2:1;24124:70:0;;;20396:21:1;20453:2;20433:18;;;20426:30;20492:34;20472:18;;;20465:62;-1:-1:-1;;;20543:18:1;;;20536:39;20592:19;;24124:70:0;20212:405:1;24124:70:0;-1:-1:-1;;;;;24209:14:0;;;;;;:10;:14;;;;;;;;24208:15;24200:57;;;;-1:-1:-1;;;24200:57:0;;20824:2:1;24200:57:0;;;20806:21:1;20863:2;20843:18;;;20836:30;20902:31;20882:18;;;20875:59;20951:18;;24200:57:0;20622:353:1;24200:57:0;-1:-1:-1;;;;;24272:16:0;;;;;;:10;:16;;;;;;;;24271:17;24263:59;;;;-1:-1:-1;;;24263:59:0;;20824:2:1;24263:59:0;;;20806:21:1;20863:2;20843:18;;;20836:30;20902:31;20882:18;;;20875:59;20951:18;;24263:59:0;20622:353:1;24263:59:0;-1:-1:-1;;;;;24333:38:0;;;;;;:34;:38;;;;;;;;24332:39;:84;;;;-1:-1:-1;;;;;;24376:40:0;;;;;;:34;:40;;;;;;;;24375:41;24332:84;24328:187;;;24443:11;;24433:6;:21;;24425:83;;;;-1:-1:-1;;;24425:83:0;;21182:2:1;24425:83:0;;;21164:21:1;21221:2;21201:18;;;21194:30;21260:34;21240:18;;;21233:62;-1:-1:-1;;;21311:18:1;;;21304:47;21368:19;;24425:83:0;20980:413:1;24425:83:0;-1:-1:-1;;;;;24525:33:0;;;;;;:29;:33;;;;;;;;24520:172;;24603:15;;24592:6;24576:13;24586:2;24576:9;:13::i;:::-;:22;;;;:::i;:::-;24575:43;;24567:118;;;;-1:-1:-1;;;24567:118:0;;21730:2:1;24567:118:0;;;21712:21:1;21769:2;21749:18;;;21742:30;21808:34;21788:18;;;21781:62;21879:32;21859:18;;;21852:60;21929:19;;24567:118:0;21528:426:1;24567:118:0;-1:-1:-1;;;;;24716:31:0;;;;;;;:25;:31;;;;;;;24749:29;;;;;;;;24703:86;;24716:31;;;;;24749:29;24775:2;24742:4;24703:12;:86::i;:::-;24794:12;24837:23;;24809:24;24827:4;24809:9;:24::i;:::-;24876:16;;24809:51;-1:-1:-1;24809:51:0;;-1:-1:-1;24876:16:0;;:31;;;;;24900:7;24876:31;:49;;;;-1:-1:-1;24916:9:0;;;;24915:10;24876:49;:70;;;;-1:-1:-1;24933:9:0;;-1:-1:-1;;;24933:9:0;;;;:13;;24876:70;:107;;;;-1:-1:-1;;;;;;24954:29:0;;;;;;:25;:29;;;;;;;;24876:107;24867:196;;;24995:9;:16;;-1:-1:-1;;24995:16:0;25007:4;24995:16;;;25017:17;:15;:17::i;:::-;25040:9;:17;;-1:-1:-1;;25040:17:0;;;24867:196;25085:9;;25069:12;;25085:9;;25084:10;:30;;;;-1:-1:-1;25098:16:0;;;;25084:30;-1:-1:-1;;;;;25124:24:0;;;;;;:18;:24;;;;;;25069:45;;-1:-1:-1;25124:24:0;;;:50;;-1:-1:-1;;;;;;25152:22:0;;;;;;:18;:22;;;;;;;;25124:50;25121:81;;;-1:-1:-1;25191:5:0;25121:81;25208:41;25223:4;25229:2;25233:6;25241:7;25208:14;:41::i;:::-;23723:1533;;23643:1613;;;:::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;27206:149::-;27248:7;27263:15;27280;27299:19;:17;:19::i;:::-;27262:56;;-1:-1:-1;27262:56:0;-1:-1:-1;27330:20:0;27262:56;;27330:11;:20::i;:::-;27323:27;;;;27206: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;;22161:2:1;1868:46:0;;;22143:21:1;22200:2;22180:18;;;22173:30;22239:29;22219:18;;;22212:57;22286:18;;1868:46:0;21959:351:1;29125:1071:0;29324:22;;;;:45;;;;:22;;;;;:45;29320:222;;29382:104;;-1:-1:-1;;;22517:33:1;;22575:2;22566:12;29382:104:0;;;;;;;;29425:22;;;;29471:14;;29382:104;;29425:22;;;;;;;;29382:104;;;;-1:-1:-1;;;;;;;;;;;29382:104:0;;;29471:14;;;29382:104;:::i;:::-;;;;;;;;29492:22;;;:44;;-1:-1:-1;;29492:44:0;;;;;;;;;29320:222;29550:22;;;;:45;;;;:22;;;;;:45;29546:222;;29608:104;;-1:-1:-1;;;23005:33:1;;23063:2;23054:12;29608:104:0;;;;;;;;29651:22;;;;29697:14;;29608:104;;29651:22;;;;;;;;29608:104;;;;-1:-1:-1;;;;;;;;;;;29608:104:0;;;29697:14;;;29608:104;:::i;:::-;;;;;;;;29718:22;;;:44;;-1:-1:-1;;29718:44:0;;;;;;;;;29546:222;29776:20;;;;:41;;;;-1:-1:-1;;;29776:20:0;;;;:41;29772:208;;29830:98;;-1:-1:-1;;;23279:31:1;;23335:2;23326:12;29830:98:0;;;;;;;;29871:20;;;;29913:14;;29830:98;;29871:20;-1:-1:-1;;;29871:20:0;;;;;;29830:98;;;;-1:-1:-1;;;;;;;;;;;29830:98:0;;;29913:14;;;29830:98;:::i;:::-;;;;;;;;29934:20;;;:40;;-1:-1:-1;;29934:40:0;-1:-1:-1;;;29934:40:0;;;;;;;29772:208;29988:20;;;;:41;;;;-1:-1:-1;;;29988:20:0;;;;:41;29984:208;;30042:98;;-1:-1:-1;;;23551:31:1;;23607:2;23598:12;30042:98:0;;;;;;;;30083:20;;;;30125:14;;30042:98;;30083:20;-1:-1:-1;;;30083:20:0;;;;;;30042:98;;;;-1:-1:-1;;;;;;;;;;;30042:98:0;;;30125:14;;;30042:98;:::i;:::-;;;;;;;;30146:20;;;:40;;;;;-1:-1:-1;;;30146:40:0;-1:-1:-1;;30146:40:0;;;;;;29125:1071;;;;;:::o;30199:1038::-;30393:21;;;;:43;;;;:21;;:43;30389:215;;30449:101;;-1:-1:-1;;;23823:32:1;;23880:2;23871:12;30449:101:0;;;;;;;;30491:21;;;;30535:14;;30449:101;;30491:21;;;;;30449:101;;;;-1:-1:-1;;;;;;;;;;;30449:101:0;;;30535:14;;;30449:101;:::i;:::-;;;;;;;;30556:21;;;:42;;-1:-1:-1;;30556:42:0;;;;;;;30389:215;30612:21;;;;:43;;;;:21;;;;;:43;30608:215;;30668:101;;-1:-1:-1;;;24096:32:1;;24153:2;24144:12;30668:101:0;;;;;;;;30710:21;;;;30754:14;;30668:101;;30710:21;;;;;;;;30668:101;;;;-1:-1:-1;;;;;;;;;;;30668:101:0;;;30754:14;;;30668:101;:::i;:::-;;;;;;;;30775:21;;;:42;;-1:-1:-1;;30775:42:0;;;;;;;;;30608:215;30831:19;;;;:39;;;;-1:-1:-1;;;30831:19:0;;;;:39;30827:201;;30883:95;;-1:-1:-1;;;24369:30:1;;24424:2;24415:12;30883:95:0;;;;;;;;30923:19;;;;30963:14;;30883:95;;30923:19;-1:-1:-1;;;30923:19:0;;;;;;30883:95;;;;-1:-1:-1;;;;;;;;;;;30883:95:0;;;30963:14;;;30883:95;:::i;:::-;;;;;;;;30984:19;;;:38;;-1:-1:-1;;30984:38:0;-1:-1:-1;;;30984:38:0;;;;;;;30827:201;31036:19;;;;:39;;;;-1:-1:-1;;;31036:19:0;;;;:39;31032:201;;31088:95;;-1:-1:-1;;;24640:30:1;;24695:2;24686:12;31088:95:0;;;;;;;;31128:19;;;;31168:14;;31088:95;;31128:19;-1:-1:-1;;;31128:19:0;;;;;;31088:95;;;;-1:-1:-1;;;;;;;;;;;31088:95:0;;;31168:14;;;31088:95;:::i;:::-;;;;;;;;31189:19;;;:38;;;;;-1:-1:-1;;;31189:38:0;-1:-1:-1;;31189:38:0;;;;;;30199: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;27923:1199::-;28019:13;:17;;-1:-1:-1;;28101:15:0;;;28129:416;;;;28189:1;28165:21;;:25;:69;;;;;28232:1;28210:18;;28195:12;:33;;;;:::i;:::-;:38;;28165:69;28161:379;;;28255:13;:19;;-1:-1:-1;;28255:19:0;28271:3;28255:19;;;28161:379;;;28335:23;;28319:13;:39;;28335:23;;;;-1:-1:-1;;28377:39:0;;;;;;;28335:23;28393;;;;;;28377:39;;;;;;;;-1:-1:-1;;28489:35:0;-1:-1:-1;;;28449:21:0;;;;28435:35;;;;-1:-1:-1;;28489:35:0;;-1:-1:-1;;;28503:21:0;;;;28489:35;;;;;;;;28161:379;28553:10;28549:198;;;28587:24;;28571:13;:40;;28587:24;;;;;;;;-1:-1:-1;;28617:40:0;;;;;;;28633:24;;;;;;28617:40;;;;;-1:-1:-1;;28705:36:0;-1:-1:-1;;;28677:22:0;;;;28663:36;;-1:-1:-1;;28705:36:0;;-1:-1:-1;;;28719:22:0;;;;;;;28705:36;;;;;;;28549:198;28756:10;28755:11;:27;;;;;28771:11;28770:12;28755:27;:105;;;;-1:-1:-1;;;;;;28787:35:0;;;;;;:29;:35;;;;;;;;;:72;;-1:-1:-1;;;;;;28826:33:0;;;;;;:29;:33;;;;;;;;28787:72;28751:293;;;28884:24;;28868:13;:40;;28884:24;;;;;;;;-1:-1:-1;;28914:40:0;;;;;;;28930:24;;;;;;28914:40;;;;;-1:-1:-1;;29002:36:0;-1:-1:-1;;;28974:22:0;;;;28960:36;;-1:-1:-1;;29002:36:0;;-1:-1:-1;;;29016:22:0;;;;;;;29002:36;;;;;;;28751:293;29106:11;;;;;;;;;29092;;;;;;29060:29;;29106:11;29076:13;;;;;29060;:29;:::i;:::-;:43;;;;:::i;:::-;:57;;;;:::i;:::-;29048:9;;:69;;;;;;;;;;;;;;;;;;27923:1199;;;;:::o;31240:1431::-;31280:23;31306:24;31324:4;31306:9;:24::i;:::-;31413:9;;31280:50;;-1:-1:-1;31363:21:0;;31413:9;-1:-1:-1;;;31413:9:0;;;;;31453:13;;;;31413:9;31497:13;;;;;31540:11;;;;;;31580;;;;;31335:25;31540:11;31413:9;31624:31;31453:13;31280:50;31624:31;:::i;:::-;:43;;;;:::i;:::-;:47;;;;:::i;:::-;31598:73;-1:-1:-1;31676:20:0;31699:33;31598:73;31699:15;:33;:::i;:::-;31676:56;;31739:31;31757:12;31739:17;:31::i;:::-;31777:27;31807:41;31831:17;31807:21;:41;:::i;:::-;31777:71;-1:-1:-1;31853:19:0;31918:15;31892:21;31912:1;31892:17;:21;:::i;:::-;31875:39;;:13;:39;:::i;:::-;:59;;;;:::i;:::-;31853:81;;;;31939:26;32024:1;32010:11;31990:17;31968:39;;:19;:39;;;;:::i;:::-;:53;;;;:::i;:::-;:57;;;;:::i;:::-;31939:86;-1:-1:-1;32030:26:0;32101:11;32059:39;;;;:19;:39;:::i;:::-;:53;;;;:::i;:::-;32030:82;-1:-1:-1;32117:24:0;32167:39;32030:82;32167:18;:39;:::i;:::-;32144:63;;:19;:63;:::i;:::-;32222:15;;32214:53;;32117:90;;-1:-1:-1;;;;;;32222:15:0;;32214:53;;;;;32248:18;;32222:15;32214:53;32222:15;32214:53;32248:18;32222:15;32214:53;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32280:13:0;;32272:49;;-1:-1:-1;;;;;32280:13:0;;;;32272:49;;;;;32304:16;;32280:13;32272:49;32280:13;32272:49;32304:16;32280:13;32272:49;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32332:19:0;;32328:163;;32359:50;32373:15;32390:18;32359:13;:50::i;:::-;32420:65;;;25390:25:1;;;25446:2;25431:18;;25424:34;;;25474:18;;;25467:34;;;32420:65:0;;25378:2:1;25363:18;32420:65:0;;;;;;;32328:163;-1:-1:-1;;32497:9:0;:25;;;32637:29;;;;;-1:-1:-1;;32603:29:0;;;;;32637;;;;-1:-1:-1;;32565:33:0;;;32497:25;32565:33;-1:-1:-1;;32497:25:0;;;-1:-1:-1;;;32497:25:0;32565:33;;;;-1:-1:-1;;32565:33:0;;;;;;;32527;;;;32565;;;;;;;;32637:29;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;31240:1431:0:o;25259:740::-;25362:23;25386:12;25400:14;25418:29;25430:7;25439;25418:11;:29::i;:::-;25361:86;;;;;;25453:15;25470:23;25495:12;25509:14;25527:46;25539:7;25548:4;25554:6;25562:10;:8;:10::i;:::-;25527:11;:46::i;:::-;-1:-1:-1;;;;;25584:32:0;;;;;;:24;:32;;;;;;25452:121;;-1:-1:-1;25452:121:0;;-1:-1:-1;25452:121:0;-1:-1:-1;25452:121:0;-1:-1:-1;25584:32:0;;25580:93;;;-1:-1:-1;;;;;25642:15:0;;;;;;:7;:15;;;;;;:25;;25660:7;;25642:25;:::i;:::-;-1:-1:-1;;;;;25624:15:0;;;;;;:7;:15;;;;;:43;25580:93;-1:-1:-1;;;;;25681:35:0;;;;;;:24;:35;;;;;;;;25677:110;;;-1:-1:-1;;;;;25745:18:0;;;;;;:7;:18;;;;;;:36;;25766:15;;25745:36;:::i;:::-;-1:-1:-1;;;;;25724:18:0;;;;;;:7;:18;;;;;:57;25677:110;-1:-1:-1;;;;;25809:15:0;;;;;;:7;:15;;;;;;:25;;25827:7;;25809:25;:::i;:::-;-1:-1:-1;;;;;25791:15:0;;;;;;;:7;:15;;;;;;:43;;;;25860:18;;;;;;;:36;;25881:15;;25860:36;:::i;:::-;-1:-1:-1;;;;;25839:18:0;;;;;;:7;:18;;;;;:57;25901:39;25913:4;25919;25925:6;25933;25901:11;:39::i;:::-;25967:9;-1:-1:-1;;;;;25950:44:0;25959:6;-1:-1:-1;;;;;25950:44:0;;25978:15;25950:44;;;;2056:25:1;;2044:2;2029:18;;1910:177;25950:44:0;;;;;;;;25356:643;;;;;;;25259:740;;;;:::o;27358:562::-;27450:7;;27409;;;;8314:19;27409:7;27492:331;27516:22;:29;27512:33;;27492:331;;;27605:7;27568;:34;27576:22;27599:1;27576:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;27576:25:0;27568:34;;;;;;;;;;;;;:44;;:97;;;27658:7;27621;:34;27629:22;27652:1;27629:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;27629:25:0;27621:34;;;;;;;;;;;;;:44;27568:97;27558:139;;;-1:-1:-1;;27680:7:0;;;8314:19;;-1:-1:-1;27358:562:0;-1:-1:-1;;27358:562:0:o;27558:139::-;27723:7;:34;27731:22;27754:1;27731:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;27731:25:0;27723:34;;;;;;;;;;;;;27713:44;;:7;:44;:::i;:::-;27703:54;;27783:7;:34;27791:22;27814:1;27791:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;27791:25:0;27783:34;;;;;;;;;;;;;27773:44;;:7;:44;:::i;:::-;27763:54;-1:-1:-1;27547:3:0;;;;:::i;:::-;;;;27492:331;;;;8314:19;27841:7;;:17;;;;:::i;:::-;27831:7;:27;27827:58;;;-1:-1:-1;;27868:7:0;;;8314:19;;-1:-1:-1;27358:562:0;-1:-1:-1;27358:562:0:o;27827:58::-;27898:7;;27907;;-1:-1:-1;27358:562:0;-1:-1:-1;27358:562:0:o;32674:416::-;32759:16;;;32773:1;32759:16;;;;;;;;32735:21;;32759:16;;;;;;;;;;-1:-1:-1;32759:16:0;32735:40;;32798:4;32780;32785:1;32780:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;32780:23:0;;;:7;;;;;;;;;;:23;;;;32818:15;;:22;;;-1:-1:-1;;;32818:22:0;;;;:15;;;;;:20;;:22;;;;;32780:7;;32818:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32808:4;32813:1;32808:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;32808:32:0;;;:7;;;;;;;;;:32;32877:15;;32845:62;;32862:4;;32877:15;32895:11;32845:8;:62::i;:::-;32912:15;;:173;;-1:-1:-1;;;32912:173:0;;-1:-1:-1;;;;;32912:15:0;;;;:66;;:173;;32984:11;;32912:15;;33036:4;;33054;;33065:15;;32912:173;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32730:360;32674:416;:::o;33093:348::-;33201:15;;33169:62;;33186:4;;-1:-1:-1;;;;;33201:15:0;33219:11;33169:8;:62::i;:::-;33236:15;;33395;;33236:200;;-1:-1:-1;;;33236:200:0;;33299:4;33236:200;;;26970:34:1;27020:18;;;27013:34;;;33236:15:0;27063:18:1;;;27056:34;;;27106:18;;;27099:34;-1:-1:-1;;;;;33395:15:0;;;27149:19:1;;;27142:44;33416:15:0;27202:19:1;;;27195:35;33236:15:0;;;:31;;33275:9;;26904:19:1;;33236:200:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;26395:403::-;26469:7;26477;26485;26503;26498:296;;-1:-1:-1;26526:7:0;;-1:-1:-1;26535:1:0;;-1:-1:-1;26535:1:0;26518:22;;26498:296;26586:11;;26561:12;;26600:3;;26576:21;;26586:11;;;;;26576:7;:21;:::i;:::-;:27;;;;:::i;:::-;26669:11;;26561:42;;-1:-1:-1;26609:14:0;;26684:3;;26669:11;;;;;;;26637:29;;26669:11;26653:13;;;;;26637;:29;:::i;:::-;:43;;;;:::i;:::-;26626:55;;;;:7;:55;:::i;:::-;:61;;;;:::i;:::-;26609:78;-1:-1:-1;26693:23:0;26730:13;26609:78;26730:4;:13;:::i;:::-;26719:25;;:7;:25;:::i;:::-;26693:51;-1:-1:-1;26775:4:0;;-1:-1:-1;26781:6:0;-1:-1:-1;26750:38:0;;-1:-1:-1;26750:38:0;26498:296;26395:403;;;;;:::o;26801:402::-;26930:7;;;;;26989:21;26999:11;26989:7;:21;:::i;:::-;26971:39;-1:-1:-1;27015:12:0;27030:18;27037:11;27030:4;:18;:::i;:::-;27015:33;-1:-1:-1;27053:14:0;27070:20;27079:11;27070:6;:20;:::i;:::-;27053:37;-1:-1:-1;27095:23:0;27132:13;27053:37;27132:4;:13;:::i;:::-;27121:25;;:7;:25;:::i;:::-;27159:7;;;;-1:-1:-1;27185:4:0;;-1:-1:-1;27185:4:0;-1:-1:-1;26801:402:0;;-1:-1:-1;;;;;;26801:402:0:o;26002:390::-;26107:4;26096:7;;:15;;;;;;;:::i;:::-;;;;;;;;26130:4;26116:10;;:18;;;;;;;:::i;:::-;;;;-1:-1:-1;;26145:21:0;;:25;;;;:69;;;26212:1;26190:18;;26175:12;:33;;;;:::i;:::-;:38;;26145:69;26141:109;;;26238:6;26222:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;26141:109:0;26299:4;26266:39;;;;:24;:39;;;;;;;;26262:89;;;26329:4;26313:22;;;;:7;:22;;;;;:32;;26339:6;;26313:22;:32;;26339:6;;26313:32;:::i;:::-;;;;-1:-1:-1;;26262:89:0;26371:4;26355:22;;;;:7;:22;;;;;:32;;26381:6;;26355:22;:32;;26381:6;;26355:32;:::i;:::-;;;;-1:-1:-1;;;;;;26002:390: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:118::-;236:5;229:13;222:21;215:5;212:32;202:60;;258:1;255;248:12;273:382;338:6;346;399:2;387:9;378:7;374:23;370:32;367:52;;;415:1;412;405:12;367:52;454:9;441:23;473:31;498:5;473:31;:::i;:::-;523:5;-1:-1:-1;580:2:1;565:18;;552:32;593:30;552:32;593:30;:::i;:::-;642:7;632:17;;;273:382;;;;;:::o;852:548::-;964:4;993:2;1022;1011:9;1004:21;1054:6;1048:13;1097:6;1092:2;1081:9;1077:18;1070:34;1122:1;1132:140;1146:6;1143:1;1140:13;1132:140;;;1241:14;;;1237:23;;1231:30;1207:17;;;1226:2;1203:26;1196:66;1161:10;;1132:140;;;1136:3;1321:1;1316:2;1307:6;1296:9;1292:22;1288:31;1281:42;1391:2;1384;1380:7;1375:2;1367:6;1363:15;1359:29;1348:9;1344:45;1340:54;1332:62;;;;852:548;;;;:::o;1405:315::-;1473:6;1481;1534:2;1522:9;1513:7;1509:23;1505:32;1502:52;;;1550:1;1547;1540:12;1502:52;1589:9;1576:23;1608:31;1633:5;1608:31;:::i;:::-;1658:5;1710:2;1695:18;;;;1682:32;;-1:-1:-1;;;1405:315:1:o;1725:180::-;1784:6;1837:2;1825:9;1816:7;1812:23;1808:32;1805:52;;;1853:1;1850;1843:12;1805:52;-1:-1:-1;1876:23:1;;1725:180;-1:-1:-1;1725:180:1:o;2523:456::-;2600:6;2608;2616;2669:2;2657:9;2648:7;2644:23;2640:32;2637:52;;;2685:1;2682;2675:12;2637:52;2724:9;2711:23;2743:31;2768:5;2743:31;:::i;:::-;2793:5;-1:-1:-1;2850:2:1;2835:18;;2822:32;2863:33;2822:32;2863:33;:::i;:::-;2523:456;;2915:7;;-1:-1:-1;;;2969:2:1;2954:18;;;;2941:32;;2523:456::o;3173:309::-;3238:6;3246;3299:2;3287:9;3278:7;3274:23;3270:32;3267:52;;;3315:1;3312;3305:12;3267:52;3351:9;3338:23;3328:33;;3411:2;3400:9;3396:18;3383:32;3424:28;3446:5;3424:28;:::i;3487:247::-;3546:6;3599:2;3587:9;3578:7;3574:23;3570:32;3567:52;;;3615:1;3612;3605:12;3567:52;3654:9;3641:23;3673:31;3698:5;3673:31;:::i;3739:156::-;3805:20;;3865:4;3854:16;;3844:27;;3834:55;;3885:1;3882;3875:12;3834:55;3739:156;;;:::o;3900:393::-;3978:6;3986;3994;4002;4055:3;4043:9;4034:7;4030:23;4026:33;4023:53;;;4072:1;4069;4062:12;4023:53;4095:27;4112:9;4095:27;:::i;:::-;4085:37;;4141:36;4173:2;4162:9;4158:18;4141:36;:::i;:::-;4131:46;;4196:36;4228:2;4217:9;4213:18;4196:36;:::i;:::-;4186:46;;4251:36;4283:2;4272:9;4268:18;4251:36;:::i;:::-;4241:46;;3900:393;;;;;;;:::o;4298:529::-;4375:6;4383;4391;4444:2;4432:9;4423:7;4419:23;4415:32;4412:52;;;4460:1;4457;4450:12;4412:52;4499:9;4486:23;4518:31;4543:5;4518:31;:::i;:::-;4568:5;-1:-1:-1;4625:2:1;4610:18;;4597:32;4638:33;4597:32;4638:33;:::i;:::-;4690:7;-1:-1:-1;4749:2:1;4734:18;;4721:32;4762:33;4721:32;4762:33;:::i;:::-;4814:7;4804:17;;;4298:529;;;;;:::o;5256:388::-;5324:6;5332;5385:2;5373:9;5364:7;5360:23;5356:32;5353:52;;;5401:1;5398;5391:12;5353:52;5440:9;5427:23;5459:31;5484:5;5459:31;:::i;:::-;5509:5;-1:-1:-1;5566:2:1;5551:18;;5538:32;5579:33;5538:32;5579:33;:::i;5649:356::-;5851:2;5833:21;;;5870:18;;;5863:30;5929:34;5924:2;5909:18;;5902:62;5996:2;5981:18;;5649:356::o;6010:417::-;6212:2;6194:21;;;6251:2;6231:18;;;6224:30;6290:34;6285:2;6270:18;;6263:62;-1:-1:-1;;;6356:2:1;6341:18;;6334:51;6417:3;6402:19;;6010:417::o;6432:127::-;6493:10;6488:3;6484:20;6481:1;6474:31;6524:4;6521:1;6514:15;6548:4;6545:1;6538:15;6564:127;6625:10;6620:3;6616:20;6613:1;6606:31;6656:4;6653:1;6646:15;6680:4;6677:1;6670:15;6696:128;6763:9;;;6784:11;;;6781:37;;;6798:18;;:::i;6829:127::-;6890:10;6885:3;6881:20;6878:1;6871:31;6921:4;6918:1;6911:15;6945:4;6942:1;6935:15;6961:135;7000:3;7021:17;;;7018:43;;7041:18;;:::i;:::-;-1:-1:-1;7088:1:1;7077:13;;6961:135::o;7729:251::-;7799:6;7852:2;7840:9;7831:7;7827:23;7823:32;7820:52;;;7868:1;7865;7858:12;7820:52;7900:9;7894:16;7919:31;7944:5;7919:31;:::i;10766:245::-;10833:6;10886:2;10874:9;10865:7;10861:23;10857:32;10854:52;;;10902:1;10899;10892:12;10854:52;10934:9;10928:16;10953:28;10975:5;10953:28;:::i;11438:127::-;11499:10;11494:3;11490:20;11487:1;11480:31;11530:4;11527:1;11520:15;11554:4;11551:1;11544:15;11570:120;11610:1;11636;11626:35;;11641:18;;:::i;:::-;-1:-1:-1;11675:9:1;;11570:120::o;12106:168::-;12146:7;12212:1;12208;12204:6;12200:14;12197:1;12194:21;12189:1;12182:9;12175:17;12171:45;12168:71;;;12219:18;;:::i;:::-;-1:-1:-1;12259:9:1;;12106:168::o;21398:125::-;21463:9;;;21484:10;;;21481:36;;;21497:18;;:::i;22589:209::-;-1:-1:-1;;22753:38:1;;;;22735:57;;22723:2;22708:18;;22589:209::o;24709:148::-;24797:4;24776:12;;;24790;;;24772:31;;24815:13;;24812:39;;;24831:18;;:::i;24862:165::-;24900:1;24934:4;24931:1;24927:12;24958:3;24948:37;;24965:18;;:::i;:::-;25017:3;25010:4;25007:1;25003:12;24999:22;24994:27;;;24862:165;;;;:::o;25032:151::-;25122:4;25115:12;;;25101;;;25097:31;;25140:14;;25137:40;;;25157:18;;:::i;25644:980::-;25906:4;25954:3;25943:9;25939:19;25985:6;25974:9;25967:25;26011:2;26049:6;26044:2;26033:9;26029:18;26022:34;26092:3;26087:2;26076:9;26072:18;26065:31;26116:6;26151;26145:13;26182:6;26174;26167:22;26220:3;26209:9;26205:19;26198:26;;26259:2;26251:6;26247:15;26233:29;;26280:1;26290:195;26304:6;26301:1;26298:13;26290:195;;;26369:13;;-1:-1:-1;;;;;26365:39:1;26353:52;;26460:15;;;;26425:12;;;;26401:1;26319:9;26290:195;;;-1:-1:-1;;;;;;;26541:32:1;;;;26536:2;26521:18;;26514:60;-1:-1:-1;;;26605:3:1;26590:19;26583:35;26502:3;25644:980;-1:-1:-1;;;25644:980:1:o;27241:306::-;27329:6;27337;27345;27398:2;27386:9;27377:7;27373:23;27369:32;27366:52;;;27414:1;27411;27404:12;27366:52;27443:9;27437:16;27427:26;;27493:2;27482:9;27478:18;27472:25;27462:35;;27537:2;27526:9;27522:18;27516:25;27506:35;;27241:306;;;;;:::o
Swarm Source
ipfs://8d7237bb1f0afded66d67fa852453d71e4b33918b389ed1b15f43fe6033e8cec
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.