More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 43 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Do The Gru | 15473580 | 844 days ago | IN | 0 ETH | 0.00210763 | ||||
Approve | 15449326 | 848 days ago | IN | 0 ETH | 0.0006409 | ||||
Approve | 15449326 | 848 days ago | IN | 0 ETH | 0.0006409 | ||||
Approve | 15449326 | 848 days ago | IN | 0 ETH | 0.0006409 | ||||
Approve | 15449034 | 848 days ago | IN | 0 ETH | 0.00184951 | ||||
Approve | 15449034 | 848 days ago | IN | 0 ETH | 0.00194403 | ||||
Approve | 15449030 | 848 days ago | IN | 0 ETH | 0.00119941 | ||||
Do The Gru | 15449026 | 848 days ago | IN | 0 ETH | 0.00449786 | ||||
Remove Limits | 15449020 | 848 days ago | IN | 0 ETH | 0.00092826 | ||||
Approve | 15449013 | 848 days ago | IN | 0 ETH | 0.001087 | ||||
Approve | 15449004 | 848 days ago | IN | 0 ETH | 0.00107334 | ||||
Approve | 15448999 | 848 days ago | IN | 0 ETH | 0.0009622 | ||||
Approve | 15448999 | 848 days ago | IN | 0 ETH | 0.00131665 | ||||
Approve | 15448999 | 848 days ago | IN | 0 ETH | 0.00136391 | ||||
Approve | 15448998 | 848 days ago | IN | 0 ETH | 0.00098142 | ||||
Approve | 15448996 | 848 days ago | IN | 0 ETH | 0.00186032 | ||||
Approve | 15448996 | 848 days ago | IN | 0 ETH | 0.00186032 | ||||
Approve | 15448994 | 848 days ago | IN | 0 ETH | 0.00098102 | ||||
Approve | 15448992 | 848 days ago | IN | 0 ETH | 0.00113512 | ||||
Approve | 15448992 | 848 days ago | IN | 0 ETH | 0.00113512 | ||||
Approve | 15448992 | 848 days ago | IN | 0 ETH | 0.0012769 | ||||
Approve | 15448992 | 848 days ago | IN | 0 ETH | 0.0012769 | ||||
Approve | 15448992 | 848 days ago | IN | 0 ETH | 0.00132417 | ||||
Approve | 15448992 | 848 days ago | IN | 0 ETH | 0.00132417 | ||||
Approve | 15448992 | 848 days ago | IN | 0 ETH | 0.00132417 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
15473580 | 844 days ago | 0.10931343 ETH | ||||
15450553 | 847 days ago | 0.00088871 ETH | ||||
15450553 | 847 days ago | 0.00233765 ETH | ||||
15449327 | 848 days ago | 0.00088477 ETH | ||||
15449327 | 848 days ago | 0.00232399 ETH | ||||
15449327 | 848 days ago | 0.00145354 ETH | ||||
15449327 | 848 days ago | 0.00381251 ETH | ||||
15449071 | 848 days ago | 0.00220361 ETH | ||||
15449071 | 848 days ago | 0.00576633 ETH | ||||
15449069 | 848 days ago | 0.00115123 ETH | ||||
15449069 | 848 days ago | 0.00300166 ETH | ||||
15449052 | 848 days ago | 0.00116669 ETH | ||||
15449052 | 848 days ago | 0.00303627 ETH | ||||
15449052 | 848 days ago | 0.0011939 ETH | ||||
15449052 | 848 days ago | 0.00310116 ETH | ||||
15449052 | 848 days ago | 0.00122208 ETH | ||||
15449052 | 848 days ago | 0.00316814 ETH | ||||
15449052 | 848 days ago | 0.00125128 ETH | ||||
15449052 | 848 days ago | 0.00323733 ETH | ||||
15449052 | 848 days ago | 0.00128804 ETH | ||||
15449052 | 848 days ago | 0.00332553 ETH | ||||
15449038 | 848 days ago | 0.00849568 ETH | ||||
15449038 | 848 days ago | 0.02188767 ETH | ||||
15449036 | 848 days ago | 0.00885448 ETH | ||||
15449036 | 848 days ago | 0.02246586 ETH |
Loading...
Loading
Contract Name:
FeloniusGru
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-08-31 */ /** "Life Is Just Like That Sometimes. We're Hoping For A Unicorn, And We Get A Goat" Who knows, knows. Gru will do the gru things. MRI Fork with a little bit adjustments. For more information look at lines: 557 **/ // SPDX-License-Identifier: MIT pragma solidity =0.8.10; pragma experimental ABIEncoderV2; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() { _transferOwnership(_msgSender()); } function owner() public view virtual returns (address) { return _owner; } modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } 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 { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override returns (string memory) { return _symbol; } function decimals() public view virtual override returns (uint8) { return 18; } function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } 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); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(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 += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } library SafeMath { function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } 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 Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); 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 mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Router02 { 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 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; } // Basicly we now have a buyback fee, wich will be manually done by a function (last function down below). Also some cool technical automated buy limit control. contract FeloniusGru is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; address public constant deadAddress = address(0xdead); bool private swapping; address public devwallet; bool public excludedTx = false; uint256 public maxTransactionAmount; uint256 public swapTokensAtAmount; uint256 public maxWallet; uint64 private buyCounter=0; bool public limitsInEffect = true; bool public tradingActive = false; bool public swapEnabled = false; mapping(address => uint256) private _holderLastTransferTimestamp; bool public transferDelayEnabled = true; uint256 public buyTotalFees; uint256 public buyDevFee; uint256 public buyBuyBackFee; uint256 public sellTotalFees; uint256 public sellDevFee; uint256 public sellBuyBackFee; uint256 public tokensForDev; uint256 public tokensForBuyBack; mapping(address => bool) private _isExcludedFromFees; mapping(address => bool) public _isExcludedMaxTransactionAmount; mapping(address => bool) public automatedMarketMakerPairs; event UpdateUniswapV2Router( address indexed newAddress, address indexed oldAddress ); event ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event devWalletUpdated( address indexed newWallet, address indexed oldWallet ); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); event AutoNukeLP(); event ManualNukeLP(); constructor() ERC20("Felonius Gru", "FELOGRU") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); excludeFromMaxTransaction(address(_uniswapV2Router), true); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); excludeFromMaxTransaction(address(uniswapV2Pair), true); _setAutomatedMarketMakerPair(address(uniswapV2Pair), true); uint256 _buyDevFee = 3; uint256 _buyBuyBackFee = 4; //this ETH will be in the contract balance (look last function in contract for usecase) uint256 _sellDevFee = 3; uint256 _sellBuyBackFee = 6; //this ETH will be in the contract balance (look last function in contract for usecase) uint256 totalSupply = 1_000_000_000 * 1e18; maxTransactionAmount = 10_000_000 * 1e18; maxWallet = 20_000_000 * 1e18; swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swap wallet buyDevFee = _buyDevFee; buyBuyBackFee = _buyBuyBackFee; buyTotalFees = buyDevFee + buyBuyBackFee; sellDevFee = _sellDevFee; sellBuyBackFee = _sellBuyBackFee; sellTotalFees = sellDevFee + sellBuyBackFee; devwallet = address(0xc6A71A21EECC9F360399c679a43A3C48b51F1351); // set as dev wallet excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(0xdead), true); _mint(msg.sender, totalSupply); } receive() external payable {} // once enabled, can never be turned off function enableTrading() external onlyOwner { tradingActive = true; swapEnabled = true; } // remove limits after token is stable function removeLimits() external onlyOwner returns (bool) { limitsInEffect = false; return true; } // disable Transfer delay - cannot be reenabled function disableTransferDelay() external onlyOwner returns (bool) { transferDelayEnabled = false; return true; } // change the minimum amount of tokens to sell from fees function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool) { require( newAmount >= (totalSupply() * 1) / 100000, "Swap amount cannot be lower than 0.001% total supply." ); require( newAmount <= (totalSupply() * 5) / 1000, "Swap amount cannot be higher than 0.5% total supply." ); swapTokensAtAmount = newAmount; return true; } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } // disables auto sale of fees collected function updateFeesActive(bool enabled) external onlyOwner { swapEnabled = enabled; } function updateBuyFees( uint256 _devFee, uint256 _buyBackFee ) external onlyOwner { buyDevFee = _devFee; buyBuyBackFee= _buyBackFee; buyTotalFees = _devFee + _buyBackFee; require(buyTotalFees <= 10, "Must keep fees at 10% or less"); } function updateSellFees( uint256 _devFee, uint256 _buyBackFee ) external onlyOwner { sellDevFee = _devFee; sellBuyBackFee = _buyBackFee; sellTotalFees = sellDevFee + sellBuyBackFee ; require(sellTotalFees <= 10, "Must keep fees at 10% or less"); } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { require( pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs" ); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function updateDevWallet(address newDevWallet) external onlyOwner { emit devWalletUpdated(newDevWallet, devwallet); devwallet = newDevWallet; } function isExcludedFromFees(address account) public view returns (bool) { return _isExcludedFromFees[account]; } event BoughtEarly(address indexed sniper); function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if (amount == 0) { super._transfer(from, to, 0); return; } excludedTx = false; if (limitsInEffect) { if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ) { if (!tradingActive) { require( _isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active." ); } // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch. if (transferDelayEnabled) { if ( to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair) ) { require( _holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled. Only one purchase per block allowed." ); _holderLastTransferTimestamp[tx.origin] = block.number; } } //when buy if ( automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to] ) { require( amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount." ); require( amount + balanceOf(to) <= maxWallet, "Max wallet exceeded" ); } //when sell else if ( automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from] ) { require( amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount." ); } else if (!_isExcludedMaxTransactionAmount[to]) { require( amount + balanceOf(to) <= maxWallet, "Max wallet exceeded" ); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if ( canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swapping = true; swapBack(); swapping = false; } bool takeFee = !swapping; if(!swapping){ if (buyCounter == 10) maxTransactionAmount = 20_000_000 * 1e18; maxWallet = 20_000_000 * 1e18; if (buyCounter == 25) maxTransactionAmount = 30_000_000 * 1e18; maxWallet = 25_000_000 * 1e18; if (buyCounter == 40) maxTransactionAmount = 50_000_000 * 1e18; maxWallet = 50_000_000 * 1e18; if (buyCounter == 60) { maxTransactionAmount = 70_000_000 * 1e18; maxWallet = 70_000_000 * 1e18; } //Basicly increased the maximum transaction amount based of buy counter } // if any account belongs to _isExcludedFromFee account then remove the fee if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; // only take fees on buys/sells, do not take on wallet transfers if (takeFee &&!excludedTx) { // on sell if (automatedMarketMakerPairs[to] && sellTotalFees > 0) { fees = amount.mul(sellTotalFees).div(100); tokensForBuyBack += (fees * sellBuyBackFee) / sellTotalFees; tokensForDev+= (fees * sellDevFee) / sellTotalFees; } // on buy else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) { fees = amount.mul(buyTotalFees).div(100); tokensForBuyBack += (fees * buyBuyBackFee) / buyTotalFees; tokensForDev += (fees * buyDevFee) / buyTotalFees; } if (fees > 0) { super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable deadAddress, block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForBuyBack + tokensForDev ; bool success; if (contractBalance == 0 || totalTokensToSwap == 0) { return; } if (contractBalance > swapTokensAtAmount * 20) { contractBalance = swapTokensAtAmount * 20; } uint256 initialETHBalance = address(this).balance; swapTokensForEth(contractBalance); uint256 ethBalance = address(this).balance.sub(initialETHBalance); uint256 ethForDev = ethBalance.mul(tokensForDev).div( totalTokensToSwap ); (success, ) = address(devwallet).call{ value: ethForDev }(""); } function DoTheGru(uint256 percent) external onlyOwner{ address[] memory path = new address[](2); path[0] = uniswapV2Router.WETH(); path[1] = address(this); uint256 cbalance= address(this).balance; uint256 amountToSpend= cbalance.mul(percent).div(100); uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value : amountToSpend}( 0, path, address(0xdead), block.timestamp ); //Buys back tokens & burns with contract balance (cool huh) } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"DoTheGru","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBuyBackFee","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":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"excludedTx","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBuyBackFee","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":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForBuyBack","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_buyBackFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newDevWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateFeesActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_buyBackFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526000600660146101000a81548160ff0219169083151502179055506000600a60006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600a60086101000a81548160ff0219169083151502179055506000600a60096101000a81548160ff0219169083151502179055506000600a806101000a81548160ff0219169083151502179055506001600c60006101000a81548160ff021916908315150217905550348015620000c157600080fd5b506040518060400160405280600c81526020017f46656c6f6e6975732047727500000000000000000000000000000000000000008152506040518060400160405280600781526020017f46454c4f4752550000000000000000000000000000000000000000000000000081525081600390805190602001906200014692919062000aa8565b5080600490805190602001906200015f92919062000aa8565b50505062000182620001766200056860201b60201c565b6200057060201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001ae8160016200063660201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200022e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000254919062000bc2565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002bc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e2919062000bc2565b6040518363ffffffff1660e01b81526004016200030192919062000c05565b6020604051808303816000875af115801562000321573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000347919062000bc2565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200038f60a05160016200063660201b60201c565b620003a460a05160016200072060201b60201c565b60006003905060006004905060006003905060006006905060006b033b2e3c9fd0803ce800000090506a084595161401484a0000006007819055506a108b2a2c2802909400000060098190555061271060058262000403919062000c6b565b6200040f919062000cfb565b60088190555084600e8190555083600f81905550600f54600e5462000435919062000d33565b600d8190555082601181905550816012819055506012546011546200045b919062000d33565b60108190555073c6a71a21eecc9f360399c679a43a3c48b51f1351600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620004d8620004ca620007c160201b60201c565b6001620007eb60201b60201c565b620004eb306001620007eb60201b60201c565b6200050061dead6001620007eb60201b60201c565b6200052262000514620007c160201b60201c565b60016200063660201b60201c565b620005353060016200063660201b60201c565b6200054a61dead60016200063660201b60201c565b6200055c33826200092560201b60201c565b50505050505062000f52565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620006466200056860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200066c620007c160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620006c5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006bc9062000df1565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620007fb6200056860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000821620007c160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200087a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008719062000df1565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000919919062000e30565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000998576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200098f9062000e9d565b60405180910390fd5b620009ac6000838362000a9e60201b60201c565b8060026000828254620009c0919062000d33565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000a17919062000d33565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a7e919062000ed0565b60405180910390a362000a9a6000838362000aa360201b60201c565b5050565b505050565b505050565b82805462000ab69062000f1c565b90600052602060002090601f01602090048101928262000ada576000855562000b26565b82601f1062000af557805160ff191683800117855562000b26565b8280016001018555821562000b26579182015b8281111562000b2557825182559160200191906001019062000b08565b5b50905062000b35919062000b39565b5090565b5b8082111562000b5457600081600090555060010162000b3a565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000b8a8262000b5d565b9050919050565b62000b9c8162000b7d565b811462000ba857600080fd5b50565b60008151905062000bbc8162000b91565b92915050565b60006020828403121562000bdb5762000bda62000b58565b5b600062000beb8482850162000bab565b91505092915050565b62000bff8162000b7d565b82525050565b600060408201905062000c1c600083018562000bf4565b62000c2b602083018462000bf4565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000c788262000c32565b915062000c858362000c32565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000cc15762000cc062000c3c565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000d088262000c32565b915062000d158362000c32565b92508262000d285762000d2762000ccc565b5b828204905092915050565b600062000d408262000c32565b915062000d4d8362000c32565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000d855762000d8462000c3c565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000dd960208362000d90565b915062000de68262000da1565b602082019050919050565b6000602082019050818103600083015262000e0c8162000dca565b9050919050565b60008115159050919050565b62000e2a8162000e13565b82525050565b600060208201905062000e47600083018462000e1f565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000e85601f8362000d90565b915062000e928262000e4d565b602082019050919050565b6000602082019050818103600083015262000eb88162000e76565b9050919050565b62000eca8162000c32565b82525050565b600060208201905062000ee7600083018462000ebf565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000f3557607f821691505b6020821081141562000f4c5762000f4b62000eed565b5b50919050565b60805160a051614aa362000fb060003960008181611096015281816116fd0152612610015260008181610d4701528181611e7001528181611fcb015281816125b8015281816135f9015281816136da01526137010152614aa36000f3fe6080604052600436106102b25760003560e01c8063751039fc11610175578063b62496f5116100dc578063d85ba06311610095578063e884f2601161006f578063e884f26014610add578063f2fde38b14610b08578063f60711e514610b31578063f8b45b0514610b5a576102b9565b8063d85ba06314610a4a578063dd62ed3e14610a75578063e2f4560514610ab2576102b9565b8063b62496f514610926578063bbc0c74214610963578063c02466681461098e578063c876d0b9146109b7578063c8c8ebe4146109e2578063d257b34f14610a0d576102b9565b80639a7a23d61161012e5780639a7a23d6146108025780639c3b4fdc1461082b5780639fccce3214610856578063a0d82dc514610881578063a457c2d7146108ac578063a9059cbb146108e9576102b9565b8063751039fc146107165780637571336a146107415780637a153ee21461076a5780638a8c523c146107955780638da5cb5b146107ac57806395d89b41146107d7576102b9565b8063313ce5671161021957806366ca9b83116101d257806366ca9b831461061a57806369327d80146106435780636a486a8e1461066c5780636ddd17131461069757806370a08231146106c2578063715018a6146106ff576102b9565b8063313ce567146104f4578063385e81151461051f578063395093511461054a57806349bd5a5e146105875780634a62bb65146105b25780634fbee193146105dd576102b9565b806318160ddd1161026b57806318160ddd146103e25780631816467f1461040d5780631a221dbb146104365780631fe70a981461046157806323b872dd1461048c57806327c8f835146104c9576102b9565b806302dbd8f8146102be57806306fdde03146102e7578063095ea7b3146103125780630b166d501461034f57806310d5de531461037a5780631694505e146103b7576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102e560048036038101906102e091906137e8565b610b85565b005b3480156102f357600080fd5b506102fc610c6f565b60405161030991906138c1565b60405180910390f35b34801561031e57600080fd5b5061033960048036038101906103349190613941565b610d01565b604051610346919061399c565b60405180910390f35b34801561035b57600080fd5b50610364610d1f565b60405161037191906139c6565b60405180910390f35b34801561038657600080fd5b506103a1600480360381019061039c91906139e1565b610d25565b6040516103ae919061399c565b60405180910390f35b3480156103c357600080fd5b506103cc610d45565b6040516103d99190613a6d565b60405180910390f35b3480156103ee57600080fd5b506103f7610d69565b60405161040491906139c6565b60405180910390f35b34801561041957600080fd5b50610434600480360381019061042f91906139e1565b610d73565b005b34801561044257600080fd5b5061044b610eaf565b60405161045891906139c6565b60405180910390f35b34801561046d57600080fd5b50610476610eb5565b60405161048391906139c6565b60405180910390f35b34801561049857600080fd5b506104b360048036038101906104ae9190613a88565b610ebb565b6040516104c0919061399c565b60405180910390f35b3480156104d557600080fd5b506104de610fb3565b6040516104eb9190613aea565b60405180910390f35b34801561050057600080fd5b50610509610fb9565b6040516105169190613b21565b60405180910390f35b34801561052b57600080fd5b50610534610fc2565b6040516105419190613aea565b60405180910390f35b34801561055657600080fd5b50610571600480360381019061056c9190613941565b610fe8565b60405161057e919061399c565b60405180910390f35b34801561059357600080fd5b5061059c611094565b6040516105a99190613aea565b60405180910390f35b3480156105be57600080fd5b506105c76110b8565b6040516105d4919061399c565b60405180910390f35b3480156105e957600080fd5b5061060460048036038101906105ff91906139e1565b6110cb565b604051610611919061399c565b60405180910390f35b34801561062657600080fd5b50610641600480360381019061063c91906137e8565b611121565b005b34801561064f57600080fd5b5061066a60048036038101906106659190613b68565b611207565b005b34801561067857600080fd5b5061068161129f565b60405161068e91906139c6565b60405180910390f35b3480156106a357600080fd5b506106ac6112a5565b6040516106b9919061399c565b60405180910390f35b3480156106ce57600080fd5b506106e960048036038101906106e491906139e1565b6112b6565b6040516106f691906139c6565b60405180910390f35b34801561070b57600080fd5b506107146112fe565b005b34801561072257600080fd5b5061072b611386565b604051610738919061399c565b60405180910390f35b34801561074d57600080fd5b5061076860048036038101906107639190613b95565b611426565b005b34801561077657600080fd5b5061077f6114fd565b60405161078c919061399c565b60405180910390f35b3480156107a157600080fd5b506107aa611510565b005b3480156107b857600080fd5b506107c16115c3565b6040516107ce9190613aea565b60405180910390f35b3480156107e357600080fd5b506107ec6115ed565b6040516107f991906138c1565b60405180910390f35b34801561080e57600080fd5b5061082960048036038101906108249190613b95565b61167f565b005b34801561083757600080fd5b50610840611798565b60405161084d91906139c6565b60405180910390f35b34801561086257600080fd5b5061086b61179e565b60405161087891906139c6565b60405180910390f35b34801561088d57600080fd5b506108966117a4565b6040516108a391906139c6565b60405180910390f35b3480156108b857600080fd5b506108d360048036038101906108ce9190613941565b6117aa565b6040516108e0919061399c565b60405180910390f35b3480156108f557600080fd5b50610910600480360381019061090b9190613941565b611895565b60405161091d919061399c565b60405180910390f35b34801561093257600080fd5b5061094d600480360381019061094891906139e1565b6118b3565b60405161095a919061399c565b60405180910390f35b34801561096f57600080fd5b506109786118d3565b604051610985919061399c565b60405180910390f35b34801561099a57600080fd5b506109b560048036038101906109b09190613b95565b6118e6565b005b3480156109c357600080fd5b506109cc611a0b565b6040516109d9919061399c565b60405180910390f35b3480156109ee57600080fd5b506109f7611a1e565b604051610a0491906139c6565b60405180910390f35b348015610a1957600080fd5b50610a346004803603810190610a2f9190613bd5565b611a24565b604051610a41919061399c565b60405180910390f35b348015610a5657600080fd5b50610a5f611b79565b604051610a6c91906139c6565b60405180910390f35b348015610a8157600080fd5b50610a9c6004803603810190610a979190613c02565b611b7f565b604051610aa991906139c6565b60405180910390f35b348015610abe57600080fd5b50610ac7611c06565b604051610ad491906139c6565b60405180910390f35b348015610ae957600080fd5b50610af2611c0c565b604051610aff919061399c565b60405180910390f35b348015610b1457600080fd5b50610b2f6004803603810190610b2a91906139e1565b611cac565b005b348015610b3d57600080fd5b50610b586004803603810190610b539190613bd5565b611da4565b005b348015610b6657600080fd5b50610b6f612064565b604051610b7c91906139c6565b60405180910390f35b610b8d61206a565b73ffffffffffffffffffffffffffffffffffffffff16610bab6115c3565b73ffffffffffffffffffffffffffffffffffffffff1614610c01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf890613c8e565b60405180910390fd5b8160118190555080601281905550601254601154610c1f9190613cdd565b601081905550600a6010541115610c6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6290613d7f565b60405180910390fd5b5050565b606060038054610c7e90613dce565b80601f0160208091040260200160405190810160405280929190818152602001828054610caa90613dce565b8015610cf75780601f10610ccc57610100808354040283529160200191610cf7565b820191906000526020600020905b815481529060010190602001808311610cda57829003601f168201915b5050505050905090565b6000610d15610d0e61206a565b8484612072565b6001905092915050565b60145481565b60166020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610d7b61206a565b73ffffffffffffffffffffffffffffffffffffffff16610d996115c3565b73ffffffffffffffffffffffffffffffffffffffff1614610def576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de690613c8e565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60125481565b600f5481565b6000610ec884848461223d565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f1361206a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610f93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8a90613e72565b60405180910390fd5b610fa785610f9f61206a565b858403612072565b60019150509392505050565b61dead81565b60006012905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061108a610ff561206a565b84846001600061100361206a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110859190613cdd565b612072565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600a60089054906101000a900460ff1681565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61112961206a565b73ffffffffffffffffffffffffffffffffffffffff166111476115c3565b73ffffffffffffffffffffffffffffffffffffffff161461119d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119490613c8e565b60405180910390fd5b81600e8190555080600f8190555080826111b79190613cdd565b600d81905550600a600d541115611203576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fa90613d7f565b60405180910390fd5b5050565b61120f61206a565b73ffffffffffffffffffffffffffffffffffffffff1661122d6115c3565b73ffffffffffffffffffffffffffffffffffffffff1614611283576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127a90613c8e565b60405180910390fd5b80600a806101000a81548160ff02191690831515021790555050565b60105481565b600a8054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61130661206a565b73ffffffffffffffffffffffffffffffffffffffff166113246115c3565b73ffffffffffffffffffffffffffffffffffffffff161461137a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137190613c8e565b60405180910390fd5b6113846000612fef565b565b600061139061206a565b73ffffffffffffffffffffffffffffffffffffffff166113ae6115c3565b73ffffffffffffffffffffffffffffffffffffffff1614611404576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fb90613c8e565b60405180910390fd5b6000600a60086101000a81548160ff0219169083151502179055506001905090565b61142e61206a565b73ffffffffffffffffffffffffffffffffffffffff1661144c6115c3565b73ffffffffffffffffffffffffffffffffffffffff16146114a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149990613c8e565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660149054906101000a900460ff1681565b61151861206a565b73ffffffffffffffffffffffffffffffffffffffff166115366115c3565b73ffffffffffffffffffffffffffffffffffffffff161461158c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158390613c8e565b60405180910390fd5b6001600a60096101000a81548160ff0219169083151502179055506001600a806101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546115fc90613dce565b80601f016020809104026020016040519081016040528092919081815260200182805461162890613dce565b80156116755780601f1061164a57610100808354040283529160200191611675565b820191906000526020600020905b81548152906001019060200180831161165857829003601f168201915b5050505050905090565b61168761206a565b73ffffffffffffffffffffffffffffffffffffffff166116a56115c3565b73ffffffffffffffffffffffffffffffffffffffff16146116fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f290613c8e565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561178a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178190613f04565b60405180910390fd5b61179482826130b5565b5050565b600e5481565b60135481565b60115481565b600080600160006117b961206a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186d90613f96565b60405180910390fd5b61188a61188161206a565b85858403612072565b600191505092915050565b60006118a96118a261206a565b848461223d565b6001905092915050565b60176020528060005260406000206000915054906101000a900460ff1681565b600a60099054906101000a900460ff1681565b6118ee61206a565b73ffffffffffffffffffffffffffffffffffffffff1661190c6115c3565b73ffffffffffffffffffffffffffffffffffffffff1614611962576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195990613c8e565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516119ff919061399c565b60405180910390a25050565b600c60009054906101000a900460ff1681565b60075481565b6000611a2e61206a565b73ffffffffffffffffffffffffffffffffffffffff16611a4c6115c3565b73ffffffffffffffffffffffffffffffffffffffff1614611aa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9990613c8e565b60405180910390fd5b620186a06001611ab0610d69565b611aba9190613fb6565b611ac4919061403f565b821015611b06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afd906140e2565b60405180910390fd5b6103e86005611b13610d69565b611b1d9190613fb6565b611b27919061403f565b821115611b69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6090614174565b60405180910390fd5b8160088190555060019050919050565b600d5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60085481565b6000611c1661206a565b73ffffffffffffffffffffffffffffffffffffffff16611c346115c3565b73ffffffffffffffffffffffffffffffffffffffff1614611c8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8190613c8e565b60405180910390fd5b6000600c60006101000a81548160ff0219169083151502179055506001905090565b611cb461206a565b73ffffffffffffffffffffffffffffffffffffffff16611cd26115c3565b73ffffffffffffffffffffffffffffffffffffffff1614611d28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1f90613c8e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8f90614206565b60405180910390fd5b611da181612fef565b50565b611dac61206a565b73ffffffffffffffffffffffffffffffffffffffff16611dca6115c3565b73ffffffffffffffffffffffffffffffffffffffff1614611e20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1790613c8e565b60405180910390fd5b6000600267ffffffffffffffff811115611e3d57611e3c614226565b5b604051908082528060200260200182016040528015611e6b5781602001602082028036833780820191505090505b5090507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ed9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611efd919061426a565b81600081518110611f1157611f10614297565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110611f6057611f5f614297565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060004790506000611fc76064611fb9868561315690919063ffffffff16565b61316c90919063ffffffff16565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b6f9de958260008661dead426040518663ffffffff1660e01b815260040161202c94939291906143bf565b6000604051808303818588803b15801561204557600080fd5b505af1158015612059573d6000803e3d6000fd5b505050505050505050565b60095481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156120e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d99061447d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612152576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121499061450f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161223091906139c6565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156122ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a4906145a1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561231d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231490614633565b60405180910390fd5b60008114156123375761233283836000613182565b612fea565b6000600660146101000a81548160ff021916908315150217905550600a60089054906101000a900460ff1615612a155761236f6115c3565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156123dd57506123ad6115c3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124165750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612450575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124695750600560149054906101000a900460ff16155b15612a1457600a60099054906101000a900460ff1661256357601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125235750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612562576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125599061469f565b60405180910390fd5b5b600c60009054906101000a900460ff161561272b576125806115c3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561260757507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561265f57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561272a5743600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106126e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126dc90614757565b60405180910390fd5b43600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127ce5750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561287557600754811115612818576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280f906147e9565b60405180910390fd5b600954612824836112b6565b8261282f9190613cdd565b1115612870576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286790614855565b60405180910390fd5b612a13565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129185750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561296757600754811115612962576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612959906148e7565b60405180910390fd5b612a12565b601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612a11576009546129c4836112b6565b826129cf9190613cdd565b1115612a10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0790614855565b60405180910390fd5b5b5b5b5b5b6000612a20306112b6565b905060006008548210159050808015612a435750600a8054906101000a900460ff165b8015612a5c5750600560149054906101000a900460ff16155b8015612ab25750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612b085750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612b5e5750601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ba2576001600560146101000a81548160ff021916908315150217905550612b86613403565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050600560149054906101000a900460ff16612d0357600a8060009054906101000a900467ffffffffffffffff1667ffffffffffffffff161415612c06576a108b2a2c280290940000006007819055505b6a108b2a2c280290940000006009819055506019600a60009054906101000a900467ffffffffffffffff1667ffffffffffffffff161415612c54576a18d0bf423c03d8de0000006007819055505b6a14adf4b7320334b90000006009819055506028600a60009054906101000a900467ffffffffffffffff1667ffffffffffffffff161415612ca2576a295be96e640669720000006007819055505b6a295be96e64066972000000600981905550603c600a60009054906101000a900467ffffffffffffffff1667ffffffffffffffff161415612d02576a39e7139a8c08fa060000006007819055506a39e7139a8c08fa060000006009819055505b5b601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612da45750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612dae57600090505b6000818015612dca5750600660149054906101000a900460ff16155b15612fda57601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e2a57506000601054115b15612ec457612e576064612e496010548861315690919063ffffffff16565b61316c90919063ffffffff16565b905060105460125482612e6a9190613fb6565b612e74919061403f565b60146000828254612e859190613cdd565b9250508190555060105460115482612e9d9190613fb6565b612ea7919061403f565b60136000828254612eb89190613cdd565b92505081905550612fb6565b601760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f1f57506000600d54115b15612fb557612f4c6064612f3e600d548861315690919063ffffffff16565b61316c90919063ffffffff16565b9050600d54600f5482612f5f9190613fb6565b612f69919061403f565b60146000828254612f7a9190613cdd565b92505081905550600d54600e5482612f929190613fb6565b612f9c919061403f565b60136000828254612fad9190613cdd565b925050819055505b5b6000811115612fcb57612fca873083613182565b5b8085612fd79190614907565b94505b612fe5878787613182565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600081836131649190613fb6565b905092915050565b6000818361317a919061403f565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156131f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131e9906145a1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613262576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325990614633565b60405180910390fd5b61326d838383613550565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156132f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132ea906149ad565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133869190613cdd565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516133ea91906139c6565b60405180910390a36133fd848484613555565b50505050565b600061340e306112b6565b905060006013546014546134229190613cdd565b90506000808314806134345750600082145b156134415750505061354e565b60146008546134509190613fb6565b8311156134695760146008546134669190613fb6565b92505b60004790506134778461355a565b600061348c824761379790919063ffffffff16565b905060006134b7856134a96013548561315690919063ffffffff16565b61316c90919063ffffffff16565b9050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816040516134ff906149fe565b60006040518083038185875af1925050503d806000811461353c576040519150601f19603f3d011682016040523d82523d6000602084013e613541565b606091505b5050809450505050505050505b565b505050565b505050565b6000600267ffffffffffffffff81111561357757613576614226565b5b6040519080825280602002602001820160405280156135a55781602001602082028036833780820191505090505b50905030816000815181106135bd576135bc614297565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613662573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613686919061426a565b8160018151811061369a57613699614297565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506136ff307f000000000000000000000000000000000000000000000000000000000000000084612072565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613761959493929190614a13565b600060405180830381600087803b15801561377b57600080fd5b505af115801561378f573d6000803e3d6000fd5b505050505050565b600081836137a59190614907565b905092915050565b600080fd5b6000819050919050565b6137c5816137b2565b81146137d057600080fd5b50565b6000813590506137e2816137bc565b92915050565b600080604083850312156137ff576137fe6137ad565b5b600061380d858286016137d3565b925050602061381e858286016137d3565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613862578082015181840152602081019050613847565b83811115613871576000848401525b50505050565b6000601f19601f8301169050919050565b600061389382613828565b61389d8185613833565b93506138ad818560208601613844565b6138b681613877565b840191505092915050565b600060208201905081810360008301526138db8184613888565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061390e826138e3565b9050919050565b61391e81613903565b811461392957600080fd5b50565b60008135905061393b81613915565b92915050565b60008060408385031215613958576139576137ad565b5b60006139668582860161392c565b9250506020613977858286016137d3565b9150509250929050565b60008115159050919050565b61399681613981565b82525050565b60006020820190506139b1600083018461398d565b92915050565b6139c0816137b2565b82525050565b60006020820190506139db60008301846139b7565b92915050565b6000602082840312156139f7576139f66137ad565b5b6000613a058482850161392c565b91505092915050565b6000819050919050565b6000613a33613a2e613a29846138e3565b613a0e565b6138e3565b9050919050565b6000613a4582613a18565b9050919050565b6000613a5782613a3a565b9050919050565b613a6781613a4c565b82525050565b6000602082019050613a826000830184613a5e565b92915050565b600080600060608486031215613aa157613aa06137ad565b5b6000613aaf8682870161392c565b9350506020613ac08682870161392c565b9250506040613ad1868287016137d3565b9150509250925092565b613ae481613903565b82525050565b6000602082019050613aff6000830184613adb565b92915050565b600060ff82169050919050565b613b1b81613b05565b82525050565b6000602082019050613b366000830184613b12565b92915050565b613b4581613981565b8114613b5057600080fd5b50565b600081359050613b6281613b3c565b92915050565b600060208284031215613b7e57613b7d6137ad565b5b6000613b8c84828501613b53565b91505092915050565b60008060408385031215613bac57613bab6137ad565b5b6000613bba8582860161392c565b9250506020613bcb85828601613b53565b9150509250929050565b600060208284031215613beb57613bea6137ad565b5b6000613bf9848285016137d3565b91505092915050565b60008060408385031215613c1957613c186137ad565b5b6000613c278582860161392c565b9250506020613c388582860161392c565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613c78602083613833565b9150613c8382613c42565b602082019050919050565b60006020820190508181036000830152613ca781613c6b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613ce8826137b2565b9150613cf3836137b2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613d2857613d27613cae565b5b828201905092915050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b6000613d69601d83613833565b9150613d7482613d33565b602082019050919050565b60006020820190508181036000830152613d9881613d5c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613de657607f821691505b60208210811415613dfa57613df9613d9f565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613e5c602883613833565b9150613e6782613e00565b604082019050919050565b60006020820190508181036000830152613e8b81613e4f565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613eee603983613833565b9150613ef982613e92565b604082019050919050565b60006020820190508181036000830152613f1d81613ee1565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613f80602583613833565b9150613f8b82613f24565b604082019050919050565b60006020820190508181036000830152613faf81613f73565b9050919050565b6000613fc1826137b2565b9150613fcc836137b2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561400557614004613cae565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061404a826137b2565b9150614055836137b2565b92508261406557614064614010565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006140cc603583613833565b91506140d782614070565b604082019050919050565b600060208201905081810360008301526140fb816140bf565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061415e603483613833565b915061416982614102565b604082019050919050565b6000602082019050818103600083015261418d81614151565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006141f0602683613833565b91506141fb82614194565b604082019050919050565b6000602082019050818103600083015261421f816141e3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008151905061426481613915565b92915050565b6000602082840312156142805761427f6137ad565b5b600061428e84828501614255565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b60006142eb6142e66142e1846142c6565b613a0e565b6137b2565b9050919050565b6142fb816142d0565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61433681613903565b82525050565b6000614348838361432d565b60208301905092915050565b6000602082019050919050565b600061436c82614301565b614376818561430c565b93506143818361431d565b8060005b838110156143b2578151614399888261433c565b97506143a483614354565b925050600181019050614385565b5085935050505092915050565b60006080820190506143d460008301876142f2565b81810360208301526143e68186614361565b90506143f56040830185613adb565b61440260608301846139b7565b95945050505050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614467602483613833565b91506144728261440b565b604082019050919050565b600060208201905081810360008301526144968161445a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006144f9602283613833565b91506145048261449d565b604082019050919050565b60006020820190508181036000830152614528816144ec565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061458b602583613833565b91506145968261452f565b604082019050919050565b600060208201905081810360008301526145ba8161457e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061461d602383613833565b9150614628826145c1565b604082019050919050565b6000602082019050818103600083015261464c81614610565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614689601683613833565b915061469482614653565b602082019050919050565b600060208201905081810360008301526146b88161467c565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614741604983613833565b915061474c826146bf565b606082019050919050565b6000602082019050818103600083015261477081614734565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006147d3603583613833565b91506147de82614777565b604082019050919050565b60006020820190508181036000830152614802816147c6565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061483f601383613833565b915061484a82614809565b602082019050919050565b6000602082019050818103600083015261486e81614832565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006148d1603683613833565b91506148dc82614875565b604082019050919050565b60006020820190508181036000830152614900816148c4565b9050919050565b6000614912826137b2565b915061491d836137b2565b9250828210156149305761492f613cae565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614997602683613833565b91506149a28261493b565b604082019050919050565b600060208201905081810360008301526149c68161498a565b9050919050565b600081905092915050565b50565b60006149e86000836149cd565b91506149f3826149d8565b600082019050919050565b6000614a09826149db565b9150819050919050565b600060a082019050614a2860008301886139b7565b614a3560208301876142f2565b8181036040830152614a478186614361565b9050614a566060830185613adb565b614a6360808301846139b7565b969550505050505056fea2646970667358221220b5632136bded978f6cfa3dba3c40bb5b3d5723d024ec4713f83c78317ee99f7864736f6c634300080a0033
Deployed Bytecode
0x6080604052600436106102b25760003560e01c8063751039fc11610175578063b62496f5116100dc578063d85ba06311610095578063e884f2601161006f578063e884f26014610add578063f2fde38b14610b08578063f60711e514610b31578063f8b45b0514610b5a576102b9565b8063d85ba06314610a4a578063dd62ed3e14610a75578063e2f4560514610ab2576102b9565b8063b62496f514610926578063bbc0c74214610963578063c02466681461098e578063c876d0b9146109b7578063c8c8ebe4146109e2578063d257b34f14610a0d576102b9565b80639a7a23d61161012e5780639a7a23d6146108025780639c3b4fdc1461082b5780639fccce3214610856578063a0d82dc514610881578063a457c2d7146108ac578063a9059cbb146108e9576102b9565b8063751039fc146107165780637571336a146107415780637a153ee21461076a5780638a8c523c146107955780638da5cb5b146107ac57806395d89b41146107d7576102b9565b8063313ce5671161021957806366ca9b83116101d257806366ca9b831461061a57806369327d80146106435780636a486a8e1461066c5780636ddd17131461069757806370a08231146106c2578063715018a6146106ff576102b9565b8063313ce567146104f4578063385e81151461051f578063395093511461054a57806349bd5a5e146105875780634a62bb65146105b25780634fbee193146105dd576102b9565b806318160ddd1161026b57806318160ddd146103e25780631816467f1461040d5780631a221dbb146104365780631fe70a981461046157806323b872dd1461048c57806327c8f835146104c9576102b9565b806302dbd8f8146102be57806306fdde03146102e7578063095ea7b3146103125780630b166d501461034f57806310d5de531461037a5780631694505e146103b7576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102e560048036038101906102e091906137e8565b610b85565b005b3480156102f357600080fd5b506102fc610c6f565b60405161030991906138c1565b60405180910390f35b34801561031e57600080fd5b5061033960048036038101906103349190613941565b610d01565b604051610346919061399c565b60405180910390f35b34801561035b57600080fd5b50610364610d1f565b60405161037191906139c6565b60405180910390f35b34801561038657600080fd5b506103a1600480360381019061039c91906139e1565b610d25565b6040516103ae919061399c565b60405180910390f35b3480156103c357600080fd5b506103cc610d45565b6040516103d99190613a6d565b60405180910390f35b3480156103ee57600080fd5b506103f7610d69565b60405161040491906139c6565b60405180910390f35b34801561041957600080fd5b50610434600480360381019061042f91906139e1565b610d73565b005b34801561044257600080fd5b5061044b610eaf565b60405161045891906139c6565b60405180910390f35b34801561046d57600080fd5b50610476610eb5565b60405161048391906139c6565b60405180910390f35b34801561049857600080fd5b506104b360048036038101906104ae9190613a88565b610ebb565b6040516104c0919061399c565b60405180910390f35b3480156104d557600080fd5b506104de610fb3565b6040516104eb9190613aea565b60405180910390f35b34801561050057600080fd5b50610509610fb9565b6040516105169190613b21565b60405180910390f35b34801561052b57600080fd5b50610534610fc2565b6040516105419190613aea565b60405180910390f35b34801561055657600080fd5b50610571600480360381019061056c9190613941565b610fe8565b60405161057e919061399c565b60405180910390f35b34801561059357600080fd5b5061059c611094565b6040516105a99190613aea565b60405180910390f35b3480156105be57600080fd5b506105c76110b8565b6040516105d4919061399c565b60405180910390f35b3480156105e957600080fd5b5061060460048036038101906105ff91906139e1565b6110cb565b604051610611919061399c565b60405180910390f35b34801561062657600080fd5b50610641600480360381019061063c91906137e8565b611121565b005b34801561064f57600080fd5b5061066a60048036038101906106659190613b68565b611207565b005b34801561067857600080fd5b5061068161129f565b60405161068e91906139c6565b60405180910390f35b3480156106a357600080fd5b506106ac6112a5565b6040516106b9919061399c565b60405180910390f35b3480156106ce57600080fd5b506106e960048036038101906106e491906139e1565b6112b6565b6040516106f691906139c6565b60405180910390f35b34801561070b57600080fd5b506107146112fe565b005b34801561072257600080fd5b5061072b611386565b604051610738919061399c565b60405180910390f35b34801561074d57600080fd5b5061076860048036038101906107639190613b95565b611426565b005b34801561077657600080fd5b5061077f6114fd565b60405161078c919061399c565b60405180910390f35b3480156107a157600080fd5b506107aa611510565b005b3480156107b857600080fd5b506107c16115c3565b6040516107ce9190613aea565b60405180910390f35b3480156107e357600080fd5b506107ec6115ed565b6040516107f991906138c1565b60405180910390f35b34801561080e57600080fd5b5061082960048036038101906108249190613b95565b61167f565b005b34801561083757600080fd5b50610840611798565b60405161084d91906139c6565b60405180910390f35b34801561086257600080fd5b5061086b61179e565b60405161087891906139c6565b60405180910390f35b34801561088d57600080fd5b506108966117a4565b6040516108a391906139c6565b60405180910390f35b3480156108b857600080fd5b506108d360048036038101906108ce9190613941565b6117aa565b6040516108e0919061399c565b60405180910390f35b3480156108f557600080fd5b50610910600480360381019061090b9190613941565b611895565b60405161091d919061399c565b60405180910390f35b34801561093257600080fd5b5061094d600480360381019061094891906139e1565b6118b3565b60405161095a919061399c565b60405180910390f35b34801561096f57600080fd5b506109786118d3565b604051610985919061399c565b60405180910390f35b34801561099a57600080fd5b506109b560048036038101906109b09190613b95565b6118e6565b005b3480156109c357600080fd5b506109cc611a0b565b6040516109d9919061399c565b60405180910390f35b3480156109ee57600080fd5b506109f7611a1e565b604051610a0491906139c6565b60405180910390f35b348015610a1957600080fd5b50610a346004803603810190610a2f9190613bd5565b611a24565b604051610a41919061399c565b60405180910390f35b348015610a5657600080fd5b50610a5f611b79565b604051610a6c91906139c6565b60405180910390f35b348015610a8157600080fd5b50610a9c6004803603810190610a979190613c02565b611b7f565b604051610aa991906139c6565b60405180910390f35b348015610abe57600080fd5b50610ac7611c06565b604051610ad491906139c6565b60405180910390f35b348015610ae957600080fd5b50610af2611c0c565b604051610aff919061399c565b60405180910390f35b348015610b1457600080fd5b50610b2f6004803603810190610b2a91906139e1565b611cac565b005b348015610b3d57600080fd5b50610b586004803603810190610b539190613bd5565b611da4565b005b348015610b6657600080fd5b50610b6f612064565b604051610b7c91906139c6565b60405180910390f35b610b8d61206a565b73ffffffffffffffffffffffffffffffffffffffff16610bab6115c3565b73ffffffffffffffffffffffffffffffffffffffff1614610c01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf890613c8e565b60405180910390fd5b8160118190555080601281905550601254601154610c1f9190613cdd565b601081905550600a6010541115610c6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6290613d7f565b60405180910390fd5b5050565b606060038054610c7e90613dce565b80601f0160208091040260200160405190810160405280929190818152602001828054610caa90613dce565b8015610cf75780601f10610ccc57610100808354040283529160200191610cf7565b820191906000526020600020905b815481529060010190602001808311610cda57829003601f168201915b5050505050905090565b6000610d15610d0e61206a565b8484612072565b6001905092915050565b60145481565b60166020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610d7b61206a565b73ffffffffffffffffffffffffffffffffffffffff16610d996115c3565b73ffffffffffffffffffffffffffffffffffffffff1614610def576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de690613c8e565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60125481565b600f5481565b6000610ec884848461223d565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f1361206a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610f93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8a90613e72565b60405180910390fd5b610fa785610f9f61206a565b858403612072565b60019150509392505050565b61dead81565b60006012905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061108a610ff561206a565b84846001600061100361206a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110859190613cdd565b612072565b6001905092915050565b7f000000000000000000000000febd1143f83a3d9177cedbe92b3c2ceb3bc9b83081565b600a60089054906101000a900460ff1681565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61112961206a565b73ffffffffffffffffffffffffffffffffffffffff166111476115c3565b73ffffffffffffffffffffffffffffffffffffffff161461119d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119490613c8e565b60405180910390fd5b81600e8190555080600f8190555080826111b79190613cdd565b600d81905550600a600d541115611203576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fa90613d7f565b60405180910390fd5b5050565b61120f61206a565b73ffffffffffffffffffffffffffffffffffffffff1661122d6115c3565b73ffffffffffffffffffffffffffffffffffffffff1614611283576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127a90613c8e565b60405180910390fd5b80600a806101000a81548160ff02191690831515021790555050565b60105481565b600a8054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61130661206a565b73ffffffffffffffffffffffffffffffffffffffff166113246115c3565b73ffffffffffffffffffffffffffffffffffffffff161461137a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137190613c8e565b60405180910390fd5b6113846000612fef565b565b600061139061206a565b73ffffffffffffffffffffffffffffffffffffffff166113ae6115c3565b73ffffffffffffffffffffffffffffffffffffffff1614611404576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fb90613c8e565b60405180910390fd5b6000600a60086101000a81548160ff0219169083151502179055506001905090565b61142e61206a565b73ffffffffffffffffffffffffffffffffffffffff1661144c6115c3565b73ffffffffffffffffffffffffffffffffffffffff16146114a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149990613c8e565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660149054906101000a900460ff1681565b61151861206a565b73ffffffffffffffffffffffffffffffffffffffff166115366115c3565b73ffffffffffffffffffffffffffffffffffffffff161461158c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158390613c8e565b60405180910390fd5b6001600a60096101000a81548160ff0219169083151502179055506001600a806101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546115fc90613dce565b80601f016020809104026020016040519081016040528092919081815260200182805461162890613dce565b80156116755780601f1061164a57610100808354040283529160200191611675565b820191906000526020600020905b81548152906001019060200180831161165857829003601f168201915b5050505050905090565b61168761206a565b73ffffffffffffffffffffffffffffffffffffffff166116a56115c3565b73ffffffffffffffffffffffffffffffffffffffff16146116fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f290613c8e565b60405180910390fd5b7f000000000000000000000000febd1143f83a3d9177cedbe92b3c2ceb3bc9b83073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561178a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178190613f04565b60405180910390fd5b61179482826130b5565b5050565b600e5481565b60135481565b60115481565b600080600160006117b961206a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186d90613f96565b60405180910390fd5b61188a61188161206a565b85858403612072565b600191505092915050565b60006118a96118a261206a565b848461223d565b6001905092915050565b60176020528060005260406000206000915054906101000a900460ff1681565b600a60099054906101000a900460ff1681565b6118ee61206a565b73ffffffffffffffffffffffffffffffffffffffff1661190c6115c3565b73ffffffffffffffffffffffffffffffffffffffff1614611962576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195990613c8e565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516119ff919061399c565b60405180910390a25050565b600c60009054906101000a900460ff1681565b60075481565b6000611a2e61206a565b73ffffffffffffffffffffffffffffffffffffffff16611a4c6115c3565b73ffffffffffffffffffffffffffffffffffffffff1614611aa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9990613c8e565b60405180910390fd5b620186a06001611ab0610d69565b611aba9190613fb6565b611ac4919061403f565b821015611b06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afd906140e2565b60405180910390fd5b6103e86005611b13610d69565b611b1d9190613fb6565b611b27919061403f565b821115611b69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6090614174565b60405180910390fd5b8160088190555060019050919050565b600d5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60085481565b6000611c1661206a565b73ffffffffffffffffffffffffffffffffffffffff16611c346115c3565b73ffffffffffffffffffffffffffffffffffffffff1614611c8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8190613c8e565b60405180910390fd5b6000600c60006101000a81548160ff0219169083151502179055506001905090565b611cb461206a565b73ffffffffffffffffffffffffffffffffffffffff16611cd26115c3565b73ffffffffffffffffffffffffffffffffffffffff1614611d28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1f90613c8e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8f90614206565b60405180910390fd5b611da181612fef565b50565b611dac61206a565b73ffffffffffffffffffffffffffffffffffffffff16611dca6115c3565b73ffffffffffffffffffffffffffffffffffffffff1614611e20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1790613c8e565b60405180910390fd5b6000600267ffffffffffffffff811115611e3d57611e3c614226565b5b604051908082528060200260200182016040528015611e6b5781602001602082028036833780820191505090505b5090507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ed9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611efd919061426a565b81600081518110611f1157611f10614297565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110611f6057611f5f614297565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060004790506000611fc76064611fb9868561315690919063ffffffff16565b61316c90919063ffffffff16565b90507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663b6f9de958260008661dead426040518663ffffffff1660e01b815260040161202c94939291906143bf565b6000604051808303818588803b15801561204557600080fd5b505af1158015612059573d6000803e3d6000fd5b505050505050505050565b60095481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156120e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d99061447d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612152576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121499061450f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161223091906139c6565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156122ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a4906145a1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561231d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231490614633565b60405180910390fd5b60008114156123375761233283836000613182565b612fea565b6000600660146101000a81548160ff021916908315150217905550600a60089054906101000a900460ff1615612a155761236f6115c3565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156123dd57506123ad6115c3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124165750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612450575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124695750600560149054906101000a900460ff16155b15612a1457600a60099054906101000a900460ff1661256357601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125235750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612562576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125599061469f565b60405180910390fd5b5b600c60009054906101000a900460ff161561272b576125806115c3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561260757507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561265f57507f000000000000000000000000febd1143f83a3d9177cedbe92b3c2ceb3bc9b83073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561272a5743600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106126e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126dc90614757565b60405180910390fd5b43600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127ce5750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561287557600754811115612818576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280f906147e9565b60405180910390fd5b600954612824836112b6565b8261282f9190613cdd565b1115612870576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286790614855565b60405180910390fd5b612a13565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129185750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561296757600754811115612962576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612959906148e7565b60405180910390fd5b612a12565b601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612a11576009546129c4836112b6565b826129cf9190613cdd565b1115612a10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0790614855565b60405180910390fd5b5b5b5b5b5b6000612a20306112b6565b905060006008548210159050808015612a435750600a8054906101000a900460ff165b8015612a5c5750600560149054906101000a900460ff16155b8015612ab25750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612b085750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612b5e5750601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ba2576001600560146101000a81548160ff021916908315150217905550612b86613403565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050600560149054906101000a900460ff16612d0357600a8060009054906101000a900467ffffffffffffffff1667ffffffffffffffff161415612c06576a108b2a2c280290940000006007819055505b6a108b2a2c280290940000006009819055506019600a60009054906101000a900467ffffffffffffffff1667ffffffffffffffff161415612c54576a18d0bf423c03d8de0000006007819055505b6a14adf4b7320334b90000006009819055506028600a60009054906101000a900467ffffffffffffffff1667ffffffffffffffff161415612ca2576a295be96e640669720000006007819055505b6a295be96e64066972000000600981905550603c600a60009054906101000a900467ffffffffffffffff1667ffffffffffffffff161415612d02576a39e7139a8c08fa060000006007819055506a39e7139a8c08fa060000006009819055505b5b601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612da45750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612dae57600090505b6000818015612dca5750600660149054906101000a900460ff16155b15612fda57601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e2a57506000601054115b15612ec457612e576064612e496010548861315690919063ffffffff16565b61316c90919063ffffffff16565b905060105460125482612e6a9190613fb6565b612e74919061403f565b60146000828254612e859190613cdd565b9250508190555060105460115482612e9d9190613fb6565b612ea7919061403f565b60136000828254612eb89190613cdd565b92505081905550612fb6565b601760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f1f57506000600d54115b15612fb557612f4c6064612f3e600d548861315690919063ffffffff16565b61316c90919063ffffffff16565b9050600d54600f5482612f5f9190613fb6565b612f69919061403f565b60146000828254612f7a9190613cdd565b92505081905550600d54600e5482612f929190613fb6565b612f9c919061403f565b60136000828254612fad9190613cdd565b925050819055505b5b6000811115612fcb57612fca873083613182565b5b8085612fd79190614907565b94505b612fe5878787613182565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600081836131649190613fb6565b905092915050565b6000818361317a919061403f565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156131f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131e9906145a1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613262576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325990614633565b60405180910390fd5b61326d838383613550565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156132f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132ea906149ad565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133869190613cdd565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516133ea91906139c6565b60405180910390a36133fd848484613555565b50505050565b600061340e306112b6565b905060006013546014546134229190613cdd565b90506000808314806134345750600082145b156134415750505061354e565b60146008546134509190613fb6565b8311156134695760146008546134669190613fb6565b92505b60004790506134778461355a565b600061348c824761379790919063ffffffff16565b905060006134b7856134a96013548561315690919063ffffffff16565b61316c90919063ffffffff16565b9050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816040516134ff906149fe565b60006040518083038185875af1925050503d806000811461353c576040519150601f19603f3d011682016040523d82523d6000602084013e613541565b606091505b5050809450505050505050505b565b505050565b505050565b6000600267ffffffffffffffff81111561357757613576614226565b5b6040519080825280602002602001820160405280156135a55781602001602082028036833780820191505090505b50905030816000815181106135bd576135bc614297565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613662573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613686919061426a565b8160018151811061369a57613699614297565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506136ff307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612072565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613761959493929190614a13565b600060405180830381600087803b15801561377b57600080fd5b505af115801561378f573d6000803e3d6000fd5b505050505050565b600081836137a59190614907565b905092915050565b600080fd5b6000819050919050565b6137c5816137b2565b81146137d057600080fd5b50565b6000813590506137e2816137bc565b92915050565b600080604083850312156137ff576137fe6137ad565b5b600061380d858286016137d3565b925050602061381e858286016137d3565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613862578082015181840152602081019050613847565b83811115613871576000848401525b50505050565b6000601f19601f8301169050919050565b600061389382613828565b61389d8185613833565b93506138ad818560208601613844565b6138b681613877565b840191505092915050565b600060208201905081810360008301526138db8184613888565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061390e826138e3565b9050919050565b61391e81613903565b811461392957600080fd5b50565b60008135905061393b81613915565b92915050565b60008060408385031215613958576139576137ad565b5b60006139668582860161392c565b9250506020613977858286016137d3565b9150509250929050565b60008115159050919050565b61399681613981565b82525050565b60006020820190506139b1600083018461398d565b92915050565b6139c0816137b2565b82525050565b60006020820190506139db60008301846139b7565b92915050565b6000602082840312156139f7576139f66137ad565b5b6000613a058482850161392c565b91505092915050565b6000819050919050565b6000613a33613a2e613a29846138e3565b613a0e565b6138e3565b9050919050565b6000613a4582613a18565b9050919050565b6000613a5782613a3a565b9050919050565b613a6781613a4c565b82525050565b6000602082019050613a826000830184613a5e565b92915050565b600080600060608486031215613aa157613aa06137ad565b5b6000613aaf8682870161392c565b9350506020613ac08682870161392c565b9250506040613ad1868287016137d3565b9150509250925092565b613ae481613903565b82525050565b6000602082019050613aff6000830184613adb565b92915050565b600060ff82169050919050565b613b1b81613b05565b82525050565b6000602082019050613b366000830184613b12565b92915050565b613b4581613981565b8114613b5057600080fd5b50565b600081359050613b6281613b3c565b92915050565b600060208284031215613b7e57613b7d6137ad565b5b6000613b8c84828501613b53565b91505092915050565b60008060408385031215613bac57613bab6137ad565b5b6000613bba8582860161392c565b9250506020613bcb85828601613b53565b9150509250929050565b600060208284031215613beb57613bea6137ad565b5b6000613bf9848285016137d3565b91505092915050565b60008060408385031215613c1957613c186137ad565b5b6000613c278582860161392c565b9250506020613c388582860161392c565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613c78602083613833565b9150613c8382613c42565b602082019050919050565b60006020820190508181036000830152613ca781613c6b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613ce8826137b2565b9150613cf3836137b2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613d2857613d27613cae565b5b828201905092915050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b6000613d69601d83613833565b9150613d7482613d33565b602082019050919050565b60006020820190508181036000830152613d9881613d5c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613de657607f821691505b60208210811415613dfa57613df9613d9f565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613e5c602883613833565b9150613e6782613e00565b604082019050919050565b60006020820190508181036000830152613e8b81613e4f565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613eee603983613833565b9150613ef982613e92565b604082019050919050565b60006020820190508181036000830152613f1d81613ee1565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613f80602583613833565b9150613f8b82613f24565b604082019050919050565b60006020820190508181036000830152613faf81613f73565b9050919050565b6000613fc1826137b2565b9150613fcc836137b2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561400557614004613cae565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061404a826137b2565b9150614055836137b2565b92508261406557614064614010565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006140cc603583613833565b91506140d782614070565b604082019050919050565b600060208201905081810360008301526140fb816140bf565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061415e603483613833565b915061416982614102565b604082019050919050565b6000602082019050818103600083015261418d81614151565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006141f0602683613833565b91506141fb82614194565b604082019050919050565b6000602082019050818103600083015261421f816141e3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008151905061426481613915565b92915050565b6000602082840312156142805761427f6137ad565b5b600061428e84828501614255565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b60006142eb6142e66142e1846142c6565b613a0e565b6137b2565b9050919050565b6142fb816142d0565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61433681613903565b82525050565b6000614348838361432d565b60208301905092915050565b6000602082019050919050565b600061436c82614301565b614376818561430c565b93506143818361431d565b8060005b838110156143b2578151614399888261433c565b97506143a483614354565b925050600181019050614385565b5085935050505092915050565b60006080820190506143d460008301876142f2565b81810360208301526143e68186614361565b90506143f56040830185613adb565b61440260608301846139b7565b95945050505050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614467602483613833565b91506144728261440b565b604082019050919050565b600060208201905081810360008301526144968161445a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006144f9602283613833565b91506145048261449d565b604082019050919050565b60006020820190508181036000830152614528816144ec565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061458b602583613833565b91506145968261452f565b604082019050919050565b600060208201905081810360008301526145ba8161457e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061461d602383613833565b9150614628826145c1565b604082019050919050565b6000602082019050818103600083015261464c81614610565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614689601683613833565b915061469482614653565b602082019050919050565b600060208201905081810360008301526146b88161467c565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614741604983613833565b915061474c826146bf565b606082019050919050565b6000602082019050818103600083015261477081614734565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006147d3603583613833565b91506147de82614777565b604082019050919050565b60006020820190508181036000830152614802816147c6565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061483f601383613833565b915061484a82614809565b602082019050919050565b6000602082019050818103600083015261486e81614832565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006148d1603683613833565b91506148dc82614875565b604082019050919050565b60006020820190508181036000830152614900816148c4565b9050919050565b6000614912826137b2565b915061491d836137b2565b9250828210156149305761492f613cae565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614997602683613833565b91506149a28261493b565b604082019050919050565b600060208201905081810360008301526149c68161498a565b9050919050565b600081905092915050565b50565b60006149e86000836149cd565b91506149f3826149d8565b600082019050919050565b6000614a09826149db565b9150819050919050565b600060a082019050614a2860008301886139b7565b614a3560208301876142f2565b8181036040830152614a478186614361565b9050614a566060830185613adb565b614a6360808301846139b7565b969550505050505056fea2646970667358221220b5632136bded978f6cfa3dba3c40bb5b3d5723d024ec4713f83c78317ee99f7864736f6c634300080a0033
Deployed Bytecode Sourcemap
15536:14614:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20941:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2943:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3884:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16509:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16610:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15617:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3277:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21958:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16437:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16333:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4065:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15720:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3172:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15812:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4570:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15675:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16029:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22155:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20635:298;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20528:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16370:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16109:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3396:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1030:103;;;;;;;;;;;;;:::i;:::-;;19418:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20308:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15843:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19254:112;;;;;;;;;;;;;:::i;:::-;;811:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3055:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21450:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16302:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16475:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16405:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4797:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3535:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16682:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16069:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21260:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16220:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15883:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19805:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16268:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3722:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15925:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19600:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1141:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29574:573;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15965:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20941:311;955:12;:10;:12::i;:::-;944:23;;:7;:5;:7::i;:::-;:23;;;936:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21071:7:::1;21058:10;:20;;;;21106:11;21089:14;:28;;;;21157:14;;21144:10;;:27;;;;:::i;:::-;21128:13;:43;;;;21208:2;21191:13;;:19;;21183:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;20941:311:::0;;:::o;2943:100::-;2997:13;3030:5;3023:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2943:100;:::o;3884:169::-;3967:4;3984:39;3993:12;:10;:12::i;:::-;4007:7;4016:6;3984:8;:39::i;:::-;4041:4;4034:11;;3884:169;;;;:::o;16509:31::-;;;;:::o;16610:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;15617:51::-;;;:::o;3277:108::-;3338:7;3365:12;;3358:19;;3277:108;:::o;21958:189::-;955:12;:10;:12::i;:::-;944:23;;:7;:5;:7::i;:::-;:23;;;936:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22094:9:::1;;;;;;;;;;;22063:41;;22080:12;22063:41;;;;;;;;;;;;22127:12;22115:9;;:24;;;;;;;;;;;;;;;;;;21958:189:::0;:::o;16437:29::-;;;;:::o;16333:28::-;;;;:::o;4065:492::-;4205:4;4222:36;4232:6;4240:9;4251:6;4222:9;:36::i;:::-;4271:24;4298:11;:19;4310:6;4298:19;;;;;;;;;;;;;;;:33;4318:12;:10;:12::i;:::-;4298:33;;;;;;;;;;;;;;;;4271:60;;4370:6;4350:16;:26;;4342:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;4457:57;4466:6;4474:12;:10;:12::i;:::-;4507:6;4488:16;:25;4457:8;:57::i;:::-;4545:4;4538:11;;;4065:492;;;;;:::o;15720:53::-;15766:6;15720:53;:::o;3172:93::-;3230:5;3255:2;3248:9;;3172:93;:::o;15812:24::-;;;;;;;;;;;;;:::o;4570:215::-;4658:4;4675:80;4684:12;:10;:12::i;:::-;4698:7;4744:10;4707:11;:25;4719:12;:10;:12::i;:::-;4707:25;;;;;;;;;;;;;;;:34;4733:7;4707:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;4675:8;:80::i;:::-;4773:4;4766:11;;4570:215;;;;:::o;15675:38::-;;;:::o;16029:33::-;;;;;;;;;;;;;:::o;22155:126::-;22221:4;22245:19;:28;22265:7;22245:28;;;;;;;;;;;;;;;;;;;;;;;;;22238:35;;22155:126;;;:::o;20635:298::-;955:12;:10;:12::i;:::-;944:23;;:7;:5;:7::i;:::-;:23;;;936:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20763:7:::1;20751:9;:19;;;;20796:11;20781:13;:26;;;;20843:11;20833:7;:21;;;;:::i;:::-;20818:12;:36;;;;20889:2;20873:12;;:18;;20865:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;20635:298:::0;;:::o;20528:99::-;955:12;:10;:12::i;:::-;944:23;;:7;:5;:7::i;:::-;:23;;;936:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20612:7:::1;20598:11;::::0;:21:::1;;;;;;;;;;;;;;;;;;20528:99:::0;:::o;16370:28::-;;;;:::o;16109:31::-;;;;;;;;;;;;:::o;3396:127::-;3470:7;3497:9;:18;3507:7;3497:18;;;;;;;;;;;;;;;;3490:25;;3396:127;;;:::o;1030:103::-;955:12;:10;:12::i;:::-;944:23;;:7;:5;:7::i;:::-;:23;;;936:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1095:30:::1;1122:1;1095:18;:30::i;:::-;1030:103::o:0;19418:121::-;19470:4;955:12;:10;:12::i;:::-;944:23;;:7;:5;:7::i;:::-;:23;;;936:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19504:5:::1;19487:14;;:22;;;;;;;;;;;;;;;;;;19527:4;19520:11;;19418:121:::0;:::o;20308:167::-;955:12;:10;:12::i;:::-;944:23;;:7;:5;:7::i;:::-;:23;;;936:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20463:4:::1;20421:31;:39;20453:6;20421:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;20308:167:::0;;:::o;15843:31::-;;;;;;;;;;;;;:::o;19254:112::-;955:12;:10;:12::i;:::-;944:23;;:7;:5;:7::i;:::-;:23;;;936:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19325:4:::1;19309:13;;:20;;;;;;;;;;;;;;;;;;19354:4;19340:11;::::0;:18:::1;;;;;;;;;;;;;;;;;;19254:112::o:0;811:87::-;857:7;884:6;;;;;;;;;;;877:13;;811:87;:::o;3055:104::-;3111:13;3144:7;3137:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3055:104;:::o;21450:304::-;955:12;:10;:12::i;:::-;944:23;;:7;:5;:7::i;:::-;:23;;;936:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21594:13:::1;21586:21;;:4;:21;;;;21564:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;21705:41;21734:4;21740:5;21705:28;:41::i;:::-;21450:304:::0;;:::o;16302:24::-;;;;:::o;16475:27::-;;;;:::o;16405:25::-;;;;:::o;4797:413::-;4890:4;4907:24;4934:11;:25;4946:12;:10;:12::i;:::-;4934:25;;;;;;;;;;;;;;;:34;4960:7;4934:34;;;;;;;;;;;;;;;;4907:61;;5007:15;4987:16;:35;;4979:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;5100:67;5109:12;:10;:12::i;:::-;5123:7;5151:15;5132:16;:34;5100:8;:67::i;:::-;5198:4;5191:11;;;4797:413;;;;:::o;3535:175::-;3621:4;3638:42;3648:12;:10;:12::i;:::-;3662:9;3673:6;3638:9;:42::i;:::-;3698:4;3691:11;;3535:175;;;;:::o;16682:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;16069:33::-;;;;;;;;;;;;;:::o;21260:182::-;955:12;:10;:12::i;:::-;944:23;;:7;:5;:7::i;:::-;:23;;;936:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21376:8:::1;21345:19;:28;21365:7;21345:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;21416:7;21400:34;;;21425:8;21400:34;;;;;;:::i;:::-;;;;;;;;21260:182:::0;;:::o;16220:39::-;;;;;;;;;;;;;:::o;15883:35::-;;;;:::o;19805:497::-;19913:4;955:12;:10;:12::i;:::-;944:23;;:7;:5;:7::i;:::-;:23;;;936:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19992:6:::1;19987:1;19971:13;:11;:13::i;:::-;:17;;;;:::i;:::-;19970:28;;;;:::i;:::-;19957:9;:41;;19935:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;20147:4;20142:1;20126:13;:11;:13::i;:::-;:17;;;;:::i;:::-;20125:26;;;;:::i;:::-;20112:9;:39;;20090:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;20263:9;20242:18;:30;;;;20290:4;20283:11;;19805:497:::0;;;:::o;16268:27::-;;;;:::o;3722:151::-;3811:7;3838:11;:18;3850:5;3838:18;;;;;;;;;;;;;;;:27;3857:7;3838:27;;;;;;;;;;;;;;;;3831:34;;3722:151;;;;:::o;15925:33::-;;;;:::o;19600:135::-;19660:4;955:12;:10;:12::i;:::-;944:23;;:7;:5;:7::i;:::-;:23;;;936:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19700:5:::1;19677:20;;:28;;;;;;;;;;;;;;;;;;19723:4;19716:11;;19600:135:::0;:::o;1141:201::-;955:12;:10;:12::i;:::-;944:23;;:7;:5;:7::i;:::-;:23;;;936:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1250:1:::1;1230:22;;:8;:22;;;;1222:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;1306:28;1325:8;1306:18;:28::i;:::-;1141:201:::0;:::o;29574:573::-;955:12;:10;:12::i;:::-;944:23;;:7;:5;:7::i;:::-;:23;;;936:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29641:21:::1;29679:1;29665:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29641:40;;29702:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29692:4;29697:1;29692:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;29753:4;29735;29740:1;29735:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;29769:16;29787:21;29769:39;;29819:21;29843:30;29869:3;29843:21;29856:7;29843:8;:12;;:21;;;;:::i;:::-;:25;;:30;;;;:::i;:::-;29819:54;;29884:15;:66;;;29959:13;29988:1;30004:4;30031:6;30053:15;29884:195;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;29630:517;;;29574:573:::0;:::o;15965:24::-;;;;:::o;361:98::-;414:7;441:10;434:17;;361:98;:::o;6983:380::-;7136:1;7119:19;;:5;:19;;;;7111:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7217:1;7198:21;;:7;:21;;;;7190:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7301:6;7271:11;:18;7283:5;7271:18;;;;;;;;;;;;;;;:27;7290:7;7271:27;;;;;;;;;;;;;;;:36;;;;7339:7;7323:32;;7332:5;7323:32;;;7348:6;7323:32;;;;;;:::i;:::-;;;;;;;;6983:380;;;:::o;22339:5275::-;22487:1;22471:18;;:4;:18;;;;22463:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22564:1;22550:16;;:2;:16;;;;22542:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;22633:1;22623:6;:11;22619:93;;;22651:28;22667:4;22673:2;22677:1;22651:15;:28::i;:::-;22694:7;;22619:93;22735:5;22722:10;;:18;;;;;;;;;;;;;;;;;;22755:14;;;;;;;;;;;22751:2487;;;22816:7;:5;:7::i;:::-;22808:15;;:4;:15;;;;:49;;;;;22850:7;:5;:7::i;:::-;22844:13;;:2;:13;;;;22808:49;:86;;;;;22892:1;22878:16;;:2;:16;;;;22808:86;:128;;;;;22929:6;22915:21;;:2;:21;;;;22808:128;:158;;;;;22958:8;;;;;;;;;;;22957:9;22808:158;22786:2441;;;23006:13;;;;;;;;;;;23001:223;;23078:19;:25;23098:4;23078:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;23107:19;:23;23127:2;23107:23;;;;;;;;;;;;;;;;;;;;;;;;;23078:52;23044:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;23001:223;23380:20;;;;;;;;;;;23376:641;;;23461:7;:5;:7::i;:::-;23455:13;;:2;:13;;;;:72;;;;;23511:15;23497:30;;:2;:30;;;;23455:72;:129;;;;;23570:13;23556:28;;:2;:28;;;;23455:129;23425:573;;;23748:12;23673:28;:39;23702:9;23673:39;;;;;;;;;;;;;;;;:87;23635:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;23962:12;23920:28;:39;23949:9;23920:39;;;;;;;;;;;;;;;:54;;;;23425:573;23376:641;24091:25;:31;24117:4;24091:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;24148:31;:35;24180:2;24148:35;;;;;;;;;;;;;;;;;;;;;;;;;24147:36;24091:92;24065:1147;;;24270:20;;24260:6;:30;;24226:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;24478:9;;24461:13;24471:2;24461:9;:13::i;:::-;24452:6;:22;;;;:::i;:::-;:35;;24418:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;24065:1147;;;24656:25;:29;24682:2;24656:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;24711:31;:37;24743:4;24711:37;;;;;;;;;;;;;;;;;;;;;;;;;24710:38;24656:92;24630:582;;;24835:20;;24825:6;:30;;24791:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;24630:582;;;24992:31;:35;25024:2;24992:35;;;;;;;;;;;;;;;;;;;;;;;;;24987:225;;25112:9;;25095:13;25105:2;25095:9;:13::i;:::-;25086:6;:22;;;;:::i;:::-;:35;;25052:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;24987:225;24630:582;24065:1147;22786:2441;22751:2487;25248:28;25279:24;25297:4;25279:9;:24::i;:::-;25248:55;;25316:12;25355:18;;25331:20;:42;;25316:57;;25404:7;:35;;;;;25428:11;;;;;;;;;;25404:35;:61;;;;;25457:8;;;;;;;;;;;25456:9;25404:61;:110;;;;;25483:25;:31;25509:4;25483:31;;;;;;;;;;;;;;;;;;;;;;;;;25482:32;25404:110;:153;;;;;25532:19;:25;25552:4;25532:25;;;;;;;;;;;;;;;;;;;;;;;;;25531:26;25404:153;:194;;;;;25575:19;:23;25595:2;25575:23;;;;;;;;;;;;;;;;;;;;;;;;;25574:24;25404:194;25386:326;;;25636:4;25625:8;;:15;;;;;;;;;;;;;;;;;;25657:10;:8;:10::i;:::-;25695:5;25684:8;;:16;;;;;;;;;;;;;;;;;;25386:326;25724:12;25740:8;;;;;;;;;;;25739:9;25724:24;;25763:8;;;;;;;;;;;25759:682;;25805:2;25791:10;;;;;;;;;;;:16;;;25787:79;;;25849:17;25826:20;:40;;;;25787:79;25897:17;25885:9;:29;;;;25947:2;25933:10;;;;;;;;;;;:16;;;25929:78;;;25990:17;25967:20;:40;;;;25929:78;26038:17;26026:9;:29;;;;26088:2;26074:10;;;;;;;;;;;:16;;;26070:79;;;26132:17;26109:20;:40;;;;26070:79;26180:17;26168:9;:29;;;;26230:2;26216:10;;;;;;;;;;;:16;;;26212:146;;;26276:17;26253:20;:40;;;;26324:17;26312:9;:29;;;;26212:146;25759:682;26540:19;:25;26560:4;26540:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;26569:19;:23;26589:2;26569:23;;;;;;;;;;;;;;;;;;;;;;;;;26540:52;26536:100;;;26619:5;26609:15;;26536:100;26648:12;26753:7;:21;;;;;26764:10;;;;;;;;;;;26763:11;26753:21;26749:812;;;26819:25;:29;26845:2;26819:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;26868:1;26852:13;;:17;26819:50;26815:597;;;26897:34;26927:3;26897:25;26908:13;;26897:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;26890:41;;26996:13;;26978:14;;26971:4;:21;;;;:::i;:::-;26970:39;;;;:::i;:::-;26950:16;;:59;;;;;;;:::i;:::-;;;;;;;;27065:13;;27051:10;;27044:4;:17;;;;:::i;:::-;27043:35;;;;:::i;:::-;27028:12;;:50;;;;;;;:::i;:::-;;;;;;;;26815:597;;;27140:25;:31;27166:4;27140:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;27190:1;27175:12;;:16;27140:51;27136:276;;;27219:33;27248:3;27219:24;27230:12;;27219:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;27212:40;;27316:12;;27299:13;;27292:4;:20;;;;:::i;:::-;27291:37;;;;:::i;:::-;27271:16;;:57;;;;;;;:::i;:::-;;;;;;;;27384:12;;27371:9;;27364:4;:16;;;;:::i;:::-;27363:33;;;;:::i;:::-;27347:12;;:49;;;;;;;:::i;:::-;;;;;;;;27136:276;26815:597;27439:1;27432:4;:8;27428:91;;;27461:42;27477:4;27491;27498;27461:15;:42::i;:::-;27428:91;27545:4;27535:14;;;;;:::i;:::-;;;26749:812;27573:33;27589:4;27595:2;27599:6;27573:15;:33::i;:::-;22452:5162;;;;22339:5275;;;;:::o;1350:191::-;1424:16;1443:6;;;;;;;;;;;1424:25;;1469:8;1460:6;;:17;;;;;;;;;;;;;;;;;;1524:8;1493:40;;1514:8;1493:40;;;;;;;;;;;;1413:128;1350:191;:::o;21762:188::-;21879:5;21845:25;:31;21871:4;21845:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;21936:5;21902:40;;21930:4;21902:40;;;;;;;;;;;;21762:188;;:::o;9024:98::-;9082:7;9113:1;9109;:5;;;;:::i;:::-;9102:12;;9024:98;;;;:::o;9135:::-;9193:7;9224:1;9220;:5;;;;:::i;:::-;9213:12;;9135:98;;;;:::o;5221:733::-;5379:1;5361:20;;:6;:20;;;;5353:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5463:1;5442:23;;:9;:23;;;;5434:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5518:47;5539:6;5547:9;5558:6;5518:20;:47::i;:::-;5578:21;5602:9;:17;5612:6;5602:17;;;;;;;;;;;;;;;;5578:41;;5655:6;5638:13;:23;;5630:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;5776:6;5760:13;:22;5740:9;:17;5750:6;5740:17;;;;;;;;;;;;;;;:42;;;;5828:6;5804:9;:20;5814:9;5804:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;5869:9;5852:35;;5861:6;5852:35;;;5880:6;5852:35;;;;;;:::i;:::-;;;;;;;;5900:46;5920:6;5928:9;5939:6;5900:19;:46::i;:::-;5342:612;5221:733;;;:::o;28744:822::-;28783:23;28809:24;28827:4;28809:9;:24::i;:::-;28783:50;;28844:25;28904:12;;28872:16;;:44;;;;:::i;:::-;28844:72;;28928:12;28976:1;28957:15;:20;:46;;;;29002:1;28981:17;:22;28957:46;28953:85;;;29020:7;;;;;28953:85;29093:2;29072:18;;:23;;;;:::i;:::-;29054:15;:41;29050:115;;;29151:2;29130:18;;:23;;;;:::i;:::-;29112:41;;29050:115;29175:25;29203:21;29175:49;;29237:33;29254:15;29237:16;:33::i;:::-;29291:18;29312:44;29338:17;29312:21;:25;;:44;;;;:::i;:::-;29291:65;;29369:17;29389:75;29436:17;29389:28;29404:12;;29389:10;:14;;:28;;;;:::i;:::-;:32;;:75;;;;:::i;:::-;29369:95;;29497:9;;;;;;;;;;;29489:23;;29534:9;29489:69;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29475:83;;;;;28772:794;;;;;;28744:822;:::o;7375:125::-;;;;:::o;7513:124::-;;;;:::o;27622:589::-;27748:21;27786:1;27772:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27748:40;;27817:4;27799;27804:1;27799:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;27843:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27833:4;27838:1;27833:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;27878:62;27895:4;27910:15;27928:11;27878:8;:62::i;:::-;27979:15;:66;;;28060:11;28086:1;28130:4;28157;28177:15;27979:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27677:534;27622:589;:::o;8913:98::-;8971:7;9002:1;8998;:5;;;;:::i;:::-;8991:12;;8913:98;;;;:::o;88:117:1:-;197:1;194;187: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:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:307::-;1518:1;1528:113;1542:6;1539:1;1536:13;1528:113;;;1627:1;1622:3;1618:11;1612:18;1608:1;1603:3;1599:11;1592:39;1564:2;1561:1;1557:10;1552:15;;1528:113;;;1659:6;1656:1;1653:13;1650:101;;;1739:1;1730:6;1725:3;1721:16;1714:27;1650:101;1499:258;1450:307;;;:::o;1763:102::-;1804:6;1855:2;1851:7;1846:2;1839:5;1835:14;1831:28;1821:38;;1763:102;;;:::o;1871:364::-;1959:3;1987:39;2020:5;1987:39;:::i;:::-;2042:71;2106:6;2101:3;2042:71;:::i;:::-;2035:78;;2122:52;2167:6;2162:3;2155:4;2148:5;2144:16;2122:52;:::i;:::-;2199:29;2221:6;2199:29;:::i;:::-;2194:3;2190:39;2183:46;;1963:272;1871:364;;;;:::o;2241:313::-;2354:4;2392:2;2381:9;2377:18;2369:26;;2441:9;2435:4;2431:20;2427:1;2416:9;2412:17;2405:47;2469:78;2542:4;2533:6;2469:78;:::i;:::-;2461:86;;2241:313;;;;:::o;2560:126::-;2597:7;2637:42;2630:5;2626:54;2615:65;;2560:126;;;:::o;2692:96::-;2729:7;2758:24;2776:5;2758:24;:::i;:::-;2747:35;;2692:96;;;:::o;2794:122::-;2867:24;2885:5;2867:24;:::i;:::-;2860:5;2857:35;2847:63;;2906:1;2903;2896:12;2847:63;2794:122;:::o;2922:139::-;2968:5;3006:6;2993:20;2984:29;;3022:33;3049:5;3022:33;:::i;:::-;2922:139;;;;:::o;3067:474::-;3135:6;3143;3192:2;3180:9;3171:7;3167:23;3163:32;3160:119;;;3198:79;;:::i;:::-;3160:119;3318:1;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3289:117;3445:2;3471:53;3516:7;3507:6;3496:9;3492:22;3471:53;:::i;:::-;3461:63;;3416:118;3067:474;;;;;:::o;3547:90::-;3581:7;3624:5;3617:13;3610:21;3599:32;;3547:90;;;:::o;3643:109::-;3724:21;3739:5;3724:21;:::i;:::-;3719:3;3712:34;3643:109;;:::o;3758:210::-;3845:4;3883:2;3872:9;3868:18;3860:26;;3896:65;3958:1;3947:9;3943:17;3934:6;3896:65;:::i;:::-;3758:210;;;;:::o;3974:118::-;4061:24;4079:5;4061:24;:::i;:::-;4056:3;4049:37;3974:118;;:::o;4098:222::-;4191:4;4229:2;4218:9;4214:18;4206:26;;4242:71;4310:1;4299:9;4295:17;4286:6;4242:71;:::i;:::-;4098:222;;;;:::o;4326:329::-;4385:6;4434:2;4422:9;4413:7;4409:23;4405:32;4402:119;;;4440:79;;:::i;:::-;4402:119;4560:1;4585:53;4630:7;4621:6;4610:9;4606:22;4585:53;:::i;:::-;4575:63;;4531:117;4326:329;;;;:::o;4661:60::-;4689:3;4710:5;4703:12;;4661:60;;;:::o;4727:142::-;4777:9;4810:53;4828:34;4837:24;4855:5;4837:24;:::i;:::-;4828:34;:::i;:::-;4810:53;:::i;:::-;4797:66;;4727:142;;;:::o;4875:126::-;4925:9;4958:37;4989:5;4958:37;:::i;:::-;4945:50;;4875:126;;;:::o;5007:153::-;5084:9;5117:37;5148:5;5117:37;:::i;:::-;5104:50;;5007:153;;;:::o;5166:185::-;5280:64;5338:5;5280:64;:::i;:::-;5275:3;5268:77;5166:185;;:::o;5357:276::-;5477:4;5515:2;5504:9;5500:18;5492:26;;5528:98;5623:1;5612:9;5608:17;5599:6;5528:98;:::i;:::-;5357:276;;;;:::o;5639:619::-;5716:6;5724;5732;5781:2;5769:9;5760:7;5756:23;5752:32;5749:119;;;5787:79;;:::i;:::-;5749:119;5907:1;5932:53;5977:7;5968:6;5957:9;5953:22;5932:53;:::i;:::-;5922:63;;5878:117;6034:2;6060:53;6105:7;6096:6;6085:9;6081:22;6060:53;:::i;:::-;6050:63;;6005:118;6162:2;6188:53;6233:7;6224:6;6213:9;6209:22;6188:53;:::i;:::-;6178:63;;6133:118;5639:619;;;;;:::o;6264:118::-;6351:24;6369:5;6351:24;:::i;:::-;6346:3;6339:37;6264:118;;:::o;6388:222::-;6481:4;6519:2;6508:9;6504:18;6496:26;;6532:71;6600:1;6589:9;6585:17;6576:6;6532:71;:::i;:::-;6388:222;;;;:::o;6616:86::-;6651:7;6691:4;6684:5;6680:16;6669:27;;6616:86;;;:::o;6708:112::-;6791:22;6807:5;6791:22;:::i;:::-;6786:3;6779:35;6708:112;;:::o;6826:214::-;6915:4;6953:2;6942:9;6938:18;6930:26;;6966:67;7030:1;7019:9;7015:17;7006:6;6966:67;:::i;:::-;6826:214;;;;:::o;7046:116::-;7116:21;7131:5;7116:21;:::i;:::-;7109:5;7106:32;7096:60;;7152:1;7149;7142:12;7096:60;7046:116;:::o;7168:133::-;7211:5;7249:6;7236:20;7227:29;;7265:30;7289:5;7265:30;:::i;:::-;7168:133;;;;:::o;7307:323::-;7363:6;7412:2;7400:9;7391:7;7387:23;7383:32;7380:119;;;7418:79;;:::i;:::-;7380:119;7538:1;7563:50;7605:7;7596:6;7585:9;7581:22;7563:50;:::i;:::-;7553:60;;7509:114;7307:323;;;;:::o;7636:468::-;7701:6;7709;7758:2;7746:9;7737:7;7733:23;7729:32;7726:119;;;7764:79;;:::i;:::-;7726:119;7884:1;7909:53;7954:7;7945:6;7934:9;7930:22;7909:53;:::i;:::-;7899:63;;7855:117;8011:2;8037:50;8079:7;8070:6;8059:9;8055:22;8037:50;:::i;:::-;8027:60;;7982:115;7636:468;;;;;:::o;8110:329::-;8169:6;8218:2;8206:9;8197:7;8193:23;8189:32;8186:119;;;8224:79;;:::i;:::-;8186:119;8344:1;8369:53;8414:7;8405:6;8394:9;8390:22;8369:53;:::i;:::-;8359:63;;8315:117;8110:329;;;;:::o;8445:474::-;8513:6;8521;8570:2;8558:9;8549:7;8545:23;8541:32;8538:119;;;8576:79;;:::i;:::-;8538:119;8696:1;8721:53;8766:7;8757:6;8746:9;8742:22;8721:53;:::i;:::-;8711:63;;8667:117;8823:2;8849:53;8894:7;8885:6;8874:9;8870:22;8849:53;:::i;:::-;8839:63;;8794:118;8445:474;;;;;:::o;8925:182::-;9065:34;9061:1;9053:6;9049:14;9042:58;8925:182;:::o;9113:366::-;9255:3;9276:67;9340:2;9335:3;9276:67;:::i;:::-;9269:74;;9352:93;9441:3;9352:93;:::i;:::-;9470:2;9465:3;9461:12;9454:19;;9113:366;;;:::o;9485:419::-;9651:4;9689:2;9678:9;9674:18;9666:26;;9738:9;9732:4;9728:20;9724:1;9713:9;9709:17;9702:47;9766:131;9892:4;9766:131;:::i;:::-;9758:139;;9485:419;;;:::o;9910:180::-;9958:77;9955:1;9948:88;10055:4;10052:1;10045:15;10079:4;10076:1;10069:15;10096:305;10136:3;10155:20;10173:1;10155:20;:::i;:::-;10150:25;;10189:20;10207:1;10189:20;:::i;:::-;10184:25;;10343:1;10275:66;10271:74;10268:1;10265:81;10262:107;;;10349:18;;:::i;:::-;10262:107;10393:1;10390;10386:9;10379:16;;10096:305;;;;:::o;10407:179::-;10547:31;10543:1;10535:6;10531:14;10524:55;10407:179;:::o;10592:366::-;10734:3;10755:67;10819:2;10814:3;10755:67;:::i;:::-;10748:74;;10831:93;10920:3;10831:93;:::i;:::-;10949:2;10944:3;10940:12;10933:19;;10592:366;;;:::o;10964:419::-;11130:4;11168:2;11157:9;11153:18;11145:26;;11217:9;11211:4;11207:20;11203:1;11192:9;11188:17;11181:47;11245:131;11371:4;11245:131;:::i;:::-;11237:139;;10964:419;;;:::o;11389:180::-;11437:77;11434:1;11427:88;11534:4;11531:1;11524:15;11558:4;11555:1;11548:15;11575:320;11619:6;11656:1;11650:4;11646:12;11636:22;;11703:1;11697:4;11693:12;11724:18;11714:81;;11780:4;11772:6;11768:17;11758:27;;11714:81;11842:2;11834:6;11831:14;11811:18;11808:38;11805:84;;;11861:18;;:::i;:::-;11805:84;11626:269;11575:320;;;:::o;11901:227::-;12041:34;12037:1;12029:6;12025:14;12018:58;12110:10;12105:2;12097:6;12093:15;12086:35;11901:227;:::o;12134:366::-;12276:3;12297:67;12361:2;12356:3;12297:67;:::i;:::-;12290:74;;12373:93;12462:3;12373:93;:::i;:::-;12491:2;12486:3;12482:12;12475:19;;12134:366;;;:::o;12506:419::-;12672:4;12710:2;12699:9;12695:18;12687:26;;12759:9;12753:4;12749:20;12745:1;12734:9;12730:17;12723:47;12787:131;12913:4;12787:131;:::i;:::-;12779:139;;12506:419;;;:::o;12931:244::-;13071:34;13067:1;13059:6;13055:14;13048:58;13140:27;13135:2;13127:6;13123:15;13116:52;12931:244;:::o;13181:366::-;13323:3;13344:67;13408:2;13403:3;13344:67;:::i;:::-;13337:74;;13420:93;13509:3;13420:93;:::i;:::-;13538:2;13533:3;13529:12;13522:19;;13181:366;;;:::o;13553:419::-;13719:4;13757:2;13746:9;13742:18;13734:26;;13806:9;13800:4;13796:20;13792:1;13781:9;13777:17;13770:47;13834:131;13960:4;13834:131;:::i;:::-;13826:139;;13553:419;;;:::o;13978:224::-;14118:34;14114:1;14106:6;14102:14;14095:58;14187:7;14182:2;14174:6;14170:15;14163:32;13978:224;:::o;14208:366::-;14350:3;14371:67;14435:2;14430:3;14371:67;:::i;:::-;14364:74;;14447:93;14536:3;14447:93;:::i;:::-;14565:2;14560:3;14556:12;14549:19;;14208:366;;;:::o;14580:419::-;14746:4;14784:2;14773:9;14769:18;14761:26;;14833:9;14827:4;14823:20;14819:1;14808:9;14804:17;14797:47;14861:131;14987:4;14861:131;:::i;:::-;14853:139;;14580:419;;;:::o;15005:348::-;15045:7;15068:20;15086:1;15068:20;:::i;:::-;15063:25;;15102:20;15120:1;15102:20;:::i;:::-;15097:25;;15290:1;15222:66;15218:74;15215:1;15212:81;15207:1;15200:9;15193:17;15189:105;15186:131;;;15297:18;;:::i;:::-;15186:131;15345:1;15342;15338:9;15327:20;;15005:348;;;;:::o;15359:180::-;15407:77;15404:1;15397:88;15504:4;15501:1;15494:15;15528:4;15525:1;15518:15;15545:185;15585:1;15602:20;15620:1;15602:20;:::i;:::-;15597:25;;15636:20;15654:1;15636:20;:::i;:::-;15631:25;;15675:1;15665:35;;15680:18;;:::i;:::-;15665:35;15722:1;15719;15715:9;15710:14;;15545:185;;;;:::o;15736:240::-;15876:34;15872:1;15864:6;15860:14;15853:58;15945:23;15940:2;15932:6;15928:15;15921:48;15736:240;:::o;15982:366::-;16124:3;16145:67;16209:2;16204:3;16145:67;:::i;:::-;16138:74;;16221:93;16310:3;16221:93;:::i;:::-;16339:2;16334:3;16330:12;16323:19;;15982:366;;;:::o;16354:419::-;16520:4;16558:2;16547:9;16543:18;16535:26;;16607:9;16601:4;16597:20;16593:1;16582:9;16578:17;16571:47;16635:131;16761:4;16635:131;:::i;:::-;16627:139;;16354:419;;;:::o;16779:239::-;16919:34;16915:1;16907:6;16903:14;16896:58;16988:22;16983:2;16975:6;16971:15;16964:47;16779:239;:::o;17024:366::-;17166:3;17187:67;17251:2;17246:3;17187:67;:::i;:::-;17180:74;;17263:93;17352:3;17263:93;:::i;:::-;17381:2;17376:3;17372:12;17365:19;;17024:366;;;:::o;17396:419::-;17562:4;17600:2;17589:9;17585:18;17577:26;;17649:9;17643:4;17639:20;17635:1;17624:9;17620:17;17613:47;17677:131;17803:4;17677:131;:::i;:::-;17669:139;;17396:419;;;:::o;17821:225::-;17961:34;17957:1;17949:6;17945:14;17938:58;18030:8;18025:2;18017:6;18013:15;18006:33;17821:225;:::o;18052:366::-;18194:3;18215:67;18279:2;18274:3;18215:67;:::i;:::-;18208:74;;18291:93;18380:3;18291:93;:::i;:::-;18409:2;18404:3;18400:12;18393:19;;18052:366;;;:::o;18424:419::-;18590:4;18628:2;18617:9;18613:18;18605:26;;18677:9;18671:4;18667:20;18663:1;18652:9;18648:17;18641:47;18705:131;18831:4;18705:131;:::i;:::-;18697:139;;18424:419;;;:::o;18849:180::-;18897:77;18894:1;18887:88;18994:4;18991:1;18984:15;19018:4;19015:1;19008:15;19035:143;19092:5;19123:6;19117:13;19108:22;;19139:33;19166:5;19139:33;:::i;:::-;19035:143;;;;:::o;19184:351::-;19254:6;19303:2;19291:9;19282:7;19278:23;19274:32;19271:119;;;19309:79;;:::i;:::-;19271:119;19429:1;19454:64;19510:7;19501:6;19490:9;19486:22;19454:64;:::i;:::-;19444:74;;19400:128;19184:351;;;;:::o;19541:180::-;19589:77;19586:1;19579:88;19686:4;19683:1;19676:15;19710:4;19707:1;19700:15;19727:85;19772:7;19801:5;19790:16;;19727:85;;;:::o;19818:158::-;19876:9;19909:61;19927:42;19936:32;19962:5;19936:32;:::i;:::-;19927:42;:::i;:::-;19909:61;:::i;:::-;19896:74;;19818:158;;;:::o;19982:147::-;20077:45;20116:5;20077:45;:::i;:::-;20072:3;20065:58;19982:147;;:::o;20135:114::-;20202:6;20236:5;20230:12;20220:22;;20135:114;;;:::o;20255:184::-;20354:11;20388:6;20383:3;20376:19;20428:4;20423:3;20419:14;20404:29;;20255:184;;;;:::o;20445:132::-;20512:4;20535:3;20527:11;;20565:4;20560:3;20556:14;20548:22;;20445:132;;;:::o;20583:108::-;20660:24;20678:5;20660:24;:::i;:::-;20655:3;20648:37;20583:108;;:::o;20697:179::-;20766:10;20787:46;20829:3;20821:6;20787:46;:::i;:::-;20865:4;20860:3;20856:14;20842:28;;20697:179;;;;:::o;20882:113::-;20952:4;20984;20979:3;20975:14;20967:22;;20882:113;;;:::o;21031:732::-;21150:3;21179:54;21227:5;21179:54;:::i;:::-;21249:86;21328:6;21323:3;21249:86;:::i;:::-;21242:93;;21359:56;21409:5;21359:56;:::i;:::-;21438:7;21469:1;21454:284;21479:6;21476:1;21473:13;21454:284;;;21555:6;21549:13;21582:63;21641:3;21626:13;21582:63;:::i;:::-;21575:70;;21668:60;21721:6;21668:60;:::i;:::-;21658:70;;21514:224;21501:1;21498;21494:9;21489:14;;21454:284;;;21458:14;21754:3;21747:10;;21155:608;;;21031:732;;;;:::o;21769:720::-;22004:4;22042:3;22031:9;22027:19;22019:27;;22056:79;22132:1;22121:9;22117:17;22108:6;22056:79;:::i;:::-;22182:9;22176:4;22172:20;22167:2;22156:9;22152:18;22145:48;22210:108;22313:4;22304:6;22210:108;:::i;:::-;22202:116;;22328:72;22396:2;22385:9;22381:18;22372:6;22328:72;:::i;:::-;22410;22478:2;22467:9;22463:18;22454:6;22410:72;:::i;:::-;21769:720;;;;;;;:::o;22495:223::-;22635:34;22631:1;22623:6;22619:14;22612:58;22704:6;22699:2;22691:6;22687:15;22680:31;22495:223;:::o;22724:366::-;22866:3;22887:67;22951:2;22946:3;22887:67;:::i;:::-;22880:74;;22963:93;23052:3;22963:93;:::i;:::-;23081:2;23076:3;23072:12;23065:19;;22724:366;;;:::o;23096:419::-;23262:4;23300:2;23289:9;23285:18;23277:26;;23349:9;23343:4;23339:20;23335:1;23324:9;23320:17;23313:47;23377:131;23503:4;23377:131;:::i;:::-;23369:139;;23096:419;;;:::o;23521:221::-;23661:34;23657:1;23649:6;23645:14;23638:58;23730:4;23725:2;23717:6;23713:15;23706:29;23521:221;:::o;23748:366::-;23890:3;23911:67;23975:2;23970:3;23911:67;:::i;:::-;23904:74;;23987:93;24076:3;23987:93;:::i;:::-;24105:2;24100:3;24096:12;24089:19;;23748:366;;;:::o;24120:419::-;24286:4;24324:2;24313:9;24309:18;24301:26;;24373:9;24367:4;24363:20;24359:1;24348:9;24344:17;24337:47;24401:131;24527:4;24401:131;:::i;:::-;24393:139;;24120:419;;;:::o;24545:224::-;24685:34;24681:1;24673:6;24669:14;24662:58;24754:7;24749:2;24741:6;24737:15;24730:32;24545:224;:::o;24775:366::-;24917:3;24938:67;25002:2;24997:3;24938:67;:::i;:::-;24931:74;;25014:93;25103:3;25014:93;:::i;:::-;25132:2;25127:3;25123:12;25116:19;;24775:366;;;:::o;25147:419::-;25313:4;25351:2;25340:9;25336:18;25328:26;;25400:9;25394:4;25390:20;25386:1;25375:9;25371:17;25364:47;25428:131;25554:4;25428:131;:::i;:::-;25420:139;;25147:419;;;:::o;25572:222::-;25712:34;25708:1;25700:6;25696:14;25689:58;25781:5;25776:2;25768:6;25764:15;25757:30;25572:222;:::o;25800:366::-;25942:3;25963:67;26027:2;26022:3;25963:67;:::i;:::-;25956:74;;26039:93;26128:3;26039:93;:::i;:::-;26157:2;26152:3;26148:12;26141:19;;25800:366;;;:::o;26172:419::-;26338:4;26376:2;26365:9;26361:18;26353:26;;26425:9;26419:4;26415:20;26411:1;26400:9;26396:17;26389:47;26453:131;26579:4;26453:131;:::i;:::-;26445:139;;26172:419;;;:::o;26597:172::-;26737:24;26733:1;26725:6;26721:14;26714:48;26597:172;:::o;26775:366::-;26917:3;26938:67;27002:2;26997:3;26938:67;:::i;:::-;26931:74;;27014:93;27103:3;27014:93;:::i;:::-;27132:2;27127:3;27123:12;27116:19;;26775:366;;;:::o;27147:419::-;27313:4;27351:2;27340:9;27336:18;27328:26;;27400:9;27394:4;27390:20;27386:1;27375:9;27371:17;27364:47;27428:131;27554:4;27428:131;:::i;:::-;27420:139;;27147:419;;;:::o;27572:297::-;27712:34;27708:1;27700:6;27696:14;27689:58;27781:34;27776:2;27768:6;27764:15;27757:59;27850:11;27845:2;27837:6;27833:15;27826:36;27572:297;:::o;27875:366::-;28017:3;28038:67;28102:2;28097:3;28038:67;:::i;:::-;28031:74;;28114:93;28203:3;28114:93;:::i;:::-;28232:2;28227:3;28223:12;28216:19;;27875:366;;;:::o;28247:419::-;28413:4;28451:2;28440:9;28436:18;28428:26;;28500:9;28494:4;28490:20;28486:1;28475:9;28471:17;28464:47;28528:131;28654:4;28528:131;:::i;:::-;28520:139;;28247:419;;;:::o;28672:240::-;28812:34;28808:1;28800:6;28796:14;28789:58;28881:23;28876:2;28868:6;28864:15;28857:48;28672:240;:::o;28918:366::-;29060:3;29081:67;29145:2;29140:3;29081:67;:::i;:::-;29074:74;;29157:93;29246:3;29157:93;:::i;:::-;29275:2;29270:3;29266:12;29259:19;;28918:366;;;:::o;29290:419::-;29456:4;29494:2;29483:9;29479:18;29471:26;;29543:9;29537:4;29533:20;29529:1;29518:9;29514:17;29507:47;29571:131;29697:4;29571:131;:::i;:::-;29563:139;;29290:419;;;:::o;29715:169::-;29855:21;29851:1;29843:6;29839:14;29832:45;29715:169;:::o;29890:366::-;30032:3;30053:67;30117:2;30112:3;30053:67;:::i;:::-;30046:74;;30129:93;30218:3;30129:93;:::i;:::-;30247:2;30242:3;30238:12;30231:19;;29890:366;;;:::o;30262:419::-;30428:4;30466:2;30455:9;30451:18;30443:26;;30515:9;30509:4;30505:20;30501:1;30490:9;30486:17;30479:47;30543:131;30669:4;30543:131;:::i;:::-;30535:139;;30262:419;;;:::o;30687:241::-;30827:34;30823:1;30815:6;30811:14;30804:58;30896:24;30891:2;30883:6;30879:15;30872:49;30687:241;:::o;30934:366::-;31076:3;31097:67;31161:2;31156:3;31097:67;:::i;:::-;31090:74;;31173:93;31262:3;31173:93;:::i;:::-;31291:2;31286:3;31282:12;31275:19;;30934:366;;;:::o;31306:419::-;31472:4;31510:2;31499:9;31495:18;31487:26;;31559:9;31553:4;31549:20;31545:1;31534:9;31530:17;31523:47;31587:131;31713:4;31587:131;:::i;:::-;31579:139;;31306:419;;;:::o;31731:191::-;31771:4;31791:20;31809:1;31791:20;:::i;:::-;31786:25;;31825:20;31843:1;31825:20;:::i;:::-;31820:25;;31864:1;31861;31858:8;31855:34;;;31869:18;;:::i;:::-;31855:34;31914:1;31911;31907:9;31899:17;;31731:191;;;;:::o;31928:225::-;32068:34;32064:1;32056:6;32052:14;32045:58;32137:8;32132:2;32124:6;32120:15;32113:33;31928:225;:::o;32159:366::-;32301:3;32322:67;32386:2;32381:3;32322:67;:::i;:::-;32315:74;;32398:93;32487:3;32398:93;:::i;:::-;32516:2;32511:3;32507:12;32500:19;;32159:366;;;:::o;32531:419::-;32697:4;32735:2;32724:9;32720:18;32712:26;;32784:9;32778:4;32774:20;32770:1;32759:9;32755:17;32748:47;32812:131;32938:4;32812:131;:::i;:::-;32804:139;;32531:419;;;:::o;32956:147::-;33057:11;33094:3;33079:18;;32956:147;;;;:::o;33109:114::-;;:::o;33229:398::-;33388:3;33409:83;33490:1;33485:3;33409:83;:::i;:::-;33402:90;;33501:93;33590:3;33501:93;:::i;:::-;33619:1;33614:3;33610:11;33603:18;;33229:398;;;:::o;33633:379::-;33817:3;33839:147;33982:3;33839:147;:::i;:::-;33832:154;;34003:3;33996:10;;33633:379;;;:::o;34018:831::-;34281:4;34319:3;34308:9;34304:19;34296:27;;34333:71;34401:1;34390:9;34386:17;34377:6;34333:71;:::i;:::-;34414:80;34490:2;34479:9;34475:18;34466:6;34414:80;:::i;:::-;34541:9;34535:4;34531:20;34526:2;34515:9;34511:18;34504:48;34569:108;34672:4;34663:6;34569:108;:::i;:::-;34561:116;;34687:72;34755:2;34744:9;34740:18;34731:6;34687:72;:::i;:::-;34769:73;34837:3;34826:9;34822:19;34813:6;34769:73;:::i;:::-;34018:831;;;;;;;;:::o
Swarm Source
ipfs://b5632136bded978f6cfa3dba3c40bb5b3d5723d024ec4713f83c78317ee99f78
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.