ERC-20
Overview
Max Total Supply
10,000,000,000 AKIO
Holders
86
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.008511453890371288 AKIOValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
AKIO
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-03-23 */ /** */ /** https://t.me/akioentry https://twitter.com/akio_origin https://akio-origin.com/ */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.13; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; return c; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } interface IERC20Metadata is IERC20 { function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); } contract ERC20 is Context, IERC20, IERC20Metadata { using SafeMath for uint256; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 internal _totalSupply; string private _name; string private _symbol; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override returns (string memory) { return _symbol; } function decimals() public view virtual override returns (uint8) { return 18; } function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "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 _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 {} } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint256 value); event Transfer(address indexed from, address indexed to, uint256 value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom(address from, address to, uint256 value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint256); function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external; event Swap(address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function swap(uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Factory { function createPair(address tokenA, address tokenB) external returns (address pair); } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity(address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline) external returns (uint256 amountA, uint256 amountB, uint256 liquidity); function addLiquidityETH(address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity); function removeLiquidity(address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH(address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit(address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit(address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens(uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline) external returns (uint256[] memory amounts); function swapTokensForExactTokens(uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline) external returns (uint256[] memory amounts); function swapExactETHForTokens(uint256 amountOutMin, address[] calldata path, address to, uint256 deadline) external payable returns (uint256[] memory amounts); function swapTokensForExactETH(uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline) external returns (uint256[] memory amounts); function swapExactTokensForETH(uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline) external returns (uint256[] memory amounts); function swapETHForExactTokens(uint256 amountOut, address[] calldata path, address to, uint256 deadline) external payable returns (uint256[] memory amounts); function quote(uint256 amountA, uint256 reserveA, uint256 reserveB) external pure returns (uint256 amountB); function getAmountOut(uint256 amountIn, uint256 reserveIn, uint256 reserveOut) external pure returns (uint256 amountOut); function getAmountIn(uint256 amountOut, uint256 reserveIn, uint256 reserveOut) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens(address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s) external returns (uint256 amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens(uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline) external; function swapExactETHForTokensSupportingFeeOnTransferTokens(uint256 amountOutMin, address[] calldata path, address to, uint256 deadline) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens(uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline) external; } contract AKIO is ERC20, Ownable { // using SafeMath for uint256; IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; bool private swapping; bool public tradingEnabled = false; uint256 public sellAmount = 0; uint256 public buyAmount = 0; uint256 private totalSellFees; uint256 private totalBuyFees; address payable public marketingWallet; address payable public devWallet; uint256 public maxWallet; bool public maxWalletEnabled = true; uint256 public swapTokensAtAmount; uint256 public sellMarketingFees; uint256 public sellLiquidityFee; uint256 public buyMarketingFees; uint256 public buyLiquidityFee; uint256 public buyDevFee; uint256 public sellDevFee; bool public swapAndLiquifyEnabled = true; mapping(address => bool) private _isExcludedFromFees; mapping(address => bool) public automatedMarketMakerPairs; mapping(address => bool) private canTransferBeforeTradingIsEnabled; bool public limitsInEffect = false; uint256 private gasPriceLimit = 7 * 1 gwei; // MAX GWEI mapping(address => uint256) private _holderLastTransferBlock; // FOR 1TX PER BLOCK mapping(address => uint256) private _holderLastTransferTimestamp; // FOR COOLDOWN uint256 public launchblock; // FOR DEADBLOCKS uint256 public launchtimestamp; // FOR LAUNCH TIMESTAMP uint256 public cooldowntimer = 0; // DEFAULT COOLDOWN TIMER event EnableSwapAndLiquify(bool enabled); event SetPreSaleWallet(address wallet); event updateMarketingWallet(address wallet); event updateDevWallet(address wallet); event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress); event TradingEnabled(); event UpdateFees(uint256 sellMarketingFees, uint256 sellLiquidityFee, uint256 buyMarketingFees, uint256 buyLiquidityFee, uint256 buyDevFee, uint256 sellDevFee); event Airdrop(address holder, uint256 amount); event ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity); event SendDividends(uint256 opAmount, bool success); constructor() ERC20("Akio Origin", "AKIO") { // marketingWallet = payable(0x4e407BB1C44e9Ff73d439d889f8Ea955A0551849); // devWallet = payable(0xFf1e39b38cDC0377178f72Ee63A00F7BbdC42C1A); // address router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; //INITIAL FEE VALUES HERE buyMarketingFees = 17; sellMarketingFees = 25; buyLiquidityFee = 0; sellLiquidityFee = 0; buyDevFee = 17; sellDevFee = 25; // TOTAL BUY AND TOTAL SELL FEE CALCS totalBuyFees = buyMarketingFees.add(buyLiquidityFee).add(buyDevFee); totalSellFees = sellMarketingFees.add(sellLiquidityFee).add(sellDevFee); uniswapV2Router = IUniswapV2Router02(router); uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair( address(this), uniswapV2Router.WETH()); _setAutomatedMarketMakerPair(uniswapV2Pair, true); _isExcludedFromFees[address(this)] = true; _isExcludedFromFees[msg.sender] = true; _isExcludedFromFees[marketingWallet] = true; uint256 _totalSupply = (10_000_000_000) * (10**18); // TOTAL SUPPLY IS SET HERE _mint(owner(), _totalSupply); // only time internal mint function is ever called is to create supply maxWallet = _totalSupply / 50; // 2% swapTokensAtAmount = _totalSupply / 100; // 1%; canTransferBeforeTradingIsEnabled[owner()] = true; canTransferBeforeTradingIsEnabled[address(this)] = true; } function decimals() public view virtual override returns (uint8) { return 18; } receive() external payable {} function enableTrading() external onlyOwner { require(!tradingEnabled); tradingEnabled = true; launchblock = block.number; launchtimestamp = block.timestamp; emit TradingEnabled(); } function setMarketingWallet(address wallet) external onlyOwner { _isExcludedFromFees[wallet] = true; marketingWallet = payable(wallet); emit updateMarketingWallet(wallet); } function setDevWallet(address wallet) external onlyOwner { _isExcludedFromFees[wallet] = true; devWallet = payable(wallet); emit updateDevWallet(wallet); } function setExcludeFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function setCanTransferBefore(address wallet, bool enable) external onlyOwner { canTransferBeforeTradingIsEnabled[wallet] = enable; } function setLimitsInEffect(bool value) external onlyOwner { limitsInEffect = value; } function setMaxWalletEnabled(bool value) external onlyOwner { maxWalletEnabled = value; } function setcooldowntimer(uint256 value) external onlyOwner { require(value <= 300, "cooldown timer cannot exceed 5 minutes"); cooldowntimer = value; } function setmaxWallet(uint256 value) external onlyOwner { value = value * (10**18); require(value >= _totalSupply / 50, "max wallet cannot be set to less than 2%"); maxWallet = value; } // function Sweep() external onlyOwner { uint256 amountETH = address(this).balance; payable(msg.sender).transfer(amountETH); } function setSwapTriggerAmount(uint256 amount) public onlyOwner { swapTokensAtAmount = amount * (10**18); } function enableSwapAndLiquify(bool enabled) public onlyOwner { require(swapAndLiquifyEnabled != enabled); swapAndLiquifyEnabled = enabled; emit EnableSwapAndLiquify(enabled); } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } // THIS IS THE ONE YOU USE TO TRASNFER OWNER IF U EVER DO function transferAdmin(address newOwner) public onlyOwner { _isExcludedFromFees[newOwner] = true; canTransferBeforeTradingIsEnabled[newOwner] = true; transferOwnership(newOwner); } function updateFees(uint256 marketingBuy, uint256 marketingSell, uint256 liquidityBuy, uint256 liquiditySell, uint256 devBuy, uint256 devSell) public onlyOwner { buyMarketingFees = marketingBuy; buyLiquidityFee = liquidityBuy; sellMarketingFees = marketingSell; sellLiquidityFee = liquiditySell; buyDevFee = devBuy; sellDevFee = devSell; totalSellFees = sellMarketingFees.add(sellLiquidityFee).add(sellDevFee); totalBuyFees = buyMarketingFees.add(buyLiquidityFee).add(buyDevFee); // ABSOLUTE TAX LIMITS GO HERE require(totalSellFees <= 99 && totalBuyFees <= 99, "total fees cannot be higher than 99%"); emit UpdateFees(sellMarketingFees, sellLiquidityFee, sellDevFee, buyMarketingFees, buyLiquidityFee, buyDevFee); } 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), "IERC20: transfer from the zero address"); require(to != address(0), "IERC20: transfer to the zero address"); uint256 marketingFees; uint256 liquidityFee; uint256 devFee; if (!canTransferBeforeTradingIsEnabled[from]) { require(tradingEnabled, "Trading has not yet been enabled"); } if (amount == 0) { super._transfer(from, to, 0); return; } else if ( !swapping && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { bool isSelling = automatedMarketMakerPairs[to]; if (isSelling) { marketingFees = sellMarketingFees; liquidityFee = sellLiquidityFee; devFee = sellDevFee; if (limitsInEffect) { require(block.timestamp >= _holderLastTransferTimestamp[tx.origin] + cooldowntimer, "cooldown period active"); _holderLastTransferTimestamp[tx.origin] = block.timestamp; } } else { marketingFees = buyMarketingFees; liquidityFee = buyLiquidityFee; devFee = buyDevFee; if (limitsInEffect) { require(block.number > launchblock + 2,"you shall not pass"); require(tx.gasprice <= gasPriceLimit,"Gas price exceeds limit."); require(_holderLastTransferBlock[tx.origin] != block.number,"Too many TX in block"); require(block.timestamp >= _holderLastTransferTimestamp[tx.origin] + cooldowntimer, "cooldown period active"); _holderLastTransferBlock[tx.origin] = block.number; _holderLastTransferTimestamp[tx.origin] = block.timestamp; } if (maxWalletEnabled) { uint256 contractBalanceRecipient = balanceOf(to); require(contractBalanceRecipient + amount <= maxWallet, "Exceeds maximum wallet token amount." ); } } uint256 totalFees = marketingFees.add(liquidityFee).add(devFee); uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if (canSwap && !automatedMarketMakerPairs[from]) { swapping = true; uint256 swapTokens; if (swapAndLiquifyEnabled && liquidityFee > 0) { uint256 totalBuySell = buyAmount.add(sellAmount); uint256 swapAmountBought = contractTokenBalance .mul(buyAmount) .div(totalBuySell); uint256 swapAmountSold = contractTokenBalance .mul(sellAmount) .div(totalBuySell); uint256 swapBuyTokens = swapAmountBought .mul(liquidityFee) .div(totalBuyFees); uint256 swapSellTokens = swapAmountSold .mul(liquidityFee) .div(totalSellFees); swapTokens = swapSellTokens.add(swapBuyTokens); swapAndLiquify(swapTokens); } uint256 remainingBalance = swapTokensAtAmount.sub(swapTokens); swapAndSendDividends(remainingBalance); buyAmount = 0; sellAmount = 0; swapping = false; } uint256 fees = amount.mul(totalFees).div(100); amount = amount.sub(fees); if (isSelling) { sellAmount = sellAmount.add(fees); } else { buyAmount = buyAmount.add(fees); } super._transfer(from, address(this), fees); } super._transfer(from, to, amount); } function swapAndLiquify(uint256 tokens) private { uint256 half = tokens.div(2); uint256 otherHalf = tokens.sub(half); uint256 initialBalance = address(this).balance; swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered uint256 newBalance = address(this).balance.sub(initialBalance); addLiquidity(otherHalf, newBalance); emit SwapAndLiquify(half, newBalance, otherHalf); } function swapTokensForEth(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable owner(), block.timestamp ); } function forceSwapAndSendDividends(uint256 tokens) public onlyOwner { tokens = tokens * (10**18); uint256 totalAmount = buyAmount.add(sellAmount); uint256 fromBuy = tokens.mul(buyAmount).div(totalAmount); uint256 fromSell = tokens.mul(sellAmount).div(totalAmount); swapAndSendDividends(tokens); buyAmount = buyAmount.sub(fromBuy); sellAmount = sellAmount.sub(fromSell); } // TAX PAYOUT CODE function swapAndSendDividends(uint256 tokens) private { if (tokens == 0) { return; } swapTokensForEth(tokens); bool success = true; bool successOp1 = true; uint256 _marketDevTotal = sellMarketingFees.add(sellDevFee) + buyMarketingFees.add(buyDevFee); uint256 feePortions; if (_marketDevTotal > 0) { feePortions = address(this).balance.div(_marketDevTotal); } uint256 marketingPayout = buyMarketingFees.add(sellMarketingFees) * feePortions; uint256 devPayout = buyDevFee.add(sellDevFee) * feePortions; if (marketingPayout > 0) { (success, ) = address(marketingWallet).call{value: marketingPayout}(""); } if (devPayout > 0) { (successOp1, ) = address(devWallet).call{value: devPayout}(""); } emit SendDividends( marketingPayout, success && successOp1 ); } function airdropToWallets( address[] memory airdropWallets, uint256[] memory amount ) external onlyOwner { require(airdropWallets.length == amount.length, "Arrays must be the same length"); require(airdropWallets.length <= 200, "Wallets list length must be <= 200"); for (uint256 i = 0; i < airdropWallets.length; i++) { address wallet = airdropWallets[i]; uint256 airdropAmount = amount[i] * (10**18); super._transfer(msg.sender, wallet, airdropAmount); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"holder","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Airdrop","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"EnableSwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"opAmount","type":"uint256"},{"indexed":false,"internalType":"bool","name":"success","type":"bool"}],"name":"SendDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"wallet","type":"address"}],"name":"SetPreSaleWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[],"name":"TradingEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"sellMarketingFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellLiquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyMarketingFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyLiquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyDevFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellDevFee","type":"uint256"}],"name":"UpdateFees","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":false,"internalType":"address","name":"wallet","type":"address"}],"name":"updateDevWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"wallet","type":"address"}],"name":"updateMarketingWallet","type":"event"},{"inputs":[],"name":"Sweep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"airdropWallets","type":"address[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"}],"name":"airdropToWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cooldowntimer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"enableSwapAndLiquify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"forceSwapAndSendDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchblock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchtimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setCanTransferBefore","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"setDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setLimitsInEffect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setMaxWalletEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapTriggerAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setcooldowntimer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setmaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingBuy","type":"uint256"},{"internalType":"uint256","name":"marketingSell","type":"uint256"},{"internalType":"uint256","name":"liquidityBuy","type":"uint256"},{"internalType":"uint256","name":"liquiditySell","type":"uint256"},{"internalType":"uint256","name":"devBuy","type":"uint256"},{"internalType":"uint256","name":"devSell","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526000600760156101000a81548160ff021916908315150217905550600060085560006009556001600f60006101000a81548160ff0219169083151502179055506001601760006101000a81548160ff0219169083151502179055506000601b60006101000a81548160ff0219169083151502179055506401a13b8600601c5560006021553480156200009557600080fd5b506040518060400160405280600b81526020017f416b696f204f726967696e0000000000000000000000000000000000000000008152506040518060400160405280600481526020017f414b494f00000000000000000000000000000000000000000000000000000000815250816003908162000113919062000d59565b50806004908162000125919062000d59565b50505060006200013a620007f660201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350734e407bb1c44e9ff73d439d889f8ea955a0551849600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073ff1e39b38cdc0377178f72ee63a00f7bbdc42c1a600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000737a250d5630b4cf539739df2c5dacb4c659f2488d905060116013819055506019601181905550600060148190555060006012819055506011601581905550601960168190555062000305601554620002f1601454601354620007fe60201b620028fa1790919060201c565b620007fe60201b620028fa1790919060201c565b600b819055506200034460165462000330601254601154620007fe60201b620028fa1790919060201c565b620007fe60201b620028fa1790919060201c565b600a8190555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003f9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200041f919062000eaa565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620004a9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004cf919062000eaa565b6040518363ffffffff1660e01b8152600401620004ee92919062000eed565b6020604051808303816000875af11580156200050e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000534919062000eaa565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005a9600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200086160201b60201c565b6001601860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160186000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060006b204fce5e3e25026110000000905062000705620006f86200090260201b60201c565b826200092c60201b60201c565b60328162000714919062000f78565b600e8190555060648162000729919062000f78565b6010819055506001601a6000620007456200090260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050506200110e565b600033905090565b60008082846200080f919062000fb0565b90508381101562000857576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200084e906200104c565b60405180910390fd5b8091505092915050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200099e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200099590620010be565b60405180910390fd5b620009b26000838362000ada60201b60201c565b620009ce81600254620007fe60201b620028fa1790919060201c565b60028190555062000a2c816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620007fe60201b620028fa1790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000ace9190620010f1565b60405180910390a35050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000b6157607f821691505b60208210810362000b775762000b7662000b19565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000be17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000ba2565b62000bed868362000ba2565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000c3a62000c3462000c2e8462000c05565b62000c0f565b62000c05565b9050919050565b6000819050919050565b62000c568362000c19565b62000c6e62000c658262000c41565b84845462000baf565b825550505050565b600090565b62000c8562000c76565b62000c9281848462000c4b565b505050565b5b8181101562000cba5762000cae60008262000c7b565b60018101905062000c98565b5050565b601f82111562000d095762000cd38162000b7d565b62000cde8462000b92565b8101602085101562000cee578190505b62000d0662000cfd8562000b92565b83018262000c97565b50505b505050565b600082821c905092915050565b600062000d2e6000198460080262000d0e565b1980831691505092915050565b600062000d49838362000d1b565b9150826002028217905092915050565b62000d648262000adf565b67ffffffffffffffff81111562000d805762000d7f62000aea565b5b62000d8c825462000b48565b62000d9982828562000cbe565b600060209050601f83116001811462000dd1576000841562000dbc578287015190505b62000dc8858262000d3b565b86555062000e38565b601f19841662000de18662000b7d565b60005b8281101562000e0b5784890151825560018201915060208501945060208101905062000de4565b8683101562000e2b578489015162000e27601f89168262000d1b565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000e728262000e45565b9050919050565b62000e848162000e65565b811462000e9057600080fd5b50565b60008151905062000ea48162000e79565b92915050565b60006020828403121562000ec35762000ec262000e40565b5b600062000ed38482850162000e93565b91505092915050565b62000ee78162000e65565b82525050565b600060408201905062000f04600083018562000edc565b62000f13602083018462000edc565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000f858262000c05565b915062000f928362000c05565b92508262000fa55762000fa462000f1a565b5b828204905092915050565b600062000fbd8262000c05565b915062000fca8362000c05565b925082820190508082111562000fe55762000fe462000f49565b5b92915050565b600082825260208201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062001034601b8362000feb565b9150620010418262000ffc565b602082019050919050565b60006020820190508181036000830152620010678162001025565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620010a6601f8362000feb565b9150620010b3826200106e565b602082019050919050565b60006020820190508181036000830152620010d98162001097565b9050919050565b620010eb8162000c05565b82525050565b6000602082019050620011086000830184620010e0565b92915050565b615808806200111e6000396000f3fe6080604052600436106103395760003560e01c806375f0a874116101ab578063a614ff75116100f7578063dd62ed3e11610095578063f2fde38b1161006f578063f2fde38b14610bf5578063f637434214610c1e578063f8b45b0514610c49578063fc6b151c14610c7457610340565b8063dd62ed3e14610b62578063e2f4560514610b9f578063f11a24d314610bca57610340565b8063b62496f5116100d1578063b62496f514610aa8578063b74e3b1114610ae5578063d045a32914610b0e578063d5e3725114610b3957610340565b8063a614ff7514610a17578063a9059cbb14610a40578063b494298814610a7d57610340565b806395451c29116101645780639a7a23d61161013e5780639a7a23d61461095b5780639c3b4fdc14610984578063a0d82dc5146109af578063a457c2d7146109da57610340565b806395451c29146108dc57806395d89b4114610907578063992c58e41461093257610340565b806375f0a874146107f05780637fdde05c1461081b5780638a8c523c146108445780638c3c82b21461085b5780638da5cb5b146108865780638ea5220f146108b157610340565b80633f407b84116102855780635d098b38116102235780637088fb7f116101fd5780637088fb7f1461075c57806370a0823114610773578063715018a6146107b057806375829def146107c757610340565b80635d098b38146106e15780635eee4bae1461070a578063679ca6e91461073357610340565b80634a74bb021161025f5780634a74bb02146106235780634ada218b1461064e5780634fbee193146106795780635124f874146106b657610340565b80633f407b84146105a257806349bd5a5e146105cd5780634a62bb65146105f857610340565b80631d7b1fb4116102f25780632307b441116102cc5780632307b441146104d457806323b872dd146104fd578063313ce5671461053a578063395093511461056557610340565b80631d7b1fb4146104555780631f53ac02146104805780631fa70531146104a957610340565b806305ca5f081461034557806306fdde031461036e57806308dfe8a514610399578063095ea7b3146103c25780631694505e146103ff57806318160ddd1461042a57610340565b3661034057005b600080fd5b34801561035157600080fd5b5061036c60048036038101906103679190613fc3565b610c9d565b005b34801561037a57600080fd5b50610383610e00565b6040516103909190614080565b60405180910390f35b3480156103a557600080fd5b506103c060048036038101906103bb9190614138565b610e92565b005b3480156103ce57600080fd5b506103e960048036038101906103e49190614178565b610fd2565b6040516103f691906141c7565b60405180910390f35b34801561040b57600080fd5b50610414610ff0565b6040516104219190614241565b60405180910390f35b34801561043657600080fd5b5061043f611016565b60405161044c919061426b565b60405180910390f35b34801561046157600080fd5b5061046a611020565b604051610477919061426b565b60405180910390f35b34801561048c57600080fd5b506104a760048036038101906104a29190614286565b611026565b005b3480156104b557600080fd5b506104be611190565b6040516104cb919061426b565b60405180910390f35b3480156104e057600080fd5b506104fb60048036038101906104f691906144be565b611196565b005b34801561050957600080fd5b50610524600480360381019061051f9190614536565b611338565b60405161053191906141c7565b60405180910390f35b34801561054657600080fd5b5061054f611411565b60405161055c91906145a5565b60405180910390f35b34801561057157600080fd5b5061058c60048036038101906105879190614178565b61141a565b60405161059991906141c7565b60405180910390f35b3480156105ae57600080fd5b506105b76114cd565b6040516105c4919061426b565b60405180910390f35b3480156105d957600080fd5b506105e26114d3565b6040516105ef91906145cf565b60405180910390f35b34801561060457600080fd5b5061060d6114f9565b60405161061a91906141c7565b60405180910390f35b34801561062f57600080fd5b5061063861150c565b60405161064591906141c7565b60405180910390f35b34801561065a57600080fd5b5061066361151f565b60405161067091906141c7565b60405180910390f35b34801561068557600080fd5b506106a0600480360381019061069b9190614286565b611532565b6040516106ad91906141c7565b60405180910390f35b3480156106c257600080fd5b506106cb611588565b6040516106d8919061426b565b60405180910390f35b3480156106ed57600080fd5b5061070860048036038101906107039190614286565b61158e565b005b34801561071657600080fd5b50610731600480360381019061072c9190613fc3565b6116f8565b005b34801561073f57600080fd5b5061075a600480360381019061075591906145ea565b6117ac565b005b34801561076857600080fd5b50610771611860565b005b34801561077f57600080fd5b5061079a60048036038101906107959190614286565b611946565b6040516107a7919061426b565b60405180910390f35b3480156107bc57600080fd5b506107c561198e565b005b3480156107d357600080fd5b506107ee60048036038101906107e99190614286565b611ae6565b005b3480156107fc57600080fd5b50610805611c39565b6040516108129190614638565b60405180910390f35b34801561082757600080fd5b50610842600480360381019061083d9190614138565b611c5f565b005b34801561085057600080fd5b50610859611d51565b005b34801561086757600080fd5b50610870611e59565b60405161087d919061426b565b60405180910390f35b34801561089257600080fd5b5061089b611e5f565b6040516108a891906145cf565b60405180910390f35b3480156108bd57600080fd5b506108c6611e89565b6040516108d39190614638565b60405180910390f35b3480156108e857600080fd5b506108f1611eaf565b6040516108fe919061426b565b60405180910390f35b34801561091357600080fd5b5061091c611eb5565b6040516109299190614080565b60405180910390f35b34801561093e57600080fd5b5061095960048036038101906109549190614653565b611f47565b005b34801561096757600080fd5b50610982600480360381019061097d9190614138565b612114565b005b34801561099057600080fd5b506109996121b9565b6040516109a6919061426b565b60405180910390f35b3480156109bb57600080fd5b506109c46121bf565b6040516109d1919061426b565b60405180910390f35b3480156109e657600080fd5b50610a0160048036038101906109fc9190614178565b6121c5565b604051610a0e91906141c7565b60405180910390f35b348015610a2357600080fd5b50610a3e6004803603810190610a3991906145ea565b612292565b005b348015610a4c57600080fd5b50610a676004803603810190610a629190614178565b612346565b604051610a7491906141c7565b60405180910390f35b348015610a8957600080fd5b50610a92612364565b604051610a9f919061426b565b60405180910390f35b348015610ab457600080fd5b50610acf6004803603810190610aca9190614286565b61236a565b604051610adc91906141c7565b60405180910390f35b348015610af157600080fd5b50610b0c6004803603810190610b079190613fc3565b61238a565b005b348015610b1a57600080fd5b50610b23612470565b604051610b3091906141c7565b60405180910390f35b348015610b4557600080fd5b50610b606004803603810190610b5b91906145ea565b612483565b005b348015610b6e57600080fd5b50610b896004803603810190610b8491906146e0565b61258d565b604051610b96919061426b565b60405180910390f35b348015610bab57600080fd5b50610bb4612614565b604051610bc1919061426b565b60405180910390f35b348015610bd657600080fd5b50610bdf61261a565b604051610bec919061426b565b60405180910390f35b348015610c0157600080fd5b50610c1c6004803603810190610c179190614286565b612620565b005b348015610c2a57600080fd5b50610c336127e6565b604051610c40919061426b565b60405180910390f35b348015610c5557600080fd5b50610c5e6127ec565b604051610c6b919061426b565b60405180910390f35b348015610c8057600080fd5b50610c9b6004803603810190610c969190613fc3565b6127f2565b005b610ca5612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2b9061476c565b60405180910390fd5b670de0b6b3a764000081610d4891906147bb565b90506000610d636008546009546128fa90919063ffffffff16565b90506000610d8e82610d806009548661296090919063ffffffff16565b6129da90919063ffffffff16565b90506000610db983610dab6008548761296090919063ffffffff16565b6129da90919063ffffffff16565b9050610dc484612a24565b610dd982600954612c6690919063ffffffff16565b600981905550610df481600854612c6690919063ffffffff16565b60088190555050505050565b606060038054610e0f9061482c565b80601f0160208091040260200160405190810160405280929190818152602001828054610e3b9061482c565b8015610e885780601f10610e5d57610100808354040283529160200191610e88565b820191906000526020600020905b815481529060010190602001808311610e6b57829003601f168201915b5050505050905090565b610e9a612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f209061476c565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051610fc691906141c7565b60405180910390a25050565b6000610fe6610fdf612958565b8484612cb0565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60215481565b61102e612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b49061476c565b60405180910390fd5b6001601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f1816467f4e41d8dd27500ca11dc471852ca93f9b624c4d8d4430b8c4fa6424fa8160405161118591906145cf565b60405180910390a150565b60095481565b61119e612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461122d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112249061476c565b60405180910390fd5b8051825114611271576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611268906148a9565b60405180910390fd5b60c8825111156112b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ad9061493b565b60405180910390fd5b60005b82518110156113335760008382815181106112d7576112d661495b565b5b602002602001015190506000670de0b6b3a76400008484815181106112ff576112fe61495b565b5b602002602001015161131191906147bb565b905061131e338383612e79565b5050808061132b9061498a565b9150506112b9565b505050565b600061134584848461310c565b61140684611351612958565b6114018560405180606001604052806028815260200161578660289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006113b7612958565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a449092919063ffffffff16565b612cb0565b600190509392505050565b60006012905090565b60006114c3611427612958565b846114be8560016000611438612958565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128fa90919063ffffffff16565b612cb0565b6001905092915050565b60085481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601b60009054906101000a900460ff1681565b601760009054906101000a900460ff1681565b600760159054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60135481565b611596612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611625576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161c9061476c565b60405180910390fd5b6001601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507faacebbe32c0dbd14817cfb53e3cc8be68c7e133928317145be50a0d86c224433816040516116ed91906145cf565b60405180910390a150565b611700612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461178f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117869061476c565b60405180910390fd5b670de0b6b3a7640000816117a391906147bb565b60108190555050565b6117b4612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183a9061476c565b60405180910390fd5b80601b60006101000a81548160ff02191690831515021790555050565b611868612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ee9061476c565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611942573d6000803e3d6000fd5b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611996612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1c9061476c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611aee612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b749061476c565b60405180910390fd5b6001601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611c3681612620565b50565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611c67612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ced9061476c565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611d59612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611de8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddf9061476c565b60405180910390fd5b600760159054906101000a900460ff1615611e0257600080fd5b6001600760156101000a81548160ff02191690831515021790555043601f81905550426020819055507f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c760405160405180910390a1565b60205481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b606060048054611ec49061482c565b80601f0160208091040260200160405190810160405280929190818152602001828054611ef09061482c565b8015611f3d5780601f10611f1257610100808354040283529160200191611f3d565b820191906000526020600020905b815481529060010190602001808311611f2057829003601f168201915b5050505050905090565b611f4f612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd59061476c565b60405180910390fd5b8560138190555083601481905550846011819055508260128190555081601581905550806016819055506120336016546120256012546011546128fa90919063ffffffff16565b6128fa90919063ffffffff16565b600a819055506120646015546120566014546013546128fa90919063ffffffff16565b6128fa90919063ffffffff16565b600b819055506063600a541115801561208057506063600b5411155b6120bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b690614a44565b60405180910390fd5b7ffb0d6f48717e74b9ad8ae84d152197402ac50bd6431ea28437926861021948ff60115460125460165460135460145460155460405161210496959493929190614a64565b60405180910390a1505050505050565b61211c612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a29061476c565b60405180910390fd5b6121b58282613aa8565b5050565b60155481565b60165481565b60006122886121d2612958565b84612283856040518060600160405280602581526020016157ae60259139600160006121fc612958565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a449092919063ffffffff16565b612cb0565b6001905092915050565b61229a612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612329576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123209061476c565b60405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b600061235a612353612958565b848461310c565b6001905092915050565b601f5481565b60196020528060005260406000206000915054906101000a900460ff1681565b612392612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612421576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124189061476c565b60405180910390fd5b61012c811115612466576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245d90614b37565b60405180910390fd5b8060218190555050565b600f60009054906101000a900460ff1681565b61248b612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461251a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125119061476c565b60405180910390fd5b801515601760009054906101000a900460ff1615150361253957600080fd5b80601760006101000a81548160ff0219169083151502179055507fff5917043f8453af413305b2dbd1ed9748a37df481beb71ba4b9b212a07b9bef8160405161258291906141c7565b60405180910390a150565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60105481565b60145481565b612628612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ae9061476c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612726576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271d90614bc9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60125481565b600e5481565b6127fa612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612889576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128809061476c565b60405180910390fd5b670de0b6b3a76400008161289d91906147bb565b905060326002546128ae9190614c18565b8110156128f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e790614cbb565b60405180910390fd5b80600e8190555050565b60008082846129099190614cdb565b90508381101561294e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294590614d5b565b60405180910390fd5b8091505092915050565b600033905090565b600080830361297257600090506129d4565b6000828461298091906147bb565b905082848261298f9190614c18565b146129cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c690614ded565b60405180910390fd5b809150505b92915050565b6000612a1c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613b49565b905092915050565b6000810315612c6357612a3681613bac565b6000600190506000600190506000612a5b6015546013546128fa90919063ffffffff16565b612a726016546011546128fa90919063ffffffff16565b612a7c9190614cdb565b9050600080821115612a9e57612a9b82476129da90919063ffffffff16565b90505b600081612ab86011546013546128fa90919063ffffffff16565b612ac291906147bb565b9050600082612ade6016546015546128fa90919063ffffffff16565b612ae891906147bb565b90506000821115612b8257600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051612b3990614e3e565b60006040518083038185875af1925050503d8060008114612b76576040519150601f19603f3d011682016040523d82523d6000602084013e612b7b565b606091505b5050809650505b6000811115612c1a57600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051612bd190614e3e565b60006040518083038185875af1925050503d8060008114612c0e576040519150601f19603f3d011682016040523d82523d6000602084013e612c13565b606091505b5050809550505b7f31ea026303a62d39c4ad14716f9621f1afe3242309c2ed761d4e241ae4bf2ea982878015612c465750865b604051612c54929190614e53565b60405180910390a15050505050505b50565b6000612ca883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613a44565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612d1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1690614eee565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8590614f80565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612e6c919061426b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ee8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612edf90615012565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612f57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4e906150a4565b60405180910390fd5b612f62838383613def565b612fcd81604051806060016040528060268152602001615760602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a449092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613060816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128fa90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516130ff919061426b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361317b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161317290615136565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036131ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131e1906151c8565b60405180910390fd5b6000806000601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661329057600760159054906101000a900460ff1661328f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161328690615234565b60405180910390fd5b5b600084036132ac576132a486866000612e79565b505050613a3f565b600760149054906101000a900460ff161580156133135750601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133695750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613a30576000601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905080156134c257601154935060125492506016549150601b60009054906101000a900460ff16156134bd57602154601e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134369190614cdb565b421015613478576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161346f906152a0565b60405180910390fd5b42601e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b613789565b601354935060145492506015549150601b60009054906101000a900460ff1615613714576002601f546134f59190614cdb565b4311613536576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161352d9061530c565b60405180910390fd5b601c543a111561357b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161357290615378565b60405180910390fd5b43601d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054036135fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135f3906153e4565b60405180910390fd5b602154601e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136499190614cdb565b42101561368b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613682906152a0565b60405180910390fd5b43601d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555042601e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600f60009054906101000a900460ff161561378857600061373487611946565b9050600e5486826137459190614cdb565b1115613786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161377d90615476565b60405180910390fd5b505b5b60006137b0836137a286886128fa90919063ffffffff16565b6128fa90919063ffffffff16565b905060006137bd30611946565b9050600060105482101590508080156138205750601960008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561399e576001600760146101000a81548160ff0219169083151502179055506000601760009054906101000a900460ff16801561385e5750600087115b1561394e57600061387c6008546009546128fa90919063ffffffff16565b905060006138a7826138996009548861296090919063ffffffff16565b6129da90919063ffffffff16565b905060006138d2836138c46008548961296090919063ffffffff16565b6129da90919063ffffffff16565b905060006138fd600b546138ef8d8661296090919063ffffffff16565b6129da90919063ffffffff16565b90506000613928600a5461391a8e8661296090919063ffffffff16565b6129da90919063ffffffff16565b905061393d82826128fa90919063ffffffff16565b955061394886613df4565b50505050505b600061396582601054612c6690919063ffffffff16565b905061397081612a24565b600060098190555060006008819055506000600760146101000a81548160ff02191690831515021790555050505b60006139c660646139b8868c61296090919063ffffffff16565b6129da90919063ffffffff16565b90506139db818a612c6690919063ffffffff16565b98508415613a03576139f8816008546128fa90919063ffffffff16565b600881905550613a1f565b613a18816009546128fa90919063ffffffff16565b6009819055505b613a2a8b3083612e79565b50505050505b613a3b868686612e79565b5050505b505050565b6000838311158290613a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a839190614080565b60405180910390fd5b5060008385613a9b9190615496565b9050809150509392505050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b60008083118290613b90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b879190614080565b60405180910390fd5b5060008385613b9f9190614c18565b9050809150509392505050565b6000600267ffffffffffffffff811115613bc957613bc86142b8565b5b604051908082528060200260200182016040528015613bf75781602001602082028036833780820191505090505b5090503081600081518110613c0f57613c0e61495b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613cb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cda91906154df565b81600181518110613cee57613ced61495b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613d5530600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612cb0565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613db9959493929190615605565b600060405180830381600087803b158015613dd357600080fd5b505af1158015613de7573d6000803e3d6000fd5b505050505050565b505050565b6000613e0a6002836129da90919063ffffffff16565b90506000613e218284612c6690919063ffffffff16565b90506000479050613e3183613bac565b6000613e468247612c6690919063ffffffff16565b9050613e528382613e94565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561848285604051613e859392919061565f565b60405180910390a15050505050565b613ec130600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612cb0565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613f0d611e5f565b426040518863ffffffff1660e01b8152600401613f2f96959493929190615696565b60606040518083038185885af1158015613f4d573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613f72919061570c565b5050505050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b613fa081613f8d565b8114613fab57600080fd5b50565b600081359050613fbd81613f97565b92915050565b600060208284031215613fd957613fd8613f83565b5b6000613fe784828501613fae565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561402a57808201518184015260208101905061400f565b60008484015250505050565b6000601f19601f8301169050919050565b600061405282613ff0565b61405c8185613ffb565b935061406c81856020860161400c565b61407581614036565b840191505092915050565b6000602082019050818103600083015261409a8184614047565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006140cd826140a2565b9050919050565b6140dd816140c2565b81146140e857600080fd5b50565b6000813590506140fa816140d4565b92915050565b60008115159050919050565b61411581614100565b811461412057600080fd5b50565b6000813590506141328161410c565b92915050565b6000806040838503121561414f5761414e613f83565b5b600061415d858286016140eb565b925050602061416e85828601614123565b9150509250929050565b6000806040838503121561418f5761418e613f83565b5b600061419d858286016140eb565b92505060206141ae85828601613fae565b9150509250929050565b6141c181614100565b82525050565b60006020820190506141dc60008301846141b8565b92915050565b6000819050919050565b60006142076142026141fd846140a2565b6141e2565b6140a2565b9050919050565b6000614219826141ec565b9050919050565b600061422b8261420e565b9050919050565b61423b81614220565b82525050565b60006020820190506142566000830184614232565b92915050565b61426581613f8d565b82525050565b6000602082019050614280600083018461425c565b92915050565b60006020828403121561429c5761429b613f83565b5b60006142aa848285016140eb565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6142f082614036565b810181811067ffffffffffffffff8211171561430f5761430e6142b8565b5b80604052505050565b6000614322613f79565b905061432e82826142e7565b919050565b600067ffffffffffffffff82111561434e5761434d6142b8565b5b602082029050602081019050919050565b600080fd5b600061437761437284614333565b614318565b9050808382526020820190506020840283018581111561439a5761439961435f565b5b835b818110156143c357806143af88826140eb565b84526020840193505060208101905061439c565b5050509392505050565b600082601f8301126143e2576143e16142b3565b5b81356143f2848260208601614364565b91505092915050565b600067ffffffffffffffff821115614416576144156142b8565b5b602082029050602081019050919050565b600061443a614435846143fb565b614318565b9050808382526020820190506020840283018581111561445d5761445c61435f565b5b835b8181101561448657806144728882613fae565b84526020840193505060208101905061445f565b5050509392505050565b600082601f8301126144a5576144a46142b3565b5b81356144b5848260208601614427565b91505092915050565b600080604083850312156144d5576144d4613f83565b5b600083013567ffffffffffffffff8111156144f3576144f2613f88565b5b6144ff858286016143cd565b925050602083013567ffffffffffffffff8111156145205761451f613f88565b5b61452c85828601614490565b9150509250929050565b60008060006060848603121561454f5761454e613f83565b5b600061455d868287016140eb565b935050602061456e868287016140eb565b925050604061457f86828701613fae565b9150509250925092565b600060ff82169050919050565b61459f81614589565b82525050565b60006020820190506145ba6000830184614596565b92915050565b6145c9816140c2565b82525050565b60006020820190506145e460008301846145c0565b92915050565b600060208284031215614600576145ff613f83565b5b600061460e84828501614123565b91505092915050565b6000614622826140a2565b9050919050565b61463281614617565b82525050565b600060208201905061464d6000830184614629565b92915050565b60008060008060008060c087890312156146705761466f613f83565b5b600061467e89828a01613fae565b965050602061468f89828a01613fae565b95505060406146a089828a01613fae565b94505060606146b189828a01613fae565b93505060806146c289828a01613fae565b92505060a06146d389828a01613fae565b9150509295509295509295565b600080604083850312156146f7576146f6613f83565b5b6000614705858286016140eb565b9250506020614716858286016140eb565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614756602083613ffb565b915061476182614720565b602082019050919050565b6000602082019050818103600083015261478581614749565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006147c682613f8d565b91506147d183613f8d565b92508282026147df81613f8d565b915082820484148315176147f6576147f561478c565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061484457607f821691505b602082108103614857576148566147fd565b5b50919050565b7f417272617973206d757374206265207468652073616d65206c656e6774680000600082015250565b6000614893601e83613ffb565b915061489e8261485d565b602082019050919050565b600060208201905081810360008301526148c281614886565b9050919050565b7f57616c6c657473206c697374206c656e677468206d757374206265203c3d203260008201527f3030000000000000000000000000000000000000000000000000000000000000602082015250565b6000614925602283613ffb565b9150614930826148c9565b604082019050919050565b6000602082019050818103600083015261495481614918565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061499582613f8d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036149c7576149c661478c565b5b600182019050919050565b7f746f74616c20666565732063616e6e6f7420626520686967686572207468616e60008201527f2039392500000000000000000000000000000000000000000000000000000000602082015250565b6000614a2e602483613ffb565b9150614a39826149d2565b604082019050919050565b60006020820190508181036000830152614a5d81614a21565b9050919050565b600060c082019050614a79600083018961425c565b614a86602083018861425c565b614a93604083018761425c565b614aa0606083018661425c565b614aad608083018561425c565b614aba60a083018461425c565b979650505050505050565b7f636f6f6c646f776e2074696d65722063616e6e6f74206578636565642035206d60008201527f696e757465730000000000000000000000000000000000000000000000000000602082015250565b6000614b21602683613ffb565b9150614b2c82614ac5565b604082019050919050565b60006020820190508181036000830152614b5081614b14565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614bb3602683613ffb565b9150614bbe82614b57565b604082019050919050565b60006020820190508181036000830152614be281614ba6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614c2382613f8d565b9150614c2e83613f8d565b925082614c3e57614c3d614be9565b5b828204905092915050565b7f6d61782077616c6c65742063616e6e6f742062652073657420746f206c65737360008201527f207468616e203225000000000000000000000000000000000000000000000000602082015250565b6000614ca5602883613ffb565b9150614cb082614c49565b604082019050919050565b60006020820190508181036000830152614cd481614c98565b9050919050565b6000614ce682613f8d565b9150614cf183613f8d565b9250828201905080821115614d0957614d0861478c565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614d45601b83613ffb565b9150614d5082614d0f565b602082019050919050565b60006020820190508181036000830152614d7481614d38565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614dd7602183613ffb565b9150614de282614d7b565b604082019050919050565b60006020820190508181036000830152614e0681614dca565b9050919050565b600081905092915050565b50565b6000614e28600083614e0d565b9150614e3382614e18565b600082019050919050565b6000614e4982614e1b565b9150819050919050565b6000604082019050614e68600083018561425c565b614e7560208301846141b8565b9392505050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614ed8602483613ffb565b9150614ee382614e7c565b604082019050919050565b60006020820190508181036000830152614f0781614ecb565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614f6a602283613ffb565b9150614f7582614f0e565b604082019050919050565b60006020820190508181036000830152614f9981614f5d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614ffc602583613ffb565b915061500782614fa0565b604082019050919050565b6000602082019050818103600083015261502b81614fef565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061508e602383613ffb565b915061509982615032565b604082019050919050565b600060208201905081810360008301526150bd81615081565b9050919050565b7f4945524332303a207472616e736665722066726f6d20746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615120602683613ffb565b915061512b826150c4565b604082019050919050565b6000602082019050818103600083015261514f81615113565b9050919050565b7f4945524332303a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006151b2602483613ffb565b91506151bd82615156565b604082019050919050565b600060208201905081810360008301526151e1816151a5565b9050919050565b7f54726164696e6720686173206e6f7420796574206265656e20656e61626c6564600082015250565b600061521e602083613ffb565b9150615229826151e8565b602082019050919050565b6000602082019050818103600083015261524d81615211565b9050919050565b7f636f6f6c646f776e20706572696f642061637469766500000000000000000000600082015250565b600061528a601683613ffb565b915061529582615254565b602082019050919050565b600060208201905081810360008301526152b98161527d565b9050919050565b7f796f75207368616c6c206e6f7420706173730000000000000000000000000000600082015250565b60006152f6601283613ffb565b9150615301826152c0565b602082019050919050565b60006020820190508181036000830152615325816152e9565b9050919050565b7f4761732070726963652065786365656473206c696d69742e0000000000000000600082015250565b6000615362601883613ffb565b915061536d8261532c565b602082019050919050565b6000602082019050818103600083015261539181615355565b9050919050565b7f546f6f206d616e7920545820696e20626c6f636b000000000000000000000000600082015250565b60006153ce601483613ffb565b91506153d982615398565b602082019050919050565b600060208201905081810360008301526153fd816153c1565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008201527f756e742e00000000000000000000000000000000000000000000000000000000602082015250565b6000615460602483613ffb565b915061546b82615404565b604082019050919050565b6000602082019050818103600083015261548f81615453565b9050919050565b60006154a182613f8d565b91506154ac83613f8d565b92508282039050818111156154c4576154c361478c565b5b92915050565b6000815190506154d9816140d4565b92915050565b6000602082840312156154f5576154f4613f83565b5b6000615503848285016154ca565b91505092915050565b6000819050919050565b600061553161552c6155278461550c565b6141e2565b613f8d565b9050919050565b61554181615516565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61557c816140c2565b82525050565b600061558e8383615573565b60208301905092915050565b6000602082019050919050565b60006155b282615547565b6155bc8185615552565b93506155c783615563565b8060005b838110156155f85781516155df8882615582565b97506155ea8361559a565b9250506001810190506155cb565b5085935050505092915050565b600060a08201905061561a600083018861425c565b6156276020830187615538565b818103604083015261563981866155a7565b905061564860608301856145c0565b615655608083018461425c565b9695505050505050565b6000606082019050615674600083018661425c565b615681602083018561425c565b61568e604083018461425c565b949350505050565b600060c0820190506156ab60008301896145c0565b6156b8602083018861425c565b6156c56040830187615538565b6156d26060830186615538565b6156df60808301856145c0565b6156ec60a083018461425c565b979650505050505050565b60008151905061570681613f97565b92915050565b60008060006060848603121561572557615724613f83565b5b6000615733868287016156f7565b9350506020615744868287016156f7565b9250506040615755868287016156f7565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122060540948cc7e75bf8402a4855d1809269f817ef8811e478d90568d5fb0141b2a64736f6c63430008110033
Deployed Bytecode
0x6080604052600436106103395760003560e01c806375f0a874116101ab578063a614ff75116100f7578063dd62ed3e11610095578063f2fde38b1161006f578063f2fde38b14610bf5578063f637434214610c1e578063f8b45b0514610c49578063fc6b151c14610c7457610340565b8063dd62ed3e14610b62578063e2f4560514610b9f578063f11a24d314610bca57610340565b8063b62496f5116100d1578063b62496f514610aa8578063b74e3b1114610ae5578063d045a32914610b0e578063d5e3725114610b3957610340565b8063a614ff7514610a17578063a9059cbb14610a40578063b494298814610a7d57610340565b806395451c29116101645780639a7a23d61161013e5780639a7a23d61461095b5780639c3b4fdc14610984578063a0d82dc5146109af578063a457c2d7146109da57610340565b806395451c29146108dc57806395d89b4114610907578063992c58e41461093257610340565b806375f0a874146107f05780637fdde05c1461081b5780638a8c523c146108445780638c3c82b21461085b5780638da5cb5b146108865780638ea5220f146108b157610340565b80633f407b84116102855780635d098b38116102235780637088fb7f116101fd5780637088fb7f1461075c57806370a0823114610773578063715018a6146107b057806375829def146107c757610340565b80635d098b38146106e15780635eee4bae1461070a578063679ca6e91461073357610340565b80634a74bb021161025f5780634a74bb02146106235780634ada218b1461064e5780634fbee193146106795780635124f874146106b657610340565b80633f407b84146105a257806349bd5a5e146105cd5780634a62bb65146105f857610340565b80631d7b1fb4116102f25780632307b441116102cc5780632307b441146104d457806323b872dd146104fd578063313ce5671461053a578063395093511461056557610340565b80631d7b1fb4146104555780631f53ac02146104805780631fa70531146104a957610340565b806305ca5f081461034557806306fdde031461036e57806308dfe8a514610399578063095ea7b3146103c25780631694505e146103ff57806318160ddd1461042a57610340565b3661034057005b600080fd5b34801561035157600080fd5b5061036c60048036038101906103679190613fc3565b610c9d565b005b34801561037a57600080fd5b50610383610e00565b6040516103909190614080565b60405180910390f35b3480156103a557600080fd5b506103c060048036038101906103bb9190614138565b610e92565b005b3480156103ce57600080fd5b506103e960048036038101906103e49190614178565b610fd2565b6040516103f691906141c7565b60405180910390f35b34801561040b57600080fd5b50610414610ff0565b6040516104219190614241565b60405180910390f35b34801561043657600080fd5b5061043f611016565b60405161044c919061426b565b60405180910390f35b34801561046157600080fd5b5061046a611020565b604051610477919061426b565b60405180910390f35b34801561048c57600080fd5b506104a760048036038101906104a29190614286565b611026565b005b3480156104b557600080fd5b506104be611190565b6040516104cb919061426b565b60405180910390f35b3480156104e057600080fd5b506104fb60048036038101906104f691906144be565b611196565b005b34801561050957600080fd5b50610524600480360381019061051f9190614536565b611338565b60405161053191906141c7565b60405180910390f35b34801561054657600080fd5b5061054f611411565b60405161055c91906145a5565b60405180910390f35b34801561057157600080fd5b5061058c60048036038101906105879190614178565b61141a565b60405161059991906141c7565b60405180910390f35b3480156105ae57600080fd5b506105b76114cd565b6040516105c4919061426b565b60405180910390f35b3480156105d957600080fd5b506105e26114d3565b6040516105ef91906145cf565b60405180910390f35b34801561060457600080fd5b5061060d6114f9565b60405161061a91906141c7565b60405180910390f35b34801561062f57600080fd5b5061063861150c565b60405161064591906141c7565b60405180910390f35b34801561065a57600080fd5b5061066361151f565b60405161067091906141c7565b60405180910390f35b34801561068557600080fd5b506106a0600480360381019061069b9190614286565b611532565b6040516106ad91906141c7565b60405180910390f35b3480156106c257600080fd5b506106cb611588565b6040516106d8919061426b565b60405180910390f35b3480156106ed57600080fd5b5061070860048036038101906107039190614286565b61158e565b005b34801561071657600080fd5b50610731600480360381019061072c9190613fc3565b6116f8565b005b34801561073f57600080fd5b5061075a600480360381019061075591906145ea565b6117ac565b005b34801561076857600080fd5b50610771611860565b005b34801561077f57600080fd5b5061079a60048036038101906107959190614286565b611946565b6040516107a7919061426b565b60405180910390f35b3480156107bc57600080fd5b506107c561198e565b005b3480156107d357600080fd5b506107ee60048036038101906107e99190614286565b611ae6565b005b3480156107fc57600080fd5b50610805611c39565b6040516108129190614638565b60405180910390f35b34801561082757600080fd5b50610842600480360381019061083d9190614138565b611c5f565b005b34801561085057600080fd5b50610859611d51565b005b34801561086757600080fd5b50610870611e59565b60405161087d919061426b565b60405180910390f35b34801561089257600080fd5b5061089b611e5f565b6040516108a891906145cf565b60405180910390f35b3480156108bd57600080fd5b506108c6611e89565b6040516108d39190614638565b60405180910390f35b3480156108e857600080fd5b506108f1611eaf565b6040516108fe919061426b565b60405180910390f35b34801561091357600080fd5b5061091c611eb5565b6040516109299190614080565b60405180910390f35b34801561093e57600080fd5b5061095960048036038101906109549190614653565b611f47565b005b34801561096757600080fd5b50610982600480360381019061097d9190614138565b612114565b005b34801561099057600080fd5b506109996121b9565b6040516109a6919061426b565b60405180910390f35b3480156109bb57600080fd5b506109c46121bf565b6040516109d1919061426b565b60405180910390f35b3480156109e657600080fd5b50610a0160048036038101906109fc9190614178565b6121c5565b604051610a0e91906141c7565b60405180910390f35b348015610a2357600080fd5b50610a3e6004803603810190610a3991906145ea565b612292565b005b348015610a4c57600080fd5b50610a676004803603810190610a629190614178565b612346565b604051610a7491906141c7565b60405180910390f35b348015610a8957600080fd5b50610a92612364565b604051610a9f919061426b565b60405180910390f35b348015610ab457600080fd5b50610acf6004803603810190610aca9190614286565b61236a565b604051610adc91906141c7565b60405180910390f35b348015610af157600080fd5b50610b0c6004803603810190610b079190613fc3565b61238a565b005b348015610b1a57600080fd5b50610b23612470565b604051610b3091906141c7565b60405180910390f35b348015610b4557600080fd5b50610b606004803603810190610b5b91906145ea565b612483565b005b348015610b6e57600080fd5b50610b896004803603810190610b8491906146e0565b61258d565b604051610b96919061426b565b60405180910390f35b348015610bab57600080fd5b50610bb4612614565b604051610bc1919061426b565b60405180910390f35b348015610bd657600080fd5b50610bdf61261a565b604051610bec919061426b565b60405180910390f35b348015610c0157600080fd5b50610c1c6004803603810190610c179190614286565b612620565b005b348015610c2a57600080fd5b50610c336127e6565b604051610c40919061426b565b60405180910390f35b348015610c5557600080fd5b50610c5e6127ec565b604051610c6b919061426b565b60405180910390f35b348015610c8057600080fd5b50610c9b6004803603810190610c969190613fc3565b6127f2565b005b610ca5612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2b9061476c565b60405180910390fd5b670de0b6b3a764000081610d4891906147bb565b90506000610d636008546009546128fa90919063ffffffff16565b90506000610d8e82610d806009548661296090919063ffffffff16565b6129da90919063ffffffff16565b90506000610db983610dab6008548761296090919063ffffffff16565b6129da90919063ffffffff16565b9050610dc484612a24565b610dd982600954612c6690919063ffffffff16565b600981905550610df481600854612c6690919063ffffffff16565b60088190555050505050565b606060038054610e0f9061482c565b80601f0160208091040260200160405190810160405280929190818152602001828054610e3b9061482c565b8015610e885780601f10610e5d57610100808354040283529160200191610e88565b820191906000526020600020905b815481529060010190602001808311610e6b57829003601f168201915b5050505050905090565b610e9a612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f209061476c565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051610fc691906141c7565b60405180910390a25050565b6000610fe6610fdf612958565b8484612cb0565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60215481565b61102e612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b49061476c565b60405180910390fd5b6001601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f1816467f4e41d8dd27500ca11dc471852ca93f9b624c4d8d4430b8c4fa6424fa8160405161118591906145cf565b60405180910390a150565b60095481565b61119e612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461122d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112249061476c565b60405180910390fd5b8051825114611271576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611268906148a9565b60405180910390fd5b60c8825111156112b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ad9061493b565b60405180910390fd5b60005b82518110156113335760008382815181106112d7576112d661495b565b5b602002602001015190506000670de0b6b3a76400008484815181106112ff576112fe61495b565b5b602002602001015161131191906147bb565b905061131e338383612e79565b5050808061132b9061498a565b9150506112b9565b505050565b600061134584848461310c565b61140684611351612958565b6114018560405180606001604052806028815260200161578660289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006113b7612958565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a449092919063ffffffff16565b612cb0565b600190509392505050565b60006012905090565b60006114c3611427612958565b846114be8560016000611438612958565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128fa90919063ffffffff16565b612cb0565b6001905092915050565b60085481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601b60009054906101000a900460ff1681565b601760009054906101000a900460ff1681565b600760159054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60135481565b611596612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611625576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161c9061476c565b60405180910390fd5b6001601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507faacebbe32c0dbd14817cfb53e3cc8be68c7e133928317145be50a0d86c224433816040516116ed91906145cf565b60405180910390a150565b611700612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461178f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117869061476c565b60405180910390fd5b670de0b6b3a7640000816117a391906147bb565b60108190555050565b6117b4612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183a9061476c565b60405180910390fd5b80601b60006101000a81548160ff02191690831515021790555050565b611868612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ee9061476c565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611942573d6000803e3d6000fd5b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611996612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1c9061476c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611aee612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b749061476c565b60405180910390fd5b6001601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611c3681612620565b50565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611c67612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ced9061476c565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611d59612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611de8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddf9061476c565b60405180910390fd5b600760159054906101000a900460ff1615611e0257600080fd5b6001600760156101000a81548160ff02191690831515021790555043601f81905550426020819055507f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c760405160405180910390a1565b60205481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b606060048054611ec49061482c565b80601f0160208091040260200160405190810160405280929190818152602001828054611ef09061482c565b8015611f3d5780601f10611f1257610100808354040283529160200191611f3d565b820191906000526020600020905b815481529060010190602001808311611f2057829003601f168201915b5050505050905090565b611f4f612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd59061476c565b60405180910390fd5b8560138190555083601481905550846011819055508260128190555081601581905550806016819055506120336016546120256012546011546128fa90919063ffffffff16565b6128fa90919063ffffffff16565b600a819055506120646015546120566014546013546128fa90919063ffffffff16565b6128fa90919063ffffffff16565b600b819055506063600a541115801561208057506063600b5411155b6120bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b690614a44565b60405180910390fd5b7ffb0d6f48717e74b9ad8ae84d152197402ac50bd6431ea28437926861021948ff60115460125460165460135460145460155460405161210496959493929190614a64565b60405180910390a1505050505050565b61211c612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a29061476c565b60405180910390fd5b6121b58282613aa8565b5050565b60155481565b60165481565b60006122886121d2612958565b84612283856040518060600160405280602581526020016157ae60259139600160006121fc612958565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a449092919063ffffffff16565b612cb0565b6001905092915050565b61229a612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612329576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123209061476c565b60405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b600061235a612353612958565b848461310c565b6001905092915050565b601f5481565b60196020528060005260406000206000915054906101000a900460ff1681565b612392612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612421576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124189061476c565b60405180910390fd5b61012c811115612466576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245d90614b37565b60405180910390fd5b8060218190555050565b600f60009054906101000a900460ff1681565b61248b612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461251a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125119061476c565b60405180910390fd5b801515601760009054906101000a900460ff1615150361253957600080fd5b80601760006101000a81548160ff0219169083151502179055507fff5917043f8453af413305b2dbd1ed9748a37df481beb71ba4b9b212a07b9bef8160405161258291906141c7565b60405180910390a150565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60105481565b60145481565b612628612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ae9061476c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612726576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271d90614bc9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60125481565b600e5481565b6127fa612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612889576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128809061476c565b60405180910390fd5b670de0b6b3a76400008161289d91906147bb565b905060326002546128ae9190614c18565b8110156128f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e790614cbb565b60405180910390fd5b80600e8190555050565b60008082846129099190614cdb565b90508381101561294e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294590614d5b565b60405180910390fd5b8091505092915050565b600033905090565b600080830361297257600090506129d4565b6000828461298091906147bb565b905082848261298f9190614c18565b146129cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c690614ded565b60405180910390fd5b809150505b92915050565b6000612a1c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613b49565b905092915050565b6000810315612c6357612a3681613bac565b6000600190506000600190506000612a5b6015546013546128fa90919063ffffffff16565b612a726016546011546128fa90919063ffffffff16565b612a7c9190614cdb565b9050600080821115612a9e57612a9b82476129da90919063ffffffff16565b90505b600081612ab86011546013546128fa90919063ffffffff16565b612ac291906147bb565b9050600082612ade6016546015546128fa90919063ffffffff16565b612ae891906147bb565b90506000821115612b8257600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051612b3990614e3e565b60006040518083038185875af1925050503d8060008114612b76576040519150601f19603f3d011682016040523d82523d6000602084013e612b7b565b606091505b5050809650505b6000811115612c1a57600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051612bd190614e3e565b60006040518083038185875af1925050503d8060008114612c0e576040519150601f19603f3d011682016040523d82523d6000602084013e612c13565b606091505b5050809550505b7f31ea026303a62d39c4ad14716f9621f1afe3242309c2ed761d4e241ae4bf2ea982878015612c465750865b604051612c54929190614e53565b60405180910390a15050505050505b50565b6000612ca883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613a44565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612d1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1690614eee565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8590614f80565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612e6c919061426b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ee8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612edf90615012565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612f57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4e906150a4565b60405180910390fd5b612f62838383613def565b612fcd81604051806060016040528060268152602001615760602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a449092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613060816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128fa90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516130ff919061426b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361317b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161317290615136565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036131ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131e1906151c8565b60405180910390fd5b6000806000601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661329057600760159054906101000a900460ff1661328f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161328690615234565b60405180910390fd5b5b600084036132ac576132a486866000612e79565b505050613a3f565b600760149054906101000a900460ff161580156133135750601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133695750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613a30576000601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905080156134c257601154935060125492506016549150601b60009054906101000a900460ff16156134bd57602154601e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134369190614cdb565b421015613478576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161346f906152a0565b60405180910390fd5b42601e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b613789565b601354935060145492506015549150601b60009054906101000a900460ff1615613714576002601f546134f59190614cdb565b4311613536576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161352d9061530c565b60405180910390fd5b601c543a111561357b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161357290615378565b60405180910390fd5b43601d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054036135fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135f3906153e4565b60405180910390fd5b602154601e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136499190614cdb565b42101561368b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613682906152a0565b60405180910390fd5b43601d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555042601e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600f60009054906101000a900460ff161561378857600061373487611946565b9050600e5486826137459190614cdb565b1115613786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161377d90615476565b60405180910390fd5b505b5b60006137b0836137a286886128fa90919063ffffffff16565b6128fa90919063ffffffff16565b905060006137bd30611946565b9050600060105482101590508080156138205750601960008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561399e576001600760146101000a81548160ff0219169083151502179055506000601760009054906101000a900460ff16801561385e5750600087115b1561394e57600061387c6008546009546128fa90919063ffffffff16565b905060006138a7826138996009548861296090919063ffffffff16565b6129da90919063ffffffff16565b905060006138d2836138c46008548961296090919063ffffffff16565b6129da90919063ffffffff16565b905060006138fd600b546138ef8d8661296090919063ffffffff16565b6129da90919063ffffffff16565b90506000613928600a5461391a8e8661296090919063ffffffff16565b6129da90919063ffffffff16565b905061393d82826128fa90919063ffffffff16565b955061394886613df4565b50505050505b600061396582601054612c6690919063ffffffff16565b905061397081612a24565b600060098190555060006008819055506000600760146101000a81548160ff02191690831515021790555050505b60006139c660646139b8868c61296090919063ffffffff16565b6129da90919063ffffffff16565b90506139db818a612c6690919063ffffffff16565b98508415613a03576139f8816008546128fa90919063ffffffff16565b600881905550613a1f565b613a18816009546128fa90919063ffffffff16565b6009819055505b613a2a8b3083612e79565b50505050505b613a3b868686612e79565b5050505b505050565b6000838311158290613a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a839190614080565b60405180910390fd5b5060008385613a9b9190615496565b9050809150509392505050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b60008083118290613b90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b879190614080565b60405180910390fd5b5060008385613b9f9190614c18565b9050809150509392505050565b6000600267ffffffffffffffff811115613bc957613bc86142b8565b5b604051908082528060200260200182016040528015613bf75781602001602082028036833780820191505090505b5090503081600081518110613c0f57613c0e61495b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613cb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cda91906154df565b81600181518110613cee57613ced61495b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613d5530600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612cb0565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613db9959493929190615605565b600060405180830381600087803b158015613dd357600080fd5b505af1158015613de7573d6000803e3d6000fd5b505050505050565b505050565b6000613e0a6002836129da90919063ffffffff16565b90506000613e218284612c6690919063ffffffff16565b90506000479050613e3183613bac565b6000613e468247612c6690919063ffffffff16565b9050613e528382613e94565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561848285604051613e859392919061565f565b60405180910390a15050505050565b613ec130600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612cb0565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613f0d611e5f565b426040518863ffffffff1660e01b8152600401613f2f96959493929190615696565b60606040518083038185885af1158015613f4d573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613f72919061570c565b5050505050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b613fa081613f8d565b8114613fab57600080fd5b50565b600081359050613fbd81613f97565b92915050565b600060208284031215613fd957613fd8613f83565b5b6000613fe784828501613fae565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561402a57808201518184015260208101905061400f565b60008484015250505050565b6000601f19601f8301169050919050565b600061405282613ff0565b61405c8185613ffb565b935061406c81856020860161400c565b61407581614036565b840191505092915050565b6000602082019050818103600083015261409a8184614047565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006140cd826140a2565b9050919050565b6140dd816140c2565b81146140e857600080fd5b50565b6000813590506140fa816140d4565b92915050565b60008115159050919050565b61411581614100565b811461412057600080fd5b50565b6000813590506141328161410c565b92915050565b6000806040838503121561414f5761414e613f83565b5b600061415d858286016140eb565b925050602061416e85828601614123565b9150509250929050565b6000806040838503121561418f5761418e613f83565b5b600061419d858286016140eb565b92505060206141ae85828601613fae565b9150509250929050565b6141c181614100565b82525050565b60006020820190506141dc60008301846141b8565b92915050565b6000819050919050565b60006142076142026141fd846140a2565b6141e2565b6140a2565b9050919050565b6000614219826141ec565b9050919050565b600061422b8261420e565b9050919050565b61423b81614220565b82525050565b60006020820190506142566000830184614232565b92915050565b61426581613f8d565b82525050565b6000602082019050614280600083018461425c565b92915050565b60006020828403121561429c5761429b613f83565b5b60006142aa848285016140eb565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6142f082614036565b810181811067ffffffffffffffff8211171561430f5761430e6142b8565b5b80604052505050565b6000614322613f79565b905061432e82826142e7565b919050565b600067ffffffffffffffff82111561434e5761434d6142b8565b5b602082029050602081019050919050565b600080fd5b600061437761437284614333565b614318565b9050808382526020820190506020840283018581111561439a5761439961435f565b5b835b818110156143c357806143af88826140eb565b84526020840193505060208101905061439c565b5050509392505050565b600082601f8301126143e2576143e16142b3565b5b81356143f2848260208601614364565b91505092915050565b600067ffffffffffffffff821115614416576144156142b8565b5b602082029050602081019050919050565b600061443a614435846143fb565b614318565b9050808382526020820190506020840283018581111561445d5761445c61435f565b5b835b8181101561448657806144728882613fae565b84526020840193505060208101905061445f565b5050509392505050565b600082601f8301126144a5576144a46142b3565b5b81356144b5848260208601614427565b91505092915050565b600080604083850312156144d5576144d4613f83565b5b600083013567ffffffffffffffff8111156144f3576144f2613f88565b5b6144ff858286016143cd565b925050602083013567ffffffffffffffff8111156145205761451f613f88565b5b61452c85828601614490565b9150509250929050565b60008060006060848603121561454f5761454e613f83565b5b600061455d868287016140eb565b935050602061456e868287016140eb565b925050604061457f86828701613fae565b9150509250925092565b600060ff82169050919050565b61459f81614589565b82525050565b60006020820190506145ba6000830184614596565b92915050565b6145c9816140c2565b82525050565b60006020820190506145e460008301846145c0565b92915050565b600060208284031215614600576145ff613f83565b5b600061460e84828501614123565b91505092915050565b6000614622826140a2565b9050919050565b61463281614617565b82525050565b600060208201905061464d6000830184614629565b92915050565b60008060008060008060c087890312156146705761466f613f83565b5b600061467e89828a01613fae565b965050602061468f89828a01613fae565b95505060406146a089828a01613fae565b94505060606146b189828a01613fae565b93505060806146c289828a01613fae565b92505060a06146d389828a01613fae565b9150509295509295509295565b600080604083850312156146f7576146f6613f83565b5b6000614705858286016140eb565b9250506020614716858286016140eb565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614756602083613ffb565b915061476182614720565b602082019050919050565b6000602082019050818103600083015261478581614749565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006147c682613f8d565b91506147d183613f8d565b92508282026147df81613f8d565b915082820484148315176147f6576147f561478c565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061484457607f821691505b602082108103614857576148566147fd565b5b50919050565b7f417272617973206d757374206265207468652073616d65206c656e6774680000600082015250565b6000614893601e83613ffb565b915061489e8261485d565b602082019050919050565b600060208201905081810360008301526148c281614886565b9050919050565b7f57616c6c657473206c697374206c656e677468206d757374206265203c3d203260008201527f3030000000000000000000000000000000000000000000000000000000000000602082015250565b6000614925602283613ffb565b9150614930826148c9565b604082019050919050565b6000602082019050818103600083015261495481614918565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061499582613f8d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036149c7576149c661478c565b5b600182019050919050565b7f746f74616c20666565732063616e6e6f7420626520686967686572207468616e60008201527f2039392500000000000000000000000000000000000000000000000000000000602082015250565b6000614a2e602483613ffb565b9150614a39826149d2565b604082019050919050565b60006020820190508181036000830152614a5d81614a21565b9050919050565b600060c082019050614a79600083018961425c565b614a86602083018861425c565b614a93604083018761425c565b614aa0606083018661425c565b614aad608083018561425c565b614aba60a083018461425c565b979650505050505050565b7f636f6f6c646f776e2074696d65722063616e6e6f74206578636565642035206d60008201527f696e757465730000000000000000000000000000000000000000000000000000602082015250565b6000614b21602683613ffb565b9150614b2c82614ac5565b604082019050919050565b60006020820190508181036000830152614b5081614b14565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614bb3602683613ffb565b9150614bbe82614b57565b604082019050919050565b60006020820190508181036000830152614be281614ba6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614c2382613f8d565b9150614c2e83613f8d565b925082614c3e57614c3d614be9565b5b828204905092915050565b7f6d61782077616c6c65742063616e6e6f742062652073657420746f206c65737360008201527f207468616e203225000000000000000000000000000000000000000000000000602082015250565b6000614ca5602883613ffb565b9150614cb082614c49565b604082019050919050565b60006020820190508181036000830152614cd481614c98565b9050919050565b6000614ce682613f8d565b9150614cf183613f8d565b9250828201905080821115614d0957614d0861478c565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614d45601b83613ffb565b9150614d5082614d0f565b602082019050919050565b60006020820190508181036000830152614d7481614d38565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614dd7602183613ffb565b9150614de282614d7b565b604082019050919050565b60006020820190508181036000830152614e0681614dca565b9050919050565b600081905092915050565b50565b6000614e28600083614e0d565b9150614e3382614e18565b600082019050919050565b6000614e4982614e1b565b9150819050919050565b6000604082019050614e68600083018561425c565b614e7560208301846141b8565b9392505050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614ed8602483613ffb565b9150614ee382614e7c565b604082019050919050565b60006020820190508181036000830152614f0781614ecb565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614f6a602283613ffb565b9150614f7582614f0e565b604082019050919050565b60006020820190508181036000830152614f9981614f5d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614ffc602583613ffb565b915061500782614fa0565b604082019050919050565b6000602082019050818103600083015261502b81614fef565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061508e602383613ffb565b915061509982615032565b604082019050919050565b600060208201905081810360008301526150bd81615081565b9050919050565b7f4945524332303a207472616e736665722066726f6d20746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615120602683613ffb565b915061512b826150c4565b604082019050919050565b6000602082019050818103600083015261514f81615113565b9050919050565b7f4945524332303a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006151b2602483613ffb565b91506151bd82615156565b604082019050919050565b600060208201905081810360008301526151e1816151a5565b9050919050565b7f54726164696e6720686173206e6f7420796574206265656e20656e61626c6564600082015250565b600061521e602083613ffb565b9150615229826151e8565b602082019050919050565b6000602082019050818103600083015261524d81615211565b9050919050565b7f636f6f6c646f776e20706572696f642061637469766500000000000000000000600082015250565b600061528a601683613ffb565b915061529582615254565b602082019050919050565b600060208201905081810360008301526152b98161527d565b9050919050565b7f796f75207368616c6c206e6f7420706173730000000000000000000000000000600082015250565b60006152f6601283613ffb565b9150615301826152c0565b602082019050919050565b60006020820190508181036000830152615325816152e9565b9050919050565b7f4761732070726963652065786365656473206c696d69742e0000000000000000600082015250565b6000615362601883613ffb565b915061536d8261532c565b602082019050919050565b6000602082019050818103600083015261539181615355565b9050919050565b7f546f6f206d616e7920545820696e20626c6f636b000000000000000000000000600082015250565b60006153ce601483613ffb565b91506153d982615398565b602082019050919050565b600060208201905081810360008301526153fd816153c1565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008201527f756e742e00000000000000000000000000000000000000000000000000000000602082015250565b6000615460602483613ffb565b915061546b82615404565b604082019050919050565b6000602082019050818103600083015261548f81615453565b9050919050565b60006154a182613f8d565b91506154ac83613f8d565b92508282039050818111156154c4576154c361478c565b5b92915050565b6000815190506154d9816140d4565b92915050565b6000602082840312156154f5576154f4613f83565b5b6000615503848285016154ca565b91505092915050565b6000819050919050565b600061553161552c6155278461550c565b6141e2565b613f8d565b9050919050565b61554181615516565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61557c816140c2565b82525050565b600061558e8383615573565b60208301905092915050565b6000602082019050919050565b60006155b282615547565b6155bc8185615552565b93506155c783615563565b8060005b838110156155f85781516155df8882615582565b97506155ea8361559a565b9250506001810190506155cb565b5085935050505092915050565b600060a08201905061561a600083018861425c565b6156276020830187615538565b818103604083015261563981866155a7565b905061564860608301856145c0565b615655608083018461425c565b9695505050505050565b6000606082019050615674600083018661425c565b615681602083018561425c565b61568e604083018461425c565b949350505050565b600060c0820190506156ab60008301896145c0565b6156b8602083018861425c565b6156c56040830187615538565b6156d26060830186615538565b6156df60808301856145c0565b6156ec60a083018461425c565b979650505050505050565b60008151905061570681613f97565b92915050565b60008060006060848603121561572557615724613f83565b5b6000615733868287016156f7565b9350506020615744868287016156f7565b9250506040615755868287016156f7565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122060540948cc7e75bf8402a4855d1809269f817ef8811e478d90568d5fb0141b2a64736f6c63430008110033
Deployed Bytecode Sourcemap
15472:15680:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29079:443;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3355:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20190:181;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4269:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15550:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3676:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16906:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19991:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15742:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30588:561;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4446:345;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19396:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4799:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15706:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15600:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16515:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16268:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15663:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23184:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16128:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19778:205;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21327:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20534:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21173:146;;;;;;;;;;;;;:::i;:::-;;3792:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7247:148;;;;;;;;;;;;;:::i;:::-;;22078:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15852:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20379:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19534:232;;;;;;;;;;;;;:::i;:::-;;16844:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7033:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15897:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16051;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3463:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22298:878;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21671:140;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16203:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16234:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5025:286;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20641:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3927:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16793:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16376:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20752:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15969:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21455:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4110:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16011:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16166:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7403:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16090:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15938:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20940:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29079:443;7170:12;:10;:12::i;:::-;7160:22;;:6;;;;;;;;;;;:22;;;7152:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29177:6:::1;29167;:17;;;;:::i;:::-;29158:26;;29195:19;29217:25;29231:10;;29217:9;;:13;;:25;;;;:::i;:::-;29195:47;;29253:15;29271:38;29297:11;29271:21;29282:9;;29271:6;:10;;:21;;;;:::i;:::-;:25;;:38;;;;:::i;:::-;29253:56;;29320:16;29339:39;29366:11;29339:22;29350:10;;29339:6;:10;;:22;;;;:::i;:::-;:26;;:39;;;;:::i;:::-;29320:58;;29391:28;29412:6;29391:20;:28::i;:::-;29444:22;29458:7;29444:9;;:13;;:22;;;;:::i;:::-;29432:9;:34;;;;29490:24;29505:8;29490:10;;:14;;:24;;;;:::i;:::-;29477:10;:37;;;;29147:375;;;29079:443:::0;:::o;3355:100::-;3409:13;3442:5;3435:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3355:100;:::o;20190:181::-;7170:12;:10;:12::i;:::-;7160:22;;:6;;;;;;;;;;;:22;;;7152:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20305:8:::1;20274:19;:28;20294:7;20274:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;20345:7;20329:34;;;20354:8;20329:34;;;;;;:::i;:::-;;;;;;;;20190:181:::0;;:::o;4269:169::-;4352:4;4369:39;4378:12;:10;:12::i;:::-;4392:7;4401:6;4369:8;:39::i;:::-;4426:4;4419:11;;4269:169;;;;:::o;15550:41::-;;;;;;;;;;;;;:::o;3676:108::-;3737:7;3764:12;;3757:19;;3676:108;:::o;16906:32::-;;;;:::o;19991:187::-;7170:12;:10;:12::i;:::-;7160:22;;:6;;;;;;;;;;;:22;;;7152:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20089:4:::1;20059:19;:27;20079:6;20059:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;20124:6;20104:9;;:27;;;;;;;;;;;;;;;;;;20147:23;20163:6;20147:23;;;;;;:::i;:::-;;;;;;;;19991:187:::0;:::o;15742:28::-;;;;:::o;30588:561::-;7170:12;:10;:12::i;:::-;7160:22;;:6;;;;;;;;;;;:22;;;7152:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30760:6:::1;:13;30735:14;:21;:38;30727:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;30852:3;30827:14;:21;:28;;30819:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;30910:9;30905:237;30929:14;:21;30925:1;:25;30905:237;;;30972:14;30989;31004:1;30989:17;;;;;;;;:::i;:::-;;;;;;;;30972:34;;31021:21;31058:6;31045;31052:1;31045:9;;;;;;;;:::i;:::-;;;;;;;;:20;;;;:::i;:::-;31021:44;;31080:50;31096:10;31108:6;31116:13;31080:15;:50::i;:::-;30957:185;;30952:3;;;;;:::i;:::-;;;;30905:237;;;;30588:561:::0;;:::o;4446:345::-;4559:4;4576:36;4586:6;4594:9;4605:6;4576:9;:36::i;:::-;4623:138;4632:6;4640:12;:10;:12::i;:::-;4654:106;4692:6;4654:106;;;;;;;;;;;;;;;;;:11;:19;4666:6;4654:19;;;;;;;;;;;;;;;:33;4674:12;:10;:12::i;:::-;4654:33;;;;;;;;;;;;;;;;:37;;:106;;;;;:::i;:::-;4623:8;:138::i;:::-;4779:4;4772:11;;4446:345;;;;;:::o;19396:93::-;19454:5;19479:2;19472:9;;19396:93;:::o;4799:218::-;4887:4;4904:83;4913:12;:10;:12::i;:::-;4927:7;4936:50;4975:10;4936:11;:25;4948:12;:10;:12::i;:::-;4936:25;;;;;;;;;;;;;;;:34;4962:7;4936:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;4904:8;:83::i;:::-;5005:4;4998:11;;4799:218;;;;:::o;15706:29::-;;;;:::o;15600:28::-;;;;;;;;;;;;;:::o;16515:34::-;;;;;;;;;;;;;:::o;16268:40::-;;;;;;;;;;;;;:::o;15663:34::-;;;;;;;;;;;;;:::o;23184:126::-;23250:4;23274:19;:28;23294:7;23274:28;;;;;;;;;;;;;;;;;;;;;;;;;23267:35;;23184:126;;;:::o;16128:31::-;;;;:::o;19778:205::-;7170:12;:10;:12::i;:::-;7160:22;;:6;;;;;;;;;;;:22;;;7152:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19882:4:::1;19852:19;:27;19872:6;19852:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;19923:6;19897:15;;:33;;;;;;;;;;;;;;;;;;19946:29;19968:6;19946:29;;;;;;:::i;:::-;;;;;;;;19778:205:::0;:::o;21327:120::-;7170:12;:10;:12::i;:::-;7160:22;;:6;;;;;;;;;;;:22;;;7152:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21432:6:::1;21422;:17;;;;:::i;:::-;21401:18;:38;;;;21327:120:::0;:::o;20534:99::-;7170:12;:10;:12::i;:::-;7160:22;;:6;;;;;;;;;;;:22;;;7152:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20620:5:::1;20603:14;;:22;;;;;;;;;;;;;;;;;;20534:99:::0;:::o;21173:146::-;7170:12;:10;:12::i;:::-;7160:22;;:6;;;;;;;;;;;:22;;;7152:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21220:17:::1;21240:21;21220:41;;21280:10;21272:28;;:39;21301:9;21272:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;21209:110;21173:146::o:0;3792:127::-;3866:7;3893:9;:18;3903:7;3893:18;;;;;;;;;;;;;;;;3886:25;;3792:127;;;:::o;7247:148::-;7170:12;:10;:12::i;:::-;7160:22;;:6;;;;;;;;;;;:22;;;7152:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;7354:1:::1;7317:40;;7338:6;;;;;;;;;;;7317:40;;;;;;;;;;;;7385:1;7368:6;;:19;;;;;;;;;;;;;;;;;;7247:148::o:0;22078:212::-;7170:12;:10;:12::i;:::-;7160:22;;:6;;;;;;;;;;;:22;;;7152:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22179:4:::1;22147:19;:29;22167:8;22147:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;22240:4;22194:33;:43;22228:8;22194:43;;;;;;;;;;;;;;;;:50;;;;;;;;;;;;;;;;;;22255:27;22273:8;22255:17;:27::i;:::-;22078:212:::0;:::o;15852:38::-;;;;;;;;;;;;;:::o;20379:147::-;7170:12;:10;:12::i;:::-;7160:22;;:6;;;;;;;;;;;:22;;;7152:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20512:6:::1;20468:33;:41;20502:6;20468:41;;;;;;;;;;;;;;;;:50;;;;;;;;;;;;;;;;;;20379:147:::0;;:::o;19534:232::-;7170:12;:10;:12::i;:::-;7160:22;;:6;;;;;;;;;;;:22;;;7152:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19598:14:::1;;;;;;;;;;;19597:15;19589:24;;;::::0;::::1;;19641:4;19624:14;;:21;;;;;;;;;;;;;;;;;;19670:12;19656:11;:26;;;;19711:15;19693;:33;;;;19742:16;;;;;;;;;;19534:232::o:0;16844:30::-;;;;:::o;7033:79::-;7071:7;7098:6;;;;;;;;;;;7091:13;;7033:79;:::o;15897:32::-;;;;;;;;;;;;;:::o;16051:::-;;;;:::o;3463:104::-;3519:13;3552:7;3545:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3463:104;:::o;22298:878::-;7170:12;:10;:12::i;:::-;7160:22;;:6;;;;;;;;;;;:22;;;7152:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22515:12:::1;22496:16;:31;;;;22556:12;22538:15;:30;;;;22599:13;22579:17;:33;;;;22642:13;22623:16;:32;;;;22678:6;22666:9;:18;;;;22708:7;22695:10;:20;;;;22744:55;22788:10;;22744:39;22766:16;;22744:17;;:21;;:39;;;;:::i;:::-;:43;;:55;;;;:::i;:::-;22728:13;:71;;;;22825:52;22867:9;;22825:37;22846:15;;22825:16;;:20;;:37;;;;:::i;:::-;:41;;:52;;;;:::i;:::-;22810:12;:67;;;;22955:2;22938:13;;:19;;:41;;;;;22977:2;22961:12;;:18;;22938:41;22930:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;23038:130;23049:17;;23068:16;;23086:10;;23098:16;;23141:15;;23158:9;;23038:130;;;;;;;;;;;:::i;:::-;;;;;;;;22298:878:::0;;;;;;:::o;21671:140::-;7170:12;:10;:12::i;:::-;7160:22;;:6;;;;;;;;;;;:22;;;7152:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21762:41:::1;21791:4;21797:5;21762:28;:41::i;:::-;21671:140:::0;;:::o;16203:24::-;;;;:::o;16234:25::-;;;;:::o;5025:286::-;5118:4;5135:146;5144:12;:10;:12::i;:::-;5158:7;5167:113;5206:15;5167:113;;;;;;;;;;;;;;;;;:11;:25;5179:12;:10;:12::i;:::-;5167:25;;;;;;;;;;;;;;;:34;5193:7;5167:34;;;;;;;;;;;;;;;;:38;;:113;;;;;:::i;:::-;5135:8;:146::i;:::-;5299:4;5292:11;;5025:286;;;;:::o;20641:103::-;7170:12;:10;:12::i;:::-;7160:22;;:6;;;;;;;;;;;:22;;;7152:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20731:5:::1;20712:16;;:24;;;;;;;;;;;;;;;;;;20641:103:::0;:::o;3927:175::-;4013:4;4030:42;4040:12;:10;:12::i;:::-;4054:9;4065:6;4030:9;:42::i;:::-;4090:4;4083:11;;3927:175;;;;:::o;16793:26::-;;;;:::o;16376:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;20752:174::-;7170:12;:10;:12::i;:::-;7160:22;;:6;;;;;;;;;;;:22;;;7152:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20840:3:::1;20831:5;:12;;20823:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;20913:5;20897:13;:21;;;;20752:174:::0;:::o;15969:35::-;;;;;;;;;;;;;:::o;21455:208::-;7170:12;:10;:12::i;:::-;7160:22;;:6;;;;;;;;;;;:22;;;7152:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21560:7:::1;21535:32;;:21;;;;;;;;;;;:32;;::::0;21527:41:::1;;;::::0;::::1;;21603:7;21579:21;;:31;;;;;;;;;;;;;;;;;;21626:29;21647:7;21626:29;;;;;;:::i;:::-;;;;;;;;21455:208:::0;:::o;4110:151::-;4199:7;4226:11;:18;4238:5;4226:18;;;;;;;;;;;;;;;:27;4245:7;4226:27;;;;;;;;;;;;;;;;4219:34;;4110:151;;;;:::o;16011:33::-;;;;:::o;16166:30::-;;;;:::o;7403:244::-;7170:12;:10;:12::i;:::-;7160:22;;:6;;;;;;;;;;;:22;;;7152:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;7512:1:::1;7492:22;;:8;:22;;::::0;7484:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;7602:8;7573:38;;7594:6;;;;;;;;;;;7573:38;;;;;;;;;;;;7631:8;7622:6;;:17;;;;;;;;;;;;;;;;;;7403:244:::0;:::o;16090:31::-;;;;:::o;15938:24::-;;;;:::o;20940:217::-;7170:12;:10;:12::i;:::-;7160:22;;:6;;;;;;;;;;;:22;;;7152:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21024:6:::1;21015:5;:16;;;;:::i;:::-;21007:24;;21074:2;21059:12;;:17;;;;:::i;:::-;21050:5;:26;;21042:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;21144:5;21132:9;:17;;;;20940:217:::0;:::o;589:179::-;647:7;667:9;683:1;679;:5;;;;:::i;:::-;667:17;;708:1;703;:6;;695:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;759:1;752:8;;;589:179;;;;:::o;213:98::-;266:7;293:10;286:17;;213:98;:::o;1118:248::-;1176:7;1205:1;1200;:6;1196:47;;1230:1;1223:8;;;;1196:47;1255:9;1271:1;1267;:5;;;;:::i;:::-;1255:17;;1300:1;1295;1291;:5;;;;:::i;:::-;:10;1283:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;1357:1;1350:8;;;1118:248;;;;;:::o;1374:132::-;1432:7;1459:39;1463:1;1466;1459:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;1452:46;;1374:132;;;;:::o;29555:1025::-;29634:1;29624:6;:11;29620:50;29652:7;29620:50;29680:24;29697:6;29680:16;:24::i;:::-;29717:12;29732:4;29717:19;;29747:15;29765:4;29747:22;;29790:23;29852:31;29873:9;;29852:16;;:20;;:31;;;;:::i;:::-;29816:33;29838:10;;29816:17;;:21;;:33;;;;:::i;:::-;:67;;;;:::i;:::-;29790:93;;29896:19;29948:1;29930:15;:19;29926:108;;;29980:42;30006:15;29980:21;:25;;:42;;;;:::i;:::-;29966:56;;29926:108;30044:23;30112:11;30070:39;30091:17;;30070:16;;:20;;:39;;;;:::i;:::-;:53;;;;:::i;:::-;30044:79;;30134:17;30182:11;30154:25;30168:10;;30154:9;;:13;;:25;;;;:::i;:::-;:39;;;;:::i;:::-;30134:59;;30236:1;30218:15;:19;30214:123;;;30276:15;;;;;;;;;;;30268:29;;30305:15;30268:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30254:71;;;;;30214:123;30373:1;30361:9;:13;30357:108;;;30416:9;;;;;;;;;;;30408:23;;30439:9;30408:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30391:62;;;;;30357:108;30482:90;30510:15;30540:7;:21;;;;;30551:10;30540:21;30482:90;;;;;;;:::i;:::-;;;;;;;;29609:971;;;;;;29555:1025;;:::o;776:136::-;834:7;861:43;865:1;868;861:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;854:50;;776:136;;;;:::o;6251:346::-;6370:1;6353:19;;:5;:19;;;6345:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6451:1;6432:21;;:7;:21;;;6424:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6535:6;6505:11;:18;6517:5;6505:18;;;;;;;;;;;;;;;:27;6524:7;6505:27;;;;;;;;;;;;;;;:36;;;;6573:7;6557:32;;6566:5;6557:32;;;6582:6;6557:32;;;;;;:::i;:::-;;;;;;;;6251:346;;;:::o;5319:538::-;5443:1;5425:20;;:6;:20;;;5417:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5527:1;5506:23;;:9;:23;;;5498:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5582:47;5603:6;5611:9;5622:6;5582:20;:47::i;:::-;5662:70;5684:6;5662:70;;;;;;;;;;;;;;;;;:9;:17;5672:6;5662:17;;;;;;;;;;;;;;;;:21;;:70;;;;;:::i;:::-;5642:9;:17;5652:6;5642:17;;;;;;;;;;;;;;;:90;;;;5766:32;5791:6;5766:9;:20;5776:9;5766:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;5743:9;:20;5753:9;5743:20;;;;;;;;;;;;;;;:55;;;;5831:9;5814:35;;5823:6;5814:35;;;5842:6;5814:35;;;;;;:::i;:::-;;;;;;;;5319:538;;;:::o;23318:4235::-;23434:1;23418:18;;:4;:18;;;23410:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;23512:1;23498:16;;:2;:16;;;23490:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;23568:21;23600:20;23631:14;23663:33;:39;23697:4;23663:39;;;;;;;;;;;;;;;;;;;;;;;;;23658:142;;23727:14;;;;;;;;;;;23719:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;23658:142;23826:1;23816:6;:11;23812:3678;;23844:28;23860:4;23866:2;23870:1;23844:15;:28::i;:::-;23887:7;;;;;23812:3678;23950:8;;;;;;;;;;;23949:9;:39;;;;;23963:19;:25;23983:4;23963:25;;;;;;;;;;;;;;;;;;;;;;;;;23962:26;23949:39;:67;;;;;23993:19;:23;24013:2;23993:23;;;;;;;;;;;;;;;;;;;;;;;;;23992:24;23949:67;23931:3559;;;24043:14;24060:25;:29;24086:2;24060:29;;;;;;;;;;;;;;;;;;;;;;;;;24043:46;;24108:9;24104:1514;;;24154:17;;24138:33;;24205:16;;24190:31;;24249:10;;24240:19;;24284:14;;;;;;;;;;;24280:269;;;24388:13;;24346:28;:39;24375:9;24346:39;;;;;;;;;;;;;;;;:55;;;;:::i;:::-;24327:15;:74;;24319:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;24514:15;24472:28;:39;24501:9;24472:39;;;;;;;;;;;;;;;:57;;;;24280:269;24104:1514;;;24633:16;;24617:32;;24683:15;;24668:30;;24726:9;;24717:18;;24760:14;;;;;;;;;;;24756:598;;;24832:1;24818:11;;:15;;;;:::i;:::-;24803:12;:30;24795:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;24897:13;;24882:11;:28;;24874:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25004:12;24965:24;:35;24990:9;24965:35;;;;;;;;;;;;;;;;:51;24957:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;25128:13;;25086:28;:39;25115:9;25086:39;;;;;;;;;;;;;;;;:55;;;;:::i;:::-;25067:15;:74;;25059:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;25250:12;25212:24;:35;25237:9;25212:35;;;;;;;;;;;;;;;:50;;;;25323:15;25281:28;:39;25310:9;25281:39;;;;;;;;;;;;;;;:57;;;;24756:598;25374:16;;;;;;;;;;;25370:233;;;25407:32;25442:13;25452:2;25442:9;:13::i;:::-;25407:48;;25515:9;;25505:6;25478:24;:33;;;;:::i;:::-;:46;;25470:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;25392:211;25370:233;24104:1514;25634:17;25654:43;25690:6;25654:31;25672:12;25654:13;:17;;:31;;;;:::i;:::-;:35;;:43;;;;:::i;:::-;25634:63;;25714:28;25745:24;25763:4;25745:9;:24::i;:::-;25714:55;;25786:12;25825:18;;25801:20;:42;;25786:57;;25864:7;:43;;;;;25876:25;:31;25902:4;25876:31;;;;;;;;;;;;;;;;;;;;;;;;;25875:32;25864:43;25860:1272;;;25939:4;25928:8;;:15;;;;;;;;;;;;;;;;;;25964:18;26007:21;;;;;;;;;;;:41;;;;;26047:1;26032:12;:16;26007:41;26003:875;;;26073:20;26096:25;26110:10;;26096:9;;:13;;:25;;;;:::i;:::-;26073:48;;26144:24;26171:105;26263:12;26171:61;26222:9;;26171:20;:50;;:61;;;;:::i;:::-;:91;;:105;;;;:::i;:::-;26144:132;;26299:22;26324:106;26417:12;26324:62;26375:10;;26324:20;:50;;:62;;;;:::i;:::-;:92;;:106;;;;:::i;:::-;26299:131;;26455:21;26479:104;26570:12;;26479:60;26526:12;26479:16;:46;;:60;;;;:::i;:::-;:90;;:104;;;;:::i;:::-;26455:128;;26608:22;26633:103;26722:13;;26633:58;26678:12;26633:14;:44;;:58;;;;:::i;:::-;:88;;:103;;;;:::i;:::-;26608:128;;26774:33;26793:13;26774:14;:18;;:33;;;;:::i;:::-;26761:46;;26832:26;26847:10;26832:14;:26::i;:::-;26050:828;;;;;26003:875;26898:24;26925:34;26948:10;26925:18;;:22;;:34;;;;:::i;:::-;26898:61;;26978:38;26999:16;26978:20;:38::i;:::-;27047:1;27035:9;:13;;;;27080:1;27067:10;:14;;;;27111:5;27100:8;;:16;;;;;;;;;;;;;;;;;;25909:1223;;25860:1272;27148:12;27163:30;27189:3;27163:21;27174:9;27163:6;:10;;:21;;;;:::i;:::-;:25;;:30;;;;:::i;:::-;27148:45;;27219:16;27230:4;27219:6;:10;;:16;;;;:::i;:::-;27210:25;;27256:9;27252:155;;;27299:20;27314:4;27299:10;;:14;;:20;;;;:::i;:::-;27286:10;:33;;;;27252:155;;;27372:19;27386:4;27372:9;;:13;;:19;;;;:::i;:::-;27360:9;:31;;;;27252:155;27423:42;27439:4;27453;27460;27423:15;:42::i;:::-;24028:3462;;;;;23931:3559;27502:33;27518:4;27524:2;27528:6;27502:15;:33::i;:::-;23397:4156;;;23318:4235;;;;:::o;920:190::-;1006:7;1039:1;1034;:6;;1042:12;1026:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1066:9;1082:1;1078;:5;;;;:::i;:::-;1066:17;;1101:1;1094:8;;;920:190;;;;;:::o;21819:188::-;21936:5;21902:25;:31;21928:4;21902:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;21993:5;21959:40;;21987:4;21959:40;;;;;;;;;;;;21819:188;;:::o;1514:189::-;1600:7;1632:1;1628;:5;1635:12;1620:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1659:9;1675:1;1671;:5;;;;:::i;:::-;1659:17;;1694:1;1687:8;;;1514:189;;;;;:::o;28051:499::-;28117:21;28155:1;28141:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28117:40;;28186:4;28168;28173:1;28168:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;28212:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28202:4;28207:1;28202:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;28245:62;28262:4;28277:15;;;;;;;;;;;28295:11;28245:8;:62::i;:::-;28318:15;;;;;;;;;;;:66;;;28399:11;28425:1;28469:4;28496;28516:15;28318:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28106:444;28051:499;:::o;6605:91::-;;;;:::o;27563:480::-;27622:12;27637:13;27648:1;27637:6;:10;;:13;;;;:::i;:::-;27622:28;;27661:17;27681:16;27692:4;27681:6;:10;;:16;;;;:::i;:::-;27661:36;;27708:22;27733:21;27708:46;;27765:22;27782:4;27765:16;:22::i;:::-;27868:18;27889:41;27915:14;27889:21;:25;;:41;;;;:::i;:::-;27868:62;;27941:35;27954:9;27965:10;27941:12;:35::i;:::-;27992:43;28007:4;28013:10;28025:9;27992:43;;;;;;;;:::i;:::-;;;;;;;;27611:432;;;;27563:480;:::o;28558:513::-;28706:62;28723:4;28738:15;;;;;;;;;;;28756:11;28706:8;:62::i;:::-;28811:15;;;;;;;;;;;:31;;;28850:9;28883:4;28903:11;28929:1;28972;29015:7;:5;:7::i;:::-;29037:15;28811:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28558:513;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:329::-;749:6;798:2;786:9;777:7;773:23;769:32;766:119;;;804:79;;:::i;:::-;766:119;924:1;949:53;994:7;985:6;974:9;970:22;949:53;:::i;:::-;939:63;;895:117;690:329;;;;:::o;1025:99::-;1077:6;1111:5;1105:12;1095:22;;1025:99;;;:::o;1130:169::-;1214:11;1248:6;1243:3;1236:19;1288:4;1283:3;1279:14;1264:29;;1130:169;;;;:::o;1305:246::-;1386:1;1396:113;1410:6;1407:1;1404:13;1396:113;;;1495:1;1490:3;1486:11;1480:18;1476:1;1471:3;1467:11;1460:39;1432:2;1429:1;1425:10;1420:15;;1396:113;;;1543:1;1534:6;1529:3;1525:16;1518:27;1367:184;1305:246;;;:::o;1557:102::-;1598:6;1649:2;1645:7;1640:2;1633:5;1629:14;1625:28;1615:38;;1557:102;;;:::o;1665:377::-;1753:3;1781:39;1814:5;1781:39;:::i;:::-;1836:71;1900:6;1895:3;1836:71;:::i;:::-;1829:78;;1916:65;1974:6;1969:3;1962:4;1955:5;1951:16;1916:65;:::i;:::-;2006:29;2028:6;2006:29;:::i;:::-;2001:3;1997:39;1990:46;;1757:285;1665:377;;;;:::o;2048:313::-;2161:4;2199:2;2188:9;2184:18;2176:26;;2248:9;2242:4;2238:20;2234:1;2223:9;2219:17;2212:47;2276:78;2349:4;2340:6;2276:78;:::i;:::-;2268:86;;2048:313;;;;:::o;2367:126::-;2404:7;2444:42;2437:5;2433:54;2422:65;;2367:126;;;:::o;2499:96::-;2536:7;2565:24;2583:5;2565:24;:::i;:::-;2554:35;;2499:96;;;:::o;2601:122::-;2674:24;2692:5;2674:24;:::i;:::-;2667:5;2664:35;2654:63;;2713:1;2710;2703:12;2654:63;2601:122;:::o;2729:139::-;2775:5;2813:6;2800:20;2791:29;;2829:33;2856:5;2829:33;:::i;:::-;2729:139;;;;:::o;2874:90::-;2908:7;2951:5;2944:13;2937:21;2926:32;;2874:90;;;:::o;2970:116::-;3040:21;3055:5;3040:21;:::i;:::-;3033:5;3030:32;3020:60;;3076:1;3073;3066:12;3020:60;2970:116;:::o;3092:133::-;3135:5;3173:6;3160:20;3151:29;;3189:30;3213:5;3189:30;:::i;:::-;3092:133;;;;:::o;3231:468::-;3296:6;3304;3353:2;3341:9;3332:7;3328:23;3324:32;3321:119;;;3359:79;;:::i;:::-;3321:119;3479:1;3504:53;3549:7;3540:6;3529:9;3525:22;3504:53;:::i;:::-;3494:63;;3450:117;3606:2;3632:50;3674:7;3665:6;3654:9;3650:22;3632:50;:::i;:::-;3622:60;;3577:115;3231:468;;;;;:::o;3705:474::-;3773:6;3781;3830:2;3818:9;3809:7;3805:23;3801:32;3798:119;;;3836:79;;:::i;:::-;3798:119;3956:1;3981:53;4026:7;4017:6;4006:9;4002:22;3981:53;:::i;:::-;3971:63;;3927:117;4083:2;4109:53;4154:7;4145:6;4134:9;4130:22;4109:53;:::i;:::-;4099:63;;4054:118;3705:474;;;;;:::o;4185:109::-;4266:21;4281:5;4266:21;:::i;:::-;4261:3;4254:34;4185:109;;:::o;4300:210::-;4387:4;4425:2;4414:9;4410:18;4402:26;;4438:65;4500:1;4489:9;4485:17;4476:6;4438:65;:::i;:::-;4300:210;;;;:::o;4516:60::-;4544:3;4565:5;4558:12;;4516:60;;;:::o;4582:142::-;4632:9;4665:53;4683:34;4692:24;4710:5;4692:24;:::i;:::-;4683:34;:::i;:::-;4665:53;:::i;:::-;4652:66;;4582:142;;;:::o;4730:126::-;4780:9;4813:37;4844:5;4813:37;:::i;:::-;4800:50;;4730:126;;;:::o;4862:153::-;4939:9;4972:37;5003:5;4972:37;:::i;:::-;4959:50;;4862:153;;;:::o;5021:185::-;5135:64;5193:5;5135:64;:::i;:::-;5130:3;5123:77;5021:185;;:::o;5212:276::-;5332:4;5370:2;5359:9;5355:18;5347:26;;5383:98;5478:1;5467:9;5463:17;5454:6;5383:98;:::i;:::-;5212:276;;;;:::o;5494:118::-;5581:24;5599:5;5581:24;:::i;:::-;5576:3;5569:37;5494:118;;:::o;5618:222::-;5711:4;5749:2;5738:9;5734:18;5726:26;;5762:71;5830:1;5819:9;5815:17;5806:6;5762:71;:::i;:::-;5618:222;;;;:::o;5846:329::-;5905:6;5954:2;5942:9;5933:7;5929:23;5925:32;5922:119;;;5960:79;;:::i;:::-;5922:119;6080:1;6105:53;6150:7;6141:6;6130:9;6126:22;6105:53;:::i;:::-;6095:63;;6051:117;5846:329;;;;:::o;6181:117::-;6290:1;6287;6280:12;6304:180;6352:77;6349:1;6342:88;6449:4;6446:1;6439:15;6473:4;6470:1;6463:15;6490:281;6573:27;6595:4;6573:27;:::i;:::-;6565:6;6561:40;6703:6;6691:10;6688:22;6667:18;6655:10;6652:34;6649:62;6646:88;;;6714:18;;:::i;:::-;6646:88;6754:10;6750:2;6743:22;6533:238;6490:281;;:::o;6777:129::-;6811:6;6838:20;;:::i;:::-;6828:30;;6867:33;6895:4;6887:6;6867:33;:::i;:::-;6777:129;;;:::o;6912:311::-;6989:4;7079:18;7071:6;7068:30;7065:56;;;7101:18;;:::i;:::-;7065:56;7151:4;7143:6;7139:17;7131:25;;7211:4;7205;7201:15;7193:23;;6912:311;;;:::o;7229:117::-;7338:1;7335;7328:12;7369:710;7465:5;7490:81;7506:64;7563:6;7506:64;:::i;:::-;7490:81;:::i;:::-;7481:90;;7591:5;7620:6;7613:5;7606:21;7654:4;7647:5;7643:16;7636:23;;7707:4;7699:6;7695:17;7687:6;7683:30;7736:3;7728:6;7725:15;7722:122;;;7755:79;;:::i;:::-;7722:122;7870:6;7853:220;7887:6;7882:3;7879:15;7853:220;;;7962:3;7991:37;8024:3;8012:10;7991:37;:::i;:::-;7986:3;7979:50;8058:4;8053:3;8049:14;8042:21;;7929:144;7913:4;7908:3;7904:14;7897:21;;7853:220;;;7857:21;7471:608;;7369:710;;;;;:::o;8102:370::-;8173:5;8222:3;8215:4;8207:6;8203:17;8199:27;8189:122;;8230:79;;:::i;:::-;8189:122;8347:6;8334:20;8372:94;8462:3;8454:6;8447:4;8439:6;8435:17;8372:94;:::i;:::-;8363:103;;8179:293;8102:370;;;;:::o;8478:311::-;8555:4;8645:18;8637:6;8634:30;8631:56;;;8667:18;;:::i;:::-;8631:56;8717:4;8709:6;8705:17;8697:25;;8777:4;8771;8767:15;8759:23;;8478:311;;;:::o;8812:710::-;8908:5;8933:81;8949:64;9006:6;8949:64;:::i;:::-;8933:81;:::i;:::-;8924:90;;9034:5;9063:6;9056:5;9049:21;9097:4;9090:5;9086:16;9079:23;;9150:4;9142:6;9138:17;9130:6;9126:30;9179:3;9171:6;9168:15;9165:122;;;9198:79;;:::i;:::-;9165:122;9313:6;9296:220;9330:6;9325:3;9322:15;9296:220;;;9405:3;9434:37;9467:3;9455:10;9434:37;:::i;:::-;9429:3;9422:50;9501:4;9496:3;9492:14;9485:21;;9372:144;9356:4;9351:3;9347:14;9340:21;;9296:220;;;9300:21;8914:608;;8812:710;;;;;:::o;9545:370::-;9616:5;9665:3;9658:4;9650:6;9646:17;9642:27;9632:122;;9673:79;;:::i;:::-;9632:122;9790:6;9777:20;9815:94;9905:3;9897:6;9890:4;9882:6;9878:17;9815:94;:::i;:::-;9806:103;;9622:293;9545:370;;;;:::o;9921:894::-;10039:6;10047;10096:2;10084:9;10075:7;10071:23;10067:32;10064:119;;;10102:79;;:::i;:::-;10064:119;10250:1;10239:9;10235:17;10222:31;10280:18;10272:6;10269:30;10266:117;;;10302:79;;:::i;:::-;10266:117;10407:78;10477:7;10468:6;10457:9;10453:22;10407:78;:::i;:::-;10397:88;;10193:302;10562:2;10551:9;10547:18;10534:32;10593:18;10585:6;10582:30;10579:117;;;10615:79;;:::i;:::-;10579:117;10720:78;10790:7;10781:6;10770:9;10766:22;10720:78;:::i;:::-;10710:88;;10505:303;9921:894;;;;;:::o;10821:619::-;10898:6;10906;10914;10963:2;10951:9;10942:7;10938:23;10934:32;10931:119;;;10969:79;;:::i;:::-;10931:119;11089:1;11114:53;11159:7;11150:6;11139:9;11135:22;11114:53;:::i;:::-;11104:63;;11060:117;11216:2;11242:53;11287:7;11278:6;11267:9;11263:22;11242:53;:::i;:::-;11232:63;;11187:118;11344:2;11370:53;11415:7;11406:6;11395:9;11391:22;11370:53;:::i;:::-;11360:63;;11315:118;10821:619;;;;;:::o;11446:86::-;11481:7;11521:4;11514:5;11510:16;11499:27;;11446:86;;;:::o;11538:112::-;11621:22;11637:5;11621:22;:::i;:::-;11616:3;11609:35;11538:112;;:::o;11656:214::-;11745:4;11783:2;11772:9;11768:18;11760:26;;11796:67;11860:1;11849:9;11845:17;11836:6;11796:67;:::i;:::-;11656:214;;;;:::o;11876:118::-;11963:24;11981:5;11963:24;:::i;:::-;11958:3;11951:37;11876:118;;:::o;12000:222::-;12093:4;12131:2;12120:9;12116:18;12108:26;;12144:71;12212:1;12201:9;12197:17;12188:6;12144:71;:::i;:::-;12000:222;;;;:::o;12228:323::-;12284:6;12333:2;12321:9;12312:7;12308:23;12304:32;12301:119;;;12339:79;;:::i;:::-;12301:119;12459:1;12484:50;12526:7;12517:6;12506:9;12502:22;12484:50;:::i;:::-;12474:60;;12430:114;12228:323;;;;:::o;12557:104::-;12602:7;12631:24;12649:5;12631:24;:::i;:::-;12620:35;;12557:104;;;:::o;12667:142::-;12770:32;12796:5;12770:32;:::i;:::-;12765:3;12758:45;12667:142;;:::o;12815:254::-;12924:4;12962:2;12951:9;12947:18;12939:26;;12975:87;13059:1;13048:9;13044:17;13035:6;12975:87;:::i;:::-;12815:254;;;;:::o;13075:1057::-;13179:6;13187;13195;13203;13211;13219;13268:3;13256:9;13247:7;13243:23;13239:33;13236:120;;;13275:79;;:::i;:::-;13236:120;13395:1;13420:53;13465:7;13456:6;13445:9;13441:22;13420:53;:::i;:::-;13410:63;;13366:117;13522:2;13548:53;13593:7;13584:6;13573:9;13569:22;13548:53;:::i;:::-;13538:63;;13493:118;13650:2;13676:53;13721:7;13712:6;13701:9;13697:22;13676:53;:::i;:::-;13666:63;;13621:118;13778:2;13804:53;13849:7;13840:6;13829:9;13825:22;13804:53;:::i;:::-;13794:63;;13749:118;13906:3;13933:53;13978:7;13969:6;13958:9;13954:22;13933:53;:::i;:::-;13923:63;;13877:119;14035:3;14062:53;14107:7;14098:6;14087:9;14083:22;14062:53;:::i;:::-;14052:63;;14006:119;13075:1057;;;;;;;;:::o;14138:474::-;14206:6;14214;14263:2;14251:9;14242:7;14238:23;14234:32;14231:119;;;14269:79;;:::i;:::-;14231:119;14389:1;14414:53;14459:7;14450:6;14439:9;14435:22;14414:53;:::i;:::-;14404:63;;14360:117;14516:2;14542:53;14587:7;14578:6;14567:9;14563:22;14542:53;:::i;:::-;14532:63;;14487:118;14138:474;;;;;:::o;14618:182::-;14758:34;14754:1;14746:6;14742:14;14735:58;14618:182;:::o;14806:366::-;14948:3;14969:67;15033:2;15028:3;14969:67;:::i;:::-;14962:74;;15045:93;15134:3;15045:93;:::i;:::-;15163:2;15158:3;15154:12;15147:19;;14806:366;;;:::o;15178:419::-;15344:4;15382:2;15371:9;15367:18;15359:26;;15431:9;15425:4;15421:20;15417:1;15406:9;15402:17;15395:47;15459:131;15585:4;15459:131;:::i;:::-;15451:139;;15178:419;;;:::o;15603:180::-;15651:77;15648:1;15641:88;15748:4;15745:1;15738:15;15772:4;15769:1;15762:15;15789:410;15829:7;15852:20;15870:1;15852:20;:::i;:::-;15847:25;;15886:20;15904:1;15886:20;:::i;:::-;15881:25;;15941:1;15938;15934:9;15963:30;15981:11;15963:30;:::i;:::-;15952:41;;16142:1;16133:7;16129:15;16126:1;16123:22;16103:1;16096:9;16076:83;16053:139;;16172:18;;:::i;:::-;16053:139;15837:362;15789:410;;;;:::o;16205:180::-;16253:77;16250:1;16243:88;16350:4;16347:1;16340:15;16374:4;16371:1;16364:15;16391:320;16435:6;16472:1;16466:4;16462:12;16452:22;;16519:1;16513:4;16509:12;16540:18;16530:81;;16596:4;16588:6;16584:17;16574:27;;16530:81;16658:2;16650:6;16647:14;16627:18;16624:38;16621:84;;16677:18;;:::i;:::-;16621:84;16442:269;16391:320;;;:::o;16717:180::-;16857:32;16853:1;16845:6;16841:14;16834:56;16717:180;:::o;16903:366::-;17045:3;17066:67;17130:2;17125:3;17066:67;:::i;:::-;17059:74;;17142:93;17231:3;17142:93;:::i;:::-;17260:2;17255:3;17251:12;17244:19;;16903:366;;;:::o;17275:419::-;17441:4;17479:2;17468:9;17464:18;17456:26;;17528:9;17522:4;17518:20;17514:1;17503:9;17499:17;17492:47;17556:131;17682:4;17556:131;:::i;:::-;17548:139;;17275:419;;;:::o;17700:221::-;17840:34;17836:1;17828:6;17824:14;17817:58;17909:4;17904:2;17896:6;17892:15;17885:29;17700:221;:::o;17927:366::-;18069:3;18090:67;18154:2;18149:3;18090:67;:::i;:::-;18083:74;;18166:93;18255:3;18166:93;:::i;:::-;18284:2;18279:3;18275:12;18268:19;;17927:366;;;:::o;18299:419::-;18465:4;18503:2;18492:9;18488:18;18480:26;;18552:9;18546:4;18542:20;18538:1;18527:9;18523:17;18516:47;18580:131;18706:4;18580:131;:::i;:::-;18572:139;;18299:419;;;:::o;18724:180::-;18772:77;18769:1;18762:88;18869:4;18866:1;18859:15;18893:4;18890:1;18883:15;18910:233;18949:3;18972:24;18990:5;18972:24;:::i;:::-;18963:33;;19018:66;19011:5;19008:77;19005:103;;19088:18;;:::i;:::-;19005:103;19135:1;19128:5;19124:13;19117:20;;18910:233;;;:::o;19149:223::-;19289:34;19285:1;19277:6;19273:14;19266:58;19358:6;19353:2;19345:6;19341:15;19334:31;19149:223;:::o;19378:366::-;19520:3;19541:67;19605:2;19600:3;19541:67;:::i;:::-;19534:74;;19617:93;19706:3;19617:93;:::i;:::-;19735:2;19730:3;19726:12;19719:19;;19378:366;;;:::o;19750:419::-;19916:4;19954:2;19943:9;19939:18;19931:26;;20003:9;19997:4;19993:20;19989:1;19978:9;19974:17;19967:47;20031:131;20157:4;20031:131;:::i;:::-;20023:139;;19750:419;;;:::o;20175:775::-;20408:4;20446:3;20435:9;20431:19;20423:27;;20460:71;20528:1;20517:9;20513:17;20504:6;20460:71;:::i;:::-;20541:72;20609:2;20598:9;20594:18;20585:6;20541:72;:::i;:::-;20623;20691:2;20680:9;20676:18;20667:6;20623:72;:::i;:::-;20705;20773:2;20762:9;20758:18;20749:6;20705:72;:::i;:::-;20787:73;20855:3;20844:9;20840:19;20831:6;20787:73;:::i;:::-;20870;20938:3;20927:9;20923:19;20914:6;20870:73;:::i;:::-;20175:775;;;;;;;;;:::o;20956:225::-;21096:34;21092:1;21084:6;21080:14;21073:58;21165:8;21160:2;21152:6;21148:15;21141:33;20956:225;:::o;21187:366::-;21329:3;21350:67;21414:2;21409:3;21350:67;:::i;:::-;21343:74;;21426:93;21515:3;21426:93;:::i;:::-;21544:2;21539:3;21535:12;21528:19;;21187:366;;;:::o;21559:419::-;21725:4;21763:2;21752:9;21748:18;21740:26;;21812:9;21806:4;21802:20;21798:1;21787:9;21783:17;21776:47;21840:131;21966:4;21840:131;:::i;:::-;21832:139;;21559:419;;;:::o;21984:225::-;22124:34;22120:1;22112:6;22108:14;22101:58;22193:8;22188:2;22180:6;22176:15;22169:33;21984:225;:::o;22215:366::-;22357:3;22378:67;22442:2;22437:3;22378:67;:::i;:::-;22371:74;;22454:93;22543:3;22454:93;:::i;:::-;22572:2;22567:3;22563:12;22556:19;;22215:366;;;:::o;22587:419::-;22753:4;22791:2;22780:9;22776:18;22768:26;;22840:9;22834:4;22830:20;22826:1;22815:9;22811:17;22804:47;22868:131;22994:4;22868:131;:::i;:::-;22860:139;;22587:419;;;:::o;23012:180::-;23060:77;23057:1;23050:88;23157:4;23154:1;23147:15;23181:4;23178:1;23171:15;23198:185;23238:1;23255:20;23273:1;23255:20;:::i;:::-;23250:25;;23289:20;23307:1;23289:20;:::i;:::-;23284:25;;23328:1;23318:35;;23333:18;;:::i;:::-;23318:35;23375:1;23372;23368:9;23363:14;;23198:185;;;;:::o;23389:227::-;23529:34;23525:1;23517:6;23513:14;23506:58;23598:10;23593:2;23585:6;23581:15;23574:35;23389:227;:::o;23622:366::-;23764:3;23785:67;23849:2;23844:3;23785:67;:::i;:::-;23778:74;;23861:93;23950:3;23861:93;:::i;:::-;23979:2;23974:3;23970:12;23963:19;;23622:366;;;:::o;23994:419::-;24160:4;24198:2;24187:9;24183:18;24175:26;;24247:9;24241:4;24237:20;24233:1;24222:9;24218:17;24211:47;24275:131;24401:4;24275:131;:::i;:::-;24267:139;;23994:419;;;:::o;24419:191::-;24459:3;24478:20;24496:1;24478:20;:::i;:::-;24473:25;;24512:20;24530:1;24512:20;:::i;:::-;24507:25;;24555:1;24552;24548:9;24541:16;;24576:3;24573:1;24570:10;24567:36;;;24583:18;;:::i;:::-;24567:36;24419:191;;;;:::o;24616:177::-;24756:29;24752:1;24744:6;24740:14;24733:53;24616:177;:::o;24799:366::-;24941:3;24962:67;25026:2;25021:3;24962:67;:::i;:::-;24955:74;;25038:93;25127:3;25038:93;:::i;:::-;25156:2;25151:3;25147:12;25140:19;;24799:366;;;:::o;25171:419::-;25337:4;25375:2;25364:9;25360:18;25352:26;;25424:9;25418:4;25414:20;25410:1;25399:9;25395:17;25388:47;25452:131;25578:4;25452:131;:::i;:::-;25444:139;;25171:419;;;:::o;25596:220::-;25736:34;25732:1;25724:6;25720:14;25713:58;25805:3;25800:2;25792:6;25788:15;25781:28;25596:220;:::o;25822:366::-;25964:3;25985:67;26049:2;26044:3;25985:67;:::i;:::-;25978:74;;26061:93;26150:3;26061:93;:::i;:::-;26179:2;26174:3;26170:12;26163:19;;25822:366;;;:::o;26194:419::-;26360:4;26398:2;26387:9;26383:18;26375:26;;26447:9;26441:4;26437:20;26433:1;26422:9;26418:17;26411:47;26475:131;26601:4;26475:131;:::i;:::-;26467:139;;26194:419;;;:::o;26619:147::-;26720:11;26757:3;26742:18;;26619:147;;;;:::o;26772:114::-;;:::o;26892:398::-;27051:3;27072:83;27153:1;27148:3;27072:83;:::i;:::-;27065:90;;27164:93;27253:3;27164:93;:::i;:::-;27282:1;27277:3;27273:11;27266:18;;26892:398;;;:::o;27296:379::-;27480:3;27502:147;27645:3;27502:147;:::i;:::-;27495:154;;27666:3;27659:10;;27296:379;;;:::o;27681:320::-;27796:4;27834:2;27823:9;27819:18;27811:26;;27847:71;27915:1;27904:9;27900:17;27891:6;27847:71;:::i;:::-;27928:66;27990:2;27979:9;27975:18;27966:6;27928:66;:::i;:::-;27681:320;;;;;:::o;28007:223::-;28147:34;28143:1;28135:6;28131:14;28124:58;28216:6;28211:2;28203:6;28199:15;28192:31;28007:223;:::o;28236:366::-;28378:3;28399:67;28463:2;28458:3;28399:67;:::i;:::-;28392:74;;28475:93;28564:3;28475:93;:::i;:::-;28593:2;28588:3;28584:12;28577:19;;28236:366;;;:::o;28608:419::-;28774:4;28812:2;28801:9;28797:18;28789:26;;28861:9;28855:4;28851:20;28847:1;28836:9;28832:17;28825:47;28889:131;29015:4;28889:131;:::i;:::-;28881:139;;28608:419;;;:::o;29033:221::-;29173:34;29169:1;29161:6;29157:14;29150:58;29242:4;29237:2;29229:6;29225:15;29218:29;29033:221;:::o;29260:366::-;29402:3;29423:67;29487:2;29482:3;29423:67;:::i;:::-;29416:74;;29499:93;29588:3;29499:93;:::i;:::-;29617:2;29612:3;29608:12;29601:19;;29260:366;;;:::o;29632:419::-;29798:4;29836:2;29825:9;29821:18;29813:26;;29885:9;29879:4;29875:20;29871:1;29860:9;29856:17;29849:47;29913:131;30039:4;29913:131;:::i;:::-;29905:139;;29632:419;;;:::o;30057:224::-;30197:34;30193:1;30185:6;30181:14;30174:58;30266:7;30261:2;30253:6;30249:15;30242:32;30057:224;:::o;30287:366::-;30429:3;30450:67;30514:2;30509:3;30450:67;:::i;:::-;30443:74;;30526:93;30615:3;30526:93;:::i;:::-;30644:2;30639:3;30635:12;30628:19;;30287:366;;;:::o;30659:419::-;30825:4;30863:2;30852:9;30848:18;30840:26;;30912:9;30906:4;30902:20;30898:1;30887:9;30883:17;30876:47;30940:131;31066:4;30940:131;:::i;:::-;30932:139;;30659:419;;;:::o;31084:222::-;31224:34;31220:1;31212:6;31208:14;31201:58;31293:5;31288:2;31280:6;31276:15;31269:30;31084:222;:::o;31312:366::-;31454:3;31475:67;31539:2;31534:3;31475:67;:::i;:::-;31468:74;;31551:93;31640:3;31551:93;:::i;:::-;31669:2;31664:3;31660:12;31653:19;;31312:366;;;:::o;31684:419::-;31850:4;31888:2;31877:9;31873:18;31865:26;;31937:9;31931:4;31927:20;31923:1;31912:9;31908:17;31901:47;31965:131;32091:4;31965:131;:::i;:::-;31957:139;;31684:419;;;:::o;32109:225::-;32249:34;32245:1;32237:6;32233:14;32226:58;32318:8;32313:2;32305:6;32301:15;32294:33;32109:225;:::o;32340:366::-;32482:3;32503:67;32567:2;32562:3;32503:67;:::i;:::-;32496:74;;32579:93;32668:3;32579:93;:::i;:::-;32697:2;32692:3;32688:12;32681:19;;32340:366;;;:::o;32712:419::-;32878:4;32916:2;32905:9;32901:18;32893:26;;32965:9;32959:4;32955:20;32951:1;32940:9;32936:17;32929:47;32993:131;33119:4;32993:131;:::i;:::-;32985:139;;32712:419;;;:::o;33137:223::-;33277:34;33273:1;33265:6;33261:14;33254:58;33346:6;33341:2;33333:6;33329:15;33322:31;33137:223;:::o;33366:366::-;33508:3;33529:67;33593:2;33588:3;33529:67;:::i;:::-;33522:74;;33605:93;33694:3;33605:93;:::i;:::-;33723:2;33718:3;33714:12;33707:19;;33366:366;;;:::o;33738:419::-;33904:4;33942:2;33931:9;33927:18;33919:26;;33991:9;33985:4;33981:20;33977:1;33966:9;33962:17;33955:47;34019:131;34145:4;34019:131;:::i;:::-;34011:139;;33738:419;;;:::o;34163:182::-;34303:34;34299:1;34291:6;34287:14;34280:58;34163:182;:::o;34351:366::-;34493:3;34514:67;34578:2;34573:3;34514:67;:::i;:::-;34507:74;;34590:93;34679:3;34590:93;:::i;:::-;34708:2;34703:3;34699:12;34692:19;;34351:366;;;:::o;34723:419::-;34889:4;34927:2;34916:9;34912:18;34904:26;;34976:9;34970:4;34966:20;34962:1;34951:9;34947:17;34940:47;35004:131;35130:4;35004:131;:::i;:::-;34996:139;;34723:419;;;:::o;35148:172::-;35288:24;35284:1;35276:6;35272:14;35265:48;35148:172;:::o;35326:366::-;35468:3;35489:67;35553:2;35548:3;35489:67;:::i;:::-;35482:74;;35565:93;35654:3;35565:93;:::i;:::-;35683:2;35678:3;35674:12;35667:19;;35326:366;;;:::o;35698:419::-;35864:4;35902:2;35891:9;35887:18;35879:26;;35951:9;35945:4;35941:20;35937:1;35926:9;35922:17;35915:47;35979:131;36105:4;35979:131;:::i;:::-;35971:139;;35698:419;;;:::o;36123:168::-;36263:20;36259:1;36251:6;36247:14;36240:44;36123:168;:::o;36297:366::-;36439:3;36460:67;36524:2;36519:3;36460:67;:::i;:::-;36453:74;;36536:93;36625:3;36536:93;:::i;:::-;36654:2;36649:3;36645:12;36638:19;;36297:366;;;:::o;36669:419::-;36835:4;36873:2;36862:9;36858:18;36850:26;;36922:9;36916:4;36912:20;36908:1;36897:9;36893:17;36886:47;36950:131;37076:4;36950:131;:::i;:::-;36942:139;;36669:419;;;:::o;37094:174::-;37234:26;37230:1;37222:6;37218:14;37211:50;37094:174;:::o;37274:366::-;37416:3;37437:67;37501:2;37496:3;37437:67;:::i;:::-;37430:74;;37513:93;37602:3;37513:93;:::i;:::-;37631:2;37626:3;37622:12;37615:19;;37274:366;;;:::o;37646:419::-;37812:4;37850:2;37839:9;37835:18;37827:26;;37899:9;37893:4;37889:20;37885:1;37874:9;37870:17;37863:47;37927:131;38053:4;37927:131;:::i;:::-;37919:139;;37646:419;;;:::o;38071:170::-;38211:22;38207:1;38199:6;38195:14;38188:46;38071:170;:::o;38247:366::-;38389:3;38410:67;38474:2;38469:3;38410:67;:::i;:::-;38403:74;;38486:93;38575:3;38486:93;:::i;:::-;38604:2;38599:3;38595:12;38588:19;;38247:366;;;:::o;38619:419::-;38785:4;38823:2;38812:9;38808:18;38800:26;;38872:9;38866:4;38862:20;38858:1;38847:9;38843:17;38836:47;38900:131;39026:4;38900:131;:::i;:::-;38892:139;;38619:419;;;:::o;39044:223::-;39184:34;39180:1;39172:6;39168:14;39161:58;39253:6;39248:2;39240:6;39236:15;39229:31;39044:223;:::o;39273:366::-;39415:3;39436:67;39500:2;39495:3;39436:67;:::i;:::-;39429:74;;39512:93;39601:3;39512:93;:::i;:::-;39630:2;39625:3;39621:12;39614:19;;39273:366;;;:::o;39645:419::-;39811:4;39849:2;39838:9;39834:18;39826:26;;39898:9;39892:4;39888:20;39884:1;39873:9;39869:17;39862:47;39926:131;40052:4;39926:131;:::i;:::-;39918:139;;39645:419;;;:::o;40070:194::-;40110:4;40130:20;40148:1;40130:20;:::i;:::-;40125:25;;40164:20;40182:1;40164:20;:::i;:::-;40159:25;;40208:1;40205;40201:9;40193:17;;40232:1;40226:4;40223:11;40220:37;;;40237:18;;:::i;:::-;40220:37;40070:194;;;;:::o;40270:143::-;40327:5;40358:6;40352:13;40343:22;;40374:33;40401:5;40374:33;:::i;:::-;40270:143;;;;:::o;40419:351::-;40489:6;40538:2;40526:9;40517:7;40513:23;40509:32;40506:119;;;40544:79;;:::i;:::-;40506:119;40664:1;40689:64;40745:7;40736:6;40725:9;40721:22;40689:64;:::i;:::-;40679:74;;40635:128;40419:351;;;;:::o;40776:85::-;40821:7;40850:5;40839:16;;40776:85;;;:::o;40867:158::-;40925:9;40958:61;40976:42;40985:32;41011:5;40985:32;:::i;:::-;40976:42;:::i;:::-;40958:61;:::i;:::-;40945:74;;40867:158;;;:::o;41031:147::-;41126:45;41165:5;41126:45;:::i;:::-;41121:3;41114:58;41031:147;;:::o;41184:114::-;41251:6;41285:5;41279:12;41269:22;;41184:114;;;:::o;41304:184::-;41403:11;41437:6;41432:3;41425:19;41477:4;41472:3;41468:14;41453:29;;41304:184;;;;:::o;41494:132::-;41561:4;41584:3;41576:11;;41614:4;41609:3;41605:14;41597:22;;41494:132;;;:::o;41632:108::-;41709:24;41727:5;41709:24;:::i;:::-;41704:3;41697:37;41632:108;;:::o;41746:179::-;41815:10;41836:46;41878:3;41870:6;41836:46;:::i;:::-;41914:4;41909:3;41905:14;41891:28;;41746:179;;;;:::o;41931:113::-;42001:4;42033;42028:3;42024:14;42016:22;;41931:113;;;:::o;42080:732::-;42199:3;42228:54;42276:5;42228:54;:::i;:::-;42298:86;42377:6;42372:3;42298:86;:::i;:::-;42291:93;;42408:56;42458:5;42408:56;:::i;:::-;42487:7;42518:1;42503:284;42528:6;42525:1;42522:13;42503:284;;;42604:6;42598:13;42631:63;42690:3;42675:13;42631:63;:::i;:::-;42624:70;;42717:60;42770:6;42717:60;:::i;:::-;42707:70;;42563:224;42550:1;42547;42543:9;42538:14;;42503:284;;;42507:14;42803:3;42796:10;;42204:608;;;42080:732;;;;:::o;42818:831::-;43081:4;43119:3;43108:9;43104:19;43096:27;;43133:71;43201:1;43190:9;43186:17;43177:6;43133:71;:::i;:::-;43214:80;43290:2;43279:9;43275:18;43266:6;43214:80;:::i;:::-;43341:9;43335:4;43331:20;43326:2;43315:9;43311:18;43304:48;43369:108;43472:4;43463:6;43369:108;:::i;:::-;43361:116;;43487:72;43555:2;43544:9;43540:18;43531:6;43487:72;:::i;:::-;43569:73;43637:3;43626:9;43622:19;43613:6;43569:73;:::i;:::-;42818:831;;;;;;;;:::o;43655:442::-;43804:4;43842:2;43831:9;43827:18;43819:26;;43855:71;43923:1;43912:9;43908:17;43899:6;43855:71;:::i;:::-;43936:72;44004:2;43993:9;43989:18;43980:6;43936:72;:::i;:::-;44018;44086:2;44075:9;44071:18;44062:6;44018:72;:::i;:::-;43655:442;;;;;;:::o;44103:807::-;44352:4;44390:3;44379:9;44375:19;44367:27;;44404:71;44472:1;44461:9;44457:17;44448:6;44404:71;:::i;:::-;44485:72;44553:2;44542:9;44538:18;44529:6;44485:72;:::i;:::-;44567:80;44643:2;44632:9;44628:18;44619:6;44567:80;:::i;:::-;44657;44733:2;44722:9;44718:18;44709:6;44657:80;:::i;:::-;44747:73;44815:3;44804:9;44800:19;44791:6;44747:73;:::i;:::-;44830;44898:3;44887:9;44883:19;44874:6;44830:73;:::i;:::-;44103:807;;;;;;;;;:::o;44916:143::-;44973:5;45004:6;44998:13;44989:22;;45020:33;45047:5;45020:33;:::i;:::-;44916:143;;;;:::o;45065:663::-;45153:6;45161;45169;45218:2;45206:9;45197:7;45193:23;45189:32;45186:119;;;45224:79;;:::i;:::-;45186:119;45344:1;45369:64;45425:7;45416:6;45405:9;45401:22;45369:64;:::i;:::-;45359:74;;45315:128;45482:2;45508:64;45564:7;45555:6;45544:9;45540:22;45508:64;:::i;:::-;45498:74;;45453:129;45621:2;45647:64;45703:7;45694:6;45683:9;45679:22;45647:64;:::i;:::-;45637:74;;45592:129;45065:663;;;;;:::o
Swarm Source
ipfs://60540948cc7e75bf8402a4855d1809269f817ef8811e478d90568d5fb0141b2a
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.