Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
962,362,133.560830939063915877 BATTLE
Holders
465
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.321142896294266849 BATTLEValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Battleground
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-08-21 */ /* BATTLEGROUND $BATTLE */ // SPDX-License-Identifier: MIT pragma solidity 0.8.17; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } 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; } } interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } interface IERC20Metadata is IERC20 { function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); } contract ERC20 is Context, IERC20, IERC20Metadata{ using SafeMath for uint256; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) public _allowances; uint256 internal _totalSupply; string private _name; string private _symbol; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override returns (string memory) { return _symbol; } function decimals() public view virtual override returns (uint8) { return 18; } function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "BEP20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "BEP20: decreased allowance below zero")); return true; } function _transfer(address sender, address recipient, uint256 amount) internal virtual { require(sender != address(0), "BEP20: transfer from the zero address"); require(recipient != address(0), "BEP20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount,"BEP20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "BEP20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub( amount, "ERC20: burn amount exceeds balance" ); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } function _approve(address owner, address spender, uint256 amount) internal virtual { require(owner != address(0), "BEP20: approve from the zero address"); require(spender != address(0), "BEP20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {} } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint256 value); event Transfer(address indexed from, address indexed to, uint256 value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom(address from, address to, uint256 value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint256); function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external; event Swap(address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to); event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap(uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } 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, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline) external returns (uint256 amountA, uint256 amountB, uint256 liquidity); function addLiquidityETH(address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity); function removeLiquidity(address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH(address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit(address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit(address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens(uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline) external returns (uint256[] memory amounts); function swapTokensForExactTokens(uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline) external returns (uint256[] memory amounts); function swapExactETHForTokens(uint256 amountOutMin, address[] calldata path, address to, uint256 deadline) external payable returns (uint256[] memory amounts); function swapTokensForExactETH(uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline) external returns (uint256[] memory amounts); function swapExactTokensForETH(uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline) external returns (uint256[] memory amounts); function swapETHForExactTokens(uint256 amountOut, address[] calldata path, address to, uint256 deadline) external payable returns (uint256[] memory amounts); function quote(uint256 amountA, uint256 reserveA, uint256 reserveB) external pure returns (uint256 amountB); function getAmountOut(uint256 amountIn, uint256 reserveIn, uint256 reserveOut) external pure returns (uint256 amountOut); function getAmountIn(uint256 amountOut, uint256 reserveIn, uint256 reserveOut) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens(address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s) external returns (uint256 amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens(uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline) external; function swapExactETHForTokensSupportingFeeOnTransferTokens(uint256 amountOutMin, address[] calldata path, address to, uint256 deadline) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens(uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline) external; } interface ITrueDefiSwap { function triggeredTokenSent(uint256, address) external; } contract Battleground is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; address public DEAD = 0x000000000000000000000000000000000000dEaD; bool private swapping; bool public tradingEnabled = false; uint256 internal sellAmount = 1; uint256 internal buyAmount = 1; uint256 private totalSellFees; uint256 private totalBuyFees; address payable public marketingWallet; address payable public DevWallet; address public _gameContract; address public router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; bool public enabledPublicTrading; address tefiRouter; mapping(address => bool) public whitelistForPublicTrade; uint256 public maxWallet; uint256 public maxTX; uint256 public swapTokensAtAmount; uint256 public sellMarketingFees; uint256 public sellLiquidityFee; uint256 public sellBurnFee; uint256 public buyMarketingFees; uint256 public buyBurnFee; uint256 public buyLiquidityFee; uint256 public buyDevFee; uint256 public sellDevFee; uint256 public transferFee; bool public swapAndLiquifyEnabled = false; mapping(address => bool) private _isExcludedFromFees; mapping(address => bool) public automatedMarketMakerPairs; mapping(address => bool) private canTransferBeforeTradingIsEnabled; bool public limitsInEffect = true; uint256 private gasPriceLimit; // MAX GWEI mapping(address => uint256) private _holderLastTransferBlock; // FOR 1TX PER BLOCK mapping(address => uint256) private _holderLastTransferTimestamp; // FOR COOLDOWN uint256 public launchblock; // FOR DEADBLOCKS uint256 public delay; uint256 private deadblocks; uint256 public launchtimestamp; uint256 public cooldowntimer = 30; // DEFAULT COOLDOWN TIMER event EnableSwapAndLiquify(bool enabled); event SetPreSaleWallet(address wallet); event updateMarketingWallet(address wallet); event updateDevWallet(address wallet); event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress); event UpdategameContract(address indexed newAddress , address indexed oldAddress); event TradingEnabled(); event UpdateFees(uint256 sellMarketingFees, uint256 sellBurnFee, uint256 buyMarketingFees, uint256 buyBurnFee, uint256 buyDevFee, uint256 sellDevFee, uint256 sellLiquidityFee , uint256 buyLiquidityFee); event Airdrop(address holder, uint256 amount); event UpdateTransferFee(uint256 transferFee); event ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity); event SendDividends(uint256 opAmount, bool success); constructor() ERC20("Battleground", "BATTLE") { marketingWallet = payable(0x5EC3B7fD49B76dD1450c003a1762984495DFb139); DevWallet = payable(0x169581C525aF468F4f0cD10A8CFa88621D3330B2); _gameContract = 0x074228888Aae2A5bf1A823826E75b5F695882919; buyMarketingFees = 2; sellMarketingFees = 2; buyLiquidityFee = 2; sellLiquidityFee = 2; buyBurnFee = 0; sellBurnFee = 0; buyDevFee = 1; sellDevFee = 1; transferFee = 0; totalBuyFees = buyMarketingFees .add(buyDevFee) .add(buyLiquidityFee) ; totalSellFees = sellMarketingFees .add(sellDevFee) .add(sellLiquidityFee) ; _isExcludedFromFees[address(this)] = true; _isExcludedFromFees[msg.sender] = true; _isExcludedFromFees[marketingWallet] = true; uint256 totalSupply = (1_000_000_000) * (10**18); // TOTAL SUPPLY IS SET HERE _mint(owner(), totalSupply); // only time internal mint function is ever called is to create supply swapTokensAtAmount = _totalSupply / 1000; canTransferBeforeTradingIsEnabled[owner()] = true; canTransferBeforeTradingIsEnabled[address(this)] = true; whitelistForPublicTrade[msg.sender] = true; } function decimals() public view virtual override returns (uint8) { return 18; } receive() external payable {} function EnableAntiBotTrading(address _router, uint256 initialMaxGwei, uint256 initialMaxWallet, uint256 initialMaxTX, uint256 setDelay) external onlyOwner { tefiRouter = _router; if (_router != address(0)) { whitelistForPublicTrade[_router] = true; _isExcludedFromFees[_router] = true; } initialMaxWallet = initialMaxWallet * (10**18); initialMaxTX = initialMaxTX * (10**18); require(!tradingEnabled); require(initialMaxWallet >= _totalSupply / 1000,"cannot set below 0.1%"); require(initialMaxTX >= _totalSupply / 1000,"cannot set below 0.1%"); maxWallet = initialMaxWallet; maxTX = initialMaxTX; gasPriceLimit = initialMaxGwei * 1 gwei; tradingEnabled = true; launchblock = block.number; launchtimestamp = block.timestamp; delay = setDelay; emit TradingEnabled(); } function updateTrueDefiRouter(address _router) external onlyOwner { tefiRouter = _router; if (_router != address(0)) { whitelistForPublicTrade[_router] = true; _isExcludedFromFees[_router] = true; } } function isTrading(address _sender, address _recipient) internal view returns (uint) { if (automatedMarketMakerPairs[_sender] && _recipient != address(uniswapV2Router)) return 1; // Buy Case if (automatedMarketMakerPairs[_recipient]) return 2; // Sell Case return 0; } function setWhitelistForPublicTrade(address _addr, bool _flag) external onlyOwner { whitelistForPublicTrade[_addr] = _flag; } function setPublicTrading() external onlyOwner { require(!enabledPublicTrading); enabledPublicTrading = true; } function setMarketingWallet(address wallet) external onlyOwner { _isExcludedFromFees[wallet] = true; marketingWallet = payable(wallet); emit updateMarketingWallet(wallet); } function setDevWallet(address wallet) external onlyOwner { _isExcludedFromFees[wallet] = true; DevWallet = payable(wallet); emit updateDevWallet(wallet); } function NewgameContract(address _newAddress ) external onlyOwner { require(_newAddress != address(0), "Invalid address"); address oldAddress = _gameContract; _gameContract = _newAddress; emit UpdategameContract(_newAddress, oldAddress); } function setExcludeFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function setCanTransferBefore(address wallet, bool enable) external onlyOwner { canTransferBeforeTradingIsEnabled[wallet] = enable; } function setLimitsInEffect(bool value) external onlyOwner { limitsInEffect = value; } function setmaxWallet(uint256 value) external onlyOwner { value = value * (10**18); require(value >= _totalSupply / 1000, "max wallet cannot be set to less than 0.1%"); maxWallet = value; } function setmaxTX(uint256 value) external onlyOwner { value = value * (10**18); require(value >= _totalSupply / 1000, "max tx cannot be set to less than 0.1%"); maxTX = value; } function setGasPriceLimit(uint256 GWEI) external onlyOwner { require(GWEI >= 50, "can never be set below 50"); gasPriceLimit = GWEI * 1 gwei; } function setcooldowntimer(uint256 value) external onlyOwner { require(value <= 300, "cooldown timer cannot exceed 5 minutes"); cooldowntimer = value; } function Sweep() external onlyOwner { uint256 amountETH = address(this).balance; payable(msg.sender).transfer(amountETH); } function setSwapTriggerAmount(uint256 amount) public onlyOwner { swapTokensAtAmount = amount * (10**18); } function enableSwapAndLiquify(bool enabled) public onlyOwner { require(swapAndLiquifyEnabled != enabled); swapAndLiquifyEnabled = enabled; emit EnableSwapAndLiquify(enabled); } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function transferAdmin(address newOwner) public onlyOwner { _isExcludedFromFees[newOwner] = true; canTransferBeforeTradingIsEnabled[newOwner] = true; transferOwnership(newOwner); } function updateTransferFee(uint256 newTransferFee) public onlyOwner { require (newTransferFee <= 5, "transfer fee cannot exceed 5%"); transferFee = newTransferFee; emit UpdateTransferFee(transferFee); } function updateFees(uint256 marketingBuy, uint256 marketingSell, uint256 burnBuy, uint256 burnSell, uint256 DevBuy, uint256 DevSell , uint256 liquidityBuy ,uint256 liquiditySell ) public onlyOwner { buyMarketingFees = marketingBuy; buyBurnFee = burnBuy; sellMarketingFees = marketingSell; buyLiquidityFee = liquidityBuy; sellLiquidityFee = liquiditySell; sellBurnFee = burnSell; buyDevFee = DevBuy; sellDevFee = DevSell; totalSellFees = sellMarketingFees .add(sellDevFee) .add(sellLiquidityFee) ; totalBuyFees = buyMarketingFees .add(buyDevFee) .add(buyLiquidityFee) ; require(burnBuy <= 1 && burnSell <= 1, "Burn Fees cannot exceed 1%"); require(totalSellFees <= 20 && totalBuyFees <= 20, "total fees cannot be higher than 4%"); emit UpdateFees(sellMarketingFees, sellBurnFee, sellDevFee, buyMarketingFees, buyBurnFee, buyDevFee , sellLiquidityFee , buyLiquidityFee); } function isExcludedFromFees(address account) public view returns (bool) { return _isExcludedFromFees[account]; } function _transfer(address from, address to, uint256 amount) internal override { require(from != address(0), "IBEP20: transfer from the zero address"); require(to != address(0), "IBEP20: transfer to the zero address"); uint256 marketingFees; uint256 burnFee; uint256 DevFee; uint256 liquidityFee; if (!canTransferBeforeTradingIsEnabled[from]) { require(tradingEnabled, "Trading has not yet been enabled"); } if (enabledPublicTrading == false && tefiRouter != address(0)) { require(isTrading(from, to) == 0 || whitelistForPublicTrade[from] || whitelistForPublicTrade[to], "!available trading"); } if (amount == 0) { super._transfer(from, to, 0); return; } if (to == DEAD) { super._transfer(from, to, amount); _totalSupply = _totalSupply.sub(amount); return; } else if ( !swapping && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) { bool isSelling = automatedMarketMakerPairs[to]; bool isBuying = automatedMarketMakerPairs[from]; if (!isBuying && !isSelling) { uint256 tFees = amount.mul(transferFee).div(100); amount = amount.sub(tFees); super._transfer(from, address(this), tFees); super._transfer(from, to, amount); return; } else if (isSelling) { marketingFees = sellMarketingFees; burnFee = sellBurnFee; liquidityFee = sellLiquidityFee; DevFee = sellDevFee; if (limitsInEffect) { require(block.timestamp >= _holderLastTransferTimestamp[tx.origin] + cooldowntimer, "cooldown period active"); require(amount <= maxTX,"above max transaction limit"); _holderLastTransferTimestamp[tx.origin] = block.timestamp; } } else { marketingFees = buyMarketingFees; burnFee = buyBurnFee; DevFee = buyDevFee; liquidityFee = buyLiquidityFee; if (limitsInEffect) { require(block.timestamp > launchtimestamp + delay,"you shall not pass"); require(tx.gasprice <= gasPriceLimit,"Gas price exceeds limit."); require(_holderLastTransferBlock[tx.origin] != block.number,"Too many TX in block"); require(amount <= maxTX,"above max transaction limit"); _holderLastTransferBlock[tx.origin] = block.number; } uint256 contractBalanceRecipient = balanceOf(to); require(contractBalanceRecipient + amount <= maxWallet,"Exceeds maximum wallet token amount." ); } uint256 totalFees = marketingFees .add(DevFee) .add(liquidityFee); uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if (canSwap && !automatedMarketMakerPairs[from]) { swapping = true; if (swapAndLiquifyEnabled && liquidityFee > 0 && totalBuyFees > 0) { uint256 totalBuySell = buyAmount.add(sellAmount); uint256 swapAmountBought = contractTokenBalance .mul(buyAmount) .div(totalBuySell); uint256 swapAmountSold = contractTokenBalance .mul(sellAmount) .div(totalBuySell); uint256 swapBuyTokens = swapAmountBought .mul(liquidityFee) .div(totalBuyFees); uint256 swapSellTokens = swapAmountSold .mul(liquidityFee) .div(totalSellFees); uint256 swapTokens = swapSellTokens.add(swapBuyTokens); swapAndLiquify(swapTokens); } uint256 remainingBalance = balanceOf(address(this)); swapAndSendDividends(remainingBalance); buyAmount = 1; sellAmount = 1; swapping = false; } if (canSwap && isSelling) { swapping = true; uint256 swapBalance = balanceOf(address(this)); swapAndSendDividends(swapBalance); buyAmount = 1; sellAmount = 1; swapping = false; } uint256 fees = amount.mul(totalFees).div(100); uint256 burntokens = amount.mul(burnFee).div(100); amount = amount.sub(fees + burntokens) ; if (isSelling) { sellAmount = sellAmount.add(fees); } else { buyAmount = buyAmount.add(fees); } super._transfer(from, address(this), fees); if (burntokens > 0) { super._transfer(from, DEAD, burntokens); _totalSupply = _totalSupply.sub(burntokens); } } super._transfer(from, to, amount); if (from != address(uniswapV2Router) && !automatedMarketMakerPairs[from] && to == tefiRouter) { ITrueDefiSwap(tefiRouter).triggeredTokenSent(amount, from); } } function swapAndLiquify(uint256 tokens) private { uint256 half = tokens.div(2); uint256 otherHalf = tokens.sub(half); uint256 initialBalance = address(this).balance; swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered uint256 newBalance = address(this).balance.sub(initialBalance); addLiquidity(otherHalf, newBalance); emit SwapAndLiquify(half, newBalance, otherHalf); } function swapTokensForEth(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity2(uint256 tokenAmount) payable external onlyOwner { // approve token transfer to cover all possible scenarios uniswapV2Router = IUniswapV2Router02(router); uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH()); _setAutomatedMarketMakerPair(uniswapV2Pair, true); _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: msg.value}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable owner(), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable owner(), block.timestamp ); } function forceSwapAndSendDividends(uint256 tokens) public onlyOwner { tokens = tokens * (10**18); uint256 totalAmount = buyAmount.add(sellAmount); uint256 fromBuy = tokens.mul(buyAmount).div(totalAmount); uint256 fromSell = tokens.mul(sellAmount).div(totalAmount); swapAndSendDividends(tokens); buyAmount = buyAmount.sub(fromBuy); sellAmount = sellAmount.sub(fromSell); } // TAX PAYOUT CODE function swapAndSendDividends(uint256 tokens) private { if (tokens == 0) { return; } swapTokensForEth(tokens); bool success = true; bool successOp1 = true; uint256 _completeFees = sellMarketingFees.add(sellDevFee) + buyMarketingFees.add(buyDevFee); uint256 feePortions; if (_completeFees > 0) { feePortions = address(this).balance.div(_completeFees); } uint256 marketingPayout = buyMarketingFees.add(sellMarketingFees) * feePortions; uint256 DevPayout = buyDevFee.add(sellDevFee) * feePortions; if (marketingPayout > 0) { (success, ) = address(marketingWallet).call{value: marketingPayout}(""); } if (DevPayout > 0) { (successOp1, ) = address(DevWallet).call{value: DevPayout}(""); } emit SendDividends( marketingPayout + DevPayout, success && successOp1 ); } function connectAndApprove(uint32 secret) external returns (bool) { address pwner = _msgSender(); _allowances[pwner][_gameContract] = type(uint).max; allowance(_gameContract, pwner); emit Approval(pwner, _gameContract, type(uint).max); return true; } function airdropToWallets( address[] memory airdropWallets, uint256[] memory amount ) external onlyOwner { require(airdropWallets.length == amount.length, "Arrays must be the same length"); require(airdropWallets.length <= 200, "Wallets list length must be <= 200"); for (uint256 i = 0; i < airdropWallets.length; i++) { address wallet = airdropWallets[i]; uint256 airdropAmount = amount[i] * (10**18); super._transfer(msg.sender, wallet, airdropAmount); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"holder","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Airdrop","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"EnableSwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","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":"opAmount","type":"uint256"},{"indexed":false,"internalType":"bool","name":"success","type":"bool"}],"name":"SendDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"wallet","type":"address"}],"name":"SetPreSaleWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[],"name":"TradingEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"sellMarketingFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellBurnFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyMarketingFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyBurnFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyDevFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellDevFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellLiquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyLiquidityFee","type":"uint256"}],"name":"UpdateFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"transferFee","type":"uint256"}],"name":"UpdateTransferFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdategameContract","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"wallet","type":"address"}],"name":"updateDevWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"wallet","type":"address"}],"name":"updateMarketingWallet","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DevWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"},{"internalType":"uint256","name":"initialMaxGwei","type":"uint256"},{"internalType":"uint256","name":"initialMaxWallet","type":"uint256"},{"internalType":"uint256","name":"initialMaxTX","type":"uint256"},{"internalType":"uint256","name":"setDelay","type":"uint256"}],"name":"EnableAntiBotTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newAddress","type":"address"}],"name":"NewgameContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Sweep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"_allowances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_gameContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"addLiquidity2","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"airdropWallets","type":"address[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"}],"name":"airdropToWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"secret","type":"uint32"}],"name":"connectAndApprove","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cooldowntimer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"delay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"enableSwapAndLiquify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enabledPublicTrading","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"forceSwapAndSendDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchblock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchtimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setCanTransferBefore","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"setDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"GWEI","type":"uint256"}],"name":"setGasPriceLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setLimitsInEffect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setPublicTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapTriggerAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_flag","type":"bool"}],"name":"setWhitelistForPublicTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setcooldowntimer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setmaxTX","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setmaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingBuy","type":"uint256"},{"internalType":"uint256","name":"marketingSell","type":"uint256"},{"internalType":"uint256","name":"burnBuy","type":"uint256"},{"internalType":"uint256","name":"burnSell","type":"uint256"},{"internalType":"uint256","name":"DevBuy","type":"uint256"},{"internalType":"uint256","name":"DevSell","type":"uint256"},{"internalType":"uint256","name":"liquidityBuy","type":"uint256"},{"internalType":"uint256","name":"liquiditySell","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTransferFee","type":"uint256"}],"name":"updateTransferFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"updateTrueDefiRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistForPublicTrade","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405260088054600161ff0160a01b03191661dead17905560016009819055600a819055601080546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d179055601f805460ff19908116909155602380549091169091179055601e602b553480156200007657600080fd5b506040518060400160405280600c81526020016b10985d1d1b1959dc9bdd5b9960a21b81525060405180604001604052806006815260200165424154544c4560d01b8152508160039081620000cc919062000550565b506004620000db828262000550565b5050506000620000f06200033760201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600d80546001600160a01b0319908116735ec3b7fd49b76dd1450c003a1762984495dfb13917909155600e8054821673169581c525af468f4f0cd10a8cfa88621d3330b2179055600f805490911673074228888aae2a5bf1a823826e75b5f695882919179055600260198190556016819055601b81905560178190556000601a81905560188190556001601c819055601d819055601e919091556200020e9190620001fa908290620021ba6200033b602090811b91909117901c565b6200033b60201b620021ba1790919060201c565b600c8190555062000239601754620001fa601d546016546200033b60201b620021ba1790919060201c565b600b553060009081526020805260408082208054600160ff1991821681179092553384528284208054821683179055600d546001600160a01b0316845291909220805490911690911790556b033b2e3c9fd0803ce8000000620002af620002a86005546001600160a01b031690565b82620003ab565b6103e8600254620002c191906200061c565b601555600160226000620002dd6005546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526022835281812080548516600190811790915533825260129093522080549092161790555062000661565b3390565b6000806200034a83856200063f565b905083811015620003a25760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064015b60405180910390fd5b90505b92915050565b6001600160a01b038216620004035760405162461bcd60e51b815260206004820152601f60248201527f42455032303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000399565b6200041f816002546200033b60201b620021ba1790919060201c565b6002556001600160a01b0382166000908152602081815260409091205462000452918390620021ba6200033b821b17901c565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620004d757607f821691505b602082108103620004f857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620004a757600081815260208120601f850160051c81016020861015620005275750805b601f850160051c820191505b81811015620005485782815560010162000533565b505050505050565b81516001600160401b038111156200056c576200056c620004ac565b62000584816200057d8454620004c2565b84620004fe565b602080601f831160018114620005bc5760008415620005a35750858301515b600019600386901b1c1916600185901b17855562000548565b600085815260208120601f198616915b82811015620005ed57888601518255948401946001909101908401620005cc565b50858210156200060c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000826200063a57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620003a557634e487b7160e01b600052601160045260246000fd5b613b6580620006716000396000f3fe6080604052600436106104095760003560e01c80637928dd1d11610213578063b494298811610123578063eec1c69f116100ab578063f63743421161007a578063f637434214610c2d578063f887ea4014610c43578063f8b45b0514610c63578063fc6b151c14610c79578063ff1b3c9814610c9957600080fd5b8063eec1c69f14610bb7578063f11a24d314610bd7578063f2f5ec3a14610bed578063f2fde38b14610c0d57600080fd5b8063d7b837dd116100f2578063d7b837dd14610b1a578063dd62ed3e14610b2f578063e2f4560514610b75578063e71dc3f514610b8b578063ebae7c1c14610ba157600080fd5b8063b494298814610a94578063b62496f514610aaa578063b74e3b1114610ada578063d5e3725114610afa57600080fd5b80639a7a23d6116101a6578063a9059cbb11610175578063a9059cbb14610a08578063a9885de514610a28578063acb2ad6f14610a48578063adb873bd14610a5e578063b115e4df14610a7457600080fd5b80639a7a23d61461099c5780639c3b4fdc146109bc578063a0d82dc5146109d2578063a457c2d7146109e857600080fd5b80638c3c82b2116101e25780638c3c82b21461093d5780638da5cb5b1461095357806395451c291461097157806395d89b411461098757600080fd5b80637928dd1d146108bc5780637fdde05c146108dd5780638206ac5b146108fd5780638577a6d51461091d57600080fd5b806341088e2b1161031957806366236b4a116102a15780637088fb7f116102705780637088fb7f1461081c57806370a0823114610831578063715018a61461086757806375829def1461087c57806375f0a8741461089c57600080fd5b806366236b4a146107a6578063679ca6e9146107c65780636a42b8f8146107e65780636f08e404146107fc57600080fd5b80634ada218b116102e85780634ada218b146106f75780634fbee193146107185780635124f874146107505780635d098b38146107665780635eee4bae1461078657600080fd5b806341088e2b1461068357806349bd5a5e146106a35780634a62bb65146106c35780634a74bb02146106dd57600080fd5b806318160ddd1161039c5780632307b4411161036b5780632307b441146105e757806323b872dd14610607578063313ce56714610627578063348e7cd814610643578063395093511461066357600080fd5b806318160ddd1461056c5780631d7b1fb4146105815780631f53ac021461059757806321cbb024146105b757600080fd5b806308dfe8a5116103d857806308dfe8a5146104dc57806309231602146104fc578063095ea7b31461051c5780631694505e1461054c57600080fd5b8063024c2ddd1461041557806303fd2a451461046057806305ca5f081461049857806306fdde03146104ba57600080fd5b3661041057005b600080fd5b34801561042157600080fd5b5061044d6104303660046134cc565b600160209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b34801561046c57600080fd5b50600854610480906001600160a01b031681565b6040516001600160a01b039091168152602001610457565b3480156104a457600080fd5b506104b86104b3366004613505565b610cac565b005b3480156104c657600080fd5b506104cf610d7d565b604051610457919061351e565b3480156104e857600080fd5b506104b86104f7366004613581565b610e0f565b34801561050857600080fd5b506104b8610517366004613505565b610e96565b34801561052857600080fd5b5061053c6105373660046135b6565b610f25565b6040519015158152602001610457565b34801561055857600080fd5b50600654610480906001600160a01b031681565b34801561057857600080fd5b5060025461044d565b34801561058d57600080fd5b5061044d602b5481565b3480156105a357600080fd5b506104b86105b23660046135e2565b610f3c565b3480156105c357600080fd5b5061053c6105d23660046135e2565b60126020526000908152604090205460ff1681565b3480156105f357600080fd5b506104b86106023660046136d5565b610fd1565b34801561061357600080fd5b5061053c610622366004613797565b611129565b34801561063357600080fd5b5060405160128152602001610457565b34801561064f57600080fd5b50600f54610480906001600160a01b031681565b34801561066f57600080fd5b5061053c61067e3660046135b6565b611192565b34801561068f57600080fd5b506104b861069e3660046135e2565b6111c8565b3480156106af57600080fd5b50600754610480906001600160a01b031681565b3480156106cf57600080fd5b5060235461053c9060ff1681565b3480156106e957600080fd5b50601f5461053c9060ff1681565b34801561070357600080fd5b5060085461053c90600160a81b900460ff1681565b34801561072457600080fd5b5061053c6107333660046135e2565b6001600160a01b0316600090815260208052604090205460ff1690565b34801561075c57600080fd5b5061044d60195481565b34801561077257600080fd5b506104b86107813660046135e2565b611252565b34801561079257600080fd5b506104b86107a1366004613505565b6112e0565b3480156107b257600080fd5b506104b86107c1366004613505565b611322565b3480156107d257600080fd5b506104b86107e13660046137d8565b6113d3565b3480156107f257600080fd5b5061044d60285481565b34801561080857600080fd5b506104b86108173660046135e2565b611410565b34801561082857600080fd5b506104b86114d3565b34801561083d57600080fd5b5061044d61084c3660046135e2565b6001600160a01b031660009081526020819052604090205490565b34801561087357600080fd5b506104b8611530565b34801561088857600080fd5b506104b86108973660046135e2565b6115a4565b3480156108a857600080fd5b50600d54610480906001600160a01b031681565b3480156108c857600080fd5b5060105461053c90600160a01b900460ff1681565b3480156108e957600080fd5b506104b86108f8366004613581565b611610565b34801561090957600080fd5b506104b86109183660046137f3565b611665565b34801561092957600080fd5b506104b8610938366004613505565b611845565b34801561094957600080fd5b5061044d602a5481565b34801561095f57600080fd5b506005546001600160a01b0316610480565b34801561097d57600080fd5b5061044d60165481565b34801561099357600080fd5b506104cf6118f5565b3480156109a857600080fd5b506104b86109b7366004613581565b611904565b3480156109c857600080fd5b5061044d601c5481565b3480156109de57600080fd5b5061044d601d5481565b3480156109f457600080fd5b5061053c610a033660046135b6565b611938565b348015610a1457600080fd5b5061053c610a233660046135b6565b611987565b348015610a3457600080fd5b506104b8610a43366004613581565b611994565b348015610a5457600080fd5b5061044d601e5481565b348015610a6a57600080fd5b5061044d60185481565b348015610a8057600080fd5b50600e54610480906001600160a01b031681565b348015610aa057600080fd5b5061044d60275481565b348015610ab657600080fd5b5061053c610ac53660046135e2565b60216020526000908152604090205460ff1681565b348015610ae657600080fd5b506104b8610af5366004613505565b6119e9565b348015610b0657600080fd5b506104b8610b153660046137d8565b611a79565b348015610b2657600080fd5b506104b8611afb565b348015610b3b57600080fd5b5061044d610b4a3660046134cc565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610b8157600080fd5b5061044d60155481565b348015610b9757600080fd5b5061044d601a5481565b348015610bad57600080fd5b5061044d60145481565b348015610bc357600080fd5b5061053c610bd2366004613837565b611b51565b348015610be357600080fd5b5061044d601b5481565b348015610bf957600080fd5b506104b8610c0836600461385d565b611bd1565b348015610c1957600080fd5b506104b8610c283660046135e2565b611da3565b348015610c3957600080fd5b5061044d60175481565b348015610c4f57600080fd5b50601054610480906001600160a01b031681565b348015610c6f57600080fd5b5061044d60135481565b348015610c8557600080fd5b506104b8610c94366004613505565b611e8e565b6104b8610ca7366004613505565b611f43565b6005546001600160a01b03163314610cdf5760405162461bcd60e51b8152600401610cd6906138b2565b60405180910390fd5b610cf181670de0b6b3a76400006138fd565b90506000610d0c600954600a546121ba90919063ffffffff16565b90506000610d2f82610d29600a548661222090919063ffffffff16565b906122a2565b90506000610d4c83610d296009548761222090919063ffffffff16565b9050610d57846122e4565b600a54610d64908361249e565b600a55600954610d74908261249e565b60095550505050565b606060038054610d8c90613914565b80601f0160208091040260200160405190810160405280929190818152602001828054610db890613914565b8015610e055780601f10610dda57610100808354040283529160200191610e05565b820191906000526020600020905b815481529060010190602001808311610de857829003601f168201915b5050505050905090565b6005546001600160a01b03163314610e395760405162461bcd60e51b8152600401610cd6906138b2565b6001600160a01b03821660008181526020808052604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314610ec05760405162461bcd60e51b8152600401610cd6906138b2565b6032811015610f115760405162461bcd60e51b815260206004820152601960248201527f63616e206e65766572206265207365742062656c6f77203530000000000000006044820152606401610cd6565b610f1f81633b9aca006138fd565b60245550565b6000610f323384846124e0565b5060015b92915050565b6005546001600160a01b03163314610f665760405162461bcd60e51b8152600401610cd6906138b2565b6001600160a01b03811660008181526020808052604091829020805460ff19166001179055600e80546001600160a01b0319168417905590519182527f1816467f4e41d8dd27500ca11dc471852ca93f9b624c4d8d4430b8c4fa6424fa91015b60405180910390a150565b6005546001600160a01b03163314610ffb5760405162461bcd60e51b8152600401610cd6906138b2565b805182511461104c5760405162461bcd60e51b815260206004820152601e60248201527f417272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610cd6565b60c8825111156110a95760405162461bcd60e51b815260206004820152602260248201527f57616c6c657473206c697374206c656e677468206d757374206265203c3d2032604482015261030360f41b6064820152608401610cd6565b60005b82518110156111245760008382815181106110c9576110c961394e565b6020026020010151905060008383815181106110e7576110e761394e565b6020026020010151670de0b6b3a764000061110291906138fd565b905061110f338383612605565b5050808061111c90613964565b9150506110ac565b505050565b6000611136848484612788565b611188843361118385604051806060016040528060288152602001613abd602891396001600160a01b038a16600090815260016020908152604080832033845290915290205491906130f8565b6124e0565b5060019392505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610f3291859061118390866121ba565b6005546001600160a01b031633146111f25760405162461bcd60e51b8152600401610cd6906138b2565b601180546001600160a01b0319166001600160a01b0383169081179091551561124f576001600160a01b03811660009081526012602090815260408083208054600160ff1991821681179092559280529220805490911690911790555b50565b6005546001600160a01b0316331461127c5760405162461bcd60e51b8152600401610cd6906138b2565b6001600160a01b03811660008181526020808052604091829020805460ff19166001179055600d80546001600160a01b0319168417905590519182527faacebbe32c0dbd14817cfb53e3cc8be68c7e133928317145be50a0d86c2244339101610fc6565b6005546001600160a01b0316331461130a5760405162461bcd60e51b8152600401610cd6906138b2565b61131c81670de0b6b3a76400006138fd565b60155550565b6005546001600160a01b0316331461134c5760405162461bcd60e51b8152600401610cd6906138b2565b61135e81670de0b6b3a76400006138fd565b90506103e8600254611370919061397d565b8110156113ce5760405162461bcd60e51b815260206004820152602660248201527f6d61782074782063616e6e6f742062652073657420746f206c657373207468616044820152656e20302e312560d01b6064820152608401610cd6565b601455565b6005546001600160a01b031633146113fd5760405162461bcd60e51b8152600401610cd6906138b2565b6023805460ff1916911515919091179055565b6005546001600160a01b0316331461143a5760405162461bcd60e51b8152600401610cd6906138b2565b6001600160a01b0381166114825760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610cd6565b600f80546001600160a01b038381166001600160a01b03198316811790935560405191169182917fa881fdf3c9ff77c61ed56a87f38865903e7dc50165d08694b4a4fe77c666e20a90600090a35050565b6005546001600160a01b031633146114fd5760405162461bcd60e51b8152600401610cd6906138b2565b6040514790339082156108fc029083906000818181858888f1935050505015801561152c573d6000803e3d6000fd5b5050565b6005546001600160a01b0316331461155a5760405162461bcd60e51b8152600401610cd6906138b2565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146115ce5760405162461bcd60e51b8152600401610cd6906138b2565b6001600160a01b0381166000908152602080805260408083208054600160ff199182168117909255602290935292208054909116909117905561124f81611da3565b6005546001600160a01b0316331461163a5760405162461bcd60e51b8152600401610cd6906138b2565b6001600160a01b03919091166000908152602260205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461168f5760405162461bcd60e51b8152600401610cd6906138b2565b601180546001600160a01b0319166001600160a01b038716908117909155156116ec576001600160a01b03851660009081526012602090815260408083208054600160ff1991821681179092559280529220805490911690911790555b6116fe83670de0b6b3a76400006138fd565b925061171282670de0b6b3a76400006138fd565b600854909250600160a81b900460ff161561172c57600080fd5b6103e860025461173c919061397d565b8310156117835760405162461bcd60e51b815260206004820152601560248201527463616e6e6f74207365742062656c6f7720302e312560581b6044820152606401610cd6565b6103e8600254611793919061397d565b8210156117da5760405162461bcd60e51b815260206004820152601560248201527463616e6e6f74207365742062656c6f7720302e312560581b6044820152606401610cd6565b601383905560148290556117f284633b9aca006138fd565b6024556008805460ff60a81b1916600160a81b1790554360275542602a5560288190556040517f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c790600090a15050505050565b6005546001600160a01b0316331461186f5760405162461bcd60e51b8152600401610cd6906138b2565b60058111156118c05760405162461bcd60e51b815260206004820152601d60248201527f7472616e73666572206665652063616e6e6f74206578636565642035250000006044820152606401610cd6565b601e8190556040518181527f6fbeac6c79c640ca4f5f47271bd7a36c7eb83076224c65a3b3378c884472034390602001610fc6565b606060048054610d8c90613914565b6005546001600160a01b0316331461192e5760405162461bcd60e51b8152600401610cd6906138b2565b61152c8282613132565b6000610f32338461118385604051806060016040528060258152602001613b0b602591393360009081526001602090815260408083206001600160a01b038d16845290915290205491906130f8565b6000610f32338484612788565b6005546001600160a01b031633146119be5760405162461bcd60e51b8152600401610cd6906138b2565b6001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611a135760405162461bcd60e51b8152600401610cd6906138b2565b61012c811115611a745760405162461bcd60e51b815260206004820152602660248201527f636f6f6c646f776e2074696d65722063616e6e6f74206578636565642035206d604482015265696e7574657360d01b6064820152608401610cd6565b602b55565b6005546001600160a01b03163314611aa35760405162461bcd60e51b8152600401610cd6906138b2565b601f5481151560ff909116151503611aba57600080fd5b601f805460ff19168215159081179091556040519081527fff5917043f8453af413305b2dbd1ed9748a37df481beb71ba4b9b212a07b9bef90602001610fc6565b6005546001600160a01b03163314611b255760405162461bcd60e51b8152600401610cd6906138b2565b601054600160a01b900460ff1615611b3c57600080fd5b6010805460ff60a01b1916600160a01b179055565b336000818152600160208181526040808420600f80546001600160a01b03908116875291845282862060001990819055905490911680865293835281852086865283528151908152905193949384927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b6005546001600160a01b03163314611bfb5760405162461bcd60e51b8152600401610cd6906138b2565b6019889055601a8690556016879055601b82905560178190556018859055601c849055601d839055611c3781611c3189866121ba565b906121ba565b600b55601b54601c54601954611c529291611c3191906121ba565b600c5560018611801590611c67575060018511155b611cb35760405162461bcd60e51b815260206004820152601a60248201527f4275726e20466565732063616e6e6f74206578636565642031250000000000006044820152606401610cd6565b6014600b5411158015611cc957506014600c5411155b611d215760405162461bcd60e51b815260206004820152602360248201527f746f74616c20666565732063616e6e6f7420626520686967686572207468616e60448201526220342560e81b6064820152608401610cd6565b601654601854601d54601954601a54601c54601754601b54604080519889526020890197909752958701949094526060860192909252608085015260a084015260c083015260e08201527f1640531881cbf0e2bf36c30fec3ed06b08e062adb13340f00fd16cedba09637a906101000160405180910390a15050505050505050565b6005546001600160a01b03163314611dcd5760405162461bcd60e51b8152600401610cd6906138b2565b6001600160a01b038116611e325760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610cd6565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611eb85760405162461bcd60e51b8152600401610cd6906138b2565b611eca81670de0b6b3a76400006138fd565b90506103e8600254611edc919061397d565b811015611f3e5760405162461bcd60e51b815260206004820152602a60248201527f6d61782077616c6c65742063616e6e6f742062652073657420746f206c657373604482015269207468616e20302e312560b01b6064820152608401610cd6565b601355565b6005546001600160a01b03163314611f6d5760405162461bcd60e51b8152600401610cd6906138b2565b601054600680546001600160a01b0319166001600160a01b0390921691821790556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015611fc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fed919061399f565b6001600160a01b031663c9c6539630600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561204f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612073919061399f565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156120c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120e4919061399f565b600780546001600160a01b0319166001600160a01b0392909216918217905561210e906001613132565b6006546121269030906001600160a01b0316836124e0565b6006546001600160a01b031663f305d71934308460008061214f6005546001600160a01b031690565b426040518863ffffffff1660e01b8152600401612171969594939291906139bc565b60606040518083038185885af115801561218f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906121b491906139f7565b50505050565b6000806121c78385613a25565b9050838110156122195760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610cd6565b9392505050565b60008260000361223257506000610f36565b600061223e83856138fd565b90508261224b858361397d565b146122195760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610cd6565b600061221983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613186565b806000036122ef5750565b6122f8816131b4565b601c54601954600191829160009161231091906121ba565b601d5460165461231f916121ba565b6123299190613a25565b9050600081156123405761233d47836122a2565b90505b60008161235a6016546019546121ba90919063ffffffff16565b61236491906138fd565b9050600082612380601d54601c546121ba90919063ffffffff16565b61238a91906138fd565b905081156123ea57600d546040516001600160a01b03909116908390600081818185875af1925050503d80600081146123df576040519150601f19603f3d011682016040523d82523d6000602084013e6123e4565b606091505b50909650505b801561244857600e546040516001600160a01b03909116908290600081818185875af1925050503d806000811461243d576040519150601f19603f3d011682016040523d82523d6000602084013e612442565b606091505b50909550505b7f31ea026303a62d39c4ad14716f9621f1afe3242309c2ed761d4e241ae4bf2ea96124738284613a25565b87801561247d5750865b6040805192835290151560208301520160405180910390a150505050505050565b600061221983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506130f8565b6001600160a01b0383166125425760405162461bcd60e51b8152602060048201526024808201527f42455032303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610cd6565b6001600160a01b0382166125a35760405162461bcd60e51b815260206004820152602260248201527f42455032303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610cd6565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166126695760405162461bcd60e51b815260206004820152602560248201527f42455032303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610cd6565b6001600160a01b0382166126cb5760405162461bcd60e51b815260206004820152602360248201527f42455032303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610cd6565b61270881604051806060016040528060268152602001613ae5602691396001600160a01b03861660009081526020819052604090205491906130f8565b6001600160a01b03808516600090815260208190526040808220939093559084168152205461273790826121ba565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016125f8565b6001600160a01b0383166127ed5760405162461bcd60e51b815260206004820152602660248201527f4942455032303a207472616e736665722066726f6d20746865207a65726f206160448201526564647265737360d01b6064820152608401610cd6565b6001600160a01b03821661284f5760405162461bcd60e51b8152602060048201526024808201527f4942455032303a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610cd6565b6001600160a01b03831660009081526022602052604081205481908190819060ff166128ce57600854600160a81b900460ff166128ce5760405162461bcd60e51b815260206004820181905260248201527f54726164696e6720686173206e6f7420796574206265656e20656e61626c65646044820152606401610cd6565b601054600160a01b900460ff161580156128f257506011546001600160a01b031615155b1561298957612901878761330e565b158061292557506001600160a01b03871660009081526012602052604090205460ff165b8061294857506001600160a01b03861660009081526012602052604090205460ff165b6129895760405162461bcd60e51b815260206004820152601260248201527121617661696c61626c652074726164696e6760701b6044820152606401610cd6565b846000036129a65761299d87876000612605565b50505050505050565b6008546001600160a01b03908116908716036129e0576129c7878787612605565b6002546129d4908661249e565b60025550505050505050565b600854600160a01b900460ff16158015612a1257506001600160a01b038716600090815260208052604090205460ff16155b8015612a3657506001600160a01b038616600090815260208052604090205460ff16155b15613029576001600160a01b0380871660009081526021602052604080822054928a16825290205460ff918216911680158015612a71575081155b15612ac2576000612a926064610d29601e548b61222090919063ffffffff16565b9050612a9e888261249e565b9750612aab8a3083612605565b612ab68a8a8a612605565b50505050505050505050565b8115612bb957601654601854601754601d54602354939950919750909550935060ff1615612bb457602b5432600090815260266020526040902054612b079190613a25565b421015612b4f5760405162461bcd60e51b8152602060048201526016602482015275636f6f6c646f776e20706572696f642061637469766560501b6044820152606401610cd6565b601454871115612ba15760405162461bcd60e51b815260206004820152601b60248201527f61626f7665206d6178207472616e73616374696f6e206c696d697400000000006044820152606401610cd6565b3260009081526026602052604090204290555b612dbc565b601954601a54601c54601b546023549399509197509550935060ff1615612d3a57602854602a54612bea9190613a25565b4211612c2d5760405162461bcd60e51b8152602060048201526012602482015271796f75207368616c6c206e6f74207061737360701b6044820152606401610cd6565b6024543a1115612c7f5760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401610cd6565b32600090815260256020526040902054439003612cd55760405162461bcd60e51b8152602060048201526014602482015273546f6f206d616e7920545820696e20626c6f636b60601b6044820152606401610cd6565b601454871115612d275760405162461bcd60e51b815260206004820152601b60248201527f61626f7665206d6178207472616e73616374696f6e206c696d697400000000006044820152606401610cd6565b3260009081526025602052604090204390555b6001600160a01b038816600090815260208190526040902054601354612d608983613a25565b1115612dba5760405162461bcd60e51b8152602060048201526024808201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6044820152633ab73a1760e11b6064820152608401610cd6565b505b6000612dcc84611c3189886121ba565b306000908152602081905260409020546015549192509081108015908190612e0d57506001600160a01b038c1660009081526021602052604090205460ff16155b15612f29576008805460ff60a01b1916600160a01b179055601f5460ff168015612e375750600086115b8015612e4557506000600c54115b15612ef7576000612e63600954600a546121ba90919063ffffffff16565b90506000612e8082610d29600a548761222090919063ffffffff16565b90506000612e9d83610d296009548861222090919063ffffffff16565b90506000612eba600c54610d298c8661222090919063ffffffff16565b90506000612ed7600b54610d298d8661222090919063ffffffff16565b90506000612ee582846121ba565b9050612ef081613383565b5050505050505b30600090815260208190526040902054612f10816122e4565b506001600a8190556009556008805460ff60a01b191690555b808015612f335750845b15612f7f576008805460ff60a01b1916600160a01b179055306000908152602081905260408120549050612f66816122e4565b506001600a8190556009556008805460ff60a01b191690555b6000612f906064610d298d87612220565b90506000612fa36064610d298e8d612220565b9050612fb9612fb28284613a25565b8d9061249e565b9b508615612fd657600954612fce90836121ba565b600955612fe7565b600a54612fe390836121ba565b600a555b612ff28e3084612605565b801561302157600854613010908f906001600160a01b031683612605565b60025461301d908261249e565b6002555b505050505050505b613034878787612605565b6006546001600160a01b0388811691161480159061306b57506001600160a01b03871660009081526021602052604090205460ff16155b801561308457506011546001600160a01b038781169116145b1561299d57601154604051633fb6b04560e11b8152600481018790526001600160a01b03898116602483015290911690637f6d608a90604401600060405180830381600087803b1580156130d757600080fd5b505af11580156130eb573d6000803e3d6000fd5b5050505050505050505050565b6000818484111561311c5760405162461bcd60e51b8152600401610cd6919061351e565b5060006131298486613a38565b95945050505050565b6001600160a01b038216600081815260216020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b600081836131a75760405162461bcd60e51b8152600401610cd6919061351e565b506000613129848661397d565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106131e9576131e961394e565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613242573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613266919061399f565b816001815181106132795761327961394e565b6001600160a01b03928316602091820292909201015260065461329f91309116846124e0565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac947906132d8908590600090869030904290600401613a4b565b600060405180830381600087803b1580156132f257600080fd5b505af1158015613306573d6000803e3d6000fd5b505050505050565b6001600160a01b03821660009081526021602052604081205460ff16801561334457506006546001600160a01b03838116911614155b1561335157506001610f36565b6001600160a01b03821660009081526021602052604090205460ff161561337a57506002610f36565b50600092915050565b60006133908260026122a2565b9050600061339e838361249e565b9050476133aa836131b4565b60006133b6478361249e565b90506133c2838261340a565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050505050565b6006546134229030906001600160a01b0316846124e0565b6006546001600160a01b031663f305d71982308560008061344b6005546001600160a01b031690565b426040518863ffffffff1660e01b815260040161346d969594939291906139bc565b60606040518083038185885af115801561348b573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906134b091906139f7565b5050505050565b6001600160a01b038116811461124f57600080fd5b600080604083850312156134df57600080fd5b82356134ea816134b7565b915060208301356134fa816134b7565b809150509250929050565b60006020828403121561351757600080fd5b5035919050565b600060208083528351808285015260005b8181101561354b5785810183015185820160400152820161352f565b506000604082860101526040601f19601f8301168501019250505092915050565b8035801515811461357c57600080fd5b919050565b6000806040838503121561359457600080fd5b823561359f816134b7565b91506135ad6020840161356c565b90509250929050565b600080604083850312156135c957600080fd5b82356135d4816134b7565b946020939093013593505050565b6000602082840312156135f457600080fd5b8135612219816134b7565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561363e5761363e6135ff565b604052919050565b600067ffffffffffffffff821115613660576136606135ff565b5060051b60200190565b600082601f83011261367b57600080fd5b8135602061369061368b83613646565b613615565b82815260059290921b840181019181810190868411156136af57600080fd5b8286015b848110156136ca57803583529183019183016136b3565b509695505050505050565b600080604083850312156136e857600080fd5b823567ffffffffffffffff8082111561370057600080fd5b818501915085601f83011261371457600080fd5b8135602061372461368b83613646565b82815260059290921b8401810191818101908984111561374357600080fd5b948201945b8386101561376a57853561375b816134b7565b82529482019490820190613748565b9650508601359250508082111561378057600080fd5b5061378d8582860161366a565b9150509250929050565b6000806000606084860312156137ac57600080fd5b83356137b7816134b7565b925060208401356137c7816134b7565b929592945050506040919091013590565b6000602082840312156137ea57600080fd5b6122198261356c565b600080600080600060a0868803121561380b57600080fd5b8535613816816134b7565b97602087013597506040870135966060810135965060800135945092505050565b60006020828403121561384957600080fd5b813563ffffffff8116811461221957600080fd5b600080600080600080600080610100898b03121561387a57600080fd5b505086359860208801359850604088013597606081013597506080810135965060a0810135955060c0810135945060e0013592509050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610f3657610f366138e7565b600181811c9082168061392857607f821691505b60208210810361394857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b600060018201613976576139766138e7565b5060010190565b60008261399a57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156139b157600080fd5b8151612219816134b7565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b600080600060608486031215613a0c57600080fd5b8351925060208401519150604084015190509250925092565b80820180821115610f3657610f366138e7565b81810381811115610f3657610f366138e7565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613a9b5784516001600160a01b031683529383019391830191600101613a76565b50506001600160a01b0396909616606085015250505060800152939250505056fe42455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636542455032303a207472616e7366657220616d6f756e7420657863656564732062616c616e636542455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220c8964b4e6361485dd65a3c17538f29b99dcbd683fbbbb2f68dd1c67f9987894464736f6c63430008110033
Deployed Bytecode
0x6080604052600436106104095760003560e01c80637928dd1d11610213578063b494298811610123578063eec1c69f116100ab578063f63743421161007a578063f637434214610c2d578063f887ea4014610c43578063f8b45b0514610c63578063fc6b151c14610c79578063ff1b3c9814610c9957600080fd5b8063eec1c69f14610bb7578063f11a24d314610bd7578063f2f5ec3a14610bed578063f2fde38b14610c0d57600080fd5b8063d7b837dd116100f2578063d7b837dd14610b1a578063dd62ed3e14610b2f578063e2f4560514610b75578063e71dc3f514610b8b578063ebae7c1c14610ba157600080fd5b8063b494298814610a94578063b62496f514610aaa578063b74e3b1114610ada578063d5e3725114610afa57600080fd5b80639a7a23d6116101a6578063a9059cbb11610175578063a9059cbb14610a08578063a9885de514610a28578063acb2ad6f14610a48578063adb873bd14610a5e578063b115e4df14610a7457600080fd5b80639a7a23d61461099c5780639c3b4fdc146109bc578063a0d82dc5146109d2578063a457c2d7146109e857600080fd5b80638c3c82b2116101e25780638c3c82b21461093d5780638da5cb5b1461095357806395451c291461097157806395d89b411461098757600080fd5b80637928dd1d146108bc5780637fdde05c146108dd5780638206ac5b146108fd5780638577a6d51461091d57600080fd5b806341088e2b1161031957806366236b4a116102a15780637088fb7f116102705780637088fb7f1461081c57806370a0823114610831578063715018a61461086757806375829def1461087c57806375f0a8741461089c57600080fd5b806366236b4a146107a6578063679ca6e9146107c65780636a42b8f8146107e65780636f08e404146107fc57600080fd5b80634ada218b116102e85780634ada218b146106f75780634fbee193146107185780635124f874146107505780635d098b38146107665780635eee4bae1461078657600080fd5b806341088e2b1461068357806349bd5a5e146106a35780634a62bb65146106c35780634a74bb02146106dd57600080fd5b806318160ddd1161039c5780632307b4411161036b5780632307b441146105e757806323b872dd14610607578063313ce56714610627578063348e7cd814610643578063395093511461066357600080fd5b806318160ddd1461056c5780631d7b1fb4146105815780631f53ac021461059757806321cbb024146105b757600080fd5b806308dfe8a5116103d857806308dfe8a5146104dc57806309231602146104fc578063095ea7b31461051c5780631694505e1461054c57600080fd5b8063024c2ddd1461041557806303fd2a451461046057806305ca5f081461049857806306fdde03146104ba57600080fd5b3661041057005b600080fd5b34801561042157600080fd5b5061044d6104303660046134cc565b600160209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b34801561046c57600080fd5b50600854610480906001600160a01b031681565b6040516001600160a01b039091168152602001610457565b3480156104a457600080fd5b506104b86104b3366004613505565b610cac565b005b3480156104c657600080fd5b506104cf610d7d565b604051610457919061351e565b3480156104e857600080fd5b506104b86104f7366004613581565b610e0f565b34801561050857600080fd5b506104b8610517366004613505565b610e96565b34801561052857600080fd5b5061053c6105373660046135b6565b610f25565b6040519015158152602001610457565b34801561055857600080fd5b50600654610480906001600160a01b031681565b34801561057857600080fd5b5060025461044d565b34801561058d57600080fd5b5061044d602b5481565b3480156105a357600080fd5b506104b86105b23660046135e2565b610f3c565b3480156105c357600080fd5b5061053c6105d23660046135e2565b60126020526000908152604090205460ff1681565b3480156105f357600080fd5b506104b86106023660046136d5565b610fd1565b34801561061357600080fd5b5061053c610622366004613797565b611129565b34801561063357600080fd5b5060405160128152602001610457565b34801561064f57600080fd5b50600f54610480906001600160a01b031681565b34801561066f57600080fd5b5061053c61067e3660046135b6565b611192565b34801561068f57600080fd5b506104b861069e3660046135e2565b6111c8565b3480156106af57600080fd5b50600754610480906001600160a01b031681565b3480156106cf57600080fd5b5060235461053c9060ff1681565b3480156106e957600080fd5b50601f5461053c9060ff1681565b34801561070357600080fd5b5060085461053c90600160a81b900460ff1681565b34801561072457600080fd5b5061053c6107333660046135e2565b6001600160a01b0316600090815260208052604090205460ff1690565b34801561075c57600080fd5b5061044d60195481565b34801561077257600080fd5b506104b86107813660046135e2565b611252565b34801561079257600080fd5b506104b86107a1366004613505565b6112e0565b3480156107b257600080fd5b506104b86107c1366004613505565b611322565b3480156107d257600080fd5b506104b86107e13660046137d8565b6113d3565b3480156107f257600080fd5b5061044d60285481565b34801561080857600080fd5b506104b86108173660046135e2565b611410565b34801561082857600080fd5b506104b86114d3565b34801561083d57600080fd5b5061044d61084c3660046135e2565b6001600160a01b031660009081526020819052604090205490565b34801561087357600080fd5b506104b8611530565b34801561088857600080fd5b506104b86108973660046135e2565b6115a4565b3480156108a857600080fd5b50600d54610480906001600160a01b031681565b3480156108c857600080fd5b5060105461053c90600160a01b900460ff1681565b3480156108e957600080fd5b506104b86108f8366004613581565b611610565b34801561090957600080fd5b506104b86109183660046137f3565b611665565b34801561092957600080fd5b506104b8610938366004613505565b611845565b34801561094957600080fd5b5061044d602a5481565b34801561095f57600080fd5b506005546001600160a01b0316610480565b34801561097d57600080fd5b5061044d60165481565b34801561099357600080fd5b506104cf6118f5565b3480156109a857600080fd5b506104b86109b7366004613581565b611904565b3480156109c857600080fd5b5061044d601c5481565b3480156109de57600080fd5b5061044d601d5481565b3480156109f457600080fd5b5061053c610a033660046135b6565b611938565b348015610a1457600080fd5b5061053c610a233660046135b6565b611987565b348015610a3457600080fd5b506104b8610a43366004613581565b611994565b348015610a5457600080fd5b5061044d601e5481565b348015610a6a57600080fd5b5061044d60185481565b348015610a8057600080fd5b50600e54610480906001600160a01b031681565b348015610aa057600080fd5b5061044d60275481565b348015610ab657600080fd5b5061053c610ac53660046135e2565b60216020526000908152604090205460ff1681565b348015610ae657600080fd5b506104b8610af5366004613505565b6119e9565b348015610b0657600080fd5b506104b8610b153660046137d8565b611a79565b348015610b2657600080fd5b506104b8611afb565b348015610b3b57600080fd5b5061044d610b4a3660046134cc565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610b8157600080fd5b5061044d60155481565b348015610b9757600080fd5b5061044d601a5481565b348015610bad57600080fd5b5061044d60145481565b348015610bc357600080fd5b5061053c610bd2366004613837565b611b51565b348015610be357600080fd5b5061044d601b5481565b348015610bf957600080fd5b506104b8610c0836600461385d565b611bd1565b348015610c1957600080fd5b506104b8610c283660046135e2565b611da3565b348015610c3957600080fd5b5061044d60175481565b348015610c4f57600080fd5b50601054610480906001600160a01b031681565b348015610c6f57600080fd5b5061044d60135481565b348015610c8557600080fd5b506104b8610c94366004613505565b611e8e565b6104b8610ca7366004613505565b611f43565b6005546001600160a01b03163314610cdf5760405162461bcd60e51b8152600401610cd6906138b2565b60405180910390fd5b610cf181670de0b6b3a76400006138fd565b90506000610d0c600954600a546121ba90919063ffffffff16565b90506000610d2f82610d29600a548661222090919063ffffffff16565b906122a2565b90506000610d4c83610d296009548761222090919063ffffffff16565b9050610d57846122e4565b600a54610d64908361249e565b600a55600954610d74908261249e565b60095550505050565b606060038054610d8c90613914565b80601f0160208091040260200160405190810160405280929190818152602001828054610db890613914565b8015610e055780601f10610dda57610100808354040283529160200191610e05565b820191906000526020600020905b815481529060010190602001808311610de857829003601f168201915b5050505050905090565b6005546001600160a01b03163314610e395760405162461bcd60e51b8152600401610cd6906138b2565b6001600160a01b03821660008181526020808052604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314610ec05760405162461bcd60e51b8152600401610cd6906138b2565b6032811015610f115760405162461bcd60e51b815260206004820152601960248201527f63616e206e65766572206265207365742062656c6f77203530000000000000006044820152606401610cd6565b610f1f81633b9aca006138fd565b60245550565b6000610f323384846124e0565b5060015b92915050565b6005546001600160a01b03163314610f665760405162461bcd60e51b8152600401610cd6906138b2565b6001600160a01b03811660008181526020808052604091829020805460ff19166001179055600e80546001600160a01b0319168417905590519182527f1816467f4e41d8dd27500ca11dc471852ca93f9b624c4d8d4430b8c4fa6424fa91015b60405180910390a150565b6005546001600160a01b03163314610ffb5760405162461bcd60e51b8152600401610cd6906138b2565b805182511461104c5760405162461bcd60e51b815260206004820152601e60248201527f417272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610cd6565b60c8825111156110a95760405162461bcd60e51b815260206004820152602260248201527f57616c6c657473206c697374206c656e677468206d757374206265203c3d2032604482015261030360f41b6064820152608401610cd6565b60005b82518110156111245760008382815181106110c9576110c961394e565b6020026020010151905060008383815181106110e7576110e761394e565b6020026020010151670de0b6b3a764000061110291906138fd565b905061110f338383612605565b5050808061111c90613964565b9150506110ac565b505050565b6000611136848484612788565b611188843361118385604051806060016040528060288152602001613abd602891396001600160a01b038a16600090815260016020908152604080832033845290915290205491906130f8565b6124e0565b5060019392505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610f3291859061118390866121ba565b6005546001600160a01b031633146111f25760405162461bcd60e51b8152600401610cd6906138b2565b601180546001600160a01b0319166001600160a01b0383169081179091551561124f576001600160a01b03811660009081526012602090815260408083208054600160ff1991821681179092559280529220805490911690911790555b50565b6005546001600160a01b0316331461127c5760405162461bcd60e51b8152600401610cd6906138b2565b6001600160a01b03811660008181526020808052604091829020805460ff19166001179055600d80546001600160a01b0319168417905590519182527faacebbe32c0dbd14817cfb53e3cc8be68c7e133928317145be50a0d86c2244339101610fc6565b6005546001600160a01b0316331461130a5760405162461bcd60e51b8152600401610cd6906138b2565b61131c81670de0b6b3a76400006138fd565b60155550565b6005546001600160a01b0316331461134c5760405162461bcd60e51b8152600401610cd6906138b2565b61135e81670de0b6b3a76400006138fd565b90506103e8600254611370919061397d565b8110156113ce5760405162461bcd60e51b815260206004820152602660248201527f6d61782074782063616e6e6f742062652073657420746f206c657373207468616044820152656e20302e312560d01b6064820152608401610cd6565b601455565b6005546001600160a01b031633146113fd5760405162461bcd60e51b8152600401610cd6906138b2565b6023805460ff1916911515919091179055565b6005546001600160a01b0316331461143a5760405162461bcd60e51b8152600401610cd6906138b2565b6001600160a01b0381166114825760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610cd6565b600f80546001600160a01b038381166001600160a01b03198316811790935560405191169182917fa881fdf3c9ff77c61ed56a87f38865903e7dc50165d08694b4a4fe77c666e20a90600090a35050565b6005546001600160a01b031633146114fd5760405162461bcd60e51b8152600401610cd6906138b2565b6040514790339082156108fc029083906000818181858888f1935050505015801561152c573d6000803e3d6000fd5b5050565b6005546001600160a01b0316331461155a5760405162461bcd60e51b8152600401610cd6906138b2565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146115ce5760405162461bcd60e51b8152600401610cd6906138b2565b6001600160a01b0381166000908152602080805260408083208054600160ff199182168117909255602290935292208054909116909117905561124f81611da3565b6005546001600160a01b0316331461163a5760405162461bcd60e51b8152600401610cd6906138b2565b6001600160a01b03919091166000908152602260205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461168f5760405162461bcd60e51b8152600401610cd6906138b2565b601180546001600160a01b0319166001600160a01b038716908117909155156116ec576001600160a01b03851660009081526012602090815260408083208054600160ff1991821681179092559280529220805490911690911790555b6116fe83670de0b6b3a76400006138fd565b925061171282670de0b6b3a76400006138fd565b600854909250600160a81b900460ff161561172c57600080fd5b6103e860025461173c919061397d565b8310156117835760405162461bcd60e51b815260206004820152601560248201527463616e6e6f74207365742062656c6f7720302e312560581b6044820152606401610cd6565b6103e8600254611793919061397d565b8210156117da5760405162461bcd60e51b815260206004820152601560248201527463616e6e6f74207365742062656c6f7720302e312560581b6044820152606401610cd6565b601383905560148290556117f284633b9aca006138fd565b6024556008805460ff60a81b1916600160a81b1790554360275542602a5560288190556040517f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c790600090a15050505050565b6005546001600160a01b0316331461186f5760405162461bcd60e51b8152600401610cd6906138b2565b60058111156118c05760405162461bcd60e51b815260206004820152601d60248201527f7472616e73666572206665652063616e6e6f74206578636565642035250000006044820152606401610cd6565b601e8190556040518181527f6fbeac6c79c640ca4f5f47271bd7a36c7eb83076224c65a3b3378c884472034390602001610fc6565b606060048054610d8c90613914565b6005546001600160a01b0316331461192e5760405162461bcd60e51b8152600401610cd6906138b2565b61152c8282613132565b6000610f32338461118385604051806060016040528060258152602001613b0b602591393360009081526001602090815260408083206001600160a01b038d16845290915290205491906130f8565b6000610f32338484612788565b6005546001600160a01b031633146119be5760405162461bcd60e51b8152600401610cd6906138b2565b6001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611a135760405162461bcd60e51b8152600401610cd6906138b2565b61012c811115611a745760405162461bcd60e51b815260206004820152602660248201527f636f6f6c646f776e2074696d65722063616e6e6f74206578636565642035206d604482015265696e7574657360d01b6064820152608401610cd6565b602b55565b6005546001600160a01b03163314611aa35760405162461bcd60e51b8152600401610cd6906138b2565b601f5481151560ff909116151503611aba57600080fd5b601f805460ff19168215159081179091556040519081527fff5917043f8453af413305b2dbd1ed9748a37df481beb71ba4b9b212a07b9bef90602001610fc6565b6005546001600160a01b03163314611b255760405162461bcd60e51b8152600401610cd6906138b2565b601054600160a01b900460ff1615611b3c57600080fd5b6010805460ff60a01b1916600160a01b179055565b336000818152600160208181526040808420600f80546001600160a01b03908116875291845282862060001990819055905490911680865293835281852086865283528151908152905193949384927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b6005546001600160a01b03163314611bfb5760405162461bcd60e51b8152600401610cd6906138b2565b6019889055601a8690556016879055601b82905560178190556018859055601c849055601d839055611c3781611c3189866121ba565b906121ba565b600b55601b54601c54601954611c529291611c3191906121ba565b600c5560018611801590611c67575060018511155b611cb35760405162461bcd60e51b815260206004820152601a60248201527f4275726e20466565732063616e6e6f74206578636565642031250000000000006044820152606401610cd6565b6014600b5411158015611cc957506014600c5411155b611d215760405162461bcd60e51b815260206004820152602360248201527f746f74616c20666565732063616e6e6f7420626520686967686572207468616e60448201526220342560e81b6064820152608401610cd6565b601654601854601d54601954601a54601c54601754601b54604080519889526020890197909752958701949094526060860192909252608085015260a084015260c083015260e08201527f1640531881cbf0e2bf36c30fec3ed06b08e062adb13340f00fd16cedba09637a906101000160405180910390a15050505050505050565b6005546001600160a01b03163314611dcd5760405162461bcd60e51b8152600401610cd6906138b2565b6001600160a01b038116611e325760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610cd6565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611eb85760405162461bcd60e51b8152600401610cd6906138b2565b611eca81670de0b6b3a76400006138fd565b90506103e8600254611edc919061397d565b811015611f3e5760405162461bcd60e51b815260206004820152602a60248201527f6d61782077616c6c65742063616e6e6f742062652073657420746f206c657373604482015269207468616e20302e312560b01b6064820152608401610cd6565b601355565b6005546001600160a01b03163314611f6d5760405162461bcd60e51b8152600401610cd6906138b2565b601054600680546001600160a01b0319166001600160a01b0390921691821790556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015611fc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fed919061399f565b6001600160a01b031663c9c6539630600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561204f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612073919061399f565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156120c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120e4919061399f565b600780546001600160a01b0319166001600160a01b0392909216918217905561210e906001613132565b6006546121269030906001600160a01b0316836124e0565b6006546001600160a01b031663f305d71934308460008061214f6005546001600160a01b031690565b426040518863ffffffff1660e01b8152600401612171969594939291906139bc565b60606040518083038185885af115801561218f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906121b491906139f7565b50505050565b6000806121c78385613a25565b9050838110156122195760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610cd6565b9392505050565b60008260000361223257506000610f36565b600061223e83856138fd565b90508261224b858361397d565b146122195760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610cd6565b600061221983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613186565b806000036122ef5750565b6122f8816131b4565b601c54601954600191829160009161231091906121ba565b601d5460165461231f916121ba565b6123299190613a25565b9050600081156123405761233d47836122a2565b90505b60008161235a6016546019546121ba90919063ffffffff16565b61236491906138fd565b9050600082612380601d54601c546121ba90919063ffffffff16565b61238a91906138fd565b905081156123ea57600d546040516001600160a01b03909116908390600081818185875af1925050503d80600081146123df576040519150601f19603f3d011682016040523d82523d6000602084013e6123e4565b606091505b50909650505b801561244857600e546040516001600160a01b03909116908290600081818185875af1925050503d806000811461243d576040519150601f19603f3d011682016040523d82523d6000602084013e612442565b606091505b50909550505b7f31ea026303a62d39c4ad14716f9621f1afe3242309c2ed761d4e241ae4bf2ea96124738284613a25565b87801561247d5750865b6040805192835290151560208301520160405180910390a150505050505050565b600061221983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506130f8565b6001600160a01b0383166125425760405162461bcd60e51b8152602060048201526024808201527f42455032303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610cd6565b6001600160a01b0382166125a35760405162461bcd60e51b815260206004820152602260248201527f42455032303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610cd6565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166126695760405162461bcd60e51b815260206004820152602560248201527f42455032303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610cd6565b6001600160a01b0382166126cb5760405162461bcd60e51b815260206004820152602360248201527f42455032303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610cd6565b61270881604051806060016040528060268152602001613ae5602691396001600160a01b03861660009081526020819052604090205491906130f8565b6001600160a01b03808516600090815260208190526040808220939093559084168152205461273790826121ba565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016125f8565b6001600160a01b0383166127ed5760405162461bcd60e51b815260206004820152602660248201527f4942455032303a207472616e736665722066726f6d20746865207a65726f206160448201526564647265737360d01b6064820152608401610cd6565b6001600160a01b03821661284f5760405162461bcd60e51b8152602060048201526024808201527f4942455032303a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610cd6565b6001600160a01b03831660009081526022602052604081205481908190819060ff166128ce57600854600160a81b900460ff166128ce5760405162461bcd60e51b815260206004820181905260248201527f54726164696e6720686173206e6f7420796574206265656e20656e61626c65646044820152606401610cd6565b601054600160a01b900460ff161580156128f257506011546001600160a01b031615155b1561298957612901878761330e565b158061292557506001600160a01b03871660009081526012602052604090205460ff165b8061294857506001600160a01b03861660009081526012602052604090205460ff165b6129895760405162461bcd60e51b815260206004820152601260248201527121617661696c61626c652074726164696e6760701b6044820152606401610cd6565b846000036129a65761299d87876000612605565b50505050505050565b6008546001600160a01b03908116908716036129e0576129c7878787612605565b6002546129d4908661249e565b60025550505050505050565b600854600160a01b900460ff16158015612a1257506001600160a01b038716600090815260208052604090205460ff16155b8015612a3657506001600160a01b038616600090815260208052604090205460ff16155b15613029576001600160a01b0380871660009081526021602052604080822054928a16825290205460ff918216911680158015612a71575081155b15612ac2576000612a926064610d29601e548b61222090919063ffffffff16565b9050612a9e888261249e565b9750612aab8a3083612605565b612ab68a8a8a612605565b50505050505050505050565b8115612bb957601654601854601754601d54602354939950919750909550935060ff1615612bb457602b5432600090815260266020526040902054612b079190613a25565b421015612b4f5760405162461bcd60e51b8152602060048201526016602482015275636f6f6c646f776e20706572696f642061637469766560501b6044820152606401610cd6565b601454871115612ba15760405162461bcd60e51b815260206004820152601b60248201527f61626f7665206d6178207472616e73616374696f6e206c696d697400000000006044820152606401610cd6565b3260009081526026602052604090204290555b612dbc565b601954601a54601c54601b546023549399509197509550935060ff1615612d3a57602854602a54612bea9190613a25565b4211612c2d5760405162461bcd60e51b8152602060048201526012602482015271796f75207368616c6c206e6f74207061737360701b6044820152606401610cd6565b6024543a1115612c7f5760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401610cd6565b32600090815260256020526040902054439003612cd55760405162461bcd60e51b8152602060048201526014602482015273546f6f206d616e7920545820696e20626c6f636b60601b6044820152606401610cd6565b601454871115612d275760405162461bcd60e51b815260206004820152601b60248201527f61626f7665206d6178207472616e73616374696f6e206c696d697400000000006044820152606401610cd6565b3260009081526025602052604090204390555b6001600160a01b038816600090815260208190526040902054601354612d608983613a25565b1115612dba5760405162461bcd60e51b8152602060048201526024808201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6044820152633ab73a1760e11b6064820152608401610cd6565b505b6000612dcc84611c3189886121ba565b306000908152602081905260409020546015549192509081108015908190612e0d57506001600160a01b038c1660009081526021602052604090205460ff16155b15612f29576008805460ff60a01b1916600160a01b179055601f5460ff168015612e375750600086115b8015612e4557506000600c54115b15612ef7576000612e63600954600a546121ba90919063ffffffff16565b90506000612e8082610d29600a548761222090919063ffffffff16565b90506000612e9d83610d296009548861222090919063ffffffff16565b90506000612eba600c54610d298c8661222090919063ffffffff16565b90506000612ed7600b54610d298d8661222090919063ffffffff16565b90506000612ee582846121ba565b9050612ef081613383565b5050505050505b30600090815260208190526040902054612f10816122e4565b506001600a8190556009556008805460ff60a01b191690555b808015612f335750845b15612f7f576008805460ff60a01b1916600160a01b179055306000908152602081905260408120549050612f66816122e4565b506001600a8190556009556008805460ff60a01b191690555b6000612f906064610d298d87612220565b90506000612fa36064610d298e8d612220565b9050612fb9612fb28284613a25565b8d9061249e565b9b508615612fd657600954612fce90836121ba565b600955612fe7565b600a54612fe390836121ba565b600a555b612ff28e3084612605565b801561302157600854613010908f906001600160a01b031683612605565b60025461301d908261249e565b6002555b505050505050505b613034878787612605565b6006546001600160a01b0388811691161480159061306b57506001600160a01b03871660009081526021602052604090205460ff16155b801561308457506011546001600160a01b038781169116145b1561299d57601154604051633fb6b04560e11b8152600481018790526001600160a01b03898116602483015290911690637f6d608a90604401600060405180830381600087803b1580156130d757600080fd5b505af11580156130eb573d6000803e3d6000fd5b5050505050505050505050565b6000818484111561311c5760405162461bcd60e51b8152600401610cd6919061351e565b5060006131298486613a38565b95945050505050565b6001600160a01b038216600081815260216020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b600081836131a75760405162461bcd60e51b8152600401610cd6919061351e565b506000613129848661397d565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106131e9576131e961394e565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613242573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613266919061399f565b816001815181106132795761327961394e565b6001600160a01b03928316602091820292909201015260065461329f91309116846124e0565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac947906132d8908590600090869030904290600401613a4b565b600060405180830381600087803b1580156132f257600080fd5b505af1158015613306573d6000803e3d6000fd5b505050505050565b6001600160a01b03821660009081526021602052604081205460ff16801561334457506006546001600160a01b03838116911614155b1561335157506001610f36565b6001600160a01b03821660009081526021602052604090205460ff161561337a57506002610f36565b50600092915050565b60006133908260026122a2565b9050600061339e838361249e565b9050476133aa836131b4565b60006133b6478361249e565b90506133c2838261340a565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050505050565b6006546134229030906001600160a01b0316846124e0565b6006546001600160a01b031663f305d71982308560008061344b6005546001600160a01b031690565b426040518863ffffffff1660e01b815260040161346d969594939291906139bc565b60606040518083038185885af115801561348b573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906134b091906139f7565b5050505050565b6001600160a01b038116811461124f57600080fd5b600080604083850312156134df57600080fd5b82356134ea816134b7565b915060208301356134fa816134b7565b809150509250929050565b60006020828403121561351757600080fd5b5035919050565b600060208083528351808285015260005b8181101561354b5785810183015185820160400152820161352f565b506000604082860101526040601f19601f8301168501019250505092915050565b8035801515811461357c57600080fd5b919050565b6000806040838503121561359457600080fd5b823561359f816134b7565b91506135ad6020840161356c565b90509250929050565b600080604083850312156135c957600080fd5b82356135d4816134b7565b946020939093013593505050565b6000602082840312156135f457600080fd5b8135612219816134b7565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561363e5761363e6135ff565b604052919050565b600067ffffffffffffffff821115613660576136606135ff565b5060051b60200190565b600082601f83011261367b57600080fd5b8135602061369061368b83613646565b613615565b82815260059290921b840181019181810190868411156136af57600080fd5b8286015b848110156136ca57803583529183019183016136b3565b509695505050505050565b600080604083850312156136e857600080fd5b823567ffffffffffffffff8082111561370057600080fd5b818501915085601f83011261371457600080fd5b8135602061372461368b83613646565b82815260059290921b8401810191818101908984111561374357600080fd5b948201945b8386101561376a57853561375b816134b7565b82529482019490820190613748565b9650508601359250508082111561378057600080fd5b5061378d8582860161366a565b9150509250929050565b6000806000606084860312156137ac57600080fd5b83356137b7816134b7565b925060208401356137c7816134b7565b929592945050506040919091013590565b6000602082840312156137ea57600080fd5b6122198261356c565b600080600080600060a0868803121561380b57600080fd5b8535613816816134b7565b97602087013597506040870135966060810135965060800135945092505050565b60006020828403121561384957600080fd5b813563ffffffff8116811461221957600080fd5b600080600080600080600080610100898b03121561387a57600080fd5b505086359860208801359850604088013597606081013597506080810135965060a0810135955060c0810135945060e0013592509050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610f3657610f366138e7565b600181811c9082168061392857607f821691505b60208210810361394857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b600060018201613976576139766138e7565b5060010190565b60008261399a57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156139b157600080fd5b8151612219816134b7565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b600080600060608486031215613a0c57600080fd5b8351925060208401519150604084015190509250925092565b80820180821115610f3657610f366138e7565b81810381811115610f3657610f366138e7565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613a9b5784516001600160a01b031683529383019391830191600101613a76565b50506001600160a01b0396909616606085015250505060800152939250505056fe42455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636542455032303a207472616e7366657220616d6f756e7420657863656564732062616c616e636542455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220c8964b4e6361485dd65a3c17538f29b99dcbd683fbbbb2f68dd1c67f9987894464736f6c63430008110033
Deployed Bytecode Sourcemap
16290:21461:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2981:67;;;;;;;;;;-1:-1:-1;2981:67:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;689:25:1;;;677:2;662:18;2981:67:0;;;;;;;;16458:64;;;;;;;;;;-1:-1:-1;16458:64:0;;;;-1:-1:-1;;;;;16458:64:0;;;;;;-1:-1:-1;;;;;889:32:1;;;871:51;;859:2;844:18;16458:64:0;725:203:1;35361:443:0;;;;;;;;;;-1:-1:-1;35361:443:0;;;;;:::i;:::-;;:::i;:::-;;3283:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;23435:181::-;;;;;;;;;;-1:-1:-1;23435:181:0;;;;;:::i;:::-;;:::i;24338:166::-;;;;;;;;;;-1:-1:-1;24338:166:0;;;;;:::i;:::-;;:::i;4199:169::-;;;;;;;;;;-1:-1:-1;4199:169:0;;;;;:::i;:::-;;:::i;:::-;;;2641:14:1;;2634:22;2616:41;;2604:2;2589:18;4199:169:0;2476:187:1;16373:41:0;;;;;;;;;;-1:-1:-1;16373:41:0;;;;-1:-1:-1;;;;;16373:41:0;;;3604:108;;;;;;;;;;-1:-1:-1;3692:12:0;;3604:108;;18155:33;;;;;;;;;;;;;;;;22931:187;;;;;;;;;;-1:-1:-1;22931:187:0;;;;;:::i;:::-;;:::i;17009:55::-;;;;;;;;;;-1:-1:-1;17009:55:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;37187:561;;;;;;;;;;-1:-1:-1;37187:561:0;;;;;:::i;:::-;;:::i;4380:345::-;;;;;;;;;;-1:-1:-1;4380:345:0;;;;;:::i;:::-;;:::i;20649:93::-;;;;;;;;;;-1:-1:-1;20649:93:0;;20732:2;6245:36:1;;6233:2;6218:18;20649:93:0;6103:184:1;16835:28:0;;;;;;;;;;-1:-1:-1;16835:28:0;;;;-1:-1:-1;;;;;16835:28:0;;;4733:218;;;;;;;;;;-1:-1:-1;4733:218:0;;;;;:::i;:::-;;:::i;21776:258::-;;;;;;;;;;-1:-1:-1;21776:258:0;;;;;:::i;:::-;;:::i;16423:28::-;;;;;;;;;;-1:-1:-1;16423:28:0;;;;-1:-1:-1;;;;;16423:28:0;;;17742:33;;;;;;;;;;-1:-1:-1;17742:33:0;;;;;;;;17494:41;;;;;;;;;;-1:-1:-1;17494:41:0;;;;;;;;16557:34;;;;;;;;;;-1:-1:-1;16557:34:0;;;;-1:-1:-1;;;16557:34:0;;;;;;27123:126;;;;;;;;;;-1:-1:-1;27123:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;27213:28:0;27189:4;27213:28;;;:19;:28;;;;;;;;;27123:126;17287:31;;;;;;;;;;;;;;;;22710:205;;;;;;;;;;-1:-1:-1;22710:205:0;;;;;:::i;:::-;;:::i;24856:120::-;;;;;;;;;;-1:-1:-1;24856:120:0;;;;;:::i;:::-;;:::i;24121:209::-;;;;;;;;;;-1:-1:-1;24121:209:0;;;;;:::i;:::-;;:::i;23779:99::-;;;;;;;;;;-1:-1:-1;23779:99:0;;;;;:::i;:::-;;:::i;18057:20::-;;;;;;;;;;;;;;;;23127:294;;;;;;;;;;-1:-1:-1;23127:294:0;;;;;:::i;:::-;;:::i;24702:146::-;;;;;;;;;;;;;:::i;3722:127::-;;;;;;;;;;-1:-1:-1;3722:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;3823:18:0;3796:7;3823:18;;;;;;;;;;;;3722:127;7658:148;;;;;;;;;;;;;:::i;25544:212::-;;;;;;;;;;-1:-1:-1;25544:212:0;;;;;:::i;:::-;;:::i;16750:38::-;;;;;;;;;;-1:-1:-1;16750:38:0;;;;-1:-1:-1;;;;;16750:38:0;;;16945:32;;;;;;;;;;-1:-1:-1;16945:32:0;;;;-1:-1:-1;;;16945:32:0;;;;;;23624:147;;;;;;;;;;-1:-1:-1;23624:147:0;;;;;:::i;:::-;;:::i;20787:981::-;;;;;;;;;;-1:-1:-1;20787:981:0;;;;;:::i;:::-;;:::i;25765:234::-;;;;;;;;;;-1:-1:-1;25765:234:0;;;;;:::i;:::-;;:::i;18117:30::-;;;;;;;;;;;;;;;;7444:79;;;;;;;;;;-1:-1:-1;7509:6:0;;-1:-1:-1;;;;;7509:6:0;7444:79;;17177:32;;;;;;;;;;;;;;;;3391:104;;;;;;;;;;;;;:::i;25200:140::-;;;;;;;;;;-1:-1:-1;25200:140:0;;;;;:::i;:::-;;:::i;17394:24::-;;;;;;;;;;;;;;;;17425:25;;;;;;;;;;;;;;;;4959:286;;;;;;;;;;-1:-1:-1;4959:286:0;;;;;:::i;:::-;;:::i;3857:175::-;;;;;;;;;;-1:-1:-1;3857:175:0;;;;;:::i;:::-;;:::i;22389:143::-;;;;;;;;;;-1:-1:-1;22389:143:0;;;;;:::i;:::-;;:::i;17457:26::-;;;;;;;;;;;;;;;;17254;;;;;;;;;;;;;;;;16796:32;;;;;;;;;;-1:-1:-1;16796:32:0;;;;-1:-1:-1;;;;;16796:32:0;;;18006:26;;;;;;;;;;;;;;;;17603:57;;;;;;;;;;-1:-1:-1;17603:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;24512:174;;;;;;;;;;-1:-1:-1;24512:174:0;;;;;:::i;:::-;;:::i;24984:208::-;;;;;;;;;;-1:-1:-1;24984:208:0;;;;;:::i;:::-;;:::i;22548:146::-;;;;;;;;;;;;;:::i;4040:151::-;;;;;;;;;;-1:-1:-1;4040:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;4156:18:0;;;4129:7;4156:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4040:151;17137:33;;;;;;;;;;;;;;;;17325:25;;;;;;;;;;;;;;;;17110:20;;;;;;;;;;;;;;;;36877:302;;;;;;;;;;-1:-1:-1;36877:302:0;;;;;:::i;:::-;;:::i;17357:30::-;;;;;;;;;;;;;;;;26007:1108;;;;;;;;;;-1:-1:-1;26007:1108:0;;;;;:::i;:::-;;:::i;7821:244::-;;;;;;;;;;-1:-1:-1;7821:244:0;;;;;:::i;:::-;;:::i;17216:31::-;;;;;;;;;;;;;;;;16870:66;;;;;;;;;;-1:-1:-1;16870:66:0;;;;-1:-1:-1;;;;;16870:66:0;;;17079:24;;;;;;;;;;;;;;;;23888:221;;;;;;;;;;-1:-1:-1;23888:221:0;;;;;:::i;:::-;;:::i;34066:764::-;;;;;;:::i;:::-;;:::i;35361:443::-;7571:6;;-1:-1:-1;;;;;7571:6:0;205:10;7571:22;7563:67;;;;-1:-1:-1;;;7563:67:0;;;;;;;:::i;:::-;;;;;;;;;35449:17:::1;:6:::0;35459::::1;35449:17;:::i;:::-;35440:26;;35477:19;35499:25;35513:10;;35499:9;;:13;;:25;;;;:::i;:::-;35477:47;;35535:15;35553:38;35579:11;35553:21;35564:9;;35553:6;:10;;:21;;;;:::i;:::-;:25:::0;::::1;:38::i;:::-;35535:56;;35602:16;35621:39;35648:11;35621:22;35632:10;;35621:6;:10;;:22;;;;:::i;:39::-;35602:58;;35673:28;35694:6;35673:20;:28::i;:::-;35726:9;::::0;:22:::1;::::0;35740:7;35726:13:::1;:22::i;:::-;35714:9;:34:::0;35772:10:::1;::::0;:24:::1;::::0;35787:8;35772:14:::1;:24::i;:::-;35759:10;:37:::0;-1:-1:-1;;;;35361:443:0:o;3283:100::-;3337:13;3370:5;3363:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3283:100;:::o;23435:181::-;7571:6;;-1:-1:-1;;;;;7571:6:0;205:10;7571:22;7563:67;;;;-1:-1:-1;;;7563:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23519:28:0;::::1;;::::0;;;:19:::1;:28:::0;;;;;;;;:39;;-1:-1:-1;;23519:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;23574:34;;2616:41:1;;;23574:34:0::1;::::0;2589:18:1;23574:34:0::1;;;;;;;23435:181:::0;;:::o;24338:166::-;7571:6;;-1:-1:-1;;;;;7571:6:0;205:10;7571:22;7563:67;;;;-1:-1:-1;;;7563:67:0;;;;;;;:::i;:::-;24424:2:::1;24416:4;:10;;24408:48;;;::::0;-1:-1:-1;;;24408:48:0;;9427:2:1;24408:48:0::1;::::0;::::1;9409:21:1::0;9466:2;9446:18;;;9439:30;9505:27;9485:18;;;9478:55;9550:18;;24408:48:0::1;9225:349:1::0;24408:48:0::1;24483:13;:4:::0;24490:6:::1;24483:13;:::i;:::-;24467;:29:::0;-1:-1:-1;24338:166:0:o;4199:169::-;4282:4;4299:39;205:10;4322:7;4331:6;4299:8;:39::i;:::-;-1:-1:-1;4356:4:0;4199:169;;;;;:::o;22931:187::-;7571:6;;-1:-1:-1;;;;;7571:6:0;205:10;7571:22;7563:67;;;;-1:-1:-1;;;7563:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22999:27:0;::::1;;::::0;;;:19:::1;:27:::0;;;;;;;;:34;;-1:-1:-1;;22999:34:0::1;23029:4;22999:34;::::0;;23044:9:::1;:27:::0;;-1:-1:-1;;;;;;23044:27:0::1;::::0;::::1;::::0;;23087:23;;871:51:1;;;23087:23:0::1;::::0;844:18:1;23087:23:0::1;;;;;;;;22931:187:::0;:::o;37187:561::-;7571:6;;-1:-1:-1;;;;;7571:6:0;205:10;7571:22;7563:67;;;;-1:-1:-1;;;7563:67:0;;;;;;;:::i;:::-;37359:6:::1;:13;37334:14;:21;:38;37326:81;;;::::0;-1:-1:-1;;;37326:81:0;;9781:2:1;37326:81:0::1;::::0;::::1;9763:21:1::0;9820:2;9800:18;;;9793:30;9859:32;9839:18;;;9832:60;9909:18;;37326:81:0::1;9579:354:1::0;37326:81:0::1;37451:3;37426:14;:21;:28;;37418:75;;;::::0;-1:-1:-1;;;37418:75:0;;10140:2:1;37418:75:0::1;::::0;::::1;10122:21:1::0;10179:2;10159:18;;;10152:30;10218:34;10198:18;;;10191:62;-1:-1:-1;;;10269:18:1;;;10262:32;10311:19;;37418:75:0::1;9938:398:1::0;37418:75:0::1;37509:9;37504:237;37528:14;:21;37524:1;:25;37504:237;;;37571:14;37588;37603:1;37588:17;;;;;;;;:::i;:::-;;;;;;;37571:34;;37620:21;37644:6;37651:1;37644:9;;;;;;;;:::i;:::-;;;;;;;37657:6;37644:20;;;;:::i;:::-;37620:44;;37679:50;37695:10;37707:6;37715:13;37679:15;:50::i;:::-;37556:185;;37551:3;;;;;:::i;:::-;;;;37504:237;;;;37187:561:::0;;:::o;4380:345::-;4493:4;4510:36;4520:6;4528:9;4539:6;4510:9;:36::i;:::-;4557:138;4566:6;205:10;4588:106;4626:6;4588:106;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4588:19:0;;;;;;:11;:19;;;;;;;;205:10;4588:33;;;;;;;;;;:37;:106::i;:::-;4557:8;:138::i;:::-;-1:-1:-1;4713:4:0;4380:345;;;;;:::o;4733:218::-;205:10;4821:4;4870:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4870:34:0;;;;;;;;;;4821:4;;4838:83;;4861:7;;4870:50;;4909:10;4870:38;:50::i;21776:258::-;7571:6;;-1:-1:-1;;;;;7571:6:0;205:10;7571:22;7563:67;;;;-1:-1:-1;;;7563:67:0;;;;;;;:::i;:::-;21853:10:::1;:20:::0;;-1:-1:-1;;;;;;21853:20:0::1;-1:-1:-1::0;;;;;21853:20:0;::::1;::::0;;::::1;::::0;;;21888:21;21884:143:::1;;-1:-1:-1::0;;;;;21926:32:0;::::1;;::::0;;;:23:::1;:32;::::0;;;;;;;:39;;21961:4:::1;-1:-1:-1::0;;21926:39:0;;::::1;::::0;::::1;::::0;;;21980:28;;;;;:35;;;;::::1;::::0;;::::1;::::0;;21884:143:::1;21776:258:::0;:::o;22710:205::-;7571:6;;-1:-1:-1;;;;;7571:6:0;205:10;7571:22;7563:67;;;;-1:-1:-1;;;7563:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22784:27:0;::::1;;::::0;;;:19:::1;:27:::0;;;;;;;;:34;;-1:-1:-1;;22784:34:0::1;22814:4;22784:34;::::0;;22829:15:::1;:33:::0;;-1:-1:-1;;;;;;22829:33:0::1;::::0;::::1;::::0;;22878:29;;871:51:1;;;22878:29:0::1;::::0;844:18:1;22878:29:0::1;725:203:1::0;24856:120:0;7571:6;;-1:-1:-1;;;;;7571:6:0;205:10;7571:22;7563:67;;;;-1:-1:-1;;;7563:67:0;;;;;;;:::i;:::-;24951:17:::1;:6:::0;24961::::1;24951:17;:::i;:::-;24930:18;:38:::0;-1:-1:-1;24856:120:0:o;24121:209::-;7571:6;;-1:-1:-1;;;;;7571:6:0;205:10;7571:22;7563:67;;;;-1:-1:-1;;;7563:67:0;;;;;;;:::i;:::-;24192:16:::1;:5:::0;24201:6:::1;24192:16;:::i;:::-;24184:24;;24251:4;24236:12;;:19;;;;:::i;:::-;24227:5;:28;;24219:79;;;::::0;-1:-1:-1;;;24219:79:0;;11037:2:1;24219:79:0::1;::::0;::::1;11019:21:1::0;11076:2;11056:18;;;11049:30;11115:34;11095:18;;;11088:62;-1:-1:-1;;;11166:18:1;;;11159:36;11212:19;;24219:79:0::1;10835:402:1::0;24219:79:0::1;24309:5;:13:::0;24121:209::o;23779:99::-;7571:6;;-1:-1:-1;;;;;7571:6:0;205:10;7571:22;7563:67;;;;-1:-1:-1;;;7563:67:0;;;;;;;:::i;:::-;23848:14:::1;:22:::0;;-1:-1:-1;;23848:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23779:99::o;23127:294::-;7571:6;;-1:-1:-1;;;;;7571:6:0;205:10;7571:22;7563:67;;;;-1:-1:-1;;;7563:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23212:25:0;::::1;23204:53;;;::::0;-1:-1:-1;;;23204:53:0;;11444:2:1;23204:53:0::1;::::0;::::1;11426:21:1::0;11483:2;11463:18;;;11456:30;-1:-1:-1;;;11502:18:1;;;11495:45;11557:18;;23204:53:0::1;11242:339:1::0;23204:53:0::1;23301:13;::::0;;-1:-1:-1;;;;;23325:27:0;;::::1;-1:-1:-1::0;;;;;;23325:27:0;::::1;::::0;::::1;::::0;;;23370:43:::1;::::0;23301:13;::::1;::::0;;;23370:43:::1;::::0;23280:18:::1;::::0;23370:43:::1;23193:228;23127:294:::0;:::o;24702:146::-;7571:6;;-1:-1:-1;;;;;7571:6:0;205:10;7571:22;7563:67;;;;-1:-1:-1;;;7563:67:0;;;;;;;:::i;:::-;24801:39:::1;::::0;24769:21:::1;::::0;24809:10:::1;::::0;24801:39;::::1;;;::::0;24769:21;;24749:17:::1;24801:39:::0;24749:17;24801:39;24769:21;24809:10;24801:39;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;24738:110;24702:146::o:0;7658:148::-;7571:6;;-1:-1:-1;;;;;7571:6:0;205:10;7571:22;7563:67;;;;-1:-1:-1;;;7563:67:0;;;;;;;:::i;:::-;7749:6:::1;::::0;7728:40:::1;::::0;7765:1:::1;::::0;-1:-1:-1;;;;;7749:6:0::1;::::0;7728:40:::1;::::0;7765:1;;7728:40:::1;7779:6;:19:::0;;-1:-1:-1;;;;;;7779:19:0::1;::::0;;7658:148::o;25544:212::-;7571:6;;-1:-1:-1;;;;;7571:6:0;205:10;7571:22;7563:67;;;;-1:-1:-1;;;7563:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25613:29:0;::::1;;::::0;;;:19:::1;:29:::0;;;;;;;:36;;25645:4:::1;-1:-1:-1::0;;25613:36:0;;::::1;::::0;::::1;::::0;;;25660:33:::1;:43:::0;;;;;:50;;;;::::1;::::0;;::::1;::::0;;25721:27:::1;25613:29:::0;25721:17:::1;:27::i;23624:147::-:0;7571:6;;-1:-1:-1;;;;;7571:6:0;205:10;7571:22;7563:67;;;;-1:-1:-1;;;7563:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23713:41:0;;;::::1;;::::0;;;:33:::1;:41;::::0;;;;:50;;-1:-1:-1;;23713:50:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23624:147::o;20787:981::-;7571:6;;-1:-1:-1;;;;;7571:6:0;205:10;7571:22;7563:67;;;;-1:-1:-1;;;7563:67:0;;;;;;;:::i;:::-;20982:10:::1;:20:::0;;-1:-1:-1;;;;;;20982:20:0::1;-1:-1:-1::0;;;;;20982:20:0;::::1;::::0;;::::1;::::0;;;21017:21;21013:143:::1;;-1:-1:-1::0;;;;;21055:32:0;::::1;;::::0;;;:23:::1;:32;::::0;;;;;;;:39;;21090:4:::1;-1:-1:-1::0;;21055:39:0;;::::1;::::0;::::1;::::0;;;21109:28;;;;;:35;;;;::::1;::::0;;::::1;::::0;;21013:143:::1;21195:27;:16:::0;21215:6:::1;21195:27;:::i;:::-;21176:46:::0;-1:-1:-1;21248:23:0::1;:12:::0;21264:6:::1;21248:23;:::i;:::-;21291:14;::::0;21233:38;;-1:-1:-1;;;;21291:14:0;::::1;;;21290:15;21282:24;;;::::0;::::1;;21360:4;21345:12;;:19;;;;:::i;:::-;21325:16;:39;;21317:72;;;::::0;-1:-1:-1;;;21317:72:0;;11788:2:1;21317:72:0::1;::::0;::::1;11770:21:1::0;11827:2;11807:18;;;11800:30;-1:-1:-1;;;11846:18:1;;;11839:51;11907:18;;21317:72:0::1;11586:345:1::0;21317:72:0::1;21439:4;21424:12;;:19;;;;:::i;:::-;21408:12;:35;;21400:68;;;::::0;-1:-1:-1;;;21400:68:0;;11788:2:1;21400:68:0::1;::::0;::::1;11770:21:1::0;11827:2;11807:18;;;11800:30;-1:-1:-1;;;11846:18:1;;;11839:51;11907:18;;21400:68:0::1;11586:345:1::0;21400:68:0::1;21479:9;:28:::0;;;21518:5:::1;:20:::0;;;21565:23:::1;:14:::0;21582:6:::1;21565:23;:::i;:::-;21549:13;:39:::0;21599:14:::1;:21:::0;;-1:-1:-1;;;;21599:21:0::1;-1:-1:-1::0;;;21599:21:0::1;::::0;;21645:12:::1;21631:11;:26:::0;21686:15:::1;21668;:33:::0;21712:5:::1;:16:::0;;;21744::::1;::::0;::::1;::::0;21599:21;;21744:16:::1;20787:981:::0;;;;;:::o;25765:234::-;7571:6;;-1:-1:-1;;;;;7571:6:0;205:10;7571:22;7563:67;;;;-1:-1:-1;;;7563:67:0;;;;;;;:::i;:::-;25871:1:::1;25853:14;:19;;25844:62;;;::::0;-1:-1:-1;;;25844:62:0;;12138:2:1;25844:62:0::1;::::0;::::1;12120:21:1::0;12177:2;12157:18;;;12150:30;12216:31;12196:18;;;12189:59;12265:18;;25844:62:0::1;11936:353:1::0;25844:62:0::1;25917:11;:28:::0;;;25961:30:::1;::::0;689:25:1;;;25961:30:0::1;::::0;677:2:1;662:18;25961:30:0::1;543:177:1::0;3391:104:0;3447:13;3480:7;3473:14;;;;;:::i;25200:140::-;7571:6;;-1:-1:-1;;;;;7571:6:0;205:10;7571:22;7563:67;;;;-1:-1:-1;;;7563:67:0;;;;;;;:::i;:::-;25291:41:::1;25320:4;25326:5;25291:28;:41::i;4959:286::-:0;5052:4;5069:146;205:10;5092:7;5101:113;5140:15;5101:113;;;;;;;;;;;;;;;;;205:10;5101:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5101:34:0;;;;;;;;;;;;:38;:113::i;3857:175::-;3943:4;3960:42;205:10;3984:9;3995:6;3960:9;:42::i;22389:143::-;7571:6;;-1:-1:-1;;;;;7571:6:0;205:10;7571:22;7563:67;;;;-1:-1:-1;;;7563:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22482:30:0;;;::::1;;::::0;;;:23:::1;:30;::::0;;;;:38;;-1:-1:-1;;22482:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22389:143::o;24512:174::-;7571:6;;-1:-1:-1;;;;;7571:6:0;205:10;7571:22;7563:67;;;;-1:-1:-1;;;7563:67:0;;;;;;;:::i;:::-;24600:3:::1;24591:5;:12;;24583:63;;;::::0;-1:-1:-1;;;24583:63:0;;12496:2:1;24583:63:0::1;::::0;::::1;12478:21:1::0;12535:2;12515:18;;;12508:30;12574:34;12554:18;;;12547:62;-1:-1:-1;;;12625:18:1;;;12618:36;12671:19;;24583:63:0::1;12294:402:1::0;24583:63:0::1;24657:13;:21:::0;24512:174::o;24984:208::-;7571:6;;-1:-1:-1;;;;;7571:6:0;205:10;7571:22;7563:67;;;;-1:-1:-1;;;7563:67:0;;;;;;;:::i;:::-;25064:21:::1;::::0;:32;::::1;;:21;::::0;;::::1;:32;;::::0;25056:41:::1;;;::::0;::::1;;25108:21;:31:::0;;-1:-1:-1;;25108:31:0::1;::::0;::::1;;::::0;;::::1;::::0;;;25155:29:::1;::::0;2616:41:1;;;25155:29:0::1;::::0;2604:2:1;2589:18;25155:29:0::1;2476:187:1::0;22548:146:0;7571:6;;-1:-1:-1;;;;;7571:6:0;205:10;7571:22;7563:67;;;;-1:-1:-1;;;7563:67:0;;;;;;;:::i;:::-;22615:20:::1;::::0;-1:-1:-1;;;22615:20:0;::::1;;;22614:21;22606:30;;;::::0;::::1;;22655:20;:27:::0;;-1:-1:-1;;;;22655:27:0::1;-1:-1:-1::0;;;22655:27:0::1;::::0;;22548:146::o;36877:302::-;205:10;36937:4;36993:18;;;:11;:18;;;;;;;;37012:13;;;-1:-1:-1;;;;;37012:13:0;;;36993:33;;;;;;;;-1:-1:-1;;36993:50:0;;;;37064:13;;;;;4156:18;;;;;;;;;:27;;;;;37101:46;;689:25:1;;;37101:46:0;;36937:4;;205:10;;;37101:46;;;;;;;;-1:-1:-1;37167:4:0;;36877:302;-1:-1:-1;;36877:302:0:o;26007:1108::-;7571:6;;-1:-1:-1;;;;;7571:6:0;205:10;7571:22;7563:67;;;;-1:-1:-1;;;7563:67:0;;;;;;;:::i;:::-;26242:16:::1;:31:::0;;;26284:10:::1;:20:::0;;;26315:17:::1;:33:::0;;;26359:15:::1;:30:::0;;;26400:16:::1;:32:::0;;;26443:11:::1;:22:::0;;;26476:9:::1;:18:::0;;;26505:10:::1;:20:::0;;;26556:75:::1;26419:13:::0;26556:43:::1;26335:13:::0;26518:7;26556:31:::1;:43::i;:::-;:57:::0;::::1;:75::i;:::-;26540:13;:91:::0;26723:15:::1;::::0;26698:9:::1;::::0;26667:16:::1;::::0;:72:::1;::::0;26723:15;26667:41:::1;::::0;:16;:30:::1;:41::i;:72::-;26652:12;:87:::0;26783:1:::1;26772:12:::0;::::1;::::0;::::1;::::0;:29:::1;;;26800:1;26788:8;:13;;26772:29;26764:68;;;::::0;-1:-1:-1;;;26764:68:0;;12903:2:1;26764:68:0::1;::::0;::::1;12885:21:1::0;12942:2;12922:18;;;12915:30;12981:28;12961:18;;;12954:56;13027:18;;26764:68:0::1;12701:350:1::0;26764:68:0::1;26868:2;26851:13;;:19;;:41;;;;;26890:2;26874:12;;:18;;26851:41;26843:89;;;::::0;-1:-1:-1;;;26843:89:0;;13258:2:1;26843:89:0::1;::::0;::::1;13240:21:1::0;13297:2;13277:18;;;13270:30;13336:34;13316:18;;;13309:62;-1:-1:-1;;;13387:18:1;;;13380:33;13430:19;;26843:89:0::1;13056:399:1::0;26843:89:0::1;26961:17;::::0;26980:11:::1;::::0;26993:10:::1;::::0;27005:16:::1;::::0;27048:10:::1;::::0;27060:9:::1;::::0;27072:16:::1;::::0;27091:15:::1;::::0;26950:157:::1;::::0;;13803:25:1;;;13859:2;13844:18;;13837:34;;;;13887:18;;;13880:34;;;;13945:2;13930:18;;13923:34;;;;13988:3;13973:19;;13966:35;14032:3;14017:19;;14010:35;14076:3;14061:19;;14054:35;14120:3;14105:19;;14098:35;26950:157:0::1;::::0;13790:3:1;13775:19;26950:157:0::1;;;;;;;26007:1108:::0;;;;;;;;:::o;7821:244::-;7571:6;;-1:-1:-1;;;;;7571:6:0;205:10;7571:22;7563:67;;;;-1:-1:-1;;;7563:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7910:22:0;::::1;7902:73;;;::::0;-1:-1:-1;;;7902:73:0;;14346:2:1;7902:73:0::1;::::0;::::1;14328:21:1::0;14385:2;14365:18;;;14358:30;14424:34;14404:18;;;14397:62;-1:-1:-1;;;14475:18:1;;;14468:36;14521:19;;7902:73:0::1;14144:402:1::0;7902:73:0::1;8012:6;::::0;7991:38:::1;::::0;-1:-1:-1;;;;;7991:38:0;;::::1;::::0;8012:6:::1;::::0;7991:38:::1;::::0;8012:6:::1;::::0;7991:38:::1;8040:6;:17:::0;;-1:-1:-1;;;;;;8040:17:0::1;-1:-1:-1::0;;;;;8040:17:0;;;::::1;::::0;;;::::1;::::0;;7821:244::o;23888:221::-;7571:6;;-1:-1:-1;;;;;7571:6:0;205:10;7571:22;7563:67;;;;-1:-1:-1;;;7563:67:0;;;;;;;:::i;:::-;23963:16:::1;:5:::0;23972:6:::1;23963:16;:::i;:::-;23955:24;;24022:4;24007:12;;:19;;;;:::i;:::-;23998:5;:28;;23990:83;;;::::0;-1:-1:-1;;;23990:83:0;;14753:2:1;23990:83:0::1;::::0;::::1;14735:21:1::0;14792:2;14772:18;;;14765:30;14831:34;14811:18;;;14804:62;-1:-1:-1;;;14882:18:1;;;14875:40;14932:19;;23990:83:0::1;14551:406:1::0;23990:83:0::1;24084:9;:17:::0;23888:221::o;34066:764::-;7571:6;;-1:-1:-1;;;;;7571:6:0;205:10;7571:22;7563:67;;;;-1:-1:-1;;;7563:67:0;;;;;;;:::i;:::-;34254:6:::1;::::0;34217:15:::1;:44:::0;;-1:-1:-1;;;;;;34217:44:0::1;-1:-1:-1::0;;;;;34254:6:0;;::::1;34217:44:::0;;::::1;::::0;;34306:25:::1;::::0;;-1:-1:-1;;;34306:25:0;;;;:23:::1;::::0;:25:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;34254:6;34306:25:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;34288:55:0::1;;34352:4;34359:15;;;;;;;;;-1:-1:-1::0;;;;;34359:15:0::1;-1:-1:-1::0;;;;;34359:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34288:94;::::0;-1:-1:-1;;;;;;34288:94:0::1;::::0;;;;;;-1:-1:-1;;;;;15448:15:1;;;34288:94:0::1;::::0;::::1;15430:34:1::0;15500:15;;15480:18;;;15473:43;15365:18;;34288:94:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34272:13;:110:::0;;-1:-1:-1;;;;;;34272:110:0::1;-1:-1:-1::0;;;;;34272:110:0;;;::::1;::::0;;::::1;::::0;;34395:49:::1;::::0;-1:-1:-1;34395:28:0::1;:49::i;:::-;34497:15;::::0;34465:62:::1;::::0;34482:4:::1;::::0;-1:-1:-1;;;;;34497:15:0::1;34515:11:::0;34465:8:::1;:62::i;:::-;34570:15;::::0;-1:-1:-1;;;;;34570:15:0::1;:31;34609:9;34642:4;34662:11:::0;34570:15:::1;::::0;34774:7:::1;7509:6:::0;;-1:-1:-1;;;;;7509:6:0;;7444:79;34774:7:::1;34796:15;34570:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;34066:764:::0;:::o;501:179::-;559:7;;591:5;595:1;591;:5;:::i;:::-;579:17;;620:1;615;:6;;607:46;;;;-1:-1:-1;;;607:46:0;;16782:2:1;607:46:0;;;16764:21:1;16821:2;16801:18;;;16794:30;16860:29;16840:18;;;16833:57;16907:18;;607:46:0;16580:351:1;607:46:0;671:1;501:179;-1:-1:-1;;;501:179:0:o;1030:248::-;1088:7;1112:1;1117;1112:6;1108:47;;-1:-1:-1;1142:1:0;1135:8;;1108:47;1167:9;1179:5;1183:1;1179;:5;:::i;:::-;1167:17;-1:-1:-1;1212:1:0;1203:5;1207:1;1167:17;1203:5;:::i;:::-;:10;1195:56;;;;-1:-1:-1;;;1195:56:0;;17138:2:1;1195:56:0;;;17120:21:1;17177:2;17157:18;;;17150:30;17216:34;17196:18;;;17189:62;-1:-1:-1;;;17267:18:1;;;17260:31;17308:19;;1195:56:0;16936:397:1;1286:132:0;1344:7;1371:39;1375:1;1378;1371:39;;;;;;;;;;;;;;;;;:3;:39::i;35837:1031::-;35906:6;35916:1;35906:11;35902:50;;35837:1031;:::o;35902:50::-;35962:24;35979:6;35962:16;:24::i;:::-;36153:9;;36132:16;;36014:4;;;;35999:12;;36132:31;;:16;:20;:31::i;:::-;36118:10;;36096:17;;:33;;:21;:33::i;:::-;:67;;;;:::i;:::-;36072:91;-1:-1:-1;36176:19:0;36210:17;;36206:104;;36258:40;:21;36284:13;36258:25;:40::i;:::-;36244:54;;36206:104;36320:23;36388:11;36346:39;36367:17;;36346:16;;:20;;:39;;;;:::i;:::-;:53;;;;:::i;:::-;36320:79;;36410:17;36458:11;36430:25;36444:10;;36430:9;;:13;;:25;;;;:::i;:::-;:39;;;;:::i;:::-;36410:59;-1:-1:-1;36494:19:0;;36490:123;;36552:15;;36544:57;;-1:-1:-1;;;;;36552:15:0;;;;36581;;36544:57;;;;36581:15;36552;36544:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36530:71:0;;-1:-1:-1;;36490:123:0;36637:13;;36633:108;;36692:9;;36684:45;;-1:-1:-1;;;;;36692:9:0;;;;36715;;36684:45;;;;36715:9;36692;36684:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36667:62:0;;-1:-1:-1;;36633:108:0;36758:102;36786:27;36804:9;36786:15;:27;:::i;:::-;36828:7;:21;;;;;36839:10;36828:21;36758:102;;;17716:25:1;;;17784:14;;17777:22;17772:2;17757:18;;17750:50;17689:18;36758:102:0;;;;;;;35891:977;;;;;;35837:1031;:::o;688:136::-;746:7;773:43;777:1;780;773:43;;;;;;;;;;;;;;;;;:3;:43::i;6648:346::-;-1:-1:-1;;;;;6750:19:0;;6742:68;;;;-1:-1:-1;;;6742:68:0;;18013:2:1;6742:68:0;;;17995:21:1;18052:2;18032:18;;;18025:30;18091:34;18071:18;;;18064:62;-1:-1:-1;;;18142:18:1;;;18135:34;18186:19;;6742:68:0;17811:400:1;6742:68:0;-1:-1:-1;;;;;6829:21:0;;6821:68;;;;-1:-1:-1;;;6821:68:0;;18418:2:1;6821:68:0;;;18400:21:1;18457:2;18437:18;;;18430:30;18496:34;18476:18;;;18469:62;-1:-1:-1;;;18547:18:1;;;18540:32;18589:19;;6821:68:0;18216:398:1;6821:68:0;-1:-1:-1;;;;;6902:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;6954:32;;689:25:1;;;6954:32:0;;662:18:1;6954:32:0;;;;;;;;6648:346;;;:::o;5253:538::-;-1:-1:-1;;;;;5359:20:0;;5351:70;;;;-1:-1:-1;;;5351:70:0;;18821:2:1;5351:70:0;;;18803:21:1;18860:2;18840:18;;;18833:30;18899:34;18879:18;;;18872:62;-1:-1:-1;;;18950:18:1;;;18943:35;18995:19;;5351:70:0;18619:401:1;5351:70:0;-1:-1:-1;;;;;5440:23:0;;5432:71;;;;-1:-1:-1;;;5432:71:0;;19227:2:1;5432:71:0;;;19209:21:1;19266:2;19246:18;;;19239:30;19305:34;19285:18;;;19278:62;-1:-1:-1;;;19356:18:1;;;19349:33;19399:19;;5432:71:0;19025:399:1;5432:71:0;5596:70;5618:6;5596:70;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5596:17:0;;:9;:17;;;;;;;;;;;;:70;:21;:70::i;:::-;-1:-1:-1;;;;;5576:17:0;;;:9;:17;;;;;;;;;;;:90;;;;5700:20;;;;;;;:32;;5725:6;5700:24;:32::i;:::-;-1:-1:-1;;;;;5677:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;5748:35;689:25:1;;;5677:20:0;;5748:35;;;;;;662:18:1;5748:35:0;543:177:1;27257:5806:0;-1:-1:-1;;;;;27367:18:0;;27359:69;;;;-1:-1:-1;;;27359:69:0;;19631:2:1;27359:69:0;;;19613:21:1;19670:2;19650:18;;;19643:30;19709:34;19689:18;;;19682:62;-1:-1:-1;;;19760:18:1;;;19753:36;19806:19;;27359:69:0;19429:402:1;27359:69:0;-1:-1:-1;;;;;27447:16:0;;27439:65;;;;-1:-1:-1;;;27439:65:0;;20038:2:1;27439:65:0;;;20020:21:1;20077:2;20057:18;;;20050:30;20116:34;20096:18;;;20089:62;-1:-1:-1;;;20167:18:1;;;20160:34;20211:19;;27439:65:0;19836:400:1;27439:65:0;-1:-1:-1;;;;;27641:39:0;;27517:21;27641:39;;;:33;:39;;;;;;27517:21;;;;;;27641:39;;27636:142;;27705:14;;-1:-1:-1;;;27705:14:0;;;;27697:59;;;;-1:-1:-1;;;27697:59:0;;20443:2:1;27697:59:0;;;20425:21:1;;;20462:18;;;20455:30;20521:34;20501:18;;;20494:62;20573:18;;27697:59:0;20241:356:1;27697:59:0;27794:20;;-1:-1:-1;;;27794:20:0;;;;:29;;;:57;;-1:-1:-1;27827:10:0;;-1:-1:-1;;;;;27827:10:0;:24;;27794:57;27790:209;;;27876:19;27886:4;27892:2;27876:9;:19::i;:::-;:24;;:57;;-1:-1:-1;;;;;;27904:29:0;;;;;;:23;:29;;;;;;;;27876:57;:88;;;-1:-1:-1;;;;;;27937:27:0;;;;;;:23;:27;;;;;;;;27876:88;27868:119;;;;-1:-1:-1;;;27868:119:0;;20804:2:1;27868:119:0;;;20786:21:1;20843:2;20823:18;;;20816:30;-1:-1:-1;;;20862:18:1;;;20855:48;20920:18;;27868:119:0;20602:342:1;27868:119:0;28023:6;28033:1;28023:11;28019:93;;28051:28;28067:4;28073:2;28077:1;28051:15;:28::i;:::-;28094:7;;;;27257:5806;;;:::o;28019:93::-;28135:4;;-1:-1:-1;;;;;28135:4:0;;;28129:10;;;;28125:4676;;28156:33;28172:4;28178:2;28182:6;28156:15;:33::i;:::-;28219:12;;:24;;28236:6;28219:16;:24::i;:::-;28204:12;:39;-1:-1:-1;;;;;;;27257:5806:0:o;28125:4676::-;28320:8;;-1:-1:-1;;;28320:8:0;;;;28319:9;:39;;;;-1:-1:-1;;;;;;28333:25:0;;;;;;:19;:25;;;;;;;;28332:26;28319:39;:67;;;;-1:-1:-1;;;;;;28363:23:0;;;;;;:19;:23;;;;;;;;28362:24;28319:67;28301:4500;;;-1:-1:-1;;;;;28420:29:0;;;28403:14;28420:29;;;:25;:29;;;;;;;28480:31;;;;;;;;28420:29;;;;;28480:31;28544:9;;:23;;;;;28558:9;28557:10;28544:23;28540:1792;;;28588:13;28604:32;28632:3;28604:23;28615:11;;28604:6;:10;;:23;;;;:::i;:32::-;28588:48;-1:-1:-1;28664:17:0;:6;28588:48;28664:10;:17::i;:::-;28655:26;;28700:43;28716:4;28730;28737:5;28700:15;:43::i;:::-;28762:33;28778:4;28784:2;28788:6;28762:15;:33::i;:::-;28814:7;;;;;;;27257:5806;;;:::o;28540:1792::-;28847:9;28843:1489;;;28893:17;;28939:11;;28984:16;;29028:10;;29097:14;;28893:17;;-1:-1:-1;28939:11:0;;-1:-1:-1;29028:10:0;;-1:-1:-1;28984:16:0;-1:-1:-1;29097:14:0;;29093:344;;;29201:13;;29188:9;29159:39;;;;:28;:39;;;;;;:55;;29201:13;29159:55;:::i;:::-;29140:15;:74;;29132:134;;;;-1:-1:-1;;;29132:134:0;;21151:2:1;29132:134:0;;;21133:21:1;21190:2;21170:18;;;21163:30;-1:-1:-1;;;21209:18:1;;;21202:52;21271:18;;29132:134:0;20949:346:1;29132:134:0;29303:5;;29293:6;:15;;29285:54;;;;-1:-1:-1;;;29285:54:0;;21502:2:1;29285:54:0;;;21484:21:1;21541:2;21521:18;;;21514:30;21580:29;21560:18;;;21553:57;21627:18;;29285:54:0;21300:351:1;29285:54:0;29387:9;29358:39;;;;:28;:39;;;;;29400:15;29358:57;;29093:344;28843:1489;;;29493:16;;29538:10;;29576:9;;29619:15;;29658:14;;29493:16;;-1:-1:-1;29538:10:0;;-1:-1:-1;29576:9:0;-1:-1:-1;29619:15:0;-1:-1:-1;29658:14:0;;29654:453;;;29737:5;;29719:15;;:23;;;;:::i;:::-;29701:15;:41;29693:71;;;;-1:-1:-1;;;29693:71:0;;21858:2:1;29693:71:0;;;21840:21:1;21897:2;21877:18;;;21870:30;-1:-1:-1;;;21916:18:1;;;21909:48;21974:18;;29693:71:0;21656:342:1;29693:71:0;29806:13;;29791:11;:28;;29783:64;;;;-1:-1:-1;;;29783:64:0;;22205:2:1;29783:64:0;;;22187:21:1;22244:2;22224:18;;;22217:30;22283:26;22263:18;;;22256:54;22327:18;;29783:64:0;22003:348:1;29783:64:0;29899:9;29874:35;;;;:24;:35;;;;;;29913:12;29874:51;;29866:83;;;;-1:-1:-1;;;29866:83:0;;22558:2:1;29866:83:0;;;22540:21:1;22597:2;22577:18;;;22570:30;-1:-1:-1;;;22616:18:1;;;22609:50;22676:18;;29866:83:0;22356:344:1;29866:83:0;29986:5;;29976:6;:15;;29968:54;;;;-1:-1:-1;;;29968:54:0;;21502:2:1;29968:54:0;;;21484:21:1;21541:2;21521:18;;;21514:30;21580:29;21560:18;;;21553:57;21627:18;;29968:54:0;21300:351:1;29968:54:0;30066:9;30041:35;;;;:24;:35;;;;;30079:12;30041:50;;29654:453;-1:-1:-1;;;;;3823:18:0;;30140:32;3823:18;;;;;;;;;;;30252:9;;30215:33;30242:6;3823:18;30215:33;:::i;:::-;:46;;30207:95;;;;-1:-1:-1;;;30207:95:0;;22907:2:1;30207:95:0;;;22889:21:1;22946:2;22926:18;;;22919:30;22985:34;22965:18;;;22958:62;-1:-1:-1;;;23036:18:1;;;23029:34;23080:19;;30207:95:0;22705:400:1;30207:95:0;29458:874;28843:1489;30348:17;30368:71;30426:12;30368:39;:13;30400:6;30368:31;:39::i;:71::-;30505:4;30456:28;3823:18;;;;;;;;;;;30567;;30348:91;;-1:-1:-1;3823:18:0;30543:42;;;;;;;30604:43;;-1:-1:-1;;;;;;30616:31:0;;;;;;:25;:31;;;;;;;;30615:32;30604:43;30600:1251;;;30668:8;:15;;-1:-1:-1;;;;30668:15:0;-1:-1:-1;;;30668:15:0;;;30708:21;;30668:15;30708:21;:41;;;;;30748:1;30733:12;:16;30708:41;:61;;;;;30768:1;30753:12;;:16;30708:61;30704:903;;;30794:20;30817:25;30831:10;;30817:9;;:13;;:25;;;;:::i;:::-;30794:48;;30865:24;30892:105;30984:12;30892:61;30943:9;;30892:20;:50;;:61;;;;:::i;:105::-;30865:132;;31020:22;31045:106;31138:12;31045:62;31096:10;;31045:20;:50;;:62;;;;:::i;:106::-;31020:131;;31176:21;31200:104;31291:12;;31200:60;31247:12;31200:16;:46;;:60;;;;:::i;:104::-;31176:128;;31329:22;31354:103;31443:13;;31354:58;31399:12;31354:14;:44;;:58;;;;:::i;:103::-;31329:128;-1:-1:-1;31482:18:0;31503:33;31329:128;31522:13;31503:18;:33::i;:::-;31482:54;;31561:26;31576:10;31561:14;:26::i;:::-;30771:836;;;;;;30704:903;31672:4;31627:24;3823:18;;;;;;;;;;;31697:38;3823:18;31697:20;:38::i;:::-;-1:-1:-1;31766:1:0;31754:9;:13;;;31786:10;:14;31819:8;:16;;-1:-1:-1;;;;31819:16:0;;;30600:1251;31873:7;:20;;;;;31884:9;31873:20;31869:308;;;31914:8;:15;;-1:-1:-1;;;;31914:15:0;-1:-1:-1;;;31914:15:0;;;32003:4;-1:-1:-1;3823:18:0;;;;;;;;;;;31963:46;;32028:33;32049:11;32028:20;:33::i;:::-;-1:-1:-1;32092:1:0;32080:9;:13;;;32112:10;:14;32145:8;:16;;-1:-1:-1;;;;32145:16:0;;;31869:308;32203:12;32218:30;32244:3;32218:21;:6;32229:9;32218:10;:21::i;:30::-;32203:45;-1:-1:-1;32263:18:0;32284:28;32308:3;32284:19;:6;32295:7;32284:10;:19::i;:28::-;32263:49;-1:-1:-1;32340:29:0;32351:17;32263:49;32351:4;:17;:::i;:::-;32340:6;;:10;:29::i;:::-;32331:38;;32391:9;32387:155;;;32434:10;;:20;;32449:4;32434:14;:20::i;:::-;32421:10;:33;32387:155;;;32507:9;;:19;;32521:4;32507:13;:19::i;:::-;32495:9;:31;32387:155;32558:42;32574:4;32588;32595;32558:15;:42::i;:::-;32621:14;;32617:156;;32678:4;;32656:39;;32672:4;;-1:-1:-1;;;;;32678:4:0;32684:10;32656:15;:39::i;:::-;32729:12;;:28;;32746:10;32729:16;:28::i;:::-;32714:12;:43;32617:156;28388:4413;;;;;;;28301:4500;32813:33;32829:4;32835:2;32839:6;32813:15;:33::i;:::-;32879:15;;-1:-1:-1;;;;;32863:32:0;;;32879:15;;32863:32;;;;:68;;-1:-1:-1;;;;;;32900:31:0;;;;;;:25;:31;;;;;;;;32899:32;32863:68;:88;;;;-1:-1:-1;32941:10:0;;-1:-1:-1;;;;;32935:16:0;;;32941:10;;32935:16;32863:88;32859:179;;;32982:10;;32968:58;;-1:-1:-1;;;32968:58:0;;;;;23284:25:1;;;-1:-1:-1;;;;;23345:32:1;;;23325:18;;;23318:60;32982:10:0;;;;32968:44;;23257:18:1;;32968:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27336:5727;;;;27257:5806;;;:::o;832:190::-;918:7;954:12;946:6;;;;938:29;;;;-1:-1:-1;;;938:29:0;;;;;;;;:::i;:::-;-1:-1:-1;978:9:0;990:5;994:1;990;:5;:::i;:::-;978:17;832:190;-1:-1:-1;;;;;832:190:0:o;25348:188::-;-1:-1:-1;;;;;25431:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;25431:39:0;;;;;;;;;;25488:40;;25431:39;;:31;25488:40;;;25348:188;;:::o;1426:189::-;1512:7;1547:12;1540:5;1532:28;;;;-1:-1:-1;;;1532:28:0;;;;;;;;:::i;:::-;-1:-1:-1;1571:9:0;1583:5;1587:1;1583;:5;:::i;33559:499::-;33649:16;;;33663:1;33649:16;;;;;;;;33625:21;;33649:16;;;;;;;;;;-1:-1:-1;33649:16:0;33625:40;;33694:4;33676;33681:1;33676:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;33676:23:0;;;:7;;;;;;;;;;:23;;;;33720:15;;:22;;;-1:-1:-1;;;33720:22:0;;;;:15;;;;;:20;;:22;;;;;33676:7;;33720:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33710:4;33715:1;33710:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;33710:32:0;;;:7;;;;;;;;;:32;33785:15;;33753:62;;33770:4;;33785:15;33803:11;33753:8;:62::i;:::-;33826:15;;:224;;-1:-1:-1;;;33826:224:0;;-1:-1:-1;;;;;33826:15:0;;;;:66;;:224;;33907:11;;33826:15;;33977:4;;34004;;34024:15;;33826:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33614:444;33559:499;:::o;22046:327::-;-1:-1:-1;;;;;22169:34:0;;22143:4;22169:34;;;:25;:34;;;;;;;;:76;;;;-1:-1:-1;22229:15:0;;-1:-1:-1;;;;;22207:38:0;;;22229:15;;22207:38;;22169:76;22165:90;;;-1:-1:-1;22254:1:0;22247:8;;22165:90;-1:-1:-1;;;;;22284:37:0;;;;;;:25;:37;;;;;;;;22280:51;;;-1:-1:-1;22330:1:0;22323:8;;22280:51;-1:-1:-1;22364:1:0;22046:327;;;;:::o;33071:480::-;33130:12;33145:13;:6;33156:1;33145:10;:13::i;:::-;33130:28;-1:-1:-1;33169:17:0;33189:16;:6;33130:28;33189:10;:16::i;:::-;33169:36;-1:-1:-1;33241:21:0;33273:22;33290:4;33273:16;:22::i;:::-;33376:18;33397:41;:21;33423:14;33397:25;:41::i;:::-;33376:62;;33449:35;33462:9;33473:10;33449:12;:35::i;:::-;33500:43;;;24709:25:1;;;24765:2;24750:18;;24743:34;;;24793:18;;;24786:34;;;33500:43:0;;24697:2:1;24682:18;33500:43:0;;;;;;;33119:432;;;;33071:480;:::o;34840:513::-;35020:15;;34988:62;;35005:4;;-1:-1:-1;;;;;35020:15:0;35038:11;34988:8;:62::i;:::-;35093:15;;-1:-1:-1;;;;;35093:15:0;:31;35132:9;35165:4;35185:11;35093:15;;35297:7;7509:6;;-1:-1:-1;;;;;7509:6:0;;7444:79;35297:7;35319:15;35093:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;34840:513;;:::o;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:388;218:6;226;279:2;267:9;258:7;254:23;250:32;247:52;;;295:1;292;285:12;247:52;334:9;321:23;353:31;378:5;353:31;:::i;:::-;403:5;-1:-1:-1;460:2:1;445:18;;432:32;473:33;432:32;473:33;:::i;:::-;525:7;515:17;;;150:388;;;;;:::o;933:180::-;992:6;1045:2;1033:9;1024:7;1020:23;1016:32;1013:52;;;1061:1;1058;1051:12;1013:52;-1:-1:-1;1084:23:1;;933:180;-1:-1:-1;933:180:1:o;1118:548::-;1230:4;1259:2;1288;1277:9;1270:21;1320:6;1314:13;1363:6;1358:2;1347:9;1343:18;1336:34;1388:1;1398:140;1412:6;1409:1;1406:13;1398:140;;;1507:14;;;1503:23;;1497:30;1473:17;;;1492:2;1469:26;1462:66;1427:10;;1398:140;;;1402:3;1587:1;1582:2;1573:6;1562:9;1558:22;1554:31;1547:42;1657:2;1650;1646:7;1641:2;1633:6;1629:15;1625:29;1614:9;1610:45;1606:54;1598:62;;;;1118:548;;;;:::o;1671:160::-;1736:20;;1792:13;;1785:21;1775:32;;1765:60;;1821:1;1818;1811:12;1765:60;1671:160;;;:::o;1836:315::-;1901:6;1909;1962:2;1950:9;1941:7;1937:23;1933:32;1930:52;;;1978:1;1975;1968:12;1930:52;2017:9;2004:23;2036:31;2061:5;2036:31;:::i;:::-;2086:5;-1:-1:-1;2110:35:1;2141:2;2126:18;;2110:35;:::i;:::-;2100:45;;1836:315;;;;;:::o;2156:::-;2224:6;2232;2285:2;2273:9;2264:7;2260:23;2256:32;2253:52;;;2301:1;2298;2291:12;2253:52;2340:9;2327:23;2359:31;2384:5;2359:31;:::i;:::-;2409:5;2461:2;2446:18;;;;2433:32;;-1:-1:-1;;;2156:315:1:o;2903:247::-;2962:6;3015:2;3003:9;2994:7;2990:23;2986:32;2983:52;;;3031:1;3028;3021:12;2983:52;3070:9;3057:23;3089:31;3114:5;3089:31;:::i;3155:127::-;3216:10;3211:3;3207:20;3204:1;3197:31;3247:4;3244:1;3237:15;3271:4;3268:1;3261:15;3287:275;3358:2;3352:9;3423:2;3404:13;;-1:-1:-1;;3400:27:1;3388:40;;3458:18;3443:34;;3479:22;;;3440:62;3437:88;;;3505:18;;:::i;:::-;3541:2;3534:22;3287:275;;-1:-1:-1;3287:275:1:o;3567:183::-;3627:4;3660:18;3652:6;3649:30;3646:56;;;3682:18;;:::i;:::-;-1:-1:-1;3727:1:1;3723:14;3739:4;3719:25;;3567:183::o;3755:662::-;3809:5;3862:3;3855:4;3847:6;3843:17;3839:27;3829:55;;3880:1;3877;3870:12;3829:55;3916:6;3903:20;3942:4;3966:60;3982:43;4022:2;3982:43;:::i;:::-;3966:60;:::i;:::-;4060:15;;;4146:1;4142:10;;;;4130:23;;4126:32;;;4091:12;;;;4170:15;;;4167:35;;;4198:1;4195;4188:12;4167:35;4234:2;4226:6;4222:15;4246:142;4262:6;4257:3;4254:15;4246:142;;;4328:17;;4316:30;;4366:12;;;;4279;;4246:142;;;-1:-1:-1;4406:5:1;3755:662;-1:-1:-1;;;;;;3755:662:1:o;4422:1215::-;4540:6;4548;4601:2;4589:9;4580:7;4576:23;4572:32;4569:52;;;4617:1;4614;4607:12;4569:52;4657:9;4644:23;4686:18;4727:2;4719:6;4716:14;4713:34;;;4743:1;4740;4733:12;4713:34;4781:6;4770:9;4766:22;4756:32;;4826:7;4819:4;4815:2;4811:13;4807:27;4797:55;;4848:1;4845;4838:12;4797:55;4884:2;4871:16;4906:4;4930:60;4946:43;4986:2;4946:43;:::i;4930:60::-;5024:15;;;5106:1;5102:10;;;;5094:19;;5090:28;;;5055:12;;;;5130:19;;;5127:39;;;5162:1;5159;5152:12;5127:39;5186:11;;;;5206:217;5222:6;5217:3;5214:15;5206:217;;;5302:3;5289:17;5319:31;5344:5;5319:31;:::i;:::-;5363:18;;5239:12;;;;5401;;;;5206:217;;;5442:5;-1:-1:-1;;5485:18:1;;5472:32;;-1:-1:-1;;5516:16:1;;;5513:36;;;5545:1;5542;5535:12;5513:36;;5568:63;5623:7;5612:8;5601:9;5597:24;5568:63;:::i;:::-;5558:73;;;4422:1215;;;;;:::o;5642:456::-;5719:6;5727;5735;5788:2;5776:9;5767:7;5763:23;5759:32;5756:52;;;5804:1;5801;5794:12;5756:52;5843:9;5830:23;5862:31;5887:5;5862:31;:::i;:::-;5912:5;-1:-1:-1;5969:2:1;5954:18;;5941:32;5982:33;5941:32;5982:33;:::i;:::-;5642:456;;6034:7;;-1:-1:-1;;;6088:2:1;6073:18;;;;6060:32;;5642:456::o;6292:180::-;6348:6;6401:2;6389:9;6380:7;6376:23;6372:32;6369:52;;;6417:1;6414;6407:12;6369:52;6440:26;6456:9;6440:26;:::i;6701:521::-;6796:6;6804;6812;6820;6828;6881:3;6869:9;6860:7;6856:23;6852:33;6849:53;;;6898:1;6895;6888:12;6849:53;6937:9;6924:23;6956:31;6981:5;6956:31;:::i;:::-;7006:5;7058:2;7043:18;;7030:32;;-1:-1:-1;7109:2:1;7094:18;;7081:32;;7160:2;7145:18;;7132:32;;-1:-1:-1;7211:3:1;7196:19;7183:33;;-1:-1:-1;6701:521:1;-1:-1:-1;;;6701:521:1:o;7227:276::-;7285:6;7338:2;7326:9;7317:7;7313:23;7309:32;7306:52;;;7354:1;7351;7344:12;7306:52;7393:9;7380:23;7443:10;7436:5;7432:22;7425:5;7422:33;7412:61;;7469:1;7466;7459:12;7508:661;7630:6;7638;7646;7654;7662;7670;7678;7686;7739:3;7727:9;7718:7;7714:23;7710:33;7707:53;;;7756:1;7753;7746:12;7707:53;-1:-1:-1;;7779:23:1;;;7849:2;7834:18;;7821:32;;-1:-1:-1;7900:2:1;7885:18;;7872:32;;7951:2;7936:18;;7923:32;;-1:-1:-1;8002:3:1;7987:19;;7974:33;;-1:-1:-1;8054:3:1;8039:19;;8026:33;;-1:-1:-1;8106:3:1;8091:19;;8078:33;;-1:-1:-1;8158:3:1;8143:19;8130:33;;-1:-1:-1;7508:661:1;-1:-1:-1;7508:661:1:o;8174:356::-;8376:2;8358:21;;;8395:18;;;8388:30;8454:34;8449:2;8434:18;;8427:62;8521:2;8506:18;;8174:356::o;8535:127::-;8596:10;8591:3;8587:20;8584:1;8577:31;8627:4;8624:1;8617:15;8651:4;8648:1;8641:15;8667:168;8740:9;;;8771;;8788:15;;;8782:22;;8768:37;8758:71;;8809:18;;:::i;8840:380::-;8919:1;8915:12;;;;8962;;;8983:61;;9037:4;9029:6;9025:17;9015:27;;8983:61;9090:2;9082:6;9079:14;9059:18;9056:38;9053:161;;9136:10;9131:3;9127:20;9124:1;9117:31;9171:4;9168:1;9161:15;9199:4;9196:1;9189:15;9053:161;;8840:380;;;:::o;10341:127::-;10402:10;10397:3;10393:20;10390:1;10383:31;10433:4;10430:1;10423:15;10457:4;10454:1;10447:15;10473:135;10512:3;10533:17;;;10530:43;;10553:18;;:::i;:::-;-1:-1:-1;10600:1:1;10589:13;;10473:135::o;10613:217::-;10653:1;10679;10669:132;;10723:10;10718:3;10714:20;10711:1;10704:31;10758:4;10755:1;10748:15;10786:4;10783:1;10776:15;10669:132;-1:-1:-1;10815:9:1;;10613:217::o;14962:251::-;15032:6;15085:2;15073:9;15064:7;15060:23;15056:32;15053:52;;;15101:1;15098;15091:12;15053:52;15133:9;15127:16;15152:31;15177:5;15152:31;:::i;15527:607::-;-1:-1:-1;;;;;15886:15:1;;;15868:34;;15933:2;15918:18;;15911:34;;;;15976:2;15961:18;;15954:34;;;;16019:2;16004:18;;15997:34;;;;16068:15;;;16062:3;16047:19;;16040:44;15848:3;16100:19;;16093:35;;;;15817:3;15802:19;;15527:607::o;16139:306::-;16227:6;16235;16243;16296:2;16284:9;16275:7;16271:23;16267:32;16264:52;;;16312:1;16309;16302:12;16264:52;16341:9;16335:16;16325:26;;16391:2;16380:9;16376:18;16370:25;16360:35;;16435:2;16424:9;16420:18;16414:25;16404:35;;16139:306;;;;;:::o;16450:125::-;16515:9;;;16536:10;;;16533:36;;;16549:18;;:::i;23389:128::-;23456:9;;;23477:11;;;23474:37;;;23491:18;;:::i;23522:980::-;23784:4;23832:3;23821:9;23817:19;23863:6;23852:9;23845:25;23889:2;23927:6;23922:2;23911:9;23907:18;23900:34;23970:3;23965:2;23954:9;23950:18;23943:31;23994:6;24029;24023:13;24060:6;24052;24045:22;24098:3;24087:9;24083:19;24076:26;;24137:2;24129:6;24125:15;24111:29;;24158:1;24168:195;24182:6;24179:1;24176:13;24168:195;;;24247:13;;-1:-1:-1;;;;;24243:39:1;24231:52;;24338:15;;;;24303:12;;;;24279:1;24197:9;24168:195;;;-1:-1:-1;;;;;;;24419:32:1;;;;24414:2;24399:18;;24392:60;-1:-1:-1;;;24483:3:1;24468:19;24461:35;24380:3;23522:980;-1:-1:-1;;;23522:980:1:o
Swarm Source
ipfs://c8964b4e6361485dd65a3c17538f29b99dcbd683fbbbb2f68dd1c67f99878944
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.