ERC-20
Overview
Max Total Supply
1,000,000,000,000 BFSHIB
Holders
99
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
4,813,618,584.255435197 BFSHIBValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
BlackFridayShibToken
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity Multiple files format)
/** * * $BFSHIB - BLACK FRIDAY SHIB TOKEN * * * * 💻 Website: https://blackfridayshib.com/ * 💬 Telegram: https://t.me/BlackFridayShibToken * * * * * * ██████╗░██╗░░░░░░█████╗░░█████╗░██╗░░██╗ ███████╗██████╗░██╗██████╗░░█████╗░██╗░░░██╗ * ██╔══██╗██║░░░░░██╔══██╗██╔══██╗██║░██╔╝ ██╔════╝██╔══██╗██║██╔══██╗██╔══██╗╚██╗░██╔╝ * ██████╦╝██║░░░░░███████║██║░░╚═╝█████═╝░ █████╗░░██████╔╝██║██║░░██║███████║░╚████╔╝░ * ██╔══██╗██║░░░░░██╔══██║██║░░██╗██╔═██╗░ ██╔══╝░░██╔══██╗██║██║░░██║██╔══██║░░╚██╔╝░░ * ██████╦╝███████╗██║░░██║╚█████╔╝██║░╚██╗ ██║░░░░░██║░░██║██║██████╔╝██║░░██║░░░██║░░░ * ╚═════╝░╚══════╝╚═╝░░╚═╝░╚════╝░╚═╝░░╚═╝ ╚═╝░░░░░╚═╝░░╚═╝╚═╝╚═════╝░╚═╝░░╚═╝░░░╚═╝░░░ * * ░██████╗██╗░░██╗██╗██████╗ * ██╔════╝██║░░██║██║██╔══██╗ * ╚█████╗░███████║██║██████╦╝ * ░╚═══██╗██╔══██║██║██╔══██╗ * ██████╔╝██║░░██║██║██████╦╝ * ╚═════╝░╚═╝░░╚═╝╚═╝╚═════╝ * * AUTOMATED. RANDOMIZED. ASYNCHRONOUS. * * BLACK FRIDAY SHIB Token integrates with Chainlink to create a automated, randomised way to give deals. * * Tokenomics: * * $BFSHIB is is the Latest ERC-20 Token on the theme of Black Friday powered by Chainlink * * Everyone loves discounts and sales during the black friday season. * But why wait for it once every year? When you can get it every hour? * * Black Friday Shib integrates with the oracle provider CHAINLINK which, * through ChainLink VRF, makes verifiable randomness possible on chain * * Based on the random number generated, BFSHIB can toggle between below modes affecting the buy taxes. * * HAPPY HOURS MODE * - BUY tax can vary between 2% and 10% based on the price impact of the buy * - Bigger buys = Lower BUY tax * * FLASH SALE MODE * - BUY tax can vary between 5% and 8% based on the random number generated * * STEAL DEAL MODE * - BUY tax reduced to 5% * * NORMAL MODE * - BUY tax is 10% * * Redistribution - 10% of all collected fees * Sells have an ANTI-DUMP Tokenomics where your SELL tax is proportional to the price impact of the sell * Early buyers and snipers advantage will be limited. * * * * SPDX-License-Identifier: UNLICENSED * */ pragma solidity ^0.8.4; import "./VRFConsumerBase.sol"; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } } interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if(a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; 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; } } contract Ownable is Context { address private _owner; address private _previousOwner; 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); } } interface IUniswapV2Factory { function createPair(address tokenA, address tokenB) external returns (address pair); } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract BlackFridayShibToken is Context, IERC20, Ownable, VRFConsumerBase { using SafeMath for uint256; mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isExcludedFromFee; mapping (address => bool) private _bots; mapping (address => User) private trader; uint256 private constant MAX = ~uint256(0); uint256 private constant _tTotal = 1e12 * 10**9; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; string private constant _name = unicode"Black Friday Shib"; string private constant _symbol = unicode"BFSHIB"; uint8 private constant _decimals = 9; uint256 private _taxFee = 1; uint256 private _teamFee = 6; uint256 public buyTaxRandomNumber = 10; uint256 private _launchTime; uint256 private _modeExpiryTime = 0; uint256 private _previousTaxFee = _taxFee; uint256 private _previousteamFee = _teamFee; uint256 private _maxBuyAmount; address payable private _FeeAddress; address payable private _marketingWalletAddress; IUniswapV2Router02 private uniswapV2Router; address private uniswapV2Pair; bool private tradingOpen = false; string private mode = "NORMAL"; bool private _cooldownEnabled = true; bool private _communityMode = false; bool private inSwap = false; uint256 private _launchBlock = 0; uint256 private buyLimitEnd; uint256 private _snipers = 0; uint256 private _impactMultiplier = 1000; bytes32 internal keyHash; uint256 internal linkFee; // how many multiples of the linkFee should the contract aim to hold uint256 internal MIN_LINK_FEES_TO_HOLD = 2; uint256 internal MAX_LINK_FEES_TO_HOLD = 5; // random number generation uint256 public randomNumber; // for debugging bytes32 public lastRequestId; uint256 public lastRequestAt; event SwapETHForTokens( uint256 amountIn, address[] path ); struct User { uint256 buyCD; bool exists; } event MaxBuyAmountUpdated(uint _maxBuyAmount); event CooldownEnabledUpdated(bool _cooldown); event FeeMultiplierUpdated(uint _multiplier); event FeeRateUpdated(uint _rate); modifier lockTheSwap { inSwap = true; _; inSwap = false; } constructor () VRFConsumerBase( 0xf0d54349aDdcf704F77AE15b96510dEA15cb7952, //VRFCoordinator 0x514910771AF9Ca656af840dff83E8264EcF986CA // LINK Token ) { _FeeAddress = payable(0x5d878c527e292CD3FaF750dcE3035E46B778E634); _marketingWalletAddress = payable(0x5d878c527e292CD3FaF750dcE3035E46B778E634); _rOwned[_msgSender()] = _rTotal; _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; _isExcludedFromFee[_FeeAddress] = true; _isExcludedFromFee[_marketingWalletAddress] = true; _isExcludedFromFee[address(0xf0d54349aDdcf704F77AE15b96510dEA15cb7952)] = true; //chainlink VRFCoordinator keyHash = 0xAA77729D3466CA35AE8D28B3BBAC7CC36A5031EFDC430821C02BC31A238AF445; linkFee = 2 * 10 ** 18; emit Transfer(address(0), _msgSender(), _tTotal); } function name() public pure returns (string memory) { return _name; } function symbol() public pure returns (string memory) { return _symbol; } function decimals() public pure returns (uint8) { return _decimals; } function totalSupply() public pure override returns (uint256) { return _tTotal; } function snipersTaxed() public view returns (uint256) { return _snipers; } function balanceOf(address account) public view override returns (uint256) { return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function tokenFromReflection(uint256 rAmount) private view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function removeAllFee() private { if(_taxFee == 0 && _teamFee == 0) return; _previousTaxFee = _taxFee; _previousteamFee = _teamFee; _taxFee = 0; _teamFee = 0; } function restoreAllFee() private { _taxFee = _previousTaxFee; _teamFee = _previousteamFee; } function whichMode() public view returns (string memory) { if (block.timestamp > _modeExpiryTime) { return "NORMAL"; } return mode; } function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer(address from, address to, uint256 amount) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); if(from != owner() && to != owner()) { require(!_bots[from] && !_bots[to]); if(!trader[msg.sender].exists) { trader[msg.sender] = User(0,true); } uint256 totalFee = 10; // buy if(from == uniswapV2Pair && to != address(uniswapV2Router) && !_isExcludedFromFee[to]) { require(tradingOpen, "Trading not yet enabled."); if(block.number < _launchBlock + 2) { totalFee = 75; _snipers++; } else if(block.timestamp > _launchTime + (2 minutes)) { if (block.timestamp > _modeExpiryTime) { mode = "NORMAL"; totalFee = 10; } else if (keccak256(abi.encodePacked(mode)) == keccak256(abi.encodePacked("STEAL_DEALS"))) { totalFee = 5 + 1; } else if (keccak256(abi.encodePacked(mode)) == keccak256(abi.encodePacked("HAPPY_HOURS"))) { uint256 amountImpactMultiplier = amount.mul(_impactMultiplier); uint256 priceImpact = amountImpactMultiplier.div(balanceOf(uniswapV2Pair).add(amount)); if (priceImpact >= 40) { totalFee = 2; } else if (priceImpact >= 30) { totalFee = 4; } else if (priceImpact >=20) { totalFee = 6; } else if (priceImpact >= 10) { totalFee = 8; } else { totalFee = 10; } totalFee++; } else { totalFee = buyTaxRandomNumber + 1; } } else if (block.timestamp > _launchTime + (1 minutes)) { totalFee = 20; } else { totalFee = 40; } _taxFee = (totalFee).div(10); _teamFee = (totalFee.mul(9)).div(10); if(_cooldownEnabled) { if(buyLimitEnd > block.timestamp) { require(amount <= _maxBuyAmount); require(trader[to].buyCD < block.timestamp, "Your buy cooldown has not expired."); trader[to].buyCD = block.timestamp + (45 seconds); } } } uint256 contractTokenBalance = balanceOf(address(this)); // sell if(!inSwap && from != uniswapV2Pair && tradingOpen) { //price impact based sell tax uint256 amountImpactMultiplier = amount.mul(_impactMultiplier); uint256 priceImpact = amountImpactMultiplier.div(balanceOf(uniswapV2Pair).add(amount)); _taxFee = 1; if (priceImpact <= 10) { totalFee = 10; } else if (priceImpact >= 40) { totalFee = 40; } else if (priceImpact.mod(2) != 0) { totalFee = ++priceImpact; } else { totalFee = priceImpact; } _teamFee = totalFee.sub(_taxFee); //To limit big dumps by the contract before the sells if(contractTokenBalance > 0) { if(contractTokenBalance > balanceOf(uniswapV2Pair).mul(5).div(100)) { contractTokenBalance = balanceOf(uniswapV2Pair).mul(5).div(100); } swapTokensForEth(contractTokenBalance); } if (LINK.balanceOf(address(this)) < linkFee * MIN_LINK_FEES_TO_HOLD) { swapEthForLink(); } requestBuybackRandomNumber(); uint256 contractETHBalance = address(this).balance; if(contractETHBalance > 0) { sendETHToFee(address(this).balance); } } } bool takeFee = true; if(_isExcludedFromFee[from] || _isExcludedFromFee[to] || _communityMode){ takeFee = false; } _tokenTransfer(from,to,amount,takeFee); } function swapTokensForEth(uint256 tokenAmount) private lockTheSwap { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, address(this), block.timestamp ); } function swapEthForLink() private lockTheSwap { address[] memory path = new address[](2); path[0] = uniswapV2Router.WETH(); path[1] = address(0x514910771AF9Ca656af840dff83E8264EcF986CA); uint256 ethAmount = uniswapV2Router.getAmountsIn(MAX_LINK_FEES_TO_HOLD * linkFee - LINK.balanceOf(address(this)), path)[0]; if (address(this).balance > ethAmount) { uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ethAmount}( 0, // accept any amount of Tokens path, address(this), block.timestamp.add(300) ); emit SwapETHForTokens(ethAmount, path); } } function fulfillRandomness(bytes32 requestId, uint256 randomness) internal override { randomNumber = uint256(keccak256(abi.encode(randomness, requestId))) % 100 + 1; if (randomNumber > 80) { mode = "HAPPY_HOURS"; } else if (randomNumber > 50) { mode = "FLASH_SALE"; buyTaxRandomNumber = randomNumber.div(10); } else if (randomNumber > 25) { mode = "STEAL_DEALS"; } else { mode = "NORMAL"; } _modeExpiryTime = block.timestamp + 15 minutes; lastRequestId = 0; } function requestBuybackRandomNumber() private { if (lastRequestId != 0 && block.timestamp < (lastRequestAt + 59 minutes)) return; if (LINK.balanceOf(address(this)) > linkFee) { lastRequestId = requestRandomness(keyHash, linkFee); lastRequestAt = block.timestamp; } } function sendETHToFee(uint256 amount) private { _FeeAddress.transfer(amount.div(2)); _marketingWalletAddress.transfer(amount.div(2)); } function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFee) private { if(!takeFee) removeAllFee(); _transferStandard(sender, recipient, amount); if(!takeFee) restoreAllFee(); } function _transferStandard(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tTeam) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeTeam(tTeam); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) { (uint256 tTransferAmount, uint256 tFee, uint256 tTeam) = _getTValues(tAmount, _taxFee, _teamFee); uint256 currentRate = _getRate(); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tTeam, currentRate); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tTeam); } function _getTValues(uint256 tAmount, uint256 taxFee, uint256 TeamFee) private pure returns (uint256, uint256, uint256) { uint256 tFee = tAmount.mul(taxFee).div(100); uint256 tTeam = tAmount.mul(TeamFee).div(100); uint256 tTransferAmount = tAmount.sub(tFee).sub(tTeam); return (tTransferAmount, tFee, tTeam); } 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; if(rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 tTeam, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rTeam = tTeam.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(rTeam); return (rAmount, rTransferAmount, rFee); } function _takeTeam(uint256 tTeam) private { uint256 currentRate = _getRate(); uint256 rTeam = tTeam.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rTeam); } function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } receive() external payable {} function openTrading() external onlyOwner() { require(!tradingOpen,"trading is already open"); IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); uniswapV2Router = _uniswapV2Router; _approve(address(this), address(uniswapV2Router), _tTotal); uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router.addLiquidityETH{value: address(this).balance}(address(this),balanceOf(address(this)),0,0,owner(),block.timestamp); _maxBuyAmount = 5000000000 * 10**9; IERC20(uniswapV2Pair).approve(address(uniswapV2Router), type(uint).max); tradingOpen = true; buyLimitEnd = block.timestamp + (90 seconds); _launchTime = block.timestamp; _launchBlock = block.number; lastRequestAt = block.timestamp; } function setMarketingWallet (address payable marketingWalletAddress) external { require(_msgSender() == _FeeAddress); _isExcludedFromFee[_marketingWalletAddress] = false; _marketingWalletAddress = marketingWalletAddress; _isExcludedFromFee[marketingWalletAddress] = true; } function excludeFromFee (address payable ad) external { require(_msgSender() == _FeeAddress); _isExcludedFromFee[ad] = true; } function includeToFee (address payable ad) external { require(_msgSender() == _FeeAddress); _isExcludedFromFee[ad] = false; } function setBots(address[] memory bots_) public onlyOwner { if (block.timestamp < _launchTime + (20 minutes)) { for (uint i = 0; i < bots_.length; i++) { if (bots_[i] != uniswapV2Pair && bots_[i] != address(uniswapV2Router)) { _bots[bots_[i]] = true; } } } } function delBot(address notbot) public onlyOwner { _bots[notbot] = false; } function isBot(address ad) public view returns (bool) { return _bots[ad]; } function setCooldownEnabled(bool onoff) external onlyOwner() { _cooldownEnabled = onoff; emit CooldownEnabledUpdated(_cooldownEnabled); } function thisBalance() public view returns (uint) { return balanceOf(address(this)); } function cooldownEnabled() public view returns (bool) { return _cooldownEnabled; } function timeToBuy(address buyer) public view returns (uint) { return block.timestamp - trader[buyer].buyCD; } function amountInPool() public view returns (uint) { return balanceOf(uniswapV2Pair); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface LinkTokenInterface { function allowance( address owner, address spender ) external view returns ( uint256 remaining ); function approve( address spender, uint256 value ) external returns ( bool success ); function balanceOf( address owner ) external view returns ( uint256 balance ); function decimals() external view returns ( uint8 decimalPlaces ); function decreaseApproval( address spender, uint256 addedValue ) external returns ( bool success ); function increaseApproval( address spender, uint256 subtractedValue ) external; function name() external view returns ( string memory tokenName ); function symbol() external view returns ( string memory tokenSymbol ); function totalSupply() external view returns ( uint256 totalTokensIssued ); function transfer( address to, uint256 value ) external returns ( bool success ); function transferAndCall( address to, uint256 value, bytes calldata data ) external returns ( bool success ); function transferFrom( address from, address to, uint256 value ) external returns ( bool success ); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./LinkTokenInterface.sol"; import "./VRFRequestIDBase.sol"; /** **************************************************************************** * @notice Interface for contracts using VRF randomness * ***************************************************************************** * @dev PURPOSE * * @dev Reggie the Random Oracle (not his real job) wants to provide randomness * @dev to Vera the verifier in such a way that Vera can be sure he's not * @dev making his output up to suit himself. Reggie provides Vera a public key * @dev to which he knows the secret key. Each time Vera provides a seed to * @dev Reggie, he gives back a value which is computed completely * @dev deterministically from the seed and the secret key. * * @dev Reggie provides a proof by which Vera can verify that the output was * @dev correctly computed once Reggie tells it to her, but without that proof, * @dev the output is indistinguishable to her from a uniform random sample * @dev from the output space. * * @dev The purpose of this contract is to make it easy for unrelated contracts * @dev to talk to Vera the verifier about the work Reggie is doing, to provide * @dev simple access to a verifiable source of randomness. * ***************************************************************************** * @dev USAGE * * @dev Calling contracts must inherit from VRFConsumerBase, and can * @dev initialize VRFConsumerBase's attributes in their constructor as * @dev shown: * * @dev contract VRFConsumer { * @dev constuctor(<other arguments>, address _vrfCoordinator, address _link) * @dev VRFConsumerBase(_vrfCoordinator, _link) public { * @dev <initialization with other arguments goes here> * @dev } * @dev } * * @dev The oracle will have given you an ID for the VRF keypair they have * @dev committed to (let's call it keyHash), and have told you the minimum LINK * @dev price for VRF service. Make sure your contract has sufficient LINK, and * @dev call requestRandomness(keyHash, fee, seed), where seed is the input you * @dev want to generate randomness from. * * @dev Once the VRFCoordinator has received and validated the oracle's response * @dev to your request, it will call your contract's fulfillRandomness method. * * @dev The randomness argument to fulfillRandomness is the actual random value * @dev generated from your seed. * * @dev The requestId argument is generated from the keyHash and the seed by * @dev makeRequestId(keyHash, seed). If your contract could have concurrent * @dev requests open, you can use the requestId to track which seed is * @dev associated with which randomness. See VRFRequestIDBase.sol for more * @dev details. (See "SECURITY CONSIDERATIONS" for principles to keep in mind, * @dev if your contract could have multiple requests in flight simultaneously.) * * @dev Colliding `requestId`s are cryptographically impossible as long as seeds * @dev differ. (Which is critical to making unpredictable randomness! See the * @dev next section.) * * ***************************************************************************** * @dev SECURITY CONSIDERATIONS * * @dev A method with the ability to call your fulfillRandomness method directly * @dev could spoof a VRF response with any random value, so it's critical that * @dev it cannot be directly called by anything other than this base contract * @dev (specifically, by the VRFConsumerBase.rawFulfillRandomness method). * * @dev For your users to trust that your contract's random behavior is free * @dev from malicious interference, it's best if you can write it so that all * @dev behaviors implied by a VRF response are executed *during* your * @dev fulfillRandomness method. If your contract must store the response (or * @dev anything derived from it) and use it later, you must ensure that any * @dev user-significant behavior which depends on that stored value cannot be * @dev manipulated by a subsequent VRF request. * * @dev Similarly, both miners and the VRF oracle itself have some influence * @dev over the order in which VRF responses appear on the blockchain, so if * @dev your contract could have multiple VRF requests in flight simultaneously, * @dev you must ensure that the order in which the VRF responses arrive cannot * @dev be used to manipulate your contract's user-significant behavior. * * @dev Since the ultimate input to the VRF is mixed with the block hash of the * @dev block in which the request is made, user-provided seeds have no impact * @dev on its economic security properties. They are only included for API * @dev compatability with previous versions of this contract. * * @dev Since the block hash of the block which contains the requestRandomness * @dev call is mixed into the input to the VRF *last*, a sufficiently powerful * @dev miner could, in principle, fork the blockchain to evict the block * @dev containing the request, forcing the request to be included in a * @dev different block with a different hash, and therefore a different input * @dev to the VRF. However, such an attack would incur a substantial economic * @dev cost. This cost scales with the number of blocks the VRF oracle waits * @dev until it calls responds to a request. */ abstract contract VRFConsumerBase is VRFRequestIDBase { /** * @notice fulfillRandomness handles the VRF response. Your contract must * @notice implement it. See "SECURITY CONSIDERATIONS" above for important * @notice principles to keep in mind when implementing your fulfillRandomness * @notice method. * * @dev VRFConsumerBase expects its subcontracts to have a method with this * @dev signature, and will call it once it has verified the proof * @dev associated with the randomness. (It is triggered via a call to * @dev rawFulfillRandomness, below.) * * @param requestId The Id initially returned by requestRandomness * @param randomness the VRF output */ function fulfillRandomness( bytes32 requestId, uint256 randomness ) internal virtual; /** * @dev In order to keep backwards compatibility we have kept the user * seed field around. We remove the use of it because given that the blockhash * enters later, it overrides whatever randomness the used seed provides. * Given that it adds no security, and can easily lead to misunderstandings, * we have removed it from usage and can now provide a simpler API. */ uint256 constant private USER_SEED_PLACEHOLDER = 0; /** * @notice requestRandomness initiates a request for VRF output given _seed * * @dev The fulfillRandomness method receives the output, once it's provided * @dev by the Oracle, and verified by the vrfCoordinator. * * @dev The _keyHash must already be registered with the VRFCoordinator, and * @dev the _fee must exceed the fee specified during registration of the * @dev _keyHash. * * @dev The _seed parameter is vestigial, and is kept only for API * @dev compatibility with older versions. It can't *hurt* to mix in some of * @dev your own randomness, here, but it's not necessary because the VRF * @dev oracle will mix the hash of the block containing your request into the * @dev VRF seed it ultimately uses. * * @param _keyHash ID of public key against which randomness is generated * @param _fee The amount of LINK to send with the request * * @return requestId unique ID for this request * * @dev The returned requestId can be used to distinguish responses to * @dev concurrent requests. It is passed as the first argument to * @dev fulfillRandomness. */ function requestRandomness( bytes32 _keyHash, uint256 _fee ) internal returns ( bytes32 requestId ) { LINK.transferAndCall(vrfCoordinator, _fee, abi.encode(_keyHash, USER_SEED_PLACEHOLDER)); // This is the seed passed to VRFCoordinator. The oracle will mix this with // the hash of the block containing this request to obtain the seed/input // which is finally passed to the VRF cryptographic machinery. uint256 vRFSeed = makeVRFInputSeed(_keyHash, USER_SEED_PLACEHOLDER, address(this), nonces[_keyHash]); // nonces[_keyHash] must stay in sync with // VRFCoordinator.nonces[_keyHash][this], which was incremented by the above // successful LINK.transferAndCall (in VRFCoordinator.randomnessRequest). // This provides protection against the user repeating their input seed, // which would result in a predictable/duplicate output, if multiple such // requests appeared in the same block. nonces[_keyHash] = nonces[_keyHash] + 1; return makeRequestId(_keyHash, vRFSeed); } LinkTokenInterface immutable internal LINK; address immutable private vrfCoordinator; // Nonces for each VRF key from which randomness has been requested. // // Must stay in sync with VRFCoordinator[_keyHash][this] mapping(bytes32 /* keyHash */ => uint256 /* nonce */) private nonces; /** * @param _vrfCoordinator address of VRFCoordinator contract * @param _link address of LINK token contract * * @dev https://docs.chain.link/docs/link-token-contracts */ constructor( address _vrfCoordinator, address _link ) { vrfCoordinator = _vrfCoordinator; LINK = LinkTokenInterface(_link); } // rawFulfillRandomness is called by VRFCoordinator when it receives a valid VRF // proof. rawFulfillRandomness then calls fulfillRandomness, after validating // the origin of the call function rawFulfillRandomness( bytes32 requestId, uint256 randomness ) external { require(msg.sender == vrfCoordinator, "Only VRFCoordinator can fulfill"); fulfillRandomness(requestId, randomness); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; contract VRFRequestIDBase { /** * @notice returns the seed which is actually input to the VRF coordinator * * @dev To prevent repetition of VRF output due to repetition of the * @dev user-supplied seed, that seed is combined in a hash with the * @dev user-specific nonce, and the address of the consuming contract. The * @dev risk of repetition is mostly mitigated by inclusion of a blockhash in * @dev the final seed, but the nonce does protect against repetition in * @dev requests which are included in a single block. * * @param _userSeed VRF seed input provided by user * @param _requester Address of the requesting contract * @param _nonce User-specific nonce at the time of the request */ function makeVRFInputSeed( bytes32 _keyHash, uint256 _userSeed, address _requester, uint256 _nonce ) internal pure returns ( uint256 ) { return uint256(keccak256(abi.encode(_keyHash, _userSeed, _requester, _nonce))); } /** * @notice Returns the id for this request * @param _keyHash The serviceAgreement ID to be used for this request * @param _vRFInputSeed The seed to be passed directly to the VRF * @return The id for this request * * @dev Note that _vRFInputSeed is not the seed passed by the consuming * @dev contract, but the one generated by makeVRFInputSeed */ function makeRequestId( bytes32 _keyHash, uint256 _vRFInputSeed ) internal pure returns ( bytes32 ) { return keccak256(abi.encodePacked(_keyHash, _vRFInputSeed)); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"_cooldown","type":"bool"}],"name":"CooldownEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_multiplier","type":"uint256"}],"name":"FeeMultiplierUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_rate","type":"uint256"}],"name":"FeeRateUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_maxBuyAmount","type":"uint256"}],"name":"MaxBuyAmountUpdated","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":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"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":[],"name":"amountInPool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTaxRandomNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cooldownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"notbot","type":"address"}],"name":"delBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"ad","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"ad","type":"address"}],"name":"includeToFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"ad","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastRequestAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastRequestId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"randomNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"requestId","type":"bytes32"},{"internalType":"uint256","name":"randomness","type":"uint256"}],"name":"rawFulfillRandomness","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"bots_","type":"address[]"}],"name":"setBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setCooldownEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketingWalletAddress","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"snipersTaxed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"thisBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"buyer","type":"address"}],"name":"timeToBuy","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":[],"name":"whichMode","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526200001b683635c9adc5dea00000600019620003a6565b620000299060001962000345565b6009556001600b8190556006600c819055600a600d556000600f5560109190915560118190556016805460ff60a01b1916905560408051808201909152818152651393d493505360d21b60209091019081526200008a91601791906200029f565b506018805462ffffff1916600117905560006019819055601b556103e8601c556002601f556005602055348015620000c157600080fd5b50600080546001600160a01b03191633908117825560405173f0d54349addcf704f77ae15b96510dea15cb79529273514910771af9ca656af840dff83e8264ecf986ca92918291907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350606091821b6001600160601b031990811660a052911b1660805260138054735d878c527e292cd3faf750dce3035e46b778e6346001600160a01b031991821681178355601480549092161781556009543360008181526003602090815260408083209490945581546001600160a01b03908116835260068252848320805460ff199081166001908117909255308552868520805482168317905597548216845285842080548916821790559554168252838220805487168617905573f0d54349addcf704f77ae15b96510dea15cb795282527ffd283a492b53e4bff1ac7e0a25603a448b84d2cf0b850c12bede3e637517d79280549096169094179094557faa77729d3466ca35ae8d28b3bbac7cc36a5031efdc430821c02bc31a238af445601d55671bc16d674ec80000601e559051683635c9adc5dea0000081529092917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3620003c7565b828054620002ad9062000369565b90600052602060002090601f016020900481019282620002d157600085556200031c565b82601f10620002ec57805160ff19168380011785556200031c565b828001600101855582156200031c579182015b828111156200031c578251825591602001919060010190620002ff565b506200032a9291506200032e565b5090565b5b808211156200032a57600081556001016200032f565b6000828210156200036457634e487b7160e01b81526011600452602481fd5b500390565b600181811c908216806200037e57607f821691505b60208210811415620003a057634e487b7160e01b600052602260045260246000fd5b50919050565b600082620003c257634e487b7160e01b81526012600452602481fd5b500690565b60805160601c60a05160601c612f416200040f6000396000818161089401526123d80152600081816117bc01528181611f99015281816121cd01526123a90152612f416000f3fe6080604052600436106101d15760003560e01c8063715018a6116100f7578063b515566a11610095578063db92dbb611610064578063db92dbb61461053a578063dd62ed3e1461054f578063e02b489d14610595578063fc2a88c3146105ab57600080fd5b8063b515566a146104cf578063c9567bf9146104ef578063ccbac9f514610504578063cf0848f71461051a57600080fd5b806395d89b41116100d157806395d89b411461045357806396a0aab714610482578063a9059cbb14610497578063a985ceef146104b757600080fd5b8063715018a6146103f65780638da5cb5b1461040b57806394985ddd1461043357600080fd5b80633bbac5791161016f5780635932ead11161013e5780635932ead1146103765780635d098b381461039657806368a3a6a5146103b657806370a08231146103d657600080fd5b80633bbac579146102f25780633d75af991461032b578063437823ec1461034057806345be726e1461036057600080fd5b806323b872dd116101ab57806323b872dd1461027f578063273123b71461029f57806327f3a72a146102c1578063313ce567146102d657600080fd5b806306fdde03146101dd578063095ea7b31461022957806318160ddd1461025957600080fd5b366101d857005b600080fd5b3480156101e957600080fd5b50604080518082019091526011815270213630b1b590233934b230bc9029b434b160791b60208201525b6040516102209190612cc0565b60405180910390f35b34801561023557600080fd5b5061024961024436600461294a565b6105c1565b6040519015158152602001610220565b34801561026557600080fd5b50683635c9adc5dea000005b604051908152602001610220565b34801561028b57600080fd5b5061024961029a36600461290a565b6105d8565b3480156102ab57600080fd5b506102bf6102ba36600461289a565b610641565b005b3480156102cd57600080fd5b50610271610695565b3480156102e257600080fd5b5060405160098152602001610220565b3480156102fe57600080fd5b5061024961030d36600461289a565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561033757600080fd5b50601b54610271565b34801561034c57600080fd5b506102bf61035b36600461289a565b6106a5565b34801561036c57600080fd5b50610271600d5481565b34801561038257600080fd5b506102bf610391366004612a9d565b6106e9565b3480156103a257600080fd5b506102bf6103b136600461289a565b610760565b3480156103c257600080fd5b506102716103d136600461289a565b6107d0565b3480156103e257600080fd5b506102716103f136600461289a565b6107f3565b34801561040257600080fd5b506102bf610815565b34801561041757600080fd5b506000546040516001600160a01b039091168152602001610220565b34801561043f57600080fd5b506102bf61044e366004612ad5565b610889565b34801561045f57600080fd5b50604080518082019091526006815265212329a424a160d11b6020820152610213565b34801561048e57600080fd5b5061021361090f565b3480156104a357600080fd5b506102496104b236600461294a565b6109cc565b3480156104c357600080fd5b5060185460ff16610249565b3480156104db57600080fd5b506102bf6104ea366004612975565b6109d9565b3480156104fb57600080fd5b506102bf610b35565b34801561051057600080fd5b5061027160215481565b34801561052657600080fd5b506102bf61053536600461289a565b610f12565b34801561054657600080fd5b50610271610f53565b34801561055b57600080fd5b5061027161056a3660046128d2565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b3480156105a157600080fd5b5061027160235481565b3480156105b757600080fd5b5061027160225481565b60006105ce338484610f6b565b5060015b92915050565b60006105e584848461108f565b610637843361063285604051806060016040528060288152602001612ee4602891396001600160a01b038a16600090815260056020908152604080832033845290915290205491906118da565b610f6b565b5060019392505050565b6000546001600160a01b031633146106745760405162461bcd60e51b815260040161066b90612cd3565b60405180910390fd5b6001600160a01b03166000908152600760205260409020805460ff19169055565b60006106a0306107f3565b905090565b6013546001600160a01b0316336001600160a01b0316146106c557600080fd5b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000546001600160a01b031633146107135760405162461bcd60e51b815260040161066b90612cd3565b6018805460ff191682151590811790915560405160ff909116151581527f0d63187a8abb5b4d1bb562e1163897386b0a88ee72e0799dd105bd0fd6f287069060200160405180910390a150565b6013546001600160a01b0316336001600160a01b03161461078057600080fd5b601480546001600160a01b03908116600090815260066020526040808220805460ff1990811690915584546001600160a01b03191695909316948517909355928352912080549091166001179055565b6001600160a01b0381166000908152600860205260408120546105d29042612dfd565b6001600160a01b0381166000908152600360205260408120546105d290611914565b6000546001600160a01b0316331461083f5760405162461bcd60e51b815260040161066b90612cd3565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109015760405162461bcd60e51b815260206004820152601f60248201527f4f6e6c7920565246436f6f7264696e61746f722063616e2066756c66696c6c00604482015260640161066b565b61090b8282611998565b5050565b6060600f5442111561093c57506040805180820190915260068152651393d493505360d21b602082015290565b6017805461094990612e14565b80601f016020809104026020016040519081016040528092919081815260200182805461097590612e14565b80156109c25780601f10610997576101008083540402835291602001916109c2565b820191906000526020600020905b8154815290600101906020018083116109a557829003601f168201915b5050505050905090565b60006105ce33848461108f565b6000546001600160a01b03163314610a035760405162461bcd60e51b815260040161066b90612cd3565b600e54610a12906104b0612db2565b421015610b325760005b815181101561090b5760165482516001600160a01b0390911690839083908110610a5657634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031614158015610ab5575060155482516001600160a01b0390911690839083908110610aa157634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031614155b15610b2057600160076000848481518110610ae057634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055505b80610b2a81612e4f565b915050610a1c565b50565b6000546001600160a01b03163314610b5f5760405162461bcd60e51b815260040161066b90612cd3565b601654600160a01b900460ff1615610bb95760405162461bcd60e51b815260206004820152601760248201527f74726164696e6720697320616c7265616479206f70656e000000000000000000604482015260640161066b565b601580546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155610bf63082683635c9adc5dea00000610f6b565b806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610c2f57600080fd5b505afa158015610c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6791906128b6565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610caf57600080fd5b505afa158015610cc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce791906128b6565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015610d2f57600080fd5b505af1158015610d43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6791906128b6565b601680546001600160a01b0319166001600160a01b039283161790556015541663f305d7194730610d97816107f3565b600080610dac6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015610e0f57600080fd5b505af1158015610e23573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610e489190612b0e565b5050674563918244f400006012555060165460155460405163095ea7b360e01b81526001600160a01b039182166004820152600019602482015291169063095ea7b390604401602060405180830381600087803b158015610ea857600080fd5b505af1158015610ebc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee09190612ab9565b506016805460ff60a01b1916600160a01b179055610eff42605a612db2565b601a555042600e81905543601955602355565b6013546001600160a01b0316336001600160a01b031614610f3257600080fd5b6001600160a01b03166000908152600660205260409020805460ff19169055565b6016546000906106a0906001600160a01b03166107f3565b6001600160a01b038316610fcd5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161066b565b6001600160a01b03821661102e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161066b565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166110f35760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161066b565b6001600160a01b0382166111555760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161066b565b600081116111b75760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161066b565b6000546001600160a01b038481169116148015906111e357506000546001600160a01b03838116911614155b1561186b576001600160a01b03831660009081526007602052604090205460ff1615801561122a57506001600160a01b03821660009081526007602052604090205460ff16155b61123357600080fd5b3360009081526008602052604090206001015460ff16611289576040805180820182526000808252600160208084018281523384526008909152939091209151825591519101805460ff19169115159190911790555b601654600a906001600160a01b0385811691161480156112b757506015546001600160a01b03848116911614155b80156112dc57506001600160a01b03831660009081526006602052604090205460ff16155b1561164657601654600160a01b900460ff1661133a5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642e0000000000000000604482015260640161066b565b601954611348906002612db2565b43101561136c5750601b8054604b91600061136283612e4f565b9190505550611564565b600e5461137a906078612db2565b42111561154357600f544211156113c257604080518082019091526006808252651393d493505360d21b60209092019182526113b891601791612801565b50600a9050611564565b6040516a535445414c5f4445414c5360a81b6020820152602b016040516020818303038152906040528051906020012060176040516020016114049190612bc9565b60405160208183030381529060405280519060200120141561142857506006611564565b6040516a48415050595f484f55525360a81b6020820152602b0160405160208183030381529060405280519060200120601760405160200161146a9190612bc9565b60405160208183030381529060405280519060200120141561152e57600061149d601c5484611af390919063ffffffff16565b6016549091506000906114cf906114c89086906114c2906001600160a01b03166107f3565b90611b72565b8390611bd1565b9050602881106114e2576002925061151a565b601e81106114f3576004925061151a565b60148110611504576006925061151a565b600a8110611515576008925061151a565b600a92505b8261152481612e4f565b9350505050611564565b600d5461153c906001612db2565b9050611564565b600e5461155190603c612db2565b42111561156057506014611564565b5060285b61156f81600a611bd1565b600b55611588600a611582836009611af3565b90611bd1565b600c5560185460ff16156116465742601a541115611646576012548211156115af57600080fd5b6001600160a01b03831660009081526008602052604090205442116116215760405162461bcd60e51b815260206004820152602260248201527f596f75722062757920636f6f6c646f776e20686173206e6f7420657870697265604482015261321760f11b606482015260840161066b565b61162c42602d612db2565b6001600160a01b0384166000908152600860205260409020555b6000611651306107f3565b60185490915062010000900460ff1615801561167b57506016546001600160a01b03868116911614155b80156116905750601654600160a01b900460ff165b156118685760006116ac601c5485611af390919063ffffffff16565b6016549091506000906116d1906114c89087906114c2906001600160a01b03166107f3565b6001600b559050600a81116116e957600a9350611721565b602881106116fa5760289350611721565b611705816002611c13565b1561171d5761171381612e4f565b9050809350611721565b8093505b600b5461172f908590611c55565b600c55821561179757601654611761906064906115829060059061175b906001600160a01b03166107f3565b90611af3565b83111561178e5760165461178b906064906115829060059061175b906001600160a01b03166107f3565b92505b61179783611c97565b601f54601e546117a79190612dde565b6040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b15801561180657600080fd5b505afa15801561181a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061183e9190612af6565b101561184c5761184c611e39565b611854612190565b478015611864576118644761226d565b5050505b50505b6001600160a01b03831660009081526006602052604090205460019060ff16806118ad57506001600160a01b03831660009081526006602052604090205460ff165b806118bf5750601854610100900460ff165b156118c8575060005b6118d4848484846122f2565b50505050565b600081848411156118fe5760405162461bcd60e51b815260040161066b9190612cc0565b50600061190b8486612dfd565b95945050505050565b600060095482111561197b5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b606482015260840161066b565b6000611985612320565b90506119918382611bd1565b9392505050565b604080516020808201849052818301859052825180830384018152606090920190925280519101206119cc90606490612e6a565b6119d7906001612db2565b602181905560501015611a1c5760408051808201909152600b8082526a48415050595f484f55525360a81b6020909201918252611a1691601791612801565b50611adb565b60326021541115611a6f5760408051808201909152600a80825269464c4153485f53414c4560b01b6020909201918252611a5891601791612801565b50602154611a6790600a611bd1565b600d55611adb565b60196021541115611aac5760408051808201909152600b8082526a535445414c5f4445414c5360a81b6020909201918252611a1691601791612801565b604080518082019091526006808252651393d493505360d21b6020909201918252611ad991601791612801565b505b611ae742610384612db2565b600f5550506000602255565b600082611b02575060006105d2565b6000611b0e8385612dde565b905082611b1b8583612dca565b146119915760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161066b565b600080611b7f8385612db2565b9050838110156119915760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161066b565b600061199183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612343565b600061199183836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f0000000000000000815250612371565b600061199183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506118da565b6018805462ff00001916620100001790556040805160028082526060820183526000926020830190803683370190505090503081600081518110611ceb57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601554604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015611d3f57600080fd5b505afa158015611d53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d7791906128b6565b81600181518110611d9857634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601554611dbe9130911684610f6b565b60155460405163791ac94760e01b81526001600160a01b039091169063791ac94790611df7908590600090869030904290600401612d21565b600060405180830381600087803b158015611e1157600080fd5b505af1158015611e25573d6000803e3d6000fd5b50506018805462ff00001916905550505050565b6018805462ff00001916620100001790556040805160028082526060820183526000926020830190803683375050601554604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b158015611eaf57600080fd5b505afa158015611ec3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee791906128b6565b81600081518110611f0857634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b03168152505073514910771af9ca656af840dff83e8264ecf986ca81600181518110611f5e57634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831660209182029290920101526015546040516370a0823160e01b815230600482015260009291821691631f00ca74917f0000000000000000000000000000000000000000000000000000000000000000909116906370a082319060240160206040518083038186803b158015611fdd57600080fd5b505afa158015611ff1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120159190612af6565b601e546020546120259190612dde565b61202f9190612dfd565b846040518363ffffffff1660e01b815260040161204d929190612d08565b60006040518083038186803b15801561206557600080fd5b505afa158015612079573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526120a19190810190612a16565b6000815181106120c157634e487b7160e01b600052603260045260246000fd5b6020026020010151905080471115612180576015546001600160a01b031663b6f9de9582600085306120f54261012c611b72565b6040518663ffffffff1660e01b81526004016121149493929190612c8b565b6000604051808303818588803b15801561212d57600080fd5b505af1158015612141573d6000803e3d6000fd5b50505050507f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a96248183604051612177929190612d08565b60405180910390a15b50506018805462ff000019169055565b602254158015906121ae57506023546121ab90610dd4612db2565b42105b156121b557565b601e546040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b15801561221757600080fd5b505afa15801561222b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061224f9190612af6565b111561226b57612263601d54601e546123a5565b602255426023555b565b6013546001600160a01b03166108fc612287836002611bd1565b6040518115909202916000818181858888f193505050501580156122af573d6000803e3d6000fd5b506014546001600160a01b03166108fc6122ca836002611bd1565b6040518115909202916000818181858888f1935050505015801561090b573d6000803e3d6000fd5b806122ff576122ff612530565b61230a84848461255e565b806118d4576118d4601054600b55601154600c55565b600080600061232d612655565b909250905061233c8282611bd1565b9250505090565b600081836123645760405162461bcd60e51b815260040161066b9190612cc0565b50600061190b8486612dca565b600081836123925760405162461bcd60e51b815260040161066b9190612cc0565b5061239d8385612e6a565b949350505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634000aea07f000000000000000000000000000000000000000000000000000000000000000084866000604051602001612415929190918252602082015260400190565b6040516020818303038152906040526040518463ffffffff1660e01b815260040161244293929190612c64565b602060405180830381600087803b15801561245c57600080fd5b505af1158015612470573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124949190612ab9565b50600083815260026020818152604080842054815180840189905280830186905230606082015260808082018390528351808303909101815260a0909101909252815191830191909120938790529190526124f0906001612db2565b60008581526002602052604090205561239d8482604080516020808201949094528082019290925280518083038201815260609092019052805191012090565b600b541580156125405750600c54155b1561254757565b600b8054601055600c805460115560009182905555565b60008060008060008061257087612697565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506125a29087611c55565b6001600160a01b03808b1660009081526003602052604080822093909355908a16815220546125d19086611b72565b6001600160a01b0389166000908152600360205260409020556125f3816126f4565b6125fd848361273e565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161264291815260200190565b60405180910390a3505050505050505050565b6009546000908190683635c9adc5dea000006126718282611bd1565b82101561268e57505060095492683635c9adc5dea0000092509050565b90939092509050565b60008060008060008060008060006126b48a600b54600c54612762565b92509250925060006126c4612320565b905060008060006126d78e8787876127b1565b919e509c509a509598509396509194505050505091939550919395565b60006126fe612320565b9050600061270c8383611af3565b306000908152600360205260409020549091506127299082611b72565b30600090815260036020526040902055505050565b60095461274b9083611c55565b600955600a5461275b9082611b72565b600a555050565b600080808061277660646115828989611af3565b9050600061278960646115828a89611af3565b905060006127a18261279b8b86611c55565b90611c55565b9992985090965090945050505050565b60008080806127c08886611af3565b905060006127ce8887611af3565b905060006127dc8888611af3565b905060006127ee8261279b8686611c55565b939b939a50919850919650505050505050565b82805461280d90612e14565b90600052602060002090601f01602090048101928261282f5760008555612875565b82601f1061284857805160ff1916838001178555612875565b82800160010185558215612875579182015b8281111561287557825182559160200191906001019061285a565b50612881929150612885565b5090565b5b808211156128815760008155600101612886565b6000602082840312156128ab578081fd5b813561199181612ec0565b6000602082840312156128c7578081fd5b815161199181612ec0565b600080604083850312156128e4578081fd5b82356128ef81612ec0565b915060208301356128ff81612ec0565b809150509250929050565b60008060006060848603121561291e578081fd5b833561292981612ec0565b9250602084013561293981612ec0565b929592945050506040919091013590565b6000806040838503121561295c578182fd5b823561296781612ec0565b946020939093013593505050565b60006020808385031215612987578182fd5b823567ffffffffffffffff81111561299d578283fd5b8301601f810185136129ad578283fd5b80356129c06129bb82612d8e565b612d5d565b80828252848201915084840188868560051b87010111156129df578687fd5b8694505b83851015612a0a5780356129f681612ec0565b8352600194909401939185019185016129e3565b50979650505050505050565b60006020808385031215612a28578182fd5b825167ffffffffffffffff811115612a3e578283fd5b8301601f81018513612a4e578283fd5b8051612a5c6129bb82612d8e565b80828252848201915084840188868560051b8701011115612a7b578687fd5b8694505b83851015612a0a578051835260019490940193918501918501612a7f565b600060208284031215612aae578081fd5b813561199181612ed5565b600060208284031215612aca578081fd5b815161199181612ed5565b60008060408385031215612ae7578182fd5b50508035926020909101359150565b600060208284031215612b07578081fd5b5051919050565b600080600060608486031215612b22578283fd5b8351925060208401519150604084015190509250925092565b6000815180845260208085019450808401835b83811015612b735781516001600160a01b031687529582019590820190600101612b4e565b509495945050505050565b60008151808452815b81811015612ba357602081850181015186830182015201612b87565b81811115612bb45782602083870101525b50601f01601f19169290920160200192915050565b600080835482600182811c915080831680612be557607f831692505b6020808410821415612c0557634e487b7160e01b87526022600452602487fd5b818015612c195760018114612c2a57612c56565b60ff19861689528489019650612c56565b60008a815260209020885b86811015612c4e5781548b820152908501908301612c35565b505084890196505b509498975050505050505050565b60018060a01b038416815282602082015260606040820152600061190b6060830184612b7e565b848152608060208201526000612ca46080830186612b3b565b6001600160a01b03949094166040830152506060015292915050565b6020815260006119916020830184612b7e565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b82815260406020820152600061239d6040830184612b3b565b85815284602082015260a060408201526000612d4060a0830186612b3b565b6001600160a01b0394909416606083015250608001529392505050565b604051601f8201601f1916810167ffffffffffffffff81118282101715612d8657612d86612eaa565b604052919050565b600067ffffffffffffffff821115612da857612da8612eaa565b5060051b60200190565b60008219821115612dc557612dc5612e7e565b500190565b600082612dd957612dd9612e94565b500490565b6000816000190483118215151615612df857612df8612e7e565b500290565b600082821015612e0f57612e0f612e7e565b500390565b600181811c90821680612e2857607f821691505b60208210811415612e4957634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612e6357612e63612e7e565b5060010190565b600082612e7957612e79612e94565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610b3257600080fd5b8015158114610b3257600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220b1cf1703334985c2981a19ae2b4b90dc530c0662231f9b5efab3de7b74abbe4d64736f6c63430008040033
Deployed Bytecode
0x6080604052600436106101d15760003560e01c8063715018a6116100f7578063b515566a11610095578063db92dbb611610064578063db92dbb61461053a578063dd62ed3e1461054f578063e02b489d14610595578063fc2a88c3146105ab57600080fd5b8063b515566a146104cf578063c9567bf9146104ef578063ccbac9f514610504578063cf0848f71461051a57600080fd5b806395d89b41116100d157806395d89b411461045357806396a0aab714610482578063a9059cbb14610497578063a985ceef146104b757600080fd5b8063715018a6146103f65780638da5cb5b1461040b57806394985ddd1461043357600080fd5b80633bbac5791161016f5780635932ead11161013e5780635932ead1146103765780635d098b381461039657806368a3a6a5146103b657806370a08231146103d657600080fd5b80633bbac579146102f25780633d75af991461032b578063437823ec1461034057806345be726e1461036057600080fd5b806323b872dd116101ab57806323b872dd1461027f578063273123b71461029f57806327f3a72a146102c1578063313ce567146102d657600080fd5b806306fdde03146101dd578063095ea7b31461022957806318160ddd1461025957600080fd5b366101d857005b600080fd5b3480156101e957600080fd5b50604080518082019091526011815270213630b1b590233934b230bc9029b434b160791b60208201525b6040516102209190612cc0565b60405180910390f35b34801561023557600080fd5b5061024961024436600461294a565b6105c1565b6040519015158152602001610220565b34801561026557600080fd5b50683635c9adc5dea000005b604051908152602001610220565b34801561028b57600080fd5b5061024961029a36600461290a565b6105d8565b3480156102ab57600080fd5b506102bf6102ba36600461289a565b610641565b005b3480156102cd57600080fd5b50610271610695565b3480156102e257600080fd5b5060405160098152602001610220565b3480156102fe57600080fd5b5061024961030d36600461289a565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561033757600080fd5b50601b54610271565b34801561034c57600080fd5b506102bf61035b36600461289a565b6106a5565b34801561036c57600080fd5b50610271600d5481565b34801561038257600080fd5b506102bf610391366004612a9d565b6106e9565b3480156103a257600080fd5b506102bf6103b136600461289a565b610760565b3480156103c257600080fd5b506102716103d136600461289a565b6107d0565b3480156103e257600080fd5b506102716103f136600461289a565b6107f3565b34801561040257600080fd5b506102bf610815565b34801561041757600080fd5b506000546040516001600160a01b039091168152602001610220565b34801561043f57600080fd5b506102bf61044e366004612ad5565b610889565b34801561045f57600080fd5b50604080518082019091526006815265212329a424a160d11b6020820152610213565b34801561048e57600080fd5b5061021361090f565b3480156104a357600080fd5b506102496104b236600461294a565b6109cc565b3480156104c357600080fd5b5060185460ff16610249565b3480156104db57600080fd5b506102bf6104ea366004612975565b6109d9565b3480156104fb57600080fd5b506102bf610b35565b34801561051057600080fd5b5061027160215481565b34801561052657600080fd5b506102bf61053536600461289a565b610f12565b34801561054657600080fd5b50610271610f53565b34801561055b57600080fd5b5061027161056a3660046128d2565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b3480156105a157600080fd5b5061027160235481565b3480156105b757600080fd5b5061027160225481565b60006105ce338484610f6b565b5060015b92915050565b60006105e584848461108f565b610637843361063285604051806060016040528060288152602001612ee4602891396001600160a01b038a16600090815260056020908152604080832033845290915290205491906118da565b610f6b565b5060019392505050565b6000546001600160a01b031633146106745760405162461bcd60e51b815260040161066b90612cd3565b60405180910390fd5b6001600160a01b03166000908152600760205260409020805460ff19169055565b60006106a0306107f3565b905090565b6013546001600160a01b0316336001600160a01b0316146106c557600080fd5b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000546001600160a01b031633146107135760405162461bcd60e51b815260040161066b90612cd3565b6018805460ff191682151590811790915560405160ff909116151581527f0d63187a8abb5b4d1bb562e1163897386b0a88ee72e0799dd105bd0fd6f287069060200160405180910390a150565b6013546001600160a01b0316336001600160a01b03161461078057600080fd5b601480546001600160a01b03908116600090815260066020526040808220805460ff1990811690915584546001600160a01b03191695909316948517909355928352912080549091166001179055565b6001600160a01b0381166000908152600860205260408120546105d29042612dfd565b6001600160a01b0381166000908152600360205260408120546105d290611914565b6000546001600160a01b0316331461083f5760405162461bcd60e51b815260040161066b90612cd3565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b336001600160a01b037f000000000000000000000000f0d54349addcf704f77ae15b96510dea15cb795216146109015760405162461bcd60e51b815260206004820152601f60248201527f4f6e6c7920565246436f6f7264696e61746f722063616e2066756c66696c6c00604482015260640161066b565b61090b8282611998565b5050565b6060600f5442111561093c57506040805180820190915260068152651393d493505360d21b602082015290565b6017805461094990612e14565b80601f016020809104026020016040519081016040528092919081815260200182805461097590612e14565b80156109c25780601f10610997576101008083540402835291602001916109c2565b820191906000526020600020905b8154815290600101906020018083116109a557829003601f168201915b5050505050905090565b60006105ce33848461108f565b6000546001600160a01b03163314610a035760405162461bcd60e51b815260040161066b90612cd3565b600e54610a12906104b0612db2565b421015610b325760005b815181101561090b5760165482516001600160a01b0390911690839083908110610a5657634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031614158015610ab5575060155482516001600160a01b0390911690839083908110610aa157634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031614155b15610b2057600160076000848481518110610ae057634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055505b80610b2a81612e4f565b915050610a1c565b50565b6000546001600160a01b03163314610b5f5760405162461bcd60e51b815260040161066b90612cd3565b601654600160a01b900460ff1615610bb95760405162461bcd60e51b815260206004820152601760248201527f74726164696e6720697320616c7265616479206f70656e000000000000000000604482015260640161066b565b601580546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155610bf63082683635c9adc5dea00000610f6b565b806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610c2f57600080fd5b505afa158015610c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6791906128b6565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610caf57600080fd5b505afa158015610cc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce791906128b6565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015610d2f57600080fd5b505af1158015610d43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6791906128b6565b601680546001600160a01b0319166001600160a01b039283161790556015541663f305d7194730610d97816107f3565b600080610dac6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015610e0f57600080fd5b505af1158015610e23573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610e489190612b0e565b5050674563918244f400006012555060165460155460405163095ea7b360e01b81526001600160a01b039182166004820152600019602482015291169063095ea7b390604401602060405180830381600087803b158015610ea857600080fd5b505af1158015610ebc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee09190612ab9565b506016805460ff60a01b1916600160a01b179055610eff42605a612db2565b601a555042600e81905543601955602355565b6013546001600160a01b0316336001600160a01b031614610f3257600080fd5b6001600160a01b03166000908152600660205260409020805460ff19169055565b6016546000906106a0906001600160a01b03166107f3565b6001600160a01b038316610fcd5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161066b565b6001600160a01b03821661102e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161066b565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166110f35760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161066b565b6001600160a01b0382166111555760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161066b565b600081116111b75760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161066b565b6000546001600160a01b038481169116148015906111e357506000546001600160a01b03838116911614155b1561186b576001600160a01b03831660009081526007602052604090205460ff1615801561122a57506001600160a01b03821660009081526007602052604090205460ff16155b61123357600080fd5b3360009081526008602052604090206001015460ff16611289576040805180820182526000808252600160208084018281523384526008909152939091209151825591519101805460ff19169115159190911790555b601654600a906001600160a01b0385811691161480156112b757506015546001600160a01b03848116911614155b80156112dc57506001600160a01b03831660009081526006602052604090205460ff16155b1561164657601654600160a01b900460ff1661133a5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642e0000000000000000604482015260640161066b565b601954611348906002612db2565b43101561136c5750601b8054604b91600061136283612e4f565b9190505550611564565b600e5461137a906078612db2565b42111561154357600f544211156113c257604080518082019091526006808252651393d493505360d21b60209092019182526113b891601791612801565b50600a9050611564565b6040516a535445414c5f4445414c5360a81b6020820152602b016040516020818303038152906040528051906020012060176040516020016114049190612bc9565b60405160208183030381529060405280519060200120141561142857506006611564565b6040516a48415050595f484f55525360a81b6020820152602b0160405160208183030381529060405280519060200120601760405160200161146a9190612bc9565b60405160208183030381529060405280519060200120141561152e57600061149d601c5484611af390919063ffffffff16565b6016549091506000906114cf906114c89086906114c2906001600160a01b03166107f3565b90611b72565b8390611bd1565b9050602881106114e2576002925061151a565b601e81106114f3576004925061151a565b60148110611504576006925061151a565b600a8110611515576008925061151a565b600a92505b8261152481612e4f565b9350505050611564565b600d5461153c906001612db2565b9050611564565b600e5461155190603c612db2565b42111561156057506014611564565b5060285b61156f81600a611bd1565b600b55611588600a611582836009611af3565b90611bd1565b600c5560185460ff16156116465742601a541115611646576012548211156115af57600080fd5b6001600160a01b03831660009081526008602052604090205442116116215760405162461bcd60e51b815260206004820152602260248201527f596f75722062757920636f6f6c646f776e20686173206e6f7420657870697265604482015261321760f11b606482015260840161066b565b61162c42602d612db2565b6001600160a01b0384166000908152600860205260409020555b6000611651306107f3565b60185490915062010000900460ff1615801561167b57506016546001600160a01b03868116911614155b80156116905750601654600160a01b900460ff165b156118685760006116ac601c5485611af390919063ffffffff16565b6016549091506000906116d1906114c89087906114c2906001600160a01b03166107f3565b6001600b559050600a81116116e957600a9350611721565b602881106116fa5760289350611721565b611705816002611c13565b1561171d5761171381612e4f565b9050809350611721565b8093505b600b5461172f908590611c55565b600c55821561179757601654611761906064906115829060059061175b906001600160a01b03166107f3565b90611af3565b83111561178e5760165461178b906064906115829060059061175b906001600160a01b03166107f3565b92505b61179783611c97565b601f54601e546117a79190612dde565b6040516370a0823160e01b81523060048201527f000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca6001600160a01b0316906370a082319060240160206040518083038186803b15801561180657600080fd5b505afa15801561181a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061183e9190612af6565b101561184c5761184c611e39565b611854612190565b478015611864576118644761226d565b5050505b50505b6001600160a01b03831660009081526006602052604090205460019060ff16806118ad57506001600160a01b03831660009081526006602052604090205460ff165b806118bf5750601854610100900460ff165b156118c8575060005b6118d4848484846122f2565b50505050565b600081848411156118fe5760405162461bcd60e51b815260040161066b9190612cc0565b50600061190b8486612dfd565b95945050505050565b600060095482111561197b5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b606482015260840161066b565b6000611985612320565b90506119918382611bd1565b9392505050565b604080516020808201849052818301859052825180830384018152606090920190925280519101206119cc90606490612e6a565b6119d7906001612db2565b602181905560501015611a1c5760408051808201909152600b8082526a48415050595f484f55525360a81b6020909201918252611a1691601791612801565b50611adb565b60326021541115611a6f5760408051808201909152600a80825269464c4153485f53414c4560b01b6020909201918252611a5891601791612801565b50602154611a6790600a611bd1565b600d55611adb565b60196021541115611aac5760408051808201909152600b8082526a535445414c5f4445414c5360a81b6020909201918252611a1691601791612801565b604080518082019091526006808252651393d493505360d21b6020909201918252611ad991601791612801565b505b611ae742610384612db2565b600f5550506000602255565b600082611b02575060006105d2565b6000611b0e8385612dde565b905082611b1b8583612dca565b146119915760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161066b565b600080611b7f8385612db2565b9050838110156119915760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161066b565b600061199183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612343565b600061199183836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f0000000000000000815250612371565b600061199183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506118da565b6018805462ff00001916620100001790556040805160028082526060820183526000926020830190803683370190505090503081600081518110611ceb57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601554604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015611d3f57600080fd5b505afa158015611d53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d7791906128b6565b81600181518110611d9857634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601554611dbe9130911684610f6b565b60155460405163791ac94760e01b81526001600160a01b039091169063791ac94790611df7908590600090869030904290600401612d21565b600060405180830381600087803b158015611e1157600080fd5b505af1158015611e25573d6000803e3d6000fd5b50506018805462ff00001916905550505050565b6018805462ff00001916620100001790556040805160028082526060820183526000926020830190803683375050601554604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b158015611eaf57600080fd5b505afa158015611ec3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee791906128b6565b81600081518110611f0857634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b03168152505073514910771af9ca656af840dff83e8264ecf986ca81600181518110611f5e57634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831660209182029290920101526015546040516370a0823160e01b815230600482015260009291821691631f00ca74917f000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca909116906370a082319060240160206040518083038186803b158015611fdd57600080fd5b505afa158015611ff1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120159190612af6565b601e546020546120259190612dde565b61202f9190612dfd565b846040518363ffffffff1660e01b815260040161204d929190612d08565b60006040518083038186803b15801561206557600080fd5b505afa158015612079573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526120a19190810190612a16565b6000815181106120c157634e487b7160e01b600052603260045260246000fd5b6020026020010151905080471115612180576015546001600160a01b031663b6f9de9582600085306120f54261012c611b72565b6040518663ffffffff1660e01b81526004016121149493929190612c8b565b6000604051808303818588803b15801561212d57600080fd5b505af1158015612141573d6000803e3d6000fd5b50505050507f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a96248183604051612177929190612d08565b60405180910390a15b50506018805462ff000019169055565b602254158015906121ae57506023546121ab90610dd4612db2565b42105b156121b557565b601e546040516370a0823160e01b81523060048201527f000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca6001600160a01b0316906370a082319060240160206040518083038186803b15801561221757600080fd5b505afa15801561222b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061224f9190612af6565b111561226b57612263601d54601e546123a5565b602255426023555b565b6013546001600160a01b03166108fc612287836002611bd1565b6040518115909202916000818181858888f193505050501580156122af573d6000803e3d6000fd5b506014546001600160a01b03166108fc6122ca836002611bd1565b6040518115909202916000818181858888f1935050505015801561090b573d6000803e3d6000fd5b806122ff576122ff612530565b61230a84848461255e565b806118d4576118d4601054600b55601154600c55565b600080600061232d612655565b909250905061233c8282611bd1565b9250505090565b600081836123645760405162461bcd60e51b815260040161066b9190612cc0565b50600061190b8486612dca565b600081836123925760405162461bcd60e51b815260040161066b9190612cc0565b5061239d8385612e6a565b949350505050565b60007f000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca6001600160a01b0316634000aea07f000000000000000000000000f0d54349addcf704f77ae15b96510dea15cb795284866000604051602001612415929190918252602082015260400190565b6040516020818303038152906040526040518463ffffffff1660e01b815260040161244293929190612c64565b602060405180830381600087803b15801561245c57600080fd5b505af1158015612470573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124949190612ab9565b50600083815260026020818152604080842054815180840189905280830186905230606082015260808082018390528351808303909101815260a0909101909252815191830191909120938790529190526124f0906001612db2565b60008581526002602052604090205561239d8482604080516020808201949094528082019290925280518083038201815260609092019052805191012090565b600b541580156125405750600c54155b1561254757565b600b8054601055600c805460115560009182905555565b60008060008060008061257087612697565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506125a29087611c55565b6001600160a01b03808b1660009081526003602052604080822093909355908a16815220546125d19086611b72565b6001600160a01b0389166000908152600360205260409020556125f3816126f4565b6125fd848361273e565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161264291815260200190565b60405180910390a3505050505050505050565b6009546000908190683635c9adc5dea000006126718282611bd1565b82101561268e57505060095492683635c9adc5dea0000092509050565b90939092509050565b60008060008060008060008060006126b48a600b54600c54612762565b92509250925060006126c4612320565b905060008060006126d78e8787876127b1565b919e509c509a509598509396509194505050505091939550919395565b60006126fe612320565b9050600061270c8383611af3565b306000908152600360205260409020549091506127299082611b72565b30600090815260036020526040902055505050565b60095461274b9083611c55565b600955600a5461275b9082611b72565b600a555050565b600080808061277660646115828989611af3565b9050600061278960646115828a89611af3565b905060006127a18261279b8b86611c55565b90611c55565b9992985090965090945050505050565b60008080806127c08886611af3565b905060006127ce8887611af3565b905060006127dc8888611af3565b905060006127ee8261279b8686611c55565b939b939a50919850919650505050505050565b82805461280d90612e14565b90600052602060002090601f01602090048101928261282f5760008555612875565b82601f1061284857805160ff1916838001178555612875565b82800160010185558215612875579182015b8281111561287557825182559160200191906001019061285a565b50612881929150612885565b5090565b5b808211156128815760008155600101612886565b6000602082840312156128ab578081fd5b813561199181612ec0565b6000602082840312156128c7578081fd5b815161199181612ec0565b600080604083850312156128e4578081fd5b82356128ef81612ec0565b915060208301356128ff81612ec0565b809150509250929050565b60008060006060848603121561291e578081fd5b833561292981612ec0565b9250602084013561293981612ec0565b929592945050506040919091013590565b6000806040838503121561295c578182fd5b823561296781612ec0565b946020939093013593505050565b60006020808385031215612987578182fd5b823567ffffffffffffffff81111561299d578283fd5b8301601f810185136129ad578283fd5b80356129c06129bb82612d8e565b612d5d565b80828252848201915084840188868560051b87010111156129df578687fd5b8694505b83851015612a0a5780356129f681612ec0565b8352600194909401939185019185016129e3565b50979650505050505050565b60006020808385031215612a28578182fd5b825167ffffffffffffffff811115612a3e578283fd5b8301601f81018513612a4e578283fd5b8051612a5c6129bb82612d8e565b80828252848201915084840188868560051b8701011115612a7b578687fd5b8694505b83851015612a0a578051835260019490940193918501918501612a7f565b600060208284031215612aae578081fd5b813561199181612ed5565b600060208284031215612aca578081fd5b815161199181612ed5565b60008060408385031215612ae7578182fd5b50508035926020909101359150565b600060208284031215612b07578081fd5b5051919050565b600080600060608486031215612b22578283fd5b8351925060208401519150604084015190509250925092565b6000815180845260208085019450808401835b83811015612b735781516001600160a01b031687529582019590820190600101612b4e565b509495945050505050565b60008151808452815b81811015612ba357602081850181015186830182015201612b87565b81811115612bb45782602083870101525b50601f01601f19169290920160200192915050565b600080835482600182811c915080831680612be557607f831692505b6020808410821415612c0557634e487b7160e01b87526022600452602487fd5b818015612c195760018114612c2a57612c56565b60ff19861689528489019650612c56565b60008a815260209020885b86811015612c4e5781548b820152908501908301612c35565b505084890196505b509498975050505050505050565b60018060a01b038416815282602082015260606040820152600061190b6060830184612b7e565b848152608060208201526000612ca46080830186612b3b565b6001600160a01b03949094166040830152506060015292915050565b6020815260006119916020830184612b7e565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b82815260406020820152600061239d6040830184612b3b565b85815284602082015260a060408201526000612d4060a0830186612b3b565b6001600160a01b0394909416606083015250608001529392505050565b604051601f8201601f1916810167ffffffffffffffff81118282101715612d8657612d86612eaa565b604052919050565b600067ffffffffffffffff821115612da857612da8612eaa565b5060051b60200190565b60008219821115612dc557612dc5612e7e565b500190565b600082612dd957612dd9612e94565b500490565b6000816000190483118215151615612df857612df8612e7e565b500290565b600082821015612e0f57612e0f612e7e565b500390565b600181811c90821680612e2857607f821691505b60208210811415612e4957634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612e6357612e63612e7e565b5060010190565b600082612e7957612e79612e94565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610b3257600080fd5b8015158114610b3257600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220b1cf1703334985c2981a19ae2b4b90dc530c0662231f9b5efab3de7b74abbe4d64736f6c63430008040033
Deployed Bytecode Sourcemap
11295:18419:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14629:81;;;;;;;;;;-1:-1:-1;14698:5:0;;;;;;;;;;;;-1:-1:-1;;;14698:5:0;;;;14629:81;;;;;;;:::i;:::-;;;;;;;;15544:158;;;;;;;;;;-1:-1:-1;15544:158:0;;;;;:::i;:::-;;:::i;:::-;;;10089:14:4;;10082:22;10064:41;;10052:2;10037:18;15544:158:0;10019:92:4;14894:93:0;;;;;;;;;;-1:-1:-1;11815:12:0;14894:93;;;10262:25:4;;;10250:2;10235:18;14894:93:0;10217:76:4;15708:309:0;;;;;;;;;;-1:-1:-1;15708:309:0;;;;;:::i;:::-;;:::i;28920:87::-;;;;;;;;;;-1:-1:-1;28920:87:0;;;;;:::i;:::-;;:::i;:::-;;29277:98;;;;;;;;;;;;;:::i;14807:81::-;;;;;;;;;;-1:-1:-1;14807:81:0;;12074:1;18239:36:4;;18227:2;18212:18;14807:81:0;18194:87:4;29017::0;;;;;;;;;;-1:-1:-1;29017:87:0;;;;;:::i;:::-;-1:-1:-1;;;;;29088:9:0;29065:4;29088:9;;;:5;:9;;;;;;;;;29017:87;14993:86;;;;;;;;;;-1:-1:-1;15064:8:0;;14993:86;;28245:146;;;;;;;;;;-1:-1:-1;28245:146:0;;;;;:::i;:::-;;:::i;12148:38::-;;;;;;;;;;;;;;;;29114:157;;;;;;;;;;-1:-1:-1;29114:157:0;;;;;:::i;:::-;;:::i;27926:309::-;;;;;;;;;;-1:-1:-1;27926:309:0;;;;;:::i;:::-;;:::i;29481:122::-;;;;;;;;;;-1:-1:-1;29481:122:0;;;;;:::i;:::-;;:::i;15085:136::-;;;;;;;;;;-1:-1:-1;15085:136:0;;;;;:::i;:::-;;:::i;6335:145::-;;;;;;;;;;;;;:::i;6130:77::-;;;;;;;;;;-1:-1:-1;6168:7:0;6194:6;6130:77;;-1:-1:-1;;;;;6194:6:0;;;8272:51:4;;8260:2;8245:18;6130:77:0;8227:102:4;9628:225:2;;;;;;;;;;-1:-1:-1;9628:225:2;;;;;:::i;:::-;;:::i;14716:85:0:-;;;;;;;;;;-1:-1:-1;14787:7:0;;;;;;;;;;;;-1:-1:-1;;;14787:7:0;;;;14716:85;;16611:173;;;;;;;;;;;;;:::i;15227:164::-;;;;;;;;;;-1:-1:-1;15227:164:0;;;;;:::i;:::-;;:::i;29381:94::-;;;;;;;;;;-1:-1:-1;29452:16:0;;;;29381:94;;28556:354;;;;;;;;;;-1:-1:-1;28556:354:0;;;;;:::i;:::-;;:::i;27005:915::-;;;;;;;;;;;;;:::i;13178:27::-;;;;;;;;;;;;;;;;28401:145;;;;;;;;;;-1:-1:-1;28401:145:0;;;;;:::i;:::-;;:::i;29613:99::-;;;;;;;;;;;;;:::i;15397:141::-;;;;;;;;;;-1:-1:-1;15397:141:0;;;;;:::i;:::-;-1:-1:-1;;;;;15504:18:0;;;15478:7;15504:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;15397:141;13262:28;;;;;;;;;;;;;;;;13228;;;;;;;;;;;;;;;;15544:158;15619:4;15635:39;3691:10;15658:7;15667:6;15635:8;:39::i;:::-;-1:-1:-1;15691:4:0;15544:158;;;;;:::o;15708:309::-;15806:4;15822:36;15832:6;15840:9;15851:6;15822:9;:36::i;:::-;15868:121;15877:6;3691:10;15899:89;15937:6;15899:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15899:19:0;;;;;;:11;:19;;;;;;;;3691:10;15899:33;;;;;;;;;;:37;:89::i;:::-;15868:8;:121::i;:::-;-1:-1:-1;16006:4:0;15708:309;;;;;:::o;28920:87::-;6252:6;;-1:-1:-1;;;;;6252:6:0;3691:10;6252:22;6244:67;;;;-1:-1:-1;;;6244:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;28979:13:0::1;28995:5;28979:13:::0;;;:5:::1;:13;::::0;;;;:21;;-1:-1:-1;;28979:21:0::1;::::0;;28920:87::o;29277:98::-;29321:4;29344:24;29362:4;29344:9;:24::i;:::-;29337:31;;29277:98;:::o;28245:146::-;28333:11;;-1:-1:-1;;;;;28333:11:0;3691:10;-1:-1:-1;;;;;28317:27:0;;28309:36;;;;;;-1:-1:-1;;;;;28355:22:0;;;;;:18;:22;;;;;:29;;-1:-1:-1;;28355:29:0;28380:4;28355:29;;;28245:146::o;29114:157::-;6252:6;;-1:-1:-1;;;;;6252:6:0;3691:10;6252:22;6244:67;;;;-1:-1:-1;;;6244:67:0;;;;;;;:::i;:::-;29185:16:::1;:24:::0;;-1:-1:-1;;29185:24:0::1;::::0;::::1;;::::0;;::::1;::::0;;;29224:40:::1;::::0;29185:24:::1;29247:16:::0;;;10089:14:4;10082:22;10064:41;;29224:40:0::1;::::0;10052:2:4;10037:18;29224:40:0::1;;;;;;;29114:157:::0;:::o;27926:309::-;28038:11;;-1:-1:-1;;;;;28038:11:0;3691:10;-1:-1:-1;;;;;28022:27:0;;28014:36;;;;;;28079:23;;;-1:-1:-1;;;;;28079:23:0;;;28106:5;28060:43;;;:18;:43;;;;;;:51;;-1:-1:-1;;28060:51:0;;;;;;28121:48;;-1:-1:-1;;;;;;28121:48:0;;;;;;;;;;;28179:42;;;;;:49;;;;;-1:-1:-1;28179:49:0;;;27926:309::o;29481:122::-;-1:-1:-1;;;;;29577:13:0;;29536:4;29577:13;;;:6;:13;;;;;:19;29559:37;;:15;:37;:::i;15085:136::-;-1:-1:-1;;;;;15197:16:0;;15151:7;15197:16;;;:7;:16;;;;;;15177:37;;:19;:37::i;6335:145::-;6252:6;;-1:-1:-1;;;;;6252:6:0;3691:10;6252:22;6244:67;;;;-1:-1:-1;;;6244:67:0;;;;;;;:::i;:::-;6441:1:::1;6425:6:::0;;6404:40:::1;::::0;-1:-1:-1;;;;;6425:6:0;;::::1;::::0;6404:40:::1;::::0;6441:1;;6404:40:::1;6471:1;6454:19:::0;;-1:-1:-1;;;;;;6454:19:0::1;::::0;;6335:145::o;9628:225:2:-;9738:10;-1:-1:-1;;;;;9752:14:2;9738:28;;9730:72;;;;-1:-1:-1;;;9730:72:2;;15064:2:4;9730:72:2;;;15046:21:4;15103:2;15083:18;;;15076:30;15142:33;15122:18;;;15115:61;15193:18;;9730:72:2;15036:181:4;9730:72:2;9808:40;9826:9;9837:10;9808:17;:40::i;:::-;9628:225;;:::o;16611:173:0:-;16653:13;16700:15;;16682;:33;16678:79;;;-1:-1:-1;16731:15:0;;;;;;;;;;;;-1:-1:-1;;;16731:15:0;;;;;16611:173::o;16678:79::-;16773:4;16766:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16611:173;:::o;15227:164::-;15305:4;15321:42;3691:10;15345:9;15356:6;15321:9;:42::i;28556:354::-;6252:6;;-1:-1:-1;;;;;6252:6:0;3691:10;6252:22;6244:67;;;;-1:-1:-1;;;6244:67:0;;;;;;;:::i;:::-;28646:11:::1;::::0;:26:::1;::::0;28661:10:::1;28646:26;:::i;:::-;28628:15;:44;28624:280;;;28693:6;28688:206;28709:5;:12;28705:1;:16;28688:206;;;28762:13;::::0;28750:8;;-1:-1:-1;;;;;28762:13:0;;::::1;::::0;28750:5;;28756:1;;28750:8;::::1;;;-1:-1:-1::0;;;28750:8:0::1;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;28750:25:0::1;;;:65;;;;-1:-1:-1::0;28799:15:0::1;::::0;28779:8;;-1:-1:-1;;;;;28799:15:0;;::::1;::::0;28779:5;;28785:1;;28779:8;::::1;;;-1:-1:-1::0;;;28779:8:0::1;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;28779:36:0::1;;;28750:65;28746:134;;;28857:4;28839:5;:15;28845:5;28851:1;28845:8;;;;;;-1:-1:-1::0;;;28845:8:0::1;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;28839:15:0::1;-1:-1:-1::0;;;;;28839:15:0::1;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;28746:134;28723:3:::0;::::1;::::0;::::1;:::i;:::-;;;;28688:206;;28624:280;28556:354:::0;:::o;27005:915::-;6252:6;;-1:-1:-1;;;;;6252:6:0;3691:10;6252:22;6244:67;;;;-1:-1:-1;;;6244:67:0;;;;;;;:::i;:::-;27068:11:::1;::::0;-1:-1:-1;;;27068:11:0;::::1;;;27067:12;27059:47;;;::::0;-1:-1:-1;;;27059:47:0;;16235:2:4;27059:47:0::1;::::0;::::1;16217:21:4::0;16274:2;16254:18;;;16247:30;16313:25;16293:18;;;16286:53;16356:18;;27059:47:0::1;16207:173:4::0;27059:47:0::1;27226:15;:34:::0;;-1:-1:-1;;;;;;27226:34:0::1;27173:42;27226:34:::0;;::::1;::::0;;;27270:58:::1;27287:4;27173:42:::0;11815:12:::1;27270:8;:58::i;:::-;27372:16;-1:-1:-1::0;;;;;27372:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27354:56:0::1;;27419:4;27426:16;-1:-1:-1::0;;;;;27426:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27354:96;::::0;-1:-1:-1;;;;;;27354:96:0::1;::::0;;;;;;-1:-1:-1;;;;;8564:15:4;;;27354:96:0::1;::::0;::::1;8546:34:4::0;8616:15;;8596:18;;;8589:43;8481:18;;27354:96:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27338:13;:112:::0;;-1:-1:-1;;;;;;27338:112:0::1;-1:-1:-1::0;;;;;27338:112:0;;::::1;;::::0;;27460:15:::1;::::0;::::1;:31;27499:21;27530:4;27536:24;27530:4:::0;27536:9:::1;:24::i;:::-;27561:1;27563::::0;27565:7:::1;6168::::0;6194:6;-1:-1:-1;;;;;6194:6:0;;6130:77;27565:7:::1;27460:129;::::0;::::1;::::0;;;-1:-1:-1;;;;;;27460:129:0;;;-1:-1:-1;;;;;9671:15:4;;;27460:129:0::1;::::0;::::1;9653:34:4::0;9703:18;;;9696:34;;;;9746:18;;;9739:34;;;;9789:18;;;9782:34;9853:15;;;9832:19;;;9825:44;27573:15:0::1;9885:19:4::0;;;9878:35;9587:19;;27460:129:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;27615:18:0::1;27599:13;:34:::0;-1:-1:-1;27650:13:0::1;::::0;27681:15:::1;::::0;27643:71:::1;::::0;-1:-1:-1;;;27643:71:0;;-1:-1:-1;;;;;27681:15:0;;::::1;27643:71;::::0;::::1;8817:51:4::0;-1:-1:-1;;8884:18:4;;;8877:34;27650:13:0;::::1;::::0;27643:29:::1;::::0;8790:18:4;;27643:71:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;27724:11:0::1;:18:::0;;-1:-1:-1;;;;27724:18:0::1;-1:-1:-1::0;;;27724:18:0::1;::::0;;27766:30:::1;:15;27785:10;27766:30;:::i;:::-;27752:11;:44:::0;-1:-1:-1;27820:15:0::1;27806:11;:29:::0;;;27860:12:::1;27845;:27:::0;27882:13:::1;:31:::0;27005:915::o;28401:145::-;28487:11;;-1:-1:-1;;;;;28487:11:0;3691:10;-1:-1:-1;;;;;28471:27:0;;28463:36;;;;;;-1:-1:-1;;;;;28509:22:0;28534:5;28509:22;;;:18;:22;;;;;:30;;-1:-1:-1;;28509:30:0;;;28401:145::o;29613:99::-;29691:13;;29658:4;;29681:24;;-1:-1:-1;;;;;29691:13:0;29681:9;:24::i;16795:330::-;-1:-1:-1;;;;;16887:19:0;;16879:68;;;;-1:-1:-1;;;16879:68:0;;15830:2:4;16879:68:0;;;15812:21:4;15869:2;15849:18;;;15842:30;15908:34;15888:18;;;15881:62;-1:-1:-1;;;15959:18:4;;;15952:34;16003:19;;16879:68:0;15802:226:4;16879:68:0;-1:-1:-1;;;;;16965:21:0;;16957:68;;;;-1:-1:-1;;;16957:68:0;;12729:2:4;16957:68:0;;;12711:21:4;12768:2;12748:18;;;12741:30;12807:34;12787:18;;;12780:62;-1:-1:-1;;;12858:18:4;;;12851:32;12900:19;;16957:68:0;12701:224:4;16957:68:0;-1:-1:-1;;;;;17035:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;17086:32;;10262:25:4;;;17086:32:0;;10235:18:4;17086:32:0;;;;;;;16795:330;;;:::o;17135:4759::-;-1:-1:-1;;;;;17222:18:0;;17214:68;;;;-1:-1:-1;;;17214:68:0;;15424:2:4;17214:68:0;;;15406:21:4;15463:2;15443:18;;;15436:30;15502:34;15482:18;;;15475:62;-1:-1:-1;;;15553:18:4;;;15546:35;15598:19;;17214:68:0;15396:227:4;17214:68:0;-1:-1:-1;;;;;17300:16:0;;17292:64;;;;-1:-1:-1;;;17292:64:0;;11914:2:4;17292:64:0;;;11896:21:4;11953:2;11933:18;;;11926:30;11992:34;11972:18;;;11965:62;-1:-1:-1;;;12043:18:4;;;12036:33;12086:19;;17292:64:0;11886:225:4;17292:64:0;17383:1;17374:6;:10;17366:64;;;;-1:-1:-1;;;17366:64:0;;14654:2:4;17366:64:0;;;14636:21:4;14693:2;14673:18;;;14666:30;14732:34;14712:18;;;14705:62;-1:-1:-1;;;14783:18:4;;;14776:39;14832:19;;17366:64:0;14626:231:4;17366:64:0;6168:7;6194:6;-1:-1:-1;;;;;17444:15:0;;;6194:6;;17444:15;;;;:32;;-1:-1:-1;6168:7:0;6194:6;-1:-1:-1;;;;;17463:13:0;;;6194:6;;17463:13;;17444:32;17441:4239;;;-1:-1:-1;;;;;17514:11:0;;;;;;:5;:11;;;;;;;;17513:12;:26;;;;-1:-1:-1;;;;;;17530:9:0;;;;;;:5;:9;;;;;;;;17529:10;17513:26;17505:35;;;;;;17578:10;17571:18;;;;:6;:18;;;;;:25;;;;;17567:97;;17637:12;;;;;;;;-1:-1:-1;17637:12:0;;;17644:4;17637:12;;;;;;;17623:10;17616:18;;:6;:18;;;;;;;:33;;;;;;;;;;-1:-1:-1;;17616:33:0;;;;;;;;;;17567:97;17742:13;;17696:2;;-1:-1:-1;;;;;17734:21:0;;;17742:13;;17734:21;:55;;;;-1:-1:-1;17773:15:0;;-1:-1:-1;;;;;17759:30:0;;;17773:15;;17759:30;;17734:55;:82;;;;-1:-1:-1;;;;;;17794:22:0;;;;;;:18;:22;;;;;;;;17793:23;17734:82;17731:2303;;;17844:11;;-1:-1:-1;;;17844:11:0;;;;17836:48;;;;-1:-1:-1;;;17836:48:0;;16587:2:4;17836:48:0;;;16569:21:4;16626:2;16606:18;;;16599:30;16665:26;16645:18;;;16638:54;16709:18;;17836:48:0;16559:174:4;17836:48:0;17921:12;;:16;;17936:1;17921:16;:::i;:::-;17906:12;:31;17903:1607;;;-1:-1:-1;17996:8:0;:10;;17972:2;;17996:8;:10;;;:::i;:::-;;;;;;17903:1607;;;18052:11;;:25;;18067:9;18052:25;:::i;:::-;18034:15;:43;18031:1479;;;18123:15;;18105;:33;18101:1222;;;18166:15;;;;;;;;;;;;;-1:-1:-1;;;18166:15:0;;;;;;;;;:4;;:15;:::i;:::-;;18218:2;18207:13;;18031:1479;;18101:1222;18300:31;;-1:-1:-1;;;18300:31:0;;;7794:26:4;7836:12;;18300:31:0;;;;;;;;;;;;18290:42;;;;;;18280:4;18263:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;18253:33;;;;;;:79;18249:1074;;;-1:-1:-1;18371:5:0;18031:1479;;18249:1074;18456:31;;-1:-1:-1;;;18456:31:0;;;8061:26:4;8103:12;;18456:31:0;;;;;;;;;;;;18446:42;;;;;;18436:4;18419:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;18409:33;;;;;;:79;18405:918;;;18516:30;18549:29;18560:17;;18549:6;:10;;:29;;;;:::i;:::-;18663:13;;18516:62;;-1:-1:-1;18604:19:0;;18626:64;;18653:36;;18682:6;;18653:24;;-1:-1:-1;;;;;18663:13:0;18653:9;:24::i;:::-;:28;;:36::i;:::-;18626:22;;:26;:64::i;:::-;18604:86;;18735:2;18720:11;:17;18716:461;;18780:1;18769:12;;18716:461;;;18833:2;18818:11;:17;18814:363;;18878:1;18867:12;;18814:363;;;18930:2;18916:11;:16;18912:265;;18975:1;18964:12;;18912:265;;;19028:2;19013:11;:17;19009:168;;19073:1;19062:12;;19009:168;;;19148:2;19137:13;;19009:168;19202:10;;;;:::i;:::-;;;;18405:918;;18031:1479;;18405:918;19278:18;;:22;;19299:1;19278:22;:::i;:::-;19267:33;;18031:1479;;;19369:11;;:25;;19384:9;19369:25;:::i;:::-;19351:15;:43;19347:163;;;-1:-1:-1;19429:2:0;19347:163;;;-1:-1:-1;19489:2:0;19347:163;19555:18;19556:8;19570:2;19555:14;:18::i;:::-;19545:7;:28;19602:25;19624:2;19603:15;:8;19616:1;19603:12;:15::i;:::-;19602:21;;:25::i;:::-;19591:8;:36;19665:16;;;;19662:358;;;19722:15;19708:11;;:29;19705:297;;;19783:13;;19773:6;:23;;19765:32;;;;;;-1:-1:-1;;;;;19831:10:0;;;;;;:6;:10;;;;;:16;19850:15;-1:-1:-1;19823:81:0;;;;-1:-1:-1;;;19823:81:0;;13132:2:4;19823:81:0;;;13114:21:4;13171:2;13151:18;;;13144:30;13210:34;13190:18;;;13183:62;-1:-1:-1;;;13261:18:4;;;13254:32;13303:19;;19823:81:0;13104:224:4;19823:81:0;19949:30;:15;19968:10;19949:30;:::i;:::-;-1:-1:-1;;;;;19930:10:0;;;;;;:6;:10;;;;;:49;19705:297;20047:28;20078:24;20096:4;20078:9;:24::i;:::-;20141:6;;20047:55;;-1:-1:-1;20141:6:0;;;;;20140:7;:32;;;;-1:-1:-1;20159:13:0;;-1:-1:-1;;;;;20151:21:0;;;20159:13;;20151:21;;20140:32;:47;;;;-1:-1:-1;20176:11:0;;-1:-1:-1;;;20176:11:0;;;;20140:47;20137:1533;;;20254:30;20287:29;20298:17;;20287:6;:10;;:29;;;;:::i;:::-;20393:13;;20254:62;;-1:-1:-1;20334:19:0;;20356:64;;20383:36;;20412:6;;20383:24;;-1:-1:-1;;;;;20393:13:0;20383:9;:24::i;20356:64::-;20448:1;20438:7;:11;20334:86;-1:-1:-1;20503:2:0;20488:17;;20484:329;;20540:2;20529:13;;20484:329;;;20586:2;20571:11;:17;20567:246;;20623:2;20612:13;;20567:246;;;20654:18;:11;20670:1;20654:15;:18::i;:::-;:23;20650:163;;20712:13;;;:::i;:::-;;;;20701:24;;20650:163;;;20783:11;20772:22;;20650:163;20871:7;;20858:21;;:8;;:12;:21::i;:::-;20847:8;:32;20971:24;;20968:309;;21055:13;;21045:40;;21081:3;;21045:31;;21074:1;;21045:24;;-1:-1:-1;;;;;21055:13:0;21045:9;:24::i;:::-;:28;;:31::i;:40::-;21022:20;:63;21019:180;;;21146:13;;21136:40;;21172:3;;21136:31;;21165:1;;21136:24;;-1:-1:-1;;;;;21146:13:0;21136:9;:24::i;:40::-;21113:63;;21019:180;21220:38;21237:20;21220:16;:38::i;:::-;21341:21;;21331:7;;:31;;;;:::i;:::-;21299:29;;-1:-1:-1;;;21299:29:0;;21322:4;21299:29;;;8272:51:4;21299:4:0;-1:-1:-1;;;;;21299:14:0;;;;8245:18:4;;21299:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:63;21295:126;;;21386:16;:14;:16::i;:::-;21438:28;:26;:28::i;:::-;21514:21;21556:22;;21553:103;;21602:35;21615:21;21602:12;:35::i;:::-;20137:1533;;;;17441:4239;;;-1:-1:-1;;;;;21722:24:0;;21689:12;21722:24;;;:18;:24;;;;;;21704:4;;21722:24;;;:50;;-1:-1:-1;;;;;;21750:22:0;;;;;;:18;:22;;;;;;;;21722:50;:68;;;-1:-1:-1;21776:14:0;;;;;;;21722:68;21719:112;;;-1:-1:-1;21815:5:0;21719:112;21849:38;21864:4;21869:2;21872:6;21879:7;21849:14;:38::i;:::-;17135:4759;;;;:::o;4722:186::-;4808:7;4843:12;4835:6;;;;4827:29;;;;-1:-1:-1;;;4827:29:0;;;;;;;;:::i;:::-;-1:-1:-1;4866:9:0;4878:5;4882:1;4878;:5;:::i;:::-;4866:17;4722:186;-1:-1:-1;;;;;4722:186:0:o;16023:250::-;16090:7;16128;;16117;:18;;16109:73;;;;-1:-1:-1;;;16109:73:0;;12318:2:4;16109:73:0;;;12300:21:4;12357:2;12337:18;;;12330:30;12396:34;12376:18;;;12369:62;-1:-1:-1;;;12447:18:4;;;12440:40;12497:19;;16109:73:0;12290:232:4;16109:73:0;16192:19;16215:10;:8;:10::i;:::-;16192:33;-1:-1:-1;16242:24:0;:7;16192:33;16242:11;:24::i;:::-;16235:31;16023:250;-1:-1:-1;;;16023:250:0:o;23112:588::-;23239:33;;;;;;;10472:25:4;;;10513:18;;;10506:34;;;23239:33:0;;;;;;;;;10445:18:4;;;;23239:33:0;;;23229:44;;;;;23221:59;;23277:3;;23221:59;:::i;:::-;:63;;23283:1;23221:63;:::i;:::-;23206:12;:78;;;23314:2;-1:-1:-1;23295:316:0;;;23332:20;;;;;;;;;;;;;-1:-1:-1;;;23332:20:0;;;;;;;;;:4;;:20;:::i;:::-;;23295:316;;;23388:2;23373:12;;:17;23369:242;;;23406:19;;;;;;;;;;;;;-1:-1:-1;;;23406:19:0;;;;;;;;;:4;;:19;:::i;:::-;-1:-1:-1;23460:12:0;;:20;;23477:2;23460:16;:20::i;:::-;23439:18;:41;23369:242;;;23516:2;23501:12;;:17;23497:114;;;23534:20;;;;;;;;;;;;;-1:-1:-1;;;23534:20:0;;;;;;;;;:4;;:20;:::i;23497:114::-;23585:15;;;;;;;;;;;;;-1:-1:-1;;;23585:15:0;;;;;;;;;:4;;:15;:::i;:::-;;23497:114;23638:28;:15;23656:10;23638:28;:::i;:::-;23620:15;:46;-1:-1:-1;;23692:1:0;23676:13;:17;23112:588::o;4914:238::-;4972:7;4994:6;4991:44;;-1:-1:-1;5023:1:0;5016:8;;4991:44;5044:9;5056:5;5060:1;5056;:5;:::i;:::-;5044:17;-1:-1:-1;5088:1:0;5079:5;5083:1;5044:17;5079:5;:::i;:::-;:10;5071:56;;;;-1:-1:-1;;;5071:56:0;;13891:2:4;5071:56:0;;;13873:21:4;13930:2;13910:18;;;13903:30;13969:34;13949:18;;;13942:62;-1:-1:-1;;;14020:18:4;;;14013:31;14061:19;;5071:56:0;13863:223:4;4401:175:0;4459:7;;4490:5;4494:1;4490;:5;:::i;:::-;4478:17;;4518:1;4513;:6;;4505:46;;;;-1:-1:-1;;;4505:46:0;;13535:2:4;4505:46:0;;;13517:21:4;13574:2;13554:18;;;13547:30;13613:29;13593:18;;;13586:57;13660:18;;4505:46:0;13507:177:4;5158:130:0;5216:7;5242:39;5246:1;5249;5242:39;;;;;;;;;;;;;;;;;:3;:39::i;5485:128::-;5543:7;5569:37;5573:1;5576;5569:37;;;;;;;;;;;;;;;;;:3;:37::i;4582:134::-;4640:7;4666:43;4670:1;4673;4666:43;;;;;;;;;;;;;;;;;:3;:43::i;21900:471::-;13672:6;:13;;-1:-1:-1;;13672:13:0;;;;;22001:16:::1;::::0;;13672:6;22001:16;;;;;::::1;::::0;;-1:-1:-1;;22001:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;22001:16:0::1;21977:40;;22045:4;22027;22032:1;22027:7;;;;;;-1:-1:-1::0;;;22027:7:0::1;;;;;;;;;-1:-1:-1::0;;;;;22027:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;22070:15:::1;::::0;:22:::1;::::0;;-1:-1:-1;;;22070:22:0;;;;:15;;;::::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;22027:7;;22070:22;;;;;:15;:22;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22060:4;22065:1;22060:7;;;;;;-1:-1:-1::0;;;22060:7:0::1;;;;;;;;;-1:-1:-1::0;;;;;22060:32:0;;::::1;:7;::::0;;::::1;::::0;;;;;:32;22134:15:::1;::::0;22102:62:::1;::::0;22119:4:::1;::::0;22134:15:::1;22152:11:::0;22102:8:::1;:62::i;:::-;22174:15;::::0;:190:::1;::::0;-1:-1:-1;;;22174:190:0;;-1:-1:-1;;;;;22174:15:0;;::::1;::::0;:66:::1;::::0;:190:::1;::::0;22254:11;;22174:15:::1;::::0;22294:4;;22320::::1;::::0;22339:15:::1;::::0;22174:190:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;13706:6:0;:14;;-1:-1:-1;;13706:14:0;;;-1:-1:-1;;;;21900:471:0:o;22377:729::-;13672:6;:13;;-1:-1:-1;;13672:13:0;;;;;22457:16:::1;::::0;;13672:6;22457:16;;;;;::::1;::::0;;-1:-1:-1;;22457:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;22493:15:0::1;::::0;:22:::1;::::0;;-1:-1:-1;;;22493:22:0;;;;22433:40;;-1:-1:-1;;;;;;22493:15:0;;::::1;::::0;:20:::1;::::0;-1:-1:-1;22493:22:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:15;:22;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22483:4;22488:1;22483:7;;;;;;-1:-1:-1::0;;;22483:7:0::1;;;;;;;;;;;;;;:32;-1:-1:-1::0;;;;;22483:32:0::1;;;-1:-1:-1::0;;;;;22483:32:0::1;;;::::0;::::1;22543:42;22525:4;22530:1;22525:7;;;;;;-1:-1:-1::0;;;22525:7:0::1;;;;;;;;;-1:-1:-1::0;;;;;22525:61:0;;::::1;:7;::::0;;::::1;::::0;;;;;:61;22626:15:::1;::::0;22689:29:::1;::::0;-1:-1:-1;;;22689:29:0;;22712:4:::1;22689:29;::::0;::::1;8272:51:4::0;22606:17:0::1;::::0;22626:15;;::::1;::::0;:28:::1;::::0;22689:4:::1;:14:::0;;::::1;::::0;::::1;::::0;8245:18:4;;22689:29:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22679:7;;22655:21;;:31;;;;:::i;:::-;:63;;;;:::i;:::-;22720:4;22626:99;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;22626:99:0::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;22726:1;22626:102;;;;;;-1:-1:-1::0;;;22626:102:0::1;;;;;;;;;;;;;;;22606:122;;22767:9;22743:21;:33;22739:361;;;22792:15;::::0;-1:-1:-1;;;;;22792:15:0::1;:66;22866:9:::0;22792:15:::1;22944:4:::0;22974::::1;22998:24;:15;23018:3;22998:19;:24::i;:::-;22792:244;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;23056:33;23073:9;23084:4;23056:33;;;;;;;:::i;:::-;;;;;;;;22739:361;-1:-1:-1::0;;13706:6:0;:14;;-1:-1:-1;;13706:14:0;;;22377:729::o;23706:321::-;23768:13;;:18;;;;:68;;-1:-1:-1;23809:13:0;;:26;;23825:10;23809:26;:::i;:::-;23790:15;:46;23768:68;23764:81;;;23706:321::o;23764:81::-;23891:7;;23859:29;;-1:-1:-1;;;23859:29:0;;23882:4;23859:29;;;8272:51:4;23859:4:0;-1:-1:-1;;;;;23859:14:0;;;;8245:18:4;;23859:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:39;23855:166;;;23930:35;23948:7;;23957;;23930:17;:35::i;:::-;23914:13;:51;23995:15;23979:13;:31;23855:166;23706:321::o;24033:155::-;24089:11;;-1:-1:-1;;;;;24089:11:0;:35;24110:13;:6;24121:1;24110:10;:13::i;:::-;24089:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24134:23:0;;-1:-1:-1;;;;;24134:23:0;:47;24167:13;:6;24178:1;24167:10;:13::i;:::-;24134:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24198:257;24309:7;24305:39;;24330:14;:12;:14::i;:::-;24354:44;24372:6;24380:9;24391:6;24354:17;:44::i;:::-;24412:7;24408:40;;24433:15;16546;;16536:7;:25;16582:16;;16571:8;:27;16493:112;25770:160;25811:7;25831:15;25848;25867:19;:17;:19::i;:::-;25830:56;;-1:-1:-1;25830:56:0;-1:-1:-1;25903:20:0;25830:56;;25903:11;:20::i;:::-;25896:27;;;;25770:160;:::o;5294:185::-;5380:7;5414:12;5407:5;5399:28;;;;-1:-1:-1;;;5399:28:0;;;;;;;;:::i;:::-;-1:-1:-1;5437:9:0;5449:5;5453:1;5449;:5;:::i;5619:163::-;5705:7;5740:12;5732:6;5724:29;;;;-1:-1:-1;;;5724:29:0;;;;;;;;:::i;:::-;-1:-1:-1;5770:5:0;5774:1;5770;:5;:::i;:::-;5763:12;5619:163;-1:-1:-1;;;;5619:163:0:o;7741:1055:2:-;7845:17;7877:4;-1:-1:-1;;;;;7877:20:2;;7898:14;7914:4;7931:8;6598:1;7920:43;;;;;;;;10472:25:4;;;10528:2;10513:18;;10506:34;10460:2;10445:18;;10427:119;7920:43:2;;;;;;;;;;;;;7877:87;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;8195:15:2;8279:16;;;:6;:16;;;;;;;;;1005:51:3;;;;;10782:25:4;;;10823:18;;;10816:34;;;8272:4:2;10866:18:4;;;10859:60;10935:18;;;;10928:34;;;1005:51:3;;;;;;;;;;10754:19:4;;;;1005:51:3;;;995:62;;;;;;;;;8726:16:2;;;;;;;:20;;8745:1;8726:20;:::i;:::-;8707:16;;;;:6;:16;;;;;:39;8759:32;8714:8;8783:7;1600:41:3;;;;;;;6389:19:4;;;;6424:12;;;6417:28;;;;1600:41:3;;;;;;;;;6461:12:4;;;;1600:41:3;;1590:52;;;;;;1443:204;16279::0;16324:7;;:12;:29;;;;-1:-1:-1;16340:8:0;;:13;16324:29;16321:41;;;16279:204::o;16321:41::-;16389:7;;;16371:15;:25;16425:8;;;16406:16;:27;-1:-1:-1;16443:11:0;;;;16464:12;16279:204::o;24461:482::-;24559:15;24576:23;24601:12;24615:23;24640:12;24654:13;24671:19;24682:7;24671:10;:19::i;:::-;-1:-1:-1;;;;;24718:15:0;;;;;;:7;:15;;;;;;24558:132;;-1:-1:-1;24558:132:0;;-1:-1:-1;24558:132:0;;-1:-1:-1;24558:132:0;-1:-1:-1;24558:132:0;-1:-1:-1;24558:132:0;-1:-1:-1;24718:28:0;;24558:132;24718:19;:28::i;:::-;-1:-1:-1;;;;;24700:15:0;;;;;;;:7;:15;;;;;;:46;;;;24777:18;;;;;;;:39;;24800:15;24777:22;:39::i;:::-;-1:-1:-1;;;;;24756:18:0;;;;;;:7;:18;;;;;:60;24828:16;24838:5;24828:9;:16::i;:::-;24854:23;24866:4;24872;24854:11;:23::i;:::-;24909:9;-1:-1:-1;;;;;24892:44:0;24901:6;-1:-1:-1;;;;;24892:44:0;;24920:15;24892:44;;;;10262:25:4;;10250:2;10235:18;;10217:76;24892:44:0;;;;;;;;24461:482;;;;;;;;;:::o;25936:250::-;26032:7;;25986;;;;11815:12;26097:20;26032:7;11815:12;26097:11;:20::i;:::-;26087:7;:30;26084:60;;;-1:-1:-1;;26127:7:0;;;11815:12;;-1:-1:-1;25936:250:0;-1:-1:-1;25936:250:0:o;26084:60::-;26162:7;;26171;;-1:-1:-1;25936:250:0;-1:-1:-1;25936:250:0:o;24949:463::-;25008:7;25017;25026;25035;25044;25053;25073:23;25098:12;25112:13;25129:39;25141:7;25150;;25159:8;;25129:11;:39::i;:::-;25072:96;;;;;;25178:19;25201:10;:8;:10::i;:::-;25178:33;;25222:15;25239:23;25264:12;25280:46;25292:7;25301:4;25307:5;25314:11;25280;:46::i;:::-;25221:105;;-1:-1:-1;25221:105:0;-1:-1:-1;25221:105:0;-1:-1:-1;25376:15:0;;-1:-1:-1;25393:4:0;;-1:-1:-1;25399:5:0;;-1:-1:-1;;;;;24949:463:0;;;;;;;:::o;26601:209::-;26653:19;26676:10;:8;:10::i;:::-;26653:33;-1:-1:-1;26696:13:0;26712:22;:5;26653:33;26712:9;:22::i;:::-;26786:4;26770:22;;;;:7;:22;;;;;;26696:38;;-1:-1:-1;26770:33:0;;26696:38;26770:26;:33::i;:::-;26761:4;26745:22;;;;:7;:22;;;;;:58;-1:-1:-1;;;26601:209:0:o;26816:144::-;26893:7;;:17;;26905:4;26893:11;:17::i;:::-;26883:7;:27;26933:10;;:20;;26948:4;26933:14;:20::i;:::-;26920:10;:33;-1:-1:-1;;26816:144:0:o;25418:346::-;25511:7;;;;25563:28;25587:3;25563:19;:7;25575:6;25563:11;:19::i;:28::-;25548:43;-1:-1:-1;25601:13:0;25617:29;25642:3;25617:20;:7;25629;25617:11;:20::i;:29::-;25601:45;-1:-1:-1;25656:23:0;25682:28;25601:45;25682:17;:7;25694:4;25682:11;:17::i;:::-;:21;;:28::i;:::-;25656:54;25745:4;;-1:-1:-1;25751:5:0;;-1:-1:-1;25418:346:0;;-1:-1:-1;;;;;25418:346:0:o;26192:403::-;26302:7;;;;26357:24;:7;26369:11;26357;:24::i;:::-;26339:42;-1:-1:-1;26391:12:0;26406:21;:4;26415:11;26406:8;:21::i;:::-;26391:36;-1:-1:-1;26437:13:0;26453:22;:5;26463:11;26453:9;:22::i;:::-;26437:38;-1:-1:-1;26485:23:0;26511:28;26437:38;26511:17;:7;26523:4;26511:11;:17::i;:28::-;26557:7;;;;-1:-1:-1;26583:4:0;;-1:-1:-1;26192:403:0;;-1:-1:-1;;;;;;;26192:403:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:257:4;73:6;126:2;114:9;105:7;101:23;97:32;94:2;;;147:6;139;132:22;94:2;191:9;178:23;210:31;235:5;210:31;:::i;276:261::-;346:6;399:2;387:9;378:7;374:23;370:32;367:2;;;420:6;412;405:22;367:2;457:9;451:16;476:31;501:5;476:31;:::i;812:398::-;880:6;888;941:2;929:9;920:7;916:23;912:32;909:2;;;962:6;954;947:22;909:2;1006:9;993:23;1025:31;1050:5;1025:31;:::i;:::-;1075:5;-1:-1:-1;1132:2:4;1117:18;;1104:32;1145:33;1104:32;1145:33;:::i;:::-;1197:7;1187:17;;;899:311;;;;;:::o;1215:466::-;1292:6;1300;1308;1361:2;1349:9;1340:7;1336:23;1332:32;1329:2;;;1382:6;1374;1367:22;1329:2;1426:9;1413:23;1445:31;1470:5;1445:31;:::i;:::-;1495:5;-1:-1:-1;1552:2:4;1537:18;;1524:32;1565:33;1524:32;1565:33;:::i;:::-;1319:362;;1617:7;;-1:-1:-1;;;1671:2:4;1656:18;;;;1643:32;;1319:362::o;1686:325::-;1754:6;1762;1815:2;1803:9;1794:7;1790:23;1786:32;1783:2;;;1836:6;1828;1821:22;1783:2;1880:9;1867:23;1899:31;1924:5;1899:31;:::i;:::-;1949:5;2001:2;1986:18;;;;1973:32;;-1:-1:-1;;;1773:238:4:o;2016:1022::-;2100:6;2131:2;2174;2162:9;2153:7;2149:23;2145:32;2142:2;;;2195:6;2187;2180:22;2142:2;2240:9;2227:23;2273:18;2265:6;2262:30;2259:2;;;2310:6;2302;2295:22;2259:2;2338:22;;2391:4;2383:13;;2379:27;-1:-1:-1;2369:2:4;;2425:6;2417;2410:22;2369:2;2466;2453:16;2489:60;2505:43;2545:2;2505:43;:::i;:::-;2489:60;:::i;:::-;2571:3;2595:2;2590:3;2583:15;2623:2;2618:3;2614:12;2607:19;;2654:2;2650;2646:11;2702:7;2697:2;2691;2688:1;2684:10;2680:2;2676:19;2672:28;2669:41;2666:2;;;2728:6;2720;2713:22;2666:2;2755:6;2746:15;;2770:238;2784:2;2781:1;2778:9;2770:238;;;2855:3;2842:17;2872:31;2897:5;2872:31;:::i;:::-;2916:18;;2802:1;2795:9;;;;;2954:12;;;;2986;;2770:238;;;-1:-1:-1;3027:5:4;2111:927;-1:-1:-1;;;;;;;2111:927:4:o;3043:937::-;3138:6;3169:2;3212;3200:9;3191:7;3187:23;3183:32;3180:2;;;3233:6;3225;3218:22;3180:2;3271:9;3265:16;3304:18;3296:6;3293:30;3290:2;;;3341:6;3333;3326:22;3290:2;3369:22;;3422:4;3414:13;;3410:27;-1:-1:-1;3400:2:4;;3456:6;3448;3441:22;3400:2;3490;3484:9;3513:60;3529:43;3569:2;3529:43;:::i;3513:60::-;3595:3;3619:2;3614:3;3607:15;3647:2;3642:3;3638:12;3631:19;;3678:2;3674;3670:11;3726:7;3721:2;3715;3712:1;3708:10;3704:2;3700:19;3696:28;3693:41;3690:2;;;3752:6;3744;3737:22;3690:2;3779:6;3770:15;;3794:156;3808:2;3805:1;3802:9;3794:156;;;3865:10;;3853:23;;3826:1;3819:9;;;;;3896:12;;;;3928;;3794:156;;3985:251;4041:6;4094:2;4082:9;4073:7;4069:23;4065:32;4062:2;;;4115:6;4107;4100:22;4062:2;4159:9;4146:23;4178:28;4200:5;4178:28;:::i;4241:255::-;4308:6;4361:2;4349:9;4340:7;4336:23;4332:32;4329:2;;;4382:6;4374;4367:22;4329:2;4419:9;4413:16;4438:28;4460:5;4438:28;:::i;4501:258::-;4569:6;4577;4630:2;4618:9;4609:7;4605:23;4601:32;4598:2;;;4651:6;4643;4636:22;4598:2;-1:-1:-1;;4679:23:4;;;4749:2;4734:18;;;4721:32;;-1:-1:-1;4588:171:4:o;4764:194::-;4834:6;4887:2;4875:9;4866:7;4862:23;4858:32;4855:2;;;4908:6;4900;4893:22;4855:2;-1:-1:-1;4936:16:4;;4845:113;-1:-1:-1;4845:113:4:o;4963:316::-;5051:6;5059;5067;5120:2;5108:9;5099:7;5095:23;5091:32;5088:2;;;5141:6;5133;5126:22;5088:2;5175:9;5169:16;5159:26;;5225:2;5214:9;5210:18;5204:25;5194:35;;5269:2;5258:9;5254:18;5248:25;5238:35;;5078:201;;;;;:::o;5284:463::-;5337:3;5375:5;5369:12;5402:6;5397:3;5390:19;5428:4;5457:2;5452:3;5448:12;5441:19;;5494:2;5487:5;5483:14;5515:3;5527:195;5541:6;5538:1;5535:13;5527:195;;;5606:13;;-1:-1:-1;;;;;5602:39:4;5590:52;;5662:12;;;;5697:15;;;;5638:1;5556:9;5527:195;;;-1:-1:-1;5738:3:4;;5345:402;-1:-1:-1;;;;;5345:402:4:o;5752:475::-;5793:3;5831:5;5825:12;5858:6;5853:3;5846:19;5883:3;5895:162;5909:6;5906:1;5903:13;5895:162;;;5971:4;6027:13;;;6023:22;;6017:29;5999:11;;;5995:20;;5988:59;5924:12;5895:162;;;6075:6;6072:1;6069:13;6066:2;;;6141:3;6134:4;6125:6;6120:3;6116:16;6112:27;6105:40;6066:2;-1:-1:-1;6209:2:4;6188:15;-1:-1:-1;;6184:29:4;6175:39;;;;6216:4;6171:50;;5801:426;-1:-1:-1;;5801:426:4:o;6484:1103::-;6612:3;6641;6676:6;6670:13;6706:3;6728:1;6756:9;6752:2;6748:18;6738:28;;6816:2;6805:9;6801:18;6838;6828:2;;6882:4;6874:6;6870:17;6860:27;;6828:2;6908;6956;6948:6;6945:14;6925:18;6922:38;6919:2;;;-1:-1:-1;;;6983:33:4;;7039:4;7036:1;7029:15;7069:4;6990:3;7057:17;6919:2;7100:18;7127:104;;;;7245:1;7240:322;;;;7093:469;;7127:104;-1:-1:-1;;7160:24:4;;7148:37;;7205:16;;;;-1:-1:-1;7127:104:4;;7240:322;18801:4;18820:17;;;18870:4;18854:21;;7335:3;7351:165;7365:6;7362:1;7359:13;7351:165;;;7443:14;;7430:11;;;7423:35;7486:16;;;;7380:10;;7351:165;;;7355:3;;7545:6;7540:3;7536:16;7529:23;;7093:469;-1:-1:-1;7578:3:4;;6620:967;-1:-1:-1;;;;;;;;6620:967:4:o;8922:385::-;9154:1;9150;9145:3;9141:11;9137:19;9129:6;9125:32;9114:9;9107:51;9194:6;9189:2;9178:9;9174:18;9167:34;9237:2;9232;9221:9;9217:18;9210:30;9088:4;9257:44;9297:2;9286:9;9282:18;9274:6;9257:44;:::i;10973:510::-;11244:6;11233:9;11226:25;11287:3;11282:2;11271:9;11267:18;11260:31;11207:4;11308:57;11360:3;11349:9;11345:19;11337:6;11308:57;:::i;:::-;-1:-1:-1;;;;;11401:32:4;;;;11396:2;11381:18;;11374:60;-1:-1:-1;11465:2:4;11450:18;11443:34;11300:65;11216:267;-1:-1:-1;;11216:267:4:o;11488:219::-;11637:2;11626:9;11619:21;11600:4;11657:44;11697:2;11686:9;11682:18;11674:6;11657:44;:::i;14091:356::-;14293:2;14275:21;;;14312:18;;;14305:30;14371:34;14366:2;14351:18;;14344:62;14438:2;14423:18;;14265:182::o;16920:332::-;17127:6;17116:9;17109:25;17170:2;17165;17154:9;17150:18;17143:30;17090:4;17190:56;17242:2;17231:9;17227:18;17219:6;17190:56;:::i;17510:582::-;17809:6;17798:9;17791:25;17852:6;17847:2;17836:9;17832:18;17825:34;17895:3;17890:2;17879:9;17875:18;17868:31;17772:4;17916:57;17968:3;17957:9;17953:19;17945:6;17916:57;:::i;:::-;-1:-1:-1;;;;;18009:32:4;;;;18004:2;17989:18;;17982:60;-1:-1:-1;18073:3:4;18058:19;18051:35;17908:65;17781:311;-1:-1:-1;;;17781:311:4:o;18286:275::-;18357:2;18351:9;18422:2;18403:13;;-1:-1:-1;;18399:27:4;18387:40;;18457:18;18442:34;;18478:22;;;18439:62;18436:2;;;18504:18;;:::i;:::-;18540:2;18533:22;18331:230;;-1:-1:-1;18331:230:4:o;18566:183::-;18626:4;18659:18;18651:6;18648:30;18645:2;;;18681:18;;:::i;:::-;-1:-1:-1;18726:1:4;18722:14;18738:4;18718:25;;18635:114::o;18886:128::-;18926:3;18957:1;18953:6;18950:1;18947:13;18944:2;;;18963:18;;:::i;:::-;-1:-1:-1;18999:9:4;;18934:80::o;19019:120::-;19059:1;19085;19075:2;;19090:18;;:::i;:::-;-1:-1:-1;19124:9:4;;19065:74::o;19144:168::-;19184:7;19250:1;19246;19242:6;19238:14;19235:1;19232:21;19227:1;19220:9;19213:17;19209:45;19206:2;;;19257:18;;:::i;:::-;-1:-1:-1;19297:9:4;;19196:116::o;19317:125::-;19357:4;19385:1;19382;19379:8;19376:2;;;19390:18;;:::i;:::-;-1:-1:-1;19427:9:4;;19366:76::o;19447:380::-;19526:1;19522:12;;;;19569;;;19590:2;;19644:4;19636:6;19632:17;19622:27;;19590:2;19697;19689:6;19686:14;19666:18;19663:38;19660:2;;;19743:10;19738:3;19734:20;19731:1;19724:31;19778:4;19775:1;19768:15;19806:4;19803:1;19796:15;19660:2;;19502:325;;;:::o;19832:135::-;19871:3;-1:-1:-1;;19892:17:4;;19889:2;;;19912:18;;:::i;:::-;-1:-1:-1;19959:1:4;19948:13;;19879:88::o;19972:112::-;20004:1;20030;20020:2;;20035:18;;:::i;:::-;-1:-1:-1;20069:9:4;;20010:74::o;20089:127::-;20150:10;20145:3;20141:20;20138:1;20131:31;20181:4;20178:1;20171:15;20205:4;20202:1;20195:15;20221:127;20282:10;20277:3;20273:20;20270:1;20263:31;20313:4;20310:1;20303:15;20337:4;20334:1;20327:15;20353:127;20414:10;20409:3;20405:20;20402:1;20395:31;20445:4;20442:1;20435:15;20469:4;20466:1;20459:15;20485:131;-1:-1:-1;;;;;20560:31:4;;20550:42;;20540:2;;20606:1;20603;20596:12;20621:118;20707:5;20700:13;20693:21;20686:5;20683:32;20673:2;;20729:1;20726;20719:12
Swarm Source
ipfs://b1cf1703334985c2981a19ae2b4b90dc530c0662231f9b5efab3de7b74abbe4d
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.